Autodesk Forge 中自定义模型的动态位置

Posted

技术标签:

【中文标题】Autodesk Forge 中自定义模型的动态位置【英文标题】:Dynamic position of custom model in Autodesk Forge 【发布时间】:2021-10-07 14:43:55 【问题描述】:

我想构建一个连接到 BIM 360 的查看器锻造。THREE.js 中的一个新对象形式的附加功能可以跟踪 GPS 位置(模型的动态定位)。所以我将它映射到 FORGE 查看器中。据我所知,有 3 种方法可以在 FORGE 上显示自定义模型:

    viewer.impl.scene.add(model) viewer.overlays.addMesh(model) modelBuilder.addMesh(model)

在这种情况下我应该使用哪一个?

我还有一个问题,如何使用 sceneBuilder 对网格进行分组,因为在我尝试之后它不起作用,但是当我使用覆盖时它起作用了。

  this.viewer.loadExtension("Autodesk.Viewing.SceneBuilder").then(() => 
  this.sceneBuilder = this.viewer.getExtension(
    "Autodesk.Viewing.SceneBuilder"
  );
  this.sceneBuilder.addNewModel().then((modelBuilder) => 
    this.modelBuilder = modelBuilder;
    window.modelBuilder = modelBuilder;

    const geometry = new THREE.BufferGeometry().fromGeometry(
      new THREE.SphereGeometry(5, 8, 8)
    );
    const material = new THREE.MeshBasicMaterial( color: 0xff0000 );

    const head = new THREE.Mesh(geometry, material);
    mesh.matrix = new THREE.Matrix4().compose(
      new THREE.Vector3(0, 0, 5),
      new THREE.Quaternion(0, 0, 0, 1),
      new THREE.Vector3(1, 1, 2)
    );
    const body = new THREE.Mesh(geometry, material);
    body.matrix = new THREE.Matrix4().compose(
      new THREE.Vector3(0, 0, 0),
      new THREE.Quaternion(0, 0, 0, 1),
      new THREE.Vector3(1, 1, 2)
    );

    const human = new THREE.Group();
    human.add(head);
    human.add(body);

    human.dbId = 100; // Set the database id for the mesh
    modelBuilder.addMesh(human);
  );
);

【问题讨论】:

【参考方案1】:

通常,当您希望自定义 three.js 对象表现得像其他 Forge 模型,即使其可悬停、可选择等时,建议使用选项 3(使用 SceneBuilder)。选项 2(使用viewer.overlays)可用于所有其他情况。我猜在你的情况下你不需要人类模型是可选择的或有一个 dbID,所以使用viewer.overlays.addMesh 是非常好的。

另外,我认为ModelBuilder.addMesh 方法只支持“叶”对象,而不是组,所以如果您确实需要使用组,viewer.overlays 是可行的方法。

【讨论】:

感谢您的回答,是否可以加载例如。来自客户端的human.fbx? 这取决于three.js(Forge Viewer使用的版本71)是否可以加载这种文件格式。它可能:threejs.org/examples/webgl_loader_fbx.html 是否有任何文档可以让我在本地上传 3D 模型?因此,与其创建新的自定义模型,不如从文件中加载人体模型并与之交互。但我还是会加载衍生模型的设计BIM作为主要基准 有像sandbox.babylonjs.com 或gltf-viewer.donmccurdy.com 这样的应用程序允许您将文件拖放到网页中并在其中加载任何3D 网格。您也可以尝试类似的方法。 这是glTF查看器的源代码:github.com/donmccurdy/three-gltf-viewer.

以上是关于Autodesk Forge 中自定义模型的动态位置的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk Forge 大型模型查看器 - 抑制的 Inventor 组件

在 Autodesk Forge Viewer 中对齐坐标系

如何在 Autodesk Forge 中将点云模型添加到查看器

Autodesk Forge 模型衍生 API:在 Autodesk Forge 衍生子项中找不到“图形”角色

将模型从 Autodesk Viewer 加载到 Forge Viewer

Autodesk Forge 混乱的视图