AutoCAD 产品设计:图形单位

本文讲解 AutoCAD 产品的图形单位功能产品设计。

使用的 AutoCAD 为 2020 版本

图形单位是什么?

图形单位是用于设置 一些属性数据应该用什么格式显示 的命令,命令标识为 un(units)。

举个例子。

某个圆的半径,在数据上是 12.3456,但我们给长度单位配置为 "科学计数法类型",精度为 2(即保留两位小数),在特性面板或其他显示界面上,它需要显示为 1.23E+01

特性面板中的单位:

动态输入框的单位:

单位分为两类:

  • 线性单位(长度单位)

  • 角度单位

线性单位(长度单位)

线性单位(linear units)用于一些长度、坐标等线性数据

用于在 UI 层显示对应类型单位,数据层保持原来的十进制小数格式。另外,UI 层修改对应格式数据会转换回十进制小数,写回到数据层。

例子

比如设置线性单位的类型设置为科学计数法(对应值 1),精度为 2。

数据是十进制的 12.345678,在 UI 上会转换为 1.23E+01 进行显示。

如果在 UI 层的输入框将其改为 1.23E+02,在失焦时会将这个字符串转换为十进制小数格式的 123,保存回数据层。

需要实现格式两大类转换算法:

  1. 十进制小数转其他格式,需要考虑精度;

  2. 其他格式转小数,不需要考虑精度,但要做校验补正。

需要实现两类方法:

scss 复制代码
// 十进制转其他格式
convertDecimal(decimal, type, precision)
// 其他格式转小数
convertToDecimal(str, type)

长度单位的可选类型(linearUnits)

  • 1 :科学。1.2346E+02

  • 2: 小数。123.456

  • 3: 工程。123'-4.56"

  • 4: 建筑。123'-4 5/8"

  • 5: 分数。12 3/4

长度精度(linearPrecision)

0 到 8 的整数。

比如对小数来说,代表保留 0 位到保留 8 位小数。

具体不同类型对应那些格式,可以看去打开弹窗看看下拉选项。

角度单位

角度单位(angle units)用于显示像是旋转之类的角度相关的弧度数据。

中文为 "角度",那只是给用户看到。angle 本意为度,不代表具体的格式。其实更准确的描述是 "度",而不是 "角度"。

该配置用于在 UI 层显示对应类型角度单位,数据层保持原来的角度值,并且在 UI 层修改对应格式数据也会转回弧度,保存回数据层。

例子

假设角度单位的类型设置为弧度(对应值 3),精度为 2,旋转方向为 false(逆时针),基准角度为 0。

数据是十进制的 180,在 UI 上会转换为 3.14r 进行显示。

如果在 UI 层的输入框将其改为 3r,它会在 onChange 中将这个字符串转换为角度 171.88733853924697,保存回数据层。

同样需要实现两类方法,但相比长度单位多了 "角度方向" 和 "基准角度" 的参数。

scss 复制代码
// 弧度 -> 其他
convertRandian(radian, type, presicion, angleDir, angleBase)
// 其他 -> 弧度
getToDegreeParser(AngleUnitEnum.Radian)(str, type, angleDir, angleBase)

角度单位可选类型(angleUnits)

设定角度单位(AutoCAD 系统变量是 AUNITS)。

  • 0:十进制度数。1.2345

  • 1:度/分/秒。1d2'3.4

  • 2:百分度。1.2345g

  • 3:弧度。1.2345r

  • 4:勘测单位。N 88d53'20.2" E(表示以正北为起点,向东方向旋转 88d53'20.2" E

角度精度(anglePrecision)

0 到 8 之间的整数,不同类型对应的精度格式不同。

特别注意的是,"度/分/秒" 和 "勘探单位" 的精度 1 和 3 分别等价于 2 和 4。因为分和秒的整数部分是不补前导零的。这两个类型对应的下拉选项中也把 1 和 3 去掉了。

角度方向(angleDir)

角度旋转的正方向,默认为逆时针(false)。

false 表示逆时针, true 表示顺时针。

二者区别,其实就是角度转换成其他单位前,是否要把数据源先用 PI * 2 减一下,再标准化。

基准角度(angleBase)

基准度数,为弧度值。

其实就是在角度转换其他单位前,先把角度减一下这个 angleBase。

对于 AutoCAD,默认向东的度数为 0。

插入时的缩放单位(insertUnits)

传入时的缩放单位有相当多,范围也很广,小到毫米,大到光年。

首先作为图纸自己的单位。

当我们选中一个实体,创建块时,块有一个 "块单位" 属性。假设当前图纸单位为 "厘米",块为 "毫米",这个块就会缩小为原来的 1/10。

这里的缩放比例和数据源不相等,是有一层转换的:UI 层 scale = 数据层 scale * 单位因子

单位因子是一个计算属性,是块单位转图纸单位的转换比。比如块单位为 mm,图纸单位为 cm,那单位因子就是 0.1(1mm 等于 0.1 cm)。

如果设置的是比较特殊的单位 "无单位",图纸的单位会使用客户端首选项设置的值,一般都是 "毫米"。

同时它作为外部参照插入其他图纸时的 "块单位",效果同块,只是不能修改单位。

另外外部参照插入时这个块单位就写死了,此时修改外部参照图纸的单位,是不会影响的。

结尾

以上就是图形单位这个命令的主要逻辑了。

其中的光源强度单位我不熟,用的也少,就不讲了。

相关推荐
gqkmiss12 分钟前
Chrome 浏览器插件获取网页 iframe 中的 window 对象
前端·chrome·iframe·postmessage·chrome 插件
m0_748247552 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255023 小时前
前端常用算法集合
前端·算法
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203983 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2344 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1234 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~5 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语5 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport5 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap