找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2279|回复: 4

[原创] 练习 所有Hatch置底

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-7-17 22:19:56 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 csharp 于 2014-7-17 22:23 编辑

无需选择直接执行

  1.         //所有 Hatch 置底
  2.         [CommandMethod("test")]
  3.         public void HatchMoveBottom()
  4.         {
  5.             Document doc = Application.DocumentManager.MdiActiveDocument;
  6.             Editor ed = doc.Editor;
  7.             Database db = doc.Database;
  8.             Transaction tr = doc.TransactionManager.StartTransaction();
  9.             using (tr)
  10.             {
  11.                 try
  12.                 {
  13.                     BlockTable bts = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  14.                     bool hatinblk = false;
  15.                     foreach (ObjectId id in bts)
  16.                     {
  17.                         BlockTableRecord btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead);
  18.                         //含有Hatch的块定义内DrawOrder
  19.                         if (!btr.IsLayout && !btr.IsFromExternalReference)
  20.                         {
  21.                             ObjectIdCollection ids = new ObjectIdCollection();
  22.                             DrawOrderTable blkDor = (DrawOrderTable)tr.GetObject(btr.DrawOrderTableId, OpenMode.ForWrite);
  23.                             foreach (ObjectId obj in btr)
  24.                             {
  25.                                 Entity ent = (Entity)tr.GetObject(obj, OpenMode.ForRead);
  26.                                 if (ent is Hatch)
  27.                                 {
  28.                                     ids.Add(obj);
  29.                                 }
  30.                             }
  31.                             if (ids.Count > 0)
  32.                             {
  33.                                 blkDor.MoveToBottom(ids);
  34.                                 hatinblk = true;
  35.                             }
  36.                         }
  37.                     }
  38.                     //Datebase 内 DrawOrder
  39.                     BlockTableRecord acBtRecord = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  40.                     var dor = (DrawOrderTable)tr.GetObject(acBtRecord.DrawOrderTableId, OpenMode.ForWrite);
  41.                     ObjectIdCollection hCollection = new ObjectIdCollection();
  42.                     foreach (ObjectId id in acBtRecord)
  43.                     {
  44.                         Entity ent = (Entity)id.GetObject(OpenMode.ForRead);
  45.                         if (ent is Hatch) hCollection.Add(id);
  46.                     }
  47.                     if (hCollection.Count > 0) dor.MoveToBottom(hCollection);
  48.                     if (hatinblk) ed.Regen();//块定义修改后要 Regen
  49.                     tr.Commit();
  50.                 }
  51.                 catch (Exception)
  52.                 {
  53.                     throw;
  54.                 }
  55.             }
  56.         }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-7-17 22:33:41 | 显示全部楼层
本帖最后由 csharp 于 2014-7-17 22:38 编辑

写啰嗦了,ModelSpace  PaperSpace BlockDef 都属 BlockTableRecord

  1.          [CommandMethod("test")]
  2.         public void HatchMoveBottom()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             using (Transaction t = doc.TransactionManager.StartTransaction())
  7.             {
  8.                 try
  9.                 {
  10.                     BlockTable bts = (BlockTable)t.GetObject(db.BlockTableId, OpenMode.ForRead);
  11.                     foreach (ObjectId id in bts)
  12.                     {
  13.                         BlockTableRecord btr = (BlockTableRecord)t.GetObject(id, OpenMode.ForRead);
  14.                         if ( !btr.IsFromExternalReference)
  15.                         {
  16.                             ObjectIdCollection ids = new ObjectIdCollection();
  17.                             DrawOrderTable blkDor = (DrawOrderTable)t.GetObject(btr.DrawOrderTableId, OpenMode.ForWrite);
  18.                             foreach (ObjectId obj in btr)
  19.                             {
  20.                                 Entity ent = (Entity)t.GetObject(obj, OpenMode.ForRead);
  21.                                 if (ent is Hatch)
  22.                                 {
  23.                                     ids.Add(obj);
  24.                                 }
  25.                             }
  26.                             if (ids.Count > 0)
  27.                             {
  28.                                 blkDor.MoveToBottom(ids);
  29.                             }
  30.                         }
  31.                     }
  32.                     doc.Editor.Regen();
  33.                     t.Commit();
  34.                 }
  35.                 catch (Exception)
  36.                 {
  37.                     throw;
  38.                 }
  39.             }
  40.         }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-18 08:36:15 | 显示全部楼层
不太明白如何使用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-6-10 13:54:13 | 显示全部楼层
谢谢!!!!!!!!!!!学习力了!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2020-12-29 12:19:37 | 显示全部楼层
感谢楼主的源代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-24 05:58 , Processed in 0.193895 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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