雪山飞狐_lzh 发表于 2009-10-20 21:08:00

<p>Cad帮助中的解释</p><p class="blurb">可以使用颜色直观地标识对象。可以通过图层指定对象的颜色,也可以不依赖图层而明确地指定颜色。</p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33511"></a>可以通过图层指定对象的颜色,也可以不依赖图层而明确地指定颜色。通过图层指定颜色可以在图形中轻易识别每个图层。明确地指定颜色会在同一图层的对象之间产生其他的差别。颜色也可用作一种为颜色相关打印指示线宽的方式。 </p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33512"></a>为对象指定颜色时,可以使用多种调色板: </p><a name="WS1a9193826455f5ffa23ce210c4a30acaf-72f5"></a><ul><li>AutoCAD 颜色索引 (ACI) </li><li>真彩色<sup>&reg;</sup>、PANTONE<sup>&reg;</sup>
                </li><li>RAL™ Classic and RAL Design 配色系统 </li><li>DIC<sup>&reg;</sup> Color Guide </li><li>从已输入的配色系统取色。 </li></ul><div class="section"><a name="WSfacf1429558a55de8b299cffc1fb20d33477"></a><p class="section_title_h1"><a name="TOC_ENTRY__d0e34100"></a><a name="WS73099cc142f487551f9567310e4f54b960-7d74"></a>ACI 颜色</p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33513"></a>ACI 颜色是 AutoCAD 中使用的标准颜色。每一种颜色用一个 ACI 编号(1 到 255 之间的整数)标识。标准颜色名称仅适用于 1 到 7 号颜色。颜色指定如下:1 红、2 黄、3 绿、4 青、5 蓝、6 洋红、7 白/黑。</p></div><div class="section"><a name="WSfacf1429558a55de8b299cffc1fb20d33478"></a><p class="section_title_h1"><a name="TOC_ENTRY__d0e34109"></a><a name="WS73099cc142f487551f9567310e4f54b960-7d73"></a>真彩色</p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33514"></a>真彩色使用 24 位颜色定义来显示 1600 万种颜色。指定真彩色时,可以使用 RGB 或 HSL 颜色模式。如果使用 RGB 颜色模式,则可以指定颜色的红、绿、蓝组合;如果使用 HSL 颜色模式,则可以指定颜色的色调、饱和度和亮度要素。</p></div><div class="section"><a name="WSfacf1429558a55de8b299cffc1fb20d33479"></a><p class="section_title_h1"><a name="TOC_ENTRY__d0e34116"></a><a name="WS73099cc142f487551f9567310e4f54b960-7d72"></a>配色系统</p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33515"></a>此程序包括几个标准 Pantone 配色系统。也可以输入其他配色系统,例如 DIC 颜色指南或 RAL 颜色集。输入用户定义的配色系统可以进一步扩充可供使用的颜色选择。 </p><div><div class="note-note">注意Pantone 为 Architectural &amp; Interiors Cotton 和 Architectural &amp; Interiors Paper 配色系统提供了新的颜色定义。如果您曾在 AutoCAD 2006 以前的版本中使用过这些配色系统,您会发现这些颜色发生了细微的变化。</div></div><p><a name="WSfacf1429558a55de8b299cffc1fb20d33516"></a>通过使用“选项”对话框中的“文件”选项卡,可以在系统中安装配色系统。加载配色系统后,即可从配色系统中选择颜色并将其应用到图形中的对象。 </p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33517"></a>所有对象都使用当前颜色创建,该颜色显示在“特性”工具栏上的“颜色”控件中。也可以使用“颜色”控件或“选择颜色”对话框设置当前颜色。 </p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33518"></a>如果当前颜色设置为“随层”,则将使用指定给当前图层的颜色来创建对象。如果不希望当前颜色成为当前图层的指定颜色,可以指定其他颜色。</p><p><a name="WSfacf1429558a55de8b299cffc1fb20d33519"></a>如果当前颜色设置为“随块”,则使用 7 号颜色(白色或黑色)来创建对象,直到将对象编组为块。将块插入到图形中时,它采用当前的颜色设置。 </p></div>

