MultiCAD.NET API: вставка блока с атрибутами
В сегодняшней публикации речь пойдёт о вставке блоков с использованием MultiCAD.NET API, это один из наиболее часто задаваемых вопросов в программистском разделе нашего форума.
Итак, имеется файл чертежа, который уже содержит блоки-шаблоны для условных обозначений элементов чертежа, например, схемы водоснабжения. Допустим, блоки для представления различных типов кранов содержат два атрибута:
- NAME — название элемента (например, «Шаровый»),
- LABEL — маркировка элемента (например,»11Б27п (М)»),
и имеют следующее графическое представление:
В MultiCAD.NET для представления вставки блока на чертеже используется класс McBlockRef
. Все, что необходимо сделать — это создать объект-вставку и присвоить имя блока в качестве поля BlockName
:
McBlockRef refBlk = new McBlockRef();
refBlk.BlockName = "block_01";
refBlk.DbEntity.AddToCurrentDocument();
В MultiCAD.NET атрибуты блоков хранятся так же, как обычные свойства объекта, поэтому чтобы вставить блок с заданными значениями атрибутов, достаточно получить к ним доступ через DbEntity.ObjectProperties
:
refBlk.DbEntity.ObjectProperties["NAME"] = "Шаровый”;
refBlk.DbEntity.ObjectProperties["LABEL"] = "11Б27п(М)”;
Класс McDocument
содержит метод для вывода на экран диалога со списком всех блоков, присутствующих в документе, с помощью которого можно выбрать необходимый блок для вставки:
Следующая команда вставляет выбранный блок на чертеж с заданными значениями атрибутов. Для ввода значений используется командная строка.
[CommandMethod("smpl_insertBlock", CommandFlags.NoCheck | CommandFlags.Redraw)]
static public void smpl_insertBlock()
{
// Получаем активный документ
McDocument doc = McDocumentsManager.GetActiveDoc();
if (doc == null) return;
String selBlock = String.Empty;
McObjectId currId;
// Вызываем диалог выбора блока
if (doc.ShowSelectBlockForm(ref selBlock, out currId, McContext.MainWindow().Handle))
{
McBlockRef refBlk = new McBlockRef();
refBlk.BlockName = selBlock;
refBlk.DbEntity.AddToCurrentDocument();
// Пользовательский ввод
InputJig jig = new InputJig();
refBlk.DbEntity.ObjectProperties["NAME"] = jig.GetText("Введите тип крана:");
refBlk.DbEntity.ObjectProperties["LABEL"] = jig.GetText("Введите маркировку крана:");
}
else
{
MessageBox.Show("Блок не выбран");
}
}