AutoCAD 產(chǎn)品設計:文字樣式的字高為 0 的邏輯
文字樣式,是一個 描述文字的樣式的配置對象。創(chuàng)建文字實體時,需要設置對應的文字樣式(通過 id 的方式指定)。
為方便描述,后面會將 “字體樣式” 簡寫為 “字樣”。
AutoCAD 默認有一個名為 Standard 的標準文樣,它不能被刪除,這樣保證有個兜底字樣可以用。然后我們可以創(chuàng)建新的字樣,將某個字樣設置為當前。
我們看看文樣的設置彈窗。
字樣有很多屬性,像是文字樣式名稱、字體(shx 字體)、大字體、是否使用 shx、字高、是否為當前、是否為標準字樣、注釋性、寬度因子、傾斜角度、顛倒、反向、垂直等等。
屬性很多,本文只聚焦 字高(textSize) 這一個屬性。另外還有一個讓我無語的隱藏屬性,后面會說。
當創(chuàng)建的實體涉及到文字,比如多行文字、文字(單行)、標注、引線時,里面的 文字實體會關(guān)聯(lián)特定的字樣,使用這個字樣的樣式,類似 CSS 的樣式的邏輯。
字體高度
文字實體的 “文字高度” 其實和字樣的 “高度” 重復了,這里就出現(xiàn)了優(yōu)先級的概念,到底渲染時應該用哪個。
默認情況下,文字的 “文字高度” 的優(yōu)先級高于字樣的 “高度” 。
比如一個文字的字高是 6,使用的字樣的字高是 2.5,最后渲染的字體高度就是 6。
字樣字高為 0 的特殊情況
離譜的事情是,字樣的字高可以為 0,這導致了多種情況。
根據(jù)輸入的值設置文字高度。輸入大于 0.0 的高度將自動為此樣式設置文字高度。
如果輸入 0.0,則文字高度將默認為上次使用的文高度,或使用存儲在圖形樣板文件中的值。
當我們將字樣字高設置為 0 時,原來的值會保存下來,保存在一個 隱藏屬性 “原字高”(priorSize)上。
比如,你給字樣字高設置為 2.5 保存,然后改成 0,保存。此時字樣的 “字高” 是 0,“原字高” 是 2.5。
作為一名程序員,根據(jù)我多年的經(jīng)驗,我猜大概是做了新功能,以前的數(shù)據(jù)結(jié)構(gòu)不合適了,但為了兼容舊版本,只好在原來的基礎上去魔改。
這個 0 并不是沒有意義的,接下來會說說字樣字高為 0 的情況下在不同場景下的表現(xiàn)。
多行文字
創(chuàng)建多行文字,文字會使用一個默認字高,這個值會從 當前字樣 中獲取。
這個默認的字高,其值為:
- 如果當前字樣字高不為 0,使用字樣字高;
- 如果不為 0,使用字樣的 “原字高”。
創(chuàng)建好的多行文字,使用自己的字高作為渲染字高。
文字(單行)
創(chuàng)建文字,也就是單行文字。
- 如果當前字樣字高不為 0,字高不需要額外指定,創(chuàng)建文字命令的第二個階段 “指定高度” 會直接跳過;
- 如果是 0,需要指定高度,當然這個高度會用 “原高度” 作為默認值。
創(chuàng)建好的多行文字,使用自己的字高作為渲染字高。
標注樣式
創(chuàng)建一個標注,它的 默認字樣和字體高度 來自 當前標注樣式。
我們線講講標注樣式。
標注樣式里也有個 "文字 > 文字樣式", "文字 > 文字高度"。
設定當前標注文字樣式的高度。在文本框中輸入值。如果在“文字樣式”中將文字高度設定為固定值 (即文字樣式高度大于 0),則該高度將替代此處設定的文字高度。如果要使用在”文字”選項卡上沒定的高度,請確?!拔淖謽邮健敝械奈淖指叨仍O定為 0。(DIMTXT 系統(tǒng)變量)
當標注樣式的字樣字高為非 0 值時,這個值會蓋住標注樣式的字高輸入框,且不可編輯;
如果標注樣式的字樣字高為 0,那你可以隨意編輯文字高度。
標注
標注的話,實際渲染的字高。
- 如果標注的字樣字體不為 0,使用字樣高度;
- 如果標注的字樣字體為 0,使用標準自己的字高。
標注雖然也關(guān)聯(lián)標注樣式,但是標注里面的字樣和字高只會在創(chuàng)建新樣式使用。對于一個已經(jīng)創(chuàng)建好的標注,標注樣式的字樣和字高并不參與計算。
另外注意標注有緩存,將字樣的字高修改后,已經(jīng)繪制的標注不會立刻改變,你需要操作標注,比如雙擊標注的文字才會進行重渲染。我不是很懂為什么。
多重引線樣式
多重引線樣式基本上和標注樣式一樣,就不說了。
另外多重引線實體雖然形態(tài)上和標注很像,但渲染字高邏輯并不同,會使用自己的字高,不使用字樣字高。
結(jié)尾
字高為 0 這個特例,在不同的實體有不同的表現(xiàn),希望大家能好好掌握。