问题描述
我正在使用带有 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 的建议是它返回的内容:
解决方法
这是一个有趣的问题。 “单元处理程序”跟踪两种类型的单元:
- 层单元(例如
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);
}
这样,正确配置 fromUnits
和 displayUnits
(和比例)应该可以为您提供所需的真实测量值。