将点从DWG模型坐标转换为autodesk伪造查看器坐标

时间:2018-05-29 15:33:27

标签: autodesk-forge autodesk-viewer

我正在尝试在Autodesk forge查看器中显示的模型上显示一个点。但是我无法弄清楚如何改变这一点。

答案Aligning Coordinate Systems in Autodesk Forge Viewer对我不起作用,因为viewer.model.getData()没有globalOffset属性。

我已在此处{(3}}

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

1 个答案:

答案 0 :(得分:1)

抱歉,我的工程团队没有收到任何回复。似乎没有另一种方法来获取当前2d视图的viewportId,并且可能在此处存在浮动精度问题,这是我上面提到的问题。我会继续要求他们。所以,这是我发现从DWG坐标系到观察者点进行点转换的方法。

  1. 通过VertexBufferReader获取当前视口ID,但您必须在已加载的视图中指定第2项(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);
    
  3. 希望它有所帮助。