@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.
- package/README.md +26 -0
- package/dist/index.esm.js +288 -0
- package/dist/types/axis-gizmo/AxisGizmoPlugin.d.ts +25 -0
- package/dist/types/axis-gizmo/CoordinateAxes.d.ts +1 -0
- package/dist/types/axis-gizmo/index.d.ts +2 -0
- package/dist/types/bottom-bar/BottomBarPlugin.d.ts +36 -0
- package/dist/types/bottom-bar/index.d.ts +2 -0
- package/dist/types/context-menu/Constants.d.ts +34 -0
- package/dist/types/context-menu/ContextMenu.config.d.ts +2 -0
- package/dist/types/context-menu/ContextMenuPlugin.d.ts +23 -0
- package/dist/types/context-menu/Locale.d.ts +51 -0
- package/dist/types/context-menu/index.d.ts +4 -0
- package/dist/types/dat-gui/Viewer3dDatGui.d.ts +69 -0
- package/dist/types/dat-gui/index.d.ts +1 -0
- package/dist/types/explode/ExplodePlugin.d.ts +46 -0
- package/dist/types/explode/ObjectExploder.d.ts +48 -0
- package/dist/types/explode/index.d.ts +1 -0
- package/dist/types/export/ExportPlugin.d.ts +57 -0
- package/dist/types/export/Locale.d.ts +41 -0
- package/dist/types/export/gltf/GltfExporter.d.ts +32 -0
- package/dist/types/export/gltf/index.d.ts +1 -0
- package/dist/types/export/index.d.ts +2 -0
- package/dist/types/export/obj/ObjZipExporter.d.ts +14 -0
- package/dist/types/export/obj/index.d.ts +3 -0
- package/dist/types/export/obj/mtl.d.ts +9 -0
- package/dist/types/export/obj/textures.d.ts +15 -0
- package/dist/types/gcode-layer-bar/GCodeLayerBarPlugin.d.ts +66 -0
- package/dist/types/gcode-layer-bar/Locale.d.ts +13 -0
- package/dist/types/gcode-layer-bar/index.d.ts +2 -0
- package/dist/types/gcode-legend/GCodeLegendPlugin.d.ts +58 -0
- package/dist/types/gcode-legend/Locale.d.ts +83 -0
- package/dist/types/gcode-legend/NephogramLegend.d.ts +8 -0
- package/dist/types/gcode-legend/index.d.ts +2 -0
- package/dist/types/gcode-steps-bar/GCodeStepsBarPlugin.d.ts +46 -0
- package/dist/types/gcode-steps-bar/Locale.d.ts +11 -0
- package/dist/types/gcode-steps-bar/index.d.ts +2 -0
- package/dist/types/gcode-text-panel/GCodeTextPanelPlugin.d.ts +54 -0
- package/dist/types/gcode-text-panel/Locale.d.ts +11 -0
- package/dist/types/gcode-text-panel/index.d.ts +2 -0
- package/dist/types/ground-grid/GroundGridPlugin.d.ts +38 -0
- package/dist/types/ground-grid/index.d.ts +1 -0
- package/dist/types/ground-shaow/GroundShadowPlugin.d.ts +58 -0
- package/dist/types/ground-shaow/index.d.ts +1 -0
- package/dist/types/hotpoint/HotpointPlugin.d.ts +92 -0
- package/dist/types/hotpoint/index.d.ts +1 -0
- package/dist/types/index.d.ts +29 -0
- package/dist/types/local-model-uploader/IUploader.d.ts +55 -0
- package/dist/types/local-model-uploader/LocalModelUploader.d.ts +19 -0
- package/dist/types/local-model-uploader/index.d.ts +2 -0
- package/dist/types/measurements/AngleMeasureDrawable.d.ts +12 -0
- package/dist/types/measurements/AngleMeasurement.d.ts +13 -0
- package/dist/types/measurements/AreaMeasureDrawable.d.ts +14 -0
- package/dist/types/measurements/AreaMeasurement.d.ts +24 -0
- package/dist/types/measurements/BaseMeasureDrawable.d.ts +28 -0
- package/dist/types/measurements/BaseMeasurement.d.ts +123 -0
- package/dist/types/measurements/CoordinateMeasureDrawable.d.ts +10 -0
- package/dist/types/measurements/CoordinateMeasurement.d.ts +12 -0
- package/dist/types/measurements/DistanceMeasureDrawable.d.ts +13 -0
- package/dist/types/measurements/DistanceMeasurement.d.ts +21 -0
- package/dist/types/measurements/Locale.d.ts +13 -0
- package/dist/types/measurements/MeasurementPlugin.d.ts +102 -0
- package/dist/types/measurements/index.d.ts +3 -0
- package/dist/types/measurements/undo/AddMeasurementCommand.d.ts +10 -0
- package/dist/types/measurements/undo/RemoveMeasurementCommand.d.ts +10 -0
- package/dist/types/plate/PlatePlugin.d.ts +85 -0
- package/dist/types/plate/index.d.ts +1 -0
- package/dist/types/property/AnimationPanel.d.ts +3 -0
- package/dist/types/property/CameraEditor.d.ts +3 -0
- package/dist/types/property/EnvironmentPanel.d.ts +3 -0
- package/dist/types/property/LightEditor.d.ts +3 -0
- package/dist/types/property/Locale.d.ts +83 -0
- package/dist/types/property/MaterialEditor.d.ts +9 -0
- package/dist/types/property/PropertyPanelUi.d.ts +34 -0
- package/dist/types/property/PropertyPlugin.d.ts +95 -0
- package/dist/types/property/Utils.d.ts +19 -0
- package/dist/types/property/Vec3Field.d.ts +25 -0
- package/dist/types/property/index.d.ts +2 -0
- package/dist/types/rhino-3dm-loader/Rhino3dmLoaderPlugin.d.ts +17 -0
- package/dist/types/rhino-3dm-loader/Rhino3dmModelLoader.d.ts +25 -0
- package/dist/types/rhino-3dm-loader/index.d.ts +1 -0
- package/dist/types/scene-edit/SceneEditActions.d.ts +24 -0
- package/dist/types/scene-edit/SceneEditPlugin.d.ts +26 -0
- package/dist/types/scene-edit/SceneEditRecording.d.ts +11 -0
- package/dist/types/scene-edit/SceneMeshSnapshot.d.ts +23 -0
- package/dist/types/scene-edit/SceneMeshSnapshotUtils.d.ts +11 -0
- package/dist/types/scene-edit/SceneNodeSnapshot.d.ts +7 -0
- package/dist/types/scene-edit/SceneNodeSnapshotUtils.d.ts +11 -0
- package/dist/types/scene-edit/commands/GeometryEditCommand.d.ts +10 -0
- package/dist/types/scene-edit/commands/InsertSceneNodeCommand.d.ts +10 -0
- package/dist/types/scene-edit/commands/MaterialEditCommand.d.ts +10 -0
- package/dist/types/scene-edit/commands/MoveSceneNodeCommand.d.ts +10 -0
- package/dist/types/scene-edit/commands/RemoveSceneObjectCommand.d.ts +9 -0
- package/dist/types/scene-edit/commands/TransformSceneObjectCommand.d.ts +17 -0
- package/dist/types/scene-edit/index.d.ts +13 -0
- package/dist/types/screenshot/ScreenshotPlugin.d.ts +134 -0
- package/dist/types/screenshot/index.d.ts +1 -0
- package/dist/types/sections/AxisPlaneSection.d.ts +65 -0
- package/dist/types/sections/AxisSectionPopPanel.d.ts +18 -0
- package/dist/types/sections/BaseSection.d.ts +64 -0
- package/dist/types/sections/Locale.d.ts +21 -0
- package/dist/types/sections/ObjectsBoxSection.d.ts +29 -0
- package/dist/types/sections/PickPlaneSection.d.ts +48 -0
- package/dist/types/sections/PickSectionPopPanel.d.ts +18 -0
- package/dist/types/sections/Section.constants.d.ts +13 -0
- package/dist/types/sections/SectionGizmo.d.ts +22 -0
- package/dist/types/sections/SectionPlaneMesh.d.ts +23 -0
- package/dist/types/sections/SectionPlugin.d.ts +147 -0
- package/dist/types/sections/index.d.ts +6 -0
- package/dist/types/settings-3d/Locale.d.ts +61 -0
- package/dist/types/settings-3d/Settings3dPlugin.d.ts +46 -0
- package/dist/types/settings-3d/index.d.ts +2 -0
- package/dist/types/skybox/GradientColorSkybox.d.ts +9 -0
- package/dist/types/skybox/SkyboxPlugin.d.ts +48 -0
- package/dist/types/skybox/index.d.ts +1 -0
- package/dist/types/stats/StatsPlugin.d.ts +18 -0
- package/dist/types/stats/index.d.ts +2 -0
- package/dist/types/step-loader/OcctImportScriptLoader.d.ts +22 -0
- package/dist/types/step-loader/StepLoaderPlugin.d.ts +22 -0
- package/dist/types/step-loader/StepModelLoader.d.ts +39 -0
- package/dist/types/step-loader/index.d.ts +3 -0
- package/dist/types/step-loader/occtMeshBuilder.d.ts +35 -0
- package/dist/types/toolbars/Locale.d.ts +57 -0
- package/dist/types/toolbars/Toolbar.config.d.ts +5 -0
- package/dist/types/toolbars/Toolbar.constants.d.ts +71 -0
- package/dist/types/toolbars/Toolbar.d.ts +112 -0
- package/dist/types/toolbars/Viewer3dToolbarPlugin.d.ts +37 -0
- package/dist/types/toolbars/index.d.ts +5 -0
- package/dist/types/transform/Locale.d.ts +21 -0
- package/dist/types/transform/TransformPlugin.d.ts +38 -0
- package/dist/types/transform/index.d.ts +1 -0
- package/dist/types/tree-view/Locale.d.ts +29 -0
- package/dist/types/tree-view/TreeNodeTypeIcons.d.ts +15 -0
- package/dist/types/tree-view/TreeViewDragDrop.d.ts +17 -0
- package/dist/types/tree-view/TreeViewPlugin.d.ts +66 -0
- package/dist/types/tree-view/index.d.ts +2 -0
- package/dist/types/view-cube/Locale.d.ts +21 -0
- package/dist/types/view-cube/ViewCube.d.ts +86 -0
- package/dist/types/view-cube/ViewCubePlugin.d.ts +20 -0
- package/dist/types/view-cube/index.d.ts +2 -0
- package/package.json +73 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Viewer3d, Plugin, PluginConfig, THREE } from "@gcode-viewer/core";
|
|
2
|
+
import { BasePanel } from "@gcode-viewer/ui";
|
|
3
|
+
import { captureSceneMaterialSnapshot } from "../scene-edit/SceneMeshSnapshotUtils";
|
|
4
|
+
import { captureSceneTransformState } from "../scene-edit/commands/TransformSceneObjectCommand";
|
|
5
|
+
/**
|
|
6
|
+
* Tree view plugin config.
|
|
7
|
+
*/
|
|
8
|
+
export interface PropertyPluginConfig extends Partial<PluginConfig> {
|
|
9
|
+
/**
|
|
10
|
+
* Container div id.
|
|
11
|
+
*/
|
|
12
|
+
containerId?: string;
|
|
13
|
+
/**
|
|
14
|
+
* If panel is visible. It is visible by default.
|
|
15
|
+
*/
|
|
16
|
+
visible?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Tree view plugin events.
|
|
20
|
+
*/
|
|
21
|
+
type PropertyPluginEvents = {
|
|
22
|
+
/**
|
|
23
|
+
* Panel visibility change event.
|
|
24
|
+
*/
|
|
25
|
+
visibilitychange: boolean;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Tree view plugin.
|
|
29
|
+
*/
|
|
30
|
+
export declare class PropertyPlugin extends Plugin<PropertyPluginEvents> {
|
|
31
|
+
static readonly DEFAULT_ID = "PropertyPlugin";
|
|
32
|
+
protected cfg: PropertyPluginConfig;
|
|
33
|
+
protected basePanel?: BasePanel;
|
|
34
|
+
protected container?: HTMLDivElement;
|
|
35
|
+
protected content?: HTMLDivElement;
|
|
36
|
+
protected details?: HTMLDivElement;
|
|
37
|
+
protected selectedObject: THREE.Object3D | undefined;
|
|
38
|
+
protected lastActiveTabIdx: number;
|
|
39
|
+
protected nodePanel?: HTMLDivElement;
|
|
40
|
+
/** Camera / light / animation blocks; cleared on each {@link renderNode}. */
|
|
41
|
+
protected nodeExtrasContainer?: HTMLDivElement;
|
|
42
|
+
protected nodeModeButtons?: {
|
|
43
|
+
local: HTMLButtonElement;
|
|
44
|
+
global: HTMLButtonElement;
|
|
45
|
+
};
|
|
46
|
+
protected nodeInputs?: {
|
|
47
|
+
translation: HTMLInputElement[];
|
|
48
|
+
rotation: HTMLInputElement[];
|
|
49
|
+
scale: HTMLInputElement[];
|
|
50
|
+
};
|
|
51
|
+
protected geometrySection?: HTMLDivElement;
|
|
52
|
+
protected boundingBoxSection?: HTMLDivElement;
|
|
53
|
+
protected boundingBoxGeometrySizeInputs?: [HTMLInputElement, HTMLInputElement, HTMLInputElement];
|
|
54
|
+
protected boundingBoxSizeInputs?: [HTMLInputElement, HTMLInputElement, HTMLInputElement];
|
|
55
|
+
/** Multi-material Material tab: selected slot index (clamped when re-rendering). */
|
|
56
|
+
protected materialSlotIndex: number;
|
|
57
|
+
/** Reset material slot when the highlighted mesh changes. */
|
|
58
|
+
protected materialPanelMeshUuid?: string;
|
|
59
|
+
/** Transform state captured when editing Node TRS fields (undo). */
|
|
60
|
+
protected propertyTransformBefore?: ReturnType<typeof captureSceneTransformState>;
|
|
61
|
+
/** Material snapshot for debounced undo while editing the Material tab. */
|
|
62
|
+
protected materialEditBefore?: ReturnType<typeof captureSceneMaterialSnapshot>;
|
|
63
|
+
protected materialEditDebounce?: ReturnType<typeof setTimeout>;
|
|
64
|
+
constructor(viewer: Viewer3d, cfg?: PropertyPluginConfig);
|
|
65
|
+
private onLanguageChange;
|
|
66
|
+
protected applyLocalizedChrome(): void;
|
|
67
|
+
protected updateContent(): void;
|
|
68
|
+
setVisible(visible: boolean): void;
|
|
69
|
+
isVisible(): boolean;
|
|
70
|
+
protected onObjectSelected: () => void;
|
|
71
|
+
protected onObjectDeselected: () => void;
|
|
72
|
+
protected onObjectTransformed: (object: THREE.Object3D) => void;
|
|
73
|
+
destroy(): void;
|
|
74
|
+
protected addContent(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Selection can be a {@link THREE.Group} or other {@link THREE.Object3D}; the material panel
|
|
77
|
+
* needs a concrete {@link THREE.Mesh}. Uses the first visible mesh in subtree (depth-first).
|
|
78
|
+
*/
|
|
79
|
+
private resolveMeshForMaterialPanel;
|
|
80
|
+
renderTab(idx: number): void;
|
|
81
|
+
private scheduleMaterialUndoRecord;
|
|
82
|
+
private syncOriginalMaterialAfterDuplicate;
|
|
83
|
+
private renderEnvironment;
|
|
84
|
+
private renderNode;
|
|
85
|
+
protected updateNodeInputs(target: THREE.Object3D): void;
|
|
86
|
+
protected applyNodeInputs(target: THREE.Object3D): void;
|
|
87
|
+
private appendGeometryAttrRow;
|
|
88
|
+
private openGeometryAttributeViewer;
|
|
89
|
+
private appendMeshToolButton;
|
|
90
|
+
private runRecordedGeometryEdit;
|
|
91
|
+
private updateMeshTools;
|
|
92
|
+
private updateGeometryInfo;
|
|
93
|
+
private updateBoundingBoxInfo;
|
|
94
|
+
}
|
|
95
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { THREE } from "@gcode-viewer/core";
|
|
2
|
+
/** Backing array length for a buffer attribute (handles interleaved buffers). */
|
|
3
|
+
export declare function getBufferAttributeArrayLength(attr: THREE.BufferAttribute | undefined): number;
|
|
4
|
+
export declare function getGeometrySize(geometry: THREE.BufferGeometry): {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
length: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function getGlobalSize(target: THREE.Object3D): {
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
length: number;
|
|
13
|
+
};
|
|
14
|
+
type ReadableBufferAttribute = THREE.BufferAttribute | THREE.InterleavedBufferAttribute;
|
|
15
|
+
/** Formats buffer attribute rows as space-separated components (one row per vertex). */
|
|
16
|
+
export declare function formatBufferAttributeValues(attr: ReadableBufferAttribute, maxRows?: number): string;
|
|
17
|
+
/** Formats geometry index buffer values (one index per line). */
|
|
18
|
+
export declare function formatGeometryIndexValues(index: THREE.BufferAttribute, maxRows?: number): string;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Three side-by-side number fields, each with a short leading caption (e.g. X/Y/Z, R/G/B, or any strings).
|
|
3
|
+
*/
|
|
4
|
+
export type Vec3FieldOptions = {
|
|
5
|
+
/** Caption shown before each value (three slots). */
|
|
6
|
+
labels: readonly [string, string, string];
|
|
7
|
+
/** When true, values are display-only (`readOnly` inputs, muted styling). */
|
|
8
|
+
readOnly?: boolean;
|
|
9
|
+
onChange?: () => void;
|
|
10
|
+
/** Passed to each `<input type="number">` when set. */
|
|
11
|
+
step?: string;
|
|
12
|
+
};
|
|
13
|
+
export type Vec3Field = {
|
|
14
|
+
root: HTMLDivElement;
|
|
15
|
+
inputs: [HTMLInputElement, HTMLInputElement, HTMLInputElement];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* One slot with the same DOM/classes as each column in {@link createVec3Field}
|
|
19
|
+
* (`prop-vec3-field__slot` + label strip + `prop-vec3-field__input`).
|
|
20
|
+
* Caller configures the input (step, disabled, listeners); this only builds the shell.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createVec3StyleSlot(label: string, input: HTMLInputElement): HTMLDivElement;
|
|
23
|
+
/** Same shell as {@link createVec3StyleSlot} but for a `<select>` (texture enums, etc.). */
|
|
24
|
+
export declare function createVec3StyleSelectSlot(label: string, select: HTMLSelectElement): HTMLDivElement;
|
|
25
|
+
export declare function createVec3Field(options: Vec3FieldOptions): Vec3Field;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseViewer, Plugin, PluginConfig } from "@gcode-viewer/core";
|
|
2
|
+
export interface Rhino3dmLoaderPluginConfig extends Partial<PluginConfig> {
|
|
3
|
+
/**
|
|
4
|
+
* Folder URL containing `rhino3dm.js` and `rhino3dm.wasm` (trailing `/` optional).
|
|
5
|
+
* Default: jsDelivr `rhino3dm@8.17.0`.
|
|
6
|
+
*/
|
|
7
|
+
libraryPath?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Registers a `.3dm` model loader using three.js `Rhino3dmLoader` (3DMLoader) + rhino3dm wasm.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Rhino3dmLoaderPlugin extends Plugin {
|
|
13
|
+
static readonly DEFAULT_ID = "Rhino3dmLoaderPlugin";
|
|
14
|
+
private readonly loader;
|
|
15
|
+
constructor(viewer: BaseViewer, cfg?: Rhino3dmLoaderPluginConfig);
|
|
16
|
+
destroy(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseModelLoader, THREE, type ModelLoadContext, type ModelLoadFromBufferContext } from "@gcode-viewer/core";
|
|
2
|
+
/** Default folder on a CDN; must end with `/` and contain `rhino3dm.js` + `rhino3dm.wasm`. */
|
|
3
|
+
export declare const DEFAULT_RHINO3DM_LIBRARY_PATH = "https://cdn.jsdelivr.net/npm/rhino3dm@8.17.0/";
|
|
4
|
+
export interface Rhino3dmModelLoaderOptions {
|
|
5
|
+
/** Overrides {@link DEFAULT_RHINO3DM_LIBRARY_PATH} for this instance. */
|
|
6
|
+
libraryPath?: string;
|
|
7
|
+
/** Optional Three.js loading manager (e.g. blob URL rewriting). */
|
|
8
|
+
manager?: THREE.LoadingManager;
|
|
9
|
+
}
|
|
10
|
+
export declare class Rhino3dmModelLoader extends BaseModelLoader {
|
|
11
|
+
readonly id = "loader.plugin.rhino3dm";
|
|
12
|
+
readonly priority = 10;
|
|
13
|
+
readonly formats: readonly ["3dm"];
|
|
14
|
+
private static defaultLibraryPath;
|
|
15
|
+
private readonly libraryPath;
|
|
16
|
+
private readonly manager?;
|
|
17
|
+
/**
|
|
18
|
+
* Override the default rhino3dm library folder for all new loaders (unless overridden per instance).
|
|
19
|
+
*/
|
|
20
|
+
static setLibraryPath(path: string): void;
|
|
21
|
+
constructor(options?: Rhino3dmModelLoaderOptions);
|
|
22
|
+
load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
|
|
23
|
+
loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
|
|
24
|
+
private applyRequestHeader;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Rhino3dmLoaderPlugin, type Rhino3dmLoaderPluginConfig } from "./Rhino3dmLoaderPlugin";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { UndoManager, Viewer3d, THREE } from "@gcode-viewer/core";
|
|
2
|
+
/**
|
|
3
|
+
* Scene graph edit operations for CAD mode ({@link Viewer3d.enableSceneEditing}).
|
|
4
|
+
* Pushes {@link Command}s to the viewer's single {@link UndoManager} stack.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SceneEditActions {
|
|
7
|
+
private readonly viewer;
|
|
8
|
+
private readonly undoManager;
|
|
9
|
+
private clipboard?;
|
|
10
|
+
constructor(viewer: Viewer3d, undoManager: UndoManager);
|
|
11
|
+
hasClipboard(): boolean;
|
|
12
|
+
copySelection(): boolean;
|
|
13
|
+
pasteSelection(): boolean;
|
|
14
|
+
duplicateNode(node: THREE.Object3D): boolean;
|
|
15
|
+
private insertClone;
|
|
16
|
+
private resolvePastePlacement;
|
|
17
|
+
private isModelRoot;
|
|
18
|
+
deleteSelection(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Re-parents {@link object} under {@link newParent} at {@link targetIndex}.
|
|
21
|
+
* Records undo when the scene graph actually changes.
|
|
22
|
+
*/
|
|
23
|
+
reparentSceneNode(object: THREE.Object3D, newParent: THREE.Object3D, targetIndex: number): boolean;
|
|
24
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Plugin, type BaseViewer, type PluginConfig } from "@gcode-viewer/core";
|
|
2
|
+
import { SceneEditActions } from "./SceneEditActions";
|
|
3
|
+
export interface SceneEditPluginConfig extends Partial<PluginConfig> {
|
|
4
|
+
/** When false, the plugin does not register shortcuts (viewer may still expose API). */
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* CAD scene-editing shortcuts when {@link Viewer3dConfig.enableSceneEditing} is on.
|
|
9
|
+
* Uses the viewer's single {@link UndoManager} stack (shared with measurements).
|
|
10
|
+
*/
|
|
11
|
+
export declare class SceneEditPlugin extends Plugin {
|
|
12
|
+
static readonly DEFAULT_ID = "SceneEditPlugin";
|
|
13
|
+
private readonly viewer3d;
|
|
14
|
+
private readonly cfg;
|
|
15
|
+
private readonly actions;
|
|
16
|
+
private enabled;
|
|
17
|
+
private gizmoTransformBefore?;
|
|
18
|
+
private readonly onKeyDown;
|
|
19
|
+
constructor(viewer: BaseViewer, cfg?: SceneEditPluginConfig);
|
|
20
|
+
getSceneEditActions(): SceneEditActions;
|
|
21
|
+
private shouldDeferToOverlay;
|
|
22
|
+
private onGizmoDragStart;
|
|
23
|
+
private onGizmoDragEnd;
|
|
24
|
+
setEnabled(enable: boolean): void;
|
|
25
|
+
destroy(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { THREE, Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import { captureSceneTransformState } from "./commands/TransformSceneObjectCommand";
|
|
3
|
+
/**
|
|
4
|
+
* Runs {@link mutate} on {@link target} and records undo when scene editing is enabled.
|
|
5
|
+
* Captures mesh geometry + local TRS before and after the mutation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function recordGeometryEdit(viewer: Viewer3d, target: THREE.Object3D, mutate: () => void): boolean;
|
|
8
|
+
/** Records undo for material changes on meshes under {@link target}. */
|
|
9
|
+
export declare function recordMaterialEdit(viewer: Viewer3d, target: THREE.Object3D, mutate: () => void): boolean;
|
|
10
|
+
/** Pushes a transform undo command when before/after differ. */
|
|
11
|
+
export declare function recordTransformEdit(viewer: Viewer3d, object: THREE.Object3D, before: ReturnType<typeof captureSceneTransformState>): void;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { THREE } from "@gcode-viewer/core";
|
|
2
|
+
/** Per-mesh geometry + local TRS captured for undo/redo of mesh-level edits. */
|
|
3
|
+
export interface MeshGeometrySnapshot {
|
|
4
|
+
meshUuid: string;
|
|
5
|
+
geometry: THREE.BufferGeometry | null;
|
|
6
|
+
position: THREE.Vector3;
|
|
7
|
+
rotation: THREE.Euler;
|
|
8
|
+
scale: THREE.Vector3;
|
|
9
|
+
}
|
|
10
|
+
/** Snapshot of all drawable meshes under a subtree root. */
|
|
11
|
+
export interface SceneMeshSnapshot {
|
|
12
|
+
rootUuid: string;
|
|
13
|
+
meshes: MeshGeometrySnapshot[];
|
|
14
|
+
}
|
|
15
|
+
/** Per-mesh material assignment for undo/redo. */
|
|
16
|
+
export interface MeshMaterialSnapshot {
|
|
17
|
+
meshUuid: string;
|
|
18
|
+
material: THREE.Material | THREE.Material[];
|
|
19
|
+
}
|
|
20
|
+
export interface SceneMaterialSnapshot {
|
|
21
|
+
rootUuid: string;
|
|
22
|
+
meshes: MeshMaterialSnapshot[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { THREE } from "@gcode-viewer/core";
|
|
2
|
+
import type { Viewer3d } from "@gcode-viewer/core";
|
|
3
|
+
import type { SceneMaterialSnapshot, SceneMeshSnapshot } from "./SceneMeshSnapshot";
|
|
4
|
+
/** Captures geometry clones and local TRS for every drawable mesh under {@link root}. */
|
|
5
|
+
export declare function captureSceneMeshSnapshot(root: THREE.Object3D): SceneMeshSnapshot;
|
|
6
|
+
/** Restores mesh geometry and local TRS from {@link snapshot}. */
|
|
7
|
+
export declare function applySceneMeshSnapshot(viewer: Viewer3d, snapshot: SceneMeshSnapshot): boolean;
|
|
8
|
+
/** Captures material references (cloned) for meshes under {@link root}. */
|
|
9
|
+
export declare function captureSceneMaterialSnapshot(root: THREE.Object3D): SceneMaterialSnapshot;
|
|
10
|
+
/** Restores mesh materials from {@link snapshot}. */
|
|
11
|
+
export declare function applySceneMaterialSnapshot(viewer: Viewer3d, snapshot: SceneMaterialSnapshot): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Model3d, type THREE, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import type { SceneNodeSnapshot } from "./SceneNodeSnapshot";
|
|
3
|
+
export declare function isSceneModelRoot(object: THREE.Object3D): boolean;
|
|
4
|
+
/** Finds the {@link Model3d} that owns {@link object} in the scene graph. */
|
|
5
|
+
export declare function findModel3dOwning(viewer: Viewer3d, object: THREE.Object3D): Model3d | undefined;
|
|
6
|
+
/** @deprecated Use {@link findModel3dOwning}. */
|
|
7
|
+
export declare function findModel3dForSceneRoot(viewer: Viewer3d, object: THREE.Object3D): Model3d | undefined;
|
|
8
|
+
/** Whether deleting {@link object} should remove the entire loaded model (tree root / model wrapper). */
|
|
9
|
+
export declare function isWholeModelDeleteTarget(object: THREE.Object3D, model: Model3d): boolean;
|
|
10
|
+
/** Builds a snapshot for undoing removal of a non-model-root node. */
|
|
11
|
+
export declare function createSceneNodeSnapshot(object: THREE.Object3D): SceneNodeSnapshot | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import type { SceneMeshSnapshot } from "../SceneMeshSnapshot";
|
|
3
|
+
export declare class GeometryEditCommand extends Command {
|
|
4
|
+
private readonly viewer;
|
|
5
|
+
private readonly before;
|
|
6
|
+
private readonly after;
|
|
7
|
+
constructor(viewer: Viewer3d, before: SceneMeshSnapshot, after: SceneMeshSnapshot);
|
|
8
|
+
undo(): boolean;
|
|
9
|
+
redo(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import type { SceneNodeSnapshot } from "../SceneNodeSnapshot";
|
|
3
|
+
/** Undo/redo for insertions (paste, duplicate). */
|
|
4
|
+
export declare class InsertSceneNodeCommand extends Command {
|
|
5
|
+
private readonly viewer;
|
|
6
|
+
private readonly snapshot;
|
|
7
|
+
constructor(viewer: Viewer3d, snapshot: SceneNodeSnapshot);
|
|
8
|
+
undo(): boolean;
|
|
9
|
+
redo(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import type { SceneMaterialSnapshot } from "../SceneMeshSnapshot";
|
|
3
|
+
export declare class MaterialEditCommand extends Command {
|
|
4
|
+
private readonly viewer;
|
|
5
|
+
private readonly before;
|
|
6
|
+
private readonly after;
|
|
7
|
+
constructor(viewer: Viewer3d, before: SceneMaterialSnapshot, after: SceneMaterialSnapshot);
|
|
8
|
+
undo(): boolean;
|
|
9
|
+
redo(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command, type SceneNodePlacement, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
export declare class MoveSceneNodeCommand extends Command {
|
|
3
|
+
private readonly viewer;
|
|
4
|
+
private readonly objectUuid;
|
|
5
|
+
private readonly before;
|
|
6
|
+
private readonly after;
|
|
7
|
+
constructor(viewer: Viewer3d, objectUuid: string, before: SceneNodePlacement, after: SceneNodePlacement);
|
|
8
|
+
undo(): boolean;
|
|
9
|
+
redo(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
import type { SceneNodeSnapshot } from "../SceneNodeSnapshot";
|
|
3
|
+
export declare class RemoveSceneObjectCommand extends Command {
|
|
4
|
+
private readonly viewer;
|
|
5
|
+
private readonly snapshot;
|
|
6
|
+
constructor(viewer: Viewer3d, snapshot: SceneNodeSnapshot);
|
|
7
|
+
undo(): boolean;
|
|
8
|
+
redo(): boolean;
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command, THREE, type Viewer3d } from "@gcode-viewer/core";
|
|
2
|
+
export interface SceneTransformState {
|
|
3
|
+
objectUuid: string;
|
|
4
|
+
position: THREE.Vector3;
|
|
5
|
+
rotation: THREE.Euler;
|
|
6
|
+
scale: THREE.Vector3;
|
|
7
|
+
}
|
|
8
|
+
export declare function captureSceneTransformState(object: THREE.Object3D): SceneTransformState;
|
|
9
|
+
export declare class TransformSceneObjectCommand extends Command {
|
|
10
|
+
private readonly viewer;
|
|
11
|
+
private readonly before;
|
|
12
|
+
private readonly after;
|
|
13
|
+
constructor(viewer: Viewer3d, before: SceneTransformState, after: SceneTransformState);
|
|
14
|
+
static shouldRecord(before: SceneTransformState, after: SceneTransformState): boolean;
|
|
15
|
+
undo(): boolean;
|
|
16
|
+
redo(): boolean;
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./SceneEditPlugin";
|
|
2
|
+
export * from "./SceneEditActions";
|
|
3
|
+
export * from "./SceneNodeSnapshot";
|
|
4
|
+
export * from "./SceneNodeSnapshotUtils";
|
|
5
|
+
export * from "./SceneMeshSnapshot";
|
|
6
|
+
export * from "./SceneMeshSnapshotUtils";
|
|
7
|
+
export * from "./SceneEditRecording";
|
|
8
|
+
export * from "./commands/InsertSceneNodeCommand";
|
|
9
|
+
export * from "./commands/GeometryEditCommand";
|
|
10
|
+
export * from "./commands/MaterialEditCommand";
|
|
11
|
+
export * from "./commands/RemoveSceneObjectCommand";
|
|
12
|
+
export * from "./commands/MoveSceneNodeCommand";
|
|
13
|
+
export * from "./commands/TransformSceneObjectCommand";
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { THREE } from "@gcode-viewer/core";
|
|
2
|
+
import { type BaseViewer, BoxSelectHelper, PickMarkupHelper, Plugin, PluginConfig } from "@gcode-viewer/core";
|
|
3
|
+
/**
|
|
4
|
+
* Screenshot mode.
|
|
5
|
+
*/
|
|
6
|
+
export declare enum ScreenshotMode {
|
|
7
|
+
/**
|
|
8
|
+
* Take screenshot of the whole canvas.
|
|
9
|
+
*/
|
|
10
|
+
Default = "Default",
|
|
11
|
+
/**
|
|
12
|
+
* Take screenshot by box selecting an area.
|
|
13
|
+
*/
|
|
14
|
+
BoxSelection = "BoxSelection",
|
|
15
|
+
/**
|
|
16
|
+
* Take screenshot by picking a markup.
|
|
17
|
+
*/
|
|
18
|
+
PickMarkup = "PickMarkup"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Screenshot plugin config.
|
|
22
|
+
*/
|
|
23
|
+
export interface ScreenshotPluginConfig extends Partial<PluginConfig> {
|
|
24
|
+
/**
|
|
25
|
+
* Image type.
|
|
26
|
+
*/
|
|
27
|
+
type?: "image/png" | "image/jpg";
|
|
28
|
+
/**
|
|
29
|
+
* Image quality.
|
|
30
|
+
*/
|
|
31
|
+
quality?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Sets background transparent, this must be used for "image/png" format.
|
|
34
|
+
* @default false
|
|
35
|
+
* @hidden
|
|
36
|
+
*/
|
|
37
|
+
setBackgroundTransparent?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Screenshot result, which contains a result image and,
|
|
41
|
+
* for Viewer3d, it contains the camera's position and target.
|
|
42
|
+
*/
|
|
43
|
+
export interface ScreenshotResult {
|
|
44
|
+
/**
|
|
45
|
+
* The view extent when the screenshot is taken.
|
|
46
|
+
* Note that, it is not the image's extent.
|
|
47
|
+
*/
|
|
48
|
+
viewExtent?: THREE.Box2;
|
|
49
|
+
/**
|
|
50
|
+
* Used for Viewer3d
|
|
51
|
+
* @hidden
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* Used for Viewer3d
|
|
55
|
+
* @hidden
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* Image type, which is "image/png" by default
|
|
59
|
+
* @hidden
|
|
60
|
+
*/
|
|
61
|
+
imageType: string;
|
|
62
|
+
/**
|
|
63
|
+
* The image, in base 64 format.
|
|
64
|
+
*/
|
|
65
|
+
base64Image: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Screenshot plugin
|
|
69
|
+
*/
|
|
70
|
+
export declare class ScreenshotPlugin extends Plugin {
|
|
71
|
+
static readonly DEFAULT_ID = "ScreenshotPlugin";
|
|
72
|
+
protected cfg: ScreenshotPluginConfig;
|
|
73
|
+
protected boxSelectHelper?: BoxSelectHelper;
|
|
74
|
+
protected pickMarkupHelper?: PickMarkupHelper;
|
|
75
|
+
protected originalBackground: THREE.Color | undefined;
|
|
76
|
+
protected originalClearAlpha: number;
|
|
77
|
+
constructor(viewer: BaseViewer, cfg?: ScreenshotPluginConfig);
|
|
78
|
+
/**
|
|
79
|
+
* Captures the WebGL canvas as a data URL (base64 image string).
|
|
80
|
+
* @example
|
|
81
|
+
* ``` typescript
|
|
82
|
+
* const plugin = new ScreenshotPlugin(viewer);
|
|
83
|
+
* const base64Image = plugin.getScreenshot();
|
|
84
|
+
* console.log(base64Image);
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
getScreenshot(): string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Gets screenshot by bbox under screen cooridinate.
|
|
90
|
+
*/
|
|
91
|
+
getScreenshotByScreenBBox(bbox: THREE.Box2): Promise<string | undefined>;
|
|
92
|
+
/**
|
|
93
|
+
* Gets a screenshot for world-space bounds clipped to the current viewport (screen overlap only).
|
|
94
|
+
* It needs to convert world to screen coordinate, in order to get the
|
|
95
|
+
* screenshot range. Assume it maps to bboxA under screen coordinate,
|
|
96
|
+
* and current view boundary is bboxB (e.g., 0,0 - 1024,768).
|
|
97
|
+
* Since, a given world coordinate may not be in current view boundary.
|
|
98
|
+
* The finally screenshot is the overlap of bboxA and bboxB. When
|
|
99
|
+
* - bboxA includes bboxB, it get screenshot for bboxB
|
|
100
|
+
* - bboxB includes bboxA, it get screenshot for bboxA
|
|
101
|
+
* - bboxA overlaps with bboxB, it get screenshot for the overlapped area
|
|
102
|
+
* - bboxA doesn't overlap with bboxB, it get nothing
|
|
103
|
+
*
|
|
104
|
+
* A best practice to use this API is to use orthographic camera, under top view,
|
|
105
|
+
* and pass in viewer's bbox.
|
|
106
|
+
*/
|
|
107
|
+
getScreenshotForWorldBoundsInViewport(bbox: THREE.Box3): Promise<string | undefined>;
|
|
108
|
+
/**
|
|
109
|
+
* Async screenshot: full view, user box selection, or pick-a-markup region; returns base64 image data.
|
|
110
|
+
* @param mode `Default` (full view), `BoxSelection`, or `PickMarkup`.
|
|
111
|
+
* @example
|
|
112
|
+
* ``` typescript
|
|
113
|
+
* // Pick a markup to define the crop region.
|
|
114
|
+
* const mode = ScreenshotMode.PickMarkup;
|
|
115
|
+
* viewer.getScreenshot(mode).then(data => console.log(data));
|
|
116
|
+
* // User draws a rectangle on screen.
|
|
117
|
+
* const mode = ScreenshotMode.BoxSelection;
|
|
118
|
+
* viewer.getScreenshot(mode).then(data => console.log(data));
|
|
119
|
+
* // Entire current view.
|
|
120
|
+
* const mode = ScreenshotMode.Default;
|
|
121
|
+
* const plugin = new ScreenshotPlugin(viewer);
|
|
122
|
+
* plugin.getScreenshotAsync(mode).then(data => console.log(data));
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
getScreenshotAsync(mode?: ScreenshotMode): Promise<undefined | ScreenshotResult>;
|
|
126
|
+
/**
|
|
127
|
+
* If ScreenshotPlugin is active.
|
|
128
|
+
*/
|
|
129
|
+
isActive(): (() => boolean) | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Cancel current operation if any.
|
|
132
|
+
*/
|
|
133
|
+
cancel(): void;
|
|
134
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ScreenshotPlugin";
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { THREE } from "@gcode-viewer/core";
|
|
2
|
+
import { EventInfo, InputManager, type BaseViewer } from "@gcode-viewer/core";
|
|
3
|
+
import { BaseSection } from "./BaseSection";
|
|
4
|
+
import { SectionGizmo } from "../sections/SectionGizmo";
|
|
5
|
+
import { SectionPlaneMesh } from "../sections/SectionPlaneMesh";
|
|
6
|
+
export declare enum AxisType {
|
|
7
|
+
X = "X",
|
|
8
|
+
Y = "Y",
|
|
9
|
+
Z = "Z"
|
|
10
|
+
}
|
|
11
|
+
export declare class AxisPlaneSection extends BaseSection {
|
|
12
|
+
protected activeAxis: AxisType;
|
|
13
|
+
protected gizmo?: SectionGizmo;
|
|
14
|
+
protected planeMesh?: SectionPlaneMesh;
|
|
15
|
+
protected capsWireframe?: SectionPlaneMesh;
|
|
16
|
+
protected clipPlane?: THREE.Plane;
|
|
17
|
+
protected selectedObject?: SectionPlaneMesh | THREE.Mesh | THREE.Object3D;
|
|
18
|
+
protected axisInfoMap: {
|
|
19
|
+
[key in AxisType]: {
|
|
20
|
+
normal: THREE.Vector3;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
protected center: THREE.Vector3;
|
|
24
|
+
protected clipPlaneConstant?: number;
|
|
25
|
+
constructor(viewer: BaseViewer, input: InputManager);
|
|
26
|
+
/**
|
|
27
|
+
* Activates plane section.
|
|
28
|
+
* @param type Specifies the axis for sectioning. The default value is "X" axis.
|
|
29
|
+
* @param clipPlaneConstant It decides where the clip plane is. By default, the clip plane passes through
|
|
30
|
+
* the center of world bounding box. Caller can specify a different position.
|
|
31
|
+
* E.g., when type is "X" and clipPlaneConstant is 10, it means the clip plane passes through (10, 0, 0).
|
|
32
|
+
*/
|
|
33
|
+
activate(type?: AxisType, clipPlaneConstant?: number): void;
|
|
34
|
+
deactivate(keepSectionState?: boolean): void;
|
|
35
|
+
reset(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Sets a AxisType for plane section.
|
|
38
|
+
* @param type Specifies the axis for sectioning.
|
|
39
|
+
* @param clipPlaneConstant It decides where the clip plane is. By default, the clip plane passes through
|
|
40
|
+
* the center of world bounding box. Caller can specify a different position.
|
|
41
|
+
* E.g., when type is "X" and clipPlaneConstant is 10, it means the clip plane passes through (10, 0, 0).
|
|
42
|
+
*/
|
|
43
|
+
setActiveAxis(type: AxisType, clipPlaneConstant?: number): void;
|
|
44
|
+
/**
|
|
45
|
+
* Sets gizmo and section plane mesh visibility.
|
|
46
|
+
*/
|
|
47
|
+
setSectionPlaneVisible(visible: boolean): void;
|
|
48
|
+
protected initOrUpdateClipPlanes(): void;
|
|
49
|
+
protected initOrUpdateSectionPlaneMeshes(): void;
|
|
50
|
+
private createCapsWireframe;
|
|
51
|
+
protected applyCapsMaterial(): void;
|
|
52
|
+
setCapsVisible(visible: boolean): void;
|
|
53
|
+
protected initOrUpdateGizmo(): void;
|
|
54
|
+
mousedown: (e: EventInfo) => void;
|
|
55
|
+
protected mousemove: (e: EventInfo) => void;
|
|
56
|
+
onDragStart(e: EventInfo): void;
|
|
57
|
+
onDragMove(e: EventInfo): void;
|
|
58
|
+
onDragEnd(e: EventInfo): void;
|
|
59
|
+
getIntersectObjects(): THREE.Object3D[];
|
|
60
|
+
activateSelectedObject(active: boolean): void;
|
|
61
|
+
/**
|
|
62
|
+
* Adjusts a position by activeAxis and clipPlaneConstant.
|
|
63
|
+
*/
|
|
64
|
+
private adjustPositionByClipPlaneConstant;
|
|
65
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type BaseViewer } from "@gcode-viewer/core";
|
|
2
|
+
import { PopPanel } from "@gcode-viewer/ui";
|
|
3
|
+
import { AxisPlaneSection } from "./AxisPlaneSection";
|
|
4
|
+
export declare class AxisSectionPopPanel extends PopPanel {
|
|
5
|
+
protected axis: string;
|
|
6
|
+
protected activeItem?: string;
|
|
7
|
+
protected groupSelectNode?: HTMLElement;
|
|
8
|
+
protected activeSelectNode?: HTMLElement;
|
|
9
|
+
protected isVisible: boolean;
|
|
10
|
+
protected section: AxisPlaneSection;
|
|
11
|
+
constructor(viewer: BaseViewer);
|
|
12
|
+
keydown: (e: KeyboardEvent) => void;
|
|
13
|
+
destroy(): void;
|
|
14
|
+
createGroupSelectLayout(): void;
|
|
15
|
+
addGroupSelectItems(): void;
|
|
16
|
+
createActiveSelectLayout(): void;
|
|
17
|
+
addActiveItems(): void;
|
|
18
|
+
}
|