I need to update an old 2014 VB.net to renumber sheet sets to Autocad 2020.
I'm using VS 2017 and VS 2019.
I tried to do changes to the code as was recommended in other posts but I always have errors.
Original post :
http://www.theswamp.org/index.php?topic=45672.msg508180#msg508180
here my version:
///tlbimp acsmcomponents19.tlb /out:Interop.ACSMCOMPONENTS19Lib.dll /namespace:AcSm /machine:x64 ///tlbimp acsmcomponents23.tlb /out:Interop.ACSMCOMPONENTS23Lib.dll /namespace:AcSm /machine:x64 ///"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\TlbImp.exe" "C:\Autodesk\ObjectARX_for_AutoCAD_2020_Win_64_bit\inc-x64\acsmcomponents23.tlb" /out:"C:\Autodesk\ObjectARX_for_AutoCAD_2020_Win_64_bit\inc-x64\Interop.ACSMCOMPONENTS23Lib.dll" /namespace:AcSm /machine:x64 /* * SheetSetTools. © Andrey Bushman, 2013, original * Modified to work with AUTOCAD 2020 x64 Enu * COMMANDS: * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets: * numbering of each subgroup shall begin with 1. * * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the * basis of the first element in the each subset (in the all opened sheet sets). * * AutoCAD references: * AcCoreMgd.dll * AcDbMgd.dll * AcMgd.dll * Interop.ACSMCOMPONENTS23Lib.dll */ using System; using cad = Autodesk.AutoCAD.ApplicationServices.Application; using App = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rtm = Autodesk.AutoCAD.Runtime; using Comp = ACSMCOMPONENTS23Lib; [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] namespace Bushman.AutoCAD.SheetSetTools { public class SheetSetCommands : Rtm.IExtensionApplication { const String ns = "bush"; // namespace /// <summary> /// Update the numeration for all sheets in the all opened sheet sets: numbering of /// each subgroup shall begin with 1. /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)] public void Renumber_All() { Renumber(); } /// <summary> /// Update the numeration: to continue numbering on the basis of the first element /// in the each subset (in the all opened sheet sets). /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)] public void Renumber_all_bases_of_first() { Renumber(true); } /// <summary> /// To update numbering of all sheets in the all opened sheet sets. /// </summary> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void Renumber(Boolean continue_numbering = false) { App.Document doc = cad.DocumentManager.MdiActiveDocument; Db.Database db = doc.Database; Ed.Editor ed = doc.Editor; Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr(); Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator(); enumerator.Reset(); Comp.AcSmDatabase smDb = null; while ((smDb = enumerator.Next()) != null) { smDb.LockDb(db); String fname = smDb.GetFileName(); Comp.AcSmSheetSet sheetset = smDb.GetSheetSet(); String name = sheetset.GetName(); String descr = sheetset.GetDesc(); ed.WriteMessage("\nSheet Set name: {0}\n", name); Int32 ren_count = 0; // count of renamed sheets. Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator(); encomp.Reset(); Comp.IAcSmComponent component = null; while ((component = encomp.Next()) != null) { ProcessElement(ed, component, ref ren_count, continue_numbering); } encomp.Reset(); smDb.UnlockDb(db, true); ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count); } enumerator.Reset(); } /// <summary> /// Recursive processing of the elements: change the sheet's number. /// </summary> /// <param name="ed">An Editor for the output.</param> /// <param name="component">Component of Sheet Set.</param> /// <param name="ren_count">The count of renumbered sheets in the sheet set.</param> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, ref Int32 ren_count, Boolean continue_numbering) { Array array = null; component.GetDirectlyOwnedObjects(out array); if (array != null) { Int32 sheet_number = 1; Boolean basis_of_first = continue_numbering; foreach (var item in array) { if (item is Comp.IAcSmSubset) { ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering); } else if (item is Comp.IAcSmSheet) { Comp.IAcSmSheet sheet = (Comp.IAcSmSheet)item; String cur_str_value = sheet.GetNumber(); Int32 int_value = 0; Boolean is_int32 = Int32.TryParse(cur_str_value, out int_value); if (!is_int32 || (!basis_of_first && int_value != sheet_number)) { sheet.SetNumber(sheet_number.ToString()); ++ren_count; } else if (basis_of_first) { sheet_number = int_value; } ++sheet_number; basis_of_first = false; } else if (item is Comp.IAcSmPersist) { Comp.IAcSmPersist persist = (Comp.IAcSmPersist)item; } else { ed.WriteMessage("Unknown object: {0}", item.GetType().ToString()); } } } } #region IExtensionApplication Members public void Initialize() { App.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n"); } public void Terminate() { // Empty body. } #endregion } }
So, How can I do it? (If possible, explain with a step to step)
Solved! Go to Solution.
Solved by jtm2020hyo. Go to Solution.
Solved by fieldguy. Go to Solution.
Solved by _gile. Go to Solution.
Solved by _gile. Go to Solution.
Multiplying topics does not make it easy to understand what you are trying to do for those who are trying to help you as well as for those who have the same type of request.
You cannot easily use existing .NET code if you do not know the basics of .NET and the way to use it with AutoCAD (you can start reading this topic).
In your case:
That's all, the proct would compile without error.
@_gile wrote:
Multiplying topics does not make it easy to understand what you are trying to do for those who are trying to help you as well as for those who have the same type of request.
You cannot easily use existing .NET code if you do not know the basics of .NET and the way to use it with AutoCAD (you can start reading this topic).
In your case:
- Start a new class library project in Visual Studio 2017 (or upper)
- Target the .NET Framework 4.7
- Add accoremgd.dll, acdbmgd.dll and acmgd.dll references from 'ObjectARX 2020\inc' folder
- Set the Copy Local property of these reference to False
- Add acsmcomponents23.tlb reference from 'ObjectARX 2020\inc-x64' folder
- Paste the original code in the class crated by Visual Studio
- Replace: 'using Comp = ACSMCOMPONENTS19lib' with 'using Comp = ACSMCOMPONENTS23lib'
That's all, the proct would compile without error.
In your case:
// (C) Copyright 2019 by // using System; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; /* * SheetSetTools. © Andrey Bushman, 2013 * AutoCAD 2014 x64 Enu * * COMMANDS: * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets: * numbering of each subgroup shall begin with 1. * * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the * basis of the first element in the each subset (in the all opened sheet sets). * * AutoCAD references: * AcCoreMgd.dll * AcDbMgd.dll * AcMgd.dll * Interop.ACSMCOMPONENTS23Lib.dll */ using cad = Autodesk.AutoCAD.ApplicationServices.Application; using App = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rtm = Autodesk.AutoCAD.Runtime; using Comp = ACSMCOMPONENTS23Lib; [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] namespace Bushman.AutoCAD.SheetSetTools { public class SheetSetCommands : Rtm.IExtensionApplication { const String ns = "bush"; // namespace /// <summary> /// Update the numeration for all sheets in the all opened sheet sets: numbering of /// each subgroup shall begin with 1. /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)] public void Renumber_All() { Renumber(); } /// <summary> /// Update the numeration: to continue numbering on the basis of the first element /// in the each subset (in the all opened sheet sets). /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)] public void Renumber_all_bases_of_first() { Renumber(true); } /// <summary> /// To update numbering of all sheets in the all opened sheet sets. /// </summary> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void Renumber(Boolean continue_numbering = false) { App.Document doc = cad.DocumentManager.MdiActiveDocument; Db.Database db = doc.Database; Ed.Editor ed = doc.Editor; Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr(); Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator(); enumerator.Reset(); Comp.AcSmDatabase smDb = null; while ((smDb = enumerator.Next()) != null) { smDb.LockDb(db); String fname = smDb.GetFileName(); Comp.AcSmSheetSet sheetset = smDb.GetSheetSet(); String name = sheetset.GetName(); String descr = sheetset.GetDesc(); ed.WriteMessage("\nSheet Set name: {0}\n", name); Int32 ren_count = 0; // count of renamed sheets. Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator(); encomp.Reset(); Comp.IAcSmComponent component = null; while ((component = encomp.Next()) != null) { ProcessElement(ed, component, ref ren_count, continue_numbering); } encomp.Reset(); smDb.UnlockDb(db, true); ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count); } enumerator.Reset(); } /// <summary> /// Recursive processing of the elements: change the sheet's number. /// </summary> /// <param name="ed">An Editor for the output.</param> /// <param name="component">Component of Sheet Set.</param> /// <param name="ren_count">The count of renumbered sheets in the sheet set.</param> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, ref Int32 ren_count, Boolean continue_numbering) { Array array = null; component.GetDirectlyOwnedObjects(out array); if (array != null) { Int32 sheet_number = 1; Boolean basis_of_first = continue_numbering; foreach (var item in array) { if (item is Comp.IAcSmSubset) { ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering); } else if (item is Comp.IAcSmSheet) { Comp.IAcSmSheet sheet = (Comp.IAcSmSheet)item; String cur_str_value = sheet.GetNumber(); Int32 int_value = 0; Boolean is_int32 = Int32.TryParse(cur_str_value, out int_value); if (!is_int32 || (!basis_of_first && int_value != sheet_number)) { sheet.SetNumber(sheet_number.ToString()); ++ren_count; } else if (basis_of_first) { sheet_number = int_value; } ++sheet_number; basis_of_first = false; } else if (item is Comp.IAcSmPersist) { Comp.IAcSmPersist persist = (Comp.IAcSmPersist)item; } else { ed.WriteMessage("Unknown object: {0}", item.GetType().ToString()); } } } } #region IExtensionApplication Members public void Initialize() { App.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n"); } public void Terminate() { // Empty body. } #endregion } }
Here 2 versions of the same developer, maybe there is the issue:
http://www.theswamp.org/index.php?topic=45672.msg508180#msg508180
...and here another version (a 3rd ) of the same code with same commands:
https://sites.google.com/site/acadhowtodo/net/sheet-set/update-sheets-numbers
...So, What can I do now?
I tried to fix this problem for my self, I compared that 3 versions of the same code and obtain this:
/* * SheetSetTools. © Andrey Bushman, 2013 * AutoCAD 2014 x64 Enu * * COMMANDS: * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets: * numbering of each subgroup shall begin with 1. * * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the * basis of the first element in the each subset (in the all opened sheet sets). * * AutoCAD references: * AcCoreMgd.dll * AcDbMgd.dll * AcMgd.dll * Interop.ACSMCOMPONENTS23Lib.dll */ using System; using cad = Autodesk.AutoCAD.ApplicationServices.Application; using App = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rtm = Autodesk.AutoCAD.Runtime; using Comp = ACSMCOMPONENTS23Lib; [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] namespace Bushman.AutoCAD.SheetSetTools { public class SheetSetCommands : Rtm.IExtensionApplication { const String ns = "bush"; // namespace /// <summary> /// Update the numeration for all sheets in the all opened sheet sets: numbering of /// each subgroup shall begin with 1. /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)] public void Renumber_All() { Renumber(); } /// <summary> /// Update the numeration: to continue numbering on the basis of the first element /// in the each subset (in the all opened sheet sets). /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)] public void Renumber_all_bases_of_first() { Renumber(true); } /// <summary> /// To update numbering of all sheets in the all opened sheet sets. /// </summary> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void Renumber(Boolean continue_numbering = false) { App.Document doc = cad.DocumentManager.MdiActiveDocument; Db.Database db = doc.Database; Ed.Editor ed = doc.Editor; Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr(); Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator(); enumerator.Reset(); Comp.AcSmDatabase smDb = null; while ((smDb = enumerator.Next()) != null) { smDb.LockDb(db); String fname = smDb.GetFileName(); Comp.AcSmSheetSet sheetset = smDb.GetSheetSet(); String name = sheetset.GetName(); String descr = sheetset.GetDesc(); ed.WriteMessage("\nSheet Set name: {0}\n", name); Int32 ren_count = 0; // count of renamed sheets. Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator(); encomp.Reset(); Comp.IAcSmComponent component = null; while ((component = encomp.Next()) != null) { ProcessElement(ed, component, ref ren_count, continue_numbering); } encomp.Reset(); smDb.UnlockDb(db, true); ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count); } enumerator.Reset(); } /// <summary> /// Recursive processing of the elements: change the sheet's number. /// </summary> /// <param name="ed">An Editor for the output.</param> /// <param name="component">Component of Sheet Set.</param> /// <param name="ren_count">The count of renumbered sheets in the sheet set.</param> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, ref Int32 ren_count, Boolean continue_numbering) { Array array = null; component.GetDirectlyOwnedObjects(out array); if (array != null) { Int32 sheet_number = 1; Boolean basis_of_first = continue_numbering; foreach (var item in array) { if (item is Comp.IAcSmSubset) { ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering); } else if (item is Comp.IAcSmSheet) { Comp.IAcSmSheet sheet = (Comp.IAcSmSheet)item; String cur_str_value = sheet.GetNumber(); Int32 int_value = 0; Boolean is_int32 = Int32.TryParse(cur_str_value, out int_value); if (!is_int32 || (!basis_of_first && int_value != sheet_number)) { sheet.SetNumber(sheet_number.ToString()); ++ren_count; } else if (basis_of_first) { sheet_number = int_value; } ++sheet_number; basis_of_first = false; } else if (item is Comp.IAcSmPersist) { Comp.IAcSmPersist persist = (Comp.IAcSmPersist)item; } else { ed.WriteMessage("Unknown object: {0}", item.GetType().ToString()); } } } } #region IExtensionApplication Members public void Initialize() { App.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n"); } public void Terminate() { // Empty body. } #endregion } }
this code has minimal modifications, but now I have 4 "messages" in VS 2017:
Severity Code Description Project File Line Suppression State Message IDE0018 Variable declaration can be inlined ss-renumber2 C:\Users\JuanJ\source\repos\ss-renumber-solution2\ss-renumber2\myCommands.cs 127 Active Message IDE0018 Variable declaration can be inlined ss-renumber2 C:\Users\JuanJ\source\repos\ss-renumber-solution2\ss-renumber2\myCommands.cs 110 Active Message IDE0020 Use pattern matching ss-renumber2 C:\Users\JuanJ\source\repos\ss-renumber-solution2\ss-renumber2\myCommands.cs 124 Active Message IDE0020 Use pattern matching ss-renumber2 C:\Users\JuanJ\source\repos\ss-renumber-solution2\ss-renumber2\myCommands.cs 144 Active
after that VS solved such message automatically, obtaining this code:
/* * SheetSetTools. © Andrey Bushman, 2013 * AutoCAD 2014 x64 Enu * * COMMANDS: * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets: * numbering of each subgroup shall begin with 1. * * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the * basis of the first element in the each subset (in the all opened sheet sets). * * AutoCAD references: * AcCoreMgd.dll * AcDbMgd.dll * AcMgd.dll * Interop.ACSMCOMPONENTS23Lib.dll */ using System; using cad = Autodesk.AutoCAD.ApplicationServices.Application; using App = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rtm = Autodesk.AutoCAD.Runtime; using Comp = ACSMCOMPONENTS23Lib; [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] namespace Bushman.AutoCAD.SheetSetTools { public class SheetSetCommands : Rtm.IExtensionApplication { const String ns = "bush"; // namespace /// <summary> /// Update the numeration for all sheets in the all opened sheet sets: numbering of /// each subgroup shall begin with 1. /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)] public void Renumber_All() { Renumber(); } /// <summary> /// Update the numeration: to continue numbering on the basis of the first element /// in the each subset (in the all opened sheet sets). /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)] public void Renumber_all_bases_of_first() { Renumber(true); } /// <summary> /// To update numbering of all sheets in the all opened sheet sets. /// </summary> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void Renumber(Boolean continue_numbering = false) { App.Document doc = cad.DocumentManager.MdiActiveDocument; Db.Database db = doc.Database; Ed.Editor ed = doc.Editor; Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr(); Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator(); enumerator.Reset(); Comp.AcSmDatabase smDb = null; while ((smDb = enumerator.Next()) != null) { smDb.LockDb(db); String fname = smDb.GetFileName(); Comp.AcSmSheetSet sheetset = smDb.GetSheetSet(); String name = sheetset.GetName(); String descr = sheetset.GetDesc(); ed.WriteMessage("\nSheet Set name: {0}\n", name); Int32 ren_count = 0; // count of renamed sheets. Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator(); encomp.Reset(); Comp.IAcSmComponent component = null; while ((component = encomp.Next()) != null) { ProcessElement(ed, component, ref ren_count, continue_numbering); } encomp.Reset(); smDb.UnlockDb(db, true); ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count); } enumerator.Reset(); } /// <summary> /// Recursive processing of the elements: change the sheet's number. /// </summary> /// <param name="ed">An Editor for the output.</param> /// <param name="component">Component of Sheet Set.</param> /// <param name="ren_count">The count of renumbered sheets in the sheet set.</param> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, ref Int32 ren_count, Boolean continue_numbering) { component.GetDirectlyOwnedObjects(out Array array); if (array != null) { Int32 sheet_number = 1; Boolean basis_of_first = continue_numbering; foreach (var item in array) { if (item is Comp.IAcSmSubset) { ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering); } else if (item is Comp.IAcSmSheet sheet) { String cur_str_value = sheet.GetNumber(); Boolean is_int32 = Int32.TryParse(cur_str_value, out int int_value); if (!is_int32 || (!basis_of_first && int_value != sheet_number)) { sheet.SetNumber(sheet_number.ToString()); ++ren_count; } else if (basis_of_first) { sheet_number = int_value; } ++sheet_number; basis_of_first = false; } else if (item is Comp.IAcSmPersist persist) { } else { ed.WriteMessage("Unknown object: {0}", item.GetType().ToString()); } } } } #region IExtensionApplication Members public void Initialize() { App.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n"); } public void Terminate() { // Empty body. } #endregion } }
When I tried to "Start Debugging", Just opened Autocad 2020 but typing the commands "SS-RENUMBER-ALL" and "SS-RENUMBER-ALL-BASES-OF-FIRST" do nothing, and does not show such command load...
...But When I press "BUILD" and use NETLOAD for the ".DLL" file, then load without problems and typing commands I have a response:
"SS-RENUMBER-ALL" and "SS-RENUMBER-ALL-BASES-OF-FIRST" simply does not works, So, What should I do now?
A leave a link with my project:
https://send.firefox.com/download/28c7b36ab4b24481/#o45gijGnBHQydo8JsCeENQ
@jtm2020hyo wrote:
"SS-RENUMBER-ALL" and "SS-RENUMBER-ALL-BASES-OF-FIRST" simply does not works, So, What should I do now?
I really do not know.
What do you mean with "simply does not work"?
>>When I tried to "Start Debugging", Just opened Autocad 2020 but typing the commands "SS-RENUMBER-ALL"
when autocad starts from vs debug you have to use netload. autocad does not know about your program yet
@_gile wrote:
@jtm2020hyo wrote:
"SS-RENUMBER-ALL" and "SS-RENUMBER-ALL-BASES-OF-FIRST" simply does not works, So, What should I do now?
I really do not know.
What do you mean with "simply does not work"?
I really do not know.
1 If possible check my project inside the .zip might be easy solver this problem.
2 If possible share the solved code with a .zip will be very appreciated.
What do you mean with "simply does not work"?
3 I mean both commands do nothing, does not renumber some sheet as say their description. So, what it's wrong now?
OMG, this works.
example:
example using command "SS-renumber-all-bases-of-first"
example using command "SS-renumber-all"
Thanks everyone
PD: autodesk does not let me attach mi .DLL file. so here I leave a LInk, search for "ss-renumber2.dll":
@jtm2020hyo wrote:
1 If possible check my project inside the .zip might be easy solver this problem.wrong now?
Insted of a solution that anyone should be able to build from some code, you should provide a file on wich the code "does not work".
@jtm2020hyo wrote:
2 If possible share the solved code with a .zip will be very appreciated.
if you're looking for an 'out of the box' solution, you should try to contact the author (Andrey Bushman).
@_gile wrote:
@jtm2020hyo wrote:
1 If possible check my project inside the .zip might be easy solver this problem.wrong now?Insted of a solution that anyone should be able to build from some code, you should provide a file on wich the code "does not work".
@jtm2020hyo wrote:
2 If possible share the solved code with a .zip will be very appreciated.if you're looking for an 'out of the box' solution, you should try to contact the author (Andrey Bushman).
/* * SheetSetTools. © Andrey Bushman, 2013 * AutoCAD 2014 x64 Enu * * COMMANDS: * SS-RENUMBER-ALL - Update the numeration for all sheets in the all opened sheet sets: * numbering of each subgroup shall begin with 1. * * SS-RENUMBER-ALL-BASES-OF-FIRST - Update the numeration: to continue numbering on the * basis of the first element in the each subset (in the all opened sheet sets). * * AutoCAD references: * AcCoreMgd.dll * AcDbMgd.dll * AcMgd.dll * Interop.ACSMCOMPONENTS23Lib.dll */ using System; using cad = Autodesk.AutoCAD.ApplicationServices.Application; using App = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rtm = Autodesk.AutoCAD.Runtime; using Comp = ACSMCOMPONENTS23Lib; [assembly: Rtm.ExtensionApplication(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] [assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetTools.SheetSetCommands))] namespace Bushman.AutoCAD.SheetSetTools { public class SheetSetCommands : Rtm.IExtensionApplication { const String ns = "bush"; // namespace /// <summary> /// Update the numeration for all sheets in the all opened sheet sets: numbering of /// each subgroup shall begin with 1. /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all", Rtm.CommandFlags.Modal)] public void Renumber_All() { Renumber(); } /// <summary> /// Update the numeration: to continue numbering on the basis of the first element /// in the each subset (in the all opened sheet sets). /// </summary> [Rtm.CommandMethod(ns, "ss-renumber-all-bases-of-first", Rtm.CommandFlags.Modal)] public void Renumber_all_bases_of_first() { Renumber(true); } /// <summary> /// To update numbering of all sheets in the all opened sheet sets. /// </summary> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void Renumber(Boolean continue_numbering = false) { App.Document doc = cad.DocumentManager.MdiActiveDocument; Db.Database db = doc.Database; Ed.Editor ed = doc.Editor; Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr(); Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator(); enumerator.Reset(); Comp.AcSmDatabase smDb = null; while ((smDb = enumerator.Next()) != null) { smDb.LockDb(db); String fname = smDb.GetFileName(); Comp.AcSmSheetSet sheetset = smDb.GetSheetSet(); String name = sheetset.GetName(); String descr = sheetset.GetDesc(); ed.WriteMessage("\nSheet Set name: {0}\n", name); Int32 ren_count = 0; // count of renamed sheets. Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator(); encomp.Reset(); Comp.IAcSmComponent component = null; while ((component = encomp.Next()) != null) { ProcessElement(ed, component, ref ren_count, continue_numbering); } encomp.Reset(); smDb.UnlockDb(db, true); ed.WriteMessage("Renumbered sheets count: {0}\n", ren_count); } enumerator.Reset(); } /// <summary> /// Recursive processing of the elements: change the sheet's number. /// </summary> /// <param name="ed">An Editor for the output.</param> /// <param name="component">Component of Sheet Set.</param> /// <param name="ren_count">The count of renumbered sheets in the sheet set.</param> /// <param name="continue_numbering">True - to continue numbering on the basis /// of the first element in the each subset (in the all opened sheet sets); /// False - Numbering of each subgroup shall begin with 1 (in the all opened /// sheet sets).</param> void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, ref Int32 ren_count, Boolean continue_numbering) { component.GetDirectlyOwnedObjects(out Array array); if (array != null) { Int32 sheet_number = 1; Boolean basis_of_first = continue_numbering; foreach (var item in array) { if (item is Comp.IAcSmSubset) { ProcessElement(ed, (Comp.IAcSmSubset)item, ref ren_count, continue_numbering); } else if (item is Comp.IAcSmSheet sheet) { String cur_str_value = sheet.GetNumber(); Boolean is_int32 = Int32.TryParse(cur_str_value, out int int_value); if (!is_int32 || (!basis_of_first && int_value != sheet_number)) { sheet.SetNumber(sheet_number.ToString()); ++ren_count; } else if (basis_of_first) { sheet_number = int_value; } ++sheet_number; basis_of_first = false; } else if (item is Comp.IAcSmPersist persist) { } else { ed.WriteMessage("Unknown object: {0}", item.GetType().ToString()); } } } } #region IExtensionApplication Members public void Initialize() { App.Document doc = cad.DocumentManager.MdiActiveDocument; Ed.Editor ed = doc.Editor; ed.WriteMessage("\nSheetSetTools. © Andrey Bushman, 2013\n\n"); } public void Terminate() { // Empty body. } #endregion } }