Example #1
0
    def __init__(self, width=1, depth=1, height=1, origin=Point3(0, 0, 0)):

        # Create vetex data format
        gvf = GeomVertexFormat.getV3n3()
        gvd = GeomVertexData("vertexData", gvf, Geom.UHStatic)

        # Create vetex writers for each type of data we are going to store
        gvwV = GeomVertexWriter(gvd, "vertex")
        gvwN = GeomVertexWriter(gvd, "normal")

        # Write out all points
        for p in GetPointsForBox(width, depth, height):
            gvwV.addData3f(Point3(p) - origin)

        # Write out all the normals
        for n in ((-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)):
            for i in range(4):
                gvwN.addData3f(n)

        geom = Geom(gvd)
        for i in range(0, gvwV.getWriteRow(), 4):

            # Create and add both triangles
            geom.addPrimitive(GetGeomTriangle(i, i + 1, i + 2))
            geom.addPrimitive(GetGeomTriangle(i, i + 2, i + 3))

        # Init the node path, wrapping the box
        geomNode = GeomNode("box")
        geomNode.addGeom(geom)
        NodePath.__init__(self, geomNode)
Example #2
0
    def __init__(self, radius=1.0, height=1.0, numSegs=16, degrees=360, axis=Vec3(0, 0, 1), origin=Point3(0, 0, 0)):

        # Create vetex data format
        gvf = GeomVertexFormat.getV3n3()
        gvd = GeomVertexData("vertexData", gvf, Geom.UHStatic)

        # Create vetex writers for each type of data we are going to store
        gvwV = GeomVertexWriter(gvd, "vertex")
        gvwN = GeomVertexWriter(gvd, "normal")

        # Get the points for an arc
        points = GetPointsForArc(degrees, numSegs, True)
        for i in range(len(points) - 1):

            # Rotate the points around the desired axis
            p1 = Point3(points[i][0], points[i][1], 0) * radius
            p1 = RotatePoint3(p1, Vec3(0, 0, 1), axis) - origin
            p2 = Point3(points[i + 1][0], points[i + 1][1], 0) * radius
            p2 = RotatePoint3(p2, Vec3(0, 0, 1), axis) - origin

            cross = (p2 - axis).cross(p1 - axis)
            cross.normalize()

            gvwV.addData3f(p1)
            gvwV.addData3f(axis * height - origin)
            gvwV.addData3f(p2)
            gvwN.addData3f(cross)
            gvwN.addData3f(cross)
            gvwN.addData3f(cross)

            # Base
            gvwV.addData3f(p2)
            gvwV.addData3f(Point3(0, 0, 0) - origin)
            gvwV.addData3f(p1)
            gvwN.addData3f(-axis)
            gvwN.addData3f(-axis)
            gvwN.addData3f(-axis)

        geom = Geom(gvd)
        for i in range(0, gvwV.getWriteRow(), 3):

            # Create and add triangle
            geom.addPrimitive(GetGeomTriangle(i, i + 1, i + 2))

        # Init the node path, wrapping the box
        geomNode = GeomNode("cone")
        geomNode.addGeom(geom)
        NodePath.__init__(self, geomNode)