Autodesk forge 为什么ModelBuilder addGeometry函数抛出错误

Autodesk forge 为什么ModelBuilder addGeometry函数抛出错误,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我想在forge viewer中将自定义几何图形添加到我的模型中。为此,我使用模型生成器扩展,但modelBuilder.addGeometry函数抛出以下错误: 第三方/three.js/three.js:33 未处理的承诺拒绝:无法读取未定义的属性“位置” const sceneBuilder:any=等待此.viewer.loadExtension('Autodesk.Viewing.sceneBuilder'); const modelBuilder:any=wait sceneBuil

我想在forge viewer中将自定义几何图形添加到我的模型中。为此,我使用模型生成器扩展,但modelBuilder.addGeometry函数抛出以下错误:

第三方/three.js/three.js:33 未处理的承诺拒绝:无法读取未定义的属性“位置”

const sceneBuilder:any=等待此.viewer.loadExtension('Autodesk.Viewing.sceneBuilder');
const modelBuilder:any=wait sceneBuilder.addNewModel({
modelNameOverride:“我的自定义模型”,
音乐博物馆:错
});
const geometry:THREE.geometry=新的THREE.geometry();
设vertexIndex=0;
//房间是一个自定义对象,来自我们的数据库,包含二维几何信息
for(设i=1;i
是什么导致了这个错误?当我使用这样的三缸发动机时,它会工作:

const sceneBuilder:any=等待此.viewer.loadExtension('Autodesk.Viewing.sceneBuilder');
const modelBuilder:any=wait sceneBuilder.addNewModel({
modelNameOverride:“我的自定义模型”,
音乐博物馆:错
});
const-cylinderGeometry=new THREE.BufferGeometry().fromGeometry(new THREE.cylinderGeometry(5,5,10));
constCylinderMaterial=new THREE.MeshPhongMaterial({color:new THREE.color(0,0,1)});
const cylinderTransform=新的三个.Matrix4().compose(
新的三个矢量3(+10,10,0),
新的三个四元数(0,0,0,1),
新三,向量3(1,1,1)
);
modelBuilder.addMaterial('MyCustomMaterial',cylinderMaterial);
const cylinderGeomId=modelBuilder.addGeometry(cylinderGeometry);
const cylinderFragId=modelBuilder.addFragment(cylinderGeomId,'MyCustomMaterial',cylinderTransform);
我也尝试过使用BufferGeometry,但那没有帮助

编辑: 我还尝试使用“ConvexGeometry”类:

let vertices :THREE.Vector3[] = [];
for (let i = 0; i < room.Outline.Vertices.length; i++) {
  const bimV1 = room.Outline.Vertices[i];
  vertices.push(new THREE.Vector3(bimV1.X, bimV1.Y, bimV1.Zbase));
  vertices.push(new THREE.Vector3(bimV1.X, bimV1.Y, bimV1.Zbase + 5));
}

const geometry = new ConvexGeometry(vertices);

const material = new THREE.MeshPhongMaterial({ color: new THREE.Color(0, 0, 1), opacity: 0.5 });
const transform = new THREE.Matrix4().identity();
modelBuilder.addMaterial('MyCustomMaterial', material);
const geometryId = modelBuilder.addGeometry(geometry);
modelBuilder.addFragment(geometryId, 'MyCustomMaterial', transform);
let顶点:3.Vector3[]=[];
for(设i=0;i

调用'modelBuilder.addGeometry(geometry)'时会引发相同的错误。代码段中似乎有错误。将
THREE.Geometry
对象转换为
THREE.BufferGeometry
对象(Forge Viewer需要)时,将错误变量传递到
modelBuilder.addGeometry
方法

试着替换

const geometryId=modelBuilder.addGeometry(几何体);

const geometryId=modelBuilder.addGeometry(bufferGeometry);

您提到的代码(无论是自定义几何图形还是圆柱体的代码)在我看来都不错,这让我认为问题可能出在此处未包含的一个部分,那就是自定义几何图形的生成。你能把这一部分加到你的问题上吗?嗨,彼得,谢谢你的回答。我添加了代码,其中添加了顶点和面。我不知道哪一个具有位置属性的对象可能是未定义的…为了确保几何体设置正确,我使用了“ConverxGeometry”类,仅在顶点数组中传递我的点。尽管如此,我在调用'modelBuilder.addGeometry(geometry)'时还是遇到了同样的错误……非常感谢您为我指明了正确的方向。我以前试过bufferGeometry,但它不起作用。当我从“三”中删除“导入*为三”从我的代码中,改为使用“declare var THREE:any;”参考文献3,我的代码确实运行了。当然,您的答案也是正确的,它只适用于缓冲区几何体。再次感谢您的快速帮助!