切割平面中的覆盖切割
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
扩展中复制下面列出的功能:
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
函数来像这样创建剪切封面:
//-- 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();
当我使用函数viewer.setCutPlanes()
时,被切割的平面没有被覆盖:
但是使用查看器的截面分析工具平面切割,它们确实被覆盖了(每个覆盖都是它自己的节点的一部分,这很好):
如何在使用 viewer.setCutPlanes()
时将这些封面添加到模型中?
PS: 我在查看器中找到了section tool extension,但是它的相关功能似乎都是私有的。我应该尝试复制此扩展并在那里公开必要的功能吗?是否有 ES6 版本的 repo?
不幸的是,Forge Viewer
没有 ES6 模块。 Viewer3D.setCutPlanes()
是一个实用的方法,只用于产生ThreeJS
个裁剪平面,cut-cover特性现在被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
函数来像这样创建剪切封面:
//-- 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();