MultiCAD.NET API: вставка блока с атрибутами

В сегодняшней публикации речь пойдёт о вставке блоков с использованием MultiCAD.NET API, это один из наиболее часто задаваемых вопросов в программистском разделе нашего форума.

Итак, имеется файл чертежа, который уже содержит блоки-шаблоны для условных обозначений элементов чертежа, например, схемы водоснабжения. Допустим, блоки для представления различных типов кранов содержат два атрибута:

  • NAME — название элемента (например, «Шаровый»),
  • LABEL — маркировка элемента (например,»11Б27п (М)»),

и имеют следующее графическое представление:

image
В 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 содержит метод для вывода на экран диалога со списком всех блоков, присутствующих в документе, с помощью которого можно выбрать необходимый блок для вставки:

image

Следующая команда вставляет выбранный блок на чертеж с заданными значениями атрибутов. Для ввода значений используется командная строка.

[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("Блок не выбран");
      }
    }

© Habrahabr.ru