def readFromNodeFile(self, filebase, flagsAdd="", verbose=0): """ read triangle representation from filebase.node files. assumes the nbase data member is set appropriately """ reader = triIfaceUtils.TriangleInputFileReader() if verbose > 0: print 'readFromNodeAndEleFiles filebase= ', filebase #end if #could specify comment character too nodeDataInfo, nodeData = reader.readNodes(filebase, nbase=self.nbase) nodes, nodesA, nodesM = (nodeData['nodes'], nodeData['nodeAttributes'], nodeData['nodeMarkers']) if verbose > 3: print 'Nodes: nodeInfo= ', nodeDataInfo print """Nodes: nodes= \n%s\n nodeAttributes= \n%s\n nodeMarkers= \n%s """ % (nodes, nodesA, nodesM) #end if #now create an initial representation tri0 = triangulate.new() if nodesM == None: triangulate.setPoints(tri0, nodes) else: triangulate.setPointsAndMarkers(tri0, nodes, nodesM) if not nodesA == None: triangulate.setPointAttributes(tri0, nodesA) #run triangulate on it using the base flags and whatever else was #added flags = flagsAdd + self.baseFlags if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ', self.makeVoronoi, ' flags= ', flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0, verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0, verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags, tri0, self.trirep[0], self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags, tri0, self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #do I need to clean up explicitly? del tri0
def convertFromAdhPyUtilMesh(self, meshin, verbose=0): """ generate a Triangle mesh representation from an adhPyUtil mesh. This version will copy over the nodes and elements from the adhPyUtil mesh. Deletes the existing Triangle mesh and regenerates. """ #first check that the input mesh has the correct dimensions and #minimal information necessary spaceDim = 2 assert (meshin.nElementBoundaries_element == spaceDim + 1) assert (not meshin.nodeArray == None) assert (not meshin.elementNodesArray == None) #get a clean slate tri0 = triangulate.new() #don't set any markers for now #input array should be nNodes by spacedim nodesIn = meshin.nodeArray[:, :spaceDim] triangulate.setPoints(tri0, nodesIn) #triangle array should be nElements x 3 triAin = meshin.elementNodesArray[:, :spaceDim + 1] triangulate.setTriangles(tri0, triAin) flagsAdd = "r" #use element and node connections flags = flagsAdd + self.baseFlags if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ', self.makeVoronoi, ' flags= ', flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0, verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0, verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags, tri0, self.trirep[0], self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags, tri0, self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #clean up explicitly del tri0
def convertFromAdhPyUtilMesh(self,meshin,verbose=0): """ generate a Triangle mesh representation from an adhPyUtil mesh. This version will copy over the nodes and elements from the adhPyUtil mesh. Deletes the existing Triangle mesh and regenerates. """ #first check that the input mesh has the correct dimensions and #minimal information necessary spaceDim = 2 assert(meshin.nElementBoundaries_element == spaceDim+1) assert(not meshin.nodeArray == None) assert(not meshin.elementNodesArray == None) #get a clean slate tri0 = triangulate.new() #don't set any markers for now #input array should be nNodes by spacedim nodesIn = meshin.nodeArray[:,:spaceDim] triangulate.setPoints(tri0,nodesIn) #triangle array should be nElements x 3 triAin = meshin.elementNodesArray[:,:spaceDim+1] triangulate.setTriangles(tri0,triAin) flagsAdd = "r" #use element and node connections flags = flagsAdd+self.baseFlags if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ',self.makeVoronoi,' flags= ',flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0,verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0,verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags,tri0,self.trirep[0],self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags,tri0,self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #clean up explicitly del tri0
def tricall0(): import triIfaceUtils import triIfaceFileUtils #define some flags for how the script will run verbose = 2 #level of output tinfo = """triangulation: number of points = %d attributes per point = %d number of triangles = %d nodes per triangle = %d attributes per triangle = %d number of segments = %d number of holes = %d number of regions = %d number of edges = %d """ trin = triangulate.new() pointsin = Numeric.array([[0.0, 0.0], [1.0,0.0], [1.0,10.0], [0.0,10.0]]) npoints = pointsin.shape[0] pattsin = Numeric.array([0.0, 1.0, 11.0, 10.0]) pmarkin = Numeric.zeros((npoints,),Numeric.Int) pmarkin[1] = 2 pregion = Numeric.array([[0.5,5.0,7.0,0.1]]) if verbose > 3: print 'pregion shape=',pregion.shape #end verbose triangulate.setPointsAndMarkers(trin,pointsin,pmarkin) triangulate.setPointAttributes(trin,pattsin) triangulate.setRegions(trin,pregion) tiInfo = triangulate.getInfo(trin) print 'trin info says' print tinfo % tiInfo #create a simple flag list flags = "pczAevn" trimid = triangulate.new() vorout = triangulate.new() triangulate.applyTriangulate(flags,trin,trimid,vorout) tmInfo = triangulate.getInfo(trimid) print 'trimid info says' print tinfo % tmInfo if verbose > 1: points0 = triangulate.getPoints(trin) print 'in points=\n',points0 elems0 = triangulate.getTriangles(trin) print 'in elems=\n',elems0 elems1 = triangulate.getTriangles(trimid) print 'out elems=\n',elems1 #end verbose if verbose > 1: print 'calling printReport for input' triangulate.printReport(trin) print 'calling printReport for output' triangulate.printReport(trimid) #end verbose triIfaceUtils.writeOutTriangulation(trimid,"trimesh") #now refine intermediate triangle nelmsmid = tmInfo[2] midArea = Numeric.zeros((nelmsmid,),Numeric.Float) midArea[0] = 3.0 midArea[1] = 1.0 triangulate.setTriangleAreas(trimid,midArea) triout = triangulate.new() flags = "prazBP" triangulate.applyTriangulateNoVoronoi(flags,trimid,triout) triIfaceUtils.writeOutTriangulation(triout,"trimesh.1") #now view with showme showme = "../bin/showme" showmecmd = showme+" trimesh" failure = 0 failure = triIfaceFileUtils.checkFileExists(showme) failure = os.system(showmecmd) #manually delete things for debugging print 'deleting trin' del trin print 'deleting trimid' del trimid print 'deleting vor' del vorout print 'deleting triout' del triout return failure
def readFromPolyFile(self, filebase, flagsAdd="", verbose=0): """ read triangle representation from filebase.poly file assumes the nbase data member is set appropriately """ reader = triIfaceUtils.TriangleInputFileReader() if verbose > 0: print 'readFromPolyFile filebase= ', filebase #end if polyDataInfo, polyData = reader.readPoly(filebase, nbase=self.nbase, verbose=verbose) if verbose > 3: for type in ['node', 'segment', 'hole', 'region']: print 'Poly: ', type, 'Info= \n', polyDataInfo[type], '\n' #end for #end if nodes, nodesA, nodesM = (polyData['node']['nodes'], polyData['node']['nodeAttributes'], polyData['node']['nodeMarkers']) segments, segmentsM = (polyData['segment']['segments'], polyData['segment']['segmentMarkers']) holes = polyData['hole']['holes'] regions = polyData['region']['regions'] if verbose > 3: print """Poly file read: nodes = \n%s\n nodeAttributes= \n%s\n nodeMarkers= \n%s\n segments= \n%s\n segmentMarkers= \n%s\n holes = \n%s\n regions = \n%s\n """ % (nodes, nodesA, nodesM, segments, segmentsM, holes, regions) #end if tri0 = triangulate.new() if nodesM == None: triangulate.setPoints(tri0, nodes) else: triangulate.setPointsAndMarkers(tri0, nodes, nodesM) if not nodesA == None: triangulate.setPointAttributes(tri0, nodesA) #end if if segmentsM == None: triangulate.setSegments(tri0, segments) else: triangulate.setSegmentsAndMarkers(tri0, segments, segmentsM) #end if if (not holes == None): triangulate.setHoles(tri0, holes) #end if if (not regions == None): #print 'setting trin1 regions=\n',regions2 triangulate.setRegions(tri0, regions) #end if flags = flagsAdd + self.baseFlags if flags.find('p') == -1: print 'flags = ', flags, ' must have p, appending' flags += "p" #end if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ', self.makeVoronoi, ' flags= ', flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0, verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0, verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags, tri0, self.trirep[0], self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags, tri0, self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #clean up? del tri0
attributes per triangle = %d number of segments = %d number of holes = %d number of regions = %d number of edges = %d """ print sinfo % info #create a simple flag list flags = "rzenqv" triout = triangulate.new() vorout = triangulate.new() triangulate.applyTriangulate(flags,trin,triout,vorout) #get basic info about triangulation output oinfo =triangulate.getInfo(triout) print 'output triangulation has' print sinfo % oinfo vinfo =triangulate.getInfo(vorout) print 'voronio output has' print sinfo % vinfo print 'calling printReport for output' triangulate.printReport(triout)
def readFromPolyFile(self,filebase,flagsAdd="",verbose=0): """ read triangle representation from filebase.poly file assumes the nbase data member is set appropriately """ reader = triIfaceUtils.TriangleInputFileReader() if verbose > 0: print 'readFromPolyFile filebase= ',filebase #end if polyDataInfo,polyData = reader.readPoly(filebase,nbase=self.nbase, verbose=verbose) if verbose > 3: for type in ['node','segment','hole','region']: print 'Poly: ',type,'Info= \n',polyDataInfo[type],'\n' #end for #end if nodes,nodesA,nodesM = (polyData['node']['nodes'], polyData['node']['nodeAttributes'], polyData['node']['nodeMarkers']) segments,segmentsM = (polyData['segment']['segments'], polyData['segment']['segmentMarkers']) holes = polyData['hole']['holes'] regions = polyData['region']['regions'] if verbose > 3: print """Poly file read: nodes = \n%s\n nodeAttributes= \n%s\n nodeMarkers= \n%s\n segments= \n%s\n segmentMarkers= \n%s\n holes = \n%s\n regions = \n%s\n """ % (nodes,nodesA,nodesM,segments,segmentsM,holes,regions) #end if tri0 = triangulate.new() if nodesM == None: triangulate.setPoints(tri0,nodes) else: triangulate.setPointsAndMarkers(tri0,nodes,nodesM) if not nodesA == None: triangulate.setPointAttributes(tri0,nodesA) #end if if segmentsM == None: triangulate.setSegments(tri0,segments) else: triangulate.setSegmentsAndMarkers(tri0,segments,segmentsM) #end if if (not holes == None): triangulate.setHoles(tri0,holes) #end if if (not regions == None): #print 'setting trin1 regions=\n',regions2 triangulate.setRegions(tri0,regions) #end if flags = flagsAdd+self.baseFlags if flags.find('p') == -1: print 'flags = ',flags,' must have p, appending' flags += "p" #end if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ',self.makeVoronoi,' flags= ',flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0,verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0,verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags,tri0,self.trirep[0],self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags,tri0,self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #clean up? del tri0
def readFromNodeAndEleFiles(self,filebase,flagsAdd="",verbose=0): """ read triangle representation from filebase.node and filebase.ele files. assumes the nbase data member is set appropriately """ reader = triIfaceUtils.TriangleInputFileReader() if verbose > 0: print 'readFromNodeAndEleFiles filebase= ',filebase #end if nodeDataInfo,nodeData = reader.readNodes(filebase,nbase=self.nbase) nodes,nodesA,nodesM = (nodeData['nodes'], nodeData['nodeAttributes'], nodeData['nodeMarkers']) if verbose > 3: print 'Nodes: nodeInfo= ',nodeDataInfo print """Nodes: nodes= \n%s\n nodeAttributes= \n%s\n nodeMarkers= \n%s """ % (nodes,nodesA,nodesM) #end if triDataInfo,triData = reader.readTriangles(filebase,nbase=self.nbase) triangles,trianglesA = triData['triangles'],triData['triangleAttributes'] if verbose > 3: print 'Triangles: triInfo= ',triDataInfo print """Triangles: elems= \n%s\n triAttributes= \n%s """ % (triangles,trianglesA) #end if #now create an initial representation tri0 = triangulate.new() if nodesM == None: triangulate.setPoints(tri0,nodes) else: triangulate.setPointsAndMarkers(tri0,nodes,nodesM) if not nodesA == None: triangulate.setPointAttributes(tri0,nodesA) #end if triangulate.setTriangles(tri0,triangles) if not trianglesA == None: triangulate.setTriangleAttributes(tri0,trianglesA) #run triangulate on it using the base flags and whatever else was #added flags = flagsAdd+self.baseFlags if flags.find('v') >= 0: self.makeVoronoi = True if verbose > 0: print 'readNodeAndEle makeVoronoi= ',self.makeVoronoi,' flags= ',flags #end if self.lastFlags = flags #reset data representations if necessary self.resetDefaultTrirep(index=0,verbose=verbose) if self.makeVoronoi: self.resetDefaultVorrep(index=0,verbose=verbose) #end vorrep initialized if self.makeVoronoi: triangulate.applyTriangulate(flags,tri0,self.trirep[0],self.vorrep[0]) #handles no longer contain trivial representations self.trirepDefaultInit[0] = False self.vorrepDefaultInit[0] = False else: triangulate.applyTriangulateNoVoronoi(flags,tri0,self.trirep[0]) #handle no longer contains trivial representations self.trirepDefaultInit[0] = False #end if #do I need to clean up explicitly? del tri0
nodes per triangle = %d attributes per triangle = %d number of segments = %d number of holes = %d number of regions = %d number of edges = %d """ print sinfo % info #create a simple flag list flags = "rzenqv" triout = triangulate.new() vorout = triangulate.new() triangulate.applyTriangulate(flags, trin, triout, vorout) #get basic info about triangulation output oinfo = triangulate.getInfo(triout) print 'output triangulation has' print sinfo % oinfo vinfo = triangulate.getInfo(vorout) print 'voronio output has' print sinfo % vinfo print 'calling printReport for output' triangulate.printReport(triout) #delete trin manually to see what happens with data storage
def tricall0(): import triIfaceUtils import triIfaceFileUtils #define some flags for how the script will run verbose = 2 #level of output tinfo = """triangulation: number of points = %d attributes per point = %d number of triangles = %d nodes per triangle = %d attributes per triangle = %d number of segments = %d number of holes = %d number of regions = %d number of edges = %d """ trin = triangulate.new() pointsin = Numeric.array([[0.0, 0.0], [1.0, 0.0], [1.0, 10.0], [0.0, 10.0]]) npoints = pointsin.shape[0] pattsin = Numeric.array([0.0, 1.0, 11.0, 10.0]) pmarkin = Numeric.zeros((npoints, ), Numeric.Int) pmarkin[1] = 2 pregion = Numeric.array([[0.5, 5.0, 7.0, 0.1]]) if verbose > 3: print 'pregion shape=', pregion.shape #end verbose triangulate.setPointsAndMarkers(trin, pointsin, pmarkin) triangulate.setPointAttributes(trin, pattsin) triangulate.setRegions(trin, pregion) tiInfo = triangulate.getInfo(trin) print 'trin info says' print tinfo % tiInfo #create a simple flag list flags = "pczAevn" trimid = triangulate.new() vorout = triangulate.new() triangulate.applyTriangulate(flags, trin, trimid, vorout) tmInfo = triangulate.getInfo(trimid) print 'trimid info says' print tinfo % tmInfo if verbose > 1: points0 = triangulate.getPoints(trin) print 'in points=\n', points0 elems0 = triangulate.getTriangles(trin) print 'in elems=\n', elems0 elems1 = triangulate.getTriangles(trimid) print 'out elems=\n', elems1 #end verbose if verbose > 1: print 'calling printReport for input' triangulate.printReport(trin) print 'calling printReport for output' triangulate.printReport(trimid) #end verbose triIfaceUtils.writeOutTriangulation(trimid, "trimesh") #now refine intermediate triangle nelmsmid = tmInfo[2] midArea = Numeric.zeros((nelmsmid, ), Numeric.Float) midArea[0] = 3.0 midArea[1] = 1.0 triangulate.setTriangleAreas(trimid, midArea) triout = triangulate.new() flags = "prazBP" triangulate.applyTriangulateNoVoronoi(flags, trimid, triout) triIfaceUtils.writeOutTriangulation(triout, "trimesh.1") #now view with showme showme = "../bin/showme" showmecmd = showme + " trimesh" failure = 0 failure = triIfaceFileUtils.checkFileExists(showme) failure = os.system(showmecmd) #manually delete things for debugging print 'deleting trin' del trin print 'deleting trimid' del trimid print 'deleting vor' del vorout print 'deleting triout' del triout return failure