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'])
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