覆盖切割平面中的切口
Posted
技术标签:
【中文标题】覆盖切割平面中的切口【英文标题】:Cover cuts in cut planes 【发布时间】:2017-10-05 09:15:39 【问题描述】:当我使用函数viewer.setCutPlanes()
时,被切割的平面没有被覆盖:
但是使用查看器的截面分析工具平面切割,它们确实会被覆盖(每个覆盖物都是其自己节点的一部分,这很好):
使用viewer.setCutPlanes()
时如何将这些封面添加到模型中?
PS:我在查看器中找到了部分工具扩展,但它的所有相关功能似乎都是私有的。我应该尝试复制这个扩展并在那里公开必要的功能吗?有 ES6 版本的 repo 吗?
【问题讨论】:
【参考方案1】:很遗憾,Forge Viewer
没有 ES6 模块。 Viewer3D.setCutPlanes()
是一种仅用于制作ThreeJS
剪裁平面的实用方法,现在Autodesk.Viewing.Extensions.Section.SectionTool
存档了剪切覆盖功能。
如果您想在自我控制下执行此功能,则必须从 SectionTool
扩展名中复制以下列出的功能:
getDiffuseColor()
init_three_triangulator()
init_three_intersector()
updateCapMeshes()
此外,上述私有函数中的_viewer
变量应替换为Viewer3DImpl
实例,即Viewer3D.impl
。或者您可以更改updateCapMeshes
的函数声明,如下所示:
function updateCapMeshes( _viewer, plane )
init_three_triangulator();
init_three_intersector();
// ... Original content of updateCapMeshes below ...
像这样调用修改后的updateCapMeshes
函数来创建cut-cover:
//-- Helper function to create your own cut planes.
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);
//-- Call functions here.
var viewer = viewerApp.getCurrentViewer();
createMyOwnPlane( viewer.impl, [ new THREE.Vector4(0, 0, 1, 0) ] );
如果没有TransformControl
,你会得到这样的结果:
Result of createMyOwnPlane
顺便说一句,这样就可以去掉cut-cover~
var oldsection = viewer.impl.sceneAfter.getObjectByName("section");
if (oldsection)
viewer.impl.sceneAfter.remove(oldsection);
viewer.setCutPlanes();
【讨论】:
@eason-kang 你知道这是否计划在未来成为一个公共的 Viewer3D API 吗?复制私有实现有点脆弱。谢谢。以上是关于覆盖切割平面中的切口的主要内容,如果未能解决你的问题,请参考以下文章