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
里头复制出来:
getDiffuseColor()
init_three_triangulator()
init_three_intersector()
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屋!