明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: roycecim

[图元] [求助]如何设置块参照的颜色?

  [复制链接]
发表于 2009-10-20 21:08 | 显示全部楼层

Cad帮助中的解释

可以使用颜色直观地标识对象。可以通过图层指定对象的颜色,也可以不依赖图层而明确地指定颜色。

可以通过图层指定对象的颜色,也可以不依赖图层而明确地指定颜色。通过图层指定颜色可以在图形中轻易识别每个图层。明确地指定颜色会在同一图层的对象之间产生其他的差别。颜色也可用作一种为颜色相关打印指示线宽的方式。

为对象指定颜色时,可以使用多种调色板:

  • AutoCAD 颜色索引 (ACI)
  • 真彩色®、PANTONE®
  • RAL™ Classic and RAL Design 配色系统
  • DIC® Color Guide
  • 从已输入的配色系统取色。

ACI 颜色

ACI 颜色是 AutoCAD 中使用的标准颜色。每一种颜色用一个 ACI 编号(1 到 255 之间的整数)标识。标准颜色名称仅适用于 1 到 7 号颜色。颜色指定如下:1 红、2 黄、3 绿、4 青、5 蓝、6 洋红、7 白/黑。

真彩色

真彩色使用 24 位颜色定义来显示 1600 万种颜色。指定真彩色时,可以使用 RGB 或 HSL 颜色模式。如果使用 RGB 颜色模式,则可以指定颜色的红、绿、蓝组合;如果使用 HSL 颜色模式,则可以指定颜色的色调、饱和度和亮度要素。

配色系统

此程序包括几个标准 Pantone 配色系统。也可以输入其他配色系统,例如 DIC 颜色指南或 RAL 颜色集。输入用户定义的配色系统可以进一步扩充可供使用的颜色选择。

注意Pantone 为 Architectural & Interiors Cotton 和 Architectural & Interiors Paper 配色系统提供了新的颜色定义。如果您曾在 AutoCAD 2006 以前的版本中使用过这些配色系统,您会发现这些颜色发生了细微的变化。

通过使用“选项”对话框中的“文件”选项卡,可以在系统中安装配色系统。加载配色系统后,即可从配色系统中选择颜色并将其应用到图形中的对象。

所有对象都使用当前颜色创建,该颜色显示在“特性”工具栏上的“颜色”控件中。也可以使用“颜色”控件或“选择颜色”对话框设置当前颜色。

如果当前颜色设置为“随层”,则将使用指定给当前图层的颜色来创建对象。如果不希望当前颜色成为当前图层的指定颜色,可以指定其他颜色。

