【问题标题】:How to convert viewer coordinates back to CAD coordinates?如何将查看器坐标转换回 CAD 坐标?
【发布时间】:2018-06-05 14:41:28
【问题描述】:

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

话虽如此,如何从查看器坐标转换回 CAD 坐标?

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    根据我的经验,globalOffset 通常用于 3D 模型,您可以将PageToModelTransform 应用于您的查看器点以将它们转换回 CAD。以下代码 sn-p 摘自我们同事编写的名为viewer-dwgoffset 的演示。

    其关键概念是使用VertexBufferReader读取Forge Viewer 2D模型的顶点,并得到对应的变换矩阵将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 坐标?
    猜你喜欢
    • 2018-02-16
    • 2018-11-08
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多