diff --git a/src/octoprint/plugins/lasercutterprofiles/__init__.py b/src/octoprint/plugins/lasercutterprofiles/__init__.py index a9631410..8b0ad5ee 100644 --- a/src/octoprint/plugins/lasercutterprofiles/__init__.py +++ b/src/octoprint/plugins/lasercutterprofiles/__init__.py @@ -24,9 +24,12 @@ import copy from octoprint.server.util.flask import restricted_access from flask import Blueprint, request, jsonify, abort, current_app, session, make_response, url_for - +default_settings = { + "current_profile_id": "_mrbeam_junior" +} +s = octoprint.plugin.plugin_settings("lasercutterprofiles", defaults=default_settings) blueprint = flask.Blueprint("plugin.lasercutterprofiles", __name__) -laserCutterProfileManager = LaserCutterProfileManager() +laserCutterProfileManager = LaserCutterProfileManager(s) @blueprint.route("/profiles", methods=["GET"]) def laserCutterProfilesList(): @@ -73,8 +76,8 @@ def laserCutterProfilesAdd(): return make_response("Profile is invalid", 400) except CouldNotOverwriteError: return make_response("Profile already exists and overwriting was not allowed", 400) - except Exception as e: - return make_response("Could not save profile: %s" % e.message, 500) + #except Exception as e: + # return make_response("Could not save profile: %s" % e.message, 500) else: return jsonify(dict(profile=_convert_profile(saved_profile))) @@ -126,8 +129,8 @@ def laserCutterProfilesUpdate(identifier): return make_response("Profile is invalid", 400) except CouldNotOverwriteError: return make_response("Profile already exists and overwriting was not allowed", 400) - except Exception as e: - return make_response("Could not save profile: %s" % e.message, 500) + #except Exception as e: + # return make_response("Could not save profile: %s" % e.message, 500) else: return jsonify(dict(profile=_convert_profile(saved_profile))) @@ -149,13 +152,6 @@ def _convert_profile(profile): -default_settings = { - "zAxis": False, - "working_area_width": 216, - "working_area_height": 297 -} -s = octoprint.plugin.plugin_settings("lasercutterprofiles", defaults=default_settings) - class LaserCutterProfilesPlugin(octoprint.plugin.SettingsPlugin, octoprint.plugin.StartupPlugin, @@ -184,20 +180,21 @@ class LaserCutterProfilesPlugin(octoprint.plugin.SettingsPlugin, ##~~ SettingsPlugin API def on_settings_load(self): - return dict( - workingAreaHeight=s.get(["workingAreaHeight"]), - workingAreaWidth=s.get(["workingAreaWidth"]), - zAxis=s.getBoolean(["zAxis"]) + cfg = dict( + current_profile_id=s.get(["current_profile_id"]), ) + print("on_settings_load", cfg) + return cfg def on_settings_save(self, data): - if "workingAreaHeight" in data and data["workingAreaHeight"]: - s.set(["workingAreaHeight"], data["workingAreaHeight"]) if "workingAreaWidth" in data and data["workingAreaWidth"]: s.set(["workingAreaWidth"], data["workingAreaWidth"]) if "zAxis" in data: zAxis = data["zAxis"] in octoprint.settings.valid_boolean_trues s.setBoolean(["zAxis"], zAxis) + selectedProfile = laserCutterProfileManager.get_current_or_default() + print("on_settings_save", selectedProfile) + s.set(["current_profile_id"], selectedProfile['id']) ##~~ TemplatePlugin API diff --git a/src/octoprint/plugins/lasercutterprofiles/profile.py b/src/octoprint/plugins/lasercutterprofiles/profile.py index a4cb1ddd..5fd7ed71 100644 --- a/src/octoprint/plugins/lasercutterprofiles/profile.py +++ b/src/octoprint/plugins/lasercutterprofiles/profile.py @@ -11,7 +11,6 @@ import copy import re import logging -from octoprint.settings import settings from octoprint.util import dict_merge, dict_clean, dict_contains_keys class SaveError(Exception): @@ -42,9 +41,10 @@ class LaserCutterProfileManager(object): ) ) - def __init__(self): + def __init__(self, settings): self._current = None - self._folder = settings().getBaseFolder("plugins")+"/lasercutterprofiles" + self.settings = settings + self._folder = self.settings.getBaseFolder("plugins")+"/lasercutterprofiles" if not os.path.exists(self._folder): os.makedirs(self._folder) self._logger = logging.getLogger(__name__) @@ -91,24 +91,23 @@ class LaserCutterProfileManager(object): profile["id"] = identifier profile = dict_clean(profile, self.__class__.default) - print("save", profile) if identifier == "_default": default_profile = dict_merge(self._load_default(), profile) if not self._ensure_valid_profile(default_profile): raise InvalidProfileError() - settings().set(["printerProfiles", "defaultProfile"], default_profile, defaults=dict(printerProfiles=dict(defaultProfile=self.__class__.default))) - settings().save() + self.settings.set(["defaultProfile"], default_profile, defaults=dict(lasercutterprofiles=dict(defaultProfile=self.__class__.default))) + self.settings.save() else: self._save_to_path(self._get_profile_path(identifier), profile, allow_overwrite=allow_overwrite) if make_default: - settings().set(["printerProfiles", "default"], identifier) + self.set_default(identifier) return self.get(identifier) def get_default(self): - default = settings().get(["printerProfiles", "default"]) + default = self.settings.get(["current_profile_id"]) if default is not None and self.exists(default): profile = self.get(default) if profile is not None: @@ -121,8 +120,8 @@ class LaserCutterProfileManager(object): if identifier is not None and not identifier in all_identifiers: return - settings().set(["printerProfile", "default"], identifier) - settings().save() + self.settings.set(["current_profile_id"], identifier) + self.settings.save() def get_current_or_default(self): if self._current is not None: @@ -191,7 +190,6 @@ class LaserCutterProfileManager(object): def _save_to_path(self, path, profile, allow_overwrite=False): validated_profile = self._ensure_valid_profile(profile) - print("_save_to_path", validated_profile, path) if not validated_profile: raise InvalidProfileError() @@ -203,7 +201,6 @@ class LaserCutterProfileManager(object): try: yaml.safe_dump(profile, f, default_flow_style=False, indent=" ", allow_unicode=True) except Exception as e: - print (e.message) raise SaveError("Cannot save profile %s: %s" % (profile["id"], e.message)) def _remove_from_path(self, path): @@ -214,7 +211,7 @@ class LaserCutterProfileManager(object): return False def _load_default(self, defaultModel = None): - default_overrides = settings().get(["laserCutterProfiles", defaultModel]) + default_overrides = self.settings.get([defaultModel]) default = copy.deepcopy(self.__class__.default) if(defaultModel is not None and defaultModel == "_mrbeam_senior"): default['volume']['width'] *= 2 @@ -252,7 +249,6 @@ class LaserCutterProfileManager(object): def _ensure_valid_profile(self, profile): # ensure all keys are present if not dict_contains_keys(self.default, profile): - print("key error") return False # conversion helper @@ -274,7 +270,6 @@ class LaserCutterProfileManager(object): try: convert_value(profile, path, int) except: - print("int error") return False # convert floats @@ -282,7 +277,6 @@ class LaserCutterProfileManager(object): try: convert_value(profile, path, float) except: - print("float error") return False # convert booleans @@ -290,7 +284,6 @@ class LaserCutterProfileManager(object): try: convert_value(profile, path, bool) except: - print("bool error") return False return profile diff --git a/src/octoprint/plugins/lasercutterprofiles/static/js/lasercutterprofiles.js b/src/octoprint/plugins/lasercutterprofiles/static/js/lasercutterprofiles.js index ceb46cce..9a819214 100644 --- a/src/octoprint/plugins/lasercutterprofiles/static/js/lasercutterprofiles.js +++ b/src/octoprint/plugins/lasercutterprofiles/static/js/lasercutterprofiles.js @@ -3,35 +3,26 @@ $(function() { function LaserCutterProfilesViewModel(params) { var self = this; - self.settings = params[0]; + self.workingarea = params[0]; self._cleanProfile = function() { return { id: "", name: "", model: "", - color: "default", volume: { formFactor: "rectangular", - width: 200, - depth: 200, - height: 200 + width: 216, + depth: 297, + height: 0 }, - heatedBed: false, + zAxis: false, axes: { x: {speed: 6000, inverted: false}, y: {speed: 6000, inverted: false}, - z: {speed: 200, inverted: false}, - e: {speed: 300, inverted: false} - }, - extruder: { - count: 1, - offsets: [ - [0,0] - ], - nozzleDiameter: 0.4 + z: {speed: 200, inverted: false} } - } + }; }; self.profiles = new ItemListHelper( @@ -58,26 +49,18 @@ $(function() { self.editorNew = ko.observable(false); self.editorName = ko.observable(); -// self.editorColor = ko.observable(); self.editorIdentifier = ko.observable(); self.editorModel = ko.observable(); self.editorVolumeWidth = ko.observable(); self.editorVolumeDepth = ko.observable(); self.editorVolumeHeight = ko.observable(); -// self.editorVolumeFormFactor = ko.observable(); -// self.editorHeatedBed = ko.observable(); self.editorZAxis = ko.observable(); -// self.editorNozzleDiameter = ko.observable(); -// self.editorExtruders = ko.observable(); -// self.editorExtruderOffsets = ko.observableArray(); - self.editorAxisXSpeed = ko.observable(); self.editorAxisYSpeed = ko.observable(); self.editorAxisZSpeed = ko.observable(); -// self.editorAxisESpeed = ko.observable(); self.editorAxisXInverted = ko.observable(false); self.editorAxisYInverted = ko.observable(false); @@ -122,6 +105,9 @@ $(function() { self.defaultProfile(defaultProfile); self.currentProfile(currentProfile); self.currentProfileData(currentProfileData); + + self.workingarea.workingAreaWidthMM(self.currentProfileData().volume.width()); + self.workingarea.workingAreaHeightMM(self.currentProfileData().volume.depth()); }; self.addProfile = function(callback) { @@ -154,6 +140,8 @@ $(function() { if (profile == undefined) { profile = self._editorData(); } + + console.log("updateProfile", profile); $.ajax({ url: BASEURL + "plugin/lasercutterprofiles/profiles/" + profile.id, @@ -253,16 +241,14 @@ $(function() { self.onSettingsShown = self.requestData; self.onStartup = function(){ - console.log("lasercutter profiles onStartup"); - self.settings.laserCutterProfiles = self; - self.requestData; + self.requestData(); }; } // view model class, identifier, parameters for constructor, container to bind to ADDITIONAL_VIEWMODELS.push([LaserCutterProfilesViewModel, "laserCutterProfilesViewModel", - ["settingsViewModel"], + ["workingAreaViewModel"], document.getElementById("laserCutterProfiles")]); }); diff --git a/src/octoprint/plugins/svgtogcode/static/js/working_area.js b/src/octoprint/plugins/svgtogcode/static/js/working_area.js index c3dec03b..6824ac77 100644 --- a/src/octoprint/plugins/svgtogcode/static/js/working_area.js +++ b/src/octoprint/plugins/svgtogcode/static/js/working_area.js @@ -21,12 +21,14 @@ function WorkingAreaViewModel(params) { self.availableHeight = ko.observable(undefined); self.availableWidth = ko.observable(undefined); self.px2mm_factor = 1; // initial value + self.workingAreaWidthMM = ko.observable(undefined); + self.workingAreaHeightMM = ko.observable(undefined); self.hwRatio = ko.computed(function(){ // y/x = 297/216 respectively 594/432 -// var h = self.settings.laserCutterProfiles.currentProfileData().volume.depth(); -// var w = self.settings.laserCutterProfiles.currentProfileData().volume.width(); - var h = self.settings.printerProfiles.currentProfileData().volume.depth(); - var w = self.settings.printerProfiles.currentProfileData().volume.width(); + var h = self.workingAreaWidthMM(); + var w = self.workingAreaHeightMM(); +// var h = self.settings.printerProfiles.currentProfileData().volume.depth(); +// var w = self.settings.printerProfiles.currentProfileData().volume.width(); var ratio = h / w; return ratio; }, self); @@ -50,18 +52,18 @@ function WorkingAreaViewModel(params) { } }); - self.workingAreaWidth = ko.computed(function(){ + self.workingAreaWidthPx = ko.computed(function(){ var dim = self.workingAreaDim(); return dim ? dim[0] : 1; }, self); - self.workingAreaHeight = ko.computed(function(){ + self.workingAreaHeightPx = ko.computed(function(){ var dim = self.workingAreaDim(); return dim ? dim[1] : 1; }, self); self.px2mm_factor = ko.computed(function(){ - return self.settings.printerProfiles.currentProfileData().volume.width() / self.workingAreaWidth(); + return self.workingAreaWidthMM() / self.workingAreaWidthPx(); }); self.scaleMatrix = ko.computed(function(){ diff --git a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 index cb1ce35f..97121a9b 100644 --- a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 +++ b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 @@ -289,8 +289,8 @@ data-bind="click: move_laser, style: { backgroundPosition: crosshairX()+'px'+' '+crosshairY()+'px', - width: workingAreaWidth()+'px', - height: workingAreaHeight()+'px' + width: workingAreaWidthPx()+'px', + height: workingAreaHeightPx()+'px' }, attr: { transform: scaleMatrix() } "> diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 3d145052..5fa039aa 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -27,7 +27,7 @@ -