找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 908|回复: 0

[每日一码] 改变RasterImage 名字

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-8-29 13:31:44 | 显示全部楼层 |阅读模式

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

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

×
  1. Document doc = Application.DocumentManager.MdiActiveDocument;
  2. Editor ed = doc.Editor;
  3. Database db = doc.Database;

  4. PromptStringOptions pso1
  5.         = new PromptStringOptions("\nEnter old image name : ");
  6. pso1.AllowSpaces = true;
  7. PromptResult pr1 = ed.GetString(pso1);
  8. if (pr1.Status != PromptStatus.OK)
  9.     return;
  10. String oldImageName = pr1.StringResult;

  11. PromptStringOptions pso2
  12.         = new PromptStringOptions("\nEnter new image name : ");
  13. pso2.AllowSpaces = true;
  14. PromptResult pr2 = ed.GetString(pso2);
  15. if (pr2.Status != PromptStatus.OK)
  16.     return;
  17. String newImageName = pr2.StringResult;

  18. ObjectId oldridId = ObjectId.Null;
  19. ObjectId newridId = ObjectId.Null;

  20. using (Transaction tr = db.TransactionManager.StartTransaction())
  21. {
  22.     ObjectId dictId = RasterImageDef.GetImageDictionary(db);
  23.     if (! dictId.IsNull)
  24.     {
  25.         DBDictionary dict = tr.GetObject(
  26.                                             dictId,
  27.                                             OpenMode.ForRead
  28.                                         ) as DBDictionary;
  29.         if (dict.Contains(oldImageName))
  30.         {
  31.             // Step 1: Create a new RasterImageDef based on
  32.             // the old RasterImageDef
  33.             oldridId = dict.GetAt(oldImageName);
  34.             RasterImageDef oldrid = tr.GetObject(
  35.                                                     oldridId,
  36.                                                     OpenMode.ForWrite
  37.                                                 ) as RasterImageDef;
  38.             RasterImageDef newrid = new RasterImageDef();

  39.             newrid.SourceFileName = oldrid.SourceFileName;
  40.             newrid.ActiveFileName = oldrid.ActiveFileName;
  41.             newrid.Load();
  42.             dict.UpgradeOpen();
  43.             newridId = dict.SetAt(newImageName, newrid);
  44.             tr.AddNewlyCreatedDBObject(newrid, true);

  45.             // Step 2: Associate the existing raster images
  46.             // with the newly created RasterImageDef
  47.             RasterImage.EnableReactors(true);

  48.             BlockTable bt = tr.GetObject(
  49.                                             db.BlockTableId,
  50.                                             OpenMode.ForRead
  51.                                         ) as BlockTable;
  52.             foreach (ObjectId btrId in bt)
  53.             {
  54.                 BlockTableRecord btr = tr.GetObject
  55.                                         (
  56.                                             btrId,
  57.                                             OpenMode.ForRead
  58.                                         ) as BlockTableRecord;
  59.                 foreach (ObjectId id in btr)
  60.                 {
  61.                     if (id.ObjectClass.IsDerivedFrom(
  62.                         RXClass.GetClass(typeof(RasterImage))))
  63.                     {
  64.                         RasterImage ri = tr.GetObject
  65.                                             (
  66.                                                 id,
  67.                                                 OpenMode.ForRead
  68.                                             ) as RasterImage;
  69.                         if (ri.ImageDefId.Equals(oldridId))
  70.                         {
  71.                             ri.UpgradeOpen();
  72.                             ri.AssociateRasterDef(newrid);
  73.                             ri.ImageDefId = newridId;
  74.                         }
  75.                     }
  76.                 }
  77.             }

  78.             // Step 3 : Detach and erase the old RasterImageDef
  79.             RasterImage.EnableReactors(false);
  80.             oldrid.Unload(true);
  81.             oldrid.Erase();
  82.         }
  83.     }
  84.     tr.Commit();
  85. }

  86. // Resolve Xrefs
  87. db.ResolveXrefs(false, false);


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

本版积分规则

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

GMT+8, 2025-9-6 03:21 , Processed in 0.318038 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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