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

    Нанософт

    77,00

    Компания

    Поделиться публикацией
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое