如何检查2个dbids是否在2D绘图中相交?
How to check whether 2 dbids intersect in 2D drawing?
我有一个二维绘图,如果所有 dbId 与当前 dbId 相交,我需要从它们中提取属性。
这样就够了:
function checkIntersect(dbId1, dbId2){
return intersect ? true : false
}
我该怎么做?
尝试使用以下方法找到两个节点的二维边界(边界框):
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()
我有一个二维绘图,如果所有 dbId 与当前 dbId 相交,我需要从它们中提取属性。
这样就够了:
function checkIntersect(dbId1, dbId2){
return intersect ? true : false
}
我该怎么做?
尝试使用以下方法找到两个节点的二维边界(边界框):
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()