autocad.net中各种id、实体、表记录间的访问代码,持续更新中……

获取图纸空间中所有块参照和其对应的块定义对象

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;
原文地址:https://www.cnblogs.com/swtool/p/SWTOOL_00020.html