5 from . import vertexarray
11 class VertexArrayMap(object):
12 def __init__(self, materials):
13 self.materials=materials
14 self.vertexArrayMap={}
16 def getVertexArray(self, material_index):
17 material=self.materials[material_index]
18 if not material in self.vertexArrayMap:
19 vertexArray=vertexarray.VertexArray([])
20 self.vertexArrayMap[material]=vertexArray
21 return self.vertexArrayMap[material]
23 def addTriangle(self, material_index, v0, v1, v2):
24 vertexArray=self.getVertexArray(material_index)
25 vertexArray.vertices.append(v0.x)
26 vertexArray.vertices.append(v0.y)
27 vertexArray.vertices.append(v0.z)
28 vertexArray.vertices.append(v1.x)
29 vertexArray.vertices.append(v1.y)
30 vertexArray.vertices.append(v1.z)
31 vertexArray.vertices.append(v2.x)
32 vertexArray.vertices.append(v2.y)
33 vertexArray.vertices.append(v2.z)
36 for m, vertexArray in self.vertexArrayMap.items():
42 for v in self.vertexArrayMap.values():
43 v.vertices=numpy.array(v.vertices, 'f')
46 頂点配列をマテリアル毎に分別する(UV付き)
48 class VertexArrayMapWithUV(object):
51 self.vertexArrayWithUVMap={}
53 def addMaterial(self, material):
54 self.materials.append(material)
55 self.vertexArrayWithUVMap[material]=vertexarray.VertexArrayWithUV([], [])
57 def getVertexArray(self, material_index):
58 material=self.materials[material_index]
59 return self.vertexArrayWithUVMap[material]
61 def addTriangle(self, material_index, v0, v1, v2, uv0, uv1, uv2):
62 vertexArray=self.getVertexArray(material_index)
63 vertexArray.vertices.append(v0.x)
64 vertexArray.vertices.append(v0.y)
65 vertexArray.vertices.append(v0.z)
66 vertexArray.vertices.append(v1.x)
67 vertexArray.vertices.append(v1.y)
68 vertexArray.vertices.append(v1.z)
69 vertexArray.vertices.append(v2.x)
70 vertexArray.vertices.append(v2.y)
71 vertexArray.vertices.append(v2.z)
72 vertexArray.uvarray.append(uv0.x)
73 vertexArray.uvarray.append(uv0.y)
74 vertexArray.uvarray.append(uv1.x)
75 vertexArray.uvarray.append(uv1.y)
76 vertexArray.uvarray.append(uv2.x)
77 vertexArray.uvarray.append(uv2.y)
80 for m, vertexArray in self.vertexArrayWithUVMap.items():
86 for v in self.vertexArrayWithUVMap.values():
87 v.vertices=numpy.array(v.vertices, 'f')
88 v.uvarray=numpy.array(v.uvarray, 'f')
90 def onInitialize(self):
91 #[m.onInitialize() for m in self.materials]
94 def get_boundingbox(self):
95 if len(self.vertexArrayWithUVMap)==0:
96 return ([0, 0, 0], [0, 0, 0])
98 gen=iter(self.vertexArrayWithUVMap.values())
99 (min_v, max_v)=next(gen).get_boundingbox()
101 (va_min_v, va_max_v)=va.get_boundingbox()
102 min_v[0]=min(min_v[0], va_min_v[0])
103 min_v[1]=min(min_v[1], va_min_v[1])
104 min_v[2]=min(min_v[2], va_min_v[2])
105 max_v[0]=max(max_v[0], va_max_v[0])
106 max_v[1]=max(max_v[1], va_max_v[1])
107 max_v[2]=max(max_v[2], va_max_v[2])
108 return (min_v, max_v)