@chestnutlabs/gcode-preview-react 0.6.0 → 0.8.1
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.
|
@@ -19,6 +19,10 @@ export interface GcodePreviewProps {
|
|
|
19
19
|
quality?: QualityMode | 'auto';
|
|
20
20
|
/** #150 (DD-009 D3): camera projection. */
|
|
21
21
|
cameraMode?: CameraMode;
|
|
22
|
+
/** #306/#6: frame the printed 'object' (excl. skirt/prime) or 'all' extrusion. Default 'all'. */
|
|
23
|
+
frameContent?: 'object' | 'all';
|
|
24
|
+
/** #306/2 (DD-020): 'auto' reduces detail while the camera moves. Default 'off'. */
|
|
25
|
+
interactionQuality?: 'off' | 'auto';
|
|
22
26
|
/** #268/#275/M6: snap to a preset orientation (top/front/iso/…). Instant; preserves the projection. */
|
|
23
27
|
view?: CameraView;
|
|
24
28
|
/** #268/#275/M6: restore a saved camera pose. Pair with `onCameraChange` for a two-way binding. */
|
|
@@ -38,18 +42,21 @@ export interface GcodePreviewProps {
|
|
|
38
42
|
showWipe?: boolean;
|
|
39
43
|
/** DD-009 D1 (#148): opt-in retraction/deretraction markers. */
|
|
40
44
|
showRetractions?: boolean;
|
|
45
|
+
/** #306/#6: show the build-volume wireframe cage (independent of the bed/plate). Default true. */
|
|
46
|
+
showVolumeCage?: boolean;
|
|
41
47
|
/** DD-006 live progress observation; null hides the overlay. */
|
|
42
48
|
progress?: ProgressObservation | null;
|
|
43
49
|
/** Worker factory escape hatch (DD-005 slim/custom entries; D2). */
|
|
44
50
|
createWorker?: () => WorkerLike;
|
|
45
51
|
/** Advanced/test renderer injectables (pass-throughs of the renderer contract). */
|
|
46
|
-
rendererOptions?: Omit<NonNullable<UseGcodePreviewOptions['renderer']>, 'buildVolume' | 'quality' | 'cameraMode' | 'theme' | 'colorMode' | 'tube'>;
|
|
52
|
+
rendererOptions?: Omit<NonNullable<UseGcodePreviewOptions['renderer']>, 'buildVolume' | 'quality' | 'cameraMode' | 'frameContent' | 'interactionQuality' | 'theme' | 'colorMode' | 'tube'>;
|
|
47
53
|
onReady?: (summary: {
|
|
48
54
|
segments: number;
|
|
49
55
|
layers: number;
|
|
50
56
|
complete: boolean;
|
|
51
57
|
capabilities: Record<string, import('@chestnutlabs/toolpath-core').Confidence>;
|
|
52
58
|
warnings: readonly import('@chestnutlabs/toolpath-core').Warning[];
|
|
59
|
+
metadata: import('@chestnutlabs/toolpath-core').DialectMetadata | undefined;
|
|
53
60
|
}) => void;
|
|
54
61
|
/** #275/M6: fires after a user camera interaction settles, with the new serializable state. */
|
|
55
62
|
onCameraChange?: (state: CameraState) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcode-preview-component.d.ts","sourceRoot":"","sources":["../src/gcode-preview-component.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,KAAK,EACL,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;IAC/C,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,uGAAuG;IACvG,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,mGAAmG;IACnG,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,mDAAmD;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,UAAU,CAAC;IAChC,mFAAmF;IACnF,eAAe,CAAC,EAAE,IAAI,CACpB,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,EAC/C,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"gcode-preview-component.d.ts","sourceRoot":"","sources":["../src/gcode-preview-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ function GcodePreviewImpl(props, ref) {
|
|
|
20
20
|
buildVolume: isMachine ? undefined : props.buildVolume,
|
|
21
21
|
quality: props.quality ?? 'auto',
|
|
22
22
|
cameraMode: props.cameraMode ?? 'perspective',
|
|
23
|
+
frameContent: props.frameContent ?? 'all',
|
|
24
|
+
interactionQuality: props.interactionQuality ?? 'off',
|
|
23
25
|
theme: props.theme,
|
|
24
26
|
colorMode: props.colorMode,
|
|
25
27
|
tube: props.tube,
|
|
@@ -42,7 +44,8 @@ function GcodePreviewImpl(props, ref) {
|
|
|
42
44
|
layers: e.layers,
|
|
43
45
|
complete: e.complete,
|
|
44
46
|
capabilities: e.capabilities,
|
|
45
|
-
warnings: e.warnings
|
|
47
|
+
warnings: e.warnings,
|
|
48
|
+
metadata: e.metadata
|
|
46
49
|
});
|
|
47
50
|
break;
|
|
48
51
|
case 'camera-changed':
|
|
@@ -82,7 +85,7 @@ function GcodePreviewImpl(props, ref) {
|
|
|
82
85
|
});
|
|
83
86
|
}, []);
|
|
84
87
|
// ---- prop wiring: each prop is a thin call into the hook (D1 shell rule) ----
|
|
85
|
-
const { source, layerRange, scrub, scrubTime, showTravel, showWipe, showRetractions, colorMode, quality, cameraMode, view, cameraState, theme, buildVolume, progress } = props;
|
|
88
|
+
const { source, layerRange, scrub, scrubTime, showTravel, showWipe, showRetractions, showVolumeCage, colorMode, quality, cameraMode, frameContent, interactionQuality, view, cameraState, theme, buildVolume, progress } = props;
|
|
86
89
|
useEffect(() => {
|
|
87
90
|
if (source !== null && source !== undefined)
|
|
88
91
|
void preview.parse(source, cbRef.current.parseOptions);
|
|
@@ -108,6 +111,9 @@ function GcodePreviewImpl(props, ref) {
|
|
|
108
111
|
useEffect(() => {
|
|
109
112
|
preview.controls.setShowRetractions(showRetractions ?? false);
|
|
110
113
|
}, [showRetractions]);
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
preview.controls.setBuildVolumeCage(showVolumeCage ?? true);
|
|
116
|
+
}, [showVolumeCage]);
|
|
111
117
|
useEffect(() => {
|
|
112
118
|
if (colorMode !== undefined)
|
|
113
119
|
preview.controls.setColorMode(colorMode);
|
|
@@ -120,6 +126,14 @@ function GcodePreviewImpl(props, ref) {
|
|
|
120
126
|
if (cameraMode !== undefined)
|
|
121
127
|
preview.controls.setCameraMode(cameraMode);
|
|
122
128
|
}, [cameraMode]);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
if (frameContent !== undefined)
|
|
131
|
+
preview.controls.setFrameContent(frameContent);
|
|
132
|
+
}, [frameContent]);
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (interactionQuality !== undefined)
|
|
135
|
+
preview.controls.setInteractionQuality(interactionQuality);
|
|
136
|
+
}, [interactionQuality]);
|
|
123
137
|
useEffect(() => {
|
|
124
138
|
if (view !== undefined)
|
|
125
139
|
preview.controls.setView(view);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chestnutlabs/gcode-preview-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Thin React integration for the Chestnut Labs G-code viewer (DD-007 D1 amendment): useGcodePreview hook + GcodePreview component as a reactivity bridge over @chestnutlabs/gcode-preview-core.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gcode",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"test": "vitest run"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@chestnutlabs/gcode-parser": "0.
|
|
53
|
-
"@chestnutlabs/gcode-preview-core": "0.
|
|
54
|
-
"@chestnutlabs/gcode-renderer-three": "0.
|
|
55
|
-
"@chestnutlabs/toolpath-core": "0.
|
|
52
|
+
"@chestnutlabs/gcode-parser": "0.8.1",
|
|
53
|
+
"@chestnutlabs/gcode-preview-core": "0.8.1",
|
|
54
|
+
"@chestnutlabs/gcode-renderer-three": "0.8.1",
|
|
55
|
+
"@chestnutlabs/toolpath-core": "0.8.1"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"react": "^18.0.0 || ^19.0.0"
|