예제 #1
0
    def setTrianglePointIndex(self, triangleIndex, pointIndex, newVertexIndex):
        triangleArry = self.primitives.modifyVertices()
        triangleArry = triangleArry.modifyHandle(Thread.getCurrentThread())  # releases the array when deleted
        bytesPerVert = triangleArry.getArrayFormat().getTotalBytes()

        # BLOG C string to Python struct conversion https://docs.python.org/2/library/struct.html#format-characters
        fmtStr = triangleArry.getArrayFormat().getFormatString(False)  # True pads the bytes
        if fmtStr[0] != '=':
            fmtStr = '=' + fmtStr  # use standard sizing w/ = or native w/ @

        readerWriter = struct.Struct(fmtStr)  # creating the class instance saves on compiling the format string
        packed = readerWriter.pack(newVertexIndex)
        triangleArry.setSubdata(triangleIndex * bytesPerVert * 3 + pointIndex * bytesPerVert, bytesPerVert, packed)
예제 #2
0
def make_cloud_node(pts, col=LColorf(1.0, 0.0, 0.0, 1.0)):
    ptCloudData = GeomVertexData("PointCloudData", GeomVertexFormat.getV3c4(),
                                 GeomEnums.UH_static)
    vertexWriter = GeomVertexWriter(ptCloudData, Thread.getCurrentThread())
    vertexWriter.setColumn("vertex")
    colorWriter = GeomVertexWriter(ptCloudData, Thread.getCurrentThread())
    colorWriter.setColumn("color")

    for (x, y, z) in pts:
        vertexWriter.addData3(x, y, z)
        colorWriter.addData4(col)

    geomPts = GeomPoints(GeomEnums.UH_static)
    geomPts.addConsecutiveVertices(0, len(pts))
    geomPts.closePrimitive()

    geom = Geom(ptCloudData)
    geom.addPrimitive(geomPts)

    node = GeomNode("PointCloudNode")
    node.addGeom(geom, RenderState.makeEmpty())
    return node
예제 #3
0
def make_patch_node(pts, col=LColorf(0.0, 1.0, 0.0, 1.0)):
    splinePatchData = GeomVertexData("SplinePatchData",
                                     GeomVertexFormat.getV3c4(),
                                     GeomEnums.UH_static)
    vertexWriter = GeomVertexWriter(splinePatchData, Thread.getCurrentThread())
    vertexWriter.setColumn("vertex")
    colorWriter = GeomVertexWriter(splinePatchData, Thread.getCurrentThread())
    colorWriter.setColumn("color")

    for (x, y, z) in pts:
        vertexWriter.addData3(x, y, z)
        colorWriter.addData4(col)

    geomLines = GeomLines(GeomEnums.UH_static)
    geomLines.addConsecutiveVertices(0, len(pts))
    geomLines.addVertex(0)
    geomLines.closePrimitive()

    geom = Geom(splinePatchData)
    geom.addPrimitive(geomLines)

    node = GeomNode("SplinePatchNode")
    node.addGeom(geom, RenderState.makeEmpty())
    return node
예제 #4
0
    def setTrianglePointIndex(self, triangleIndex, pointIndex, newVertexIndex):
        triangleArry = self.primitives.modifyVertices()
        triangleArry = triangleArry.modifyHandle(
            Thread.getCurrentThread())  # releases the array when deleted
        bytesPerVert = triangleArry.getArrayFormat().getTotalBytes()

        # BLOG C string to Python struct conversion https://docs.python.org/2/library/struct.html#format-characters
        fmtStr = triangleArry.getArrayFormat().getFormatString(
            False)  # True pads the bytes
        if fmtStr[0] != '=':
            fmtStr = '=' + fmtStr  # use standard sizing w/ = or native w/ @

        readerWriter = struct.Struct(
            fmtStr
        )  # creating the class instance saves on compiling the format string
        packed = readerWriter.pack(newVertexIndex)
        triangleArry.setSubdata(
            triangleIndex * bytesPerVert * 3 + pointIndex * bytesPerVert,
            bytesPerVert, packed)
예제 #5
0
    def render_patch(self, pts):
        nodePath = NodePath(make_patch_node(pts), Thread.getCurrentThread())
        nodePath.reparentTo(self.render)

        nodePath.setRenderModeThickness(0.2)
        nodePath.setRenderModePerspective(True)
예제 #6
0
    def render_cloud(self, pts):
        nodePath = NodePath(make_cloud_node(pts), Thread.getCurrentThread())
        nodePath.reparentTo(self.render)

        nodePath.setRenderModeThickness(0.15)
        nodePath.setRenderModePerspective(False)