@chestnutlabs/gcode-parser 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +50 -2
- package/package.json +4 -4
package/dist/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/parse.js
CHANGED
|
@@ -120,6 +120,16 @@ export function createEngine(input, opts) {
|
|
|
120
120
|
let stopReason;
|
|
121
121
|
let truncatedAtByte;
|
|
122
122
|
let currentSrcByte = 0;
|
|
123
|
+
// Retraction/unretraction events (DD-009 D1, #148): E-only moves emit no segment,
|
|
124
|
+
// so their position is captured here in ABSOLUTE coords and rebased to the origin
|
|
125
|
+
// at IR assembly (mirroring segment positions). Physical convention: E<0 pulls
|
|
126
|
+
// filament back = 'retract'; E>0 (no XYZ) pushes it out = 'unretract'.
|
|
127
|
+
const retractionEvents = [];
|
|
128
|
+
// M600 filament-swap color-change boundaries (DD-009 D2 amendment, #147): a marker
|
|
129
|
+
// with a position but no motion segment, captured here in ABSOLUTE coords and rebased
|
|
130
|
+
// to the origin at IR assembly (like retractions). Detected in the parser — M600 is
|
|
131
|
+
// firmware-universal — so a bare M600 is honored even with no dialect detected.
|
|
132
|
+
const colorChangeEvents = [];
|
|
123
133
|
const emitSegment = (x, y, z, eDelta, kind) => {
|
|
124
134
|
if (writer.count >= limits.maxSegments) {
|
|
125
135
|
stopReason = {
|
|
@@ -251,6 +261,16 @@ export function createEngine(input, opts) {
|
|
|
251
261
|
stats.deretractions++;
|
|
252
262
|
else if (f !== undefined)
|
|
253
263
|
stats.feedrateChanges++;
|
|
264
|
+
if (e !== undefined && e !== 0) {
|
|
265
|
+
retractionEvents.push({
|
|
266
|
+
x: sx,
|
|
267
|
+
y: sy,
|
|
268
|
+
z: sz,
|
|
269
|
+
kind: e < 0 ? 'retract' : 'unretract',
|
|
270
|
+
srcByte: currentSrcByte,
|
|
271
|
+
segIndex: writer.count
|
|
272
|
+
});
|
|
273
|
+
}
|
|
254
274
|
else
|
|
255
275
|
stats.others++;
|
|
256
276
|
if (f !== undefined)
|
|
@@ -395,6 +415,12 @@ export function createEngine(input, opts) {
|
|
|
395
415
|
case 't7':
|
|
396
416
|
tool = Number(cmd.gcode.slice(1));
|
|
397
417
|
break;
|
|
418
|
+
case 'm600':
|
|
419
|
+
// Manual filament swap = color boundary (#147). A marker, not motion — do
|
|
420
|
+
// NOT break/finish the current path; record position (current head), the
|
|
421
|
+
// next segment index (slot boundary), and the active tool for provenance.
|
|
422
|
+
colorChangeEvents.push({ x: sx, y: sy, z: sz, segIndex: writer.count, srcByte: offset, tool });
|
|
423
|
+
break;
|
|
398
424
|
default:
|
|
399
425
|
warn('unsupported-command', `unsupported command '${cmd.gcode}' preserved as metadata`, offset);
|
|
400
426
|
}
|
|
@@ -435,7 +461,9 @@ export function createEngine(input, opts) {
|
|
|
435
461
|
feedrate: 'known',
|
|
436
462
|
sourcePositions: 'known',
|
|
437
463
|
featureRoles: 'unavailable',
|
|
438
|
-
objects: 'unavailable'
|
|
464
|
+
objects: 'unavailable',
|
|
465
|
+
retractions: retractionEvents.length > 0 ? 'known' : 'unavailable',
|
|
466
|
+
colorChanges: colorChangeEvents.length > 0 ? 'known' : 'unavailable'
|
|
439
467
|
};
|
|
440
468
|
if (layersCapability === 'unavailable') {
|
|
441
469
|
warn('layers-unavailable', 'No planar layer index; all segments assigned to layer 0.');
|
|
@@ -463,6 +491,22 @@ export function createEngine(input, opts) {
|
|
|
463
491
|
layers: irLayers,
|
|
464
492
|
tools,
|
|
465
493
|
objects: [],
|
|
494
|
+
retractions: retractionEvents.map((r) => ({
|
|
495
|
+
x: r.x - ox,
|
|
496
|
+
y: r.y - oy,
|
|
497
|
+
z: r.z - oz,
|
|
498
|
+
kind: r.kind,
|
|
499
|
+
srcByte: r.srcByte,
|
|
500
|
+
segIndex: r.segIndex
|
|
501
|
+
})),
|
|
502
|
+
colorChanges: colorChangeEvents.map((c) => ({
|
|
503
|
+
x: c.x - ox,
|
|
504
|
+
y: c.y - oy,
|
|
505
|
+
z: c.z - oz,
|
|
506
|
+
segIndex: c.segIndex,
|
|
507
|
+
srcByte: c.srcByte,
|
|
508
|
+
tool: c.tool
|
|
509
|
+
})),
|
|
466
510
|
bounds,
|
|
467
511
|
boundsWithTravel,
|
|
468
512
|
sourceIndex
|
|
@@ -518,13 +562,17 @@ export function createEngine(input, opts) {
|
|
|
518
562
|
feedrate: 'known',
|
|
519
563
|
sourcePositions: 'unavailable', // no per-slice source index is built
|
|
520
564
|
featureRoles: 'unavailable',
|
|
521
|
-
objects: 'unavailable'
|
|
565
|
+
objects: 'unavailable',
|
|
566
|
+
retractions: 'unavailable', // markers resolve on the final IR, not on preview slices
|
|
567
|
+
colorChanges: 'unavailable' // color-change boundaries resolve on the final IR
|
|
522
568
|
}
|
|
523
569
|
},
|
|
524
570
|
segments: channels,
|
|
525
571
|
layers: channels.count > 0 ? [{ z: lastZ, segStart: 0, segEnd: channels.count - 1 }] : [],
|
|
526
572
|
tools: [...toolsSeen].sort((a, b) => a - b).map((id) => ({ id })),
|
|
527
573
|
objects: [],
|
|
574
|
+
retractions: [],
|
|
575
|
+
colorChanges: [],
|
|
528
576
|
bounds,
|
|
529
577
|
boundsWithTravel,
|
|
530
578
|
sourceIndex: { byteOffsets: new Uint32Array(0), segmentIndices: new Uint32Array(0) }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chestnutlabs/gcode-parser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Worker-safe G-code parse core producing ToolpathIR (DD-003).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gcode",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"test": "vitest run"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@chestnutlabs/toolpath-core": "0.
|
|
53
|
-
"@chestnutlabs/gcode-dialects": "0.
|
|
54
|
-
"@chestnutlabs/gcode-containers": "0.
|
|
52
|
+
"@chestnutlabs/toolpath-core": "0.2.0",
|
|
53
|
+
"@chestnutlabs/gcode-dialects": "0.2.0",
|
|
54
|
+
"@chestnutlabs/gcode-containers": "0.2.0"
|
|
55
55
|
}
|
|
56
56
|
}
|