Skip to content

Commit 13e95ba

Browse files
committed
✨ feat: add IViewGizmo interface
1 parent 2fccd0a commit 13e95ba

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

packages/chili-core/src/visual/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export * from "./meshExporter";
1111
export * from "./textGenerator";
1212
export * from "./view";
1313
export * from "./viewport";
14+
export * from "./viewGizmo";
1415
export * from "./visual";
1516
export * from "./visualContext";
1617
export * from "./visualFactory";
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Part of the Chili3d Project, under the AGPL-3.0 License.
2+
// See LICENSE file in the project root for full license information.
3+
4+
export interface IViewGizmo {
5+
update(): void;
6+
setDom(dom: HTMLElement): void;
7+
dispose(): void;
8+
}

packages/chili-three/src/threeView.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
IShapeFilter,
1212
ISubShape,
1313
IView,
14+
IViewGizmo,
1415
IVisualObject,
1516
Matrix4,
1617
MultiShapeNode,
@@ -57,14 +58,15 @@ import { ViewGizmo } from "./viewGizmo";
5758

5859
export class ThreeView extends Observable implements IView {
5960
private _dom?: HTMLElement;
60-
private readonly _resizeObserver: ResizeObserver;
61+
private _needsUpdate: boolean = false;
6162

6263
private readonly _scene: Scene;
6364
private readonly _renderer: WebGLRenderer;
6465
private readonly _cssRenderer: CSS2DRenderer;
6566
private readonly _workplane: Plane;
66-
private _needsUpdate: boolean = false;
67-
private readonly _gizmo: ViewGizmo;
67+
private readonly _gizmo: IViewGizmo;
68+
private readonly _resizeObserver: ResizeObserver;
69+
6870
readonly cameraController: CameraController;
6971
readonly dynamicLight = new DirectionalLight(0xffffff, 2);
7072

@@ -114,7 +116,7 @@ export class ThreeView extends Observable implements IView {
114116
this._renderer = this.initRenderer();
115117
this._cssRenderer = this.initCssRenderer();
116118
this._scene.add(this.dynamicLight);
117-
this._gizmo = new ViewGizmo(this);
119+
this._gizmo = this.initGizmo();
118120
this.setPrivateValue("mode", ViewMode.solidAndWireframe);
119121
this.camera.layers.enableAll();
120122
this.document.application.views.push(this);
@@ -123,6 +125,7 @@ export class ThreeView extends Observable implements IView {
123125

124126
override disposeInternal(): void {
125127
super.disposeInternal();
128+
this._gizmo.dispose();
126129
this._resizeObserver.disconnect();
127130
}
128131

@@ -163,18 +166,21 @@ export class ThreeView extends Observable implements IView {
163166
return renderer;
164167
}
165168

166-
private initCssRenderer() {
169+
protected initCssRenderer() {
167170
let renderer = new CSS2DRenderer();
168171
return renderer;
169172
}
170173

174+
protected initGizmo(): IViewGizmo {
175+
return new ViewGizmo(this);
176+
}
177+
171178
setDom(element: HTMLElement) {
172179
if (this._dom) {
173180
this._resizeObserver.unobserve(this._dom);
174181
}
175182
this._dom = element;
176-
this._gizmo?.remove();
177-
element.appendChild(this._gizmo);
183+
this._gizmo.setDom(element);
178184

179185
this._renderer.domElement.remove();
180186
this._renderer.domElement.style.userSelect = "none";

packages/chili-three/src/viewGizmo.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { XYZ } from "chili-core";
55
import { Matrix4, Vector3 } from "three";
66
import { CameraController } from "./cameraController";
77
import { ThreeView } from "./threeView";
8+
import { IViewGizmo } from "chili-core/src/visual/viewGizmo";
89

910
const MOUSE_LEFT = 1;
1011

@@ -36,7 +37,7 @@ export interface Axis {
3637
label?: string;
3738
}
3839

39-
export class ViewGizmo extends HTMLElement {
40+
export class ViewGizmo extends HTMLElement implements IViewGizmo {
4041
private readonly _axes: Axis[];
4142
private readonly _center: Vector3;
4243
private readonly _canvas: HTMLCanvasElement;
@@ -55,6 +56,14 @@ export class ViewGizmo extends HTMLElement {
5556
this._context = this._canvas.getContext("2d")!;
5657
this._initStyle();
5758
}
59+
setDom(dom: HTMLElement): void {
60+
this.remove();
61+
dom.appendChild(this);
62+
}
63+
64+
dispose(): void {
65+
this.remove();
66+
}
5867

5968
private _initStyle() {
6069
this.style.zIndex = "999";

0 commit comments

Comments
 (0)