Exemplo n.º 1
0
    def triangulateTriangleSet(self, triangleset):
        # all the triangles must come before any trianglenexts
        triangles = triangleset.get_triangle()
        for triangle in triangles:
            triangle_vertices = triangle.get_vertex()
            vertices = []
            for i in xrange(3):
                vertices.append(
                    xmlscene.vertex(x=triangle_vertices[i].x, y=triangle_vertices[i].y, z=triangle_vertices[i].z)
                )
            self.addTriangle(xmlscene.triangle(vertex=vertices), triangleset)

        # trianglenext implies its vertices from the previous triangle or trianglenext
        v0 = triangles[len(triangles) - 1].vertex[0]
        v1 = triangles[len(triangles) - 1].vertex[1]
        v2 = triangles[len(triangles) - 1].vertex[2]
        next_triangles = triangleset.trianglenext
        for i in xrange(len(next_triangles)):
            if i % 2 == 0:
                v0 = v1
                v1 = next_triangles[i].get_vertex()
            else:
                v0 = v2
                v2 = next_triangles[i].get_vertex()
            vertices = [
                xmlscene.vertex(x=v0.x, y=v0.y, z=v0.z),
                xmlscene.vertex(x=v1.x, y=v1.y, z=v1.z),
                xmlscene.vertex(x=v2.x, y=v2.y, z=v2.z),
            ]
            self.addTriangle(xmlscene.triangle(vertex=vertices), triangleset)
Exemplo n.º 2
0
 def triangulateBase(self, base, base_parent):
     # base has the same specification as rectangle in triangulateRectangle
     self.addTriangle(
         xmlscene.triangle(vertex=[base[1], base[0], xmlscene.vertex(x=0.0, z=0.0, y=base[1].y)]), base_parent
     )
     self.addTriangle(
         xmlscene.triangle(vertex=[base[3], base[2], xmlscene.vertex(x=0.0, z=0.0, y=base[3].y)]), base_parent
     )
Exemplo n.º 3
0
def divideTriangle(triangle):
    # returns 4 triangles that represent the divided triangle
    centre = shiftListLeft(map(centreOfVertices, vertexListForTriangle(triangle), shiftListLeft(vertexListForTriangle(triangle), 1)), 1)
    triangles = map(lambda t_v, c_2, c_1: xmlscene.triangle(vertex=[t_v, c_2, c_1]), 
                    triangle.vertex,
                    shiftListLeft(centre, 2),
                    shiftListLeft(centre, 1))
    triangles.append(xmlscene.triangle(vertex=[centre[0], centre[1], centre[2]]))
    return triangles
Exemplo n.º 4
0
 def test_triangle_centre(self):
     v0 = xmlscene.vertex(x=0.0, y=0.0, z=0.0)
     v1 = xmlscene.vertex(x=1.0, y=2.0, z=10.0)
     v2 = xmlscene.vertex(x=2.0, y=-1.0, z=5.0)
     triangle = xmlscene.triangle(vertex=[v0, v1, v2])
     c = triangleCentre(triangle)
     self.assert_(c[0] == 1.0)
     self.assert_(c[1] == 1.0/3.0)
     self.assert_(c[2] == 5.0)
Exemplo n.º 5
0
 def triangulateTeapot(self, teapot):
     # A Utah Teapot. Bottom of this teapot
     # is at 0,0,0.
     for i in xrange(len(utah_teapot.teapot_mesh_indices)):
         vertices = []
         for j in xrange(3):
             vertex = xmlscene.vertex(
                 x=utah_teapot.teapot_mesh_vertices[utah_teapot.teapot_mesh_indices[i][2 - j]][0],
                 y=utah_teapot.teapot_mesh_vertices[utah_teapot.teapot_mesh_indices[i][2 - j]][2],
                 z=utah_teapot.teapot_mesh_vertices[utah_teapot.teapot_mesh_indices[i][2 - j]][1],
             )
             vertices.append(vertex)
         self.addTriangle(xmlscene.triangle(vertex=vertices), teapot)
Exemplo n.º 6
0
 def test_divide_triangle(self):
     v0 = xmlscene.vertex(x=0.0, y=0.0, z=0.0)
     v1 = xmlscene.vertex(x=1.0, y=2.0, z=10.0)
     v2 = xmlscene.vertex(x=2.0, y=-1.0, z=5.0)
     triangle = xmlscene.triangle(vertex=[v0, v1, v2])
     triangles = divideTriangle(triangle)
     self.assert_(len(triangles) == 4)
     c01 = centreOfVertices(v0, v1)
     c12 = centreOfVertices(v1, v2)
     c20 = centreOfVertices(v2, v0)
     self.assert_(verticesEqual(triangles[0].vertex[0], v0))
     self.assert_(verticesEqual(triangles[0].vertex[1], c01))
     self.assert_(verticesEqual(triangles[0].vertex[2], c20))
     self.assert_(verticesEqual(triangles[1].vertex[0], v1))
     self.assert_(verticesEqual(triangles[1].vertex[1], c12))
     self.assert_(verticesEqual(triangles[1].vertex[2], c01))
     self.assert_(verticesEqual(triangles[2].vertex[0], v2))
     self.assert_(verticesEqual(triangles[2].vertex[1], c20))
     self.assert_(verticesEqual(triangles[2].vertex[2], c12))
     self.assert_(verticesEqual(triangles[3].vertex[0], c12))
     self.assert_(verticesEqual(triangles[3].vertex[1], c20))
     self.assert_(verticesEqual(triangles[3].vertex[2], c01))
Exemplo n.º 7
0
 def test_triangle_area(self):
     v0 = xmlscene.vertex(x=0.0, y=2.0, z=0.0)
     v1 = xmlscene.vertex(x=0.0, y=2.0, z=3.0)
     v2 = xmlscene.vertex(x=4.0, y=2.0, z=3.0)
     triangle = xmlscene.triangle(vertex=[v0, v1, v2])
     self.assert_(triangleArea(triangle) == 6.0)
Exemplo n.º 8
0
 def test_vertex_list_for_triangle(self):
     v0 = xmlscene.vertex(x=0.0, y=1.0, z=2.0)
     v1 = xmlscene.vertex(x=8.4, y=-10.598, z=0.0)
     v2 = xmlscene.vertex(x=3.1415, y=0.0, z=-1000)
     triangle = xmlscene.triangle(vertex=[v0, v1, v2])
     self.assert_(vertexListForTriangle(triangle) == [v0, v1, v2])
Exemplo n.º 9
0
 def triangulateRectangle(self, rectangle, rectangle_parent):
     # rectangle = [4 xmlscene.vertex objects]
     # the vertices must be given in either ccw or cw order,
     # and we split the rectangle's diagonal in the given order
     self.addTriangle(xmlscene.triangle(vertex=[rectangle[0], rectangle[1], rectangle[2]]), rectangle_parent)
     self.addTriangle(xmlscene.triangle(vertex=[rectangle[0], rectangle[2], rectangle[3]]), rectangle_parent)