1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
"""
Consecution is a collection of utilities to chain together the craft plugins.
"""
from __future__ import absolute_import
#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.
import __init__
from skeinforge_tools.skeinforge_utilities import gcodec
from skeinforge_tools.skeinforge_utilities import settings
from skeinforge_tools import analyze
from skeinforge_tools import profile
import os
import sys
import time
__author__ = "Enrique Perez (perez_enrique@yahoo.com)"
__date__ = "$Date: 2008/21/04 $"
__license__ = "GPL 3.0"
def getCraftModule( fileName ):
"Get craft module."
craftPluginsDirectoryPath = gcodec.getAbsoluteFolderPath( os.path.dirname( __file__ ), 'craft_plugins' )
return gcodec.getModuleWithDirectoryPath( craftPluginsDirectoryPath, fileName )
def getChainText( fileName, procedure ):
"Get a crafted shape file."
text = gcodec.getFileText( fileName )
procedures = getProcedures( procedure, text )
return getChainTextFromProcedures( fileName, procedures, text )
def getChainTextFromProcedures( fileName, procedures, text ):
"Get a crafted shape file from a list of procedures."
lastProcedureTime = time.time()
for procedure in procedures:
craftModule = getCraftModule( procedure )
if craftModule != None:
text = craftModule.getCraftedText( fileName, text )
if gcodec.isProcedureDone( text, procedure ):
print( '%s procedure took %s seconds.' % ( procedure.capitalize(), int( round( time.time() - lastProcedureTime ) ) ) )
lastProcedureTime = time.time()
return text
def getLastModule():
"Get the last tool."
craftSequence = getReadCraftSequence()
if len( craftSequence ) < 1:
return None
return getCraftModule( craftSequence[ - 1 ] )
def getProcedures( procedure, text ):
"Get the procedures up to and including the given procedure."
craftSequence = getReadCraftSequence()
sequenceIndexPlusOneFromText = getSequenceIndexPlusOneFromText( text )
sequenceIndexFromProcedure = getSequenceIndexFromProcedure( procedure )
return craftSequence[ sequenceIndexPlusOneFromText : sequenceIndexFromProcedure + 1 ]
def getReadCraftSequence():
"Get profile sequence."
return profile.getCraftTypePluginModule().getCraftSequence()
def getSequenceIndexPlusOneFromText( fileText ):
"Get the profile sequence index of the file plus one. Return zero if the procedure is not in the file"
craftSequence = getReadCraftSequence()
for craftSequenceIndex in xrange( len( craftSequence ) - 1, - 1, - 1 ):
procedure = craftSequence[ craftSequenceIndex ]
if gcodec.isProcedureDone( fileText, procedure ):
return craftSequenceIndex + 1
return 0
def getSequenceIndexFromProcedure( procedure ):
"Get the profile sequence index of the procedure. Return None if the procedure is not in the sequence"
craftSequence = getReadCraftSequence()
if procedure not in craftSequence:
return 0
return craftSequence.index( procedure )
def writeChainTextWithNounMessage( fileName, procedure ):
"Get and write a crafted shape file."
print( '' )
print( 'The %s tool is parsing the file:' % procedure )
print( os.path.basename( fileName ) )
print( '' )
startTime = time.time()
suffixFileName = fileName[ : fileName.rfind( '.' ) ] + '_' + procedure + '.gcode'
craftText = getChainText( fileName, procedure )
if craftText == '':
return
gcodec.writeFileText( suffixFileName, craftText )
print( '' )
print( 'The %s tool has created the file:' % procedure )
print( suffixFileName )
print( '' )
print( 'It took ' + str( int( round( time.time() - startTime ) ) ) + ' seconds to craft the file.' )
analyze.writeOutput( suffixFileName, craftText )
|