为什么剖切面遮盖丢失了?

发布于 2022-09-04 22:19:59 字数 858 浏览 20 评论 0

我调用 viewer.setCutPlanes(),剖切到的部份是空心的,没有被遮盖像下面两张截图:

没有遮盖图-1
没有遮盖图-2

但当我使用 viewer 自带的剖切功能的时候,有被剖切到的部份是遮盖的,像这张截图:

剖切遮盖图

请问我可以在调用 viewer.setCutPlanes() 的时候自个加上遮盖?

附注:我在 viewer 的代码里发现 SectionTool 这个扩展,但他的相关函数几乎都是不公开的,我该把那些跟剖切遮盖有关的函数都拿到这里用吗?或者有ES6的模块可以使用?

原文连结:http://stackoverflow.com/ques...

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

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

发布评论

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

评论(1

木槿暧夏七纪年 2022-09-11 22:19:59

据我的观察,目前 Forge Viewer 是没有 ES6(ECMAScript2015) 模块。

依照我调试的结果,我发现 Viewer3D.setCutPlanes() 只是一个帮助产生 ThreeJS 剖切面的工具函数,它被调用后不会产生盖顶组件。此外,我还发现你在使用 viewer 自带剖切功能看到的那些盖顶组件目前只有在 Autodesk.Viewing.Extensions.Section.SectionTool 里的代码有体现。

如果你想在调用 Viewer3D.setCutPlanes() 的时候同时也产生那些盖顶的话,你可以尝试将下面几个不公开的函数从 SectionTool 里头复制出来:

  1. getDiffuseColor()

  2. init_three_triangulator()

  3. init_three_intersector()

  4. updateCapMeshes()

还有必需将上面几个函数里的 _viewer 变量替换成 Viewer3D.impl,否则浏览器会报错。或者你也可以尝试将 updateCapMeshes() 的定义修改成这个样子:

function updateCapMeshes( _viewer, plane ) {

  init_three_triangulator();
  init_three_intersector();

  // ... 将原来updateCapMeshes 函数的内容填上 ...
}

在来像下面这样调用修改完的 updateCapMeshes() 就可以在剖切的部份产生你要的盖顶组件:

//-- 用来调用上面修改好的 updateCapMeshes() 的工具函数
function createMyOwnPlane( _viewer, _sectionPlanes ) {
  if (_sectionPlanes.length === 1) {
     updateCapMeshes(_viewer, new THREE.Plane().setComponents(_sectionPlanes[0].x, _sectionPlanes[0].y, _sectionPlanes[0].z, _sectionPlanes[0].w));
  }
  _viewer.setCutPlanes(_sectionPlanes);
}


//-- 在这边调用createMyOwnPlane()
var viewer = viewerApp.getCurrentViewer();
createMyOwnPlane( viewer.impl, [ new THREE.Vector4(0, 0, 1, 0) ] );

执行完上面那些函数后就可以看到这样的结果:
盖顶结果

最后,如果你想要拿掉那些盖顶组件的话,可以这样做:

var oldsection = viewer.impl.sceneAfter.getObjectByName( 'section' );
if( oldsection )
  viewer.impl.sceneAfter.remove( oldsection );

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