Add configurable X/Y offset parameters for plotter positioning

- Added offset-x and offset-y parameters to plotter-lod.inx (default: X=180, Y=0)
- Updated plotter-lod.py to apply offsets to all G-code coordinates
- Modified footer to use dynamic offset values
- Allows users to adjust plotter start position through GUI without code changes
This commit is contained in:
devdesk
2025-12-03 19:43:40 +02:00
parent 925a23b0ef
commit 51a436ff5b
2 changed files with 17 additions and 0 deletions

View File

@@ -12,6 +12,8 @@
<param name="plotter-active" type="int" min="0" max="20000" _gui-text="Pen Active Power S# (0-255 or 0-12000):">1000</param> <param name="plotter-active" type="int" min="0" max="20000" _gui-text="Pen Active Power S# (0-255 or 0-12000):">1000</param>
<param name="plotter-on-delay" type="float" min="0" max="1000" _gui-text="Pen-On Delay (ms or s):">0,2</param> <param name="plotter-on-delay" type="float" min="0" max="1000" _gui-text="Pen-On Delay (ms or s):">0,2</param>
<param name="plotter-off-delay" type="float" min="0" max="1000" _gui-text="Pen-Off Delay (ms or s):">0,2</param> <param name="plotter-off-delay" type="float" min="0" max="1000" _gui-text="Pen-Off Delay (ms or s):">0,2</param>
<param name="offset-x" type="float" min="-1000" max="1000" _gui-text="X Offset (mm or in):">180</param>
<param name="offset-y" type="float" min="-1000" max="1000" _gui-text="Y Offset (mm or in):">0</param>
<param name="passes" type="int" min="1" max="100" _gui-text="Passes:">1</param> <param name="passes" type="int" min="1" max="100" _gui-text="Passes:">1</param>
<param name="pass-depth" type="float" min="0" max="10" _gui-text="Pass Depth (mm or in):">1</param> <param name="pass-depth" type="float" min="0" max="10" _gui-text="Pass Depth (mm or in):">1</param>
<param name="directory" type="string" _gui-text="Directory:"></param> <param name="directory" type="string" _gui-text="Directory:"></param>

View File

@@ -134,6 +134,7 @@ G0 Z0
'footer': """G1 X0 Y0 'footer': """G1 X0 Y0
""" """
# Note: footer will be dynamically updated with offset values in check_dir()
} }
intersection_recursion_depth = 10 intersection_recursion_depth = 10
@@ -642,6 +643,12 @@ class LaserGcode(inkex.Effect):
{"name": "--plotter-off-delay", "type": str, "dest": "plotter_off_delay", {"name": "--plotter-off-delay", "type": str, "dest": "plotter_off_delay",
"default": "0", "help": "Laser power-on delay (ms},"}, "default": "0", "help": "Laser power-on delay (ms},"},
{"name": "--offset-x", "type": float, "dest": "offset_x",
"default": 180.0, "help": "X axis offset (mm or in)"},
{"name": "--offset-y", "type": float, "dest": "offset_y",
"default": 0.0, "help": "Y axis offset (mm or in)"},
{"name": "--suppress-all-messages", "type": inkex.Boolean, {"name": "--suppress-all-messages", "type": inkex.Boolean,
"dest": "suppress_all_messages", "default": True, "dest": "suppress_all_messages", "default": True,
"help": "Hide messages during g-code generation"}, "help": "Hide messages during g-code generation"},
@@ -826,6 +833,9 @@ class LaserGcode(inkex.Effect):
else: else:
self.footer = defaults['footer'] self.footer = defaults['footer']
# Always apply dynamic offset values to footer
self.footer = "G1 X%s Y%s\n\n" % (self.options.offset_x, self.options.offset_y)
if self.options.unit == "G21 (All units in mm)": if self.options.unit == "G21 (All units in mm)":
self.header += "G21\n" self.header += "G21\n"
elif self.options.unit == "G20 (All units in inches)": elif self.options.unit == "G20 (All units in inches)":
@@ -878,6 +888,11 @@ class LaserGcode(inkex.Effect):
def c(c): def c(c):
c = [c[i] if i < len(c) else None for i in range(6)] c = [c[i] if i < len(c) else None for i in range(6)]
if c[5] == 0: c[5] = None if c[5] == 0: c[5] = None
# Apply plotter offset from options
if c[0] != None:
c[0] = c[0] + self.options.offset_x
if c[1] != None:
c[1] = c[1] + self.options.offset_y
s = [" X", " Y", " Z", " I", " J", " K"] s = [" X", " Y", " Z", " I", " J", " K"]
r = '' r = ''
for i in range(6): for i in range(6):