Autodesk forge 将点从DWG模型坐标转换为autodesk forge viewer坐标

Autodesk forge 将点从DWG模型坐标转换为autodesk forge viewer坐标,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我尝试在Autodesk forge viewer中显示的模型上显示点。但是,我无法理解如何转换该点 答案不适用于我,因为viewer.model.getData()没有globalOffset属性 我在这里上传了一些示例代码以及原始dwg文件对不起,我没有收到我们工程团队的任何回复。似乎没有其他方法可以获取当前2d视图的viewportId,这里可能存在浮点精度问题,这就是我上面提到的问题。我会继续要求他们。下面是我发现的从DWG坐标系到查看器坐标系进行点转换的方法 通过VertexBuffe

我尝试在Autodesk forge viewer中显示的模型上显示点。但是,我无法理解如何转换该点

答案不适用于我,因为
viewer.model.getData()
没有
globalOffset
属性


我在这里上传了一些示例代码以及原始dwg文件

对不起,我没有收到我们工程团队的任何回复。似乎没有其他方法可以获取当前2d视图的
viewportId
,这里可能存在浮点精度问题,这就是我上面提到的问题。我会继续要求他们。下面是我发现的从DWG坐标系到查看器坐标系进行点转换的方法

  • 通过
    VertexBufferReader
    获取当前视口id,但必须在加载的视图中指定一个2d项(
    dbId
    ),才能从中读取
    viewportId

    var viewportId = null;
    function GeometryCallback(viewer) {
        this.viewer = viewer;
    }
    
    GeometryCallback.prototype.onLineSegment = function(x1, y1, x2, y2, vpId) {
        viewportId = vpId;
    }
    
    var fragId = 0;
    var m = viewer.impl.getRenderProxy(viewer.model, fragId);
    var vbr = new Autodesk.Viewing.Private.VertexBufferReader(m.geometry, viewer.impl.use2dInstancing);
    vbr.enumGeomsForObject(dbId, new GeometryCallback());
    
  • 将DWG点投影回查看器坐标系

    var vpXform = viewer.model.getPageToModelTransform(viewportId).clone();
    var invVpXform = new WGS.LmvMatrix4(true);
    
    invVpXform.getInverse(vpXform, true);
    
    var ptInCadX = ...;
    var ptInCadY = ...;
    var verticesInViewer = new THREE.Vector3().set(ptInCadX, ptInCadY, 0).applyMatrix4(invVpXform);
    

  • 希望能有所帮助。

    请接受我们对迟到的真诚道歉,我们目前的资源不足。我正在研究,这将需要我很多次才能找到解决方案,请容忍我!我找到了一种方法,可以根据您的需要进行点转换,但这种方法似乎还有另一个问题,所以我正在与我们的工程团队进行核实,并将尽快为您回复。谢谢@伊森康感谢您调查此事。有进一步的更新吗?我不确定如何获取dbId和fragId。在我的示例中,正确的dbId是
    viewer.model.getData().instanceTree.nodeAccess.rootId
    ?如何从dbId中获取fragId?在查看器的2D视图中选择一个项目,然后调用
    Viewer.getSelection()
    获取
    dbId
    。之后,
    var it=viewer.model.getData().instanceTree;it.enumNodeFragments(dbId,function(fragId){console.log(fragId)})
    还有另一种方法可以访问InstancerEE,
    viewer.getObjectTree(function(it){console.log(it)},functio(code,msg){console.error(code,msg)})
    在Autodesk中获取dbId和fragId。查看。选择\u更改\u事件处理程序工作正常。但是,我需要在加载模型时执行转换。我这样做的方式是在
    Autodesk.Viewing.OBJECT\u TREE\u CREATED\u事件中调用
    viewer.select(dbId,Autodesk.Viewing.SelectionMode.REGULAR)
    。我已经更新了github存储库中的代码来演示这一点。然而,这是一种非常复杂的方法。加载模型时,是否有更简单的转换方法?最好是不需要先选择项的选项。如果要在加载时转换模型,可以尝试将此选项传递给
    Viewer3D#loadModel
    constmodelopts={placementTransform:new THREE.Matrix4()。makeTranslation(x1,y1,z1),globalOffset:{x:0,y:0,z:0}