Beispiel #1
0
 def getReplacedSVGTemplateLines(self, fileName, rotatedBoundaryLayers):
     "Get the lines of text from the svg_template.txt file."
     #( layers.length + 1 ) * (margin + sliceDimY * unitScale + txtHeight) + margin + txtHeight + margin + 110
     svgTemplateText = gcodec.getFileTextInFileDirectory(
         __file__, 'svg_template.svg')
     originalTextLines = gcodec.getTextLines(svgTemplateText)
     self.margin = getParameterFromJavascript(originalTextLines, 'margin',
                                              self.margin)
     self.textHeight = getParameterFromJavascript(originalTextLines,
                                                  'textHeight',
                                                  self.textHeight)
     javascriptControlsWidth = getParameterFromJavascript(
         originalTextLines, 'javascripControlBoxX', 510.0)
     noJavascriptControlsHeight = getParameterFromJavascript(
         originalTextLines, 'noJavascriptControlBoxY', 110.0)
     controlTop = len(rotatedBoundaryLayers) * (
         self.margin + self.extent.y * self.unitScale +
         self.textHeight) + 2.0 * self.margin + self.textHeight
     #	width = margin + (sliceDimX * unitScale) + margin;
     svgTemplateText = getReplacedInQuotes(
         'height',
         self.getRounded(controlTop + noJavascriptControlsHeight +
                         self.margin), svgTemplateText)
     width = 2.0 * self.margin + max(self.extent.y * self.unitScale,
                                     javascriptControlsWidth)
     svgTemplateText = getReplacedInQuotes('width', self.getRounded(width),
                                           svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'layerThickness', self.getRounded(self.layerThickness),
         svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxX', self.getRounded(self.cornerMaximum.x), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minX', self.getRounded(self.cornerMinimum.x), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'dimX', self.getRounded(self.extent.x), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxY', self.getRounded(self.cornerMaximum.y), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minY', self.getRounded(self.cornerMinimum.y), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'dimY', self.getRounded(self.extent.y), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxZ', self.getRounded(self.cornerMaximum.z), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minZ', self.getRounded(self.cornerMinimum.z), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'dimZ', self.getRounded(self.extent.z), svgTemplateText)
     summarizedFilename = gcodec.getSummarizedFilename(
         fileName) + ' SVG Slice File'
     svgTemplateText = getReplacedWordAndInQuotes('Title',
                                                  summarizedFilename,
                                                  svgTemplateText)
     noJavascriptControlsTagString = '<g id="noJavascriptControls" fill="#000" transform="translate(%s, %s)">' % (
         self.getRounded(self.margin), self.getRounded(controlTop))
     svgTemplateText = getReplacedTagString(noJavascriptControlsTagString,
                                            'noJavascriptControls',
                                            svgTemplateText)
     #	<g id="noJavascriptControls" fill="#000" transform="translate(20, 1400)">
     return gcodec.getTextLines(svgTemplateText)
Beispiel #2
0
	def getReplacedSVGTemplateLines( self, fileName, rotatedBoundaryLayers ):
		"Get the lines of text from the svg_template.tmpl file."
#( layers.length + 1 ) * (margin + sliceDimY * unitScale + txtHeight) + margin + txtHeight + margin + 110
		svgTemplateText = gcodec.getFileTextInFileDirectory( __file__, 'svg_template.tmpl' )
		originalTextLines = gcodec.getTextLines( svgTemplateText )
		self.margin = getParameterFromJavascript( originalTextLines, 'margin', self.margin )
		self.textHeight = getParameterFromJavascript( originalTextLines, 'textHeight', self.textHeight )
		javascriptControlsWidth = getParameterFromJavascript( originalTextLines, 'javascripControlBoxX', 510.0 )
		noJavascriptControlsHeight = getParameterFromJavascript( originalTextLines, 'noJavascriptControlBoxY', 110.0 )
		controlTop = len( rotatedBoundaryLayers ) * ( self.margin + self.extent.y * self.unitScale + self.textHeight ) + 2.0 * self.margin + self.textHeight
