切割平面中的覆盖切割

Cover cuts in cut planes

当我使用函数viewer.setCutPlanes()时,被切割的平面没有被覆盖:

但是使用查看器的截面分析工具平面切割,它们确实被覆盖了(每个覆盖都是它自己的节点的一部分,这很好):

如何在使用 viewer.setCutPlanes() 时将这些封面添加到模型中?

PS: 我在查看器中找到了section tool extension,但是它的相关功能似乎都是私有的。我应该尝试复制此扩展并在那里公开必要的功能吗?是否有 ES6 版本的 repo?

不幸的是,Forge Viewer 没有 ES6 模块。 Viewer3D.setCutPlanes()是一个实用的方法,只用于产生ThreeJS个裁剪平面,cut-cover特性现在被Autodesk.Viewing.Extensions.Section.SectionTool归档了。

如果您想在自我控制下执行此功能,则必须从 SectionTool 扩展中复制下面列出的功能:

  1. getDiffuseColor()
  2. init_three_triangulator()
  3. init_three_intersector()
  4. updateCapMeshes()

此外,上述私有函数中的_viewer变量应替换为Viewer3DImpl实例,即Viewer3D.impl。或者您可以像下面这样更改 updateCapMeshes 的函数声明:

function updateCapMeshes( _viewer, plane ) {

  init_three_triangulator();
  init_three_intersector();

  // ... Original content of updateCapMeshes below ...
}

调用修改后的 updateCapMeshes 函数来像这样创建剪切封面:

//-- 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

顺便说一句,剪盖可以通过这种方式去除~

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

viewer.setCutPlanes();