@duet3d/gcodeviewer 3.7.0-alpha.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.
- package/dist/GCodeCommands/blank.d.ts +3 -0
- package/dist/GCodeCommands/g0g1.d.ts +3 -0
- package/dist/GCodeCommands/g10.d.ts +3 -0
- package/dist/GCodeCommands/g11.d.ts +3 -0
- package/dist/GCodeCommands/g20.d.ts +3 -0
- package/dist/GCodeCommands/g21.d.ts +3 -0
- package/dist/GCodeCommands/g28.d.ts +3 -0
- package/dist/GCodeCommands/g29.d.ts +3 -0
- package/dist/GCodeCommands/g2g3.d.ts +3 -0
- package/dist/GCodeCommands/g90.d.ts +3 -0
- package/dist/GCodeCommands/g91.d.ts +3 -0
- package/dist/GCodeCommands/index.d.ts +19 -0
- package/dist/GCodeCommands/m3m4.d.ts +3 -0
- package/dist/GCodeCommands/m5.d.ts +3 -0
- package/dist/GCodeCommands/m567.d.ts +3 -0
- package/dist/GCodeCommands/m600.d.ts +3 -0
- package/dist/GCodeCommands/processline.d.ts +3 -0
- package/dist/GCodeCommands/stepper.d.ts +7 -0
- package/dist/GCodeCommands/t.d.ts +3 -0
- package/dist/GCodeCommands/temperature.d.ts +6 -0
- package/dist/GCodeCommands/workplace.d.ts +3 -0
- package/dist/GCodeLines/arcmove.d.ts +17 -0
- package/dist/GCodeLines/base.d.ts +8 -0
- package/dist/GCodeLines/command.d.ts +6 -0
- package/dist/GCodeLines/comment.d.ts +7 -0
- package/dist/GCodeLines/index.d.ts +7 -0
- package/dist/GCodeLines/mcode.d.ts +6 -0
- package/dist/GCodeLines/move.d.ts +33 -0
- package/dist/GCodeLines/move_thin.d.ts +14 -0
- package/dist/GCodeParsers/cura.d.ts +52 -0
- package/dist/GCodeParsers/genericbase.d.ts +3 -0
- package/dist/GCodeParsers/ideamaker.d.ts +97 -0
- package/dist/GCodeParsers/kirimoto.d.ts +52 -0
- package/dist/GCodeParsers/orcaslicer.d.ts +72 -0
- package/dist/GCodeParsers/prusaslicer.d.ts +97 -0
- package/dist/GCodeParsers/slicerbase.d.ts +15 -0
- package/dist/GCodeParsers/slicerfactory.d.ts +1 -0
- package/dist/GCodeParsers/superslicer.d.ts +97 -0
- package/dist/Renderables/axes.d.ts +16 -0
- package/dist/Renderables/bed.d.ts +53 -0
- package/dist/Renderables/buildobjects.d.ts +35 -0
- package/dist/Renderables/nozzle.d.ts +81 -0
- package/dist/Renderables/textplane.d.ts +3 -0
- package/dist/Renderables/viewbox.d.ts +27 -0
- package/dist/gpupicker.d.ts +22 -0
- package/dist/index.cjs.js +432 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +431 -0
- package/dist/lineshader.d.ts +30 -0
- package/dist/modelmaterial.d.ts +24 -0
- package/dist/processor.d.ts +96 -0
- package/dist/processorproperties.d.ts +64 -0
- package/dist/rendershaders.d.ts +2 -0
- package/dist/tools.d.ts +9 -0
- package/dist/util.d.ts +17 -0
- package/dist/viewer-direct.d.ts +21 -0
- package/dist/viewer-proxy.d.ts +73 -0
- package/dist/viewer.d.ts +87 -0
- package/dist/viewer.worker.d.ts +1 -0
- package/dist/wasmprocessor.d.ts +37 -0
- package/package.json +38 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ShaderMaterial } from '@babylonjs/core/Materials/shaderMaterial';
|
|
2
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
3
|
+
import { UniformBuffer } from '@babylonjs/core/Materials/uniformBuffer';
|
|
4
|
+
export default class LineShaderMaterial {
|
|
5
|
+
scene: Scene;
|
|
6
|
+
material: ShaderMaterial;
|
|
7
|
+
toolBuffer: UniformBuffer;
|
|
8
|
+
renderMode: number;
|
|
9
|
+
isLineMesh: boolean;
|
|
10
|
+
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\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\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(vec3(0,0,1), vec3(1,0,0), m); \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(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 (showTravels && fShow >= 0.0)\n {\n vDiffColor = vec3(0.3, 0.5, 0.8); // persistent travel lines\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 gl_Position = viewProjection * finalWorld * vec4(position, 1.0);\n mat4 n =transpose(inverse(worldView * finalWorld));\n eye_normal = (n * (vec4(normal , 1.0) * vec4(position,1.)) ).xyz;\n }";
|
|
11
|
+
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 gl_FragColor = vec4(diffuseColor.rgb * light_intensity.w * intensity, diffuseColor.a);\n }\n }";
|
|
12
|
+
constructor(scene: Scene);
|
|
13
|
+
buildMaterial(): void;
|
|
14
|
+
updateRenderMode(mode: number): void;
|
|
15
|
+
updateCurrentFilePosition(position: number): void;
|
|
16
|
+
getMaterial(): ShaderMaterial;
|
|
17
|
+
updateToolColors(toolColors: number[]): void;
|
|
18
|
+
setPickColor(color: number[]): void;
|
|
19
|
+
setMaxFeedRate(feedRate: number): void;
|
|
20
|
+
setMinFeedRate(feedRate: number): void;
|
|
21
|
+
setAlphaMode(mode: boolean): void;
|
|
22
|
+
setAlphaValue(value: number): void;
|
|
23
|
+
setProgressMode(mode: boolean): void;
|
|
24
|
+
setShowTravels(show: boolean): void;
|
|
25
|
+
setProgressColor(color: number[]): void;
|
|
26
|
+
setLineMesh(mode: boolean): void;
|
|
27
|
+
showSupports(show: boolean): void;
|
|
28
|
+
refreshMaterialState(): void;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
2
|
+
import { CustomMaterial } from '@babylonjs/materials/custom/customMaterial';
|
|
3
|
+
import { UniformBuffer } from '@babylonjs/core/Materials/uniformBuffer';
|
|
4
|
+
export default class ModelMaterial {
|
|
5
|
+
scene: Scene;
|
|
6
|
+
material: CustomMaterial;
|
|
7
|
+
toolBuffer: UniformBuffer;
|
|
8
|
+
renderMode: number;
|
|
9
|
+
constructor(scene: Scene);
|
|
10
|
+
buildMaterial(): void;
|
|
11
|
+
updateRenderMode(mode: number): void;
|
|
12
|
+
updateCurrentFilePosition(position: number): void;
|
|
13
|
+
getMaterial(): CustomMaterial;
|
|
14
|
+
updateToolColors(toolColors: number[]): void;
|
|
15
|
+
setPickColor(color: number[]): void;
|
|
16
|
+
setMaxFeedRate(feedRate: number): void;
|
|
17
|
+
setMinFeedRate(feedRate: number): void;
|
|
18
|
+
setAlphaMode(mode: boolean): void;
|
|
19
|
+
setProgressMode(mode: boolean): void;
|
|
20
|
+
setProgressColor(color: number[]): void;
|
|
21
|
+
setLineMesh(mode: boolean): void;
|
|
22
|
+
showSupports(show: boolean): void;
|
|
23
|
+
dispose(): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Base } from './GCodeLines';
|
|
2
|
+
import { default as ProcessorProperties } from './processorproperties';
|
|
3
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
4
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
5
|
+
import { default as GPUPicker } from './gpupicker';
|
|
6
|
+
import { default as LineShaderMaterial } from './lineshader';
|
|
7
|
+
import { default as Nozzle } from './Renderables/nozzle';
|
|
8
|
+
export default class Processor {
|
|
9
|
+
gCodeLines: Base[];
|
|
10
|
+
processorProperties: ProcessorProperties;
|
|
11
|
+
scene: Scene;
|
|
12
|
+
meshes: Mesh[];
|
|
13
|
+
breakPoint: number;
|
|
14
|
+
gpuPicker: GPUPicker;
|
|
15
|
+
worker: Worker;
|
|
16
|
+
modelMaterial: LineShaderMaterial[];
|
|
17
|
+
filePosition: number;
|
|
18
|
+
maxIndex: number;
|
|
19
|
+
focusedColorId: number;
|
|
20
|
+
lastMeshMode: number;
|
|
21
|
+
perimeterOnly: boolean;
|
|
22
|
+
originalFile: string;
|
|
23
|
+
nozzle: Nozzle | null;
|
|
24
|
+
positionTracker: Map<number, {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
z: number;
|
|
28
|
+
feedRate: number;
|
|
29
|
+
extruding: boolean;
|
|
30
|
+
}>;
|
|
31
|
+
private isPlaying;
|
|
32
|
+
private playbackTimeout;
|
|
33
|
+
private sortedPositions;
|
|
34
|
+
private lastReportedProgress;
|
|
35
|
+
private lastReportedChunk;
|
|
36
|
+
private wasmProcessor;
|
|
37
|
+
private wasmRenderBuffers;
|
|
38
|
+
private lastProcessingMethod;
|
|
39
|
+
private processingStats;
|
|
40
|
+
enableWasmProcessing(): Promise<void>;
|
|
41
|
+
getProcessingMethod(): string;
|
|
42
|
+
getProcessingStats(): {
|
|
43
|
+
method: string;
|
|
44
|
+
wasmEnabled: boolean;
|
|
45
|
+
wasmVersion?: string;
|
|
46
|
+
totalTime?: number;
|
|
47
|
+
wasmTime?: number;
|
|
48
|
+
typescriptTime?: number;
|
|
49
|
+
wasmRenderTime?: number;
|
|
50
|
+
linesProcessed?: number;
|
|
51
|
+
movesFound?: number;
|
|
52
|
+
positionsExtracted?: number;
|
|
53
|
+
renderSegmentsGenerated?: number;
|
|
54
|
+
};
|
|
55
|
+
isWasmEnabled(): boolean;
|
|
56
|
+
private getWasmVersion;
|
|
57
|
+
initNozzle(diameter?: number): void;
|
|
58
|
+
getNozzle(): Nozzle | null;
|
|
59
|
+
setTools(toolData: {
|
|
60
|
+
color: string;
|
|
61
|
+
diameter?: number;
|
|
62
|
+
}[]): void;
|
|
63
|
+
cleanup(): void;
|
|
64
|
+
dispose(): void;
|
|
65
|
+
loadFile(file: any): Promise<void>;
|
|
66
|
+
private loadFileStreamed;
|
|
67
|
+
private loadFileWithWasm;
|
|
68
|
+
private loadFileStreamedWithPositions;
|
|
69
|
+
addNewMaterial(): LineShaderMaterial;
|
|
70
|
+
testRenderScene(): Promise<void>;
|
|
71
|
+
testRenderSceneProgressive(): Promise<void>;
|
|
72
|
+
setMeshMode(mode: any): void;
|
|
73
|
+
testBuildMesh(renderlines: any, segCount: any, alphaIndex: any): Mesh[];
|
|
74
|
+
getFileSize(): number;
|
|
75
|
+
getGCodeInRange(filePos: any, count?: number): void;
|
|
76
|
+
updateFilePosition(position: number, animate?: boolean): void;
|
|
77
|
+
private updateNozzlePositionInstant;
|
|
78
|
+
private updateNozzlePositionAnimated;
|
|
79
|
+
animateNozzleToPosition(targetPosition: number): Promise<void>;
|
|
80
|
+
updateByLineNumber(lineNumber: number): void;
|
|
81
|
+
private buildMeshesFromWasmBuffers;
|
|
82
|
+
private createMeshesFromWasmBuffers;
|
|
83
|
+
private applyWasmBuffersToMesh;
|
|
84
|
+
setPerimeterOnly(perimeterOnly: any): Promise<void>;
|
|
85
|
+
showSupports(show: any): void;
|
|
86
|
+
startNozzleAnimation(): void;
|
|
87
|
+
pauseNozzleAnimation(): void;
|
|
88
|
+
resumeNozzleAnimation(): void;
|
|
89
|
+
stopNozzleAnimation(): void;
|
|
90
|
+
private animateToNextPosition;
|
|
91
|
+
isNozzleAnimationPlaying(): boolean;
|
|
92
|
+
private getCurrentAnimationIndex;
|
|
93
|
+
private skipToPosition;
|
|
94
|
+
private streamLines;
|
|
95
|
+
private findClosestPositionIndex;
|
|
96
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Vector3 } from '@babylonjs/core/Maths/math.vector';
|
|
2
|
+
import { default as Tool } from './tools';
|
|
3
|
+
import { Color4 } from '@babylonjs/core/Maths/math.color';
|
|
4
|
+
import { default as SlicerBase } from './GCodeParsers/slicerbase';
|
|
5
|
+
export declare enum ColorMode {
|
|
6
|
+
Tool = 0,
|
|
7
|
+
Feature = 1,
|
|
8
|
+
FeedRate = 2
|
|
9
|
+
}
|
|
10
|
+
export declare enum ArcPlane {
|
|
11
|
+
XY = "XY",
|
|
12
|
+
XZ = "XZ",
|
|
13
|
+
YZ = "YZ"
|
|
14
|
+
}
|
|
15
|
+
export declare enum Units {
|
|
16
|
+
millimeters = "mm",
|
|
17
|
+
inches = "in"
|
|
18
|
+
}
|
|
19
|
+
export default class ProcessorProperties {
|
|
20
|
+
maxHeight: number;
|
|
21
|
+
minHeight: number;
|
|
22
|
+
lineCount: number;
|
|
23
|
+
layerDictionary: [];
|
|
24
|
+
previousZ: number;
|
|
25
|
+
filePosition: number;
|
|
26
|
+
lineNumber: number;
|
|
27
|
+
tools: Tool[];
|
|
28
|
+
currentTool: Tool;
|
|
29
|
+
currentPosition: Vector3;
|
|
30
|
+
currentFeedRate: number;
|
|
31
|
+
maxFeedRate: number;
|
|
32
|
+
minFeedRate: number;
|
|
33
|
+
progressColor: Color4;
|
|
34
|
+
progressAnimation: boolean;
|
|
35
|
+
firstGCodeByte: number;
|
|
36
|
+
lastGCodeByte: number;
|
|
37
|
+
hasMixing: boolean;
|
|
38
|
+
currentWorkplaceIdx: number;
|
|
39
|
+
workplaceOffsets: Vector3[];
|
|
40
|
+
absolute: boolean;
|
|
41
|
+
firmwareRetraction: boolean;
|
|
42
|
+
units: Units;
|
|
43
|
+
totalRenderedSegments: number;
|
|
44
|
+
fixRadius: boolean;
|
|
45
|
+
arcPlane: ArcPlane;
|
|
46
|
+
cncMode: boolean;
|
|
47
|
+
spindleSpeed: number;
|
|
48
|
+
spindleOn: boolean;
|
|
49
|
+
bedLevelingActive: boolean;
|
|
50
|
+
extruderAbsolute: boolean;
|
|
51
|
+
slicer: SlicerBase;
|
|
52
|
+
zBelt: boolean;
|
|
53
|
+
zBeltLength: number;
|
|
54
|
+
gantryAngle: number;
|
|
55
|
+
currentZ: number;
|
|
56
|
+
hyp: number;
|
|
57
|
+
adj: number;
|
|
58
|
+
setGantryAngle(angle: number): void;
|
|
59
|
+
get CurrentFeedRate(): number;
|
|
60
|
+
set CurrentFeedRate(value: number);
|
|
61
|
+
get currentWorkplace(): Vector3;
|
|
62
|
+
buildToolFloat32Array(): any[];
|
|
63
|
+
constructor();
|
|
64
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const vertexShader = "\n// Vertex shader\n#if defined(WEBGL2) || defines(WEBGPU)\nprecision highp sampler2DArray;\n#endif\nprecision highp float;\n\n // Attributes\n attribute vec3 position;\n attribute float filePosition;\n \n //Inputs\n uniform float currentPosition;\n \n\n // Uniforms\n uniform mat4 viewProjection;\n uniform mat4 finalWorld;\n\n //outputs\n varying float vShow;\n\n#include<instancesDeclaration>\n\n\nvoid main(void) {\n #include<instancesVertex>\n gl_Position = viewProjection * finalWorld * vec4(position, 1.0);\n vShow = currentPosition - filePosition;\n}\n";
|
|
2
|
+
export declare const fragmentShader = "\n// Fragment shader\n#if defined(PREPASS)\n#extension GL_EXT_draw_buffers : require\nlayout(location = 0) out highp vec4 glFragData[SCENE_MRT_COUNT];\nhighp vec4 gl_FragColor;\n#endif\n#if defined(WEBGL2) || defines(WEBGPU)\nprecision highp sampler2DArray;\n#endif\nprecision highp float;\n\nuniform mat4 u_World;\nuniform mat4 u_ViewProjection;\nuniform vec4 u_color;\n\nvarying float vShow;\n\n#include<helperFunctions>\n\n\n\nvoid main(void) {\n\ngl_FragColor = u_color;\n#ifdef CONVERTTOLINEAR0\ngl_FragColor = toLinearSpace(gl_FragColor);\n#endif\n#ifdef CONVERTTOGAMMA0\ngl_FragColor = toGammaSpace(gl_FragColor);\n#endif\n#if defined(PREPASS)\ngl_FragData[0] = gl_FragColor;\n#endif\n\n}\n";
|
package/dist/tools.d.ts
ADDED
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Vector3 } from '@babylonjs/core/Maths/math.vector';
|
|
2
|
+
export declare function numToColor(num?: number): number[];
|
|
3
|
+
export declare function colorToNum(color: number[]): number;
|
|
4
|
+
export declare function colorToNumUint8(color: Uint8Array): number;
|
|
5
|
+
export declare function delay(ms: any): Promise<unknown>;
|
|
6
|
+
export declare function doArc(tokens: any, currentPosition: any, relativeMove: any, arcSegLength: any, fixRadius: any, arcPlane: any, offset: any): {
|
|
7
|
+
position: Vector3;
|
|
8
|
+
points: any[];
|
|
9
|
+
} | {
|
|
10
|
+
position: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
points: any[];
|
|
16
|
+
};
|
|
17
|
+
export declare function binarySearchClosest(arr: any, target: any, field: any): number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { default as Viewer } from './viewer';
|
|
2
|
+
export default class ViewerDirect {
|
|
3
|
+
viewer: Viewer;
|
|
4
|
+
mainCanvas: HTMLCanvasElement | null;
|
|
5
|
+
passThru: any;
|
|
6
|
+
constructor(canvas: HTMLCanvasElement);
|
|
7
|
+
init(): void;
|
|
8
|
+
postMessage(message: any): void;
|
|
9
|
+
cancel(): void;
|
|
10
|
+
loadFile(file: any): void;
|
|
11
|
+
unload(): void;
|
|
12
|
+
updateFilePosition(filePosition: number): void;
|
|
13
|
+
getGCodes(position: number, count: number): void;
|
|
14
|
+
goToLineNumber(lineNumber: number): void;
|
|
15
|
+
setAlphaMode(mode: boolean): void;
|
|
16
|
+
setProgressMode(mode: boolean): void;
|
|
17
|
+
setRenderMode(mode: number): void;
|
|
18
|
+
setMaxFPS(fps: number): void;
|
|
19
|
+
setMeshMode(mode: number): void;
|
|
20
|
+
setPerimeterOnly(perimeterOnly: boolean): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export default class ViewerProxy {
|
|
2
|
+
private webWorker;
|
|
3
|
+
mainCanvas: HTMLCanvasElement | null;
|
|
4
|
+
constructor(canvas: HTMLCanvasElement);
|
|
5
|
+
private onmessage;
|
|
6
|
+
passThru: any;
|
|
7
|
+
private onerror;
|
|
8
|
+
init(): void;
|
|
9
|
+
cancel(): void;
|
|
10
|
+
loadFile(file: any): void;
|
|
11
|
+
unload(): void;
|
|
12
|
+
reset(): void;
|
|
13
|
+
updateColorTest(): void;
|
|
14
|
+
updateFilePosition(filePosition: number, animate?: boolean): void;
|
|
15
|
+
setRenderMode(mode: number): void;
|
|
16
|
+
getGCodes(position: number, count: number): void;
|
|
17
|
+
goToLineNumber(lineNumber: number): void;
|
|
18
|
+
setAlphaMode(mode: boolean): void;
|
|
19
|
+
setProgressMode(mode: boolean): void;
|
|
20
|
+
setMeshMode(mode: number): void;
|
|
21
|
+
setMaxFPS(fps: number): void;
|
|
22
|
+
setPerimeterOnly(perimeterOnly: boolean): void;
|
|
23
|
+
toggleNozzle(visible: boolean): void;
|
|
24
|
+
startNozzleAnimation(): void;
|
|
25
|
+
pauseNozzleAnimation(): void;
|
|
26
|
+
resumeNozzleAnimation(): void;
|
|
27
|
+
stopNozzleAnimation(): void;
|
|
28
|
+
showViewBox(visible: boolean): void;
|
|
29
|
+
setCameraDirection(direction: {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
z: number;
|
|
33
|
+
}): void;
|
|
34
|
+
resetCamera(): void;
|
|
35
|
+
frameToPrint(): void;
|
|
36
|
+
requestPrintBounds(): void;
|
|
37
|
+
setBackgroundColor(color: string): void;
|
|
38
|
+
setCameraInertia(enabled: boolean): void;
|
|
39
|
+
setZClipPlane(top: number, bottom: number): void;
|
|
40
|
+
setTools(tools: {
|
|
41
|
+
color: string;
|
|
42
|
+
diameter?: number;
|
|
43
|
+
}[]): void;
|
|
44
|
+
setBuildVolume(volume: {
|
|
45
|
+
x: {
|
|
46
|
+
min: number;
|
|
47
|
+
max: number;
|
|
48
|
+
};
|
|
49
|
+
y: {
|
|
50
|
+
min: number;
|
|
51
|
+
max: number;
|
|
52
|
+
};
|
|
53
|
+
z: {
|
|
54
|
+
min: number;
|
|
55
|
+
max: number;
|
|
56
|
+
};
|
|
57
|
+
}): void;
|
|
58
|
+
setBedRenderMode(mode: number): void;
|
|
59
|
+
setBedColor(color: string): void;
|
|
60
|
+
setProgressColor(color: string): void;
|
|
61
|
+
setTransparencyValue(value: number): void;
|
|
62
|
+
setShowTravels(show: boolean): void;
|
|
63
|
+
setAnimationSpeed(speed: number): void;
|
|
64
|
+
setDeltaBed(isDelta: boolean): void;
|
|
65
|
+
showBed(visible: boolean): void;
|
|
66
|
+
showAxes(visible: boolean): void;
|
|
67
|
+
loadObjectBoundaries(objects: any[]): void;
|
|
68
|
+
showObjectSelection(visible: boolean): void;
|
|
69
|
+
showObjectLabels(visible: boolean): void;
|
|
70
|
+
enableWasmProcessing(): Promise<void>;
|
|
71
|
+
getProcessingStats(): Promise<any>;
|
|
72
|
+
cloneEvent(event: any): {};
|
|
73
|
+
}
|
package/dist/viewer.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Engine } from '@babylonjs/core/Engines/engine';
|
|
2
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
3
|
+
import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera';
|
|
4
|
+
import { Light } from '@babylonjs/core/Lights/light';
|
|
5
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
6
|
+
import { PointLight } from '@babylonjs/core/Lights/pointLight';
|
|
7
|
+
import { FlyCamera } from '@babylonjs/core/Cameras/flyCamera';
|
|
8
|
+
import { default as Processor } from './processor';
|
|
9
|
+
import { default as ViewBox, ViewBoxDirection } from './Renderables/viewbox';
|
|
10
|
+
import { default as Bed, BuildVolume, RenderBedMode } from './Renderables/bed';
|
|
11
|
+
import { default as Axes } from './Renderables/axes';
|
|
12
|
+
import { default as BuildObjects } from './Renderables/buildobjects';
|
|
13
|
+
export default class Viewer {
|
|
14
|
+
scene: Scene | undefined;
|
|
15
|
+
engine: Engine | null;
|
|
16
|
+
orbitCamera: ArcRotateCamera | null;
|
|
17
|
+
flyCamera: FlyCamera | null;
|
|
18
|
+
offscreenCanvas: OffscreenCanvas | HTMLCanvasElement;
|
|
19
|
+
box: Mesh;
|
|
20
|
+
boxRotation: number;
|
|
21
|
+
light: Light;
|
|
22
|
+
pointLight: PointLight;
|
|
23
|
+
lastTimeStamp: number;
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
z: number;
|
|
27
|
+
pause: boolean;
|
|
28
|
+
registeredEventHandlers: Map<string, any>;
|
|
29
|
+
worker: Worker;
|
|
30
|
+
processor: Processor;
|
|
31
|
+
viewBox: ViewBox | null;
|
|
32
|
+
bed: Bed | null;
|
|
33
|
+
axes: Axes | null;
|
|
34
|
+
buildObjects: BuildObjects | null;
|
|
35
|
+
zTopClipValue: number | null;
|
|
36
|
+
zBottomClipValue: number | null;
|
|
37
|
+
offscreen: boolean;
|
|
38
|
+
lastFrameUpdate: number;
|
|
39
|
+
renderTimeout: number;
|
|
40
|
+
maxFrameRate: number;
|
|
41
|
+
rect: {
|
|
42
|
+
top: number;
|
|
43
|
+
left: number;
|
|
44
|
+
right: number;
|
|
45
|
+
bottom: number;
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
height: number;
|
|
49
|
+
width: number;
|
|
50
|
+
};
|
|
51
|
+
constructor();
|
|
52
|
+
init_worker(data: any, worker: Worker): void;
|
|
53
|
+
init_direct(canvas: HTMLCanvasElement, fakeWorker: any): void;
|
|
54
|
+
setSizes(width: any, height: any): void;
|
|
55
|
+
initEngine(): Promise<void>;
|
|
56
|
+
setCameraDirection(direction: ViewBoxDirection): void;
|
|
57
|
+
resetCamera(): void;
|
|
58
|
+
private getPrintBoundingBox;
|
|
59
|
+
frameToPrint(): void;
|
|
60
|
+
postPrintBounds(): void;
|
|
61
|
+
registerClipIgnore(mesh: any): void;
|
|
62
|
+
showViewBox(visible: boolean): void;
|
|
63
|
+
setBackgroundColor(hexColor: string): void;
|
|
64
|
+
setCameraInertia(enabled: boolean): void;
|
|
65
|
+
setZClipPlane(top: number, bottom: number): void;
|
|
66
|
+
setBuildVolume(volume: BuildVolume): void;
|
|
67
|
+
setBedRenderMode(mode: RenderBedMode): void;
|
|
68
|
+
setBedColor(color: string): void;
|
|
69
|
+
setProgressColor(color: string): void;
|
|
70
|
+
setTransparencyValue(value: number): void;
|
|
71
|
+
setShowTravels(show: boolean): void;
|
|
72
|
+
setAnimationSpeed(speed: number): void;
|
|
73
|
+
setDeltaBed(isDelta: boolean): void;
|
|
74
|
+
showBed(visible: boolean): void;
|
|
75
|
+
showAxes(visible: boolean): void;
|
|
76
|
+
loadObjectBoundaries(objects: any[]): void;
|
|
77
|
+
showObjectSelection(visible: boolean): void;
|
|
78
|
+
showObjectLabels(visible: boolean): void;
|
|
79
|
+
isArcRotateCameraStopped(camera: any): boolean;
|
|
80
|
+
loadInstrumentation(): void;
|
|
81
|
+
loadFile(file: any): Promise<void>;
|
|
82
|
+
setMaxFPS(fps: any): void;
|
|
83
|
+
bindHandler(targetName: any, eventName: any, fn: any, opt: any): void;
|
|
84
|
+
handleEvent(eventType: any, event: any): void;
|
|
85
|
+
noop(): void;
|
|
86
|
+
unload(): void;
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface WasmProcessingResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
errorMessage: string;
|
|
4
|
+
lineCount: number;
|
|
5
|
+
moveCount: number;
|
|
6
|
+
processingTimeMs: number;
|
|
7
|
+
}
|
|
8
|
+
export interface WasmPositionData {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
z: number;
|
|
12
|
+
feedRate: number;
|
|
13
|
+
extruding: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface WasmRenderBuffers {
|
|
16
|
+
segmentCount: number;
|
|
17
|
+
matrixData: Float32Array;
|
|
18
|
+
colorData: Float32Array;
|
|
19
|
+
pickData: Float32Array;
|
|
20
|
+
filePositionData: Float32Array;
|
|
21
|
+
fileEndPositionData: Float32Array;
|
|
22
|
+
toolData: Float32Array;
|
|
23
|
+
feedRateData: Float32Array;
|
|
24
|
+
isPerimeterData: Float32Array;
|
|
25
|
+
}
|
|
26
|
+
export declare class WasmProcessor {
|
|
27
|
+
private processor;
|
|
28
|
+
private initialized;
|
|
29
|
+
initialize(): Promise<void>;
|
|
30
|
+
processFile(content: string, progressCallback?: (progress: number, label: string) => void): Promise<WasmProcessingResult>;
|
|
31
|
+
getPositionData(filePosition: number): WasmPositionData | undefined;
|
|
32
|
+
getSortedPositions(): Uint32Array;
|
|
33
|
+
getPositionCount(): number;
|
|
34
|
+
findClosestPosition(targetPosition: number): number | undefined;
|
|
35
|
+
generateRenderBuffers(nozzleSize?: number, padding?: number, progressCallback?: (progress: number, label: string) => void): WasmRenderBuffers;
|
|
36
|
+
dispose(): void;
|
|
37
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@duet3d/gcodeviewer",
|
|
3
|
+
"version": "3.7.0-alpha.1",
|
|
4
|
+
"description": "G-code viewer and processor library with Babylon.js rendering and a Rust/WASM parsing fast path",
|
|
5
|
+
"main": "./dist/index.cjs.js",
|
|
6
|
+
"module": "./dist/index.es.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": ["dist"],
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.es.js",
|
|
16
|
+
"require": "./dist/index.cjs.js"
|
|
17
|
+
},
|
|
18
|
+
"./assets/*": "./dist/assets/*.js"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"dev": "vite",
|
|
22
|
+
"build": "vite build",
|
|
23
|
+
"preview": "vite preview",
|
|
24
|
+
"check": "tsc --noEmit",
|
|
25
|
+
"build:wasm": "cd WASM_FileProcessor && wasm-pack build --target web --out-dir pkg --release",
|
|
26
|
+
"build:wasm:node": "cd WASM_FileProcessor && wasm-pack build --target nodejs --out-dir pkg-node --release"
|
|
27
|
+
},
|
|
28
|
+
"contributors": ["Juan Rosario", "Christian Hammacher"],
|
|
29
|
+
"license": "ISC",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@babylonjs/core": "^9.15.0",
|
|
32
|
+
"@babylonjs/materials": "^9.15.0",
|
|
33
|
+
"@tweenjs/tween.js": "^25.0.0",
|
|
34
|
+
"typescript": "^6.0.3",
|
|
35
|
+
"vite": "^8.1.3",
|
|
36
|
+
"vite-plugin-dts": "^5.0.3"
|
|
37
|
+
}
|
|
38
|
+
}
|