我用react,Three.js和forge-viewer创建一个应用程序。使用Forge Viewer刚刚开始工作,现在我无法向场景中添加新对象。 我收到一个错误:
THREE.Object3D.add:对象不是THREE.Object3D的实例。
我尝试将“网格”,“线”和“点”添加到场景。但是我遇到了这个错误,场景与以前的模型相同。 如果您共享工作代码viewer.js并告诉我您使用的是Three.js和Forge-apis的哪个版本-非常感谢)
import {getForgeToken} from "../libs/tokenQueries";
import {Vector3, LineBasicMaterial, Line, Geometry} from "three";
const Autodesk = window.Autodesk;
let viewer
function onDocumentLoadSuccess(doc) {
const viewables = doc.getRoot().getDefaultGeometry();
viewer.loadDocumentNode(doc, viewables).then(i => {
//can't add in this place
const material = new LineBasicMaterial({color: 0xffff00, linewidth: 2});
const geometry = new Geometry();
geometry.vertices.push(
new Vector3(-10, 0, 0),
new Vector3(0, 10, 0),
new Vector3(10, 0, 0)
);
const line = new Line(geometry, material);
viewer.impl.createOverlayScene('pointclouds');
viewer.impl.addOverlay('pointclouds', line);
viewer.addEventListener(
Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, (args) => {
//and can't add in this place
const material = new LineBasicMaterial({color: 0xffff00, linewidth: 2});
const geometry = new Geometry();
geometry.vertices.push(
new Vector3(-10, 0, 0),
new Vector3(0, 10, 0),
new Vector3(10, 0, 0)
);
const line = new Line(geometry, material);
viewer.impl.createOverlayScene('pointclouds');
viewer.impl.addOverlay('pointclouds', line);
})
});
}
function onDocumentLoadFailure(viewerErrorCode) {
console.error("onDocumentLoadFailure() - errorCode:" + viewerErrorCode);
}
function launchViewer(urn) {
const options = {
env: "AutodeskProduction",
getAccessToken: getForgeToken
};
viewer = new Autodesk.Viewing.GuiViewer3D(
document.getElementById("forgeViewer")
);
Autodesk.Viewing.Initializer(options, () => {
viewer.start();
const documentId = "urn:" + urn;
Autodesk.Viewing.Document.load(
documentId,
onDocumentLoadSuccess,
onDocumentLoadFailure
);
});
}
const Helpers = {
launchViewer
};
export default Helpers;
错误:THREE.Object3D.add:对象不是THREE.Object3D的实例。
答案 0 :(得分:1)
首先,在您的代码段中,您要向场景(points
中添加一个viewer.impl.addOverlay('pointclouds', points);
对象,但是我看不到在任何地方定义该对象...?
第二,我看到过去发生过类似的问题(How to add a mesh to forge viewer v6 using Typescript?),这是由在同一应用程序中使用的Three.js的两个不同版本引起的。 Forge Viewer构建于Three.js版本71之上,并且您的代码可能添加了来自Three.js不同版本的对象,其中“是否是THREE.Object3D实例”的检查失败。 >
答案 1 :(得分:0)
那是因为我连接了three.js。 Three.js在伪造中是开箱即用的,我们不需要单独连接它。