@duet3d/gcodeviewer 3.7.0-alpha.4 → 3.7.0-alpha.6
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/GCodeLines/move.d.ts +1 -1
- package/dist/Renderables/workplace.d.ts +16 -0
- package/dist/index.cjs.js +77 -2
- package/dist/index.es.js +77 -2
- package/dist/lineshader.d.ts +6 -2
- package/dist/processor.d.ts +22 -0
- package/dist/processorproperties.d.ts +3 -0
- package/dist/viewer-proxy.d.ts +12 -0
- package/dist/viewer.d.ts +8 -0
- package/dist/wasmprocessor.d.ts +3 -1
- package/package.json +1 -1
package/dist/lineshader.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export default class LineShaderMaterial {
|
|
|
6
6
|
material: ShaderMaterial;
|
|
7
7
|
toolBuffer: UniformBuffer;
|
|
8
8
|
renderMode: number;
|
|
9
|
-
static readonly vertexShader = "\n #define THIN_INSTANCES\n precision highp float;\n \n\n attribute vec3 position;\n attribute vec3 normal;\n\n attribute float filePosition;\n attribute vec3 pickColor;\n attribute float tool;\n attribute float feedRate;\n attribute float filePositionEnd;\n attribute float isPerimeter;\n attribute vec3 baseColor;\n\n uniform mat4 viewProjection;\n uniform mat4 worldView;\n uniform mat4 view;\n\n uniform float animationLength;\n uniform float currentPosition;\n uniform vec4 toolColors[20];\n uniform vec3 focusedPickColor;\n uniform float maxFeedRate;\n uniform float minFeedRate;\n uniform bool progressMode;\n uniform vec4 progressColor;\n uniform bool showSupports;\n uniform bool showTravels;\n uniform float utime;\n uniform int renderMode;\n\n uniform bool alphaMode;\n uniform bool lineMesh;\n uniform bool perimeterOnly;\n\n varying vec3 eye_normal;\n flat out vec3 vDiffColor;\n flat out float fIsPerimeter;\n flat out float bDiscard;\n flat out float fShow;\n flat out float focused;\n\n #include<instancesDeclaration>\n\n void main()\n {\n #include<instancesVertex>\n\n fIsPerimeter = isPerimeter;\n bDiscard = 0.;\n\n // Non-perimeter geometry (infill, travels) is dropped entirely in perimeter-only mode\n if(perimeterOnly && isPerimeter < 1.0)\n {\n bDiscard = 1.;\n }\n\n switch(renderMode){\n case 0: \n vDiffColor = baseColor.rgb; \n break; // use default diffuse color;\n case 1:\n if(tool < 255.0)\n {\n vDiffColor = toolColors[int(tool)].rgb;\n }\n else\n {\n vDiffColor = vec3(1,0,0); //Travel Color Make Configurable at some point\n }\n break;\n case 2:\n float m = (feedRate - minFeedRate) / (maxFeedRate - minFeedRate);\n vDiffColor = mix(
|
|
10
|
-
static readonly fragmentShader = "\n precision highp float;\n #include<helperFunctions>\n\n const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);\n const vec3 LIGHT_FRONT_DIR = vec3(0.0, 0.0, 1.0);\n \n // x = ambient, y = top diffuse, z = front diffuse, w = global\n const vec4 light_intensity = vec4(0.45, 0.7, 0.75, 0.75);\n varying vec3 eye_normal;\n\n uniform bool lineMesh;\n uniform bool alphaMode;\n uniform bool progressMode;\n uniform float alphaValue;\n\n flat in vec3 vDiffColor;\n flat in float fIsPerimeter;\n flat in float bDiscard;\n flat in float fShow;\n flat in float focused;\n const vec3 lowerBound = vec3(0.3,0.3,0.3);\n\n void main(){\n\n if( bDiscard > 0.0) {\n discard;\n }\n\n vec4 diffuseColor = vec4(vDiffColor, 1);\n\n if(focused > 0.) \n {\n diffuseColor.a = 1.0;\n }\n else\n {\n diffuseColor.a = fShow >= 0.0 || !alphaMode ? 0.99 : alphaValue;\n }\n \n if(lineMesh) {\n if(fIsPerimeter < 1.0)\n {\n if(all(lessThan(diffuseColor.rgb,lowerBound.rgb))) {\n diffuseColor = vec4(diffuseColor.rgb + lowerBound, diffuseColor.a);\n }\n else {\n diffuseColor = vec4(diffuseColor.rgb - lowerBound, diffuseColor.a);\n }\n }\n else\n {\n diffuseColor = vec4(diffuseColor.rgb, diffuseColor.a);\n }\n gl_FragColor = diffuseColor;\n }\n else\n {\n vec3 normal = normalize(eye_normal);\n float NdotL = abs(dot(normal, LIGHT_TOP_DIR));\n float intensity = light_intensity.x + NdotL * light_intensity.y;\n NdotL = abs(dot(normal, LIGHT_FRONT_DIR));\n intensity += NdotL * light_intensity.z;\n
|
|
9
|
+
static readonly vertexShader = "\n #define THIN_INSTANCES\n precision highp float;\n \n\n attribute vec3 position;\n attribute vec3 normal;\n\n attribute float filePosition;\n attribute vec3 pickColor;\n attribute float tool;\n attribute float feedRate;\n attribute float filePositionEnd;\n attribute float isPerimeter;\n attribute vec3 baseColor;\n\n uniform mat4 viewProjection;\n uniform mat4 worldView;\n uniform mat4 view;\n\n uniform float animationLength;\n uniform float currentPosition;\n uniform vec4 toolColors[20];\n uniform vec3 focusedPickColor;\n uniform float maxFeedRate;\n uniform float minFeedRate;\n uniform bool progressMode;\n uniform vec4 progressColor;\n uniform bool showSupports;\n uniform bool showTravels;\n uniform bool persistTravels;\n uniform vec3 minFeedColor;\n uniform vec3 maxFeedColor;\n uniform float utime;\n uniform int renderMode;\n\n uniform bool alphaMode;\n uniform bool lineMesh;\n uniform bool perimeterOnly;\n\n varying vec3 eye_normal;\n varying vec3 eye_pos;\n\n#include<clipPlaneVertexDeclaration>\n\n flat out vec3 vDiffColor;\n flat out float fIsPerimeter;\n flat out float bDiscard;\n flat out float fShow;\n flat out float focused;\n\n #include<instancesDeclaration>\n\n void main()\n {\n #include<instancesVertex>\n\n fIsPerimeter = isPerimeter;\n bDiscard = 0.;\n\n // Non-perimeter geometry (infill, travels) is dropped entirely in perimeter-only mode\n if(perimeterOnly && isPerimeter < 1.0)\n {\n bDiscard = 1.;\n }\n\n switch(renderMode){\n case 0: \n vDiffColor = baseColor.rgb; \n break; // use default diffuse color;\n case 1:\n if(tool < 255.0)\n {\n vDiffColor = toolColors[int(tool)].rgb;\n }\n else\n {\n vDiffColor = vec3(1,0,0); //Travel Color Make Configurable at some point\n }\n break;\n case 2:\n float m = (feedRate - minFeedRate) / max(maxFeedRate - minFeedRate, 0.0001);\n vDiffColor = mix(minFeedColor, maxFeedColor, clamp(m, 0.0, 1.0));\n break;\n case 5:\n vDiffColor = pickColor.rgb;\n break;\n }\n\n fShow = currentPosition - filePosition;\n focused = 0.;\n\n if(focusedPickColor == pickColor && !(currentPosition >= filePosition && currentPosition <= filePositionEnd)) \n {\n vDiffColor = vec3(1, 1, 1) - vDiffColor.rgb;\n focused = 1.;\n }\n else if (tool >= 254.0) //Travel\n {\n if(!showTravels)\n {\n bDiscard = 1.;\n }\n else if(fShow >= 0.0 && fShow < animationLength / 8.0)\n {\n vDiffColor = mix(vec3(1.0, 0.0, 0.0), vec3(0.5,0.0,0.0), fShow / animationLength / 2.0);\n }\n else if (fShow >= 0.0)\n {\n vDiffColor = vec3(0.3, 0.5, 0.8);\n bDiscard = persistTravels ? 0. : 1.;\n }\n else if (alphaMode || progressMode)\n {\n vDiffColor = vec3(0.3, 0.5, 0.8);\n }\n else\n {\n bDiscard = 1.;\n }\n }\n else //Extrusion\n {\n if (fShow >= 0.0 && fShow < animationLength) \n { \n if(currentPosition < filePositionEnd){\n // float animation = smoothstep(0.0, 1.0, fract(utime / 50.0));\n float animation = sin(2.0 * 3.1415 * utime / 1000.0) * 0.5 + 0.5;\n vDiffColor = mix(vec3(0, 0, 1), vec3(0,1,0), animation);\n }\n else \n {\n vDiffColor = mix(vec3(1, 1, 1) - vDiffColor.rgb, vDiffColor.rgb, fShow / animationLength);\n }\n }\n else if (fShow < 0.0 && progressMode)\n {\n vDiffColor = progressColor.rgb;\n }\n else if(fShow < 0.0 && !alphaMode && !progressMode)\n {\n bDiscard = 1.;\n }\n }\n\n //Final Results\n vec4 worldPos = finalWorld * vec4(position, 1.0);\n #include<clipPlaneVertex>\n gl_Position = viewProjection * worldPos;\n mat4 n =transpose(inverse(worldView * finalWorld));\n eye_normal = (n * vec4(normal, 0.0)).xyz;\n eye_pos = (worldView * finalWorld * vec4(position, 1.0)).xyz;\n }";
|
|
10
|
+
static readonly fragmentShader = "\n precision highp float;\n #include<helperFunctions>\n\n const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);\n const vec3 LIGHT_FRONT_DIR = vec3(0.0, 0.0, 1.0);\n \n // x = ambient, y = top diffuse, z = front diffuse, w = global\n const vec4 light_intensity = vec4(0.45, 0.7, 0.75, 0.75);\n const float SPECULAR_POWER = 32.0;\n const float SPECULAR_INTENSITY = 0.35;\n varying vec3 eye_normal;\n varying vec3 eye_pos;\n\n#include<clipPlaneFragmentDeclaration>\n\n uniform bool lineMesh;\n uniform bool alphaMode;\n uniform bool progressMode;\n uniform float alphaValue;\n uniform bool useSpecular;\n\n flat in vec3 vDiffColor;\n flat in float fIsPerimeter;\n flat in float bDiscard;\n flat in float fShow;\n flat in float focused;\n const vec3 lowerBound = vec3(0.3,0.3,0.3);\n\n void main(){\n #include<clipPlaneFragment>\n\n if( bDiscard > 0.0) {\n discard;\n }\n\n vec4 diffuseColor = vec4(vDiffColor, 1);\n\n if(focused > 0.) \n {\n diffuseColor.a = 1.0;\n }\n else if(progressMode && fShow < 0.0)\n {\n diffuseColor.a = alphaValue;\n }\n else\n {\n diffuseColor.a = fShow >= 0.0 || !alphaMode ? 0.99 : alphaValue;\n }\n \n if(lineMesh) {\n if(fIsPerimeter < 1.0)\n {\n if(all(lessThan(diffuseColor.rgb,lowerBound.rgb))) {\n diffuseColor = vec4(diffuseColor.rgb + lowerBound, diffuseColor.a);\n }\n else {\n diffuseColor = vec4(diffuseColor.rgb - lowerBound, diffuseColor.a);\n }\n }\n else\n {\n diffuseColor = vec4(diffuseColor.rgb, diffuseColor.a);\n }\n gl_FragColor = diffuseColor;\n }\n else\n {\n vec3 normal = normalize(eye_normal);\n float NdotL = abs(dot(normal, LIGHT_TOP_DIR));\n float intensity = light_intensity.x + NdotL * light_intensity.y;\n NdotL = abs(dot(normal, LIGHT_FRONT_DIR));\n intensity += NdotL * light_intensity.z;\n vec3 shaded = diffuseColor.rgb * light_intensity.w * intensity;\n if(useSpecular)\n {\n vec3 halfDir = normalize(LIGHT_TOP_DIR + normalize(-eye_pos));\n shaded += vec3(pow(max(dot(normal, halfDir), 0.0), SPECULAR_POWER) * SPECULAR_INTENSITY);\n }\n gl_FragColor = vec4(shaded, diffuseColor.a);\n }\n }";
|
|
11
11
|
constructor(scene: Scene);
|
|
12
12
|
buildMaterial(): void;
|
|
13
13
|
updateRenderMode(mode: number): void;
|
|
@@ -21,6 +21,10 @@ export default class LineShaderMaterial {
|
|
|
21
21
|
setAlphaValue(value: number): void;
|
|
22
22
|
setProgressMode(mode: boolean): void;
|
|
23
23
|
setShowTravels(show: boolean): void;
|
|
24
|
+
setPersistTravels(persist: boolean): void;
|
|
25
|
+
setSpecular(enabled: boolean): void;
|
|
26
|
+
setMinFeedColor(color: number[]): void;
|
|
27
|
+
setMaxFeedColor(color: number[]): void;
|
|
24
28
|
setPerimeterOnly(mode: boolean): void;
|
|
25
29
|
setProgressColor(color: number[]): void;
|
|
26
30
|
setLineMesh(mode: boolean): void;
|
package/dist/processor.d.ts
CHANGED
|
@@ -16,8 +16,18 @@ export default class Processor {
|
|
|
16
16
|
modelMaterial: LineShaderMaterial[];
|
|
17
17
|
filePosition: number;
|
|
18
18
|
focusedColorId: number;
|
|
19
|
+
allowSeek: boolean;
|
|
19
20
|
lastMeshMode: number;
|
|
20
21
|
perimeterOnly: boolean;
|
|
22
|
+
userMinFeedRate: number | null;
|
|
23
|
+
userMaxFeedRate: number | null;
|
|
24
|
+
g1AsExtrusion: boolean;
|
|
25
|
+
hqRendering: boolean;
|
|
26
|
+
nozzleDiameterOverride: number | null;
|
|
27
|
+
nozzleDiameterFallback: number | null;
|
|
28
|
+
private parsedNozzleDiameter;
|
|
29
|
+
zBelt: boolean;
|
|
30
|
+
gantryAngle: number;
|
|
21
31
|
originalFile: string | undefined;
|
|
22
32
|
private cancelRequested;
|
|
23
33
|
nozzle: Nozzle | null;
|
|
@@ -83,6 +93,18 @@ export default class Processor {
|
|
|
83
93
|
private buildMeshesFromWasmBuffers;
|
|
84
94
|
private createMeshesFromWasmBuffers;
|
|
85
95
|
private applyWasmBuffersToMesh;
|
|
96
|
+
private buildProcessorProperties;
|
|
97
|
+
applyFeedRateRange(): void;
|
|
98
|
+
setFeedRateRange(min: number | null, max: number | null): void;
|
|
99
|
+
setNozzlePosition(x: number, y: number, z: number, animate: boolean): void;
|
|
100
|
+
private extrusionWidth;
|
|
101
|
+
setNozzleDiameter(override: number | null, fallback: number | null): void;
|
|
102
|
+
getNozzleDiameter(): number;
|
|
103
|
+
private findNozzleDiameter;
|
|
104
|
+
private extrusionHeight;
|
|
105
|
+
setHQRendering(enabled: boolean): void;
|
|
106
|
+
setG1AsExtrusion(enabled: boolean): void;
|
|
107
|
+
setZBelt(enabled: boolean, gantryAngle: number): void;
|
|
86
108
|
setPerimeterOnly(perimeterOnly: boolean): void;
|
|
87
109
|
showSupports(show: any): void;
|
|
88
110
|
startNozzleAnimation(): void;
|
|
@@ -2,6 +2,7 @@ import { Vector3 } from '@babylonjs/core/Maths/math.vector';
|
|
|
2
2
|
import { default as Tool } from './tools';
|
|
3
3
|
import { Color4 } from '@babylonjs/core/Maths/math.color';
|
|
4
4
|
import { default as SlicerBase } from './GCodeParsers/slicerbase';
|
|
5
|
+
export declare const DEFAULT_LAYER_HEIGHT = 0.2;
|
|
5
6
|
export declare enum ColorMode {
|
|
6
7
|
Tool = 0,
|
|
7
8
|
Feature = 1,
|
|
@@ -22,6 +23,7 @@ export default class ProcessorProperties {
|
|
|
22
23
|
lineCount: number;
|
|
23
24
|
layerDictionary: [];
|
|
24
25
|
previousZ: number;
|
|
26
|
+
currentLayerHeight: number;
|
|
25
27
|
filePosition: number;
|
|
26
28
|
lineNumber: number;
|
|
27
29
|
tools: Tool[];
|
|
@@ -58,6 +60,7 @@ export default class ProcessorProperties {
|
|
|
58
60
|
setGantryAngle(angle: number): void;
|
|
59
61
|
get CurrentFeedRate(): number;
|
|
60
62
|
set CurrentFeedRate(value: number);
|
|
63
|
+
recordLayerHeight(z: number): void;
|
|
61
64
|
recordExtrusionFeedRate(value: number): void;
|
|
62
65
|
get unitMultiplier(): number;
|
|
63
66
|
get currentWorkplace(): Vector3;
|
package/dist/viewer-proxy.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export default class ViewerProxy {
|
|
|
3
3
|
mainCanvas: HTMLCanvasElement | null;
|
|
4
4
|
private registeredListeners;
|
|
5
5
|
private unloadFallback;
|
|
6
|
+
private suspended;
|
|
6
7
|
constructor(canvas: HTMLCanvasElement);
|
|
7
8
|
private addTrackedListener;
|
|
8
9
|
private onmessage;
|
|
@@ -11,6 +12,7 @@ export default class ViewerProxy {
|
|
|
11
12
|
init(): void;
|
|
12
13
|
cancel(): void;
|
|
13
14
|
loadFile(file: any): void;
|
|
15
|
+
suspend(suspended: boolean): void;
|
|
14
16
|
unload(): void;
|
|
15
17
|
reset(): void;
|
|
16
18
|
updateFilePosition(filePosition: number, animate?: boolean): void;
|
|
@@ -63,10 +65,20 @@ export default class ViewerProxy {
|
|
|
63
65
|
setProgressColor(color: string): void;
|
|
64
66
|
setTransparencyValue(value: number): void;
|
|
65
67
|
setShowTravels(show: boolean): void;
|
|
68
|
+
setPersistTravels(persist: boolean): void;
|
|
69
|
+
setFeedRateRange(min: number, max: number): void;
|
|
70
|
+
setFeedRateColors(minColor: string, maxColor: string): void;
|
|
71
|
+
setSpecular(enabled: boolean): void;
|
|
72
|
+
setNozzlePosition(x: number, y: number, z: number, animate?: boolean): void;
|
|
73
|
+
setNozzleDiameter(override: number | null, fallback: number | null): void;
|
|
74
|
+
setHQRendering(enabled: boolean): void;
|
|
75
|
+
setG1AsExtrusion(enabled: boolean): void;
|
|
76
|
+
setZBelt(enabled: boolean, gantryAngle: number): void;
|
|
66
77
|
setAnimationSpeed(speed: number): void;
|
|
67
78
|
setDeltaBed(isDelta: boolean): void;
|
|
68
79
|
showBed(visible: boolean): void;
|
|
69
80
|
showAxes(visible: boolean): void;
|
|
81
|
+
showWorkplace(visible: boolean): void;
|
|
70
82
|
loadObjectBoundaries(objects: any[]): void;
|
|
71
83
|
showObjectSelection(visible: boolean): void;
|
|
72
84
|
showObjectLabels(visible: boolean): void;
|
package/dist/viewer.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { default as Processor } from './processor';
|
|
|
9
9
|
import { default as ViewBox, ViewBoxDirection } from './Renderables/viewbox';
|
|
10
10
|
import { default as Bed, BuildVolume, RenderBedMode } from './Renderables/bed';
|
|
11
11
|
import { default as Axes } from './Renderables/axes';
|
|
12
|
+
import { default as Workplace } from './Renderables/workplace';
|
|
12
13
|
import { default as BuildObjects } from './Renderables/buildobjects';
|
|
13
14
|
export default class Viewer {
|
|
14
15
|
scene: Scene | undefined;
|
|
@@ -31,6 +32,7 @@ export default class Viewer {
|
|
|
31
32
|
viewBox: ViewBox | null;
|
|
32
33
|
bed: Bed | null;
|
|
33
34
|
axes: Axes | null;
|
|
35
|
+
workplace: Workplace | null;
|
|
34
36
|
buildObjects: BuildObjects | null;
|
|
35
37
|
zTopClipValue: number | null;
|
|
36
38
|
zBottomClipValue: number | null;
|
|
@@ -71,10 +73,16 @@ export default class Viewer {
|
|
|
71
73
|
setProgressColor(color: string): void;
|
|
72
74
|
setTransparencyValue(value: number): void;
|
|
73
75
|
setShowTravels(show: boolean): void;
|
|
76
|
+
setPersistTravels(persist: boolean): void;
|
|
77
|
+
setFeedRateRange(min: number | null, max: number | null): void;
|
|
78
|
+
setFeedRateColors(minColor: string, maxColor: string): void;
|
|
79
|
+
setSpecular(enabled: boolean): void;
|
|
80
|
+
setNozzlePosition(x: number, y: number, z: number, animate: boolean): void;
|
|
74
81
|
setAnimationSpeed(speed: number): void;
|
|
75
82
|
setDeltaBed(isDelta: boolean): void;
|
|
76
83
|
showBed(visible: boolean): void;
|
|
77
84
|
showAxes(visible: boolean): void;
|
|
85
|
+
showWorkplace(visible: boolean): void;
|
|
78
86
|
loadObjectBoundaries(objects: any[]): void;
|
|
79
87
|
showObjectSelection(visible: boolean): void;
|
|
80
88
|
showObjectLabels(visible: boolean): void;
|
package/dist/wasmprocessor.d.ts
CHANGED
|
@@ -22,7 +22,9 @@ export declare class WasmProcessor {
|
|
|
22
22
|
initialize(): Promise<void>;
|
|
23
23
|
processFile(content: string, progressCallback?: (progress: number, label: string) => void): Promise<WasmProcessingResult>;
|
|
24
24
|
getPositionBuffer(): Float64Array;
|
|
25
|
-
generateRenderBuffers(nozzleSize?: number, padding?: number, progressCallback?: (progress: number, label: string) => void): WasmRenderBuffers;
|
|
25
|
+
generateRenderBuffers(nozzleSize?: number, padding?: number, highQuality?: boolean, progressCallback?: (progress: number, label: string) => void): WasmRenderBuffers;
|
|
26
|
+
setG1AsExtrusion(enabled: boolean): void;
|
|
27
|
+
setZBelt(enabled: boolean, gantryAngleDegrees: number): void;
|
|
26
28
|
clearData(): void;
|
|
27
29
|
dispose(): void;
|
|
28
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duet3d/gcodeviewer",
|
|
3
|
-
"version": "3.7.0-alpha.
|
|
3
|
+
"version": "3.7.0-alpha.6",
|
|
4
4
|
"description": "G-code viewer and processor library with Babylon.js rendering and a Rust/WASM parsing fast path",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"module": "./dist/index.es.js",
|