-
Notifications
You must be signed in to change notification settings - Fork 13
/
CompositeView.py
84 lines (72 loc) · 2.53 KB
/
CompositeView.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import numpy as np
from numpy.linalg import norm
from .View import View
from pyrender.color.ColorMap import ColorMap
class CompositeView(View):
@classmethod
def create_from_setting(cls, setting):
""" syntax:
{
"type": "composite",
"views": [
{
# other views
},
{
# other views
},
"unified_deform_magnitude": scalar
]
}
"""
views = [];
for view_setting in setting["views"]:
view = View.create_from_setting(view_setting);
if not isinstance(view, View):
raise RuntimeError(
"Subview of composite view must be a simple view!");
views.append(view);
instance = CompositeView(views);
return instance;
def __init__(self, views):
super(CompositeView, self).__init__();
self.views = views;
self.subviews = views;
vertices = self.vertices;
self.bmin = np.amin(vertices, axis=0);
self.bmax = np.amax(vertices, axis=0);
self.center = 0.5 * (self.bmin + self.bmax);
self.scale = 2.0 / norm(self.bmax - self.bmin);
@property
def vertices(self):
return np.vstack([view.vertices for view in self.subviews]);
@property
def faces(self):
offsets = [0] + [view.vertices.shape[0] for view in self.subviews];
offsets = offsets[0:-1];
return np.vstack([view.facets + offset
for view, offset in zip(self.subviews, offsets)]);
@property
def voxels(self):
offsets = [0] + [view.vertices.shape[0] for view in self.subviews];
offsets = offsets[0:-1];
return np.vstack([view.voxels + offset
for view, offset in zip(self.subviews, offsets)]);
@property
def vertex_normals(self):
return np.vstack([view.vertex_normals for view in self.subviews]);
@property
def face_normals(self):
return np.vstack([view.face_normals for view in self.subviews]);
@property
def vertex_colors(self):
return np.vstack([view.vertex_colors for view in self.subviews]);
@property
def with_colors(self):
return np.any([view.with_colors for view in self.subviews]);
@property
def with_uniform_colors(self):
return np.all([view.with_uniform_colors for view in self.subviews]);
@property
def with_alpha(self):
return np.any([view.with_alpha for view in self.subviews]);