def processXMLElement( xmlElement, xmlProcessor ): "Process the xml element." fileName = evaluate.getEvaluatedValue('file', xmlElement ) if fileName == None: return parserFileName = xmlElement.getRoot().parser.fileName absoluteFileName = gcodec.getAbsoluteFolderPath( parserFileName, fileName ) xmlText = '' if fileName.endswith('.xml'): xmlText = gcodec.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 = gcodec.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, xmlProcessor ) root = xmlElement.getRoot() root.idDictionary[ xmlElement.importName ] = evaluate.ElementID(xmlElement) root.nameDictionary[ xmlElement.importName ] = evaluate.ElementName(xmlElement)
def writeOutput( fileName, gcodeText = '' ): "Write statistics for a skeinforge gcode file, if 'Write Statistics File for Skeinforge Chain' is selected." repository = settings.getReadRepository( StatisticRepository() ) if gcodeText == '': gcodeText = gcodec.getFileText( fileName ) if repository.activateStatistic.value: analyzeFileGivenText( fileName, gcodeText, repository )
def writeOutput( fileName, fileNameSuffix, gcodeText = ''): "Write a commented gcode file for a skeinforge gcode file, if 'Write Commented File for Skeinforge Chain' is selected." repository = settings.getReadRepository( CommentRepository() ) if gcodeText == '': gcodeText = gcodec.getFileText( fileNameSuffix ) if repository.activateComment.value: getWindowAnalyzeFileGivenText( fileNameSuffix, gcodeText )
def getChainText(fileName, procedure): "Get a crafted shape file." text = '' if fileName.endswith('.gcode') or fileName.endswith('.svg'): text = gcodec.getFileText(fileName) procedures = getProcedures(procedure, text) return getChainTextFromProcedures(fileName, procedures, text)
def processXMLElement(xmlElement): "Process the xml element." fileName = evaluate.getEvaluatedValue('file', xmlElement) if fileName == None: return parserFileName = xmlElement.getRoot().parser.fileName absoluteFileName = gcodec.getAbsoluteFolderPath(parserFileName, fileName) xmlText = '' if fileName.endswith('.xml'): xmlText = gcodec.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 = gcodec.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)
def getXMLFromXMLFileName(fileName): "Get xml text from xml text." xmlText = gcodec.getFileText(fileName) xmlText = str(FabmetheusParser(xmlText)) if xmlText != '': return xmlText return getXMLFromCarvingFileName(fileName)
def getChainText( fileName, procedure ): "Get a crafted shape file." text = '' if fileName.endswith('.gcode') or fileName.endswith('.svg'): text = gcodec.getFileText(fileName) procedures = getProcedures( procedure, text ) return getChainTextFromProcedures( fileName, procedures, text )
def getXMLFromXMLFileName( fileName ): "Get xml text from xml text." xmlText = gcodec.getFileText( fileName ) xmlText = str( FabmetheusParser( xmlText ) ) if xmlText != '': return xmlText return getXMLFromCarvingFileName( fileName )
def addInitializationToOutput( self ): "Add initialization gcode to the output." self.addFromUpperLowerFile( self.prefaceRepository.nameOfStartFile.value ) # Add a start file if it exists. self.distanceFeedRate.addTagBracketedLine( 'creation', 'skeinforge' ) # GCode formatted comment absoluteFilePathUntilDot = os.path.abspath( __file__ )[ : os.path.abspath( __file__ ).rfind( '.' ) ] if absoluteFilePathUntilDot == '/home/enrique/Desktop/backup/babbleold/script/reprap/fabmetheus/skeinforge_application/skeinforge_plugins/craft_plugins/preface': #is this script on Enrique's computer? gcodec.writeFileText( gcodec.getVersionFileName(), date.today().isoformat() ) versionText = gcodec.getFileText( gcodec.getVersionFileName() ) self.distanceFeedRate.addTagBracketedLine( 'version', versionText ) # GCode formatted comment self.distanceFeedRate.addLine( '(<extruderInitialization>)' ) # GCode formatted comment if self.prefaceRepository.setPositioningToAbsolute.value: self.distanceFeedRate.addLine( 'G90' ) # Set positioning to absolute. if self.prefaceRepository.setUnitsToMillimeters.value: self.distanceFeedRate.addLine( 'G21' ) # Set units to millimeters. if self.prefaceRepository.startAtHome.value: self.distanceFeedRate.addLine( 'G28' ) # Start at home. if self.prefaceRepository.turnExtruderOffAtStartUp.value: self.distanceFeedRate.addLine( 'M103' ) # Turn extruder off. craftTypeName = skeinforge_profile.getCraftTypeName() self.distanceFeedRate.addTagBracketedLine( 'craftTypeName', craftTypeName ) self.distanceFeedRate.addTagBracketedLine( 'decimalPlacesCarried', self.distanceFeedRate.decimalPlacesCarried ) self.distanceFeedRate.addTagBracketedLine( 'layerThickness', self.distanceFeedRate.getRounded( self.layerThickness ) ) if self.prefaceRepository.meta.value: self.distanceFeedRate.addTagBracketedLine( 'meta', self.prefaceRepository.meta.value ) self.distanceFeedRate.addTagBracketedLine( 'perimeterWidth', self.distanceFeedRate.getRounded( self.perimeterWidth ) ) self.distanceFeedRate.addTagBracketedLine( 'profileName', skeinforge_profile.getProfileName( craftTypeName ) ) self.distanceFeedRate.addTagBracketedLine( 'procedureDone', 'carve' ) self.distanceFeedRate.addTagBracketedLine( 'procedureDone', 'preface' ) self.distanceFeedRate.addLine( '(</extruderInitialization>)' ) # Initialization is finished, extrusion is starting. self.distanceFeedRate.addLine( '(<extrusion>)' ) # Initialization is finished, extrusion is starting.
def __init__(self): "Set the default settings, execute title & settings fileName." settings.addListsToRepository('skeinforge.skeinforge.html', '', self) self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Skeinforge', self, '') versionText = gcodec.getFileText(gcodec.getVersionFileName()) self.createdOnLabel = settings.LabelDisplay().getFromName( 'Created On: ' + versionText, self) self.profileType = settings.MenuButtonDisplay().getFromName( 'Profile Type: ', self) self.profileSelection = settings.MenuButtonDisplay().getFromName( 'Profile Selection: ', self) addToProfileMenu(self.profileSelection, self.profileType, self) settings.LabelDisplay().getFromName('Search:', self) reprapSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_reprap.html', 'Reprap', self) skeinforgeSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_skeinforge.html', 'Skeinforge', self) skeinforgeSearch.column += 2 webSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_web.html', 'Web', self) webSearch.column += 4 settings.LabelDisplay().getFromName('', self) importantFileNames = ['craft', 'profile'] getRadioPluginsAddPluginGroupFrame(getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self) self.executeTitle = 'Skeinforge'
def __init__(self): "Set the default settings, execute title & settings fileName." settings.addListsToRepository("skeinforge_application.skeinforge.html", "", self) self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), "Open File for Skeinforge", self, "" ) self.profileType = settings.MenuButtonDisplay().getFromName("Profile Type: ", self) self.profileSelection = settings.MenuButtonDisplay().getFromName("Profile Selection: ", self) addToProfileMenu(self.profileSelection, self.profileType, self) settings.LabelDisplay().getFromName("Search:", self) reprapSearch = settings.HelpPage().getFromNameAfterHTTP( "members.axion.net/~enrique/search_reprap.html", "Reprap", self ) skeinforgeSearch = settings.HelpPage().getFromNameAfterHTTP( "members.axion.net/~enrique/search_skeinforge.html", "Skeinforge", self ) skeinforgeSearch.column += 2 webSearch = settings.HelpPage().getFromNameAfterHTTP("members.axion.net/~enrique/search_web.html", "Web", self) webSearch.column += 4 versionText = gcodec.getFileText(gcodec.getVersionFileName()) self.version = settings.LabelDisplay().getFromName("Version: " + versionText, self) settings.LabelDisplay().getFromName("", self) importantFileNames = ["craft", "profile"] getRadioPluginsAddPluginGroupFrame(getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self) self.executeTitle = "Skeinforge"
def writeOutput(fileName, fileNameSuffix, gcodeText=''): "Write a commented gcode file for a skeinforge gcode file, if 'Write Commented File for Skeinforge Chain' is selected." repository = settings.getReadRepository(CommentRepository()) if gcodeText == '': gcodeText = gcodec.getFileText(fileNameSuffix) if repository.activateComment.value: getWindowAnalyzeFileGivenText(fileNameSuffix, gcodeText)
def processXMLElement(xmlElement): "Process the xml element." fileName = evaluate.getEvaluatedValue("file", xmlElement) if fileName == None: return parserFileName = xmlElement.getRoot().parser.fileName absoluteFileName = gcodec.getAbsoluteFolderPath(parserFileName, fileName) xmlText = "" if fileName.endswith(".xml"): xmlText = gcodec.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 = gcodec.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)
def readWriteNavigationHelp( documentDirectoryPath, transferredFileNameIndex, transferredFileNames ): "Read the hypertext help documents, and add the navigation lines to them." fileName = transferredFileNames[ transferredFileNameIndex ] print(fileName) filePath = os.path.join( documentDirectoryPath, fileName ) fileText = gcodec.getFileText(filePath) fileText = getNavigationHypertext( fileText, transferredFileNameIndex, transferredFileNames ) gcodec.writeFileText( filePath, fileText )
def readWriteNavigationHelp(documentDirectoryPath, transferredFileNameIndex, transferredFileNames): "Read the hypertext help documents, and add the navigation lines to them." fileName = transferredFileNames[transferredFileNameIndex] print(fileName) filePath = os.path.join(documentDirectoryPath, fileName) fileText = gcodec.getFileText(filePath) fileText = getNavigationHypertext(fileText, transferredFileNameIndex, transferredFileNames) gcodec.writeFileText(filePath, fileText)
def getCarving( fileName = ''): "Get the triangle mesh for the obj file." if fileName == '': return None objText = gcodec.getFileText( fileName, 'rb') if objText == '': return None triangleMesh = trianglemesh.TriangleMesh() addFacesGivenText( objText, triangleMesh ) triangleMesh.setEdgesForAllFaces() return triangleMesh
def getCarving( fileName = ''): "Get the carving for the csv file." csvText = gcodec.getFileText( fileName ) if csvText == '': return None csvParser = CSVSimpleParser( fileName, None, csvText ) lowerClassName = csvParser.getRoot().className.lower() pluginModule = gcodec.getModuleWithDirectoryPath( getPluginsDirectoryPath(), lowerClassName ) if pluginModule == None: return None return pluginModule.getCarvingFromParser( csvParser )
def getCarving(fileName=''): "Get the triangle mesh for the obj file." if fileName == '': return None objText = gcodec.getFileText(fileName, 'rb') if objText == '': return None triangleMesh = trianglemesh.TriangleMesh() addFacesGivenText(objText, triangleMesh) triangleMesh.setEdgesForAllFaces() return triangleMesh
def getCarving( fileName = ''): "Get the carving for the xml file." xmlText = gcodec.getFileText( fileName ) if xmlText == '': return None xmlParser = XMLSimpleReader( fileName, None, xmlText ) lowerClassName = xmlParser.getRoot().className.lower() pluginModule = gcodec.getModuleWithDirectoryPath( getPluginsDirectoryPath(), lowerClassName ) if pluginModule == None: return None return pluginModule.getCarvingFromParser( xmlParser )
def readWriteDeleteHypertextHelp( documentDirectoryPath, hypertextFileIndex, hypertextFiles, transferredFileNames ): "Read the pydoc hypertext help documents, write them in the documentation folder then delete the originals." fileName = hypertextFiles[ hypertextFileIndex ] print(fileName) filePath = os.path.join( documentDirectoryPath, fileName ) fileText = gcodec.getFileText(fileName) fileText = getWrappedHypertext( fileText, hypertextFileIndex, hypertextFiles ) if fileText.find('This page is in the table of contents.') > - 1: fileText = fileText.replace('This page is in the table of contents.', '') transferredFileNames.append(fileName) gcodec.writeFileText( filePath, fileText ) os.remove(fileName)
def getCarving(fileName=''): "Get the carving for the csv file." csvText = gcodec.getFileText(fileName) if csvText == '': return None csvParser = CSVSimpleParser(fileName, None, csvText) lowerClassName = csvParser.getRoot().className.lower() pluginModule = gcodec.getModuleWithDirectoryPath(getPluginsDirectoryPath(), lowerClassName) if pluginModule == None: return None return pluginModule.getCarvingFromParser(csvParser)
def getCarving(fileName=''): "Get the carving for the xml file." xmlText = gcodec.getFileText(fileName) if xmlText == '': return None xmlParser = XMLSimpleReader(fileName, None, xmlText) lowerClassName = xmlParser.getRoot().className.lower() pluginModule = gcodec.getModuleWithDirectoryPath(getPluginsDirectoryPath(), lowerClassName) if pluginModule == None: return None return pluginModule.getCarvingFromParser(xmlParser)
def addInitializationToOutput(self): "Add initialization gcode to the output." self.addFromUpperLowerFile(self.prefaceRepository.nameOfStartFile.value ) # Add a start file if it exists. self.distanceFeedRate.addTagBracketedLine( 'creation', 'skeinforge') # GCode formatted comment absoluteFilePathUntilDot = os.path.abspath( __file__)[:os.path.abspath(__file__).rfind('.')] if absoluteFilePathUntilDot == '/home/enrique/Desktop/backup/babbleold/script/reprap/fabmetheus/skeinforge_application/skeinforge_plugins/craft_plugins/preface': #is this script on Enrique's computer? gcodec.writeFileText( gcodec.getVersionFileName(), date.today().isoformat().replace('-', '.')[2:]) versionText = gcodec.getFileText(gcodec.getVersionFileName()) self.distanceFeedRate.addTagBracketedLine( 'version', versionText) # GCode formatted comment self.distanceFeedRate.addLine( '(<extruderInitialization>)') # GCode formatted comment if self.prefaceRepository.setPositioningToAbsolute.value: self.distanceFeedRate.addLine( 'G90') # Set positioning to absolute. if self.prefaceRepository.setUnitsToMillimeters.value: self.distanceFeedRate.addLine('G21') # Set units to millimeters. if self.prefaceRepository.startAtHome.value: self.distanceFeedRate.addLine('G28') # Start at home. if self.prefaceRepository.turnExtruderOffAtStartUp.value: self.distanceFeedRate.addLine('M103') # Turn extruder off. craftTypeName = skeinforge_profile.getCraftTypeName() self.distanceFeedRate.addTagBracketedLine('craftTypeName', craftTypeName) self.distanceFeedRate.addTagBracketedLine( 'decimalPlacesCarried', self.distanceFeedRate.decimalPlacesCarried) layerThickness = float( self.svgReader.sliceDictionary['layerThickness']) self.distanceFeedRate.addTagBracketedLine( 'layerThickness', self.distanceFeedRate.getRounded(layerThickness)) if self.prefaceRepository.meta.value: self.distanceFeedRate.addTagBracketedLine( 'meta', self.prefaceRepository.meta.value) perimeterWidth = float( self.svgReader.sliceDictionary['perimeterWidth']) self.distanceFeedRate.addTagBracketedLine( 'perimeterWidth', self.distanceFeedRate.getRounded(perimeterWidth)) self.distanceFeedRate.addTagBracketedLine( 'profileName', skeinforge_profile.getProfileName(craftTypeName)) self.distanceFeedRate.addTagBracketedLine( 'procedureDone', self.svgReader.sliceDictionary['procedureDone']) self.distanceFeedRate.addTagBracketedLine('procedureDone', 'preface') self.distanceFeedRate.addLine( '(</extruderInitialization>)' ) # Initialization is finished, extrusion is starting. self.distanceFeedRate.addLine( '(<extrusion>)' ) # Initialization is finished, extrusion is starting.
def getTriangleMesh( fileName = '' ): "Carve a GNU Triangulated Surface file. If no fileName is specified, carve the first GNU Triangulated Surface file in this folder." if fileName == '': unmodified = gcodec.getGNUTriangulatedSurfaceFiles() if len( unmodified ) == 0: print( "There are no GNU Triangulated Surface files in this folder." ) return None fileName = unmodified[ 0 ] gnuTriangulatedSurfaceText = gcodec.getFileText( fileName ) if gnuTriangulatedSurfaceText == '': return None triangleMesh = TriangleMesh().getFromGNUTriangulatedSurfaceText( gnuTriangulatedSurfaceText ) return triangleMesh
def __init__( self ): "Set the default settings, execute title & settings fileName." settings.addListsToRepository( 'skeinforge.html', '', self ) self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Skeinforge', self, '' ) versionText = gcodec.getFileText( gcodec.getVersionFileName() ) self.profileType = settings.MenuButtonDisplay().getFromName( 'Profile Type: ', self ) self.profileSelection = settings.MenuButtonDisplay().getFromName( 'Profile Selection: ', self ) addToProfileMenu( self.profileSelection, self.profileType, self ) settings.LabelDisplay().getFromName( 'Web Help:', self ) reprapSearch = settings.HelpPage().getFromNameAfterHTTP( 'www.bitsfrombytes.com/wiki/index.php?title=Skeinforge', 'Bfb Wiki', self ) settings.LabelDisplay().getFromName( '', self ) importantFileNames = [ 'craft', 'profile' ] getRadioPluginsAddPluginGroupFrame( getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self ) self.executeTitle = 'Skeinforge'
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
def getTriangleMesh(fileName=''): "Carve a GNU Triangulated Surface file. If no fileName is specified, carve the first GNU Triangulated Surface file in this folder." if fileName == '': unmodified = gcodec.getGNUTriangulatedSurfaceFiles() if len(unmodified) == 0: print( "There are no GNU Triangulated Surface files in this folder.") return None fileName = unmodified[0] gnuTriangulatedSurfaceText = gcodec.getFileText(fileName) if gnuTriangulatedSurfaceText == '': return None triangleMesh = TriangleMesh().getFromGNUTriangulatedSurfaceText( gnuTriangulatedSurfaceText) return triangleMesh
def readWriteDeleteHypertextHelp(documentDirectoryPath, hypertextFileIndex, hypertextFiles, transferredFileNames): "Read the pydoc hypertext help documents, write them in the documentation folder then delete the originals." fileName = hypertextFiles[hypertextFileIndex] print(fileName) filePath = os.path.join(documentDirectoryPath, fileName) fileText = gcodec.getFileText(fileName) fileText = getWrappedHypertext(fileText, hypertextFileIndex, hypertextFiles) if fileText.find('This page is in the table of contents.') > -1: fileText = fileText.replace('This page is in the table of contents.', '') transferredFileNames.append(fileName) gcodec.writeFileText(filePath, fileText) os.remove(fileName)
def getCarving(fileName=''): "Get the triangle mesh for the stl file." if fileName == '': return None stlData = gcodec.getFileText(fileName, 'rb') if stlData == '': return None triangleMesh = trianglemesh.TriangleMesh() vertexIndexTable = {} numberOfVertexStrings = stlData.count('vertex') requiredVertexStringsForText = max(2, len(stlData) / 8000) if numberOfVertexStrings > requiredVertexStringsForText: addFacesGivenText(stlData, triangleMesh, vertexIndexTable) else: # A binary stl should never start with the word "solid". Because this error is common the file is been parsed as binary regardless. addFacesGivenBinary(stlData, triangleMesh, vertexIndexTable) triangleMesh.setEdgesForAllFaces() return triangleMesh
def getCarving( fileName = '' ): "Get the triangle mesh for the stl file." if fileName == '': return None stlData = gcodec.getFileText( fileName, 'rb' ) if stlData == '': return None triangleMesh = trianglemesh.TriangleMesh() vertexIndexTable = {} numberOfVertexStrings = stlData.count( 'vertex' ) requiredVertexStringsForText = max( 2, len( stlData ) / 8000 ) if numberOfVertexStrings > requiredVertexStringsForText: addFacesGivenText( stlData, triangleMesh, vertexIndexTable ) else: # A binary stl should never start with the word "solid". Because this error is common the file is been parsed as binary regardless. addFacesGivenBinary( stlData, triangleMesh, vertexIndexTable ) triangleMesh.setEdgesForAllFaces() return triangleMesh
def __init__( self ): "Set the default settings, execute title & settings fileName." settings.addListsToRepository( 'skeinforge.skeinforge.html', '', self ) self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Skeinforge', self, '' ) versionText = gcodec.getFileText( gcodec.getVersionFileName() ) self.createdOnLabel = settings.LabelDisplay().getFromName( 'Created On: ' + versionText, self ) self.profileType = settings.MenuButtonDisplay().getFromName( 'Profile Type: ', self ) self.profileSelection = settings.MenuButtonDisplay().getFromName( 'Profile Selection: ', self ) addToProfileMenu( self.profileSelection, self.profileType, self ) settings.LabelDisplay().getFromName( 'Search:', self ) reprapSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_reprap.html', 'Reprap', self ) skeinforgeSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_skeinforge.html', 'Skeinforge', self ) skeinforgeSearch.column += 2 webSearch = settings.HelpPage().getFromNameAfterHTTP( 'members.axion.net/~enrique/search_web.html', 'Web', self ) webSearch.column += 4 settings.LabelDisplay().getFromName( '', self ) importantFileNames = [ 'craft', 'profile' ] getRadioPluginsAddPluginGroupFrame( getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self ) self.executeTitle = 'Skeinforge'
def __init__(self): "Set the default settings, execute title & settings fileName." settings.addListsToRepository('skeinforge.html', '', self) self.fileNameInput = settings.FileNameInput().getFromFileName( fabmetheus_interpret.getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Skeinforge', self, '') versionText = gcodec.getFileText(gcodec.getVersionFileName()) self.profileType = settings.MenuButtonDisplay().getFromName( 'Profile Type: ', self) self.profileSelection = settings.MenuButtonDisplay().getFromName( 'Profile Selection: ', self) addToProfileMenu(self.profileSelection, self.profileType, self) settings.LabelDisplay().getFromName('Web Help:', self) reprapSearch = settings.HelpPage().getFromNameAfterHTTP( 'www.bitsfrombytes.com/wiki/index.php?title=Skeinforge', 'Bfb Wiki', self) settings.LabelDisplay().getFromName('', self) importantFileNames = ['craft', 'profile'] getRadioPluginsAddPluginGroupFrame(getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self) self.executeTitle = 'Skeinforge'
def addInitializationToOutput(self): "Add initialization gcode to the output." self.addFromUpperLowerFile(self.prefaceRepository.nameOfStartFile.value ) # Add a start file if it exists. self.distanceFeedRate.addTagBracketedLine( 'creator', 'skeinforge') # GCode formatted comment absoluteFilePathUntilDot = os.path.abspath( __file__)[:os.path.abspath(__file__).rfind('.')] if absoluteFilePathUntilDot == '/home/enrique/Desktop/backup/babbleold/script/reprap/pyRepRap/skeinforge_tools/craft_plugins/preface': #check to see if this script is on Enrique's computer gcodec.writeFileText(gcodec.getVersionFileName(), date.today().isoformat()) versionText = gcodec.getFileText(gcodec.getVersionFileName()) self.distanceFeedRate.addTagBracketedLine( 'version', versionText) # GCode formatted comment self.distanceFeedRate.addLine( '(<extruderInitialization>)') # GCode formatted comment "BFB CODE 1st INITIALIZATION OF EXTRUDERS --------------------------------------------------------------------------------------------" self.bfbclass = bfb.BfbRepository() self.bfbclass = settings.getReadRepository(self.bfbclass) self.raftclass = raft.RaftRepository() self.raftclass = settings.getReadRepository(self.raftclass) self.secondHeadPrimeRev = chan(self.bfbclass.secondHeadPrimeRev.value, 6400) self.secondHeadPrimeSpeed = chan( self.bfbclass.secondHeadPrimeSpeed.value, 10) self.secondHeadPrintRev = chan(self.bfbclass.secondHeadPrintRev.value, 6400) self.secondHeadPrintPrime = chan( self.bfbclass.secondHeadPrintPrime.value, 6400) self.firstHeadPrimeRev = chan(self.bfbclass.firstHeadPrimeRev.value, 6400) self.firsHeadPrimeSpeed = chan(self.bfbclass.firsHeadPrimeSpeed.value, 10) self.firstHeadPrintRev = chan(self.bfbclass.firstHeadPrintRev.value, 6400) self.firstHeadPrintPrime = chan( self.bfbclass.firstHeadPrintPrime.value, 6400) self.speedclass = speed.SpeedRepository() self.speedclass = settings.getReadRepository(self.speedclass) travelfeedRateMinute = 60 * self.speedclass.travelFeedRatePerSecond.value version = settings.getfirmware() version = version[0:2] if self.raftclass.activateRaft.value == True: "use second extruder for raft" if self.bfbclass.useRaft.value == True: if version == "x1": self.distanceFeedRate.addLine('#v3.00') self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine('M228') self.distanceFeedRate.addLine('M103') self.distanceFeedRate.addLine( 'G92 X' + str(self.bfbclass.secondHeadOffsetX.value) + ' Y' + str(self.bfbclass.secondHeadOffsetY.value) + ' F' + str(travelfeedRateMinute)) self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M204 S' + str(self.bfbclass.RaftT.value)) self.distanceFeedRate.addLine( 'M552 P' + str(self.secondHeadPrimeRev) + ' S' + str(self.secondHeadPrimeSpeed)) self.distanceFeedRate.addLine('M103 P3200 S1000') self.distanceFeedRate.addLine('M543') if self.bfbclass.useM227.value == True: self.distanceFeedRate.addLine( 'M227 P' + str(self.secondHeadPrintPrime) + ' S' + str(self.secondHeadPrintRev)) if version == "x2": self.distanceFeedRate.addLine('#v4.00') self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine( 'G92 X' + str(self.bfbclass.secondHeadOffsetX.value) + ' Y' + str(self.bfbclass.secondHeadOffsetY.value) + ' F' + str(travelfeedRateMinute)) if self.bfbclass.useM227.value == True: self.distanceFeedRate.addLine( 'M227 P' + str(self.secondHeadPrintPrime) + ' S' + str(self.secondHeadPrintRev)) self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M204 S' + str(self.bfbclass.RaftT.value)) self.distanceFeedRate.addLine( 'M552 P' + str(self.secondHeadPrimeRev) + ' S' + str(self.secondHeadPrimeSpeed)) self.distanceFeedRate.addLine('M543') if self.bfbclass.UseFanEx2.value == True: "Turn ON FAN" self.distanceFeedRate.addLine('M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine('M107') else: if version == "x1": "use just one extruder for raft" self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine('M228') self.distanceFeedRate.addLine('M103') self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M104 S' + str(self.bfbclass.RaftT.value)) self.distanceFeedRate.addLine('M551 P' + str(self.firstHeadPrimeRev) + ' S' + str(self.firsHeadPrimeSpeed)) self.distanceFeedRate.addLine('M103 P3200 S1000') self.distanceFeedRate.addLine('M543') if version == "x2": "use just one extruder for raft" self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M104 S' + str(self.bfbclass.RaftT.value)) self.distanceFeedRate.addLine('M551 P' + str(self.firstHeadPrimeRev) + ' S' + str(self.firsHeadPrimeSpeed)) self.distanceFeedRate.addLine('M543') if self.bfbclass.useM227.value == True: self.distanceFeedRate.addLine( 'M227 P' + str(self.firstHeadPrintPrime) + ' S' + str(self.firstHeadPrintRev)) if self.bfbclass.UseFanEx1.value == True: "Turn ON FAN" self.distanceFeedRate.addLine('M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine('M107') else: if version == "x1": "NO RAFT" self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine('M228') self.distanceFeedRate.addLine('M103') self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M104 S' + str(self.bfbclass.firstWorkT.value)) self.distanceFeedRate.addLine('M551 P' + str(self.firstHeadPrimeRev) + ' S' + str(self.firsHeadPrimeSpeed)) self.distanceFeedRate.addLine('M103 P3200 S1000') self.distanceFeedRate.addLine('M543') if version == "x2": self.distanceFeedRate.addLine('G90') self.distanceFeedRate.addLine('M107') self.distanceFeedRate.addLine( 'M104 S' + str(self.bfbclass.firstWorkT.value)) self.distanceFeedRate.addLine('M551 P' + str(self.firstHeadPrimeRev) + ' S' + str(self.firsHeadPrimeSpeed)) self.distanceFeedRate.addLine('M543') if self.bfbclass.useM227.value == True: self.distanceFeedRate.addLine('M227 P' + str(self.firstHeadPrintPrime) + ' S' + str(self.firstHeadPrintRev)) if self.bfbclass.UseFanEx1.value == True: "Turn ON FAN" self.distanceFeedRate.addLine('M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine('M107') if self.prefaceRepository.setPositioningToAbsolute.value: self.distanceFeedRate.addLine( 'G90') # Set positioning to absolute. if self.prefaceRepository.setUnitsToMillimeters.value: self.distanceFeedRate.addLine('G21') # Set units to millimeters. if self.prefaceRepository.startAtHome.value: self.distanceFeedRate.addLine('G28') # Start at home. if self.prefaceRepository.turnExtruderOffAtStartUp.value: self.distanceFeedRate.addLine('M103') # Turn extruder off. craftTypeName = skeinforge_profile.getCraftTypeName() self.distanceFeedRate.addTagBracketedLine('craftTypeName', craftTypeName) self.distanceFeedRate.addTagBracketedLine( 'decimalPlacesCarried', self.distanceFeedRate.decimalPlacesCarried) self.distanceFeedRate.addTagBracketedLine( 'layerThickness', self.distanceFeedRate.getRounded(self.layerThickness)) if self.prefaceRepository.meta.value: self.distanceFeedRate.addTagBracketedLine( 'meta', self.prefaceRepository.meta.value) self.distanceFeedRate.addTagBracketedLine( 'perimeterWidth', self.distanceFeedRate.getRounded(self.perimeterWidth)) self.distanceFeedRate.addTagBracketedLine( 'profileName', skeinforge_profile.getProfileName(craftTypeName)) self.distanceFeedRate.addTagBracketedLine('procedureDone', 'carve') self.distanceFeedRate.addTagBracketedLine('procedureDone', 'preface') self.distanceFeedRate.addLine( '(</extruderInitialization>)' ) # Initialization is finished, extrusion is starting. self.distanceFeedRate.addLine( '(<extrusion>)' ) # Initialization is finished, extrusion is starting.
def analyzeFile(fileName): "Behold a gcode file." gcodeText = gcodec.getFileText(fileName) analyzeFileGivenText(fileName, gcodeText)
def getWindowAnalyzeFile(fileName): "Behold a gcode file." gcodeText = gcodec.getFileText(fileName) return getWindowAnalyzeFileGivenText(fileName, gcodeText)
def getWindowAnalyzeFile(fileName): "Write scalable vector graphics for a gcode file." gcodeText = gcodec.getFileText(fileName) return getWindowAnalyzeFileGivenText(fileName, gcodeText)
def analyzeFile( fileName ): "Display a gcode file in a skeinview window." gcodeText = gcodec.getFileText( fileName ) analyzeFileGivenText( fileName, gcodeText )
def getWindowAnalyzeFile( fileName ): "Write statistics for a gcode file." return getWindowAnalyzeFileGivenText( fileName, gcodec.getFileText( fileName ) )
def getWindowAnalyzeFile(fileName): "Display a gcode file in a skeinview window." gcodeText = gcodec.getFileText(fileName) return getWindowAnalyzeFileGivenText(fileName, gcodeText)
def addInitializationToOutput( self ): "Add initialization gcode to the output." self.addFromUpperLowerFile( self.prefaceRepository.nameOfStartFile.value ) # Add a start file if it exists. self.distanceFeedRate.addTagBracketedLine( 'creator', 'skeinforge' ) # GCode formatted comment absoluteFilePathUntilDot = os.path.abspath( __file__ )[ : os.path.abspath( __file__ ).rfind( '.' ) ] if absoluteFilePathUntilDot == '/home/enrique/Desktop/backup/babbleold/script/reprap/pyRepRap/skeinforge_tools/craft_plugins/preface': #check to see if this script is on Enrique's computer gcodec.writeFileText( gcodec.getVersionFileName(), date.today().isoformat() ) versionText = gcodec.getFileText( gcodec.getVersionFileName() ) self.distanceFeedRate.addTagBracketedLine( 'version', versionText ) # GCode formatted comment self.distanceFeedRate.addLine( '(<extruderInitialization>)' ) # GCode formatted comment "BFB CODE 1st INITIALIZATION OF EXTRUDERS --------------------------------------------------------------------------------------------" self.bfbclass = bfb.BfbRepository() self.bfbclass = settings.getReadRepository( self.bfbclass ) self.raftclass = raft.RaftRepository() self.raftclass = settings.getReadRepository( self.raftclass ) self.secondHeadPrimeRev = chan(self.bfbclass.secondHeadPrimeRev.value, 6400) self.secondHeadPrimeSpeed = chan(self.bfbclass.secondHeadPrimeSpeed.value, 10) self.secondHeadPrintRev = chan(self.bfbclass.secondHeadPrintRev.value, 6400) self.secondHeadPrintPrime = chan(self.bfbclass.secondHeadPrintPrime.value, 6400) self.firstHeadPrimeRev = chan(self.bfbclass.firstHeadPrimeRev.value, 6400) self.firsHeadPrimeSpeed = chan(self.bfbclass.firsHeadPrimeSpeed.value, 10) self.firstHeadPrintRev = chan(self.bfbclass.firstHeadPrintRev.value, 6400) self.firstHeadPrintPrime = chan(self.bfbclass.firstHeadPrintPrime.value, 6400) self.speedclass = speed.SpeedRepository() self.speedclass = settings.getReadRepository( self.speedclass ) travelfeedRateMinute=60*self.speedclass.travelFeedRatePerSecond.value version=settings.getfirmware() version=version[0:2] if self.raftclass.activateRaft.value == True: "use second extruder for raft" if self.bfbclass.useRaft.value == True: if version == "x1": self.distanceFeedRate.addLine( '#v3.00' ) self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'M228' ) self.distanceFeedRate.addLine( 'M103' ) self.distanceFeedRate.addLine( 'G92 X'+str(self.bfbclass.secondHeadOffsetX.value)+' Y'+str(self.bfbclass.secondHeadOffsetY.value)+' F'+str(travelfeedRateMinute) ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M204 S'+str(self.bfbclass.RaftT.value) ) self.distanceFeedRate.addLine( 'M552 P'+str(self.secondHeadPrimeRev)+' S'+str(self.secondHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M103 P3200 S1000' ) self.distanceFeedRate.addLine( 'M543' ) if self.bfbclass.useM227.value== True: self.distanceFeedRate.addLine( 'M227 P'+str(self.secondHeadPrintPrime)+' S'+str(self.secondHeadPrintRev) ) if version == "x2": self.distanceFeedRate.addLine( '#v4.00' ) self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'G92 X'+str(self.bfbclass.secondHeadOffsetX.value)+' Y'+str(self.bfbclass.secondHeadOffsetY.value)+' F'+str(travelfeedRateMinute) ) if self.bfbclass.useM227.value== True: self.distanceFeedRate.addLine( 'M227 P'+str(self.secondHeadPrintPrime)+' S'+str(self.secondHeadPrintRev) ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M204 S'+str(self.bfbclass.RaftT.value) ) self.distanceFeedRate.addLine( 'M552 P'+str(self.secondHeadPrimeRev)+' S'+str(self.secondHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M543' ) if self.bfbclass.UseFanEx2.value== True: "Turn ON FAN" self.distanceFeedRate.addLine( 'M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine( 'M107') else: if version == "x1": "use just one extruder for raft" self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'M228' ) self.distanceFeedRate.addLine( 'M103' ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M104 S'+str(self.bfbclass.RaftT.value) ) self.distanceFeedRate.addLine( 'M551 P'+str(self.firstHeadPrimeRev)+' S'+str(self.firsHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M103 P3200 S1000' ) self.distanceFeedRate.addLine( 'M543' ) if version == "x2": "use just one extruder for raft" self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M104 S'+str(self.bfbclass.RaftT.value) ) self.distanceFeedRate.addLine( 'M551 P'+str(self.firstHeadPrimeRev)+' S'+str(self.firsHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M543' ) if self.bfbclass.useM227.value== True: self.distanceFeedRate.addLine( 'M227 P'+str(self.firstHeadPrintPrime)+' S'+str(self.firstHeadPrintRev) ) if self.bfbclass.UseFanEx1.value== True: "Turn ON FAN" self.distanceFeedRate.addLine( 'M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine( 'M107') else: if version == "x1": "NO RAFT" self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'M228' ) self.distanceFeedRate.addLine( 'M103' ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M104 S'+str(self.bfbclass.firstWorkT.value) ) self.distanceFeedRate.addLine( 'M551 P'+str(self.firstHeadPrimeRev)+' S'+str(self.firsHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M103 P3200 S1000' ) self.distanceFeedRate.addLine( 'M543' ) if version == "x2": self.distanceFeedRate.addLine( 'G90' ) self.distanceFeedRate.addLine( 'M107' ) self.distanceFeedRate.addLine( 'M104 S'+str(self.bfbclass.firstWorkT.value) ) self.distanceFeedRate.addLine( 'M551 P'+str(self.firstHeadPrimeRev)+' S'+str(self.firsHeadPrimeSpeed) ) self.distanceFeedRate.addLine( 'M543' ) if self.bfbclass.useM227.value== True: self.distanceFeedRate.addLine( 'M227 P'+str(self.firstHeadPrintPrime)+' S'+str(self.firstHeadPrintRev) ) if self.bfbclass.UseFanEx1.value== True: "Turn ON FAN" self.distanceFeedRate.addLine( 'M106') else: "Turn OFF FAN" self.distanceFeedRate.addLine( 'M107') if self.prefaceRepository.setPositioningToAbsolute.value: self.distanceFeedRate.addLine( 'G90' ) # Set positioning to absolute. if self.prefaceRepository.setUnitsToMillimeters.value: self.distanceFeedRate.addLine( 'G21' ) # Set units to millimeters. if self.prefaceRepository.startAtHome.value: self.distanceFeedRate.addLine( 'G28' ) # Start at home. if self.prefaceRepository.turnExtruderOffAtStartUp.value: self.distanceFeedRate.addLine( 'M103' ) # Turn extruder off. craftTypeName = skeinforge_profile.getCraftTypeName() self.distanceFeedRate.addTagBracketedLine( 'craftTypeName', craftTypeName ) self.distanceFeedRate.addTagBracketedLine( 'decimalPlacesCarried', self.distanceFeedRate.decimalPlacesCarried ) self.distanceFeedRate.addTagBracketedLine( 'layerThickness', self.distanceFeedRate.getRounded( self.layerThickness ) ) if self.prefaceRepository.meta.value: self.distanceFeedRate.addTagBracketedLine( 'meta', self.prefaceRepository.meta.value ) self.distanceFeedRate.addTagBracketedLine( 'perimeterWidth', self.distanceFeedRate.getRounded( self.perimeterWidth ) ) self.distanceFeedRate.addTagBracketedLine( 'profileName', skeinforge_profile.getProfileName( craftTypeName ) ) self.distanceFeedRate.addTagBracketedLine( 'procedureDone', 'carve' ) self.distanceFeedRate.addTagBracketedLine( 'procedureDone', 'preface' ) self.distanceFeedRate.addLine( '(</extruderInitialization>)' ) # Initialization is finished, extrusion is starting. self.distanceFeedRate.addLine( '(<extrusion>)' ) # Initialization is finished, extrusion is starting.
def analyzeFile( fileName ): "Write scalable vector graphics for a gcode file." gcodeText = gcodec.getFileText( fileName ) analyzeFileGivenText( fileName, gcodeText )
def analyzeFile(fileName): "Write scalable vector graphics for a gcode file." gcodeText = gcodec.getFileText(fileName) analyzeFileGivenText(fileName, gcodeText)
def analyzeFile( fileName ): "Comment a gcode file." gcodeText = gcodec.getFileText( fileName ) analyzeFileGivenText( fileName, gcodeText )
def getWindowAnalyzeFile(fileName): "Comment a gcode file." gcodeText = gcodec.getFileText(fileName) return getWindowAnalyzeFileGivenText(fileName, gcodeText)
def getChainText(fileName, procedure): "Get a crafted shape file." text = gcodec.getFileText(fileName) procedures = getProcedures(procedure, text) return getChainTextFromProcedures(fileName, procedures, text)
def getChainText( fileName, procedure ): "Get a crafted shape file." text = gcodec.getFileText( fileName ) procedures = getProcedures( procedure, text ) return getChainTextFromProcedures( fileName, procedures, text )
def getCarving( self, fileName = ''): "Get the triangle mesh for the gts file." carving = SVGCarving() carving.parseSVG( fileName, gcodec.getFileText(fileName) ) return carving
def getWindowAnalyzeFile( fileName ): "Write scalable vector graphics for a gcode file." gcodeText = gcodec.getFileText( fileName ) return getWindowAnalyzeFileGivenText( fileName, gcodeText )
def analyzeFile(fileName): "Display a gcode file in a skeinview window." gcodeText = gcodec.getFileText(fileName) analyzeFileGivenText(fileName, gcodeText)
def getCarving(fileName=''): "Get the triangle mesh for the gts file." carving = SVGCarving() carving.parseSVG(fileName, gcodec.getFileText(fileName)) return carving
def getCarving(fileName): "Get the carving for the gts file." return getFromGNUTriangulatedSurfaceText( gcodec.getFileText(fileName), trianglemesh.TriangleMesh() )
def analyzeFile(fileName): "Comment a gcode file." gcodeText = gcodec.getFileText(fileName) analyzeFileGivenText(fileName, gcodeText)
def analyzeFile( fileName ): "Write statistics for a gcode file." analyzeFileGivenText( fileName, gcodec.getFileText( fileName ) )
def getWindowAnalyzeFile(fileName): "Write statistics for a gcode file." return getWindowAnalyzeFileGivenText(fileName, gcodec.getFileText(fileName))