def getCarvedSVG(self, carving, fileName, repository): "Parse gnu triangulated surface text and store the carved gcode." matrix = map(float, repository.matrix.value.split(',')) for i in xrange(0, len(carving.vertexes)): x = carving.vertexes[i].x y = carving.vertexes[i].y z = carving.vertexes[i].z carving.vertexes[i] = Vector3( x * matrix[0] + y * matrix[3] + z * matrix[6], x * matrix[1] + y * matrix[4] + z * matrix[7], x * matrix[2] + y * matrix[5] + z * matrix[8]) if repository.alternativeCenter.value != '': carving2 = svg_writer.getCarving(repository.alternativeCenter.value) for i in xrange(0, len(carving2.vertexes)): x = carving2.vertexes[i].x y = carving2.vertexes[i].y z = carving2.vertexes[i].z carving2.vertexes[i] = Vector3( x * matrix[0] + y * matrix[3] + z * matrix[6], x * matrix[1] + y * matrix[4] + z * matrix[7], x * matrix[2] + y * matrix[5] + z * matrix[8]) minZ = carving2.getMinimumZ() minSize = carving2.getCarveCornerMinimum() maxSize = carving2.getCarveCornerMaximum() else: minZ = carving.getMinimumZ() minSize = carving.getCarveCornerMinimum() maxSize = carving.getCarveCornerMaximum() for v in carving.vertexes: v.z -= minZ + repository.objectSink.value v.x -= minSize.x + (maxSize.x - minSize.x) / 2 v.y -= minSize.y + (maxSize.y - minSize.y) / 2 v.x += repository.centerX.value v.y += repository.centerY.value layerHeight = repository.layerHeight.value edgeWidth = repository.edgeWidth.value carving.setCarveLayerHeight(layerHeight) importRadius = 0.5 * repository.importCoarseness.value * abs(edgeWidth) carving.setCarveImportRadius(max(importRadius, 0.001 * layerHeight)) carving.setCarveIsCorrectMesh(repository.correctMesh.value) loopLayers = carving.getCarveBoundaryLayers() if len(loopLayers) < 1: print('Warning, there are no slices for the model, this could be because the model is too small for the Layer Height.') return '' layerHeight = carving.getCarveLayerHeight() decimalPlacesCarried = euclidean.getDecimalPlacesCarried(repository.extraDecimalPlaces.value, layerHeight) edgeWidth = repository.edgeWidth.value svgWriter = svg_writer.SVGWriter( repository.addLayerTemplateToSVG.value, carving.getCarveCornerMaximum(), carving.getCarveCornerMinimum(), decimalPlacesCarried, carving.getCarveLayerHeight(), edgeWidth) truncatedRotatedBoundaryLayers = svg_writer.getTruncatedRotatedBoundaryLayers(loopLayers, repository) return svgWriter.getReplacedSVGTemplate(fileName, truncatedRotatedBoundaryLayers, 'carve', carving.getFabmetheusXML())
def performAction(slicedModel): "Get carved text." filename = slicedModel.runtimeParameters.inputFilename carving = svg_writer.getCarving(filename) if carving == None: return if config.getboolean(name, 'debug'): carvingFilename = filename[: filename.rfind('.')] + '.carving.xml' archive.writeFileText(carvingFilename , str(carving)) logger.info("Carving XML written to %s", carvingFilename) CarveSkein(slicedModel).carve(carving)
def performAction(slicedModel): "Get carved text." filename = slicedModel.runtimeParameters.inputFilename carving = svg_writer.getCarving(filename) if carving == None: return if config.getboolean(name, 'debug'): carvingFilename = filename[:filename.rfind('.')] + '.carving.xml' archive.writeFileText(carvingFilename, str(carving)) logger.info("Carving XML written to %s", carvingFilename) CarveSkein(slicedModel).carve(carving)
def getCraftedText(fileName, gcodeText='', repository=None): "Get carved text." if fileName.endswith('.svg'): gcodeText = archive.getTextIfEmpty(fileName, gcodeText) if gcodec.isProcedureDoneOrFileIsEmpty(gcodeText, 'carve'): return gcodeText carving = svg_writer.getCarving(fileName) if carving == None: return '' if repository == None: repository = CarveRepository() settings.getReadRepository(repository) return CarveSkein().getCarvedSVG(carving, fileName, repository)
def getCraftedText( self, fileName, gcodeText = '', repository = None ): "Get cleaved text." if fileName.endswith('.svg'): gcodeText = gcodec.getTextIfEmpty(fileName, gcodeText) if gcodec.isProcedureDoneOrFileIsEmpty( gcodeText, 'cleave'): return gcodeText carving = svg_writer.getCarving(fileName) if carving == None: return '' if repository == None: repository = CleaveRepository() settings.getReadRepository(repository) return CleaveSkein().getCarvedSVG( carving, fileName, repository )
def getCraftedText(fileName, gcodeText="", repository=None): "Get carved text." if fileName.endswith(".svg"): gcodeText = archive.getTextIfEmpty(fileName, gcodeText) if gcodec.isProcedureDoneOrFileIsEmpty(gcodeText, "carve"): return gcodeText carving = svg_writer.getCarving(fileName) if carving is None: return "" if repository is None: repository = CarveRepository() settings.getReadRepository(repository) return CarveSkein().getCarvedSVG(carving, fileName, repository)
def getCraftedText( fileName, gcodeText = '', repository=None): "Get chopped text." if fileName.endswith('.svg'): gcodeText = archive.getTextIfEmpty(fileName, gcodeText) if gcodec.isProcedureDoneOrFileIsEmpty( gcodeText, 'chop'): return gcodeText carving = svg_writer.getCarving(fileName) if carving is None: return '' if repository is None: repository = ChopRepository() settings.getReadRepository(repository) return ChopSkein().getCarvedSVG( carving, fileName, repository )
def getCarvedSVG(self, carving, fileName, repository): "Parse gnu triangulated surface text and store the carved gcode." scale = repository.scale.value rotate = repository.rotate.value / 180 * math.pi scaleX = scale scaleY = scale scaleZ = scale if repository.flipX.value == True: scaleX = -scaleX if repository.flipY.value == True: scaleY = -scaleY if repository.flipZ.value == True: scaleZ = -scaleZ swapXZ = repository.swapXZ.value swapYZ = repository.swapYZ.value mat00 = math.cos(rotate) * scaleX mat01 = -math.sin(rotate) * scaleY mat10 = math.sin(rotate) * scaleX mat11 = math.cos(rotate) * scaleY for i in xrange(0, len(carving.vertexes)): x = carving.vertexes[i].x y = carving.vertexes[i].y z = carving.vertexes[i].z if swapXZ: x, z = z, x if swapYZ: y, z = z, y carving.vertexes[i] = Vector3(x * mat00 + y * mat01, x * mat10 + y * mat11, z * scaleZ) if repository.alternativeCenter.value != '': carving2 = svg_writer.getCarving( repository.alternativeCenter.value) for i in xrange(0, len(carving2.vertexes)): x = carving2.vertexes[i].x y = carving2.vertexes[i].y z = carving2.vertexes[i].z if swapXZ: x, z = z, x if swapYZ: y, z = z, y carving2.vertexes[i] = Vector3(x * mat00 + y * mat01, x * mat10 + y * mat11, z * scaleZ) minZ = carving2.getMinimumZ() minSize = carving2.getCarveCornerMinimum() maxSize = carving2.getCarveCornerMaximum() else: minZ = carving.getMinimumZ() minSize = carving.getCarveCornerMinimum() maxSize = carving.getCarveCornerMaximum() for v in carving.vertexes: v.z -= minZ v.x -= minSize.x + (maxSize.x - minSize.x) / 2 v.y -= minSize.y + (maxSize.y - minSize.y) / 2 v.x += repository.centerX.value v.y += repository.centerY.value layerHeight = repository.layerHeight.value edgeWidth = repository.edgeWidth.value carving.setCarveLayerHeight(layerHeight) importRadius = 0.5 * repository.importCoarseness.value * abs(edgeWidth) carving.setCarveImportRadius(max(importRadius, 0.001 * layerHeight)) carving.setCarveIsCorrectMesh(repository.correctMesh.value) loopLayers = carving.getCarveBoundaryLayers() if len(loopLayers) < 1: print( 'Warning, there are no slices for the model, this could be because the model is too small for the Layer Height.' ) return '' layerHeight = carving.getCarveLayerHeight() decimalPlacesCarried = euclidean.getDecimalPlacesCarried( repository.extraDecimalPlaces.value, layerHeight) edgeWidth = repository.edgeWidth.value svgWriter = svg_writer.SVGWriter( repository.addLayerTemplateToSVG.value, carving.getCarveCornerMaximum(), carving.getCarveCornerMinimum(), decimalPlacesCarried, carving.getCarveLayerHeight(), edgeWidth) truncatedRotatedBoundaryLayers = svg_writer.getTruncatedRotatedBoundaryLayers( loopLayers, repository) return svgWriter.getReplacedSVGTemplate( fileName, truncatedRotatedBoundaryLayers, 'carve', carving.getFabmetheusXML())
def getCarvedSVG(self, carving, fileName, repository): "Parse gnu triangulated surface text and store the carved gcode." scale = repository.scale.value rotate = repository.rotate.value / 180 * math.pi scaleX = scale scaleY = scale scaleZ = scale if repository.flipX.value == True: scaleX = -scaleX if repository.flipY.value == True: scaleY = -scaleY if repository.flipZ.value == True: scaleZ = -scaleZ swapXZ = repository.swapXZ.value swapYZ = repository.swapYZ.value mat00 = math.cos(rotate) * scaleX mat01 =-math.sin(rotate) * scaleY mat10 = math.sin(rotate) * scaleX mat11 = math.cos(rotate) * scaleY for i in xrange(0, len(carving.vertexes)): x = carving.vertexes[i].x y = carving.vertexes[i].y z = carving.vertexes[i].z if swapXZ: x, z = z, x if swapYZ: y, z = z, y carving.vertexes[i] = Vector3( x * mat00 + y * mat01, x * mat10 + y * mat11, z * scaleZ) if repository.alternativeCenter.value != '': carving2 = svg_writer.getCarving(repository.alternativeCenter.value) for i in xrange(0, len(carving2.vertexes)): x = carving2.vertexes[i].x y = carving2.vertexes[i].y z = carving2.vertexes[i].z if swapXZ: x, z = z, x if swapYZ: y, z = z, y carving2.vertexes[i] = Vector3( x * mat00 + y * mat01, x * mat10 + y * mat11, z * scaleZ) minZ = carving2.getMinimumZ() minSize = carving2.getCarveCornerMinimum() maxSize = carving2.getCarveCornerMaximum() else: minZ = carving.getMinimumZ() minSize = carving.getCarveCornerMinimum() maxSize = carving.getCarveCornerMaximum() for v in carving.vertexes: v.z -= minZ v.x -= minSize.x + (maxSize.x - minSize.x) / 2 v.y -= minSize.y + (maxSize.y - minSize.y) / 2 v.x += repository.centerX.value v.y += repository.centerY.value layerHeight = repository.layerHeight.value edgeWidth = repository.edgeWidth.value carving.setCarveLayerHeight(layerHeight) importRadius = 0.5 * repository.importCoarseness.value * abs(edgeWidth) carving.setCarveImportRadius(max(importRadius, 0.001 * layerHeight)) carving.setCarveIsCorrectMesh(repository.correctMesh.value) loopLayers = carving.getCarveBoundaryLayers() if len(loopLayers) < 1: print('Warning, there are no slices for the model, this could be because the model is too small for the Layer Height.') return '' layerHeight = carving.getCarveLayerHeight() decimalPlacesCarried = euclidean.getDecimalPlacesCarried(repository.extraDecimalPlaces.value, layerHeight) edgeWidth = repository.edgeWidth.value svgWriter = svg_writer.SVGWriter( repository.addLayerTemplateToSVG.value, carving.getCarveCornerMaximum(), carving.getCarveCornerMinimum(), decimalPlacesCarried, carving.getCarveLayerHeight(), edgeWidth) truncatedRotatedBoundaryLayers = svg_writer.getTruncatedRotatedBoundaryLayers(loopLayers, repository) return svgWriter.getReplacedSVGTemplate(fileName, truncatedRotatedBoundaryLayers, 'carve', carving.getFabmetheusXML())
def getCarvedSVG(self, carving, fileName, repository): "Parse gnu triangulated surface text and store the carved gcode." matrix = map(float, repository.matrix.value.split(',')) for i in xrange(0, len(carving.vertexes)): x = carving.vertexes[i].x y = carving.vertexes[i].y z = carving.vertexes[i].z carving.vertexes[i] = Vector3( x * matrix[0] + y * matrix[3] + z * matrix[6], x * matrix[1] + y * matrix[4] + z * matrix[7], x * matrix[2] + y * matrix[5] + z * matrix[8]) if repository.alternativeCenter.value != '': carving2 = svg_writer.getCarving( repository.alternativeCenter.value) for i in xrange(0, len(carving2.vertexes)): x = carving2.vertexes[i].x y = carving2.vertexes[i].y z = carving2.vertexes[i].z carving2.vertexes[i] = Vector3( x * matrix[0] + y * matrix[3] + z * matrix[6], x * matrix[1] + y * matrix[4] + z * matrix[7], x * matrix[2] + y * matrix[5] + z * matrix[8]) minZ = carving2.getMinimumZ() minSize = carving2.getCarveCornerMinimum() maxSize = carving2.getCarveCornerMaximum() else: minZ = carving.getMinimumZ() minSize = carving.getCarveCornerMinimum() maxSize = carving.getCarveCornerMaximum() for v in carving.vertexes: v.z -= minZ v.x -= minSize.x + (maxSize.x - minSize.x) / 2 v.y -= minSize.y + (maxSize.y - minSize.y) / 2 v.x += repository.centerX.value v.y += repository.centerY.value layerHeight = repository.layerHeight.value edgeWidth = repository.edgeWidth.value carving.setCarveLayerHeight(layerHeight) importRadius = 0.5 * repository.importCoarseness.value * abs(edgeWidth) carving.setCarveImportRadius(max(importRadius, 0.001 * layerHeight)) carving.setCarveIsCorrectMesh(repository.correctMesh.value) loopLayers = carving.getCarveBoundaryLayers() if len(loopLayers) < 1: print( 'Warning, there are no slices for the model, this could be because the model is too small for the Layer Height.' ) return '' layerHeight = carving.getCarveLayerHeight() decimalPlacesCarried = euclidean.getDecimalPlacesCarried( repository.extraDecimalPlaces.value, layerHeight) edgeWidth = repository.edgeWidth.value svgWriter = svg_writer.SVGWriter( repository.addLayerTemplateToSVG.value, carving.getCarveCornerMaximum(), carving.getCarveCornerMinimum(), decimalPlacesCarried, carving.getCarveLayerHeight(), edgeWidth) truncatedRotatedBoundaryLayers = svg_writer.getTruncatedRotatedBoundaryLayers( loopLayers, repository) return svgWriter.getReplacedSVGTemplate( fileName, truncatedRotatedBoundaryLayers, 'carve', carving.getFabmetheusXML())