无法添加到场景-伪造查看器。错误:“ THREE.Object3D.add:对象不是THREE.Object3D的实例。”

时间:2019-08-23 11:17:52

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

我用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的实例。

2 个答案:

答案 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在伪造中是开箱即用的,我们不需要单独连接它。