如果当前颜色设置为“随块”,则使用 7 号颜色(白色或黑色)来创建对象,直到将对象编组为块。将块插入到图形中时,它采用当前的颜色设置。

 楼主| 发表于 2009-10-21 08:58 | 显示全部楼层
  1. /// <summary>
  2.         /// 改方法用于向当前图形中插入块
  3.         /// </summary>
  4.         /// <param name="dwgName">图纸的名称(除去扩展名)</param>
  5.         /// <param name="point">插入点</param>
  6.         /// <param name="angle">旋转角度</param>
  7.         /// <param name="time">时间戳</param>
  8.         /// <param name="direction">所在端子排的边</param>
  9.         /// <param name="side">方向</param>
  10.         private void InsertDwg(string dwgName,Point3d point,double angle,string time,string direction,string side)
  11.         {
  12.             string dir = direction.Substring(0,5);
  13.             //刷新屏幕
  14.             if (Application.DocumentManager.Count == 0)
  15.             {
  16.                 SimpleDialog.ShowWarningDialog("请先打开一个图纸文档再进行操作");
  17.                 return;
  18.             }
  19.             Document doc = Application.DocumentManager.MdiActiveDocument;
  20.             Database db = doc.Database;
  21.             Editor ed = doc.Editor;
  22.             string blockName = "GYCAD_TerminalBom_" + dwgName;
  23.             string dwgPath = DirConfig.SystemDwgDirectory + dwgName + ".dwg";
  24.             using (Database blockDB = new Database(false, true))
  25.             {
  26.                 //读取图形文件
  27.                 try
  28.                 {
  29.                     blockDB.ReadDwgFile(dwgPath, FileShare.Read, true, null);
  30.                 }
  31.                 catch
  32.                 { }
  33.                 ObjectId dwgId = new ObjectId();
  34.                 try
  35.                 {
  36.                     dwgId = db.Insert(blockName, blockDB, true);
  37.                 }
  38.                 catch
  39.                 {
  40.                     ed.WriteMessage("打开图纸错误");
  41.                     return;
  42.                 }
  43.                 using (Transaction trans = doc.TransactionManager.StartTransaction())
  44.                 {
  45.                     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite, false);
  46.                     ObjectId blockId = dwgId;
  47.                     BlockReference br = new BlockReference(point, blockId);
  48.                     if (angle == 0.0)
  49.                     {
  50.                         if (dir == "right")
  51.                         {
  52.                             if (side == "dowm")
  53.                             {
  54.                                 br.Rotation = angle;
  55.                             }
  56.                             else if (side == "up")
  57.                             {
  58.                                 if (dwgName == "Triangle")
  59.                                 {
  60.                                     br.Rotation = angle + Math.PI * 3 / 2;
  61.                                 }
  62.                                 else
  63.                                 {
  64.                                     br.Rotation = angle + Math.PI;
  65.                                 }
  66.                             }
  67.                         }
  68.                         else if (dir == "left_")
  69.                         {
  70.                             if (side == "down")
  71.                             {
  72.                                 if (dwgName == "Triangle")
  73.                                 {
  74.                                     br.Rotation = angle + Math.PI / 2;
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                     br.Rotation = angle;
  79.                                 }
  80.                             }
  81.                             else if (side == "up")
  82.                             {
  83.                                 if (dwgName == "Triangle")
  84.                                 {
  85.                                     br.Rotation = angle + Math.PI;
  86.                                 }
  87.                                 else
  88.                                 {
  89.                                     br.Rotation = angle + Math.PI;
  90.                                 }
  91.                             }
  92.                         }
  93.                     }
  94.                     RegAppTable reg = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForWrite);
  95.                     if (!reg.Has(blockName))
  96.                     {
  97.                         RegAppTableRecord app = new RegAppTableRecord();
  98.                         app.Name = blockName;
  99.                         reg.Add(app);
  100.                         trans.AddNewlyCreatedDBObject(app, true);
  101.                     }
  102.                     TypedValue[] blockValues = new TypedValue[]{
  103.                         new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataRegAppName),blockName),
  104.                         new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),time),
  105.                         new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),direction),
  106.                         new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),side)
  107.                     };
  108.                     ResultBuffer rb = new ResultBuffer(blockValues);
  109.                     try
  110.                     {
  111.                         br.XData = rb;
  112.                         Point3d pos = br.Position;
  113.                         br.Position = point;
  114.                         br.Color = Color.FromColorIndex(ColorMethod.ByBlock, color.ColorIndex);
  115.                     }
  116.                     catch
  117.                     { }
  118.                     BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  119.                     btr.AppendEntity(br);
  120.                     trans.AddNewlyCreatedDBObject(br, true);
  121.                     trans.Commit();
  122.                 }
  123.                 blockDB.Dispose();
  124.             }
  125.         }
上面是我向图纸中插入外部块的代码,直接 br.Color = Color.FromColorIndex(ColorMethod.ByBlock, color.ColorIndex); 是不可以的,应该在什么地方改动呢?
发表于 2009-10-21 09:38 | 显示全部楼层

ByBlock是用在块定义内的实体的,不是用在块参照的

仔细看看ahlzl斑竹的回帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-13 00:36 , Processed in 0.129380 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表