将点从 DWG 模型坐标转换为 Autodesk Forge 查看器坐标

Transform point from DWG model coordinates to autodesk forge viewer coordinates

我正在尝试在 Autodesk Forge 查看器中显示的模型上显示一个点。但是我不知道如何转换点。

答案 对我不起作用,因为 viewer.model.getData() 没有 globalOffset 属性。

我已经在此处上传了一些示例代码和原始 dwg 文件 https://github.com/umarmohammed/forgeviewerdemo

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

  1. 通过 VertexBufferReader 获取当前视口 ID,但您必须在加载的视图中指定一个二维项目 (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());
    
  2. 将 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);
    

希望对您有所帮助。