如何使用Typescript将网格添加到Forge Viewer v6中?

时间:2019-06-10 07:05:48

标签: typescript three.js autodesk-forge autodesk-viewer autodesk

我需要知道如何使用Type脚本向Forge Viewer v6添加网格。

我遍历了所有主题和文章,并且可以在v4中使用。

现在,当我尝试以下代码时:

    private wallGeometry: THREE.BoxBufferGeometry;

    drawWalls() {

    this.wallGeometry = new THREE.BoxBufferGeometry(4000, 4000, 100, 1, 1, 1);

    console.log('creating wall geometry');

    this.wallGeometry = new THREE.BoxBufferGeometry(4000, 4000, 100, 1, 1, 1);

    console.log('creating wall material');

    let wallMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000 });

    console.log('register wall material');

    this.viewer.impl.matman().addMaterial(
        'dasher-material-vertex',
        wallMaterial,
        true);

    console.log('create Overlay Scene');

    this.viewer.impl.createOverlayScene(this._overlayScene, wallMaterial);

    console.log('wall mesh');

    this.wall = new THREE.Mesh(this.wallGeometry, wallMaterial);
    this.wall.position.set(0, -1000, -2000);

    console.log('add overlay to scene');

    this.addToScene(this.wall);
}

private addToScene(obj: THREE.Object3D) {
    this.viewer.impl.addOverlay(this._overlayScene, obj);
    this.viewer.impl.invalidate(false, false, true);
}

我收到以下错误消息:

  

THREE.Object3D.add:对象不是THREE.Object3D的实例。
  yr {uuid:“ 6A27DA63-8F99-4E50-9A99-90BED6CE5B85”,名称:“”,类型:“ Mesh”,父项:null,子项:Array(0),…}
  castShadow:假
  孩子:[]
  drawMode:0
  frustumCulled:true
  几何:II {uuid:“ 8C6C2DD2-B233-4E98-998C-2307A84D1E4B”,名称:“”,类型:“ BoxBufferGeometry”,索引:pi,属性:{…},…}
  层:Pn {mask:1}
  材质:hc {uuid:“ 9A6A3601-49F6-4D6E-98E1-21C35BF63D80”,名称:“”,类型:“ MeshPhongMaterial”,雾:真,灯光:真,…}
  矩阵:dn {元素:Array(16)}
  matrixAutoUpdate:true
  matrixWorld:dn {elements:Array(16)}
  matrixWorldNeedsUpdate:假
  名称:“”
  父级:null
  位置:位于{x:0,y:-1000,z:-2000}
  四元数:Et {_x:0,_y:0,_z:0,_w:1,onChangeCallback:ƒ}
  receiveShadow:假
  renderOrder:0
  旋转:Cn {_x:0,_y:0,_z:0,_order:“ XYZ”,onChangeCallback:ƒ}
  比例尺:在{x:1,y:1,z:1}
  类型:“网格”
  上:在{x:0,y:1,z:0}
  userData:{}
  uuid:“ 6A27DA63-8F99-4E50-9A99-90BED6CE5B85”
  可见:true
  eulerOrder:(...)
  id:3
  modelViewMatrix:dn {元素:Array(16)}
  normalMatrix:Lt {elements:Array(9)}
  useQuaternion:(...)
  原始:$ n

任何想法?

编辑: 这是我的DevTools的快照: enter image description here

3 个答案:

答案 0 :(得分:0)

根据three.js v71 source,当插入的对象缺少名为isObject3D的属性时,将引发此错误。我不确定是否缺少此属性是由Forge Viewer引起的。尝试在调用addToScene之前放置一个断点,并确保其中有isObject3D属性。

此外,由于您在运行时期间遇到此错误,因此它也不应该与TypeScript相关。

答案 1 :(得分:0)

我从控制台检查了Three.js版本,显示为71 !!!

enter image description here

答案 2 :(得分:0)

在以下情况下,我还检查了我的node_modules文件夹: npm我@ types /三个@ types / forge-viewer

首先,我收到此警告:

  

这是存根类型定义。三个提供了自己的类型定义,因此您不需要安装此类型。

我注意到我在下图所示的3个不同位置有三个文件夹:

  1. 在@types文件夹中:

enter image description here

  1. 在node_modules文件夹中:

enter image description here

每个package.json中都有不同的Three.js版本,但都不是71 !!