forge中自己加入的元素怎么通过鼠标选中

发布于 2022-09-05 05:23:32 字数 28 浏览 25 评论 0

forge中自己加入的元素怎么通过鼠标选中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

野心澎湃 2022-09-12 05:23:32

利用Raycaster的方法,但是这个跟three.js的方法不太一样,需要做一些设置,从源码得出这个方法,需要对透视相机和正交相机做出区别:

    
function intersectObjects(pointer,camera,obj) {
    var domElement = viewer.impl.canvas;
    var pointerVector = new THREE.Vector3();
    var pointerDir = new THREE.Vector3();
    var ray = new THREE.Raycaster();
    var rect = domElement.getBoundingClientRect();
    var x = ( ( pointer.clientX - rect.left ) / rect.width ) * 2 - 1;
    var y = - ( ( pointer.clientY - rect.top ) / rect.height ) * 2 + 1;

    if (camera.isPerspective) {
        pointerVector.set(x, y, 0.5);
        pointerVector.unproject(camera);
        ray.set(camera.position, pointerVector.sub(camera.position).normalize());
    } else {
        pointerVector.set(x, y, -1);
        pointerVector.unproject(camera);
        pointerDir.set(0, 0, -1);
        ray.set(pointerVector, pointerDir.transformDirection(camera.matrixWorld));
    }
    
    var intersections = ray.intersectObjects( obj, true );
    return intersections[0] ? intersections[0] : false;
}

鹤舞 2022-09-12 05:23:32
       window.onclick = () => {
        var camera = NOP_VIEWER.getCamera();
        var pointerVector = new THREE.Vector3();
        var pointerDir = new THREE.Vector3();
        var x = (window.event.clientX / window.innerWidth) * 2 - 1;
        var y = - (window.event.clientY / window.innerHeight) * 2 + 1;
        if (camera.isPerspective) { //判断透视相机和正交相机
            pointerVector.set(x, y, 0.5);
            pointerVector.unproject(camera);
            var raycaster = new THREE.Raycaster(camera.position, pointerVector.sub(camera.position).normalize());
        } else {
            pointerVector.set(x, y, -1);
            pointerVector.unproject(camera);
            pointerDir.set(0, 0, -1);
            var raycaster = new THREE.Raycaster(pointerVector, pointerDir.transformDirection(camera.matrixWorld));
        }
        // 获取raycaster直线和所有模型相交的数组集合
        var objs = NOP_VIEWER.impl.scene.children;
        var intersects = raycaster.intersectObjects(objs, true);
        console.log(intersects);
        if (intersects.length > 0) {
            intersects[0].object.material.color.set(0xff0000);
        }
    }
    
    您好,按照这样写后,点击物体会返回空数组。但是点击某个角度后,会把所有objs中的物体都上色。返回的是
    

clipboard.png

南风起 2022-09-12 05:23:32

你好,请问是如何实现在forge中加入自己的元素的呢?我根据https://forge.autodesk.com/bl...,在模型内并没有生成对应的图形,但是程序也并没有报错,该生成的图形对象也都有。
请问您是怎么实现的在forge中添加元素的呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文