def addTowers( self ): "Add towers." bottomLayerIndex = self.getBottomLayerIndex() if bottomLayerIndex == None: return self.addLayerLinesIfDifferent( bottomLayerIndex ) removedIsland = euclidean.getTransferClosestSurroundingLoop( self.oldOrderedLocation, self.islandLayers[ bottomLayerIndex ], self ) while 1: self.climbTower( removedIsland ) bottomLayerIndex = self.getBottomLayerIndex() if bottomLayerIndex == None: return self.addLayerLinesIfDifferent( bottomLayerIndex ) removedIsland = euclidean.getTransferClosestSurroundingLoop( self.oldOrderedLocation, self.islandLayers[ bottomLayerIndex ], self )
def getRemovedIslandAddLayerLinesIfDifferent( self, islands, layerIndex ): "Add gcode lines for the layer if it is different than the old bottom layer index." threadLayer = None if layerIndex != self.oldLayerIndex: self.oldLayerIndex = layerIndex threadLayer = self.threadLayers[ layerIndex ] self.distanceFeedRate.addLines( threadLayer.beforeExtrusionLines ) removedIsland = euclidean.getTransferClosestSurroundingLoop( self.oldOrderedLocation, islands, self ) if threadLayer != None: self.distanceFeedRate.addLines( threadLayer.afterExtrusionLines ) return removedIsland
def climbTower( self, removedIsland ): "Climb up the island to any islands directly above." outsetDistance = 1.5 * self.extrusionWidth for step in xrange( self.towerPreferences.maximumTowerHeight.value ): aboveIndex = self.oldLayerIndex + 1 if aboveIndex >= len( self.islandLayers ): return outsetRemovedLoop = removedIsland.boundingLoop.getOutsetBoundingLoop( outsetDistance ) islandsWithin = [] for island in self.islandLayers[ aboveIndex ]: if self.isInsideRemovedOutsideCone( island, outsetRemovedLoop, aboveIndex ): islandsWithin.append( island ) if len( islandsWithin ) < 1: return self.addLayerLinesIfDifferent( aboveIndex ) removedIsland = euclidean.getTransferClosestSurroundingLoop( self.oldOrderedLocation, islandsWithin, self ) self.islandLayers[ aboveIndex ].remove( removedIsland )