def readTriangles(self, filebase, commchar='#', nbase=0, verbose=0): """ read triangles specified in Triangle format see recordFormatDoc for format info returns dataInfo holding basic info about data read and array of data read data[0] = triangles data[1] = triangle attributes """ type = 'triangle' filename = filebase + '.ele' fout = open(filename, 'r') lines = fout.readlines() fout.close() dataInfo = TriangleFileUtils.findInitialFormatLine( lines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase, verbose=verbose) ndstart = dataInfo['dataStartLineNumber'] data, ilast = TriangleFileUtils.readSimpleFormattedDataEntries( lines[ndstart:], self.recordInfo[type], dataInfo, commchar=commchar, nbase=nbase, verbose=verbose) output = {} output['triangles'] = data[0] output['triangleAttributes'] = data[1] return dataInfo, output
def readTriangles(self,filebase,commchar='#',nbase=0,verbose=0): """ read triangles specified in Triangle format see recordFormatDoc for format info returns dataInfo holding basic info about data read and array of data read data[0] = triangles data[1] = triangle attributes """ type = 'triangle' filename = filebase+'.ele' fout = open(filename,'r') lines = fout.readlines() fout.close() dataInfo = TriangleFileUtils.findInitialFormatLine(lines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase,verbose=verbose) ndstart = dataInfo['dataStartLineNumber'] data,ilast= TriangleFileUtils.readSimpleFormattedDataEntries(lines[ndstart:], self.recordInfo[type], dataInfo, commchar=commchar, nbase=nbase, verbose=verbose) output = {} output['triangles'] = data[0] output['triangleAttributes'] = data[1] return dataInfo,output
def readPoly(self,filebase,commchar='#',nbase=0,verbose=0): """ read nodes, segments, holes, and regions specified in Triangle format see recordFormatDoc for format info returns dataInfo holding basic info about data read and array of data read this function is more tedious because of variations in input formats """ filename = filebase+'.poly' fout = open(filename,'r') lines = fout.readlines() fout.close() ##start with nodes type = 'node' nodeInfo = TriangleFileUtils.findInitialFormatLine(lines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase,verbose=verbose) nodestart = nodeInfo['dataStartLineNumber'] #mwf debug print "recordInfo ",self.recordInfo[type] nodeData,nlast=TriangleFileUtils.readSimpleFormattedDataEntries(lines[nodestart:], self.recordInfo[type], nodeInfo, commchar=commchar, nbase=nbase, verbose=verbose) ##mwf debug print "node type after read simple",nodeData[2].dtype ##now segments type = 'segment' #start reading after node section slines = lines[nlast:] segInfo0 = TriangleFileUtils.findInitialFormatLine(slines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase,verbose=verbose) #now add segment size into the expected record sizes per entry segInfo = segInfo0.copy() #segment size is 2 (beginning node and ending node) #segInfo0['recordSizes'] should be 0 or 1 assert(segInfo0['recordSizes'][0] == 0 or segInfo0['recordSizes'][0] == 1) segSize = 2 markerSize= int(segInfo0['recordSizes'][0]) segInfo['recordSizes'] = [segSize,markerSize] #first value per line is the entry number #record I is in entries recLocPerLine[I]:recLocPerLine[I+1] segInfo['recordLocationsPerLine'] = numpy.array([0,1,1+segSize, 1+segSize+markerSize], 'i') segdstart = segInfo['dataStartLineNumber'] segData,slast=TriangleFileUtils.readSimpleFormattedDataEntries(slines[segdstart:], self.recordInfo[type], segInfo, commchar=commchar, nbase=nbase, verbose=verbose) ##now holes type = 'hole' #start reading where segment section ended (cound from beginning of segment hlines= slines[slast+segdstart:] holeInfo0 = TriangleFileUtils.findInitialFormatLine(hlines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase,verbose=verbose) #now add hole size into the expected record sizes per entry holeInfo = holeInfo0.copy() #hole size is 2 (x and y) sdim = 2 holeInfo['recordSizes'] = [sdim] #no optional sizing, just may #or may not be data included holeInfo['recordLocationsPerLine'] = numpy.array([0,1,1+sdim],'i') holedstart = holeInfo['dataStartLineNumber'] holeData,hlast=TriangleFileUtils.readSimpleFormattedDataEntries(hlines[holedstart:], self.recordInfo[type], holeInfo, commchar=commchar, nbase=nbase, verbose=verbose) ##last read regional constraints type = 'region' #start where holes stopped rlines = hlines[hlast+holedstart:] regionInfo0 = TriangleFileUtils.findInitialFormatLine(rlines, self.recordInfoInit[type], self.initialLineFormat[type], commchar=commchar, nbase=nbase,verbose=verbose) #now add hole size into the expected record sizes per entry regionInfo = regionInfo0.copy() #region size is 4 (x,y, attribute, area constraint) #actually, Triangle allows user to omit one of the last two values! rsize = 4 regionInfo['recordSizes'] = [rsize] #no optional sizing, just may #or may not be data included regionInfo['recordLocationsPerLine'] = numpy.array([0,1,1+rsize],'i') regdstart = regionInfo['dataStartLineNumber'] # regionData,rlast=TriangleFileUtils.readSimpleFormattedDataEntries(rlines[regdstart:], # self.recordInfo[type], # regionInfo, # commchar=commchar, # nbase=nbase, # verbose=verbose) regionData,rlast=\ TriangleFileUtils.readSimpleFormattedDataEntriesLastOptional(rlines[regdstart:], self.recordInfo[type], regionInfo, commchar=commchar, nbase=nbase, verbose=verbose) outputInfo = {} outputData = {} #info outputInfo['node'] = nodeInfo outputInfo['segment']= segInfo outputInfo['hole'] = holeInfo outputInfo['region'] = regionInfo #data outputData['node'] = {} if not len(nodeData) == 3: for val in ['nodes','nodeAttributes','nodeMarkers']: outputData['node'][val] = None else: #end wrong size outputData['node']['nodes'] = nodeData[0] outputData['node']['nodeAttributes'] = nodeData[1] outputData['node']['nodeMarkers'] = nodeData[2] #end if outputData['segment']= {} if not len(segData) == 2: for val in ['segments','segmentMarkers']: outputData['segment'][val] = None else: #end wrong size outputData['segment']['segments'] = segData[0] outputData['segment']['segmentMarkers']= segData[1] #end outputData['hole'] = {} outputData['hole']['holes'] = None if not holeData is None: outputData['hole']['holes'] = holeData[0] outputData['region'] = {} outputData['region']['regions'] = None if not regionData is None: outputData['region']['regions'] = regionData[0] return outputInfo,outputData