Пример #1
0
def processXMLElement(xmlElement):
    "Process the xml element."
    fileName = evaluate.getEvaluatedValue('file', xmlElement)
    if fileName == None:
        return
    parserFileName = xmlElement.getRoot().parser.fileName
    absoluteFileName = archive.getAbsoluteFolderPath(parserFileName, fileName)
    xmlText = ''
    if fileName.endswith('.xml'):
        xmlText = archive.getFileText(absoluteFileName)
    else:
        xmlText = getXMLFromCarvingFileName(absoluteFileName)
    if xmlText == '':
        print(
            'The file %s could not be found in the folder which the fabmetheus xml file is in.'
            % fileName)
        return
    if '_importname' in xmlElement.attributeDictionary:
        xmlElement.importName = xmlElement.attributeDictionary['_importname']
    else:
        xmlElement.importName = archive.getUntilDot(fileName)
        xmlElement.attributeDictionary['_importname'] = xmlElement.importName
    XMLSimpleReader(parserFileName, xmlElement, xmlText)
    originalChildren = xmlElement.children[:]
    xmlElement.children = []
    for child in originalChildren:
        for subchild in child.children:
            subchild.setParentAddToChildren(xmlElement)
        for attributeDictionaryKey in child.attributeDictionary.keys():
            if attributeDictionaryKey != 'version':
                xmlElement.attributeDictionary[
                    attributeDictionaryKey] = child.attributeDictionary[
                        attributeDictionaryKey]
    group.processShape(group.Group, xmlElement)
Пример #2
0
def getCarving(fileName=''):
	"Get the carving for the xml file."
	xmlText = archive.getFileText(fileName)
	if xmlText == '':
		return None
	xmlParser = XMLSimpleReader( fileName, None, xmlText )
	lowerClassName = xmlParser.getRoot().className.lower()
	pluginModule = archive.getModuleWithDirectoryPath( getPluginsDirectoryPath(), lowerClassName )
	if pluginModule == None:
		return None
	return pluginModule.getCarvingFromParser( xmlParser )
Пример #3
0
 def parseSVG(self, fileName, svgText):
     "Parse SVG text and store the layers."
     self.fileName = fileName
     xmlParser = XMLSimpleReader(fileName, None, svgText)
     self.root = xmlParser.getRoot()
     if self.root == None:
         print(
             'Warning, root was None in parseSVG in SVGReader, so nothing will be done for:'
         )
         print(fileName)
         return
     self.parseSVGByXMLElement(self.root)
Пример #4
0
	def __init__(self, fontFamily):
		"Initialize."
		self.fontFamily = fontFamily
		self.glyphDictionary = {}
		self.glyphXMLElementDictionary = {}
		self.missingGlyph = None
		fileName = os.path.join(getFontsDirectoryPath(), fontFamily + '.svg')
		self.xmlParser = XMLSimpleReader(fileName, None, gcodec.getFileText(fileName))
		self.fontXMLElement = self.xmlParser.getRoot().getFirstChildWithClassName('defs').getFirstChildWithClassName('font')
		self.fontFaceXMLElement = self.fontXMLElement.getFirstChildWithClassName('font-face')
		self.unitsPerEM = float(self.fontFaceXMLElement.attributeDictionary['units-per-em'])
		glyphXMLElements = self.fontXMLElement.getChildrenWithClassName('glyph')
		for glyphXMLElement in glyphXMLElements:
			self.glyphXMLElementDictionary[glyphXMLElement.attributeDictionary['unicode']] = glyphXMLElement
Пример #5
0
	def getCraftedGcode(self, fileName, repository, svgText):
		"Parse svgText and store the bottom svgText."
		xmlParser = XMLSimpleReader(fileName, None, svgText)
		root = xmlParser.getRoot()
		sliceElements = getSliceElements(root)
		sliceDictionary = svg_writer.getSliceDictionary(root)
		decimalPlacesCarried = int(sliceDictionary['decimalPlacesCarried'])
		layerThickness = float(sliceDictionary['layerThickness'])
		procedures = sliceDictionary['procedureDone'].split(',')
		procedures.append('bottom')
		sliceDictionary['procedureDone'] = ','.join(procedures)
		zMinimum = 987654321.0
		for sliceElement in sliceElements:
			zMinimum = min(getSliceElementZ(sliceElement), zMinimum)
		deltaZ = repository.altitude.value + 0.5 * layerThickness - zMinimum
		for sliceElementIndex, sliceElement in enumerate(sliceElements):
			z = getSliceElementZ(sliceElement) + deltaZ
			setSliceElementZ(decimalPlacesCarried, sliceElement, sliceElementIndex, z)
		output = cStringIO.StringIO()
		root.addXML(0, output)
		return output.getvalue()
