@@ -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
5859export 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" ;
0 commit comments