Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autodesk 剖切面中的覆盖切口_Autodesk_Autodesk Forge_Autodesk Viewer - Fatal编程技术网

Autodesk 剖切面中的覆盖切口

Autodesk 剖切面中的覆盖切口,autodesk,autodesk-forge,autodesk-viewer,Autodesk,Autodesk Forge,Autodesk Viewer,当我使用函数viewer.setCutPlanes()时,切割的平面不会被覆盖: 但是使用查看器的截面分析工具plane cut,它们确实会被覆盖(每个覆盖都是自己节点的一部分,这很好): 使用viewer.setCutPlanes()时,如何将这些封套添加到模型中 PS:我在查看器中找到了部分工具扩展,但它的所有相关功能似乎都是私有的。我应该尝试复制这个扩展并在那里公开必要的函数吗?ES6版本是否有回购协议?不幸的是,Forge Viewer没有ES6模块。Viewer3D.setCut

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

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

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


PS:我在查看器中找到了部分工具扩展,但它的所有相关功能似乎都是私有的。我应该尝试复制这个扩展并在那里公开必要的函数吗?ES6版本是否有回购协议?

不幸的是,
Forge Viewer没有ES6模块。
Viewer3D.setCutPlanes()
是一种仅用于生成
ThreeJS
剪裁平面的实用方法,现在由
Autodesk.Viewing.Extensions.Section.SectionTool
存档剪切保护层功能

如果要在自控下执行此功能,必须从
部分工具
扩展中复制下列功能:

  • getDiffuseColor()
  • init\u three\u triangulator()
  • init\u three\u intersector()
  • updateCapMeshes()
  • 此外,上述私有函数中的
    \u viewer
    变量应替换为
    Viewer3DImpl
    实例,即
    Viewer3D.impl
    。或者您可以更改
    updateCapMeshes
    的函数声明,如下所示:

    function updateCapMeshes( _viewer, plane ) {
    
      init_three_triangulator();
      init_three_intersector();
    
      // ... Original content of updateCapMeshes below ...
    }
    
    调用modified
    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
    ,您将得到如下图片所示的结果:

    顺便说一句,切割盖可以通过这种方式移除~

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

    @易信康你知道这是不是计划在未来成为一个公共的Viewer3D API?复制私有实现有点脆弱。谢谢