示例#1
0
 def setToArtOfIllusionDictionary(self):
     "Set the shape of this carvable object info."
     vertexElement = self.elementNode.getFirstChildByLocalName('vertex')
     vertexPointElements = vertexElement.getChildNodesByLocalName('bf:Elem')
     for vertexPointElement in vertexPointElements:
         coordinateElement = vertexPointElement.getFirstChildByLocalName(
             'r')
         vertex = Vector3(float(coordinateElement.attributes['x']),
                          float(coordinateElement.attributes['y']),
                          float(coordinateElement.attributes['z']))
         self.vertexes.append(vertex)
     edgeElement = self.elementNode.getFirstChildByLocalName('edge')
     edgeSubelements = edgeElement.getChildNodesByLocalName('bf:Elem')
     for edgeSubelementIndex in xrange(len(edgeSubelements)):
         edgeSubelement = edgeSubelements[edgeSubelementIndex]
         vertexIndexes = [
             int(edgeSubelement.attributes['v1']),
             int(edgeSubelement.attributes['v2'])
         ]
         edge = face.Edge().getFromVertexIndexes(edgeSubelementIndex,
                                                 vertexIndexes)
         self.edges.append(edge)
     faceElement = self.elementNode.getFirstChildByLocalName('face')
     faceSubelements = faceElement.getChildNodesByLocalName('bf:Elem')
     for faceSubelementIndex in xrange(len(faceSubelements)):
         faceSubelement = faceSubelements[faceSubelementIndex]
         edgeIndexes = [
             int(faceSubelement.attributes['e1']),
             int(faceSubelement.attributes['e2']),
             int(faceSubelement.attributes['e3'])
         ]
         self.faces.append(face.Face().getFromEdgeIndexes(
             edgeIndexes, self.edges, faceSubelementIndex))
     removeListArtOfIllusionFromDictionary(self.elementNode.attributes,
                                           ['closed', 'smoothingMethod'])
示例#2
0
def getFromGNUTriangulatedSurfaceText(gnuTriangulatedSurfaceText,
                                      triangleMesh):
    "Initialize from a GNU Triangulated Surface Text."
    if gnuTriangulatedSurfaceText == '':
        return None
    lines = archive.getTextLines(gnuTriangulatedSurfaceText)
    linesWithoutComments = []
    for line in lines:
        if len(line) > 0:
            firstCharacter = line[0]
            if firstCharacter != '#' and firstCharacter != '!':
                linesWithoutComments.append(line)
    splitLine = linesWithoutComments[0].split()
    numberOfVertexes = int(splitLine[0])
    numberOfEdges = int(splitLine[1])
    numberOfFaces = int(splitLine[2])
    faceTriples = []
    for vertexIndex in xrange(numberOfVertexes):
        line = linesWithoutComments[vertexIndex + 1]
        splitLine = line.split()
        vertex = Vector3(float(splitLine[0]), float(splitLine[1]),
                         float(splitLine[2]))
        triangleMesh.vertexes.append(vertex)
    edgeStart = numberOfVertexes + 1
    for edgeIndex in xrange(numberOfEdges):
        line = linesWithoutComments[edgeIndex + edgeStart]
        splitLine = line.split()
        vertexIndexes = []
        for word in splitLine[:2]:
            vertexIndexes.append(int(word) - 1)
        edge = face.Edge().getFromVertexIndexes(edgeIndex, vertexIndexes)
        triangleMesh.edges.append(edge)
    faceStart = edgeStart + numberOfEdges
    for faceIndex in xrange(numberOfFaces):
        line = linesWithoutComments[faceIndex + faceStart]
        splitLine = line.split()
        edgeIndexes = []
        for word in splitLine[:3]:
            edgeIndexes.append(int(word) - 1)
        triangleMesh.faces.append(face.Face().getFromEdgeIndexes(
            edgeIndexes, triangleMesh.edges, faceIndex))
    return triangleMesh