{
// Подключиться к AutoCAD
Autodesk.AutoCAD.Interop.AcadApplication acadApp;
acadApp = (Autodesk.AutoCAD.Interop.AcadApplication)Marshal.GetActiveObject("AutoCAD.Application");
// Получить текущий чертеж
Autodesk.AutoCAD.Interop.AcadDocument acadDoc;
acadDoc = acadApp.ActiveDocument;
// Получить все объекты в чертеже
Autodesk.AutoCAD.Interop.Common.AcadSelectionSet selSet;
selSet = acadDoc.SelectionSets.Add("MySelection");
selSet.Select(Autodesk.AutoCAD.Interop.Common.AcSelect.acSelectionSetAll);
// Создать таблицу DataGridView
dataGridView_G.ColumnCount = 1; // начальное число колонок
dataGridView_G.Columns[0].Name = "Атрибут"; // название первой колонки
// Создать словарь для хранения атрибутов блоков
Dictionary<string, List<string>> attributes = new Dictionary<string, List<string>>();
// Проход по всем выбранным объектам
foreach (Autodesk.AutoCAD.Interop.Common.AcadEntity entity in selSet)
{
Autodesk.AutoCAD.Interop.Common.AcadBlockReference blockRef = entity as Autodesk.AutoCAD.Interop.Common.AcadBlockReference;
if (blockRef != null && blockRef.HasAttributes == true)
{
// Фильтрация только блоков с атрибутами
foreach (Autodesk.AutoCAD.Interop.Common.AcadAttributeReference attrib in blockRef.GetAttributes())
{
string attTag = attrib.TagString;
string attValue = attrib.TextString;
// Добавление в словарь
if (!attributes.ContainsKey(attTag))
{
attributes[attTag] = new List<string>();
dataGridView_G.Columns.Add(attTag, attTag); // добавление новой колонки
}
attributes[attTag].Add(attValue);
}
}
}
// Заполнение DataGridView значениями атрибутов
foreach (KeyValuePair<string, List<string>> kvp in attributes)
{
string attributeName = kvp.Key;
List<string> attributeValues = kvp.Value;
// Добавить новую строку
int rowIndex = dataGridView_G.Rows.Add();
DataGridViewRow row = dataGridView_G.Rows[rowIndex];
// Установка значения результирующей колонки
row.Cells[0].Value = rowIndex;
// Заполнение значений колонок атрибутов
for (int i = 1; i <= attributeValues.Count; i++)
{
row.Cells[i].Value = attributeValues[i - 1];
}
}
// Удалить временный выбор объектов
selSet.Delete();
}