Esempio n. 1
0
    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 = triIfaceFileUtils.findInitialFormatLine(
            lines,
            self.recordInfoInit[type],
            self.initialLineFormat[type],
            commchar=commchar,
            nbase=nbase,
            verbose=verbose)

        ndstart = dataInfo['dataStartLineNumber']
        data, ilast = triIfaceFileUtils.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
Esempio n. 2
0
    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 = triIfaceFileUtils.findInitialFormatLine(lines,
                                                           self.recordInfoInit[type],
                                                           self.initialLineFormat[type],
                                                           commchar=commchar,
                                                           nbase=nbase,verbose=verbose)

        ndstart   = dataInfo['dataStartLineNumber']
        data,ilast= triIfaceFileUtils.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
Esempio n. 3
0
    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 = triIfaceFileUtils.findInitialFormatLine(
            lines,
            self.recordInfoInit[type],
            self.initialLineFormat[type],
            commchar=commchar,
            nbase=nbase,
            verbose=verbose)

        nodestart = nodeInfo['dataStartLineNumber']
        nodeData, nlast = triIfaceFileUtils.readSimpleFormattedDataEntries(
            lines[nodestart:],
            self.recordInfo[type],
            nodeInfo,
            commchar=commchar,
            nbase=nbase,
            verbose=verbose)

        ##now segments
        type = 'segment'
        #start reading after node section
        slines = lines[nlast:]
        segInfo0 = triIfaceFileUtils.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'] = Numeric.array(
            [0, 1, 1 + segSize, 1 + segSize + markerSize], Numeric.Int)
        segdstart = segInfo['dataStartLineNumber']
        segData, slast = triIfaceFileUtils.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 = triIfaceFileUtils.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'] = Numeric.array([0, 1, 1 + sdim],
                                                           Numeric.Int)

        holedstart = holeInfo['dataStartLineNumber']
        holeData, hlast = triIfaceFileUtils.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 = triIfaceFileUtils.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'] = Numeric.array([0, 1, 1 + rsize],
                                                             Numeric.Int)

        regdstart = regionInfo['dataStartLineNumber']
        #         regionData,rlast=triIfaceFileUtils.readSimpleFormattedDataEntries(rlines[regdstart:],
        #                                                                           self.recordInfo[type],
        #                                                                           regionInfo,
        #                                                                           commchar=commchar,
        #                                                                           nbase=nbase,
        #                                                                           verbose=verbose)
        regionData,rlast=\
           triIfaceFileUtils.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 == None:
            outputData['hole']['holes'] = holeData[0]

        outputData['region'] = {}
        outputData['region']['regions'] = None
        if not regionData == None:
            outputData['region']['regions'] = regionData[0]

        return outputInfo, outputData
Esempio n. 4
0
    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 = triIfaceFileUtils.findInitialFormatLine(lines,
                                                           self.recordInfoInit[type],
                                                           self.initialLineFormat[type],
                                                           commchar=commchar,
                                                           nbase=nbase,verbose=verbose)

        nodestart   = nodeInfo['dataStartLineNumber']
        nodeData,nlast=triIfaceFileUtils.readSimpleFormattedDataEntries(lines[nodestart:],
                                                                        self.recordInfo[type],
                                                                        nodeInfo,
                                                                        commchar=commchar,
                                                                        nbase=nbase,
                                                                        verbose=verbose)
        
        ##now segments
        type = 'segment'
        #start reading after node section
        slines   = lines[nlast:]
        segInfo0 = triIfaceFileUtils.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'] = Numeric.array([0,1,1+segSize,
                                                           1+segSize+markerSize],
                                                          Numeric.Int)
        segdstart   = segInfo['dataStartLineNumber']
        segData,slast=triIfaceFileUtils.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 = triIfaceFileUtils.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'] = Numeric.array([0,1,1+sdim],Numeric.Int)

        holedstart   = holeInfo['dataStartLineNumber']
        holeData,hlast=triIfaceFileUtils.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 = triIfaceFileUtils.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'] = Numeric.array([0,1,1+rsize],Numeric.Int)

        regdstart   = regionInfo['dataStartLineNumber']
#         regionData,rlast=triIfaceFileUtils.readSimpleFormattedDataEntries(rlines[regdstart:],
#                                                                           self.recordInfo[type],
#                                                                           regionInfo,
#                                                                           commchar=commchar,
#                                                                           nbase=nbase,
#                                                                           verbose=verbose)
        regionData,rlast=\
           triIfaceFileUtils.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 == None:
            outputData['hole']['holes']  = holeData[0]
        
        outputData['region'] = {}
        outputData['region']['regions'] = None
        if not regionData == None:
            outputData['region']['regions'] = regionData[0]

        return outputInfo,outputData