public void find_my_Block()
{
int Kol_block;
Kol_block = 2;
// получаем БД и Editor текущего документа
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
// создаем переменную, в которой будут содержаться данные для фильтра
//TypedValue[] filterlist = new TypedValue[1];
TypedValue[] filterlist = new TypedValue[2];
// первый аргумент (0) указывает, что мы задаем тип объекта
filterlist[0] = new TypedValue((int)DxfCode.Start, "INSERT");
filterlist[1] = new TypedValue((int)DxfCode.BlockName, "штамп 185х55 мм");
// создаем фильтр
SelectionFilter filter = new SelectionFilter(filterlist);
PromptSelectionResult selRes = ed.SelectAll(filter);
// если произошла ошибка - сообщаем о ней
if (selRes.Status != PromptStatus.OK)
{
ed.WriteMessage("\nВ чертеже нет блока Штамп!\n");
return;
}
ObjectId[] ids = selRes.Value.GetObjectIds(); // получаем массив ID объектов
Transaction tr = db.TransactionManager.StartTransaction();
using (tr)
{
// "пробегаем" по всем полученным объектам
foreach (ObjectId id in ids)
{
Entity entity = (Entity)tr.GetObject(id, OpenMode.ForRead); // приводим каждый из них к типу Entity
Kol_block++;
}
tr.Commit();
}
//Вызов запроса на указание места вставки таблицы
PromptPointResult pr = ed.GetPoint("\nУкажите место вставки таблицы: ");
if (pr.Status == PromptStatus.OK)
{
Table tb = new Table();
tb.TableStyle = db.Tablestyle;
tb.NumRows = Kol_block;
tb.NumColumns = 3;
tb.SetRowHeight(8);// устанавливаем высоту всех строк "8 мм" по ГОСТ 21.101
tb.SetRowHeight(0,10);// устанавливаем высоту у строки "Заголовок" "10 мм"
tb.SetRowHeight(1, 15);// устанавливаем высоту у строки "Название" "15 мм" по ГОСТ 21.101
tb.SetColumnWidth(0,15); // устанавливаем ширину столбца "Лист" по ГОСТ 21.101 "15 мм"
tb.SetColumnWidth(1,140); // устанавливаем ширину столбца "Наименование" по ГОСТ 21.101 "140 мм"
tb.SetColumnWidth(2,30); // устанавливаем ширину столбца "Примечание" по ГОСТ 21.101 "30 мм"
tb.Position = pr.Value;
string[,] str = new string[Kol_block, 3];
for (int i = 0; i < Kol_block; i++)
{
for (int j = 0; j < 3; j++)
{
str[i, j] = String.Empty;
}
}
str[0, 0] = "Ведомость рабочих чертежей основного комплекта "; // Присваиваем 0 строке "Заголовок" значение
str[0, 1] = " "; //"Ведомость рабочих чертежей основного комплекта"
str[0, 2] = " ";
str[1, 0] = "Лист "; // Присваиваем 0-му столбцу строки "Название" значение "Лист"
str[1, 1] = "Наименование "; // Присваиваем 1-му столбцу строки "Название" значение "Лист"
str[1, 2] = "Примечание "; // Присваиваем 2-му столбцу строки "Название" значение "Примечание"
// Используем вложенный цикл для добавления и форматирования каждой ячейки
for (int i = 0; i < Kol_block; i++)
{
for (int j = 0; j < 3; j++)
{
tb.SetTextHeight(i, j, 3); // устанавливаем высоту текста "3"
tb.SetTextString(i, j, str[i, j]);// Добавляем новую строку
tb.SetAlignment(i, j, CellAlignment.MiddleCenter);// устанавливаем выравнивание текста по центру для шапки таблицы ("Заголовок", "Название")
if (i > 1)
{
tb.SetAlignment(i, 1, CellAlignment.MiddleLeft); // устанавливаем для 2-го столбца выравнивание по центру слева
// начиная с 1-й строчки "Данные"
}
}
}
tb.GenerateLayout();
Transaction tr =
doc.TransactionManager.StartTransaction();
using (tr)
{
BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
btr.AppendEntity(tb);
tr.AddNewlyCreatedDBObject(tb, true);
tr.Commit();
}
}
}