@@ -8,10 +8,17 @@ import {
88 PrioritizedArea ,
99 type NodeTransformProvider
1010} from '@reveal/cad-styling' ;
11+ import throttle from 'lodash/throttle' ;
1112import { SectorScene , CadModelMetadata , RootSectorNode , WantedSector , ConsumedSector } from '@reveal/cad-parsers' ;
1213import { SectorRepository } from '@reveal/sector-loader' ;
1314import { ParsedGeometry } from '@reveal/sector-parser' ;
14- import { CadMaterialManager , RenderMode , setModelRenderLayers , StyledTreeIndexSets } from '@reveal/rendering' ;
15+ import {
16+ CadMaterialManager ,
17+ setModelRenderLayers ,
18+ StyledTreeIndexSets ,
19+ createCadMaterial ,
20+ type CadMaterial
21+ } from '@reveal/rendering' ;
1522
1623import { Group , Object3D , Plane , Matrix4 , Object3DEventMap } from 'three' ;
1724
@@ -37,9 +44,10 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
3744
3845 private readonly _sourceTransform : Matrix4 ;
3946 private readonly _customTransform : Matrix4 ;
40- private readonly _setModelRenderLayers = ( ) => this . setModelRenderLayers ( ) ;
4147 private readonly _batchedGeometryMeshGroup : Group ;
4248 private readonly _styledTreeIndexSets : StyledTreeIndexSets ;
49+ //cleaup type
50+ private readonly _cadMaterial : CadMaterial ;
4351
4452 private _isDisposed : boolean = false ;
4553
@@ -59,22 +67,37 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
5967 this . _sectorRepository = sectorRepository ;
6068 this . _modelIdentifier = model . modelIdentifier ;
6169 this . treeIndexToSectorsMap = new TreeIndexToSectorsMap ( model . scene . maxTreeIndex ) ;
62- const back = this . _materialManager . getModelBackTreeIndices ( model . modelIdentifier . revealInternalId ) ;
63- const ghost = this . _materialManager . getModelGhostedTreeIndices ( model . modelIdentifier . revealInternalId ) ;
64- const inFront = this . _materialManager . getModelInFrontTreeIndices ( model . modelIdentifier . revealInternalId ) ;
65- const visible = this . _materialManager . getModelVisibleTreeIndices ( model . modelIdentifier . revealInternalId ) ;
70+ this . _cadMaterial = createCadMaterial ( model . scene . maxTreeIndex ) ;
6671
6772 this . _styledTreeIndexSets = {
68- back,
69- ghost,
70- inFront,
71- visible
73+ back : this . _cadMaterial . nodeAppearanceTextureBuilder . regularNodeTreeIndices ,
74+ ghost : this . _cadMaterial . nodeAppearanceTextureBuilder . ghostedNodeTreeIndices ,
75+ inFront : this . _cadMaterial . nodeAppearanceTextureBuilder . infrontNodeTreeIndices ,
76+ visible : this . _cadMaterial . nodeAppearanceTextureBuilder . visibleNodeTreeIndices
7277 } ;
7378
79+ const materialUpdateThrottleDelay = 75 ;
80+ const updateMaterialsCallback : ( ) => void = throttle (
81+ ( ) => {
82+ if ( this . _cadMaterial . nodeAppearanceTextureBuilder . needsUpdate ) {
83+ this . _cadMaterial . nodeAppearanceTextureBuilder . build ( ) ;
84+ }
85+ this . _needsRedraw = true ;
86+ this . setModelRenderLayers ( ) ;
87+ } ,
88+ materialUpdateThrottleDelay ,
89+ {
90+ leading : true ,
91+ trailing : true
92+ }
93+ ) ;
94+
95+ this . _cadMaterial . nodeAppearanceProvider . on ( 'changed' , updateMaterialsCallback ) ;
96+
7497 this . _batchedGeometryMeshGroup = new Group ( ) ;
7598 this . _batchedGeometryMeshGroup . name = 'Batched Geometry' ;
7699
77- const materials = materialManager . getModelMaterials ( model . modelIdentifier . revealInternalId ) ;
100+ const materials = this . _cadMaterial . materials ;
78101 this . _geometryBatchingManager = new MultiBufferBatchingManager (
79102 this . _batchedGeometryMeshGroup ,
80103 materials ,
@@ -105,8 +128,6 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
105128
106129 this . _sourceTransform = new Matrix4 ( ) . copy ( model . modelMatrix ) ;
107130 this . _customTransform = new Matrix4 ( ) ;
108-
109- this . materialManager . on ( 'materialsChanged' , this . _setModelRenderLayers ) ;
110131 }
111132
112133 get needsRedraw ( ) : boolean {
@@ -117,26 +138,30 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
117138 this . _needsRedraw = false ;
118139 }
119140
141+ // TODO: cleanup type
142+ get cadMaterial ( ) : CadMaterial {
143+ return this . _cadMaterial ;
144+ }
145+
120146 get nodeTransformProvider ( ) : NodeTransformProvider {
121- return this . _materialManager . getModelNodeTransformProvider ( this . _cadModelMetadata . modelIdentifier . revealInternalId ) ;
147+ return this . _cadMaterial . nodeTransformProvider ;
122148 }
123149
124150 get nodeAppearanceProvider ( ) : NodeAppearanceProvider {
125- return this . _materialManager . getModelNodeAppearanceProvider (
126- this . _cadModelMetadata . modelIdentifier . revealInternalId
127- ) ;
151+ return this . _cadMaterial . nodeAppearanceProvider ;
128152 }
129153
130154 get defaultNodeAppearance ( ) : NodeAppearance {
131- return this . _materialManager . getModelDefaultNodeAppearance ( this . _cadModelMetadata . modelIdentifier . revealInternalId ) ;
155+ return this . _cadMaterial . nodeAppearanceTextureBuilder . getDefaultAppearance ( ) ;
132156 }
133157
134158 set defaultNodeAppearance ( appearance : NodeAppearance ) {
135- this . _materialManager . setModelDefaultNodeAppearance (
136- this . _cadModelMetadata . modelIdentifier . revealInternalId ,
137- appearance
138- ) ;
159+ this . _cadMaterial . nodeAppearanceTextureBuilder . setDefaultAppearance ( appearance ) ;
160+ if ( this . _cadMaterial . nodeAppearanceTextureBuilder . needsUpdate ) {
161+ this . _cadMaterial . nodeAppearanceTextureBuilder . build ( ) ;
162+ }
139163 this . setModelRenderLayers ( ) ;
164+ this . _needsRedraw = true ;
140165 }
141166
142167 get clippingPlanes ( ) : Plane [ ] {
@@ -163,18 +188,6 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
163188 return this . _rootSector ;
164189 }
165190
166- get materialManager ( ) : CadMaterialManager {
167- return this . _materialManager ;
168- }
169-
170- set renderMode ( mode : RenderMode ) {
171- this . _materialManager . setRenderMode ( mode ) ;
172- }
173-
174- get renderMode ( ) : RenderMode {
175- return this . _materialManager . getRenderMode ( ) ;
176- }
177-
178191 get isDisposed ( ) : boolean {
179192 return this . _isDisposed ;
180193 }
@@ -246,7 +259,6 @@ export class CadNode extends Object3D<Object3DEventMap & { update: undefined }>
246259
247260 public dispose ( ) : void {
248261 this . nodeAppearanceProvider . dispose ( ) ;
249- this . materialManager . off ( 'materialsChanged' , this . _setModelRenderLayers ) ;
250262 this . _materialManager . removeModelMaterials ( this . _cadModelMetadata . modelIdentifier . revealInternalId ) ;
251263 this . _geometryBatchingManager ?. dispose ( ) ;
252264
0 commit comments