[private void button_zag_Click(object sender, EventArgs e)
{
// Получение активного чертежа AutoCAD
blockAttributes = new List<BlockAttribute>();
Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
Editor acEd = acDoc.Editor;
// Запрос пользователю для выбора блоков с атрибутами
PromptSelectionResult res = acEd.GetSelection(new SelectionFilter(new[]
{ new TypedValue((int)DxfCode.Start, "INSERT"),
//new TypedValue((int)DxfCode.Operator, "<OR"), // Добавляем оператор OR
//new TypedValue((int)DxfCode.LayerName, "HATCH"), // Условие для штриховки
//new TypedValue((int)DxfCode.Operator, "<OR"), // Добавляем оператор OR
//new TypedValue((int)DxfCode.LayerName, "MPOLYGON"), // Условие для штриховки
//new TypedValue((int)DxfCode.Operator, "OR>"), // Закрываем оператор OR
}));
if (res.Status == PromptStatus.OK)
{
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
SelectionSet acSSet = res.Value;
foreach (ObjectId objectId in acSSet.GetObjectIds())
{
BlockReference blockReference = acTrans.GetObject(objectId, OpenMode.ForRead) as BlockReference;
if (blockReference.AttributeCollection.Count > 0)
{
BlockAttribute blockAttribute = new BlockAttribute();
foreach (ObjectId attId in blockReference.AttributeCollection)
{
AttributeReference attributeReference = acTrans.GetObject(attId, OpenMode.ForRead) as AttributeReference;
blockAttribute.Attributes.Add(attributeReference.Tag, attributeReference.TextString);
}
blockAttributes.Add(blockAttribute);
}
}
acTrans.Commit();
}
}
// Группируем блоки по значениям атрибутов
var groupedAttributes = blockAttributes.GroupBy(a => string.Join(", ", a.Attributes.Values));
// Создаем DataTable для отображения в dataGridView
System.Data.DataTable dataTable = new System.Data.DataTable();
foreach (var attribute in blockAttributes.First().Attributes)
{
dataTable.Columns.Add(attribute.Key);
}
dataTable.Columns.Add("Количество");
foreach (var group in groupedAttributes)
{
DataRow dataRow = dataTable.NewRow();
foreach (var attribute in group.First().Attributes)
{
dataRow[attribute.Key] = attribute.Value;
}
dataRow["Количество"] = group.Count();
dataTable.Rows.Add(dataRow);
}
// Настраиваем dataGridView
dataGridView.DataSource = dataTable;
this.Show();
//Commands commands = new Commands();
//commands.RunForm1Dialog();
}
//Функция словаря для блоков
public class BlockAttribute
{
public Dictionary<string, string> Attributes { get; set; }
public BlockAttribute()
{
Attributes = new Dictionary<string, string>();
}
}