Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: solandrew от 13-04-2021, 11:39:30

Название: Таблица блоков автокад
Отправлено: solandrew от 13-04-2021, 11:39:30
Всем привет! Столкнулся с такой проблемой - хочу создать таблицу блоков, но одни и те же блоки могут лежать на разных слоях своего назначения. Есть блок с определенным именем, хочу записать сумму таких блоков на каждом слое и записать их по столбцам в таблицу. Кто то может помочь с таким, или сказать в какую сторону копать и где искать решение подобной проблемы?

таблица типа - ведомость дорожных знаков, знак расположен на стойке, опоре итд, расположение его привязано к слою
Название: Re: Таблица блоков автокад
Отправлено: avc от 13-04-2021, 11:43:52
Все можно сделать, но зачем? Чем не устраивают готовые решения: Извлечение данных, Команда Count из AutoCAD 2022 или мой плагин AVC_DataTable https://sites.google.com/site/avcprg/datatable (https://sites.google.com/site/avcprg/datatable)
Название: Re: Таблица блоков автокад
Отправлено: solandrew от 13-04-2021, 11:51:54
Все можно сделать, но зачем?
Да почему бы и нет) Первое - учусь, самому все интересно. Второе - делаю не для себя, а для коллег, которые не все умеют пользоваться даже стандартным извлечением данных
Команду Count увидел, интересная вещь

Про плагин AVC_DataTable не знал, поизучаю еще его)
Название: Re: Таблица блоков автокад
Отправлено: avc от 13-04-2021, 12:02:44
Если есть конкретная проблема с API - тогда напишите какая именно. А так у вас общая постановка задачи и более ничего. Это больше подходит для раздела "программирование на заказ". Решение задачи в целом очевидно: перебрать все BlockRefence в модели или среди выбранных объектов, составить список имен/слоев/количества, Составить таблицу, вывести в буфер/Excel/таблицу AutoCAD.
Название: Re: Таблица блоков автокад
Отправлено: solandrew от 13-04-2021, 13:22:23
Если есть конкретная проблема с API - тогда напишите какая именно. А так у вас общая постановка задачи и более ничего. Это больше подходит для раздела "программирование на заказ". Решение задачи в целом очевидно: перебрать все BlockRefence в модели или среди выбранных объектов, составить список имен/слоев/количества, Составить таблицу, вывести в буфер/Excel/таблицу AutoCAD.

В том и дело, перебрать блоки и записать их в таблицу не проблема, Каким методом вывести слой блока - тоже ясно, а как разделить их по типу - Знак 1.1 - На опоре - 2шт, на консоли - 3 шт итд и записать построчно в таблицу, не совсем понимаю, потому что в List<BlockReference> добавляются уже блоки с конкретных слоев через TypedValue. Потому и написал сюда, надеясь на подсказку какую)
Название: Re: Таблица блоков автокад
Отправлено: avc от 13-04-2021, 13:36:22
Не вижу проблемы. Создайте структуру Блок/Слой/Количество и считайте сколько их у вас разных
Название: Re: Таблица блоков автокад
Отправлено: avc от 13-04-2021, 13:41:20
Если вам перекрестная (транспонированная) таблица нужна на выходе (слои-столбцы, блоки-строки), то можно сразу в двухмерный массив количество записывать или массив массивов использовать. Все это не имеет отношения к API AutoCAD, это азы программирования.
Название: Re: Таблица блоков автокад
Отправлено: solandrew от 13-04-2021, 13:42:39
Спасибо, попробую в эту сторону копать) Понимаю что азы, но совсем недавно начал этим заниматься
Название: Re: Таблица блоков автокад
Отправлено: avc от 13-04-2021, 13:44:56
List<BlockReference>
Лучше никогда не храните и не передавайте в другие методы объекты DBObject, в том числе BlockReference. Вам тут не нужен список блоков, а нужны массивы или словари строк (имена блоков и слоев). Или лучше свои структуры с полями-строками.
Название: Re: Таблица блоков автокад
Отправлено: Lemieux от 13-04-2021, 14:57:47
Судя по поставленной задаче я бы делал с помощью LINQ через Group. А потом с группами делал то, что мне надо.
Название: Re: Таблица блоков автокад
Отправлено: Дмитрий Загорулькин от 13-04-2021, 15:43:31
я бы делал с помощью LINQ
Только если хорошо понимать что такое отложенный запрос LINQ и уметь контролировать это. А то автор будет потом с удивлением наблюдать, как Автокад фатально крашится из-за того, что объекты коллекций, к которым он обращается, уже давно закрыты.
Название: Re: Таблица блоков автокад
Отправлено: Lemieux от 13-04-2021, 19:02:49
я бы делал с помощью LINQ
Только если хорошо понимать что такое отложенный запрос LINQ и уметь контролировать это. А то автор будет потом с удивлением наблюдать, как Автокад фатально крашится из-за того, что объекты коллекций, к которым он обращается, уже давно закрыты.
Да пару раз упадёт, а потом автор сам поймёт механику работы запросов  :)
Название: Re: Таблица блоков автокад
Отправлено: solandrew от 04-05-2021, 08:56:50
Разобрался, наконец-то дошли руки на той неделе. Сделал через 2 массива, и потом сравнивал в циклах между собой, и забил все в таблицу
Всем спасибо за наводки)