chiark / gitweb /
Merge branch 'master' into SteamEngine
[cura.git] / Cura / slice / __main__.py
diff --git a/Cura/slice/__main__.py b/Cura/slice/__main__.py
deleted file mode 100644 (file)
index 6c02057..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-from __future__ import absolute_import
-
-from optparse import OptionParser
-import sys
-import re
-import os
-import urllib
-import urllib2
-import platform
-import hashlib
-
-if not hasattr(sys, 'frozen'):
-       cura_sf_path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "./cura_sf/"))
-       if cura_sf_path not in sys.path:
-               sys.path.append(cura_sf_path)
-
-from Cura.util import profile
-from Cura.util import version
-from Cura.slice.cura_sf.skeinforge_application.skeinforge_plugins.craft_plugins import export
-
-def fixUTF8(input):
-       if input.startswith('#UTF8#'):
-               return input[6:].decode('utf-8')
-       return input
-
-def main():
-       parser = OptionParser(usage="usage: %prog [options] <X,Y> <filename>[, <X,Y> <filename>][, ...]")
-       parser.add_option("-p", "--profile", action="store", type="string", dest="profile",
-                                         help="Encoded profile to use for the print")
-       parser.add_option("-o", "--output", action="store", type="string", dest="output",
-                                         help="Output filename")
-       (options, args) = parser.parse_args()
-       if options.output is None:
-               print 'Missing output filename'
-               sys.exit(1)
-       if options.profile is not None:
-               profile.loadGlobalProfileFromString(options.profile)
-       options.output = fixUTF8(options.output)
-
-       clearZ = 0
-       resultFile = open(options.output, "w")
-       for idx in xrange(0, len(args), 2):
-               position = map(float, args[idx].split(','))
-               if len(position) < 9 + 2:
-                       position = position[0:2]
-                       position += [1,0,0]
-                       position += [0,1,0]
-                       position += [0,0,1]
-               filenames = fixUTF8(args[idx + 1]).split('|')
-
-               profile.setTempOverride('object_center_x', position[0])
-               profile.setTempOverride('object_center_y', position[1])
-               if idx == 0:
-                       resultFile.write(';TYPE:CUSTOM\n')
-                       resultFile.write(profile.getAlterationFileContents('start.gcode', len(filenames)).replace('?filename?', ' '.join(filenames).encode('ascii', 'replace')))
-               else:
-                       resultFile.write(';TYPE:CUSTOM\n')
-                       n = output[-1].rfind('Z')+1
-                       zString = output[-1][n:n+20]
-                       zString = zString[0:zString.find(' ')]
-                       clearZ = max(clearZ, float(zString) + 10)
-                       profile.setTempOverride('clear_z', clearZ)
-                       print position
-                       print profile.getAlterationFileContents('nextobject.gcode')
-                       resultFile.write(profile.getAlterationFileContents('nextobject.gcode').replace('?filename?', ' '.join(filenames).encode('ascii', 'replace')))
-
-               output = []
-               for filename in filenames:
-                       extruderNr = filenames.index(filename)
-                       profile.resetTempOverride()
-                       if extruderNr > 0:
-                               profile.setTempOverride('object_center_x', position[0] - profile.getPreferenceFloat('extruder_offset_x%d' % (extruderNr)))
-                               profile.setTempOverride('object_center_y', position[1] - profile.getPreferenceFloat('extruder_offset_y%d' % (extruderNr)))
-                               profile.setTempOverride('fan_enabled', 'False')
-                               profile.setTempOverride('skirt_line_count', '0')
-                               profile.setTempOverride('alternative_center', filenames[0])
-                       else:
-                               profile.setTempOverride('object_center_x', position[0])
-                               profile.setTempOverride('object_center_y', position[1])
-                       profile.setTempOverride('object_matrix', ','.join(map(str, position[2:11])))
-                       if extruderNr > 0:
-                               if profile.getProfileSettingFloat('filament_diameter%d' % (extruderNr + 1)) > 0:
-                                       profile.setTempOverride('filament_diameter', profile.getProfileSetting('filament_diameter%d' % (extruderNr + 1)))
-                       print extruderNr, profile.getPreferenceFloat('extruder_offset_x%d' % (extruderNr)), profile.getPreferenceFloat('extruder_offset_y%d' % (extruderNr))
-                       output.append(export.getOutput(filename))
-                       profile.resetTempOverride()
-               if len(output) == 1:
-                       resultFile.write(output[0])
-               else:
-                       stitchMultiExtruder(output, resultFile)
-       resultFile.write(';TYPE:CUSTOM\n')
-       resultFile.write(profile.getAlterationFileContents('end.gcode'))
-       resultFile.close()
-
-       print "Running plugins"
-       ret = profile.runPostProcessingPlugins(options.output)
-       if ret is not None:
-               print ret
-       print "Finalizing %s" % (os.path.basename(options.output))
-       if profile.getPreference('submit_slice_information') == 'True':
-               filenames = fixUTF8(args[idx + 1]).split('|')
-               for filename in filenames:
-                       m = hashlib.sha512()
-                       f = open(filename, "rb")
-                       while True:
-                               chunk = f.read(1024)
-                               if not chunk:
-                                       break
-                               m.update(chunk)
-                       f.close()
-                       data = {
-                               'processor': platform.processor(),
-                               'machine': platform.machine(),
-                               'platform': platform.platform(),
-                               'profile': profile.getGlobalProfileString(),
-                               'preferences': profile.getGlobalPreferencesString(),
-                               'modelhash': m.hexdigest(),
-                               'version': version.getVersion(),
-                       }
-                       try:
-                               f = urllib2.urlopen("http://platform.ultimaker.com/curastats/", data = urllib.urlencode(data), timeout = 5);
-                               f.read()
-                               f.close()
-                       except:
-                               pass
-
-
-def isPrintingLine(line):
-       if line.startswith("G1") and ('X' in line or 'Y' in line) and 'E' in line:
-               return True
-       return False
-
-def getCodeFloat(line, code, default):
-       n = line.find(code) + 1
-       if n < 1:
-               return default
-       m = line.find(' ', n)
-       try:
-               if m < 0:
-                       return float(line[n:])
-               return float(line[n:m])
-       except:
-               return default
-
-def stitchMultiExtruder(outputList, resultFile):
-       print "Stitching %i files for multi-extrusion" % (len(outputList))
-       currentExtruder = 0
-       resultFile.write('T%d\n' % (currentExtruder))
-       layerNr = 0
-       hasLine = True
-       outputList = map(lambda o: o.split('\n'), outputList)
-       outputOrder = range(0, len(outputList))
-       outputSlice = []
-       for n in xrange(0, len(outputList)):
-               outputSlice.append([0, 0])
-       currentX = 0
-       currentY = 0
-       currentZ = 0
-       currentF = 60
-       while hasLine:
-               hasLine = layerNr < 1000
-               for n in xrange(0, len(outputList)):
-                       outputSlice[n][0] = outputSlice[n][1] + 1
-                       outputSlice[n][1] = outputSlice[n][0]
-                       while outputSlice[n][1] < len(outputList[n]) and not outputList[n][outputSlice[n][1]].startswith(';LAYER:'):
-                               outputSlice[n][1] += 1
-               outputOrder = range(currentExtruder, len(outputList)) + range(0, currentExtruder)
-               for n in outputOrder:
-                       if outputSlice[n][1] > outputSlice[n][0] + 1:
-                               nextExtruder = n
-                               resultFile.write(';LAYER:%d\n' % (layerNr))
-                               resultFile.write(';EXTRUDER:%d\n' % (nextExtruder))
-
-                               startSlice = outputSlice[n][0]
-                               endSlice = outputSlice[n][1]
-                               currentE = 0
-                               while not isPrintingLine(outputList[n][startSlice]):
-                                       currentE = getCodeFloat(outputList[n][startSlice], 'E', currentE)
-                                       currentX = getCodeFloat(outputList[n][startSlice], 'X', currentX)
-                                       currentY = getCodeFloat(outputList[n][startSlice], 'Y', currentY)
-                                       currentZ = getCodeFloat(outputList[n][startSlice], 'Z', currentZ)
-                                       currentF = getCodeFloat(outputList[n][startSlice], 'F', currentF)
-                                       startSlice += 1
-                               while not isPrintingLine(outputList[n][endSlice-1]):
-                                       endSlice -= 1
-
-                               if nextExtruder != currentExtruder:
-                                       profile.setTempOverride('extruder', nextExtruder)
-                                       profile.setTempOverride('new_x', currentX)
-                                       profile.setTempOverride('new_y', currentY)
-                                       profile.setTempOverride('new_z', currentZ)
-                                       resultFile.write(profile.getAlterationFileContents('switchExtruder.gcode') + '\n')
-                                       profile.resetTempOverride()
-                                       currentExtruder = nextExtruder
-
-                               for idx in xrange(outputSlice[n][0], startSlice):
-                                       if not 'G1' in outputList[n][idx]:
-                                               resultFile.write(outputList[n][idx])
-                                               resultFile.write('\n')
-
-                               resultFile.write('G1 X%f Y%f Z%f F%f\n' % (currentX, currentY, currentZ, profile.getProfileSettingFloat('travel_speed') * 60))
-                               resultFile.write('G1 F%f\n' % (currentF))
-                               resultFile.write('G92 E%f\n' % (currentE))
-                               for idx in xrange(startSlice, endSlice):
-                                       resultFile.write(outputList[n][idx])
-                                       resultFile.write('\n')
-                                       currentX = getCodeFloat(outputList[n][idx], 'X', currentX)
-                                       currentY = getCodeFloat(outputList[n][idx], 'Y', currentY)
-                                       currentZ = getCodeFloat(outputList[n][idx], 'Z', currentZ)
-                                       hasLine = True
-                               resultFile.write('G92 E0\n')
-               layerNr += 1
-
-if __name__ == '__main__':
-       main()