雪山飞狐_lzh 发表于 2010-1-13 18:50:00

使用Linq在块表记录中获取同一类型的实体

下面的例子在当前空间中遍历,并改变直线和圆的颜色,注意Cad版本2009及以上
相关的讨论帖

      
      public static void Test8()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
                var dict =
                  from ObjectId id in btr
                  group id by id.ObjectClass.DxfName;
                foreach (var ids in dict)
                {
                  switch (ids.Key)
                  {
                        case "LINE":
                            foreach (var id in ids)
                            {
                              Entity ent = id.GetObject(OpenMode.ForWrite) as Entity;
                              ent.ColorIndex = 1;
                            }
                            break;
                        case "CIRCLE":
                            foreach (var id in ids)
                            {
                              Entity ent = id.GetObject(OpenMode.ForWrite) as Entity;
                              ent.ColorIndex = 3;
                            }
                            break;
                  }
                }
                tr.Commit();
            }
      }
**** Hidden Message *****

雪山飞狐_lzh 发表于 2010-1-13 18:54:00


直接写成函数调用,:)复制代码

游天居士 发表于 2010-1-13 22:09:00

收到。顶起来

游天居士 发表于 2010-1-13 23:18:00

RXClass.GetClass(typeof(T)).DxfName; 这句对我相当有用。

azbd 发表于 2010-1-17 15:25:00

提示btr发生错误:
无法为源类型“Autodesk.AutoCAD.DatabaseServices.BlockTableRecord”找到查询模式的实现。找不到“Cast”。是否缺少对“System.Core.dll”的引用或未使用“System.Linq”的指令? G:\Prog\VS2008\C#\AzElectricity\AzElectricity\Form_AutoNumber.cs 37 41 AzElectricity

雪山飞狐_lzh 发表于 2010-1-17 19:00:00

using System.Linq;

chpmould 发表于 2012-6-26 21:05:00

很好的基础贴...
页: [1]
查看完整版本: 使用Linq在块表记录中获取同一类型的实体