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 document
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
 
  '' 设置当前颜色值  Set the current color
  acDoc.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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      ''以只读方式打开线型表    Open the Linetype table for read
      Dim acLineTypTbl As LinetypeTable
      acLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _
                                       OpenMode.ForRead)
 
      Dim sLineTypName As String = "Center"
 
      If acLineTypTbl.Has(sLineTypName) = False Then
          ''加载中心线型  Load the Center Linetype
          acCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")
      End If
 
      ''保存更改并销毁事务   Save the changes and dispose of the transaction
      acTrans.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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' 以只读方式打开线型表  Open the Linetype table for read
      Dim acLineTypTbl As LinetypeTable
      acLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _
                                       OpenMode.ForRead)
 
      Dim sLineTypName As String = "Center"
 
      If acLineTypTbl.Has(sLineTypName) = False Then
          acCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")
      End If
 
      '' 以只读方式打开块表   Open the Block table for read
      Dim acBlkTbl As BlockTable
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                   OpenMode.ForRead)
 
      '' 以写方式打开模型空间块表记录   Open the Block table record Model space for write
      Dim acBlkTblRec As BlockTableRecord
      acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                      OpenMode.ForWrite)
 
      '' 创建一个圆对象  Create a circle object
      Dim acCirc As Circle = New Circle()
      acCirc.SetDatabaseDefaults()
      acCirc.Center = New Point3d(2, 2, 0)
      acCirc.Radius = 1
      acCirc.Linetype = sLineTypName
 
      acBlkTblRec.AppendEntity(acCirc)
      acTrans.AddNewlyCreatedDBObject(acCirc, True)
 
      ''保存更改并销毁事务   Save the changes and dispose of the transaction
      acTrans.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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' 以只读方式打开线型表  Open the Linetype table for read
      Dim acLineTypTbl As LinetypeTable
      acLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _
                                       OpenMode.ForRead)
 
      Dim sLineTypName As String = "Center"
 
      If acLineTypTbl.Has(sLineTypName) = True Then
          ''设置Center 线型为当前线型  Set the linetype Center current
          acCurDb.Celtype = acLineTypTbl(sLineTypName)
 
          ''保存修改   Save the changes
          acTrans.Commit()
      End If
 
      '' 销毁事务  Dispose of the transaction
  End 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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' 以写的方式打开当前线型的线型表记录   Open the Linetype table record of the current linetype for write
      Dim acLineTypTblRec As LinetypeTableRecord
      acLineTypTblRec = acTrans.GetObject(acCurDb.Celtype, _
                                          OpenMode.ForWrite)
 
      '' 修改当前线型的说明   Change the description of the current linetype
      acLineTypTblRec.AsciiDescription = "Exterior Wall"
 
      ''保存更改并销毁事务   Save the changes and dispose of the transaction
      acTrans.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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' 保存当前线型   Save the current linetype
      Dim acObjId As ObjectId = acCurDb.Celtype
 
      '' 设置全局线型比例   Set the global linetype scale
      acCurDb.Ltscale = 3
 
      '' 以只读方式打开线型表  Open the Linetype table for read
      Dim acLineTypTbl As LinetypeTable
      acLineTypTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _
                                       OpenMode.ForRead)
 
      Dim sLineTypName As String = "Border"
 
      If acLineTypTbl.Has(sLineTypName) = False Then
          acCurDb.LoadLineTypeFile(sLineTypName, "acad.lin")
      End If
 
      '' 设置 Border 线型为当前线型   Set the Border linetype current
      acCurDb.Celtype = acLineTypTbl(sLineTypName)
 
      '' 以只读方式打开块表   Open the Block table for read
      Dim acBlkTbl As BlockTable
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                   OpenMode.ForRead)
 
      '' 以写方式打开模型空间块表记录   Open the Block table record Model space for write
      Dim acBlkTblRec As BlockTableRecord
      acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                      OpenMode.ForWrite)
 
      '' 创建一个圆对象,然后设置它的线型比例为全尺寸的一半   Create a circle object and set its linetype
      '' scale to half of full size
      Dim acCirc1 As Circle = New Circle()
      acCirc1.SetDatabaseDefaults()
      acCirc1.Center = New Point3d(2, 2, 0)
      acCirc1.Radius = 4
      acCirc1.LinetypeScale = 0.5
 
      acBlkTblRec.AppendEntity(acCirc1)
      acTrans.AddNewlyCreatedDBObject(acCirc1, True)
 
      '' 创建第二个圆对象   Create a second circle object
      Dim acCirc2 As Circle = New Circle()
      acCirc2.SetDatabaseDefaults()
      acCirc2.Center = New Point3d(12, 2, 0)
      acCirc2.Radius = 4
 
      acBlkTblRec.AppendEntity(acCirc2)
      acTrans.AddNewlyCreatedDBObject(acCirc2, True)
 
      '' 恢复最被的活动线型   Restore the original active linetype
      acCurDb.Celtype = acObjId
 
      ''保存更改并销毁事务   Save the changes and dispose of the transaction
      acTrans.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 database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  ''启动一个事务   Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      Dim acLyrStMan As LayerStateManager
      acLyrStMan = acCurDb.LayerStateManager
 
      Dim acDbDict As DBDictionary
      acDbDict = acTrans.GetObject(acLyrStMan.LayerStatesDictionaryId(True), _
                                   OpenMode.ForRead)
 
      Dim sLayerStateNames As String = ""
 
      For Each acDbDictEnt As DBDictionaryEntry In acDbDict
          sLayerStateNames = sLayerStateNames & vbLf & acDbDictEnt.Key
      Next
 
      Application.ShowAlertDialog("The saved layer settings in this drawing are:" & _
                                  sLayerStateNames)
 
      '' 销毁事务  Dispose of the transaction
  End 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)

Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
 
Dim acLyrStMan As LayerStateManager
acLyrStMan = acCurDb.LayerStateManager

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值