【问题标题】:How to get the selected equipment object id如何获取选中的设备对象id
【发布时间】:2022-10-25 14:53:47
【问题描述】:

我们使用 forge Aggregate Viewer 来显示多个 BIM 模型。但是,如果我们单击/双击聚合锻造查看器中的任何设备,设备将被缩放。 但无法使用 c# 代码获取选定的设备对象 ID。 注意:如果我们上传单个文件,我们可以在 Forge Viewer 中获取选择的设备对象 ID。

我们使用了下面的代码,但是当我们选择设备时它不会被击中。 viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, (args) => {

请帮助我们在显示多个文件时在 Aggregate Forge 视图中获取选定的设备对象 ID。 请分享示例代码供我们参考。

FITTOVIEW 和选择更改代码

const Loadedevent = () => {
        var objval = document.getElementById('<%=hid_objectid.ClientID%>').value;
        if (objval != '') {
                   var mdlurn = "";
                    mdlurn = document.getElementById('<%=hid_mdlurn.ClientID%>').value;
            const models = viewer.getVisibleModels().find(m => m.getData().urn === mdlurn);
                viewer.fitToView([parseInt(objval)], models);
                viewer.select([parseInt(objval)], models, Autodesk.Viewing.SelectionType.OVERLAYED);
        }
    }

选择更改事件

viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {                       
       if (args.dbIdArray.length === 1) {
                             viewer.getProperties(args.dbIdArray[0], function (data) {
                                 if (FromPage == '') {
                                     if (FromSelection == '') {
                                         if (Count === 0) {                                            
                                             var instanceTree = viewer.model.getData().instanceTree;
                                             var parentId = instanceTree.getNodeParentId(args.dbIdArray[0]);                                             
                                             viewer.select([parentId], viewer.model, Autodesk.Viewing.SelectionType.OVERLAYED);
                                             Count = 1;
                                         } else {                                             
                                             itemobject = args.dbIdArray[0];
                                             Count = 0;
                                         }
                                     } else {                                         
                                         FromSelection = '';
                                         itemobject = args.dbIdArray[0];
                                     }
                                 } else {
                                     FromPage = '';                                     
                                    itemobject = args.dbIdArray[0];
                                 }
                             });
                         }
                     });

编辑代码:

viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) => {  
                      if (!args.selections || args.selections.length <= 0)                          
                          return;

                      if (args.selections.length == 1 ) {                     
                          viewer.getProperties(args.selections[0].dbIdArray[0], function (data) {
                                 if (FromPage == '') {
                                     if (FromSelection == '') {
                                         if (Count === 0) {
                                             
                                             var instanceTree = viewer.model.getData().instanceTree;                                            
                                             var parentId = instanceTree.getNodeParentId(args.selections[0].dbIdArray);                                            
                                             viewer.select([parentId], viewer.model, Autodesk.Viewing.SelectionType.OVERLAYED);
                                             Count = 1;
                                         } else {                                            
                                             const dbIds = args.selections[0].dbIdArray;                                             
                                             itemobject = dbIds[0];                                             
                                             Count = 0;                                             
                                         }
                                     } else {
                                        
                                         FromSelection = '';                                  
                                         const dbIds = args.selections[0].dbIdArray;
                                             itemobject = dbIds[0];
                                      
                                     }
                                 } else {
                                     FromPage = '';
                                     const dbIds = args.selections[0].dbIdArray;
                                             itemobject = dbIds[0];   
                                 }
                             });
                         }
                     });

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    在多模型场景中,您必须改用Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT。见https://forge.autodesk.com/blog/multi-model-refresher

    /**
     * Triggered when objects are selected or deselected.
     * Event payload:
     * {
     *   type: 'aggregateSelection',
     *   target: Viewer3D,
     *   selections: Array<{
     *     model: Model,
     *     nodeArray: Array<number>,
     *     dbIdArray: Array<number>,
     *     fragIdsArray: Array<number>
     *   }>
     * }
     */
    viewer.addEventListener(
       Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT,
       (event) => {
            // codes for selecting changed
       });
    
    

    要获取选定对象,请改为调用 viewer.getAggregateSelection()

    【讨论】:

    • 感谢您的帮助,我尝试了上面的代码viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (args) =&gt; { 它导致viewer.fitToView 出现问题,错误为无法读取未定义的属性(读取“长度”)请参考我编辑的帖子中的代码。
    • 嗨,请检查我上面的事件有效负载。您所指的字段在 selections 数组中...请参阅github.com/Autodesk-Forge/forge-bim360-assets.viewer/blob/…
    猜你喜欢
    • 2011-01-22
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2018-02-11
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多