From ceab945572b565066d458ef80fb66815ab7181fe Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Fri, 4 Feb 2022 12:21:48 +0100
Subject: [PATCH] Calibration changes

---
 rrf3.x/sys/config.g                           |  8 +-
 rrf3.x/sys/home_positions                     |  8 +-
 ...e.py => make_pre_post_free_edit_config.py} | 75 +++++++++++++++----
 3 files changed, 67 insertions(+), 24 deletions(-)
 rename rrf3.x/sys/{make_pre_post_free.py => make_pre_post_free_edit_config.py} (55%)

diff --git a/rrf3.x/sys/config.g b/rrf3.x/sys/config.g
index 6a1c866..ae4dad0 100644
--- a/rrf3.x/sys/config.g
+++ b/rrf3.x/sys/config.g
@@ -122,10 +122,10 @@ M593 F42.2						; cancel ringing at 42.2Hz (https://forum.e3d-online.com/threads
 ; Volcano-tool: X-9 Y39 Z-13.5
 ; Hemera-tool: X20 Y43.5 Z-6
 
-G10 P0 X25 Y43.5 Z-6					; T0
-G10 P1 X25 Y43.5 Z-6					; T1
-G10 P2 X25 Y43.5 Z-6					; T2
-G10 P3 X25 Y43.5 Z-6					; T3
+G10 P0 X25.00 Y43.50 Z-6.00 				; T0
+G10 P1 X25.60 Y43.80 Z-5.85 				; T1
+G10 P2 X25.55 Y43.65 Z-6.25 				; T2
+G10 P3 X25.50 Y43.75 Z-5.90 				; T3
 
 ;M572 D0 S0.2 						; pressure advance T0
 ;M572 D1 S0.2 						; pressure advance T1
diff --git a/rrf3.x/sys/home_positions b/rrf3.x/sys/home_positions
index bdbe6f9..c695b1c 100644
--- a/rrf3.x/sys/home_positions
+++ b/rrf3.x/sys/home_positions
@@ -1,4 +1,4 @@
-0: X -12.2 Y 227.4
-1: X  77.8 Y 227.4 
-2: X 211.8 Y 226.9
-3: X 301.8 Y 227.4
+0: X -12.2 Y 227.4 dX  0.0  dY  0.0  dZ  0
+1: X  77.8 Y 227.4 dX  0.6  dY  0.3  dZ  0.15
+2: X 211.8 Y 226.9 dX  0.55 dY  0.15 dZ -0.25
+3: X 301.8 Y 227.4 dX  0.5  dY  0.25 dZ  0.10
diff --git a/rrf3.x/sys/make_pre_post_free.py b/rrf3.x/sys/make_pre_post_free_edit_config.py
similarity index 55%
rename from rrf3.x/sys/make_pre_post_free.py
rename to rrf3.x/sys/make_pre_post_free_edit_config.py
index d85f66e..7d7ab32 100755
--- a/rrf3.x/sys/make_pre_post_free.py
+++ b/rrf3.x/sys/make_pre_post_free_edit_config.py
@@ -68,31 +68,50 @@ M106 P%(fan)d S0
 G53 G1 X%(x_final)0.1f Y%(y_safe)0.1f F20000  ; X location at safe Y distance
 """
 
-class Home:
+class Tool:
 
     def __init__(self, line):
-        m = re.match('^([0-9]+)\s*:\s*X\s*([-0-9.]+)\s*Y\s*([-0-9.]+)\s*$',
-                     line)
+        m = re.match('^([0-9]+)\s*:\s*([^;]*)(?:;.*)?$', line)
         if m:
-            self.tool = int(m.group(1))
-            self.x = float(m.group(2))
-            self.y = float(m.group(3))
+            self.index = int(m.group(1))
+            values = re.findall('([A-Za-z]+)\s*([-+0-9.]+)', m.group(2))
+            self.values = { k:float(v) for k,v in values }
+            self.values.update({ k.lower():float(v) for k,v in values })
         pass
 
+    def __getattr__(self, key):
+        return self.values[key]
+
     def __repr__(self):
-        return 'Home(%d, %f, %f)' % (self.tool, self.x, self.y)
+        return 'Tool(%d, %f, %f)' % (self.index, self.x, self.y)
+
+class ToolOffset:
+
+    def __init__(self, line):
+        m = re.match('^G10\s*P([0-9]+)\s*([^;]*)(?:;.*)?$', line)
+        if m:
+            self.index = int(m.group(1))
+            values = re.findall('([A-Za-z]+)\s*([-+0-9.]+)', m.group(2))
+            self.values = { k.lower():float(v) for k,v in values }
+        pass
+
+    def __getattr__(self, key):
+        return self.values[key]
+
+    def __repr__(self):
+        return 'Tool(%d, %f, %f)' % (self.index, self.x, self.y)
     
 if __name__ == '__main__':
-    home = {}
-    for h in [Home(l) for l in open('home_positions')]:
-        home[h.tool] = h
+    tool = {}
+    for t in [Tool(l) for l in open('home_positions')]:
+        tool[t.index] = t
         pass
     for i in range(3):
         # Expected if all tools the same:
         #   90.0 0.0
         #  135.0 0.0
         #   90.0 0.0
-        print(home[i+1].x - home[i].x, home[i+1].y - home[i].y)
+        print(tool[i+1].x - tool[i].x, tool[i+1].y - tool[i].y)
         pass
     for i in range(4):
         for path,template in (('tpre%d.g' % i, PRE),
@@ -105,14 +124,38 @@ if __name__ == '__main__':
                           filename=os.path.basename(path),
                           tool=i,
                           fan=2+i*2,
-                          x_final=home[i].x,
-                          y_final=home[i].y,
-                          y_safe=home[i].y-50,
-                          y_near=home[i].y-15,
-                          y_work=home[i].y-75
+                          x_final=tool[i].x,
+                          y_final=tool[i].y,
+                          y_safe=tool[i].y-50,
+                          y_near=tool[i].y-15,
+                          y_work=tool[i].y-75
                       ),
                       file=f)
                 pass
             pass
         pass
+    with open('config.g') as f:
+        config = ''
+        tool_offsets = False
+        for l in f:
+            tool_offsets |= l.startswith(';tool offsets')
+            if tool_offsets and l.startswith('G10'):
+                o = ToolOffset(l)
+                if o.index == 0:
+                    tool0 = o
+                    pass
+                l = 'G10 P%d X%0.2f Y%0.2f Z%0.2f \t\t\t\t; T%d\n' % (
+                    o.index,
+                    tool0.x+tool[o.index].dx,
+                    tool0.y+tool[o.index].dy,
+                    tool0.z+tool[o.index].dz,
+                    o.index
+                )
+                pass
+            config += l
+            pass
+        pass
+    with open('config.g', 'w') as f:
+        f.write(config)
+        pass
     pass
-- 
GitLab