找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 658|回复: 0

[每日一码] 从一个实体拷贝扩展辞典到另一个实体

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-8-7 16:20:40 | 显示全部楼层 |阅读模式

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

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

×
  1. [CommandMethod("copyExtDic")]
  2. public void copyExtDic()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;

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

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

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

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

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

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

  23.         surId = dbObj.ExtensionDictionary;

  24.         if (surId != ObjectId.Null)
  25.         {
  26.             DBDictionary dbExt =
  27.                       (DBDictionary)tr.GetObject(surId,  
  28.                                     OpenMode.ForRead);

  29.             foreach (DBDictionaryEntry entry in dbExt)
  30.             {
  31.                 ids.Add(entry.Value);
  32.             }
  33.         }
  34.         else
  35.         {
  36.             ed.WriteMessage("No dictionary to copy");
  37.             return;
  38.         }
  39.         //find if entiy has
  40.         DBObject target = tr.GetObject(tarRes.ObjectId,
  41.                                           OpenMode.ForRead);
  42.         tarId = target.ExtensionDictionary;

  43.         if (tarId == ObjectId.Null)
  44.         {
  45.             target.UpgradeOpen();
  46.             target.CreateExtensionDictionary();
  47.             tarId = target.ExtensionDictionary;
  48.         }

  49.         tr.Commit();
  50.     }

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

  53.     //
  54.     using (Transaction tr =
  55.             db.TransactionManager.StartTransaction())
  56.     {
  57.         DBDictionary dbExt =
  58.          (DBDictionary)tr.GetObject(surId, OpenMode.ForRead);

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

  61.         foreach (IdPair pair in mapping)
  62.         {
  63.             DBObject target = tr.GetObject(pair.Value,
  64.                                               OpenMode.ForRead);
  65.             dbTarg.SetName(
  66.                 dbTarg.NameAt(pair.Value),
  67.                 dbExt.NameAt(pair.Key));
  68.         }
  69.         tr.Commit();
  70.     }
  71. }


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

本版积分规则

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

GMT+8, 2024-11-17 21:31 , Processed in 0.160645 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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