03-05 创建和编辑AutoCAD实体(五) 使用图层、颜色和线型(2)使用颜色

 

2、Work with Colors使用颜色

You can assign a color to an individual object in a drawing using its Color or ColorIndex property. The ColorIndex property accepts an AutoCAD Color Index (ACI) value as a numeric value of 0 - 256. The Color property is used to assign an ACI number, true color, or color book color to an object. To change the value of the Color property, you use the Color object which is under the Colors namespace.

我们可以使用Color属性或ColorIndex属性给图形中的每个对象设置颜色。ColorIndex属性接受0-256的AutoCAD颜色索引值。Color属性则可以使用ACI值、真彩色值、或配色系统值来给对象设置颜色。我们使用Colors命名空间的Color对象来修改Color属性的值。

The Color object has a SetRGB method which allows you to choose from millions of color combinations based on mixing a red, green and blue color value together. The Color object also contains methods and properties for specifying color names, color books, color indexes, and color values.

Color对象提供了一个SetRGB方法,允许我们从数百万个红绿蓝颜色组合中选择颜色。Color对象还包含指定颜色名称、配色系统、颜色索引、及颜色值的方法和属性。

You can also assign colors to layers. If you want an object to inherit the color of the layer it is on, set the object’s color to ByLayer by setting its ACI value to 256. Any number of objects and layers can have the same color number. You can assign each color number to a different pen on a pen plotter or use the color numbers to identify certain objects in the drawing, even though you cannot see the colors on your screen.

我们还可以给图层设置颜色。如果要让对象继承所在图层的颜色,只需将对象的颜色设置为ByLayer即可(通过将ACI值设置为256实现)。不同的对象和图层可以拥有相同的颜色值。我们可以给彩笔绘图仪的不同的彩笔赋予一个颜色值,或者在图形中使用颜色值表示特定的对象,即便我们在屏幕上看不到所设的颜色。

For more information about working with colors, see “Work with Colors” in the AutoCAD User's Guide.

关于使用颜色的更多内容,见AutoCAD用户指南的“使用颜色”。

Topics in this section

·         Assign a color value to an object 给对象颜色赋值

·         Make a color current through the database 通过数据库设置当前颜色

·         Make a color current with the CECOLOR system variable 使用系统变量CECOLOR设置当前颜色

 

2.1、Assign a color value to an object给对象颜色赋值

The following example creates 4 circles and assigns a different color to each circle using four different methods.

下面例子创建4个圆,并使用四种不同方法为每个圆指定不同的颜色。

VB.NET

Imports Autodesk.AutoCAD.Runtime

Imports Autodesk.AutoCAD.ApplicationServices

Imports Autodesk.AutoCAD.DatabaseServices

Imports Autodesk.AutoCAD.Geometry

Imports Autodesk.AutoCAD.Colors

 

<CommandMethod("SetObjectColor")> _

Public Sub SetObjectColor()

  '' 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()

 

      '' Define an array of colors for the layers

      Dim acColors(2) As Color

      acColors(0) = Color.FromColorIndex(ColorMethod.ByAci, 1)

      acColors(1) = Color.FromRgb(23, 54, 232)

      acColors(2) = Color.FromNames("PANTONE Yellow 0131 C", _

                                    "PANTONE(R) pastel coated")

 

      '' 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 assign it the ACI value of 4

      Dim acPt As Point3d = New Point3d(0, 3, 0)

      Dim acCirc As Circle = New Circle()

      acCirc.Center = acPt

      acCirc.Radius = 1

      acCirc.ColorIndex = 4

 

      acBlkTblRec.AppendEntity(acCirc)

      acTrans.AddNewlyCreatedDBObject(acCirc, True)

 

      Dim nCnt As Integer = 0

 

      While (nCnt < 3)

          '' Create a copy of the circle

          Dim acCircCopy As Circle

          acCircCopy = acCirc.Clone()

 

          '' Shift the copy along the Y-axis

          acPt = New Point3d(acPt.X, acPt.Y + 3, acPt.Z)

          acCircCopy.Center = acPt

 

          '' Assign the new color to the circle

          acCircCopy.Color = acColors(nCnt)

 

          acBlkTblRec.AppendEntity(acCircCopy)

          acTrans.AddNewlyCreatedDBObject(acCircCopy, True)

 

          nCnt = nCnt + 1

      End While

 

      '' Save the changes and dispose of the transaction

      acTrans.Commit()

  End Using

End Sub

 

C#

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Colors;

 

[CommandMethod("SetObjectColor")]

public static void SetObjectColor()

