AutoCAD 產(chǎn)品設(shè)計:圖形單位

本文講解 AutoCAD 產(chǎn)品的圖形單位功能產(chǎn)品設(shè)計。
使用的 AutoCAD 為 2020 版本
圖形單位是什么?
圖形單位是用于設(shè)置 一些屬性數(shù)據(jù)應(yīng)該用什么格式顯示 的命令,命令標(biāo)識為 un(units)。
舉個例子。
某個圓的半徑,在數(shù)據(jù)上是 12.3456,但我們給長度單位配置為 “科學(xué)計數(shù)法類型”,精度為 2(即保留兩位小數(shù)),在特性面板或其他顯示界面上,它需要顯示為 1.23E+01。
特性面板中的單位:

動態(tài)輸入框的單位:

單位分為兩類:
- 線性單位(長度單位)
- 角度單位

線性單位(長度單位)
線性單位(linear units)用于一些長度、坐標(biāo)等線性數(shù)據(jù)。
用于在 UI 層顯示對應(yīng)類型單位,數(shù)據(jù)層保持原來的十進(jìn)制小數(shù)格式。另外,UI 層修改對應(yīng)格式數(shù)據(jù)會轉(zhuǎn)換回十進(jìn)制小數(shù),寫回到數(shù)據(jù)層。
例子
比如設(shè)置線性單位的類型設(shè)置為科學(xué)計數(shù)法(對應(yīng)值 1),精度為 2。
數(shù)據(jù)是十進(jìn)制的 12.345678,在 UI 上會轉(zhuǎn)換為 1.23E+01 進(jìn)行顯示。
如果在 UI 層的輸入框?qū)⑵涓臑?nbsp;1.23E+02,在失焦時會將這個字符串轉(zhuǎn)換為十進(jìn)制小數(shù)格式的 123,保存回數(shù)據(jù)層。
需要實現(xiàn)格式兩大類轉(zhuǎn)換算法:
- 十進(jìn)制小數(shù)轉(zhuǎn)其他格式,需要考慮精度。
- 其他格式轉(zhuǎn)小數(shù),不需要考慮精度,但要做校驗補(bǔ)正。

需要實現(xiàn)兩類方法:
// 十進(jìn)制轉(zhuǎn)其他格式
convertDecimal(decimal, type, precision)
// 其他格式轉(zhuǎn)小數(shù)
convertToDecimal(str, type)長度單位的可選類型(linearUnits)
- 1 :科學(xué)。1.2346E+02
- 2: 小數(shù)。123.456
- 3: 工程。123'-4.56"
- 4: 建筑。123'-4 5/8"
- 5: 分?jǐn)?shù)。12 3/4
長度精度(linearPrecision)
0 到 8 的整數(shù)。
比如對小數(shù)來說,代表保留 0 位到保留 8 位小數(shù)。
具體不同類型對應(yīng)那些格式,可以看去打開彈窗看看下拉選項。

角度單位
角度單位(angle units)用于顯示像是旋轉(zhuǎn)之類的角度相關(guān)的弧度數(shù)據(jù)。
中文為 “角度”,那只是給用戶看到。angle 本意為度,不代表具體的格式。其實更準(zhǔn)確的描述是 “度”,而不是 “角度”。
該配置用于在 UI 層顯示對應(yīng)類型角度單位,數(shù)據(jù)層保持原來的角度值,并且在 UI 層修改對應(yīng)格式數(shù)據(jù)也會轉(zhuǎn)回弧度,保存回數(shù)據(jù)層。
例子
假設(shè)角度單位的類型設(shè)置為弧度(對應(yīng)值 3),精度為 2,旋轉(zhuǎn)方向為 false(逆時針),基準(zhǔn)角度為 0。
數(shù)據(jù)是十進(jìn)制的 180,在 UI 上會轉(zhuǎn)換為 3.14r 進(jìn)行顯示。
如果在 UI 層的輸入框?qū)⑵涓臑?3r,它會在 onChange 中將這個字符串轉(zhuǎn)換為角度 171.88733853924697,保存回數(shù)據(jù)層。
同樣需要實現(xiàn)兩類方法,但相比長度單位多了 “角度方向” 和 “基準(zhǔn)角度” 的參數(shù)。
// 弧度 -> 其他
convertRandian(radian, type, presicion, angleDir, angleBase)
// 其他 -> 弧度
getToDegreeParser(AngleUnitEnum.Radian)(str, type, angleDir, angleBase)
角度單位可選類型(angleUnits)
設(shè)定角度單位(AutoCAD 系統(tǒng)變量是 AUNITS)。
- 0:十進(jìn)制度數(shù)。1.2345
- 1:度/分/秒。1d2'3.4
- 2:百分度。1.2345g
- 3:弧度。1.2345r
- 4:勘測單位。N 88d53'20.2" E(表示以正北為起點,向東方向旋轉(zhuǎn) 88d53'20.2" E)
角度精度(anglePrecision)
0 到 8 之間的整數(shù),不同類型對應(yīng)的精度格式不同。
特別注意的是,“度/分/秒” 和 “勘探單位” 的精度 1 和 3 分別等價于 2 和 4。因為分和秒的整數(shù)部分是不補(bǔ)前導(dǎo)零的。這兩個類型對應(yīng)的下拉選項中也把 1 和 3 去掉了。

角度方向(angleDir)
角度旋轉(zhuǎn)的正方向,默認(rèn)為逆時針(false)。
false 表示逆時針, true 表示順時針。
二者區(qū)別,其實就是角度轉(zhuǎn)換成其他單位前,是否要把數(shù)據(jù)源先用 PI * 2 減一下,再標(biāo)準(zhǔn)化。
基準(zhǔn)角度(angleBase)
基準(zhǔn)度數(shù),為弧度值。
其實就是在角度轉(zhuǎn)換其他單位前,先把角度減一下這個 angleBase。
對于 AutoCAD,默認(rèn)向東的度數(shù)為 0。
插入時的縮放單位(insertUnits)
傳入時的縮放單位有相當(dāng)多,范圍也很廣,小到毫米,大到光年。
首先作為圖紙自己的單位。
當(dāng)我們選中一個實體,創(chuàng)建塊時,塊有一個 “塊單位” 屬性。假設(shè)當(dāng)前圖紙單位為 “厘米”,塊為 “毫米”,這個塊就會縮小為原來的 1/10。

這里的縮放比例和數(shù)據(jù)源不相等,是有一層轉(zhuǎn)換的:UI 層 scale = 數(shù)據(jù)層 scale * 單位因子。
單位因子是一個計算屬性,是塊單位轉(zhuǎn)圖紙單位的轉(zhuǎn)換比。比如塊單位為 mm,圖紙單位為 cm,那單位因子就是 0.1(1mm 等于 0.1 cm)。
如果設(shè)置的是比較特殊的單位 “無單位”,圖紙的單位會使用客戶端首選項設(shè)置的值,一般都是 “毫米”。

同時它作為外部參照插入其他圖紙時的 “塊單位”,效果同塊,只是不能修改單位。
另外外部參照插入時這個塊單位就寫死了,此時修改外部參照圖紙的單位,是不會影響的。
結(jié)尾
以上就是圖形單位這個命令的主要邏輯了。
其中的光源強(qiáng)度單位我不熟,用的也少,就不講了。























