diff --git a/src/octoprint/plugins/svgtogcode/static/js/convert.js b/src/octoprint/plugins/svgtogcode/static/js/convert.js index aefe1cdd..e4d735d3 100644 --- a/src/octoprint/plugins/svgtogcode/static/js/convert.js +++ b/src/octoprint/plugins/svgtogcode/static/js/convert.js @@ -1,8 +1,9 @@ -function VectorConversionViewModel(loginStateViewModel, settingsViewModel) { +function VectorConversionViewModel(loginStateViewModel, settingsViewModel, workingAreaViewModel) { var self = this; self.loginState = loginStateViewModel; self.settings = settingsViewModel; + self.workingArea = workingAreaViewModel; self.target = undefined; self.file = undefined; @@ -39,11 +40,42 @@ function VectorConversionViewModel(loginStateViewModel, settingsViewModel) { self.svg = s.outerSVG(); // TODO: js svg conversion self.title(gettext("Converting")); - var gcodeFile = "tmp"+Date.now()+".gco"; // TODO: user should not deal with gcode anymore. go and laser it. + var gcodeFile = self.create_gcode_filename(self.workingArea.placedDesigns()); self.gcodeFilename(gcodeFile); $("#dialog_vector_graphics_conversion").modal("show"); }; + self.create_gcode_filename = function(placedDesigns){ + if(placedDesigns.length > 0){ + var filemap = {}; + for(var idx in placedDesigns){ + var design = placedDesigns[idx]; + var start = design.url.lastIndexOf('/')+1; + var end = design.url.lastIndexOf('.'); + var name = design.url.substring(start, end); + if(filemap[name] !== undefined) filemap[name] += 1; + else filemap[name] = 1; + } + var mostPlaced; + var placed = 0; + for(var name in filemap){ + if(filemap[name] > placed){ + mostPlaced = name; + placed = filemap[name]; + } + } + var uniqueDesigns = Object.keys(filemap).length; + var gcode_name = mostPlaced; + if(placed > 1) gcode_name += "." + placed + "x"; + if(uniqueDesigns > 1){ + gcode_name += "_"+(uniqueDesigns-1)+"more"; + } + return gcode_name + ".gco"; + } else { + return "tmp"+Date.now()+".gco"; // TODO: user should not deal with gcode anymore. go and laser it. + } + }; + self.slicer.subscribe(function(newValue) { self.profilesForSlicer(newValue); }); diff --git a/src/octoprint/plugins/svgtogcode/static/js/working_area.js b/src/octoprint/plugins/svgtogcode/static/js/working_area.js index ac3baa2f..3d25c73c 100644 --- a/src/octoprint/plugins/svgtogcode/static/js/working_area.js +++ b/src/octoprint/plugins/svgtogcode/static/js/working_area.js @@ -1,9 +1,9 @@ -function WorkingAreaViewModel(loginStateViewModel, settingsViewModel, printerStateViewModel) { +function WorkingAreaViewModel(loginStateViewModel, settingsViewModel) { var self = this; self.loginState = loginStateViewModel; self.settings = settingsViewModel; - self.state = printerStateViewModel; + self.state = undefined; self.log = []; diff --git a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 index ccfe2416..5997ff11 100644 --- a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 +++ b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 @@ -295,7 +295,7 @@ var UI_API_KEY = "{{ uiApiKey }}";