C#开发CAD中巧用dynamic关键字

1、获取动态块真实名称EffectiveName

       在CAD中动态块通常为匿名块,开发中通过Name属性获取到的仅仅是*U之类的块名。想获取真正的块名得通过EffectiveName属性。
但是问题来了,块引用实例下并无EffectiveName属性,此时就需要用到dynamic关键字,代码如下:

        dynamic blkDy = blockReference.AcadObject;
        string effectiveName = blkDy.EffectiveName;

2、C++编写的自定义实体中,自定义属性的读取及修改

      在C#中编程中,对于CAD图纸中的自定义实体,通常情况下是无法通过代码进行读取及修改属性的。但是通过dynamic关键字就可行了,

先上代码:

      dynamic dy = ent.AcadObject;
      if (dy.ObjectName == "TDbSymbIndexPointer")

     {

          //编辑天正实体
         using (Transaction trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
         {
               dynamic obj = trans.GetObject(ent.ObjectId, OpenMode.ForWrite).AcadObject;
               obj.DrawingLabel = mapnum;
               obj.IndexLabel = jdNum;

               trans.Commit();
         }

      }

 上面的代码是,修改了天正实体中的索引标注。

 注意,此处对于自定义实体的读取,必须是保证有C++类库存在的,也就是说,本来你电脑的CAD打开图纸,就能看到并在特性栏里面能修改。

 当然了,也不是所有的自定义对象都能通过dynamic进行修改的,不过还能通过其他的方法,比如说,COM反射

 

posted @ 2021-08-16 15:33  Yannik  阅读(715)  评论(0编辑  收藏  举报