{

  // Get the current document and database获取当前文档和数据库

  Document acDoc = Application.DocumentManager.MdiActiveDocument;

  Database acCurDb = acDoc.Database;

 

  // Start a transaction启动事务

  using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())

  {

      // Define an array of colors for the layers定义颜色数组

      Color[] acColors = new Color[3];

      acColors[0] = Color.FromColorIndex(ColorMethod.ByAci, 1);

      acColors[1] = Color.FromRgb(23, 54, 232);

      acColors[2] = Color.FromNames("PANTONE Yellow 0131 C",

                                    "PANTONE(R) pastel coated");

 

      // Open the Block table for read以读打开块表

      BlockTable acBlkTbl;

      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,

                                   OpenMode.ForRead) as BlockTable;

 

      // Open the Block table record Model space for write以写打开块表记录模型空间

      BlockTableRecord acBlkTblRec;

      acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],

                                      OpenMode.ForWrite) as BlockTableRecord;

 

      // Create a circle object and assign it the ACI value of 4创建一个圆并将其ACI值设为4

      Point3d acPt = new Point3d(0, 3, 0);

      Circle acCirc = new Circle();

      acCirc.Center = acPt;

      acCirc.Radius = 1;

      acCirc.ColorIndex = 4;

 

      acBlkTblRec.AppendEntity(acCirc);

      acTrans.AddNewlyCreatedDBObject(acCirc, true);

 

      int nCnt = 0;

 

      while (nCnt < 3)

      {

          // Create a copy of the circle创建圆拷贝

          Circle acCircCopy;

          acCircCopy = acCirc.Clone() as Circle;

 

          // Shift the copy along the Y-axis沿Y轴移动复本

          acPt = new Point3d(acPt.X, acPt.Y + 3, acPt.Z);

          acCircCopy.Center = acPt;

 

          // Assign the new color to the circle给复本设置新颜色

          acCircCopy.Color = acColors[nCnt];

 

          acBlkTblRec.AppendEntity(acCircCopy);

          acTrans.AddNewlyCreatedDBObject(acCircCopy, true);

 

          nCnt = nCnt + 1;

      }

 

      // Save the changes and dispose of the transaction保存修改,关闭事务

      acTrans.Commit();

  }

}

VBA/ActiveX Code Reference

Sub SetObjectColor()

    ' Define an array of colors

    Dim colorObj(2) As New AcadAcCmColor

 

    colorObj(0).ColorMethod = acColorMethodByACI

    colorObj(0).ColorIndex = acRed

    Call colorObj(1).SetRGB(23, 54, 232)

    Call colorObj(2).SetColorBookColor("PANTONE(R) pastel coated", _

                                       "PANTONE Yellow 0131 C")

 

    ' Define the center point of the circle

    Dim centerPt(0 To 2) As Double

    centerPt(0) = 0: centerPt(1) = 3: centerPt(2) = 0

 

    ' Create a new circle and assign it the ACI value of 4

    Dim circleObj As AcadCircle

    Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPt, 1)

    circleObj.color = acCyan

 

    Dim nCnt As Integer

 

    ' Create 3 more circles

    While (nCnt < 3)

       ' Create a copy of the circle

       Dim circleObjCopy As AcadCircle

       Set circleObjCopy = circleObj.Copy

 

       ' Shift the copy along the Y-axis

       centerPt(1) = centerPt(1) + 3

       circleObjCopy.Center = centerPt

 

       ' Assign the new color to the circle

       circleObjCopy.TrueColor = colorObj(nCnt)

 

       nCnt = nCnt + 1

    Wend

End Sub

 

2.2、Make a color current through the database通过数据库设置当前颜色

This example sets a color current through the Database object with the Cecolor property.

本例通过Database对象的Cecolor属性将颜色设置为当前。

VB.NET

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

 

C#

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Colors;

 

[CommandMethod("SetColorCurrent")]

public static void SetColorCurrent()

{

  // Get the current document获取当前文档

  Document acDoc = Application.DocumentManager.MdiActiveDocument;

 

  // Set the current color设置当前颜色

  acDoc.Database.Cecolor = Color.FromColorIndex(ColorMethod.ByLayer, 256);

}

 

2.3、Make a color current with the CECOLOR system variable 使用系统变量CECOLOR设置当前颜色

This example sets the color Red current with the CECOLOR system variable.

本例使用系统变量CECOLOR将当前颜色设置为红色(Red)。

VB.NET

Application.SetSystemVariable("CECOLOR", "1")

C#

Application.SetSystemVariable("CECOLOR", "1");

VBA/ActiveX Code Reference

ThisDrawing.SetVariable "CECOLOR", "1"

 

 

附:关于系统变量CECOLOR

 (摘自《AutoCAD用户指南》)

类型: 字符串

保存位置: 图形

初始值: BYLAYER

功能:设置新对象的颜色。

有效值包括:

1、BYLAYER 或 BYBLOCK ;

2、AutoCAD 颜色索引 (ACI):介于 1 和 255 之间的整数值,或前七种颜色中的一种颜色名称 (1 红、2 黄、3 绿、4 青、5 蓝、6 洋红、7 白/黑);

3、真彩色:介于 000 和 255 之间的 RGB 或 HSL 值,格式为“RGB:130,200,240”;

4、配色系统:标准 PANTONE 或自定义配色系统、DIC 颜色手册或 RAL 颜色集中的文字,例如“DIC COLOR GUIDE(R)$DIC 43”;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值