Exemplo n.º 1
0
	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())
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
	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 )
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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 )
Exemplo n.º 8
0
    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())
Exemplo n.º 9
0
Arquivo: carve.py Projeto: Ademan/Cura
	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())
Exemplo n.º 10
0
    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())