def getConnectionIsCloseWithoutOverlap( self, location, path ): "Determine if the connection is close enough and does not overlap another thread." if len( path ) < 1: return False locationComplex = location.dropAxis( 2 ) segment = locationComplex - path[ - 1 ] segmentLength = abs( segment ) if segmentLength <= 0.0: return True segment /= segmentLength distance = self.connectingStepLength segmentEndLength = segmentLength - self.connectingStepLength while distance < segmentEndLength: alongPoint = distance * segment + path[ - 1 ] if not euclidean.isPointInsideLoops( self.boundaryLoops, alongPoint ): return False distance += self.connectingStepLength removedLayerPixelTable = self.layerPixelTable.copy() if self.oldLocation in self.maskPixelTableTable: euclidean.removePixelTableFromPixelTable( self.maskPixelTableTable[ self.oldLocation ], removedLayerPixelTable ) euclidean.addPathToPixelTable( path[ : - 2 ], removedLayerPixelTable, None, self.layerPixelWidth ) segmentTable = {} euclidean.addValueSegmentToPixelTable( path[ - 1 ], locationComplex, segmentTable, None, self.layerPixelWidth ) maskPixelTable = {} if location in self.maskPixelTableTable: maskPixelTable = self.maskPixelTableTable[ location ] if euclidean.isPixelTableIntersecting( removedLayerPixelTable, segmentTable, maskPixelTable ): return False euclidean.addPixelTableToPixelTable( segmentTable, self.layerPixelTable ) return True
def addSegmentToPixelTables( self, location, maskPixelTable, oldLocation ): "Add the segment to the layer and mask table." segmentTable = {} euclidean.addValueSegmentToPixelTable( oldLocation.dropAxis( 2 ), location.dropAxis( 2 ), segmentTable, None, self.layerPixelWidth ) euclidean.addPixelTableToPixelTable( segmentTable, self.layerPixelTable ) euclidean.addPixelTableToPixelTable( segmentTable, maskPixelTable ) self.maskPixelTableTable[ location ] = maskPixelTable self.maskPixelTableTable[ oldLocation ] = maskPixelTable
def addSegmentToPixelTables(self, location, maskPixelTable, oldLocation): "Add the segment to the layer and mask table." segmentTable = {} euclidean.addValueSegmentToPixelTable(oldLocation.dropAxis(2), location.dropAxis(2), segmentTable, None, self.layerPixelWidth) euclidean.addPixelTableToPixelTable(segmentTable, self.layerPixelTable) euclidean.addPixelTableToPixelTable(segmentTable, maskPixelTable) self.maskPixelTableTable[location] = maskPixelTable self.maskPixelTableTable[oldLocation] = maskPixelTable
def getConnectionIsCloseWithoutOverlap(self, location, path): "Determine if the connection is close enough and does not overlap another thread." if len(path) < 1: return False locationComplex = location.dropAxis(2) segment = locationComplex - path[-1] segmentLength = abs(segment) if segmentLength <= 0.0: return True segment /= segmentLength distance = self.connectingStepLength segmentEndLength = segmentLength - self.connectingStepLength while distance < segmentEndLength: alongPoint = distance * segment + path[-1] if not euclidean.isPointInsideLoops(self.boundaryLoops, alongPoint): return False distance += self.connectingStepLength removedLayerPixelTable = self.layerPixelTable.copy() if self.oldLocation in self.maskPixelTableTable: euclidean.removePixelTableFromPixelTable( self.maskPixelTableTable[self.oldLocation], removedLayerPixelTable) euclidean.addPathToPixelTable(path[:-2], removedLayerPixelTable, None, self.layerPixelWidth) segmentTable = {} euclidean.addValueSegmentToPixelTable(path[-1], locationComplex, segmentTable, None, self.layerPixelWidth) maskPixelTable = {} if location in self.maskPixelTableTable: maskPixelTable = self.maskPixelTableTable[location] if euclidean.isPixelTableIntersecting(removedLayerPixelTable, segmentTable, maskPixelTable): return False euclidean.addPixelTableToPixelTable(segmentTable, self.layerPixelTable) return True