找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1244|回复: 0

[分享] Copy extension dictionary

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-10-15 15:34:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Copy extension dictionary                         By Virupaksha Aithal
Below command shows the procedure to copy the extension dictionary entries from one entity to another. A special logic is placed at the end to set the names of the dictionary same as source object as “DeepCloneObjects” copy the objects with different names in target entity.
[CommandMethod("copyExtDic")]
public void copyExtDic()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Editor ed = doc.Editor;

    PromptEntityResult surRes =
                ed.GetEntity("Select source entity");

    if (surRes.Status != PromptStatus.OK)
        return;

    PromptEntityResult tarRes =
                ed.GetEntity("Select target entity");

    if (tarRes.Status != PromptStatus.OK)
        return;

    ObjectIdCollection ids = new ObjectIdCollection();
    ObjectId tarId = ObjectId.Null;
    ObjectId surId = ObjectId.Null;

    using (Transaction tr =
            db.TransactionManager.StartTransaction())
    {
        DBObject dbObj = tr.GetObject(surRes.ObjectId,
                                       OpenMode.ForRead);

        surId = dbObj.ExtensionDictionary;

        if (surId != ObjectId.Null)
        {
            DBDictionary dbExt =
                      (DBDictionary)tr.GetObject(surId,   
                                    OpenMode.ForRead);

            foreach (DBDictionaryEntry entry in dbExt)
            {
                ids.Add(entry.Value);
            }
        }
        else
        {
            ed.WriteMessage("No dictionary to copy");
            return;
        }
        //find if entiy has
        DBObject target = tr.GetObject(tarRes.ObjectId,
                                          OpenMode.ForRead);
        tarId = target.ExtensionDictionary;

        if (tarId == ObjectId.Null)
        {
            target.UpgradeOpen();
            target.CreateExtensionDictionary();
            tarId = target.ExtensionDictionary;
        }

        tr.Commit();
    }

    IdMapping mapping = new IdMapping();
    db.DeepCloneObjects(ids, tarId, mapping, false);

    //
    using (Transaction tr =
            db.TransactionManager.StartTransaction())
    {
        DBDictionary dbExt =
         (DBDictionary)tr.GetObject(surId, OpenMode.ForRead);

        DBDictionary dbTarg =
            (DBDictionary)tr.GetObject(tarId, OpenMode.ForWrite);

        foreach (IdPair pair in mapping)
        {
            DBObject target = tr.GetObject(pair.Value,
                                              OpenMode.ForRead);
            dbTarg.SetName(
                dbTarg.NameAt(pair.Value),
                dbExt.NameAt(pair.Key));
        }
        tr.Commit();
    }
}



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-18 23:47 , Processed in 2.256793 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表