2 Fabmetheus interpret is a fabmetheus utility to interpret a file, turning it into fabmetheus constructive solid geometry xml.
6 from __future__ import absolute_import
8 from fabmetheus_utilities import archive
9 from fabmetheus_utilities import euclidean
10 from fabmetheus_utilities import settings
11 from skeinforge_application.skeinforge_utilities import skeinforge_polyfile
12 from skeinforge_application.skeinforge_utilities import skeinforge_profile
17 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
18 __date__ = '$Date: 2008/21/04 $'
19 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
22 def getCarving(fileName):
24 pluginModule = getInterpretPlugin(fileName)
25 if pluginModule == None:
27 return pluginModule.getCarving(fileName)
29 def getGNUTranslatorFilesUnmodified():
30 "Get the file types from the translators in the import plugins folder."
31 return archive.getFilesWithFileTypesWithoutWords(getImportPluginFileNames())
33 def getGNUTranslatorGcodeFileTypeTuples():
34 "Get the file type tuples from the translators in the import plugins folder plus gcode."
35 fileTypeTuples = [] #getTranslatorFileTypeTuples()
36 fileTypeTuples.append( ('Gcode text files', '*.gcode') )
40 def getImportPluginFileNames():
41 "Get interpret plugin fileNames."
42 return archive.getPluginFileNamesFromDirectoryPath( getPluginsDirectoryPath() )
44 def getInterpretPlugin(fileName):
45 "Get the interpret plugin for the file."
46 importPluginFileNames = getImportPluginFileNames()
47 for importPluginFileName in importPluginFileNames:
48 fileTypeDot = '.' + importPluginFileName
49 if fileName[ - len(fileTypeDot) : ].lower() == fileTypeDot:
50 importPluginsDirectoryPath = getPluginsDirectoryPath()
51 pluginModule = archive.getModuleWithDirectoryPath( importPluginsDirectoryPath, importPluginFileName )
52 if pluginModule != None:
54 print('Could not find plugin to handle ' + fileName )
57 def getNewRepository():
59 return InterpretRepository()
61 def getPluginsDirectoryPath():
62 "Get the plugins directory path."
63 return archive.getInterpretPluginsPath()
65 def getTranslatorFileTypeTuples():
66 "Get the file types from the translators in the import plugins folder."
67 importPluginFileNames = getImportPluginFileNames()
69 for importPluginFileName in importPluginFileNames:
70 fileTypeTitle = importPluginFileName.upper() + ' files'
71 fileType = ( fileTypeTitle, '*.' + importPluginFileName )
72 fileTypeTuples.append( fileType )
76 def getWindowAnalyzeFile(fileName):
77 "Get file interpretion."
78 startTime = time.time()
79 carving = getCarving(fileName)
82 interpretGcode = str( carving )
83 if interpretGcode == '':
85 repository = settings.getReadRepository( InterpretRepository() )
86 if repository.printInterpretion.value:
88 suffixFileName = fileName[ : fileName.rfind('.') ] + '_interpret.' + carving.getInterpretationSuffix()
89 suffixDirectoryName = os.path.dirname(suffixFileName)
90 suffixReplacedBaseName = os.path.basename(suffixFileName).replace(' ', '_')
91 suffixFileName = os.path.join( suffixDirectoryName, suffixReplacedBaseName )
92 archive.writeFileText( suffixFileName, interpretGcode )
93 print('The interpret file is saved as ' + archive.getSummarizedFileName(suffixFileName) )
94 print('It took %s to interpret the file.' % euclidean.getDurationString( time.time() - startTime ) )
95 textProgram = repository.textProgram.value
98 if textProgram == 'webbrowser':
99 settings.openWebPage(suffixFileName)
101 textFilePath = '"' + os.path.normpath(suffixFileName) + '"' # " to send in file name with spaces
102 shellCommand = textProgram + ' ' + textFilePath
103 print('Sending the shell command:')
105 commandResult = os.system(shellCommand)
106 if commandResult != 0:
107 print('It may be that the system could not find the %s program.' % textProgram )
108 print('If so, try installing the %s program or look for another one, like Open Office which can be found at:' % textProgram )
109 print('http://www.openoffice.org/')
110 print('Open office writer can then be started from the command line with the command "soffice -writer".')
113 class InterpretRepository(object):
114 "A class to handle the interpret settings."
116 "Set the default settings, execute title & settings fileName."
117 skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_plugins.analyze_plugins.interpret.html', self)
118 self.fileNameInput = settings.FileNameInput().getFromFileName( getGNUTranslatorGcodeFileTypeTuples(), 'Open File for Interpret', self, '')
119 self.openWikiManualHelpPage = settings.HelpPage().getOpenFromAbsolute('http://fabmetheus.crsndoo.com/wiki/index.php/Skeinforge_Interpret')
120 self.activateInterpret = settings.BooleanSetting().getFromValue('Activate Interpret', self, False )
121 self.printInterpretion = settings.BooleanSetting().getFromValue('Print Interpretion', self, False )
122 self.textProgram = settings.StringSetting().getFromValue('Text Program:', self, 'webbrowser')
123 self.executeTitle = 'Interpret'
126 "Write button has been clicked."
127 fileNames = skeinforge_polyfile.getFileOrGcodeDirectory( self.fileNameInput.value, self.fileNameInput.wasCancelled )
128 for fileName in fileNames:
129 getWindowAnalyzeFile(fileName)