def addSkinnedInfillBoundary(self, infillBoundaries, offsetY, upperZ, z): 'Add skinned infill boundary.' arounds = [] aroundWidth = 0.34321 * self.skinInfillInset endpoints = [] pixelTable = {} rotatedLoops = [] for infillBoundary in infillBoundaries: infillBoundaryRotated = euclidean.getRotatedComplexes(self.reverseRotation, infillBoundary) if offsetY != 0.0: for infillPointRotatedIndex, infillPointRotated in enumerate(infillBoundaryRotated): infillBoundaryRotated[infillPointRotatedIndex] = complex(infillPointRotated.real, infillPointRotated.imag - offsetY) rotatedLoops.append(infillBoundaryRotated) infillDictionary = triangle_mesh.getInfillDictionary( arounds, aroundWidth, self.skinInfillInset, self.skinInfillWidth, pixelTable, rotatedLoops) for infillDictionaryKey in infillDictionary.keys(): xIntersections = infillDictionary[infillDictionaryKey] xIntersections.sort() for segment in euclidean.getSegmentsFromXIntersections(xIntersections, infillDictionaryKey * self.skinInfillWidth): for endpoint in segment: endpoint.point = complex(endpoint.point.real, endpoint.point.imag + offsetY) endpoints.append(endpoint) infillPaths = euclidean.getPathsFromEndpoints(endpoints, 5.0 * self.skinInfillWidth, pixelTable, aroundWidth) for infillPath in infillPaths: infillRotated = euclidean.getRotatedComplexes(self.rotation, infillPath) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, infillRotated[0], upperZ) self.distanceFeedRate.addGcodeFromFeedRateThreadZ(self.feedRateMinute, infillRotated, self.travelFeedRateMinute, z) lastPointRotated = infillRotated[-1] self.oldLocation = Vector3(lastPointRotated.real, lastPointRotated.imag, upperZ) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, lastPointRotated, upperZ)
def addSkinnedInfillBoundary(self, infillBoundaries, offsetY, upperZ, z): 'Add skinned infill boundary.' aroundInset = 0.24321 * self.skinInfillInset arounds = [] aroundWidth = 0.24321 * self.skinInfillInset endpoints = [] pixelTable = {} rotatedLoops = [] for infillBoundary in infillBoundaries: infillBoundaryRotated = euclidean.getRotatedComplexes(self.reverseRotation, infillBoundary) if offsetY != 0.0: for infillPointRotatedIndex, infillPointRotated in enumerate(infillBoundaryRotated): infillBoundaryRotated[infillPointRotatedIndex] = complex(infillPointRotated.real, infillPointRotated.imag - offsetY) rotatedLoops.append(infillBoundaryRotated) infillDictionary = triangle_mesh.getInfillDictionary( aroundInset, arounds, aroundWidth, self.skinInfillInset, self.skinInfillWidth, pixelTable, rotatedLoops) for infillDictionaryKey in infillDictionary.keys(): xIntersections = infillDictionary[infillDictionaryKey] xIntersections.sort() for segment in euclidean.getSegmentsFromXIntersections(xIntersections, infillDictionaryKey * self.skinInfillWidth): for endpoint in segment: endpoint.point = complex(endpoint.point.real, endpoint.point.imag + offsetY) endpoints.append(endpoint) infillPaths = euclidean.getPathsFromEndpoints(endpoints, 5.0 * self.skinInfillWidth, pixelTable, aroundWidth) for infillPath in infillPaths: infillRotated = euclidean.getRotatedComplexes(self.rotation, infillPath) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, infillRotated[0], upperZ) self.distanceFeedRate.addGcodeFromFeedRateThreadZ(self.feedRateMinute, infillRotated, self.travelFeedRateMinute, z) lastPointRotated = infillRotated[-1] self.oldLocation = Vector3(lastPointRotated.real, lastPointRotated.imag, upperZ) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, lastPointRotated, upperZ)
def addSkinnedInfillBoundary(self, infillBoundaries, offsetY, upperZ, z): "Add skinned infill boundary." arounds = [] aroundWidth = 0.34321 * self.skinInfillInset endpoints = [] pixelTable = {} rotatedLoops = [] for infillBoundary in infillBoundaries: infillBoundaryRotated = euclidean.getRotatedComplexes(self.reverseRotation, infillBoundary) if offsetY != 0.0: for infillPointRotatedIndex, infillPointRotated in enumerate(infillBoundaryRotated): infillBoundaryRotated[infillPointRotatedIndex] = complex( infillPointRotated.real, infillPointRotated.imag - offsetY ) rotatedLoops.append(infillBoundaryRotated) infillDictionary = triangle_mesh.getInfillDictionary( arounds, aroundWidth, self.skinInfillInset, self.skinInfillWidth, pixelTable, rotatedLoops ) for infillDictionaryKey in infillDictionary.keys(): xIntersections = infillDictionary[infillDictionaryKey] xIntersections.sort() for segment in euclidean.getSegmentsFromXIntersections( xIntersections, infillDictionaryKey * self.skinInfillWidth ): for endpoint in segment: endpoint.point = complex(endpoint.point.real, endpoint.point.imag + offsetY) endpoints.append(endpoint) infillPaths = euclidean.getPathsFromEndpoints( endpoints, 5.0 * self.skinInfillWidth, pixelTable, self.sharpestProduct, aroundWidth ) for infillPath in infillPaths: addPointBeforeThread = True infillRotated = euclidean.getRotatedComplexes(self.rotation, infillPath) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: feedRateMinute = self.travelFeedRateMinute infillRotatedFirst = infillRotated[0] location = Vector3(infillRotatedFirst.real, infillRotatedFirst.imag, upperZ) distance = abs(location - self.oldLocation) if distance > 0.0: deltaZ = abs(upperZ - self.oldLocation.z) zFeedRateComponent = feedRateMinute * deltaZ / distance if zFeedRateComponent > self.maximumZFeedRateMinute: feedRateMinute *= self.maximumZFeedRateMinute / zFeedRateComponent self.distanceFeedRate.addGcodeMovementZWithFeedRate(feedRateMinute, infillRotatedFirst, upperZ) self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, infillRotatedFirst, z) addPointBeforeThread = False if addPointBeforeThread: self.distanceFeedRate.addGcodeMovementZ(infillRotated[0], z) self.distanceFeedRate.addLine("M101") for point in infillRotated[1:]: self.distanceFeedRate.addGcodeMovementZ(point, z) self.distanceFeedRate.addLine("M103") lastPointRotated = infillRotated[-1] self.oldLocation = Vector3(lastPointRotated.real, lastPointRotated.imag, upperZ) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate( self.maximumZFeedRateMinute, lastPointRotated, upperZ )
def addSkinnedInfillBoundary(self, infillBoundaries, offsetY, upperZ, z): 'Add skinned infill boundary.' arounds = [] aroundWidth = 0.34321 * self.skinInfillInset endpoints = [] pixelTable = {} rotatedLoops = [] for infillBoundary in infillBoundaries: infillBoundaryRotated = euclidean.getRotatedComplexes(self.reverseRotation, infillBoundary) if offsetY != 0.0: for infillPointRotatedIndex, infillPointRotated in enumerate(infillBoundaryRotated): infillBoundaryRotated[infillPointRotatedIndex] = complex(infillPointRotated.real, infillPointRotated.imag - offsetY) rotatedLoops.append(infillBoundaryRotated) infillDictionary = triangle_mesh.getInfillDictionary( arounds, aroundWidth, self.skinInfillInset, self.skinInfillWidth, pixelTable, rotatedLoops) for infillDictionaryKey in infillDictionary.keys(): xIntersections = infillDictionary[infillDictionaryKey] xIntersections.sort() for segment in euclidean.getSegmentsFromXIntersections(xIntersections, infillDictionaryKey * self.skinInfillWidth): for endpoint in segment: endpoint.point = complex(endpoint.point.real, endpoint.point.imag + offsetY) endpoints.append(endpoint) infillPaths = euclidean.getPathsFromEndpoints(endpoints, 5.0 * self.skinInfillWidth, pixelTable, self.sharpestProduct, aroundWidth) for infillPath in infillPaths: addPointBeforeThread = True infillRotated = euclidean.getRotatedComplexes(self.rotation, infillPath) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: feedRateMinute = self.travelFeedRateMinute infillRotatedFirst = infillRotated[0] location = Vector3(infillRotatedFirst.real, infillRotatedFirst.imag, upperZ) distance = abs(location - self.oldLocation) if distance > 0.0: deltaZ = abs(upperZ - self.oldLocation.z) zFeedRateComponent = feedRateMinute * deltaZ / distance if zFeedRateComponent > self.maximumZFeedRateMinute: feedRateMinute *= self.maximumZFeedRateMinute / zFeedRateComponent self.distanceFeedRate.addGcodeMovementZWithFeedRate(feedRateMinute, infillRotatedFirst, upperZ) self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, infillRotatedFirst, z) addPointBeforeThread = False if addPointBeforeThread: self.distanceFeedRate.addGcodeMovementZ(infillRotated[0], z) self.distanceFeedRate.addLine('M101') for point in infillRotated[1 :]: self.distanceFeedRate.addGcodeMovementZ(point, z) self.distanceFeedRate.addLine('M103') lastPointRotated = infillRotated[-1] self.oldLocation = Vector3(lastPointRotated.real, lastPointRotated.imag, upperZ) if upperZ > z and self.repository.hopWhenExtrudingInfill.value: self.distanceFeedRate.addGcodeMovementZWithFeedRate(self.maximumZFeedRateMinute, lastPointRotated, upperZ)