Пример #6
0
 def getReplacedSVGTemplate(self,
                            fileName,
                            procedureName,
                            rotatedLoopLayers,
                            xmlElement=None):
     'Get the lines of text from the layer_template.svg file.'
     self.extent = self.cornerMaximum - self.cornerMinimum
     svgTemplateText = archive.getFileText(
         archive.getTemplatesPath('layer_template.svg'))
     self.xmlParser = XMLSimpleReader(fileName, None, svgTemplateText)
     self.svgElement = self.xmlParser.getRoot()
     svgElementDictionary = self.svgElement.attributeDictionary
     self.sliceDictionary = getSliceDictionary(self.svgElement)
     self.controlBoxHeight = float(self.sliceDictionary['controlBoxHeight'])
     self.controlBoxWidth = float(self.sliceDictionary['controlBoxWidth'])
     self.margin = float(self.sliceDictionary['margin'])
     self.marginTop = float(self.sliceDictionary['marginTop'])
     self.textHeight = float(self.sliceDictionary['textHeight'])
     self.unitScale = float(self.sliceDictionary['unitScale'])
     svgMinWidth = float(self.sliceDictionary['svgMinWidth'])
     self.controlBoxHeightMargin = self.controlBoxHeight + self.marginTop
     if not self.addLayerTemplateToSVG:
         self.svgElement.getXMLElementByID(
             'layerTextTemplate').removeFromIDNameParent()
         del self.svgElement.getXMLElementByID(
             'sliceElementTemplate').attributeDictionary['transform']
     self.graphicsXMLElement = self.svgElement.getXMLElementByID(
         'sliceElementTemplate')
     self.graphicsXMLElement.attributeDictionary['id'] = 'z:'
     self.addRotatedLoopLayersToOutput(rotatedLoopLayers)
     self.setMetadataNoscriptElement('layerThickness', 'Layer Thickness: ',
                                     self.layerThickness)
     self.setMetadataNoscriptElement('maxX', 'X: ', self.cornerMaximum.x)
     self.setMetadataNoscriptElement('minX', 'X: ', self.cornerMinimum.x)
     self.setMetadataNoscriptElement('maxY', 'Y: ', self.cornerMaximum.y)
     self.setMetadataNoscriptElement('minY', 'Y: ', self.cornerMinimum.y)
     self.setMetadataNoscriptElement('maxZ', 'Z: ', self.cornerMaximum.z)
     self.setMetadataNoscriptElement('minZ', 'Z: ', self.cornerMinimum.z)
     self.textHeight = float(self.sliceDictionary['textHeight'])
     controlTop = len(rotatedLoopLayers) * (
         self.margin + self.extent.y * self.unitScale +
         self.textHeight) + self.marginTop + self.textHeight
     self.svgElement.getFirstChildByLocalName(
         'title').text = os.path.basename(fileName) + ' - Slice Layers'
     svgElementDictionary['height'] = '%spx' % self.getRounded(
         max(controlTop, self.controlBoxHeightMargin))
     width = max(self.extent.x * self.unitScale, svgMinWidth)
     svgElementDictionary['width'] = '%spx' % self.getRounded(width)
     self.sliceDictionary['decimalPlacesCarried'] = str(
         self.decimalPlacesCarried)
     if self.perimeterWidth != None:
         self.sliceDictionary['perimeterWidth'] = self.getRounded(
             self.perimeterWidth)
     self.sliceDictionary['yAxisPointingUpward'] = 'true'
     self.sliceDictionary['procedureName'] = procedureName
     self.setDimensionTexts('dimX', 'X: ' + self.getRounded(self.extent.x))
     self.setDimensionTexts('dimY', 'Y: ' + self.getRounded(self.extent.y))
     self.setDimensionTexts('dimZ', 'Z: ' + self.getRounded(self.extent.z))
     self.setTexts('numberOfLayers',
                   'Number of Layers: %s' % len(rotatedLoopLayers))
     volume = 0.0
     for rotatedLoopLayer in rotatedLoopLayers:
         volume += euclidean.getAreaLoops(rotatedLoopLayer.loops)
     volume *= 0.001
     self.setTexts('volume', 'Volume: %s cm3' % self.getRounded(volume))
     if not self.addLayerTemplateToSVG:
         self.svgElement.getFirstChildByLocalName(
             'script').removeFromIDNameParent()
         self.svgElement.getXMLElementByID(
             'isoControlBox').removeFromIDNameParent()
         self.svgElement.getXMLElementByID(
             'layerControlBox').removeFromIDNameParent()
         self.svgElement.getXMLElementByID(
             'scrollControlBox').removeFromIDNameParent()
     self.graphicsXMLElement.removeFromIDNameParent()
     self.addOriginalAsComment(xmlElement)
     output = cStringIO.StringIO()
     output.write(self.xmlParser.beforeRoot)
     self.svgElement.addXML(0, output)
     return xml_simple_writer.getBeforeRootOutput(self.xmlParser)
