chiark / gitweb /
Add uppercase STL and HEX to file dialog filters for linux/MacOS
[cura.git] / Cura / cura_sf / skeinforge_application / skeinforge_utilities / skeinforge_analyze.py
1 """
2 Analyze is a script to access the plugins which analyze a gcode file.
3
4 """
5
6 from __future__ import absolute_import
7 #Init has to be imported first because it has code to workaround the python bug where relative imports don't work if the module is imported as a main module.
8 import __init__
9
10 from fabmetheus_utilities import archive
11 from fabmetheus_utilities import gcodec
12 from fabmetheus_utilities import settings
13 from skeinforge_application.skeinforge_utilities import skeinforge_polyfile
14 from skeinforge_application.skeinforge_utilities import skeinforge_profile
15 import os
16 import sys
17 import traceback
18
19
20 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
21 __date__ = '$Date: 2008/21/04 $'
22 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
23
24
25 def getNewRepository():
26         'Get new repository.'
27         return AnalyzeRepository()
28
29 def getPluginFileNames():
30         "Get analyze plugin fileNames."
31         return archive.getPluginFileNamesFromDirectoryPath( getPluginsDirectoryPath() )
32
33 def getPluginsDirectoryPath():
34         "Get the plugins directory path."
35         return archive.getAnalyzePluginsDirectoryPath()
36
37 def writeOutput(fileName, fileNamePenultimate, fileNameSuffix, filePenultimateWritten, gcodeText=''):
38         "Analyze a gcode file."
39         gcodeText = archive.getTextIfEmpty(fileName, gcodeText)
40         pluginFileNames = getPluginFileNames()
41         window = None
42         for pluginFileName in pluginFileNames:
43                 analyzePluginsDirectoryPath = getPluginsDirectoryPath()
44                 pluginModule = archive.getModuleWithDirectoryPath( analyzePluginsDirectoryPath, pluginFileName )
45                 if pluginModule != None:
46                         try:
47                                 newWindow = pluginModule.writeOutput(fileName, fileNamePenultimate, fileNameSuffix,
48                                         filePenultimateWritten, gcodeText )
49                                 if newWindow != None:
50                                         window = newWindow
51                         except:
52                                 print('Warning, the tool %s could not analyze the output.' % pluginFileName )
53                                 print('Exception traceback in writeOutput in skeinforge_analyze:')
54                                 traceback.print_exc(file=sys.stdout)
55         return window
56
57
58 class AnalyzeRepository:
59         "A class to handle the analyze settings."
60         def __init__(self):
61                 "Set the default settings, execute title & settings fileName."
62                 skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_utilities.skeinforge_analyze.html', self)
63                 self.fileNameInput = settings.FileNameInput().getFromFileName( [ ('Gcode text files', '*.gcode') ], 'Open File for Analyze', self, '')
64                 importantFileNames = ['skeiniso', 'skeinlayer', 'statistic']
65                 settings.getRadioPluginsAddPluginFrame( getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self )
66                 self.executeTitle = 'Analyze'
67
68         def execute(self):
69                 "Analyze button has been clicked."
70                 fileNames = skeinforge_polyfile.getFileOrDirectoryTypesUnmodifiedGcode( self.fileNameInput.value, [], self.fileNameInput.wasCancelled )
71                 for fileName in fileNames:
72                         writeOutput( fileName, fileName )
73
74
75 def main():
76         "Write analyze output."
77         fileName = ' '.join(sys.argv[1 :])
78         settings.startMainLoopFromWindow(writeOutput(fileName, fileName))
79
80
81 if __name__ == "__main__":
82         main()