roycecim 发表于 2009-10-21 08:58:00


/// <summary>
      /// 改方法用于向当前图形中插入块
      /// </summary>
      /// <param name="dwgName">图纸的名称(除去扩展名)</param>
      /// <param name="point">插入点</param>
      /// <param name="angle">旋转角度</param>
      /// <param name="time">时间戳</param>
      /// <param name="direction">所在端子排的边</param>
      /// <param name="side">方向</param>
      private void InsertDwg(string dwgName,Point3d point,double angle,string time,string direction,string side)
      {
            string dir = direction.Substring(0,5);
            //刷新屏幕
            if (Application.DocumentManager.Count == 0)
            {
                SimpleDialog.ShowWarningDialog("请先打开一个图纸文档再进行操作");
                return;
            }
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            string blockName = "GYCAD_TerminalBom_" + dwgName;
            string dwgPath = DirConfig.SystemDwgDirectory + dwgName + ".dwg";
            using (Database blockDB = new Database(false, true))
            {
                //读取图形文件
                try
                {
                  blockDB.ReadDwgFile(dwgPath, FileShare.Read, true, null);
                }
                catch
                { }
                ObjectId dwgId = new ObjectId();
                try
                {
                  dwgId = db.Insert(blockName, blockDB, true);
                }
                catch
                {
                  ed.WriteMessage("打开图纸错误");
                  return;
                }
                using (Transaction trans = doc.TransactionManager.StartTransaction())
                {
                  BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite, false);
                  ObjectId blockId = dwgId;
                  BlockReference br = new BlockReference(point, blockId);
                  if (angle == 0.0)
                  {
                        if (dir == "right")
                        {
                            if (side == "dowm")
                            {
                              br.Rotation = angle;
                            }
                            else if (side == "up")
                            {
                              if (dwgName == "Triangle")
                              {
                                    br.Rotation = angle + Math.PI * 3 / 2;
                              }
                              else
                              {
                                    br.Rotation = angle + Math.PI;
                              }
                            }
                        }
                        else if (dir == "left_")
                        {
                            if (side == "down")
                            {
                              if (dwgName == "Triangle")
                              {
                                    br.Rotation = angle + Math.PI / 2;
                              }
                              else
                              {
                                    br.Rotation = angle;
                              }
                            }
                            else if (side == "up")
                            {
                              if (dwgName == "Triangle")
                              {
                                    br.Rotation = angle + Math.PI;
                              }
                              else
                              {
                                    br.Rotation = angle + Math.PI;
                              }
                            }
                        }
                  }
                  RegAppTable reg = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForWrite);
                  if (!reg.Has(blockName))
                  {
                        RegAppTableRecord app = new RegAppTableRecord();
                        app.Name = blockName;
                        reg.Add(app);
                        trans.AddNewlyCreatedDBObject(app, true);
                  }
                  TypedValue[] blockValues = new TypedValue[]{
                        new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataRegAppName),blockName),
                        new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),time),
                        new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),direction),
                        new TypedValue(Convert.ToInt16(DxfCode.ExtendedDataAsciiString),side)
                  };
                  ResultBuffer rb = new ResultBuffer(blockValues);
                  try
                  {
                        br.XData = rb;
                        Point3d pos = br.Position;
                        br.Position = point;
                        br.Color = Color.FromColorIndex(ColorMethod.ByBlock, color.ColorIndex);
                  }
                  catch
                  { }
                  BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt, OpenMode.ForWrite);
                  btr.AppendEntity(br);
                  trans.AddNewlyCreatedDBObject(br, true);
                  trans.Commit();
                }
                blockDB.Dispose();
            }
      }
上面是我向图纸中插入外部块的代码,直接 br.Color = Color.FromColorIndex(ColorMethod.ByBlock, color.ColorIndex); 是不可以的,应该在什么地方改动呢?

雪山飞狐_lzh 发表于 2009-10-21 09:38:00

<p>ByBlock是用在块定义内的实体的,不是用在块参照的</p><p>仔细看看ahlzl斑竹的回帖</p>
页: 1 [2]
查看完整版本: [求助]如何设置块参照的颜色?