Пример #7
0
	def parseSVG(self, fileName, svgText):
		"Parse SVG text and store the layers."
		self.fileName = fileName
		xmlParser = XMLSimpleReader(fileName, None, svgText)
		self.parseSVGByXMLElement(xmlParser.getRoot())
Пример #8
0
 def getReplacedSVGTemplate(self,
                            fileName,
                            procedureName,
                            rotatedBoundaryLayers,
                            xmlElement=None):
     "Get the lines of text from the layer_template.svg file."
     #		( layers.length + 1 ) * (margin + sliceDimY * unitScale + txtHeight) + margin + txtHeight + margin + 110
     cornerMaximum = self.carving.getCarveCornerMaximum()
     cornerMinimum = self.carving.getCarveCornerMinimum()
     self.extent = cornerMaximum - cornerMinimum
     svgTemplateText = archive.getFileTextInFileDirectory(
         __file__, os.path.join('templates', 'layer_template.svg'))
     self.xmlParser = XMLSimpleReader(fileName, None, svgTemplateText)
     self.svgElement = self.xmlParser.getRoot()
     if not self.addLayerTemplateToSVG:
         self.svgElement.getXMLElementByID(
             'layerTextTemplate').removeFromIDNameParent()
         del self.svgElement.getXMLElementByID(
             'sliceElementTemplate').attributeDictionary['transform']
     svgElementDictionary = self.svgElement.attributeDictionary
     self.graphicsXMLElement = self.svgElement.getXMLElementByID(
         'sliceElementTemplate')
     self.graphicsXMLElement.attributeDictionary['id'] = 'z:'
     self.addRotatedLoopLayersToOutput(rotatedBoundaryLayers)
     self.sliceDictionary = getSliceDictionary(self.svgElement)
     self.setMetadataNoscriptElement('layerThickness',
                                     self.carving.getCarveLayerThickness())
     self.setMetadataNoscriptElement('maxX', cornerMaximum.x)
     self.setMetadataNoscriptElement('minX', cornerMinimum.x)
     self.setMetadataNoscriptElement('maxY', cornerMaximum.y)
     self.setMetadataNoscriptElement('minY', cornerMinimum.y)
     self.setMetadataNoscriptElement('maxZ', cornerMaximum.z)
     self.setMetadataNoscriptElement('minZ', cornerMinimum.z)
     self.margin = float(self.sliceDictionary['margin'])
     self.textHeight = float(self.sliceDictionary['textHeight'])
     javascriptControlBoxWidth = float(
         self.sliceDictionary['javascriptControlBoxWidth'])
     noJavascriptControlBoxHeight = float(
         self.sliceDictionary['noJavascriptControlBoxHeight'])
     controlTop = len(rotatedBoundaryLayers) * (
         self.margin + self.extent.y * self.unitScale +
         self.textHeight) + 2.0 * self.margin + self.textHeight
     self.svgElement.getFirstChildWithClassName(
         'title').text = os.path.basename(fileName) + ' - Slice Layers'
     svgElementDictionary['height'] = '%spx' % self.getRounded(
         controlTop + noJavascriptControlBoxHeight + self.margin)
     #		width = margin + (sliceDimX * unitScale) + margin;
     width = 2.0 * self.margin + max(self.extent.x * self.unitScale,
                                     javascriptControlBoxWidth)
     svgElementDictionary['width'] = '%spx' % self.getRounded(width)
     self.sliceDictionary['decimalPlacesCarried'] = str(
         self.decimalPlacesCarried)
     if self.perimeterWidth != None:
         self.sliceDictionary['perimeterWidth'] = self.getRounded(
             self.perimeterWidth)
     self.sliceDictionary['yAxisPointingUpward'] = 'true'
     self.sliceDictionary['procedureDone'] = procedureName
     noJavascriptDictionary = self.svgElement.getXMLElementByID(
         'noJavascriptControls').attributeDictionary
     noJavascriptDictionary['transform'] = 'translate(%s, %s)' % (
         self.getRounded(self.margin), self.getRounded(controlTop))
     self.svgElement.getXMLElementByID(
         'dimXNoJavascript').text = self.getRounded(self.extent.x)
     self.svgElement.getXMLElementByID(
         'dimYNoJavascript').text = self.getRounded(self.extent.y)
     self.svgElement.getXMLElementByID(
         'dimZNoJavascript').text = self.getRounded(self.extent.z)
     if not self.addLayerTemplateToSVG:
         self.svgElement.getFirstChildWithClassName(
             'script').removeFromIDNameParent()
         self.svgElement.getXMLElementByID(
             'beginningOfControlSection').removeFromIDNameParent()
         self.svgElement.getXMLElementByID(
             'noJavascriptControls').removeFromIDNameParent()
     self.graphicsXMLElement.removeFromIDNameParent()
     self.addOriginalAsComment(xmlElement)
     output = cStringIO.StringIO()
     output.write(self.xmlParser.beforeRoot)
     self.svgElement.addXML(0, output)
     return output.getvalue()