如何获取ACC绘图界面Place Me功能显示的Bounding Box(Autodesk Viewer)
获取ACC绘图界面Place Me功能的Bounding Box
问题背景
在ACC绘图界面使用Place Me功能时,图纸会显示一个Bounding Box,我想了解如何获取该Bounding Box。已查阅过一段2D转3D空间转换的代码,但该代码需要同时加载2D和3D模型,希望找到直接读取该Bounding Box的方法。
相关参考代码:
function sheetToWorld(sheetPos, model2d, model3d) { let position = model3d.myData.bbox.max.clone(); position.x=sheetPos.x; position.y=sheetPos.y; const viewport = viewportExt.findViewportAtPoint(model2d, position) console.log(viewport); if (!viewport) { return null; } const sheetUnitScale = model2d.getUnitScale(); const globalOffset = model3d.getData().globalOffset; const matrix = viewport.get2DTo3DMatrix(sheetUnitScale); const worldPos = position.clone().applyMatrix4(matrix).sub(globalOffset); return worldPos; }
直接读取Bounding Box的方案
调用ACC Viewer原生API
ACC的Viewer SDK针对Place Me功能提供了原生接口支持。你可以通过监听工具激活事件,获取当前活跃的Place Me工具实例,直接读取其内置的Bounding Box数据:viewer.addEventListener(Autodesk.Viewing.TOOL_ACTIVATED, (event) => { if (event.toolName === 'PlaceMeTool') { const activeTool = viewer.toolController.getActiveTool(); if (activeTool?.boundingBox) { console.log('Place Me的Bounding Box:', activeTool.boundingBox); } } });这种方式无需同时加载2D和3D模型,直接从激活的放置工具中获取数据,是最稳定可靠的方案。
通过屏幕坐标转换(备选)
如果官方API无法满足需求,可尝试定位Place Me的可视化DOM元素,获取其屏幕坐标后,用Viewer的clientToWorld方法转换为模型空间的Bounding Box。但这种方式依赖页面DOM结构,可能随ACC版本更新失效,仅作为备选方案。
内容的提问来源于stack exchange,提问作者A Little Dinosaur
相关产品推荐
相关产品推荐

