Head shape is now also shown in hull

This commit is contained in:
Jaime van Kessel 2015-09-03 16:34:25 +02:00
parent 57632f895e
commit 45f213cd82

View file

@ -29,16 +29,24 @@ class ConvexHullNode(SceneNode):
self._node.parentChanged.connect(self._onNodeParentChanged) self._node.parentChanged.connect(self._onNodeParentChanged)
self._node.decoratorsChanged.connect(self._onNodeDecoratorsChanged) self._node.decoratorsChanged.connect(self._onNodeDecoratorsChanged)
self._onNodeDecoratorsChanged(self._node) self._onNodeDecoratorsChanged(self._node)
self.convexHullHeadMesh = None
self._hull = hull self._hull = hull
hull_points = self._hull.getPoints() hull_points = self._hull.getPoints()
hull_mesh = self.createHullMesh(self._hull.getPoints())
if hull_mesh:
self.setMeshData(hull_mesh)
convex_hull_head = self._node.callDecoration("getConvexHullHead")
if convex_hull_head:
self.convexHullHeadMesh = self.createHullMesh(convex_hull_head.getPoints())
def createHullMesh(self, hull_points):
mesh = MeshData() mesh = MeshData()
if len(hull_points) > 3: if len(hull_points) > 3:
center = (hull_points.min(0) + hull_points.max(0)) / 2.0 center = (hull_points.min(0) + hull_points.max(0)) / 2.0
mesh.addVertex(center[0], 0.1, center[1]) mesh.addVertex(center[0], 0.1, center[1])
else: #Hull has not enough points else:
return return None
for point in hull_points: for point in hull_points:
mesh.addVertex(point[0], 0.1, point[1]) mesh.addVertex(point[0], 0.1, point[1])
indices = [] indices = []
@ -48,8 +56,7 @@ class ConvexHullNode(SceneNode):
indices.append([0, mesh.getVertexCount() - 1, 1]) indices.append([0, mesh.getVertexCount() - 1, 1])
mesh.addIndices(numpy.array(indices, numpy.int32)) mesh.addIndices(numpy.array(indices, numpy.int32))
return mesh
self.setMeshData(mesh)
def getWatchedNode(self): def getWatchedNode(self):
return self._node return self._node
@ -61,6 +68,8 @@ class ConvexHullNode(SceneNode):
if self.getParent(): if self.getParent():
self._material.setUniformValue("u_color", self._color) self._material.setUniformValue("u_color", self._color)
renderer.queueNode(self, material = self._material, transparent = True) renderer.queueNode(self, material = self._material, transparent = True)
if self.convexHullHeadMesh:
renderer.queueNode(self, material = self._material,transparent = True, mesh = self.convexHullHeadMesh)
return True return True