71
AutoCAD .NET API / Реализовать аналог ssget"_X" на NET
« Последний ответ от Алексей Кулик 14-08-2024, 23:26:27 »Возникла задача - выбрать все примитивы (к примеру, вхождения блоков) на всех листах и пространстве модели. Учитывая, что в NET я понимаю очень немного, попытался нарисовать такой вот вариант:
Но уже при попытке обработки space я получаю ошибку, приводящую к падению ACAD (space == null). Отпуск совсем мне остатки мозгов привел в невменяемое состояние? Что я делаю не так?
ACAD2021
Код - C# [Выбрать]
- [CommandMethod("get-all-layout")]
- public static void GetAllLayoutsBlockReferencesCommand()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database dbase = doc.Database;
- using (Transaction trans = dbase.TransactionManager.StartTransaction())
- {
- BlockTable bt = trans.GetObject(dbase.BlockTableId, OpenMode.ForRead) as BlockTable;
- List<ObjectId> blockRefList = new List<ObjectId>();
- DBDictionary layoutsDict = trans.GetObject(dbase.LayoutDictionaryId, OpenMode.ForRead) as DBDictionary;
- foreach (DBDictionaryEntry layout in layoutsDict)
- {
- using (BlockTableRecord space = trans.GetObject(layout.Value, OpenMode.ForRead) as BlockTableRecord)
- // space = null!
- {
- foreach (ObjectId id in space)
- {
- if (id.ObjectClass.DxfName == "INSERT")
- {
- blockRefList.Add(id);
- }
- }
- }
- }
- }
- }
ACAD2021