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

查看:435
本文介绍了autodesk-forge - 为什么剖切面遮盖丢失了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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


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

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

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

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

解决方案

据我的观察,目前 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();

这篇关于autodesk-forge - 为什么剖切面遮盖丢失了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