【问题标题】:How to check whether 2 dbids intersect in 2D drawing?如何检查 2 dbid 是否在 2D 绘图中相交?
【发布时间】:2020-03-13 22:39:30
【问题描述】:

我有一个 2D 绘图,如果它们与当前 dbId 相交,我需要从所有 dbId 中提取属性。

这样就够了:

function checkIntersect(dbId1, dbId2){
  return intersect ? true : false
}

我该怎么做?

【问题讨论】:

    标签: javascript autodesk-forge autodesk-viewer


    【解决方案1】:

    尝试使用以下方法找到两个节点的二维边界(边界框):

    function get2DBoundsSample( dbId, model, useInstancing ) {
    
        //const it = model.getData().instanceTree;
    
        const fragList = model.getFragmentList();
    
    
    
        let bounds = new THREE.Box3();
    
        let bc = new Autodesk.Viewing.Private.BoundsCallback( bounds );
    
        const dbId2fragId = model.getData().fragments.dbId2fragId;
    
        const fragIds = dbId2fragId[dbId];
    
    
    
        if( Array.isArray( fragIds ) ) {
    
            for( let i = 0; i < fragIds.length; i++ ) {
    
                find2DBoundsSample( fragList, fragIds[i], dbId, useInstancing, bc );
    
            }
    
        } else if( typeof fragIds === 'number' ) {
    
            find2DBoundsSample( fragList, fragIds, dbId, useInstancing, bc );
    
        }
    
        function find2DBoundsSample( fragList, fragId, dbId, useInstancing, bc ) {
    
        const mesh = fragList.getVizmesh( fragId );
    
        if(mesh.geometry){
    
            const vbr = new Autodesk.Viewing.Private.VertexBufferReader( mesh.geometry, useInstancing );
    
            vbr.enumGeomsForObject( dbId, bc );
    
        }
    
        else{
    
            console.log('Mesh Geometry undefined. DBID: ',dbId, fragId, useInstancing);
    
          }
    
        }
    
        return bc.bounds;
    
    }
    
    

    然后测试两个框是否与Box3.isIntersectionBox()相交

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多