@threepipe/plugin-3d-tiles-renderer 0.2.1 → 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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@threepipe/plugin-3d-tiles-renderer",
3
3
  "description": "Interface for 3d-tiles-renderer",
4
- "version": "0.2.1",
4
+ "version": "0.3.0",
5
5
  "dependencies": {},
6
6
  "overrides": {
7
7
  "threepipe": "$threepipe",
@@ -2,27 +2,35 @@ import {
2
2
  AViewerPluginEventMap,
3
3
  AViewerPluginSync,
4
4
  Box3B,
5
+ DropzonePlugin,
5
6
  EventListener2,
6
7
  generateUUID,
7
8
  IAssetImporter,
8
9
  ILoader,
10
+ ImportAddOptions,
9
11
  Importer,
10
12
  IObject3D,
11
13
  iObjectCommons,
12
14
  IRenderManager,
13
15
  IRenderManagerEventMap,
14
- IScene,
15
- ISceneEventMap,
16
16
  Loader,
17
- ImportAddOptions,
18
17
  LoadingManager,
19
- ThreeViewer, Sphere, uiButton,
20
- uiFolderContainer, DropzonePlugin,
18
+ Object3D,
19
+ Sphere,
20
+ ThreeViewer,
21
+ uiButton,
22
+ uiFolderContainer,
23
+ IObjectExtension,
21
24
  } from 'threepipe'
22
25
  import {TilesGroup, TilesRenderer} from '3d-tiles-renderer'
23
26
  import {gltfCesiumRTCExtension, gltfMeshFeaturesExtension, gltfStructuralMetadataExtension} from './gltf'
27
+ import {
28
+ CesiumIonAuthPlugin,
29
+ ImplicitTilingPlugin,
30
+ TilesFadePlugin,
31
+ UpdateOnChangePlugin,
24
32
  // @ts-expect-error moduleResolution issue
25
- import {ImplicitTilingPlugin, TilesFadePlugin, UpdateOnChangePlugin, CesiumIonAuthPlugin} from '3d-tiles-renderer/plugins'
33
+ } from '3d-tiles-renderer/plugins'
26
34
 
27
35
  export type TilesRendererGroup = TilesGroup & IObject3D
28
36
 
@@ -93,7 +101,8 @@ export class TilesRendererPlugin extends AViewerPluginSync<TilesRendererPluginEv
93
101
  viewer.assetManager.registerGltfExtension(gltfStructuralMetadataExtension)
94
102
  viewer.assetManager.registerGltfExtension(gltfMeshFeaturesExtension)
95
103
  viewer.assetManager.importer.addImporter(this._importer)
96
- viewer.scene.addEventListener('addSceneObject', this._addSceneObject)
104
+ viewer.object3dManager.registerObjectExtension(this._objectExt)
105
+ // viewer.scene.addEventListener('addSceneObject', this._addSceneObject)
97
106
  // viewer.scene.addEventListener('mainCameraChange', this._mainCameraChange)
98
107
  // viewer.scene.addEventListener('mainCameraUpdate', this._mainCameraUpdate)
99
108
  viewer.renderManager.addEventListener('preRender', this._preRender) // note - adding to renderManager preRender, not viewer. So its fired for each camera render
@@ -105,7 +114,8 @@ export class TilesRendererPlugin extends AViewerPluginSync<TilesRendererPluginEv
105
114
  viewer.assetManager.unregisterGltfExtension(gltfCesiumRTCExtension.name)
106
115
  viewer.assetManager.unregisterGltfExtension(gltfStructuralMetadataExtension.name)
107
116
  viewer.assetManager.unregisterGltfExtension(gltfMeshFeaturesExtension.name)
108
- viewer.scene.removeEventListener('addSceneObject', this._addSceneObject)
117
+ viewer.object3dManager.unregisterObjectExtension(this._objectExt)
118
+ // viewer.scene.removeEventListener('addSceneObject', this._addSceneObject)
109
119
  // viewer.scene.removeEventListener('mainCameraChange', this._mainCameraChange)
110
120
  // viewer.scene.removeEventListener('mainCameraUpdate', this._mainCameraUpdate)
111
121
  viewer.renderManager.removeEventListener('preRender', this._preRender)
@@ -159,46 +169,47 @@ export class TilesRendererPlugin extends AViewerPluginSync<TilesRendererPluginEv
159
169
 
160
170
  private _cachedRefs?: Pick<TilesRenderer, 'lruCache' | 'downloadQueue' | 'parseQueue'/* | 'processNodeQueue'*/>
161
171
 
162
- private _addSceneObject: EventListener2<'addSceneObject', ISceneEventMap, IScene> = (e)=>{
163
- const object = e.object
164
- const group = object as TilesRendererGroup
165
- // console.log(e)
166
- if (!group || !group.tilesRenderer || !this._viewer) return
167
-
168
- // set the second renderer to share the cache and queues from the first
169
- if (!this._cachedRefs) {
170
- this._cachedRefs = {
171
- lruCache: group.tilesRenderer.lruCache,
172
- downloadQueue: group.tilesRenderer.downloadQueue,
173
- parseQueue: group.tilesRenderer.parseQueue,
172
+ private _objectExt: IObjectExtension = {
173
+ uuid: 'TilesRendererPluginObjectExt',
174
+ isCompatible: (o)=>!!(o as TilesRendererGroup).tilesRenderer,
175
+ onRegister: (group: TilesRendererGroup)=>{
176
+ if (!group || !group.tilesRenderer || !this._viewer) return
177
+
178
+ // set the second renderer to share the cache and queues from the first
179
+ if (!this._cachedRefs) {
180
+ this._cachedRefs = {
181
+ lruCache: group.tilesRenderer.lruCache,
182
+ downloadQueue: group.tilesRenderer.downloadQueue,
183
+ parseQueue: group.tilesRenderer.parseQueue,
184
+ // @ts-expect-error not in ts
185
+ processNodeQueue: group.tilesRenderer.processNodeQueue,
186
+ }
187
+ } else {
188
+ group.tilesRenderer.lruCache = this._cachedRefs.lruCache
189
+ group.tilesRenderer.downloadQueue = this._cachedRefs.downloadQueue
190
+ group.tilesRenderer.parseQueue = this._cachedRefs.parseQueue
174
191
  // @ts-expect-error not in ts
175
- processNodeQueue: group.tilesRenderer.processNodeQueue,
192
+ group.tilesRenderer.processNodeQueue = this._cachedRefs.processNodeQueue
176
193
  }
177
- } else {
178
- group.tilesRenderer.lruCache = this._cachedRefs.lruCache
179
- group.tilesRenderer.downloadQueue = this._cachedRefs.downloadQueue
180
- group.tilesRenderer.parseQueue = this._cachedRefs.parseQueue
181
- // @ts-expect-error not in ts
182
- group.tilesRenderer.processNodeQueue = this._cachedRefs.processNodeQueue
183
- }
184
194
 
185
- this.objects.push(group)
195
+ this.objects.push(group)
186
196
 
187
- group.tilesRenderer.registerPlugin({
188
- dispose: () => {
189
- const index = this.objects.indexOf(group)
190
- if (index !== -1) this.objects.splice(index, 1)
191
- this.dispatchEvent({type: 'removeTile', group})
192
- },
193
- })
194
- group.tilesRenderer.setCamera(this._viewer.scene.mainCamera)
195
- group.tilesRenderer.setResolutionFromRenderer(this._viewer.scene.mainCamera, this._viewer.renderManager.webglRenderer)
196
- group.tilesRenderer.update()
197
- group.addEventListener('dispose', ()=>{
198
- group.tilesRenderer.dispose()
199
- })
197
+ group.tilesRenderer.registerPlugin({
198
+ dispose: () => {
199
+ const index = this.objects.indexOf(group)
200
+ if (index !== -1) this.objects.splice(index, 1)
201
+ this.dispatchEvent({type: 'removeTile', group})
202
+ },
203
+ })
204
+ group.tilesRenderer.setCamera(this._viewer.scene.mainCamera)
205
+ group.tilesRenderer.setResolutionFromRenderer(this._viewer.scene.mainCamera, this._viewer.renderManager.webglRenderer)
206
+ group.tilesRenderer.update()
207
+ group.addEventListener('dispose', ()=>{
208
+ group.tilesRenderer.dispose()
209
+ })
200
210
 
201
- this.dispatchEvent({type: 'addTile', group})
211
+ this.dispatchEvent({type: 'addTile', group})
212
+ },
202
213
  }
203
214
 
204
215
  @uiButton()
@@ -288,7 +299,20 @@ export class TilesRendererLoader extends Loader implements ILoader<TilesRenderer
288
299
  })
289
300
  tiles.addEventListener('load-tile-set', (e) => {
290
301
  const isRoot = e.tileSet === tiles.rootTileSet
291
- if (isRoot && resolve) resolve()
302
+ if (isRoot && resolve) {
303
+ resolve()
304
+ }
305
+ })
306
+
307
+ group.userData.rootPathRefresh = true // when next loaded from gltf, the object will be refreshed based on rootPath
308
+ group._rootPathRefreshed = true // so that it doesn't do it this time
309
+ group._sChildren = [] // so that it's children are not saved in the gltf exporter.
310
+ tiles.registerPlugin({
311
+ processTileModel: (model: Object3D, tile: any) => {
312
+ if (tile === (tiles.rootTileSet as any)?.root) {
313
+ group._sChildren = [model] // the root tileset will be saved inside the gltf on export
314
+ }
315
+ },
292
316
  })
293
317
 
294
318
  const ai = this.ai