如何获取选中的设备对象

问题描述 投票:0回答:1

我们使用 Forge Viewer 来显示 BIM 模型。但是如果我们单击树选择中列出的任何设备,在锻造查看器中设备不会缩放。 如何让选定的装备在锻造查看器中放大?

我们使用了以下代码:

Autodesk.Viewing.Initializer(options, function () {
     // Get the viewer div
     const viewerDiv = document.getElementById('forgeViewer');

     // Initialize the viewer object
     const viewer = new Autodesk.Viewing.GuiViewer3D(viewerDiv);
     viewer.start();

     // Ensure event listeners are added only once
     viewer.addEventListener(Autodesk.Viewing.TOOLBAR_CREATED_EVENT, onToolbarCreated);
     viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, Loadedevent);

     // Initialize the AggregatedView
     const view = new Autodesk.Viewing.AggregatedView();
     view.init(viewerDiv, options3d);

     // Use the same viewer instance
     const aggregatedViewer = view.viewer; 

     // Set custom profile settings
     const customProfileSettings = {
         settings: {
             reverseMouseZoomDir: true,
             reverseHorizontalLookDirection: true,
             selectionMode: 1 // enum value, 0 is default 'First Object' is 1
         }
     };

     const customProfile = new Autodesk.Viewing.Profile(customProfileSettings);
     viewer.setProfile(customProfile);
 
     // Optimize viewer settings
     viewer.setQualityLevel(false, false); // Disable ambient occlusion and antialiasing
     viewer.setGroundShadow(false); // Disable ground shadow
     viewer.setGroundReflection(false); // Disable ground reflection
     viewer.setProgressiveRendering(true); // Enable progressive rendering
 
     // Load all manifests
     const tasks = models.map(md => loadManifest(md.urn, aggregatedViewer)); 
     Promise.all(tasks)
         .then(docs => Promise.resolve(docs.map(doc => {
             const bubbles = doc.getRoot().search({ type: 'geometry', role: '3d' });
             const bubble = bubbles[0];
             if (!bubble) return null;
             return bubble;
         })))
         .then(bubbles => view.setNodes(bubbles));
 });
 
 // loadManifest function

 function loadManifest(documentId, viewer) {
     debugger;
     return new Promise((resolve, reject) => {
         const onDocumentLoadSuccess = (doc) => {
             doc.downloadAecModelData(() => resolve(doc));

             // New code for handling selection changes
             viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (event) => {
                if (!event.selections || event.selections.length <= 0 || event.selections.length > 1) return; 
                 const selSet = event.selections[0];
                 const dbIds = selSet.dbIdArray;
                 const model = selSet.model;
                 const dbId = dbIds[0];
 
                 model.getProperties(dbId, function (data) {
                     if (FromPage == '') {
                         if (FromSelection == '') {
                             if (Count === 0) {
                                 let instanceTree = model.getInstanceTree();
                                 let parentId = instanceTree.getNodeParentId(dbId);
                                 var objectid = parentId + 1;
                                 if (objectid === PreviousParentId) {
                                     Count = 1;
                                     selectionchangecount = 0;
                                 } else {
                                     viewer.select(parentId, model, Autodesk.Viewing.SelectionType.OVERLAYED);
                                     // or viewer.setAggregateSelection([ { ids: [parentId ], model, selectionType: Autodesk.Viewing.SelectionType.OVERLAYED } ])
                                     Count = 1;
                                     selectionchangecount = 0;
                                 }
                                 PreviousParentId = parentId;

                             } else {
                                 itemobject = dbId;
                                 selectionchangecount = selectionchangecount + 1;
                                 if (selectionchangecount == fileselectioncount) {
                                     Count = 0;
                                     selectionchangecount = 0;
                                 }
                             }
                         } else {
                             selectionchangecount = selectionchangecount + 1;
                             if (selectionchangecount == filecount) {
                                 FromSelection = '';
                                 selectionchangecount = 0;
                             }
                             itemobject = dbId;
                         }
                     } else {
                         FromPage = '';
                         itemobject = dbId;
                     }

                 });
             });
         };
 
         Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, reject);
     });
}

需要缩放设备的解决方案。

javascript autodesk-forge autodesk-viewer
1个回答
0
投票

默认情况下,在模型浏览器面板中选择一个元素将相机聚焦在该元素上。尝试转到 https://aps-simple-viewer-nodejs.autodesk.io/#dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6cGV0cmJyb3otc2FtcGxlcy9yYWNfYWR2YW5jZWRfc2FtcGxlX3Byb2plY3QucnZ0,并选择模型中的任何元素浏览器。您的应用程序中的某些其他设置可能会更改此默认行为。

或者,您可以通过向查看器添加自定义事件处理程序来实现相同的行为,如下所示:

viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, function () {
    viewer.fitToView(viewer.getSelection());
})
© www.soinside.com 2019 - 2024. All rights reserved.