Как можно сделать таблицу в автокаде используя C#

Автор Тема: Как можно сделать таблицу в автокаде используя C#  (Прочитано 6221 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн AndrewSHOCKАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Добрый день всем! Помогите новичку решить задачу - написать простенький код на C#. Исходные данные: блоки с атрибутами в чертеже, атрибуты во всех блоках одинаковые, только расположены в разном порядке, сами блоки - dwg файлы, которые я вставлял в автокаде. Так вот суть задачи. Посчитать блоки с этими расположенными у каждого блока в разном порядке атрибутами и сделать таблицу, по типу ведомости где должны быть колонки: Позиция, Наименование, Возраст, Примечание и результирующая колонка где будет количество блоков по каждой позиции. Заранее СПАСИБО!!!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndrewSHOCKАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Хочу в WinForm добавить dataGridView и заполнить его атрибутами блоков и их значениями и не понимаю почему дает ошибку error CS0234: Тип или имя пространства имен "AcadSelectionSet" не существует в пространстве имен "Autodesk.AutoCAD.Interop.Common" на этот код? Подключил Autodesk.AutoCAD.Interop.Common.dll прям из папки Автокад и все равно ошибка не устранилась
Код - C# [Выбрать]
  1.        {
  2.             // Подключиться к AutoCAD
  3.             Autodesk.AutoCAD.Interop.AcadApplication acadApp;
  4.             acadApp = (Autodesk.AutoCAD.Interop.AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
  5.  
  6.             // Получить текущий чертеж
  7.             Autodesk.AutoCAD.Interop.AcadDocument acadDoc;
  8.             acadDoc = acadApp.ActiveDocument;
  9.  
  10.             // Получить все объекты в чертеже
  11.             Autodesk.AutoCAD.Interop.Common.AcadSelectionSet selSet;
  12.             selSet = acadDoc.SelectionSets.Add("MySelection");
  13.             selSet.Select(Autodesk.AutoCAD.Interop.Common.AcSelect.acSelectionSetAll);
  14.  
  15.             // Создать таблицу DataGridView
  16.             dataGridView_G.ColumnCount = 1; // начальное число колонок
  17.             dataGridView_G.Columns[0].Name = "Атрибут"; // название первой колонки
  18.  
  19.             // Создать словарь для хранения атрибутов блоков
  20.             Dictionary<string, List<string>> attributes = new Dictionary<string, List<string>>();
  21.  
  22.             // Проход по всем выбранным объектам
  23.             foreach (Autodesk.AutoCAD.Interop.Common.AcadEntity entity in selSet)
  24.             {
  25.                 Autodesk.AutoCAD.Interop.Common.AcadBlockReference blockRef = entity as Autodesk.AutoCAD.Interop.Common.AcadBlockReference;
  26.                 if (blockRef != null && blockRef.HasAttributes == true)
  27.                 {
  28.                     // Фильтрация только блоков с атрибутами
  29.                     foreach (Autodesk.AutoCAD.Interop.Common.AcadAttributeReference attrib in blockRef.GetAttributes())
  30.                     {
  31.                         string attTag = attrib.TagString;
  32.                         string attValue = attrib.TextString;
  33.  
  34.                         // Добавление в словарь
  35.                         if (!attributes.ContainsKey(attTag))
  36.                         {
  37.                             attributes[attTag] = new List<string>();
  38.                             dataGridView_G.Columns.Add(attTag, attTag); // добавление новой колонки
  39.                         }
  40.                         attributes[attTag].Add(attValue);
  41.                     }
  42.                 }
  43.             }
  44.  
  45.             // Заполнение DataGridView значениями атрибутов
  46.             foreach (KeyValuePair<string, List<string>> kvp in attributes)
  47.             {
  48.                 string attributeName = kvp.Key;
  49.                 List<string> attributeValues = kvp.Value;
  50.  
  51.                 // Добавить новую строку
  52.                 int rowIndex = dataGridView_G.Rows.Add();
  53.                 DataGridViewRow row = dataGridView_G.Rows[rowIndex];
  54.  
  55.                 // Установка значения результирующей колонки
  56.                 row.Cells[0].Value = rowIndex;
  57.  
  58.                 // Заполнение значений колонок атрибутов
  59.                 for (int i = 1; i <= attributeValues.Count; i++)
  60.                 {
  61.                     row.Cells[i].Value = attributeValues[i - 1];
  62.                 }
  63.             }
  64.             // Удалить временный выбор объектов
  65.             selSet.Delete();
  66.         }
« Последнее редактирование: 10-11-2023, 17:10:30 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Подключил Autodesk.AutoCAD.Interop.Common.dll прям из папки Автокад и все равно ошибка не устранилась
Нужно еще подключить Autodesk.AutoCAD.Interop.dll и не
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Interop.Common.AcadSelectionSet selSet;
а
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Interop.AcadSelectionSet selSet;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AndrewSHOCKАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Огромное спасибо! Помогло. Иду дальше - буду пробовать выгружать из диалога в Автокад и Excell

Оффлайн AndrewSHOCKАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Очень странно отрабатывает код - неправильно заполняет колонки dataGridView, он заполняет столбцами значения атрибутов и не ведет подсчет блоков с идентичными значениями атрибутов, ну и само собой не правильная результирующая колонка


Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Очередное изобретение ГИС, есть же Map 3D

Оффлайн AndrewSHOCKАвтор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Есть и в GeoniCS, но проблема в том, что стандарты предприятия иногда требуют для стадии РД создавать свои, не ГОСТовские таблицы и ведомости. Так что проблема не в "изобретении велосипеда"