CAD 使用 颜色 线型
使用顏色
用戶可以使用對象的 Color 或 ColorIndex 屬性為圖形中的單獨對象指定顏色。 ColorIndex 屬性接受一個數值從 0 到 256 的AutoCAD 顏色索引(ACI)值。Color 屬性通常用于指定一個 ACI 編號,真彩色或命名顏色給一個對象。若要修改 Color 屬性的值,請使用 Colors 命名空間下的 Color 對象。
Color 對象有 SetRGB 方法允許你從基于紅、綠和藍色之間相互混合組成的數百萬種顏色中挑選顏色。Color 對象也包含從指定顏色名字、顏色簿、顏色索引和顏色值獲得顏色的方法和屬性。
用戶也可以為圖層指定顏色。如果想讓對象從圖層中繼承顏色,請設置對象的顏色為 ByLayer ,或通過設置它的 ACI 值為 256。任意數量的對象和圖層都可以具有同一顏色編號。盡管在屏幕上看不到顏色,用戶還是可以指定筆式繪圖儀上的各種筆使用不同的顏色編號,或者使用顏色編號來標識圖形中的特定對象。
給對象指定顏色值
通過數據庫將顏色設置為當前的
用CECOLOR系統變量將顏色設置為當前的
給對象指定顏色值
使用四個不同的方法為每個圓指定不同的顏色。
實體.Color = Color.FromColorIndex(ColorMethod.ByAci, 1)實體.Color = Color.FromRgb(23, 54, 232)實體.Color = Color.FromNames("PANTONE Yellow 0131 C", _"PANTONE(R) pastel coated")實體.ColorIndex = 4通過數據庫將顏色設置為當前的
通過 Database 對象的 Cecolor 屬性設置一個顏色值為當前顏色值。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Colors<CommandMethod("SetColorCurrent")> _ Public Sub SetColorCurrent()'' 獲得當前文檔 Get the current documentDim acDoc As Document = Application.DocumentManager.MdiActiveDocument'' 設置當前顏色值 Set the current coloracDoc.Database.Cecolor = Color.FromColorIndex(ColorMethod.ByLayer, 256) End Sub用CECOLOR系統變量將顏色設置為當前的
Application.SetSystemVariable("CECOLOR", "1")使用線型
線型是重復的虛線、點和空格組成的圖案。復雜線型則是重復符號的圖案。要使用線型,必須先將其加載到圖形中。加載之前,LIN 庫文件中必須存在該線型的定義。要將線型加載到圖形中,請使用 Database 對象的 LoadLineTypeFile 成員方法。
注意不要將 AutoCAD 內部使用的線型與某些打印機提供的硬件線型相混淆。這兩種類型的虛線產生的效果相似。請勿同時使用這兩種類型,否則將產生不可預知的結果。
將線型加載到 AutoCAD 中
試圖從 acad.lin 文件中加載線型“CENTER”。如果該線型已存在或者文件不存在,則顯示相關消息。?
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices<CommandMethod("LoadLinetype")> _ Public Sub LoadLinetype()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()''以只讀方式打開線型表 Open the Linetype table for readDim acLineTypTbl As LinetypeTableacLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _OpenMode.ForRead)Dim sLineTypName As String = "Center"If acLineTypTbl.Has(sLineTypName) = False Then''加載中心線型 Load the Center LinetypeacCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")End If''保存更改并銷毀事務 Save the changes and dispose of the transactionacTrans.Commit()End Using End Sub將線型置為活動的
要使用線型,必須將其置為活動。所有新創建的對象都使用活動線型繪制。有兩種不同的方法可以應用一個線型到對象上:直接的或繼承的。你可以直接指定一個線型給一個對象來覆蓋圖層指定給它的線型。否則,若為對象設置為 ByLayer 描述的線型,它將繼承圖層的 Linetype 或 LinetypeId 屬性代表的線型。
注意依賴于外部參照的線型不能置為活動。?
有三個線型存在于每個圖形中:BYBLOCK、BYLAYER 和 CONTINUOUS。這些線型每一個都可以從線型表對象或使用 SymbolUtilityServices 對象的方法進行訪問。下列方法允許你獲得這些默認線形的對象編號:
- GetLinetypeByBlockId - 返回 BYBLOCK 線型的 ObjectID。
- GetLinetypeByLayerId - 返回 ByLayer 線型的 ObjectID。
- GetLinetypeContinuousId - 返回 CONTINUOUS 線型的 ObjectID。
給對象指定線型
通過數據庫將線型設置為當前的
通過CELTYPE系統變量將線型設置為當前的
給對象指定線型
創建一個圓,然后為其指定“Center” 線型。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("SetObjectLinetype")> _ Public Sub SetObjectLinetype()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開線型表 Open the Linetype table for readDim acLineTypTbl As LinetypeTableacLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _OpenMode.ForRead)Dim sLineTypName As String = "Center"If acLineTypTbl.Has(sLineTypName) = False ThenacCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")End If'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一個圓對象 Create a circle objectDim acCirc As Circle = New Circle()acCirc.SetDatabaseDefaults()acCirc.Center = New Point3d(2, 2, 0)acCirc.Radius = 1acCirc.Linetype = sLineTypNameacBlkTblRec.AppendEntity(acCirc)acTrans.AddNewlyCreatedDBObject(acCirc, True)''保存更改并銷毀事務 Save the changes and dispose of the transactionacTrans.Commit()End Using End Sub通過數據庫將線型設置為當前的
通過 Database 對象的 Celtype 屬性將一個線型設置成當前線型。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices<CommandMethod("SetLinetypeCurrent")> _ Public Sub SetLinetypeCurrent()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開線型表 Open the Linetype table for readDim acLineTypTbl As LinetypeTableacLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _OpenMode.ForRead)Dim sLineTypName As String = "Center"If acLineTypTbl.Has(sLineTypName) = True Then''設置Center 線型為當前線型 Set the linetype Center currentacCurDb.Celtype = acLineTypTbl(sLineTypName)''保存修改 Save the changesacTrans.Commit()End If'' 銷毀事務 Dispose of the transactionEnd Using End Sub通過CELTYPE系統變量將線型設置為當前的
Application.SetSystemVariable("CELTYPE", "Center")重命名線型
要重命名線型,請使用 Name 屬性。重命名線型時,只能重命名圖形中線型的定義。LIN 庫文件中的名稱并不會刷新以反映新的名稱。
刪除線型
要刪除線型,請使用 Erase 方法。在執行繪圖任務期間,可以隨時刪除線型,但不能刪除 BYLAYER 線型、BYBLOCK 線型、CONTINUOUS 線型、當前線型和依賴于外部參照的線型。另外,被塊定義參照的線型也不能刪除,即使沒有任何對象使用它們。
更改線型說明
線型可以具有與其關聯的說明,用于提供線型的 ASCII 表示。用戶可以使用 AsciiDescription 屬性來指定或修改線型的說明。
線型說明最多可以包含 47 個字符。說明可以是一個注釋,也可以使用一系列下劃線、點、虛線和空格簡單地表示出線型圖案。
更改一個線型的說明
本例修改當前線型的說明
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices<CommandMethod("ChangeLinetypeDescription")> _ Public Sub ChangeLinetypeDescription()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以寫的方式打開當前線型的線型表記錄 Open the Linetype table record of the current linetype for writeDim acLineTypTblRec As LinetypeTableRecordacLineTypTblRec = acTrans.GetObject(acCurDb.Celtype, _OpenMode.ForWrite)'' 修改當前線型的說明 Change the description of the current linetypeacLineTypTblRec.AsciiDescription = "Exterior Wall"''保存更改并銷毀事務 Save the changes and dispose of the transactionacTrans.Commit()End Using End Sub指定線型比例
可以為創建的對象指定線型比例。比例越小,每個繪圖單元生成的圖案重復次數越多。默認情況下,AutoCAD使用的全局線型比例為1.0,等于一個圖形單位。可以更改所有圖形對象和屬性參照的線型比例。
CELTSCALE系統變量為新創建的對象設置線型比例。LTSCALE系統變量更改現有對象和新對象的全局線型比例。對象的線型比例特性用于更改對象的線型比例。對象顯示時的線型比例基于單個對象的線型比例乘以全局線型比例。
更改一個對象的線型比例
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("SetObjectLinetypeScale")> _ Public Sub SetObjectLinetypeScale()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 保存當前線型 Save the current linetypeDim acObjId As ObjectId = acCurDb.Celtype'' 設置全局線型比例 Set the global linetype scaleacCurDb.Ltscale = 3'' 以只讀方式打開線型表 Open the Linetype table for readDim acLineTypTbl As LinetypeTableacLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _OpenMode.ForRead)Dim sLineTypName As String = "Border"If acLineTypTbl.Has(sLineTypName) = False ThenacCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")End If'' 設置 Border 線型為當前線型 Set the Border linetype currentacCurDb.Celtype = acLineTypTbl(sLineTypName)'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一個圓對象,然后設置它的線型比例為全尺寸的一半 Create a circle object and set its linetype'' scale to half of full sizeDim acCirc1 As Circle = New Circle()acCirc1.SetDatabaseDefaults()acCirc1.Center = New Point3d(2, 2, 0)acCirc1.Radius = 4acCirc1.LinetypeScale = 0.5acBlkTblRec.AppendEntity(acCirc1)acTrans.AddNewlyCreatedDBObject(acCirc1, True)'' 創建第二個圓對象 Create a second circle objectDim acCirc2 As Circle = New Circle()acCirc2.SetDatabaseDefaults()acCirc2.Center = New Point3d(12, 2, 0)acCirc2.Radius = 4acBlkTblRec.AppendEntity(acCirc2)acTrans.AddNewlyCreatedDBObject(acCirc2, True)'' 恢復最被的活動線型 Restore the original active linetypeacCurDb.Celtype = acObjId''保存更改并銷毀事務 Save the changes and dispose of the transactionacTrans.Commit()End Using End Sub保存和恢復圖層狀態
用戶可以在圖形中保存圖層狀態,以后再將其恢復。這樣可以很容易地返回到所有圖層在繪制或打印期間不同階段所作的特定設置。
圖層狀態包括圖層是否打開、凍結、鎖定、打印、是否在新視口中自動凍結,以及圖層的顏色、線型、線寬和打印樣式。用戶可以指定要保存的設置,還可以保存同一圖形中不同編組的設置。
LayerStateManager 用于保存和恢復圖層狀態。
了解AutoCAD如何保存圖層狀態
AutoCAD 將圖層設置保存在層表對象的擴展詞典中。用戶首次保存圖形中的圖層狀態時,AutoCAD 將執行以下操作:
- 在層表上創建一個擴展字典。
- 在擴展詞典中創建命名為 ACAD_LAYERSTATE 的 Dictionary 對象。
- 將圖形中每個圖層的特性存儲在 ACAD_LAYERSTATE 詞典的 XRecord 對象中。AutoCAD 將所有圖層設置存儲在 XRecord 中,但會標明用戶選擇保存的特定設置。恢復圖層設置時,AutoCAD 僅恢復用戶選擇保存的設置。
每次保存圖形中另一圖層設置時,AutoCAD 均將創建另一個描述保存設置的 XRecord 對象,并將 XRecord 存儲在 ACAD_LAYERSTATE 詞典中。下面的圖表說明了這個過程。
用戶使用圖層狀態時,不需要(也不應該)直接操作項目,而應該使用 LayerStateManager 對象的函數訪問字典。一旦用戶擁有了一個字典的引用,就可以遍歷字典中的每一個代表 DBDictionaryEntry 對象的項目。
列出圖形中保存的圖層設置
如果圖層狀態已經保存在當前的圖形中,則下面的代碼列出所有已經保存的圖層狀態名稱: ?
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices<CommandMethod("ListLayerStates")> _ Public Sub ListLayerStates()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()Dim acLyrStMan As LayerStateManageracLyrStMan = acCurDb.LayerStateManagerDim acDbDict As DBDictionaryacDbDict = acTrans.GetObject(acLyrStMan.LayerStatesDictionaryId(True), _OpenMode.ForRead)Dim sLayerStateNames As String = ""For Each acDbDictEnt As DBDictionaryEntry In acDbDictsLayerStateNames = sLayerStateNames & vbLf & acDbDictEnt.KeyNextApplication.ShowAlertDialog("The saved layer settings in this drawing are:" & _sLayerStateNames)'' 銷毀事務 Dispose of the transactionEnd Using End Sub?使用 LayerStateManager 管理圖層狀態
LayerStateManager 對象提供一組創建和操作保存圖層狀態的函數。使用下面的 LayerStateManager 函數處理圖層狀態:
- DeleteLayerState
- 刪除已保存的圖層狀態。
- ExportLayerState
- 將指定的已保存圖層狀態輸出到一個 LAS 文件。
- ImportLayerState
- 從指定的 LAS 文件輸入保存的圖層狀態。
- ImportLayerStateFromDb
- 從另外一個數據庫中輸入一個圖層狀態。
- RenameLayerState
- 重命名保存的圖層狀態。
- RestoreLayerState
- 恢復當前圖形中指定的圖層設置。
- SaveLayerState
- 保存指定圖層的狀態和屬性。
通過使用 Database 對象的 LayerManagerState 屬性可以訪問 Database 對象的 LayerStateManager 對象。?
- ?????? Public Sub ImportLayerState(fileName As String)
- ??????? Public Sub SetLayerStateMask(name As String, mask As LayerStateMasks)
- ??????? Public Sub DeleteLayerState(name As String)
- ??????? Public Sub RenameLayerState(name As String, newName As String)
- ??????? Public Sub ExportLayerState(nameToExport As String, fileName As String)
- ??????? Public Sub SaveLayerState(name As String, mask As LayerStateMasks, id As ObjectId)
- ??????? Public Sub ImportLayerStateFromDb(name As String, database As Database)
- ??????? Public Sub SetLayerStateDescription(name As String, description As String)
- ??????? Public Sub RestoreLayerState(name As String, id As ObjectId,?? undefinedLayerStatePolicy As Integer, clientMask As LayerStateMasks)
?
總結
以上是生活随笔為你收集整理的CAD 使用 颜色 线型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉引论及数字成像系统
- 下一篇: HTTP常用参数对照表