@gcode-viewer/plugins 0.3.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.
Files changed (140) hide show
  1. package/README.md +26 -0
  2. package/dist/index.esm.js +288 -0
  3. package/dist/types/axis-gizmo/AxisGizmoPlugin.d.ts +25 -0
  4. package/dist/types/axis-gizmo/CoordinateAxes.d.ts +1 -0
  5. package/dist/types/axis-gizmo/index.d.ts +2 -0
  6. package/dist/types/bottom-bar/BottomBarPlugin.d.ts +36 -0
  7. package/dist/types/bottom-bar/index.d.ts +2 -0
  8. package/dist/types/context-menu/Constants.d.ts +34 -0
  9. package/dist/types/context-menu/ContextMenu.config.d.ts +2 -0
  10. package/dist/types/context-menu/ContextMenuPlugin.d.ts +23 -0
  11. package/dist/types/context-menu/Locale.d.ts +51 -0
  12. package/dist/types/context-menu/index.d.ts +4 -0
  13. package/dist/types/dat-gui/Viewer3dDatGui.d.ts +69 -0
  14. package/dist/types/dat-gui/index.d.ts +1 -0
  15. package/dist/types/explode/ExplodePlugin.d.ts +46 -0
  16. package/dist/types/explode/ObjectExploder.d.ts +48 -0
  17. package/dist/types/explode/index.d.ts +1 -0
  18. package/dist/types/export/ExportPlugin.d.ts +57 -0
  19. package/dist/types/export/Locale.d.ts +41 -0
  20. package/dist/types/export/gltf/GltfExporter.d.ts +32 -0
  21. package/dist/types/export/gltf/index.d.ts +1 -0
  22. package/dist/types/export/index.d.ts +2 -0
  23. package/dist/types/export/obj/ObjZipExporter.d.ts +14 -0
  24. package/dist/types/export/obj/index.d.ts +3 -0
  25. package/dist/types/export/obj/mtl.d.ts +9 -0
  26. package/dist/types/export/obj/textures.d.ts +15 -0
  27. package/dist/types/gcode-layer-bar/GCodeLayerBarPlugin.d.ts +66 -0
  28. package/dist/types/gcode-layer-bar/Locale.d.ts +13 -0
  29. package/dist/types/gcode-layer-bar/index.d.ts +2 -0
  30. package/dist/types/gcode-legend/GCodeLegendPlugin.d.ts +58 -0
  31. package/dist/types/gcode-legend/Locale.d.ts +83 -0
  32. package/dist/types/gcode-legend/NephogramLegend.d.ts +8 -0
  33. package/dist/types/gcode-legend/index.d.ts +2 -0
  34. package/dist/types/gcode-steps-bar/GCodeStepsBarPlugin.d.ts +46 -0
  35. package/dist/types/gcode-steps-bar/Locale.d.ts +11 -0
  36. package/dist/types/gcode-steps-bar/index.d.ts +2 -0
  37. package/dist/types/gcode-text-panel/GCodeTextPanelPlugin.d.ts +54 -0
  38. package/dist/types/gcode-text-panel/Locale.d.ts +11 -0
  39. package/dist/types/gcode-text-panel/index.d.ts +2 -0
  40. package/dist/types/ground-grid/GroundGridPlugin.d.ts +38 -0
  41. package/dist/types/ground-grid/index.d.ts +1 -0
  42. package/dist/types/ground-shaow/GroundShadowPlugin.d.ts +58 -0
  43. package/dist/types/ground-shaow/index.d.ts +1 -0
  44. package/dist/types/hotpoint/HotpointPlugin.d.ts +92 -0
  45. package/dist/types/hotpoint/index.d.ts +1 -0
  46. package/dist/types/index.d.ts +29 -0
  47. package/dist/types/local-model-uploader/IUploader.d.ts +55 -0
  48. package/dist/types/local-model-uploader/LocalModelUploader.d.ts +19 -0
  49. package/dist/types/local-model-uploader/index.d.ts +2 -0
  50. package/dist/types/measurements/AngleMeasureDrawable.d.ts +12 -0
  51. package/dist/types/measurements/AngleMeasurement.d.ts +13 -0
  52. package/dist/types/measurements/AreaMeasureDrawable.d.ts +14 -0
  53. package/dist/types/measurements/AreaMeasurement.d.ts +24 -0
  54. package/dist/types/measurements/BaseMeasureDrawable.d.ts +28 -0
  55. package/dist/types/measurements/BaseMeasurement.d.ts +123 -0
  56. package/dist/types/measurements/CoordinateMeasureDrawable.d.ts +10 -0
  57. package/dist/types/measurements/CoordinateMeasurement.d.ts +12 -0
  58. package/dist/types/measurements/DistanceMeasureDrawable.d.ts +13 -0
  59. package/dist/types/measurements/DistanceMeasurement.d.ts +21 -0
  60. package/dist/types/measurements/Locale.d.ts +13 -0
  61. package/dist/types/measurements/MeasurementPlugin.d.ts +102 -0
  62. package/dist/types/measurements/index.d.ts +3 -0
  63. package/dist/types/measurements/undo/AddMeasurementCommand.d.ts +10 -0
  64. package/dist/types/measurements/undo/RemoveMeasurementCommand.d.ts +10 -0
  65. package/dist/types/plate/PlatePlugin.d.ts +85 -0
  66. package/dist/types/plate/index.d.ts +1 -0
  67. package/dist/types/property/AnimationPanel.d.ts +3 -0
  68. package/dist/types/property/CameraEditor.d.ts +3 -0
  69. package/dist/types/property/EnvironmentPanel.d.ts +3 -0
  70. package/dist/types/property/LightEditor.d.ts +3 -0
  71. package/dist/types/property/Locale.d.ts +83 -0
  72. package/dist/types/property/MaterialEditor.d.ts +9 -0
  73. package/dist/types/property/PropertyPanelUi.d.ts +34 -0
  74. package/dist/types/property/PropertyPlugin.d.ts +95 -0
  75. package/dist/types/property/Utils.d.ts +19 -0
  76. package/dist/types/property/Vec3Field.d.ts +25 -0
  77. package/dist/types/property/index.d.ts +2 -0
  78. package/dist/types/rhino-3dm-loader/Rhino3dmLoaderPlugin.d.ts +17 -0
  79. package/dist/types/rhino-3dm-loader/Rhino3dmModelLoader.d.ts +25 -0
  80. package/dist/types/rhino-3dm-loader/index.d.ts +1 -0
  81. package/dist/types/scene-edit/SceneEditActions.d.ts +24 -0
  82. package/dist/types/scene-edit/SceneEditPlugin.d.ts +26 -0
  83. package/dist/types/scene-edit/SceneEditRecording.d.ts +11 -0
  84. package/dist/types/scene-edit/SceneMeshSnapshot.d.ts +23 -0
  85. package/dist/types/scene-edit/SceneMeshSnapshotUtils.d.ts +11 -0
  86. package/dist/types/scene-edit/SceneNodeSnapshot.d.ts +7 -0
  87. package/dist/types/scene-edit/SceneNodeSnapshotUtils.d.ts +11 -0
  88. package/dist/types/scene-edit/commands/GeometryEditCommand.d.ts +10 -0
  89. package/dist/types/scene-edit/commands/InsertSceneNodeCommand.d.ts +10 -0
  90. package/dist/types/scene-edit/commands/MaterialEditCommand.d.ts +10 -0
  91. package/dist/types/scene-edit/commands/MoveSceneNodeCommand.d.ts +10 -0
  92. package/dist/types/scene-edit/commands/RemoveSceneObjectCommand.d.ts +9 -0
  93. package/dist/types/scene-edit/commands/TransformSceneObjectCommand.d.ts +17 -0
  94. package/dist/types/scene-edit/index.d.ts +13 -0
  95. package/dist/types/screenshot/ScreenshotPlugin.d.ts +134 -0
  96. package/dist/types/screenshot/index.d.ts +1 -0
  97. package/dist/types/sections/AxisPlaneSection.d.ts +65 -0
  98. package/dist/types/sections/AxisSectionPopPanel.d.ts +18 -0
  99. package/dist/types/sections/BaseSection.d.ts +64 -0
  100. package/dist/types/sections/Locale.d.ts +21 -0
  101. package/dist/types/sections/ObjectsBoxSection.d.ts +29 -0
  102. package/dist/types/sections/PickPlaneSection.d.ts +48 -0
  103. package/dist/types/sections/PickSectionPopPanel.d.ts +18 -0
  104. package/dist/types/sections/Section.constants.d.ts +13 -0
  105. package/dist/types/sections/SectionGizmo.d.ts +22 -0
  106. package/dist/types/sections/SectionPlaneMesh.d.ts +23 -0
  107. package/dist/types/sections/SectionPlugin.d.ts +147 -0
  108. package/dist/types/sections/index.d.ts +6 -0
  109. package/dist/types/settings-3d/Locale.d.ts +61 -0
  110. package/dist/types/settings-3d/Settings3dPlugin.d.ts +46 -0
  111. package/dist/types/settings-3d/index.d.ts +2 -0
  112. package/dist/types/skybox/GradientColorSkybox.d.ts +9 -0
  113. package/dist/types/skybox/SkyboxPlugin.d.ts +48 -0
  114. package/dist/types/skybox/index.d.ts +1 -0
  115. package/dist/types/stats/StatsPlugin.d.ts +18 -0
  116. package/dist/types/stats/index.d.ts +2 -0
  117. package/dist/types/step-loader/OcctImportScriptLoader.d.ts +22 -0
  118. package/dist/types/step-loader/StepLoaderPlugin.d.ts +22 -0
  119. package/dist/types/step-loader/StepModelLoader.d.ts +39 -0
  120. package/dist/types/step-loader/index.d.ts +3 -0
  121. package/dist/types/step-loader/occtMeshBuilder.d.ts +35 -0
  122. package/dist/types/toolbars/Locale.d.ts +57 -0
  123. package/dist/types/toolbars/Toolbar.config.d.ts +5 -0
  124. package/dist/types/toolbars/Toolbar.constants.d.ts +71 -0
  125. package/dist/types/toolbars/Toolbar.d.ts +112 -0
  126. package/dist/types/toolbars/Viewer3dToolbarPlugin.d.ts +37 -0
  127. package/dist/types/toolbars/index.d.ts +5 -0
  128. package/dist/types/transform/Locale.d.ts +21 -0
  129. package/dist/types/transform/TransformPlugin.d.ts +38 -0
  130. package/dist/types/transform/index.d.ts +1 -0
  131. package/dist/types/tree-view/Locale.d.ts +29 -0
  132. package/dist/types/tree-view/TreeNodeTypeIcons.d.ts +15 -0
  133. package/dist/types/tree-view/TreeViewDragDrop.d.ts +17 -0
  134. package/dist/types/tree-view/TreeViewPlugin.d.ts +66 -0
  135. package/dist/types/tree-view/index.d.ts +2 -0
  136. package/dist/types/view-cube/Locale.d.ts +21 -0
  137. package/dist/types/view-cube/ViewCube.d.ts +86 -0
  138. package/dist/types/view-cube/ViewCubePlugin.d.ts +20 -0
  139. package/dist/types/view-cube/index.d.ts +2 -0
  140. package/package.json +73 -0
@@ -0,0 +1,28 @@
1
+ import { THREE, Drawable } from "@gcode-viewer/core";
2
+ import { MeasurementType } from "./BaseMeasurement";
3
+ import type { MeasurementData } from "./BaseMeasurement";
4
+ export declare abstract class BaseMeasureDrawable extends Drawable {
5
+ type: MeasurementType;
6
+ static readonly MAJOR_COLOR = "rgba(249, 157, 11, 0.9)";
7
+ static readonly MINOR_COLOR = "rgb(255, 255, 255)";
8
+ static readonly AREA_FILL_COLOR = "rgba(249, 157, 11, 0.3)";
9
+ static readonly LINE_WIDTH = 2;
10
+ static readonly POINT_RADIUS = 5;
11
+ static readonly LABEL_FONT_SIZE = 14;
12
+ label?: string;
13
+ labelPositon?: THREE.Vector2;
14
+ labelBounds: THREE.Box2;
15
+ drawing: boolean;
16
+ constructor(id: string, points: THREE.Vector3[]);
17
+ setDrawingState(isDrawing: boolean): void;
18
+ drawSelect(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
19
+ drawPoints(ctx: CanvasRenderingContext2D, camera: THREE.Camera, points: THREE.Vector3[]): void;
20
+ drawText(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
21
+ drawRoundRect(ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number): void;
22
+ getVertexes(): THREE.Vector3[];
23
+ update(points: THREE.Vector3[]): this;
24
+ getData(): MeasurementData;
25
+ setData(data: MeasurementData): void;
26
+ isPointInPath(p: THREE.Vector3, raycaster?: THREE.Raycaster): boolean;
27
+ getUnitString(): string;
28
+ }
@@ -0,0 +1,123 @@
1
+ import { THREE, type BaseViewer, DrawableData, DrawableList, type MobileTouchHelperDrawable, type OSnapHelper, EventInfo, InputManager, Event as EventDispatcher } from "@gcode-viewer/core";
2
+ import { Tooltip } from "@gcode-viewer/ui";
3
+ import { type BaseMeasureDrawable } from "./BaseMeasureDrawable";
4
+ /**
5
+ * Measurement type. e.g. distance measurement, area measurement, etc.
6
+ */
7
+ export declare enum MeasurementType {
8
+ Distance = "Distance",
9
+ Area = "Area",
10
+ Angle = "Angle",
11
+ /**
12
+ * @hidden
13
+ */
14
+ Coordinate = "Coordinate"
15
+ }
16
+ /**
17
+ * Serializable measurement data
18
+ */
19
+ export type MeasurementData = DrawableData;
20
+ /**
21
+ * Measurement events.
22
+ */
23
+ type MeasurementEvents = {
24
+ /**
25
+ * Triggered when clicked on a measurement drawable.
26
+ */
27
+ onclick: BaseMeasureDrawable;
28
+ /**
29
+ * Triggered when a measurement is completed.
30
+ * At this time, user may continue to do another measurement.
31
+ */
32
+ complete: BaseMeasureDrawable;
33
+ /**
34
+ * Triggered when measurement is deactivated.
35
+ */
36
+ deactivate: MeasurementType;
37
+ /**
38
+ * Triggered when the first point is drawn.
39
+ * We need this event to unselect a selected drawable, etc.
40
+ */
41
+ firstpointpicked: BaseMeasureDrawable;
42
+ /**
43
+ * Triggered before a drawable is added.
44
+ */
45
+ beforeadd: BaseMeasureDrawable;
46
+ /**
47
+ * Triggered when a drawable is updated.
48
+ */
49
+ update: BaseMeasureDrawable;
50
+ /**
51
+ * Triggered before a drawable is removed.
52
+ */
53
+ beforeremove: BaseMeasureDrawable;
54
+ };
55
+ /**
56
+ * BaseMeasurement class
57
+ */
58
+ export declare abstract class BaseMeasurement extends EventDispatcher<MeasurementEvents> {
59
+ protected type: MeasurementType;
60
+ protected viewer: BaseViewer;
61
+ protected drawList: DrawableList;
62
+ protected osnapHelper: OSnapHelper;
63
+ protected actived: boolean;
64
+ protected mouseMoved: boolean;
65
+ protected mouseDowned: boolean;
66
+ protected touchDowned: boolean;
67
+ protected lastMoveEvent?: EventInfo;
68
+ protected lastMouseDownPosition?: THREE.Vector3;
69
+ protected mouseDownPositionX: number;
70
+ protected mouseDownPositionY: number;
71
+ protected currentMeasureDrawable?: BaseMeasureDrawable;
72
+ protected drawingPoints?: THREE.Vector3[];
73
+ protected lastClickTime?: number;
74
+ protected tooltip?: Tooltip;
75
+ protected snapPoint?: THREE.Vector3 | undefined;
76
+ protected completed?: boolean;
77
+ protected clickedOnMeasurementDrawable?: BaseMeasureDrawable;
78
+ protected mobileTouchHelper?: MobileTouchHelperDrawable;
79
+ protected exitButton?: HTMLButtonElement;
80
+ protected firstPickedListener?: () => void;
81
+ protected completedListener?: () => void;
82
+ constructor(type: MeasurementType, viewer: BaseViewer, input: InputManager, drawList: DrawableList, osnapHelper: OSnapHelper);
83
+ get overlayRender(): import("@gcode-viewer/core").CanvasRender;
84
+ get renderer(): THREE.WebGLRenderer;
85
+ /**
86
+ * If measurement is active.
87
+ * Here let's use raycaster to identify whether this measurement is active.
88
+ */
89
+ get isActive(): boolean;
90
+ /**
91
+ * If it started to measure, but a measruement action is not completed yet.
92
+ */
93
+ get isMeasuring(): boolean;
94
+ setTouchHelper(mobileTouchHelper: MobileTouchHelperDrawable): void;
95
+ protected createMobileExitButton(): HTMLButtonElement;
96
+ activate(): void;
97
+ deactivate(): void;
98
+ protected removeDrawable(drawable: BaseMeasureDrawable): void;
99
+ clearClickedDrawable(): void;
100
+ touchstart: (e: EventInfo) => void;
101
+ touchmove: (e: EventInfo) => void;
102
+ touchend: (e: EventInfo) => void;
103
+ mousedown: (e: EventInfo) => void;
104
+ mousemove: (e: EventInfo) => void;
105
+ mouseup: (e: EventInfo) => void;
106
+ dblclick: () => void;
107
+ protected onMouseClick(e: EventInfo): void;
108
+ protected selectMeasurementByEvent(e: EventInfo): void;
109
+ keydown: (e: EventInfo) => void;
110
+ abstract exitDrawing(): void;
111
+ abstract cancel(): void;
112
+ protected abstract complete(): void;
113
+ protected abstract setTooltipContent(): void;
114
+ protected abstract createMeasureDrawable(): BaseMeasureDrawable | undefined;
115
+ protected onMouseMove(position: THREE.Vector3): void;
116
+ protected createOrUpdateMeasureDrawable(position?: THREE.Vector3): void;
117
+ /**
118
+ * The closest intersection
119
+ * @param e
120
+ */
121
+ getIntersections: (e: EventInfo) => THREE.Intersection[];
122
+ }
123
+ export {};
@@ -0,0 +1,10 @@
1
+ import { THREE } from "@gcode-viewer/core";
2
+ import { BaseMeasureDrawable } from "./BaseMeasureDrawable";
3
+ import { MeasurementType } from "./BaseMeasurement";
4
+ export declare class CoordinateMeasureDrawable extends BaseMeasureDrawable {
5
+ type: MeasurementType;
6
+ constructor(id: string, points: THREE.Vector3[]);
7
+ draw(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
8
+ drawText(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
9
+ getClassType(): string;
10
+ }
@@ -0,0 +1,12 @@
1
+ import { type BaseViewer, DrawableList, OSnapHelper, EventInfo, InputManager } from "@gcode-viewer/core";
2
+ import { BaseMeasurement } from "./BaseMeasurement";
3
+ import { CoordinateMeasureDrawable } from "./CoordinateMeasureDrawable";
4
+ export declare class CoordinateMeasurement extends BaseMeasurement {
5
+ constructor(viewer: BaseViewer, input: InputManager, drawList: DrawableList, osnapHelper: OSnapHelper);
6
+ protected createMeasureDrawable(): CoordinateMeasureDrawable | undefined;
7
+ protected onMouseClick(e: EventInfo): void;
8
+ exitDrawing(): void;
9
+ protected complete(): void;
10
+ cancel(): void;
11
+ protected setTooltipContent(): void;
12
+ }
@@ -0,0 +1,13 @@
1
+ import { THREE } from "@gcode-viewer/core";
2
+ import { BaseMeasureDrawable } from "./BaseMeasureDrawable";
3
+ import { MeasurementType } from "./BaseMeasurement";
4
+ export declare class DistanceMeasureDrawable extends BaseMeasureDrawable {
5
+ static readonly SHORT_LINE_LENGTH = 12;
6
+ scale?: number;
7
+ type: MeasurementType;
8
+ constructor(id: string, points: THREE.Vector3[], scale?: number);
9
+ draw(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
10
+ drawText(ctx: CanvasRenderingContext2D, camera: THREE.Camera): void;
11
+ getClassType(): string;
12
+ setScale(scale: number): void;
13
+ }
@@ -0,0 +1,21 @@
1
+ import { type BaseViewer, EventInfo, InputManager, OSnapHelper, DrawableList } from "@gcode-viewer/core";
2
+ import { BaseMeasurement } from "./BaseMeasurement";
3
+ import { DistanceMeasureDrawable } from "./DistanceMeasureDrawable";
4
+ export declare class DistanceMeasurement extends BaseMeasurement {
5
+ constructor(viewer: BaseViewer, input: InputManager, drawList: DrawableList, osnapHelper: OSnapHelper);
6
+ protected createMeasureDrawable(): DistanceMeasureDrawable | undefined;
7
+ protected onMouseClick(e: EventInfo): void;
8
+ exitDrawing(): void;
9
+ protected complete(): void;
10
+ cancel(): void;
11
+ deactivate(): void;
12
+ protected setTooltipContent(): void;
13
+ /**
14
+ * Gets the scale value.
15
+ */
16
+ getScale(): number | undefined;
17
+ /**
18
+ * Sets the scale value.
19
+ */
20
+ setScale(scale: number): void;
21
+ }
@@ -0,0 +1,13 @@
1
+ import { i18n } from "@gcode-viewer/core";
2
+ export declare const en: {
3
+ measure: string;
4
+ areaMeasurement: string;
5
+ };
6
+ export declare const zh: {
7
+ measure: string;
8
+ areaMeasurement: string;
9
+ };
10
+ export declare const MEASUREMENT_I18N_NAMESPACE: "measurement";
11
+ export { i18n };
12
+ export type MeasurementTranslationKey = keyof typeof en;
13
+ export declare function t(key: MeasurementTranslationKey): string;
@@ -0,0 +1,102 @@
1
+ import { PluginConfig, THREE } from "@gcode-viewer/core";
2
+ import { type BaseViewer, Plugin } from "@gcode-viewer/core";
3
+ import { BaseMeasureDrawable } from "./BaseMeasureDrawable";
4
+ import { MeasurementData, MeasurementType } from "./BaseMeasurement";
5
+ /**
6
+ * Measurement plugin config.
7
+ */
8
+ export type MeasurementPluginConfig = Partial<PluginConfig>;
9
+ export declare class MeasurementPlugin extends Plugin {
10
+ static readonly DEFAULT_ID = "MeasurementPlugin";
11
+ selectedDrawable: BaseMeasureDrawable | undefined;
12
+ constructor(viewer: BaseViewer, cfg?: MeasurementPluginConfig);
13
+ protected get canvas(): HTMLCanvasElement;
14
+ protected get raycaster(): THREE.Raycaster;
15
+ add(drawable: BaseMeasureDrawable, needFireEvent?: boolean): void;
16
+ create(data: MeasurementData): BaseMeasureDrawable;
17
+ remove(drawable: BaseMeasureDrawable, needFireEvent?: boolean): void;
18
+ /**
19
+ * Set osnap tolerance in pixcel size. The pixcel size will be converted to a size in world coordinate and pass to OSnapHelper.
20
+ */
21
+ setSnapTolerance(toleranceInPixel: number): void;
22
+ /**
23
+ * Activates distance, area, or angle measurement according to `type`.
24
+ * @param type Measurement mode to start.
25
+ */
26
+ activate(type: MeasurementType): void;
27
+ /** Deactivates the current measurement mode and restores selection settings. */
28
+ deactivate(): void;
29
+ getActiveMeasurementType(): MeasurementType | undefined;
30
+ /**
31
+ *
32
+ * @returns {boolean}
33
+ * @description Is measure plugin active
34
+ */
35
+ isActive(): boolean;
36
+ /**
37
+ *
38
+ * @returns {boolean} Is measuring now
39
+ */
40
+ isMeasuring(): boolean;
41
+ /** Returns all persisted measurement records from the drawable list. */
42
+ getData(): MeasurementData[];
43
+ /**
44
+ * Aborts the in-progress measurement stroke without leaving measurement mode (user can start again).
45
+ */
46
+ cancel(): void;
47
+ /**
48
+ * Replaces measurements from serialized `MeasurementData` entries (undo-aware batch).
49
+ * @param dataArray Records to materialize as drawables.
50
+ */
51
+ setData(dataArray: MeasurementData[]): void;
52
+ /**
53
+ * Sets a measurement drawable's visibility by id.
54
+ * @param id
55
+ * @param visible
56
+ * @returns
57
+ * @description Sets a measurement's visibility.
58
+ */
59
+ setVisibleById(id: string, visible: boolean): boolean;
60
+ /**
61
+ * Sets all measurement drawables' visibilities.
62
+ */
63
+ setVisibilities(visible: boolean): void;
64
+ /** Clears all measurement drawables after exiting any active draw. */
65
+ clear(): void;
66
+ /**
67
+ * Gets a measurement drawable by id.
68
+ */
69
+ getById(id: string): BaseMeasureDrawable;
70
+ removeById(id: string): void;
71
+ /**
72
+ * Selects a measurement drawable by id.
73
+ * @param {string} id
74
+ * @description Selects a measurement by id
75
+ */
76
+ selectById(id: string): void;
77
+ /**
78
+ * Selects a measurement drawable.
79
+ */
80
+ select(drawable: BaseMeasureDrawable): void;
81
+ /**
82
+ *
83
+ * @param renderEnabled If need render measurement
84
+ * @description Unselects a measurement.
85
+ */
86
+ unselect(renderEnabled?: boolean): void;
87
+ /**
88
+ * Gets the scale value.
89
+ * Scale is the ratio of real world value and the value in three.js(pdf, a map, etc.).
90
+ * e.g., Real world distance is 1000, and the value in three.js is 1, then scale is 1000.
91
+ * We should display 1000 rather than 1 while measuring.
92
+ */
93
+ getScale(): number | undefined;
94
+ /**
95
+ * Sets the scale value.
96
+ */
97
+ setScale(scale: number | undefined): void;
98
+ /**
99
+ * @description Destroy measure plugin
100
+ */
101
+ destroy(): void;
102
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./BaseMeasureDrawable";
2
+ export * from "./BaseMeasurement";
3
+ export * from "./MeasurementPlugin";
@@ -0,0 +1,10 @@
1
+ import { Command } from "@gcode-viewer/core";
2
+ import { MeasurementData } from "../BaseMeasurement";
3
+ import { type MeasurementPlugin } from "../MeasurementPlugin";
4
+ export declare class AddMeasurementCommand extends Command {
5
+ private manager;
6
+ private data;
7
+ constructor(manager: MeasurementPlugin, data: MeasurementData);
8
+ undo(): boolean;
9
+ redo(): boolean;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Command } from "@gcode-viewer/core";
2
+ import { MeasurementData } from "../BaseMeasurement";
3
+ import { type MeasurementPlugin } from "../MeasurementPlugin";
4
+ export declare class RemoveMeasurementCommand extends Command {
5
+ private manager;
6
+ private data;
7
+ constructor(manager: MeasurementPlugin, data: MeasurementData);
8
+ undo(): boolean;
9
+ redo(): boolean;
10
+ }
@@ -0,0 +1,85 @@
1
+ import { THREE, BaseViewer, Plugin, PluginConfig } from "@gcode-viewer/core";
2
+ /**
3
+ * Print-bed / build-plate plugin config.
4
+ * Units are millimeters (scene units), XY plane, Z-up.
5
+ */
6
+ export interface PlatePluginConfig extends Partial<PluginConfig> {
7
+ /** Visible by default. */
8
+ visible?: boolean;
9
+ /** Printable width along X (mm). Default `600`. */
10
+ sizeX?: number;
11
+ /** Printable depth along Y (mm). Default `600`. */
12
+ sizeY?: number;
13
+ /**
14
+ * Minor grid spacing in mm.
15
+ * Default `10` — common FDM / slicer convention (1 cm cells).
16
+ */
17
+ cellSize?: number;
18
+ /**
19
+ * Draw a stronger line every N minor cells.
20
+ * Default `5` → 50 mm majors when `cellSize` is 10.
21
+ */
22
+ majorEvery?: number;
23
+ /** World Z of the plate top surface. Default `0`. */
24
+ height?: number;
25
+ /**
26
+ * Where world XY `(0,0)` sits on the plate.
27
+ * - `corner` (default): plate covers `[0, sizeX] × [0, sizeY]` (printer-style).
28
+ * - `center`: plate is centered on the origin.
29
+ */
30
+ origin?: "corner" | "center";
31
+ /** Plate fill color. Default dark charcoal. */
32
+ plateColor?: number;
33
+ /** Minor grid line color. */
34
+ gridColor?: number;
35
+ /** Major grid line color. */
36
+ majorGridColor?: number;
37
+ /** Plate edge outline color. */
38
+ edgeColor?: number;
39
+ /**
40
+ * Labeled scale marks along the origin edges, in mm from the plate min corner.
41
+ * Default `[100, 200, 300]`. Pass `[]` to disable. Marks are drawn outside the plate.
42
+ */
43
+ scaleMarks?: number[];
44
+ }
45
+ /**
46
+ * Finite build-plate with a dark surface and anti-aliased light gray grid.
47
+ * Inspired by Bambu Studio’s engineering plate look (no logos / tabs).
48
+ */
49
+ export declare class PlatePlugin extends Plugin {
50
+ static readonly DEFAULT_ID = "PlatePlugin";
51
+ protected readonly NAME = "BUILD_PLATE";
52
+ protected cfg: Required<Pick<PlatePluginConfig, "visible" | "sizeX" | "sizeY" | "cellSize" | "majorEvery" | "height" | "origin" | "plateColor" | "gridColor" | "majorGridColor" | "edgeColor" | "scaleMarks">> & PlatePluginConfig;
53
+ protected root?: THREE.Group;
54
+ protected plateMesh?: THREE.Mesh;
55
+ constructor(viewer: BaseViewer, cfg?: PlatePluginConfig);
56
+ getSize(): {
57
+ sizeX: number;
58
+ sizeY: number;
59
+ };
60
+ /**
61
+ * World-space AABB of the printable plate (thin volume at plate height).
62
+ * Used by camera fit when the scene has no loaded models.
63
+ */
64
+ getWorldBBox(): THREE.Box3;
65
+ setSize(sizeX: number, sizeY: number): void;
66
+ getCellSize(): number;
67
+ setCellSize(cellSize: number): void;
68
+ getHeight(): number;
69
+ setHeight(height: number): void;
70
+ setOrigin(origin: "corner" | "center"): void;
71
+ setVisible(visible: boolean): void;
72
+ isVisible(): boolean;
73
+ /** Rebuild geometry from the current config. */
74
+ rebuild(): void;
75
+ protected normalizedScaleMarks(sizeX: number, sizeY: number): number[];
76
+ protected addScaleLabels(root: THREE.Group, marks: number[], minX: number, minY: number, z: number): void;
77
+ /** Flat label mesh on the XY plane (not a camera-facing sprite). */
78
+ protected createScaleLabelMesh(text: string): THREE.Mesh;
79
+ protected plateBounds(): {
80
+ minX: number;
81
+ minY: number;
82
+ };
83
+ protected disposeMeshes(): void;
84
+ destroy(): void;
85
+ }
@@ -0,0 +1 @@
1
+ export * from "./PlatePlugin";
@@ -0,0 +1,3 @@
1
+ import { THREE, type Viewer3d } from "@gcode-viewer/core";
2
+ /** Read-only animation clip list for the CAD Editor Node panel. */
3
+ export declare function appendAnimationSection(container: HTMLElement, viewer: Viewer3d, target?: THREE.Object3D): void;
@@ -0,0 +1,3 @@
1
+ import { THREE } from "@gcode-viewer/core";
2
+ /** Appends perspective / orthographic camera fields under {@link container}. */
3
+ export declare function appendCameraEditor(container: HTMLElement, camera: THREE.Camera, enableRender: () => void): void;
@@ -0,0 +1,3 @@
1
+ import { Viewer3d } from "@gcode-viewer/core";
2
+ /** Renders global PBR / renderer environment controls into {@link container}. */
3
+ export declare function renderEnvironmentPanel(container: HTMLElement, viewer: Viewer3d): void;
@@ -0,0 +1,3 @@
1
+ import { THREE } from "@gcode-viewer/core";
2
+ /** Appends light-specific fields under {@link container}. */
3
+ export declare function appendLightEditor(container: HTMLElement, light: THREE.Light, enableRender: () => void): void;
@@ -0,0 +1,83 @@
1
+ import { i18n } from "@gcode-viewer/core";
2
+ export declare const en: {
3
+ property: string;
4
+ tabMaterial: string;
5
+ tabNode: string;
6
+ nothingSelected: string;
7
+ propertyNoUserData: string;
8
+ propertyNoneVisible: string;
9
+ propertyAddNameRequired: string;
10
+ propertyAddNameDuplicate: string;
11
+ duplicateMaterial: string;
12
+ duplicateGeometry: string;
13
+ recalculateNormalsOutside: string;
14
+ recalculateNormalsInside: string;
15
+ regenerateSmartUv: string;
16
+ meshTools: string;
17
+ applyTransform: string;
18
+ flipFaces: string;
19
+ flipNormals: string;
20
+ generateTangents: string;
21
+ originToGeometryCenter: string;
22
+ geometryCenterToOrigin: string;
23
+ originToGeometryBottom: string;
24
+ geometryBottomToOrigin: string;
25
+ exposure: string;
26
+ toneMapping: string;
27
+ background: string;
28
+ skyWhite: string;
29
+ skyBlack: string;
30
+ skyGray: string;
31
+ skyGradient1: string;
32
+ environmentMap: string;
33
+ envDefault: string;
34
+ envCity: string;
35
+ envGrass: string;
36
+ envSunset: string;
37
+ animations: string;
38
+ noAnimations: string;
39
+ tabEnvironment: string;
40
+ };
41
+ export declare const zh: {
42
+ property: string;
43
+ tabMaterial: string;
44
+ tabNode: string;
45
+ nothingSelected: string;
46
+ propertyNoUserData: string;
47
+ propertyNoneVisible: string;
48
+ propertyAddNameRequired: string;
49
+ propertyAddNameDuplicate: string;
50
+ duplicateMaterial: string;
51
+ duplicateGeometry: string;
52
+ recalculateNormalsOutside: string;
53
+ recalculateNormalsInside: string;
54
+ regenerateSmartUv: string;
55
+ meshTools: string;
56
+ applyTransform: string;
57
+ flipFaces: string;
58
+ flipNormals: string;
59
+ generateTangents: string;
60
+ originToGeometryCenter: string;
61
+ geometryCenterToOrigin: string;
62
+ originToGeometryBottom: string;
63
+ geometryBottomToOrigin: string;
64
+ exposure: string;
65
+ toneMapping: string;
66
+ background: string;
67
+ skyWhite: string;
68
+ skyBlack: string;
69
+ skyGray: string;
70
+ skyGradient1: string;
71
+ environmentMap: string;
72
+ envDefault: string;
73
+ envCity: string;
74
+ envGrass: string;
75
+ envSunset: string;
76
+ animations: string;
77
+ noAnimations: string;
78
+ tabEnvironment: string;
79
+ };
80
+ export declare const PROPERTY_I18N_NAMESPACE: "property";
81
+ export { i18n };
82
+ export type PropertyTranslationKey = keyof typeof en;
83
+ export declare function t(key: PropertyTranslationKey): string;
@@ -0,0 +1,9 @@
1
+ import { THREE } from "@gcode-viewer/core";
2
+ type EnableRender = () => void;
3
+ /**
4
+ * Appends gltfeditor-style material sections (general + type-specific) under {@link container}.
5
+ * Caller supplies identity fields (name / UUID) separately if needed.
6
+ * {@link refreshPanel} is called after texture replace/remove so the panel re-renders with the new state.
7
+ */
8
+ export declare function appendMaterialTypeEditor(container: HTMLElement, mat: THREE.Material, enableRender: EnableRender, refreshPanel?: () => void): void;
9
+ export {};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * DOM helpers and static UI assets for {@link PropertyPlugin}.
3
+ * Keeps the plugin file focused on viewer / tab orchestration.
4
+ */
5
+ export type PropertyUserDataType = "string" | "number" | "boolean" | "json";
6
+ /** Trash can (stroke), used for userData row delete and UV attribute delete. */
7
+ export declare const PROPERTY_ICON_DELETE_TRASH = "<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path d=\"M19 7l-1 12a2 2 0 01-2 2H8a2 2 0 01-2-2L5 7m5-3V4a1 1 0 011-1h4a1 1 0 011 1v0M3 7h18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 11v5M14 11v5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>";
8
+ /** Plus (stroke), used for adding a userData property. */
9
+ export declare const PROPERTY_ICON_ADD_PLUS = "<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>";
10
+ /** Refresh / sync (filled), used for smart UV regenerate. */
11
+ export declare const PROPERTY_ICON_UV_REFRESH = "<svg viewBox=\"0 0 1024 1024\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M783.568 328C724.571 241.095 624.953 184 512 184c-181.15 0-328 146.85-328 328h-72c0-220.914 179.086-400 400-400 135.738 0 255.685 67.611 328 170.994V128c0-8.837 7.163-16 16-16h48a8 8 0 0 1 8 8v248c0 17.673-14.327 32-32 32H632a8 8 0 0 1-8-8v-48c0-8.837 7.163-16 16-16h143.568zM240.432 696C299.429 782.905 399.047 840 512 840c181.15 0 328-146.85 328-328h72c0 220.914-179.086 400-400 400-135.738 0-255.685-67.611-328-170.994V896c0 8.837-7.163 16-16 16h-48a8 8 0 0 1-8-8V656c0-17.673 14.327-32 32-32h248a8 8 0 0 1 8 8v48c0 8.837-7.163 16-16 16H240.432z\"/></svg>";
12
+ /** Eye (stroke), used for viewing geometry attribute values. */
13
+ export declare const PROPERTY_ICON_VIEW_EYE = "<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/></svg>";
14
+ /** Duplicate / copy (stroke), used for material instance copy. */
15
+ export declare const PROPERTY_ICON_DUPLICATE = "<svg viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>";
16
+ export declare function createFormInputRow(labelText: string, fieldEl: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): HTMLDivElement;
17
+ export declare function createCheckRow(labelText: string, checkbox: HTMLInputElement): HTMLDivElement;
18
+ /** Collapsible block for Node tab sections (Transform, Geometry, Animations, …). */
19
+ export declare function createCollapsibleNodeSection(panel: HTMLElement, titleText: string, options?: {
20
+ defaultCollapsed?: boolean;
21
+ initiallyHidden?: boolean;
22
+ }): {
23
+ section: HTMLDivElement;
24
+ body: HTMLDivElement;
25
+ };
26
+ export interface IconActionButtonOptions {
27
+ className: string;
28
+ title: string;
29
+ svg: string;
30
+ }
31
+ export declare function createIconActionButton(opts: IconActionButtonOptions): HTMLButtonElement;
32
+ /** Opens a plain popup window to inspect raw geometry buffer values (similar to gltfeditor.com). */
33
+ export declare function openGeometryDataViewer(title: string, content: string): void;
34
+ export declare function createDefaultPropertyValue(type: PropertyUserDataType): string | number | boolean | object;