#	width = margin + (sliceDimX * unitScale) + margin;
		svgTemplateText = getReplacedInQuotes( 'height', self.getRounded( controlTop + noJavascriptControlsHeight + self.margin ), svgTemplateText )
		width = 2.0 * self.margin + max( self.extent.y * self.unitScale, javascriptControlsWidth )
		svgTemplateText = getReplacedInQuotes( 'width', self.getRounded( width ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'layerThickness', self.getRounded( self.layerThickness ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxX', self.getRounded( self.cornerMaximum.x ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minX', self.getRounded( self.cornerMinimum.x ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'dimX', self.getRounded( self.extent.x ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxY', self.getRounded( self.cornerMaximum.y ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minY', self.getRounded( self.cornerMinimum.y ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'dimY', self.getRounded( self.extent.y ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxZ', self.getRounded( self.cornerMaximum.z ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minZ', self.getRounded( self.cornerMinimum.z ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'dimZ', self.getRounded( self.extent.z ), svgTemplateText )
		summarizedFilename = gcodec.getSummarizedFilename( fileName ) + ' SVG Slice File'
		svgTemplateText = getReplacedWordAndInQuotes( 'Title', summarizedFilename, svgTemplateText )
		noJavascriptControlsTagString = '<g id="noJavascriptControls" fill="#000" transform="translate(%s, %s)">' % ( self.getRounded( self.margin ), self.getRounded( controlTop ) )
		svgTemplateText = getReplacedTagString( noJavascriptControlsTagString, 'noJavascriptControls', svgTemplateText )
#	<g id="noJavascriptControls" fill="#000" transform="translate(20, 1400)">
		return gcodec.getTextLines( svgTemplateText )
Beispiel #3
0
	def execute( self ):
		"Export the canvas as an svg file."
		svgFileName = gcodec.getFilePathWithUnderscoredBasename( self.fileName, self.suffix )
		boundingBox = self.canvas.bbox( settings.Tkinter.ALL ) # tuple (w, n, e, s)
		self.boxW = boundingBox[ 0 ]
		self.boxN = boundingBox[ 1 ]
		boxWidth = boundingBox[ 2 ] - self.boxW
		boxHeight = boundingBox[ 3 ] - self.boxN
		print( 'Exported svg file saved as ' + svgFileName )
		svgTemplateText = gcodec.getFileTextInFileDirectory( settings.__file__, 'svg_canvas.template' )
		output = cStringIO.StringIO()
		lines = gcodec.getTextLines( svgTemplateText )
		firstWordTable = {}
		firstWordTable[ 'height="999px"' ] = '		height="%spx"' % int( round( boxHeight ) )
		firstWordTable[ '<!--replaceLineWith_coloredLines-->' ] = self.getCanvasLinesOutput()
		firstWordTable[ 'replaceLineWithTitle' ] = gcodec.getSummarizedFileName( self.fileName )
		firstWordTable[ 'width="999px"' ] = '		width="%spx"' % int( round( boxWidth ) )
		for line in lines:
			parseLineReplace( firstWordTable, line, output )
		gcodec.writeFileText( svgFileName, output.getvalue() )
		fileExtension = self.fileExtension.value
		svgProgram = self.svgProgram.value
		if svgProgram == '':
			return
		if svgProgram == 'webbrowser':
			settings.openWebPage( svgFileName )
			return
		svgFilePath = '"' + os.path.normpath( svgFileName ) + '"' # " to send in file name with spaces
		shellCommand = svgProgram + ' ' + svgFilePath
		print( '' )
		if fileExtension == '':
			print( 'Sending the shell command:' )
			print( shellCommand )
			commandResult = os.system( shellCommand )
			if commandResult != 0:
				print( 'It may be that the system could not find the %s program.' % svgProgram )
				print( 'If so, try installing the %s program or look for another one, like the Gnu Image Manipulation Program (Gimp) which can be found at:' % svgProgram )
				print( 'http://www.gimp.org/' )
			return
		convertedFileName = gcodec.getFilePathWithUnderscoredBasename( svgFilePath, '.' + fileExtension + '"' )
		shellCommand += ' ' + convertedFileName
		print( 'Sending the shell command:' )
		print( shellCommand )
		commandResult = os.system( shellCommand )
		if commandResult != 0:
			print( 'The %s program could not convert the svg to the %s file format.' % ( svgProgram, fileExtension ) )
			print( 'Try installing the %s program or look for another one, like Image Magick which can be found at:' % svgProgram )
			print( 'http://www.imagemagick.org/script/index.php' )
Beispiel #4
0
	def getReplacedSVGTemplate( self, fileName, procedureName, rotatedBoundaryLayers ):
		"Get the lines of text from the svg_layer.template file."
#( layers.length + 1 ) * (margin + sliceDimY * unitScale + txtHeight) + margin + txtHeight + margin + 110
		self.extent = self.cornerMaximum - self.cornerMinimum
		self.addRotatedLoopLayersToOutput( rotatedBoundaryLayers )
		svgTemplateText = gcodec.getFileTextInFileDirectory( __file__, 'svg_layer.template' )
		svgTemplateText = getReplacedWordAndInQuotes( 'layerThickness', self.getRounded( self.layerThickness ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxX', self.getRounded( self.cornerMaximum.x ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minX', self.getRounded( self.cornerMinimum.x ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxY', self.getRounded( self.cornerMaximum.y ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minY', self.getRounded( self.cornerMinimum.y ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'maxZ', self.getRounded( self.cornerMaximum.z ), svgTemplateText )
		svgTemplateText = getReplacedWordAndInQuotes( 'minZ', self.getRounded( self.cornerMinimum.z ), svgTemplateText )
		lines = gcodec.getTextLines( svgTemplateText )
		self.margin = getParameterFromJavascript( lines, 'margin', self.margin )
		self.textHeight = getParameterFromJavascript( lines, 'textHeight', self.textHeight )
		javascriptControlsWidth = getParameterFromJavascript( lines, 'javascripControlBoxX', 510.0 )
		noJavascriptControlsHeight = getParameterFromJavascript( lines, 'noJavascriptControlBoxY', 110.0 )
		controlTop = len( rotatedBoundaryLayers ) * ( self.margin + self.extent.y * self.unitScale + self.textHeight ) + 2.0 * self.margin + self.textHeight
#	width = margin + (sliceDimX * unitScale) + margin;
		width = 2.0 * self.margin + max( self.extent.x * self.unitScale, javascriptControlsWidth )
		summarizedFileName = gcodec.getSummarizedFileName( fileName ) + ' SVG Slice File'
		noJavascriptControlsTagString = '	<g id="noJavascriptControls" fill="#000" transform="translate(%s, %s)">' % ( self.getRounded( self.margin ), self.getRounded( controlTop ) )
		firstWordTable = {}
		firstWordTable[ 'height="999px"' ] = '	height="%spx"' % self.getRounded( controlTop + noJavascriptControlsHeight + self.margin )
		firstWordTable[ 'width="999px"' ] = '	width="%spx"' % self.getRounded( width )
		firstWordTable[ '<!--replaceLineWith_boundaryLayerLines-->' ] = self.output.getvalue()
		firstWordTable[ '<!--replaceLineWith_emptyString-->' ] = ''
		firstWordTable[ '<!--replaceLineWith_noJavascriptControls-->' ] = noJavascriptControlsTagString
		firstWordTable[ '<!--replaceLineWith_sliceVariableLines-->' ] = self.getInitializationForOutputSVG( procedureName )
		replaceWithTable = {}
		replaceWithTable[ 'replaceWith_Title' ] = summarizedFileName
		replaceWithTable[ 'replaceWith_dimX' ] = self.getRounded( self.extent.x )
		replaceWithTable[ 'replaceWith_dimY' ] = self.getRounded( self.extent.y )
		replaceWithTable[ 'replaceWith_dimZ' ] = self.getRounded( self.extent.z )
		output = cStringIO.StringIO()
		for line in lines:
			parseLineReplaceWithTable( firstWordTable, line, output, replaceWithTable )
		return output.getvalue()
Beispiel #5
0
 def getReplacedSVGTemplate(self, fileName, procedureName,
                            rotatedBoundaryLayers):
     "Get the lines of text from the svg_layer.template file."
     #( layers.length + 1 ) * (margin + sliceDimY * unitScale + txtHeight) + margin + txtHeight + margin + 110
     self.extent = self.cornerMaximum - self.cornerMinimum
     self.addRotatedLoopLayersToOutput(rotatedBoundaryLayers)
     svgTemplateText = gcodec.getFileTextInFileDirectory(
         __file__, 'svg_layer.template')
     svgTemplateText = getReplacedWordAndInQuotes(
         'layerThickness', self.getRounded(self.layerThickness),
         svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxX', self.getRounded(self.cornerMaximum.x), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minX', self.getRounded(self.cornerMinimum.x), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxY', self.getRounded(self.cornerMaximum.y), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minY', self.getRounded(self.cornerMinimum.y), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'maxZ', self.getRounded(self.cornerMaximum.z), svgTemplateText)
     svgTemplateText = getReplacedWordAndInQuotes(
         'minZ', self.getRounded(self.cornerMinimum.z), svgTemplateText)
     lines = gcodec.getTextLines(svgTemplateText)
     self.margin = getParameterFromJavascript(lines, 'margin', self.margin)
     self.textHeight = getParameterFromJavascript(lines, 'textHeight',
                                                  self.textHeight)
     javascriptControlsWidth = getParameterFromJavascript(
         lines, 'javascripControlBoxX', 510.0)
     noJavascriptControlsHeight = getParameterFromJavascript(
         lines, 'noJavascriptControlBoxY', 110.0)
     controlTop = len(rotatedBoundaryLayers) * (
         self.margin + self.extent.y * self.unitScale +
         self.textHeight) + 2.0 * self.margin + self.textHeight
     #	width = margin + (sliceDimX * unitScale) + margin;
     width = 2.0 * self.margin + max(self.extent.x * self.unitScale,
                                     javascriptControlsWidth)
     summarizedFileName = gcodec.getSummarizedFileName(
         fileName) + ' SVG Slice File'
     noJavascriptControlsTagString = '	<g id="noJavascriptControls" fill="#000" transform="translate(%s, %s)">' % (
         self.getRounded(self.margin), self.getRounded(controlTop))
     firstWordTable = {}
     firstWordTable['height="999px"'] = '	height="%spx"' % self.getRounded(
         controlTop + noJavascriptControlsHeight + self.margin)
     firstWordTable['width="999px"'] = '	width="%spx"' % self.getRounded(
         width)
     firstWordTable[
         '<!--replaceLineWith_boundaryLayerLines-->'] = self.output.getvalue(
         )
     firstWordTable['<!--replaceLineWith_emptyString-->'] = ''
     firstWordTable[
         '<!--replaceLineWith_noJavascriptControls-->'] = noJavascriptControlsTagString
     firstWordTable[
         '<!--replaceLineWith_sliceVariableLines-->'] = self.getInitializationForOutputSVG(
             procedureName)
     replaceWithTable = {}
     replaceWithTable['replaceWith_Title'] = summarizedFileName
     replaceWithTable['replaceWith_dimX'] = self.getRounded(self.extent.x)
     replaceWithTable['replaceWith_dimY'] = self.getRounded(self.extent.y)
     replaceWithTable['replaceWith_dimZ'] = self.getRounded(self.extent.z)
     output = cStringIO.StringIO()
     for line in lines:
         parseLineReplaceWithTable(firstWordTable, line, output,
                                   replaceWithTable)
     return output.getvalue()