在块AutoCAD C#中修改实体后,如何从块中获取实体



我正在开发AutoCAD插件,在某个时候我需要获得在块内修改过的实体。块仅包含一个实体。我为相应的BlockTableRecord制作了事件处理程序,它响应"Modified"事件。我想得到一个已经修改过的实体,但我通过这个方法得到的只是来自模型空间的实体,这是所需实体的早期版本。这就是我计划如何获得我的实体:

public static Entity GetEntityFromBlock(HooverSpace.Map.WorkSpace ws, BlockReference br, ObjectId entId)
{
Entity ent = null;
ObjectId blockId;
if (ws.acBlkTbl.Has(br.Name))
blockId = ws.acBlkTbl[br.Name];
else
return null;
Entity searchEnt = (Entity)entId.GetObject(OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)ws.acTrans.GetObject(blockId, OpenMode.ForRead);
foreach (ObjectId blkEntId in btr)
{
Entity blockEnt = (Entity)ws.acTrans.GetObject(blkEntId, OpenMode.ForWrite);
if (blockEnt.BlockName == btr.Name && blockEnt.Layer == searchEnt.Layer)
{
ent = blockEnt.Clone() as Entity;
break;
}

}
ent.TransformBy(br.BlockTransform);
return ent;
}

我被困在这个问题上,如果有人能帮助我,我将非常高兴。

编辑:我通过从br.BlockTableRecordid获取BlockTableRecord解决了这个问题。谢谢大家!

尝试使用
var _BTR = ws.acTrans.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
来解决问题

最新更新