先看一下系統自帶的線型文件acadiso.lin: 因為STANDARD是每個CAD文檔必須要有的文字樣式,同樣的,如果想更改系統自定義的帶文字的線型樣式,需要更改STANDARD 需要註意的是,文字(管線)兩側的空白並不對稱,這是因為文字(管線)或圖形的長度實際是占用了下一個段落的長度, 這裡就是 ...
先看一下系統自帶的線型文件acadiso.lin:
*HOT_WATER_SUPPLY,Hot water supply ---- HW ---- HW ---- HW ---- A,12.7,-5.08,["HW",STANDARD,S=2.54,U=0.0,X=-2.54,Y=-1.27],-5.08
* | 線型文件中,每種線型必須以(*)開頭 | |
HOT_WATER_SUPPLY | 線型名稱 | |
Hot water supply ---- HW ---- HW ---- HW ---- | 線型描述 | |
A | 對齊方式,必須的,也是唯一的 | |
12.7 | 起始為12.7個單位長的實線 | |
-5.08 | 接上為長5.08的空白 | 可以看出:正數為實線,虛線為空白 |
[] | 內為圖案定義 | 這裡是文字圖案 |
“HW” | 文字內容 | |
STANDARD | 文字樣式,需要註意的是,如果文檔中未發現文字樣式,會發生錯誤(eKeyNotFound),建議設置成STANDARD |
因為STANDARD是每個CAD文檔必須要有的文字樣式,同樣的,如果想更改系統自定義的帶文字的線型樣式,需要更改STANDARD |
S=2.54 | 要用於文字樣式的縮放比例與線型的比例相關。文字樣式的高度需乘以縮放比例。如果高度為 0,則 S=值的值本身用作高度 | |
U=0.0 | U = 值、R = 值或 A = 值。U= 指定正立或易於閱讀的文字。R= 指定相對於直線的相對或相切旋轉。A= 指定文字相對於原點的絕對旋轉;即所有文字不論其相對於直線的位置如何,都將進行相同的旋轉 | 旋轉是圍繞基線和實際大寫高度之間的中點進行的 |
X=-2.54 | 文字線上型的 X 軸方向上沿直線的移動。使用該欄位控制文字與前面提筆或落筆筆劃間的距離 | 該值不能按照 S=值定義的縮放比例進行縮放,但是它可以根據線型進行縮放 |
Y=-1.27 | 文字線上型的 Y 軸方向垂直於該直線的移動。使用此欄位控制文字相對於直線的垂直對齊。 | 該值不能按照 S=值定義的縮放比例進行縮放,但是它可以根據線型進行縮放。 |
-5.08 | 以長5.08的空白結束 |
|
[CommandMethod("CTL")] public void CreateTextLinetype() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; Transaction tr = db.TransactionManager.StartTransaction(); using (tr) { TextStyleTable tt = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead); LinetypeTable lt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite); LinetypeTableRecord ltr = new LinetypeTableRecord(); ltr.Name = "管線"; ltr.AsciiDescription = "管線線型 ---- 管線 ---- 管線 ---- 管線 ----"; ltr.PatternLength = 1.3;//所有實線+空白的長度總和 ltr.NumDashes = 3;//所有實線+空白的段落總和 //第一段 ltr.SetDashLengthAt(0, 0.5); //第二段 ltr.SetDashLengthAt(1, -0.4); ltr.SetShapeStyleAt(1, tt["STANDARD"]); ltr.SetShapeNumberAt(1, 0);//圖案在圖形文件中的編號,由於這裡是文字,可以省略該設置 ltr.SetShapeScaleAt(1, 0.1); ltr.SetTextAt(1, "管線"); ltr.SetShapeRotationAt(1, 0); ltr.SetShapeOffsetAt(1, new Vector2d(0, -0.05));//X軸不對,Y軸向下移動0.05個單位 //第三段 ltr.SetDashLengthAt(2, -0.4); // 添加新線型到線型表 ObjectId ltId = lt.Add(ltr); tr.AddNewlyCreatedDBObject(ltr, true); tr.Commit(); } }
需要註意的是,文字(管線)兩側的空白並不對稱,這是因為文字(管線)或圖形的長度實際是占用了下一個段落的長度,
這裡就是占用了第三段空白0.4的長度一部分,所以該段空白長度實際小於0.4。
我們向來提倡對稱美,那麼應該怎麼處理使文字兩側的空白看起來是對稱的呢,思路是用包圍圈計算出文字(管線)的單位長度,
然後第三段在0.4的基礎上加上文字(管線)的長度即可。
改善後效果如下: