From: daid303 Date: Thu, 4 Apr 2013 12:47:35 +0000 (+0200) Subject: Merge branch 'master' into SteamEngine X-Git-Tag: 13.05~123 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=40c136ab77c2f0597b003a6ae38c1554c2c6c28d;p=cura.git Merge branch 'master' into SteamEngine Conflicts: Cura/slice/cura_sf/fabmetheus_utilities/svg_writer.py --- 40c136ab77c2f0597b003a6ae38c1554c2c6c28d diff --cc Cura/slice/__main__.py index 6c020577,6c020577..00000000 deleted file mode 100644,100644 --- a/Cura/slice/__main__.py +++ /dev/null @@@ -1,215 -1,215 +1,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] [, ][, ...]") -- 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()