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

Комментарии (0)