获取图纸空间中所有块参照和其对应的块定义对象
using (Transaction trans = db.TransactionManager.StartTransaction()) { //获取块表 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead); //取得图纸空间块表记录 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForRead); //在图纸空间块表记录中循环查找每个块参照ID foreach (ObjectId brId in btr) { //打开对应的块参照 BlockReference br = (BlockReference)trans.GetObject(brId, OpenMode.ForRead); //获取当前块参照对应的的块表记录,即这个块参照对应的块定义对象 BlockTableRecord btr0 = (BlockTableRecord)br.BlockTableRecord.GetObject(OpenMode.ForRead); } }
已知块参照id取得块参照实体:
//取得块参照 BlockReference br = (BlockReference)id.GetObject(OpenMode.ForRead, false);
已知块参照实体取得块表记录:
//取得块表记录 BlockTableRecord btr0 = (BlockTableRecord)br.BlockTableRecord.GetObject(OpenMode.ForRead, false);
向DB增加有名对象词典
public static ObjectId AddNamedDictionary(this Database db, string searchKey) { ObjectId id=ObjectId.Null; // 存储添加的命名字典项的Id //打开数据库的有名对象字典 DBDictionary dicts=(DBDictionary)db.NamedObjectsDictionaryId.GetObject(OpenMode.ForRead); if (!dicts.Contains(searchKey)) // 如果不存在指定关键字的字典项 { DBDictionary dict=new DBDictionary(); //新建字典项 dicts.UpgradeOpen(); // 切换有名对象字典为写 id = dicts.SetAt(searchKey, dict);//设置新建字典项的搜索关键字 dicts.DowngradeOpen(); // 为了安全,将有名对象字典切换成读的状态 //将新建的字典项添加到事务处理中 db.TransactionManager.AddNewlyCreatedDBObject(dict, true); } return id; // 返回添加的字典项的Id }
获取DB中指定名称的词典对象ID
ObjectId id = dicts.GetAt("DrawingNumberAndVersionNumberS");
ObjectId不能直接赋值null,需要下面这样操作:
ObjectId id = ObjectId.Null;