不优化的边界框 - 在Autodesk Forge Viewer中重新计算边界框
创始人
2025-01-11 09:31:18
0

在Autodesk Forge Viewer中重新计算边界框可以使用以下代码示例:

function computeBoundingBox(viewer, model) {
  const modelInstanceTree = model.getData().instanceTree;
  const rootId = modelInstanceTree.getRootId();

  let boundingBox = new THREE.Box3();
  const fragIds = [];

  modelInstanceTree.enumNodeFragments(rootId, (fragId) => {
    fragIds.push(fragId);
  });

  fragIds.forEach((fragId) => {
    const fragBoundingBox = new THREE.Box3();
    modelInstanceTree.getWorldBounds(fragId, fragBoundingBox);
    boundingBox.union(fragBoundingBox);
  });

  const min = boundingBox.min;
  const max = boundingBox.max;

  const worldMin = new THREE.Vector3(min.x, min.y, min.z);
  const worldMax = new THREE.Vector3(max.x, max.y, max.z);

  const worldSize = worldMax.clone().sub(worldMin);

  const center = worldMin.clone().add(worldSize.clone().multiplyScalar(0.5));

  const size = Math.max(worldSize.x, worldSize.y, worldSize.z);

  const newBoundingBox = new THREE.Box3(
    new THREE.Vector3(center.x - size / 2, center.y - size / 2, center.z - size / 2),
    new THREE.Vector3(center.x + size / 2, center.y + size / 2, center.z + size / 2)
  );

  viewer.impl.invalidate(true, true, true);

  return newBoundingBox;
}

const viewer = new Autodesk.Viewing.Private.GuiViewer3D(document.getElementById('viewer'));
const options = {
  env: 'AutodeskProduction',
  getAccessToken: getForgeToken,
};
Autodesk.Viewing.Initializer(options, () => {
  viewer.start();
  viewer.loadModel('your-model-url', (model) => {
    const boundingBox = computeBoundingBox(viewer, model);
    console.log('New Bounding Box:', boundingBox);
  });
});

请确保在上述代码中将'your-model-url'替换为您要加载的模型的URL。

这段代码通过遍历模型的所有碎片(fragments)并获取其世界边界框(world bounds),然后合并所有碎片的边界框以计算出新的边界框。最后,它使用新的边界框更新了Viewer的显示,并返回计算出的新边界框对象。

请注意,此代码示例假设您已经通过合适的方式(例如使用Forge OAuth认证)获取了访问令牌(access token)。如果您还没有设置获取访问令牌的函数getForgeToken,则需要相应地实现它。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...