chiark / gitweb /
Add back the ultimaker platform, and made the platform mesh simpler.
[cura.git] / Cura / slice / 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
8 from fabmetheus_utilities import archive
9 from fabmetheus_utilities import settings
10 from skeinforge_application.skeinforge_utilities import skeinforge_polyfile
11 from skeinforge_application.skeinforge_utilities import skeinforge_profile
12 import sys
13 import traceback
14
15
16 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
17 __date__ = '$Date: 2008/21/04 $'
18 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
19
20
21 def getNewRepository():
22         'Get new repository.'
23         return AnalyzeRepository()
24
25 def getPluginFileNames():
26         "Get analyze plugin fileNames."
27         return archive.getPluginFileNamesFromDirectoryPath( getPluginsDirectoryPath() )
28
29 def getPluginsDirectoryPath():
30         "Get the plugins directory path."
31         return archive.getAnalyzePluginsDirectoryPath()
32
33 def writeOutput(fileName, fileNamePenultimate, fileNameSuffix, filePenultimateWritten, gcodeText=''):
34         "Analyze a gcode file."
35         gcodeText = archive.getTextIfEmpty(fileName, gcodeText)
36         pluginFileNames = getPluginFileNames()
37         window = None
38         for pluginFileName in pluginFileNames:
39                 analyzePluginsDirectoryPath = getPluginsDirectoryPath()
40                 pluginModule = archive.getModuleWithDirectoryPath( analyzePluginsDirectoryPath, pluginFileName )
41                 if pluginModule != None:
42                         try:
43                                 newWindow = pluginModule.writeOutput(fileName, fileNamePenultimate, fileNameSuffix,
44                                         filePenultimateWritten, gcodeText )
45                                 if newWindow != None:
46                                         window = newWindow
47                         except:
48                                 print('Warning, the tool %s could not analyze the output.' % pluginFileName )
49                                 print('Exception traceback in writeOutput in skeinforge_analyze:')
50                                 traceback.print_exc(file=sys.stdout)
51         return window
52
53
54 class AnalyzeRepository(object):
55         "A class to handle the analyze settings."
56         def __init__(self):
57                 "Set the default settings, execute title & settings fileName."
58                 skeinforge_profile.addListsToCraftTypeRepository('skeinforge_application.skeinforge_utilities.skeinforge_analyze.html', self)
59                 self.fileNameInput = settings.FileNameInput().getFromFileName( [ ('Gcode text files', '*.gcode') ], 'Open File for Analyze', self, '')
60                 importantFileNames = ['skeiniso', 'skeinlayer', 'statistic']
61                 settings.getRadioPluginsAddPluginFrame( getPluginsDirectoryPath(), importantFileNames, getPluginFileNames(), self )
62                 self.executeTitle = 'Analyze'
63
64         def execute(self):
65                 "Analyze button has been clicked."
66                 fileNames = skeinforge_polyfile.getFileOrDirectoryTypesUnmodifiedGcode( self.fileNameInput.value, [], self.fileNameInput.wasCancelled )
67                 for fileName in fileNames:
68                         writeOutput( fileName, fileName )
69
70
71 def main():
72         "Write analyze output."
73         fileName = ' '.join(sys.argv[1 :])
74         settings.startMainLoopFromWindow(writeOutput(fileName, fileName))
75
76
77 if __name__ == "__main__":
78         main()