Autodesk forge 如何将查看器坐标转换回CAD坐标?

Autodesk forge 如何将查看器坐标转换回CAD坐标?,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我正在尝试将查看器场景坐标转换回原始CAD坐标。我见过有人提到全局偏移量,但每当我试图检索它时,我都没有定义。我假设这意味着没有偏移。但当我比较两个坐标时,一个在查看器中,一个在CAD中,它们绝对不相等。我遇到了函数NOP_VIEWER.model.getUnitScale;然而,当将这个数字应用于坐标时,它似乎没有任何意义 也就是说,如何将查看器坐标转换回CAD坐标?全局偏移通常用于3D模型。根据我的经验,您可以将PageToModelTransform应用于查看器点,以将其转换回CAD。下面

我正在尝试将查看器场景坐标转换回原始CAD坐标。我见过有人提到全局偏移量,但每当我试图检索它时,我都没有定义。我假设这意味着没有偏移。但当我比较两个坐标时,一个在查看器中,一个在CAD中,它们绝对不相等。我遇到了函数NOP_VIEWER.model.getUnitScale;然而,当将这个数字应用于坐标时,它似乎没有任何意义

也就是说,如何将查看器坐标转换回CAD坐标?

全局偏移通常用于3D模型。根据我的经验,您可以将PageToModelTransform应用于查看器点,以将其转换回CAD。下面的代码片段是从我们的同事编写的一个名为的演示中提取出来的

其关键概念是使用VertexBufferReader读取Forge Viewer二维模型的顶点,并获得相应的变换矩阵,以将查看器的点投影回DWG坐标系

function GeometryCallback(viewer) {
    this.viewer = viewer;
}

GeometryCallback.prototype.onLineSegment = function(x1, y1, x2, y2, vpId) {
    var vpXform = this.viewer.model.getPageToModelTransform(vpId);

    var pt1 = new THREE.Vector3().set(x1, y1, 0).applyMatrix4(vpXform);
    var pt2 = new THREE.Vector3().set(x2, y2, 0).applyMatrix4(vpXform);

    console.log('Line segment vertices in CAD coordinate system', {
        pointX1: pt1.x,
        pointY1: pt1.y,
        pointX2: pt2.x,
        pointY2: pt2.y
    });
}

GeometryCallback.prototype.onCircularArc = function(cx, cy, start, end, radius, vpId) {
};

GeometryCallback.prototype.onEllipticalArc = function(cx, cy, start, end, major, minor, tilt, vpId) {

};

var it = viewer.model.getData().instanceTree;
it.enumNodeFragments( dbId, function( fragId ) {
    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());
});

希望能有所帮助。

但如何获取画布上单击的位置并将其转换为cad坐标?