From afb86dca5c87629ed41c6a3ccd5eab5215b0b7ab Mon Sep 17 00:00:00 2001 From: AlexandruPopovici Date: Fri, 26 Aug 2022 10:56:24 +0300 Subject: [PATCH] Changed the zoom method to take speckle ids instead of guids, since everyother method in the API that takes ids, takes speckle ids --- packages/viewer-sandbox/src/Sandbox.ts | 2 +- packages/viewer-sandbox/src/main.ts | 3 +-- .../viewer/src/modules/SpeckleRenderer.ts | 26 ++++++++++++------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/viewer-sandbox/src/Sandbox.ts b/packages/viewer-sandbox/src/Sandbox.ts index 19e63c715..e21f337a4 100644 --- a/packages/viewer-sandbox/src/Sandbox.ts +++ b/packages/viewer-sandbox/src/Sandbox.ts @@ -181,7 +181,7 @@ export default class Sandbox { }) zoomExtents.on('click', () => { this.viewer.zoom( - this.selectionList.map((val) => val.guid) as string[], + this.selectionList.map((val) => val.userData.id) as string[], undefined, true ) diff --git a/packages/viewer-sandbox/src/main.ts b/packages/viewer-sandbox/src/main.ts index 8fd0e404b..d73316161 100644 --- a/packages/viewer-sandbox/src/main.ts +++ b/packages/viewer-sandbox/src/main.ts @@ -51,7 +51,7 @@ viewer.on(ViewerEvent.ObjectClicked, async (selectionInfo: SelectionEvent) => { } if (!selectionInfo.multiple) multiSelectList.length = 0 - let guids = multiSelectList.map((val) => val.guid) + const guids = multiSelectList.map((val) => val.guid) if ( (selectionInfo.multiple && !guids.includes(selectionInfo.guid)) || multiSelectList.length === 0 @@ -59,7 +59,6 @@ viewer.on(ViewerEvent.ObjectClicked, async (selectionInfo: SelectionEvent) => { multiSelectList.push(selectionInfo) } - guids = multiSelectList.map((val) => val.guid) const ids = multiSelectList.map((val) => val.userData.id) await viewer.selectObjects(ids as string[]) diff --git a/packages/viewer/src/modules/SpeckleRenderer.ts b/packages/viewer/src/modules/SpeckleRenderer.ts index 3dd849643..feba3b2f8 100644 --- a/packages/viewer/src/modules/SpeckleRenderer.ts +++ b/packages/viewer/src/modules/SpeckleRenderer.ts @@ -34,7 +34,7 @@ import SpeckleDepthMaterial from './materials/SpeckleDepthMaterial' import SpeckleStandardMaterial from './materials/SpeckleStandardMaterial' import { NodeRenderView } from './tree/NodeRenderView' import { Viewer } from './Viewer' -import { WorldTree } from './tree/WorldTree' +import { TreeNode, WorldTree } from './tree/WorldTree' import { CanonicalView, DefaultLightConfiguration, @@ -535,16 +535,24 @@ export default class SpeckleRenderer { return } const box = new Box3() - objectIds.forEach((value: string) => { - const rvs: NodeRenderView[] = - WorldTree.getRenderTree().getRenderViewsForNodeId(value) - for (let k = 0; k < rvs.length; k++) { - let rvBox = null - if ((rvBox = rvs[k].aabb) !== null) { - box.union(rvBox) + const rvs: NodeRenderView[] = [] + if (objectIds.length > 0) { + WorldTree.getInstance().walk((node: TreeNode) => { + if (!node.model.atomic) return true + if (!node.model.raw) return true + if (objectIds.indexOf(node.model.raw.id) !== -1) { + rvs.push(...WorldTree.getRenderTree().getRenderViewsForNode(node, node)) } + return true + }) + } + + for (let k = 0; k < rvs.length; k++) { + let rvBox = null + if ((rvBox = rvs[k].aabb) !== null) { + box.union(rvBox) } - }) + } if (box.getSize(new Vector3()).length() === 0) { console.error(`'zoom' to object ids resulted in empty box`) }