В сегодняшней публикации речь пойдёт о вставке блоков с использованием 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("Блок не выбран"); } }
ссылка на оригинал статьи http://habrahabr.ru/post/269203/
Добавить комментарий