diff --git a/src/octoprint/plugins/svgtogcode/static/js/working_area.js b/src/octoprint/plugins/svgtogcode/static/js/working_area.js
index a6a4ffe1..226a79ad 100644
--- a/src/octoprint/plugins/svgtogcode/static/js/working_area.js
+++ b/src/octoprint/plugins/svgtogcode/static/js/working_area.js
@@ -16,18 +16,37 @@ function WorkingAreaViewModel(loginStateViewModel, settingsViewModel, printerSta
self.isError = ko.observable(undefined);
self.isReady = ko.observable(undefined);
self.isLoading = ko.observable(undefined);
+ self.currentPos = ko.observable(undefined);
self.laserPos = ko.computed(function(){
- console.log("foo")
- x = self.x === undefined ? '?' : self.x;
- y = self.y === undefined ? '?' : self.y;
- return "x"+ x + ", y"+ y;
+ var pos = self.currentPos();
+ if(!pos){
+
+ return "(?, ?)";
+ } else {
+ return "("+ pos.x + ", "+ pos.y + ")";
+ }
}, this);
+
+ self._processPos = function(posStr) {
+ // example posStr: "X: 73.0000 Y: 192.0000 Z: 0.0000"
+ var parts = posStr.split(" ");
+ var x = parseFloat(parts[1]).toFixed(2)
+ var y = parseFloat(parts[3]).toFixed(2)
+ self.currentPos({x:x, y:y});
+ };
+
+ self._fromData = function(data) {
+ workPosition = data.workPosition;
+ self._processPos(workPosition);
+ };
+
+ self.fromCurrentData = function(data) {
+ self._fromData(data);
+ };
self.move_laser = function(el){
- console.log(event);
var x = event.offsetX;
var y = event.toElement.offsetHeight - event.offsetY;
- console.log(x, y);
var command = "G0 X"+x+" Y"+y;
$.ajax({
url: API_BASEURL + "printer/command",
@@ -49,12 +68,8 @@ function WorkingAreaViewModel(loginStateViewModel, settingsViewModel, printerSta
self.pause = self.state.pause;
self.cancel = self.state.cancel;
-// self.enable_focus = function(){
-// $root.sendCustomCommand({type:'command',command:'M3S5'})
-// }
-// self.disable_focus = function(){
-// $root.sendCustomCommand({type:'command',command:'M5'})
-// }
+
+
//
// self.getLaserPos = function(){
// console.log("foo")
diff --git a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2 b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2
index 65ded5b0..e558ed45 100644
--- a/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2
+++ b/src/octoprint/plugins/svgtogcode/templates/override_index.jinja2
@@ -422,8 +422,8 @@
-
-
+
+
diff --git a/src/octoprint/printer.py b/src/octoprint/printer.py
index 53f809fb..3229a189 100644
--- a/src/octoprint/printer.py
+++ b/src/octoprint/printer.py
@@ -58,6 +58,8 @@ class Printer():
self._state = None
self._currentZ = None
+ self._machinePosition = "-"
+ self._workPosition = "-"
self._progress = None
self._printTime = None
@@ -196,6 +198,7 @@ class Printer():
def jog(self, axis, amount):
movementSpeed = settings().get(["printerParameters", "movementSpeed", ["x", "y", "z"]], asdict=True)
self.commands(["G91", "G1 %s%.4f F%d" % (axis.upper(), amount, movementSpeed[axis]), "G90"])
+ self.command("?")
def home(self, axes):
#self.commands(["G91", "G28 %s" % " ".join(map(lambda x: "%s0" % x.upper(), axes)), "G90"])
@@ -277,9 +280,22 @@ class Printer():
if self._selectedFile is None:
return
+ self._addPositionData(None)
self._setCurrentZ(None)
self._comm.startPrint()
+ def _addPositionData(self, MPos, WPos):
+
+ if MPos is None or WPos is None:
+ MPosString = WPosString = "-"
+ else:
+ MPosString = "X: %.4f Y: %.4f Z: %.4f" % ( MPos[0], MPos[1], MPos[2] )
+ WPosString = "X: %.4f Y: %.4f Z: %.4f" % ( WPos[0], WPos[1], WPos[2] )
+
+
+ self._stateMonitor.setWorkPosition(WPosString)
+ self._stateMonitor.setMachinePosition(MPosString)
+
def togglePausePrint(self):
"""
Pause the current printjob.
@@ -467,6 +483,10 @@ class Printer():
def mcTempUpdate(self, temp, bedTemp):
self._addTemperatureData(temp, bedTemp)
+ def mcPosUpdate(self, MPos, WPos):
+ print WPos
+ self._addPositionData(MPos, WPos)
+
def mcStateChange(self, state):
"""
Callback method for the comm object, called if the connection state changes.
@@ -693,6 +713,8 @@ class StateMonitor(object):
self._gcodeData = None
self._sdUploadData = None
self._currentZ = None
+ self._machinePosition = None
+ self._workPosition = None
self._progress = None
self._offsets = {}
@@ -705,16 +727,26 @@ class StateMonitor(object):
self._worker.daemon = True
self._worker.start()
- def reset(self, state=None, jobData=None, progress=None, currentZ=None):
+ def reset(self, state=None, jobData=None, progress=None, currentZ=None, machinePosition=None, workPosition=None):
self.setState(state)
self.setJobData(jobData)
self.setProgress(progress)
+ self.setMachinePosition(machinePosition)
+ self.setWorkPosition(workPosition)
self.setCurrentZ(currentZ)
def addTemperature(self, temperature):
self._addTemperatureCallback(temperature)
self._changeEvent.set()
+ def setWorkPosition(self, workPosition):
+ self._workPosition = workPosition
+ self._changeEvent.set()
+
+ def setMachinePosition(self, machinePosition):
+ self._machinePosition = machinePosition
+ self._changeEvent.set()
+
def addLog(self, log):
self._addLogCallback(log)
self._changeEvent.set()
@@ -764,6 +796,8 @@ class StateMonitor(object):
return {
"state": self._state,
"job": self._jobData,
+ "machinePosition": self._machinePosition,
+ "workPosition": self._workPosition,
"currentZ": self._currentZ,
"progress": self._progress,
"offsets": self._offsets
diff --git a/src/octoprint/server/api/printer.py b/src/octoprint/server/api/printer.py
index 55ae6d3b..165a7b53 100644
--- a/src/octoprint/server/api/printer.py
+++ b/src/octoprint/server/api/printer.py
@@ -326,6 +326,9 @@ def printerCommand():
commandToSend = command % parameters
commandsToSend.append(commandToSend)
+ if settings().getBoolean(["feature", "grbl"]):
+ commandsToSend.append("?")
+
printer.commands(commandsToSend)
return NO_CONTENT
diff --git a/src/octoprint/server/util/sockjs.py b/src/octoprint/server/util/sockjs.py
index 22374eac..99be19b3 100644
--- a/src/octoprint/server/util/sockjs.py
+++ b/src/octoprint/server/util/sockjs.py
@@ -70,6 +70,7 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection):
pass
def sendCurrentData(self, data):
+ print("send_current_data", data)
# add current temperature, log and message backlogs to sent data
with self._temperatureBacklogMutex:
temperatures = self._temperatureBacklog
@@ -131,4 +132,5 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection):
self.sendEvent(event, payload)
def _emit(self, type, payload):
+ print("emit", type, payload)
self.send({type: payload})
diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py
index 7118ab34..ea765a2d 100644
--- a/src/octoprint/util/comm.py
+++ b/src/octoprint/util/comm.py
@@ -91,7 +91,7 @@ gcodeToEvent = {
"M300": Events.ALERT,
# home print head
- "G28": Events.HOME,
+ "$H": Events.HOME,
# emergency stop
"M112": Events.E_STOP,
@@ -647,6 +647,8 @@ class MachineCom(object):
heatingUp = False
swallowOk = False
supportRepetierTargetTemp = settings().getBoolean(["feature", "repetierTargetTemp"])
+ grblMoving = True
+ grblLastStatus = ""
while True:
try:
@@ -725,6 +727,27 @@ class MachineCom(object):
except ValueError:
pass
+ # GRBL Position update
+ if self._grbl and 'MPos:' in line:
+
+ if grblLastStatus == line:
+ grblMoving = False
+ else:
+ grblMoving = True
+
+ grblLastStatus = line
+
+ parts = line.strip("\r\n").split(":")
+
+ pos = parts[1].split(",")
+ MPos = (float(pos[0]), float(pos[1]), float(pos[2]))
+
+ pos = parts[2].split(",")
+ WPos = (float(pos[0]), float(pos[1]), float( pos[2].strip(">") ))
+
+ self._callback.mcPosUpdate(MPos, WPos)
+
+
##~~ SD Card handling
elif 'SD init fail' in line or 'volume.init failed' in line or 'openRoot failed' in line:
self._sdAvailable = False