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反射