Skip to content

Commit f5761ed

Browse files
Add x/y offset option
For unusual printer coordinate systems #380
1 parent 35cc3e2 commit f5761ed

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

js/createform.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,12 @@ var startGcode = /*html*/ `<h4>Additional start gcode</h4>
157157
</div>`;
158158

159159
var bedDims = /*html*/ `<h4>Bed dimensions</h4>
160-
<p>Inputting the correct number will attempt to move the print into the centre of the bed. If the 0,0 at centre button is checked for a delta, also enter your bed diameter. Please check the gcode to ensure it will fit on your bed.</p>
160+
<p>Inputting the correct number will attempt to move the print into the centre of the bed. If the 0,0 at centre button is checked for a delta, also enter your bed diameter. Please check the gcode to ensure it will fit on your bed. For unusual 3D printers, apply X/Y offsets to shift the gcode on the build platform. 99.9% of users will leave this on 0,0. Please ensure you check a gcode preview before printing if you use this feature.</p>
161161
<label>0,0 at centre of bed (most deltas):<input name="centre" type="checkbox" onchange="displayCustom();" value="centre"></label>
162162
<span class="XY"><label>Bed X dimension (mm): <input type="number" name="bedx" value="100" min="100" max="600" step="1"></label>
163163
<label>Bed Y dimension (mm): <input type="number" name="bedy" value="100" min="100" max="600" step="1"></label><br /></span>
164-
<span class="dia"><label>Bed diameter dimension (mm): <input type="number" name="beddia" value="100" min="100" max="600" step="1"></label></span>`;
164+
<span class="dia"><label>Bed diameter dimension (mm): <input type="number" name="beddia" value="100" min="100" max="600" step="1"></label></span>
165+
<label>X offset (mm): <input type="number" name="offsetx" value="0" min="-1000" max="1000" step="1"></label> <label>Y offset (mm): <input type="number" name="offsety" value="0" min="-1000" max="1000" step="1"></label>`;
165166

166167
var extraMargin = /*html*/ `<p>You may add extra margin for clearing bed clips, etc. Caution! If this is too large on small printers the squares will overlap. You may also use a negative value to space the squares further apart. Make sure to preview the gcode before printing!</p>
167168
<label>Extra margin from edge (mm): <input type="number" name="margin" value="0" min="0" max="100" step="1"></label>`;

js/gcodeprocessing.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ function processGcode(formName) {
130130
var bedX = Math.round((formName.bedx.value-120)/2);
131131
var bedY = Math.round((formName.bedy.value-120)/2);
132132
}
133+
var offsetX = formName.offsetx.value;
134+
var offsetY = formName.offsety.value;
133135
var abl = formName.abl.value;
134136
var customStart = formName.startgcode.value;
135137
var customEnd = formName.endgcode.value;
@@ -331,14 +333,16 @@ function processGcode(formName) {
331333
firstlayerArray.forEach(function(index, item){
332334
if(firstlayerArray[item].search(/X/) > -1){
333335
var value = parseFloat(firstlayerArray[item].match(regexp)[0].substring(1)) + offsets[i*2];
336+
value += parseFloat(offsetX);
334337
firstlayerArray[item] = firstlayerArray[item].replace(regexp, "X"+String(value.toFixed(4)));
335338
}
336339
});
337340
var regexp = /Y[0-9\.]+/;
338341
firstlayerArray.forEach(function(index, item){
339342
if(firstlayerArray[item].search(/Y/) > -1){
340343
var value = parseFloat(firstlayerArray[item].match(regexp)[0].substring(1)) + offsets[i*2+1];
341-
firstlayerArray[item] = firstlayerArray[item].replace(regexp, "Y"+String(value.toFixed(4)))
344+
value += parseFloat(offsetY);
345+
firstlayerArray[item] = firstlayerArray[item].replace(regexp, "Y"+String(value.toFixed(4)));
342346
}
343347
});
344348
square = firstlayerArray.join("\n");
@@ -411,13 +415,15 @@ function processGcode(formName) {
411415
gcodeArray.forEach(function(index, item){
412416
if(gcodeArray[item].search(/X/) > -1){
413417
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) - 50;
418+
value += parseFloat(offsetX);
414419
gcodeArray[item] = gcodeArray[item].replace(regexp, "X"+String(value.toFixed(4)));
415420
}
416421
});
417422
var regexp = /Y[0-9\.]+/;
418423
gcodeArray.forEach(function(index, item){
419424
if(gcodeArray[item].search(/Y/) > -1){
420425
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) - 50;
426+
value += parseFloat(offsetY);
421427
gcodeArray[item] = gcodeArray[item].replace(regexp, "Y"+String(value.toFixed(4)))
422428
}
423429
});
@@ -429,6 +435,7 @@ function processGcode(formName) {
429435
gcodeArray.forEach(function(index, item){
430436
if(gcodeArray[item].search(/X/) > -1){
431437
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) + bedX;
438+
value += parseFloat(offsetX);
432439
gcodeArray[item] = gcodeArray[item].replace(regexp, "X"+String(value.toFixed(4)));
433440
}
434441
});
@@ -440,6 +447,7 @@ function processGcode(formName) {
440447
gcodeArray.forEach(function(index, item){
441448
if(gcodeArray[item].search(/Y/) > -1){
442449
var value = parseFloat(gcodeArray[item].match(regexp)[0].substring(1)) + bedY;
450+
value += parseFloat(offsetY);
443451
gcodeArray[item] = gcodeArray[item].replace(regexp, "Y"+String(value.toFixed(4)))
444452
}
445453
});

0 commit comments

Comments
 (0)