将 Autodesk 查看器单位转换为英寸

问题描述

我正在使用带有 Edit2D 库的查看器,并试图将两个 x 和 y 点之间的长度转换为实际测量值。

例如,使用多边形工具绘制形状后,我想获取第一条边的长度。 我得到绘制的形状和下面显示的事件的前两个点,得到 2 点,并得到它们之间的距离。似乎它们在 Autodesk 单位或其他东西中。有没有一种简单的方法可以将单位转换英尺或英寸?

我找到了
Edit2DExtension.defaultContext.unitHandler.fromdisplayUnits()
还有
Edit2DExtension.defaultContext.unitHandler.todisplayUnits()
还有
Autodesk.Viewing.Private.convertUnits()

我已经尝试了所有三个,但我不确定如何使用它们并且还没有找到任何好的结果。 可能有一种方法可以通过 Edit2d 做到这一点,但我还没有找到一种方法,而且我在这个库中几乎找不到任何文档。

 beforeEdit2DAction(event) {
        
    console.log('After Shape has been drawn -> ',event);
    let shape = event.action.shape;

    let pointA = shape._loops[0][0]; // Value: {x: 21.393766403198242,y: 20.934386880096092}
    let pointB = shape._loops[0][1]; // Value: {x: 25.082155227661133,y: 20.934386880096092}


    // distance between 2 points (Assuming Autodesk units) 
    let length = Autodesk.Edit2D.Math2D.distance2D(pointA,pointB); // 3.6883888244628906
     
    // Need to convert to real world units (preferably ft or inches)
}

实际长度为 29.5 英尺 欢迎任何想法或意见!谢谢

编辑:尝试 Petr 的建议是它返回的内容

enter image description here

解决方法

这是一个有趣的问题。 “单元处理程序”跟踪两种类型的单元:

  • 层单元(例如Edit2DExtension.defaultContext.unitHandler.config.layerUnits,可以是inch
  • 显示单位 (Edit2DExtension.defaultContext.unitHandler.config.displayUnits)

这两个属性控制实际长度和面积的显示方式。例如,单元处理程序的 toDisplayUnits 方法是这样实现的:

    toDisplayUnits(fromUnits,value) {
        this.updateConfig();
        return Autodesk.Viewing.Private.convertUnits(fromUnits,this.config.displayUnits,this.config.scaleFactor,value);
    }

这样,正确配置 fromUnitsdisplayUnits(和比例)应该可以为您提供所需的真实测量值。