乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 24|回复: 0

工作表集视图的增量重新编号命令

[复制链接]

68

主题

179

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
451
发表于 2021-10-27 11:13:56 | 显示全部楼层 |阅读模式
SS-Renumber命令在Sheet Set Manager
  1. // (C) Copyright 2019 by  
  2. //
  3. using System;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.Geometry;
  8. using Autodesk.AutoCAD.EditorInput;
  9. /*
  10. * SheetSetTools. © Andrey Bushman, 2013
  11. * AutoCAD 2014 x64 Enu
  12. *
  13. * COMMANDS:
  14. * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets:
  15. * numbering of each subgroup shall begin with 1.
  16. *
  17. * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the
  18. * basis of the first element in the each subset (in the all opened sheet sets).
  19. *
  20. * AutoCAD references:
  21. * AcCoreMgd.dll
  22. * AcDbMgd.dll
  23. * AcMgd.dll
  24. * Interop.ACSMCOMPONENTS23Lib.dll
  25. */
  26. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  27. using App = Autodesk.AutoCAD.ApplicationServices;
  28. using Db = Autodesk.AutoCAD.DatabaseServices;
  29. using Ed = Autodesk.AutoCAD.EditorInput;
  30. using Rtm = Autodesk.AutoCAD.Runtime;
  31. using Comp = ACSMCOMPONENTS23Lib;
  32. [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))]
  33. [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))]
  34. namespace Bushman.AutoCAD.SheetSetTools
  35. {
  36.     public class SheetSetCommands : Rtm.IExtensionApplication
  37.     {
  38.         const String ns = "bush"; // namespace
  39.         ///
  40.         /// Update the numeration for all sheets in the all opened sheet sets: numbering of
  41.         /// each subgroup shall begin with 1.
  42.         ///
  43.         [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)]
  44.         public void Renumber_All()
  45.         {
  46.             Renumber();
  47.         }
  48.         ///
  49.         /// Update the numeration: to continue numbering on the basis of the first element
  50.         /// in the each subset (in the all opened sheet sets).
  51.         ///
  52.         [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)]
  53.         public void Renumber_all_bases_of_first()
  54.         {
  55.             Renumber(true);
  56.         }
  57.         ///
  58.         /// To update numbering of all sheets in the all opened sheet sets.
  59.         ///
  60.         /// True - to continue numbering on the basis
  61.         /// of the first element in the each subset (in the all opened sheet sets);
  62.         /// False - Numbering of each subgroup shall begin with 1 (in the all opened
  63.         /// sheet sets).
  64.         void Renumber(Boolean continue_numbering = false)
  65.         {
  66.             App.Document doc = cad.DocumentManager.MdiActiveDocument;
  67.             Db.Database db = doc.Database;
  68.             Ed.Editor ed = doc.Editor;
  69.             Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr();
  70.             Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator();
  71.             enumerator.Reset();
  72.             Comp.AcSmDatabase smDb = null;
  73.             while ((smDb = enumerator.Next()) != null)
  74.             {
  75.                 smDb.LockDb(db);
  76.                 String fname = smDb.GetFileName();
  77.                 Comp.AcSmSheetSet sheetset = smDb.GetSheetSet();
  78.                 String name = sheetset.GetName();
  79.                 String descr = sheetset.GetDesc();
  80.                 ed.WriteMessage("\nSheet Set name: {0}\n", name);
  81.                 Int32 ren_count = 0; // count of renamed sheets.
  82.                 Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator();
  83.                 encomp.Reset();
  84.                 Comp.IAcSmComponent component = null;
  85.                 while ((component = encomp.Next()) != null)
  86.                 {
  87.                     ProcessElement(ed, component, ref ren_count, continue_numbering);
  88.                 }
  89.                 encomp.Reset();
  90.                 smDb.UnlockDb(db, true);
  91.                 ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count);
  92.             }
  93.             enumerator.Reset();
  94.         }
  95.         ///
  96.         ///  Recursive processing of the elements: change the sheet's number.
  97.         ///
  98.         /// An Editor for the output.
  99.         /// Component of Sheet Set.
  100.         /// The count of renumbered sheets in the sheet set.
  101.         /// True - to continue numbering on the basis
  102.         /// of the first element in the each subset (in the all opened sheet sets);
  103.         /// False - Numbering of each subgroup shall begin with 1 (in the all opened
  104.         /// sheet sets).
  105.         void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component,
  106.             ref Int32 ren_count, Boolean continue_numbering)
  107.         {
  108.             Array array = null;
  109.             component.GetDirectlyOwnedObjects(out array);
  110.             if (array != null)
  111.             {
  112.                 Int32 sheet_number = 1;
  113.                 Boolean basis_of_first = continue_numbering;
  114.                 foreach (var item in array)
  115.                 {
  116.                     if (item is Comp.IAcSmSubset)
  117.                     {
  118.                         ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering);
  119.                     }
  120.                     else if (item is Comp.IAcSmSheet)
  121.                     {
  122.                         Comp.IAcSmSheet sheet = (Comp.IAcSmSheet)item;
  123.                         String cur_str_value = sheet.GetNumber();
  124.                         Int32 int_value = 0;
  125.                         Boolean is_int32 = Int32.TryParse(cur_str_value, out int_value);
  126.                         if (!is_int32 || (!basis_of_first && int_value != sheet_number))
  127.                         {
  128.                             sheet.SetNumber(sheet_number.ToString());
  129.                             ++ren_count;
  130.                         }
  131.                         else if (basis_of_first)
  132.                         {
  133.                             sheet_number = int_value;
  134.                         }
  135.                         ++sheet_number;
  136.                         basis_of_first = false;
  137.                     }
  138.                     else if (item is Comp.IAcSmPersist)
  139.                     {
  140.                         Comp.IAcSmPersist persist = (Comp.IAcSmPersist)item;
  141.                     }
  142.                     else
  143.                     {
  144.                         ed.WriteMessage("Unknown object: {0}", item.GetType().ToString());
  145.                     }
  146.                 }
  147.             }
  148.         }
  149.         #region IExtensionApplication Members
  150.         public void Initialize()
  151.         {
  152.             App.Document doc = cad.DocumentManager.MdiActiveDocument;
  153.             Ed.Editor ed = doc.Editor;
  154.             ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n");
  155.         }
  156.         public void Terminate()
  157.         {
  158.             // Empty body.
  159.         }
  160.         #endregion
  161.     }
  162. }

有人知道如何为Sheet Set View编辑此代码吗?
PD:Sheet Set View相当于Sheet Set Manager,但适用于AutoCAD的/AutoCAD Architecture的/AutoCAD MEP的项目管理器

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:39 , Processed in 0.195439 second(s), 54 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表