def export_combined(self, name): models = self.models.values() last_real_position = None # Sort models by Z max to print smaller objects first models.sort(key=lambda x: x.dims[-1]) alllayers = [] for (model_i, model) in enumerate(models): alllayers += [(layer.z, model_i, layer_i) for (layer_i, layer) in enumerate(model.gcode.all_layers) if layer] alllayers.sort() laste = [0] * len(models) lasttool = [0] * len(models) lastrelative = [False] * len(models) with open(name, "w") as f: analyzer = gcoder.GCode(None, get_home_pos(self.build_dimensions)) analyzer.write = types.MethodType( lambda self, line: gcoder_write(self, f, line), analyzer) for (layer_z, model_i, layer_i) in alllayers: model = models[model_i] layer = model.gcode.all_layers[layer_i] r = model.rot # no rotation support for now if r != 0 and layer_i == 0: print _("Warning: no rotation support for now, " "object won't be correctly rotated") o = model.offsets co = model.centeroffset offset_pos = last_real_position if last_real_position is not None else ( 0, 0, 0) analyzer.write("; %f %f %f\n" % offset_pos) trans = (-(o[0] + co[0]), -(o[1] + co[1]), -(o[2] + co[2])) trans_wpos = (offset_pos[0] + trans[0], offset_pos[1] + trans[1], offset_pos[2] + trans[2]) analyzer.write("; GCodePlater: Model %d Layer %d at Z = %s\n" % (model_i, layer_i, layer_z)) if lastrelative[model_i]: analyzer.write("G91\n") else: analyzer.write("G90\n") if analyzer.current_tool != lasttool[model_i]: analyzer.write("T%d\n" % lasttool[model_i]) analyzer.write("G92 X%.5f Y%.5f Z%.5f\n" % trans_wpos) analyzer.write("G92 E%.5f\n" % laste[model_i]) for l in layer: if l.command != "G28" and (l.command != "G92" or extrusion_only(l)): analyzer.write(l.raw + "\n") # Find the current real position & E last_real_position = analyzer.current_pos laste[model_i] = analyzer.current_e lastrelative[model_i] = analyzer.relative lasttool[model_i] = analyzer.current_tool print _("Exported merged G-Codes to %s") % name
def export_combined(self, name): models = self.models.values() last_real_position = None # Sort models by Z max to print smaller objects first models.sort(key = lambda x: x.dims[-1]) alllayers = [] for (model_i, model) in enumerate(models): alllayers += [(layer.z, model_i, layer_i) for (layer_i, layer) in enumerate(model.gcode.all_layers) if layer] alllayers.sort() laste = [0] * len(models) lasttool = [0] * len(models) lastrelative = [False] * len(models) with open(name, "w") as f: analyzer = gcoder.GCode(None, get_home_pos(self.build_dimensions)) analyzer.write = types.MethodType(lambda self, line: gcoder_write(self, f, line), analyzer) for (layer_z, model_i, layer_i) in alllayers: model = models[model_i] layer = model.gcode.all_layers[layer_i] r = model.rot # no rotation support for now if r != 0 and layer_i == 0: print _("Warning: no rotation support for now, " "object won't be correctly rotated") o = model.offsets co = model.centeroffset offset_pos = last_real_position if last_real_position is not None else (0, 0, 0) analyzer.write("; %f %f %f\n" % offset_pos) trans = (- (o[0] + co[0]), - (o[1] + co[1]), - (o[2] + co[2])) trans_wpos = (offset_pos[0] + trans[0], offset_pos[1] + trans[1], offset_pos[2] + trans[2]) analyzer.write("; GCodePlater: Model %d Layer %d at Z = %s\n" % (model_i, layer_i, layer_z)) if lastrelative[model_i]: analyzer.write("G91\n") else: analyzer.write("G90\n") if analyzer.current_tool != lasttool[model_i]: analyzer.write("T%d\n" % lasttool[model_i]) analyzer.write("G92 X%.5f Y%.5f Z%.5f\n" % trans_wpos) analyzer.write("G92 E%.5f\n" % laste[model_i]) for l in layer: if l.command != "G28" and (l.command != "G92" or extrusion_only(l)): analyzer.write(l.raw + "\n") # Find the current real position & E last_real_position = analyzer.current_pos laste[model_i] = analyzer.current_e lastrelative[model_i] = analyzer.relative lasttool[model_i] = analyzer.current_tool print _("Exported merged G-Codes to %s") % name
def load_file(self, filename): gcode = gcoder.GCode(open(filename, "rU"), get_home_pos(self.build_dimensions)) model = actors.GcodeModel() model.load_data(gcode) obj = gcview.GCObject(model) obj.gcode = gcode obj.dims = [gcode.xmin, gcode.xmax, gcode.ymin, gcode.ymax, gcode.zmin, gcode.zmax] obj.centeroffset = [-(obj.dims[1] + obj.dims[0]) / 2, -(obj.dims[3] + obj.dims[2]) / 2, 0] self.add_model(filename, obj) wx.CallAfter(self.Refresh)
def load_file(self, filename): gcode = gcoder.GCode(open(filename, "rU"), get_home_pos(self.build_dimensions)) model = actors.GcodeModel() model.load_data(gcode) obj = gcview.GCObject(model) obj.gcode = gcode obj.dims = [ gcode.xmin, gcode.xmax, gcode.ymin, gcode.ymax, gcode.zmin, gcode.zmax ] obj.centeroffset = [ -(obj.dims[1] + obj.dims[0]) / 2, -(obj.dims[3] + obj.dims[2]) / 2, 0 ] self.add_model(filename, obj) wx.CallAfter(self.Refresh)