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)
 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
     )
示例#3
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)
示例#4
0
 def test_vertices_equal(self):
     v0 = xmlscene.vertex(x=1.0, y=2.0, z=3.0)
     v1 = xmlscene.vertex(x=1.0, y=2.0, z=3.0)
     v2 = xmlscene.vertex(x=1.0, y=2.0, z=-3.0)
     self.assert_(verticesEqual(v0, v0))
     self.assert_(verticesEqual(v0, v1))
     self.assert_(verticesEqual(v1, v0))
     self.assert_(not verticesEqual(v0, v2))
     self.assert_(not verticesEqual(v2, v1))
示例#5
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))
 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)
    def addTriangle(self, triangle, triangle_parent):
        self.setTriangleProperties(triangle, triangle_parent)

        # apply the transformation matrix to each vertex of the triangle
        vertices = []
        for i in range(len(triangle.get_vertex())):
            vertex = triangle.get_vertex()[i]
            # NOTE: do not modify vertex directly, but create a new vertex
            #       so that vertices created from references do not update
            #       with the transformed vertex
            row_vector = numpy.matrix([[vertex.x], [vertex.y], [vertex.z], [1.0]])
            transformed_vector = self.transformation_matrix * row_vector
            h_inv = 1.0 / transformed_vector.item(3, 0)
            tv_x = transformed_vector.item(0, 0) * h_inv
            tv_y = transformed_vector.item(1, 0) * h_inv
            tv_z = transformed_vector.item(2, 0) * h_inv
            vertices.append(xmlscene.vertex(x=tv_x, y=tv_y, z=tv_z))
        triangle.set_vertex(vertices)
        self.triangles.append(triangle)
示例#8
0
 def test_vector_list_for_vertex(self):
     v = xmlscene.vertex(x=78.9, y=9485.209, z=-10.0234)
     self.assert_(vectorListForVertex(v) == [78.9, 9485.209, -10.0234])
示例#9
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)
示例#10
0
def centreOfVertices(v0, v1):
    centre = map(lambda p, q: average([p, q]), vectorListForVertex(v0), vectorListForVertex(v1))
    return xmlscene.vertex(x=centre[0], y=centre[1], z=centre[2])
示例#11
0
    def triangulateCuboid(self, cuboid):
        # Each rectangle of the cuboid is divided into 2 triangles
        # TODO: original rrv's cuboids are 1x1x1 with center at 0,0,0 => extend?

        # left
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=-0.5, y=-0.5, z=-0.5),
                xmlscene.vertex(x=-0.5, y=-0.5, z=+0.5),
                xmlscene.vertex(x=-0.5, y=+0.5, z=+0.5),
                xmlscene.vertex(x=-0.5, y=+0.5, z=-0.5),
            ],
            cuboid,
        )
        # right
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=+0.5, y=-0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=+0.5),
                xmlscene.vertex(x=+0.5, y=-0.5, z=+0.5),
            ],
            cuboid,
        )
        # down
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=-0.5, y=-0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=-0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=-0.5, z=+0.5),
                xmlscene.vertex(x=-0.5, y=-0.5, z=+0.5),
            ],
            cuboid,
        )
        # up
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=-0.5, y=+0.5, z=-0.5),
                xmlscene.vertex(x=-0.5, y=+0.5, z=+0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=+0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=-0.5),
            ],
            cuboid,
        )
        # rear
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=-0.5, y=-0.5, z=-0.5),
                xmlscene.vertex(x=-0.5, y=+0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=-0.5),
                xmlscene.vertex(x=+0.5, y=-0.5, z=-0.5),
            ],
            cuboid,
        )
        # front
        self.triangulateRectangle(
            [
                xmlscene.vertex(x=-0.5, y=-0.5, z=+0.5),
                xmlscene.vertex(x=+0.5, y=-0.5, z=+0.5),
                xmlscene.vertex(x=+0.5, y=+0.5, z=+0.5),
                xmlscene.vertex(x=-0.5, y=+0.5, z=+0.5),
            ],
            cuboid,
        )
示例#12
0
 def test_vertex_centre(self):
     v0 = xmlscene.vertex(x=1.0, y=2.0, z=3.0)
     v1 = xmlscene.vertex(x=3.0, y=2.0, z=1.0)
     self.assert_(centreOfVertices(v0, v1).x == 2.0)
     self.assert_(centreOfVertices(v0, v1).y == 2.0)
     self.assert_(centreOfVertices(v0, v1).z == 2.0)
示例#13
0
def triangleCentre(triangle):
    v = map(vectorListForVertex, vertexListForTriangle(triangle))
    centre = map(lambda p, q, r: average([p, q, r]), v[0], v[1], v[2])
    return xmlscene.vertex(x=centre[0], y=centre[1], z=centre[2])
示例#14
0
 def test_distance_between_vertices(self):
     v0 = xmlscene.vertex(x=1.0, y=2.0, z=3.0)
     v1 = xmlscene.vertex(x=2.3, y=1.0, z=1.0)
     self.assert_(distanceBetweenVertices(v0, v1) == magnitude([-1.3, 1.0, 2.0]))
示例#15
0
 def test_zero_vertex(self):
     self.assert_(verticesEqual(zeroVertex(), xmlscene.vertex(x=0.0, y=0.0, z=0.0)))
示例#16
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])
示例#17
0
def copyVertex(v):
    return xmlscene.vertex(x=v.x, y=v.y, z=v.z)
示例#18
0
def zeroVertex():
    return xmlscene.vertex(x=0.0, y=0.0, z=0.0)
示例#19
0
 def test_vector_from_vertices(self):
     v0 = xmlscene.vertex(x=1.0, y=2.0, z=3.0)
     v1 = xmlscene.vertex(x=0.0, y=0.5, z=4.0)
     self.assert_(vectorFromVertices(v0, v1) == [1.0, 1.5, -1.0])