Перед тем как приступим к техническому аспекту данной темы… Прежде всего нужно понимать основы самого продукта. Model Studio - продукт достаточно открытый, имеет много степеней свободы и позволяет пользователю, до мельчайших подробностей подготовить основу для формирования схем. Конечно, имеются и свои границы. Элементарная часть условно-графических обозначений (УГО) схемы храниться в БД библиотеке компонентов. И от ее содержимого, от того насколько она подготовлена зависит результат – готовая технологическая схема, выходные документы-отчеты, задания в смежные отделы проектирования.

Цели и задачи

Цель данной статьи показать, как используя COM-объектную модель получать данные и передавать их в параметрический текст условного графического обозначения.

Новичкам, которые никогда не сталкивались с COM будет сложно понять если не объяснить просто что такое COM. Невозможно понять, что такое апельсин пока его не попробуешь, так же и с COM, чтобы понять что это такое нужно его пробовать. COM это некая абстрактная объектно-ориентированная модель, которая описывает все свойства объекта и его методы. Например, под свойствами апельсина мы понимаем его место расположение, цвет, запах, форму и т.п., так и в COM свойства дают нам понять или почувствовать сам предмет, например, точка вставки предмета, слой, на котором он расположен, его цвет и т.п. Методы же позволяют нам определить как мы можем взаимодействовать с апельсином, т.е. выполнять какие-то действия над предметом. Например, можем его почистить, разрезать, выдавить сок и т.п. Т.е. методы предмета - копирование, перенос, масштабирование, поворот и т.п. позволят нам взаимодействовать с предметом. И делаем резюме: COM описывает свойства предмета или сущности и методы взаимодействия с предметом или сущностью.

Теперь, когда мы в общих чертах понимаем, что такое COM, можно приступить и к пониманию как он применяется в объектах технологической схемы.

Прежде чем мы окунемся в COM давайте еще обозначим наши цели. Итак, перед нами стоит задача вставить деталь-ответвление (тройник переходной) на трубопроводную технологическую линию с возможностью вывода информации по диаметру на магистральном участке тройника и на переходном участке.

За основу возьмем уже имеющееся графическое определение тройника в поставляемой БД производителем.

Подготовительные действия

Установка текстового стиля по шаблону ModelStudio.

Нам понадобится новый пустой чертеж, созданный по шаблону nMStudio_GOST.dwt, в котором мы будем проводить все действия, поэтому запустив с рабочего стола ПО «Model Studio Технологические схемы» на ленте «Model Studio CS» выберите команду «Применить шаблон» и выберите nMStudio_GOST.dwt.

то необходим сделать чтобы подтянуть в текущий пустой документ, созданный по дефолтному шаблону, настройки стилей (текстовых, выносок, размерных) применяемых в стандартной БД.

Подготовка тестовой технологической линии связи с DN80

Далее, начертите в произвольном месте трубопроводную линию (лента «Технологические схемы -> Трубопроводная линия»). При черчении задайте «Диаметр условный (Ду)» равным 80 и Диаметр трубопровода равным 89. 

Остальные параметры нас в рамках задачи настройки не интересуют, поэтому не будем обращать на них внимание.

Использование имеющегося тройника для создания нового элемента.

Находясь на панели инструментов «Model Studio CS» на вкладке Менеджера библиотек, потащите и бросьте в чертеж УГО «Тройник переходной» как показано на скриншоте ниже

Расположите его в удобном месте на линии

Готово! Теперь можно приступить к следующей части.

Вывод информации о магистральном диаметре через параметризацию

Создание параметрического текстового поля

Перейдите на ленту «Model Studio CS» и выполните команду «Редактировать оборудование»

В редакторе параметрического оборудования мы имеем инструментарий, который позволит нам выполнить внешний образ нашего элемента при помощи 2D примитивов. Нам понадобится примитив «Текстовое поле». Чтобы вставить текстовое поле, щелкаем по корневому элементу дерева параметрического элемента «2D». В появившемся контекстном меню выберите «2D Примитив -> Текстовое поле».

Добавляется текстовое поле с именем TEXTBOX в окне редактора параметрического оборудования.

Сразу зададим геометрические параметры и расположение текстового поля:

Параметр

Значение

Примечание

Геометрия

Высота

3

поскольку одной строки для вывода диаметра нам достаточно

Ширина

6

 

Базовая точка

X координата

-3

Вычислено по формуле: -1(смещение влево) * Ширина/2

Y координата

1

отступ текста вверх от магистрали тройника

Текст

Выравнивание

5

Центр-посередине

Высота текста

2.5

 

В свойствах тройника отсутствует параметр, отвечающий за условный диаметр магистрали PART_PIPE_DN. Если добавить этот параметр в свойства компонента, то автоматически этот параметр будет заполнен из данных сегмента линии.

*Примечание. Мы не будем добавлять параметр PART_PIPE_DN, так как нам необходимо получить информацию о диаметре через связь тройника с сегментом.

В параметре текст нажмите на кнопку с троеточием.

 

В мастере функций можно приступить к созданию формулы. Формулу будем создавать при помощи объектно-ориентированной модели COM.

 

Вернемся к нашему примеру. Нажмите на кнопку «Добавить запрос к COM»

Используем Фильтр и выберем пункт «Элементы схем» - этот пункт содержит только те СОМ, которые относятся к объектам схемы

В отфильтрованном списке разверните объект IMSSymbol

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

Далее выберите «Фильтр –> Базовые объекты Model Studio CS». Разверните объект IElement и дважды щелкните по свойству Parameters при этом автоматически свойство добавится в нижнюю строку и перейдет к объекту IParameters и дважды щелкните по нему

Строка будет иметь следующее наполнение: object.SegmentData.Parameters. Далее дважды щелкните по методу Item

 

при этом автоматически метод добавится в нижнюю строку и перейдет к объекту IParameter. Строка будет иметь вид: object.SegmentData.Parameters.Item([Index])

Дважды щелкните по Value

Строка будет иметь вид: object.SegmentData.Parameters.Item([Index]).Value

Нажмите на кнопку «Ок». Построение строки завершено.

В мастере функций в методе Item вместо [Index] необходимо указать в кавычках имя параметра "PART_PIPE_DN".

Итоговая функция имеет теперь вид:

object.SegmentData.Parameters.Item("PART_PIPE_DN").Value

 

Нажмите в мастере функций «Ок»

Теперь значение Текст = 80

Испытания тройника и обработка событий.

Можно было бы закончить на этом, но перед нами предстоит еще провести испытание на различного рода события в которых может участвовать тройник. При этом поведение текста нам будет не совсем понятным и нужно будет контролировать поведение текста в зависимости от тех или иных событий. Например, событие, когда меняется направление потока, событие, когда тройник перемещается/размещается вдоль горизонтального и вертикального участка линии, событие, когда тройник нужно развернуть в противоположную сторону. Всё это нужно учесть.

Учет события переворота тройника

Теперь выделите корень параметрического элемента щелкнув по 2D. Это необходимо чтобы снять выделение зеленым цветом TEXTBOX

Далее в чертеже выделим тройник и при помощи ручки в виде стрелки перевернем объект при помощи опции ручки «Перевёрнут»

 

Наблюдаем, что текст вместе с тройником переворачивается вверх тормашками, чего допустить ни как нельзя.
Реагирование на событие переворота.

Откроем окно Свойства (CTRL+1) Переворот фиксируется в свойстве Ориентация

Если выполнить в командной строке nanoCAD выражение:
(progn (vl-load-com) (vlax-dump-Object (vlax-ename->vla-object (car (entsel)))))

И в ходе выполнения выберите тройник. В командной строке (клавиша F2) будут перечислены все свойства тройника как показано на скриншоте ниже.

Здесь свойство ReversedOrientation и есть Ориентация

Будем использовать это свойство для анализа и переворачивания текста. Так же нам понадобится группа как некий контейнер при помощи которой будем переворачивать текст.

Создаем группу в параметрическом редакторе.

Выполним команду Редактировать оборудование с ленты Model studio CS

В ходе действия команды выделите тройник.

В окне параметризатора выберите 2D и щелкнув ПКМ вызовите контекстное меню

В созданную группу перенесите текст TEXTBOX как показано на картинке ниже

Выделите текст TEXTBOX и установите параметрические свойства текста «Базовая точка» - «Y координата» = -1.5 чтобы текст оказался по центру тройника

Далее все манипуляции будем проводить с созданной группой.

Чтобы текст наш развернулся, ну и соответственно все входящие в группу элементы, если такие есть, нам необходимо управлять направлением ориентации этой группы. Т.е. мы должны менять направление ориентации группы, как только меняется свойство ReversedOrientation. Соответственно выполним следующее:

Выделите группу GROUP. В параметрах группы выделите ячейку «Направление» - «Х координата» -> нажмите на кнопку с троеточием

В окне «Ориентация в пространстве» выделите ячейку «Направление» - «Х координата» -> нажмите на кнопку с троеточием

И в окне «Мастер функций» установите следующую формулу:

if(object.ReversedOrientation,-1,1)

формулу следует читать так: если свойство Ориентация = Перевернуто, то направление текста по ординате X переворачиваем и оно равно -1, иначе, Ориентация = По умолчанию,  то значение направление текста по ординате X равно 1.

Нажмите на кнопку Ок в «Мастере функций», далее на кнопку ОК в окне «Ориентация в пространстве». Текст перевернется. «Направление» - «Х координата» теперь имеет значение -1

Обратите внимание, что теперь напротив «X направление» появился значок функции. Это говорит о том, что параметр вычисляется по формуле

Ну и теперь как бы мы не меняли направление текст всегда будет нужной нам ориентации.

Теперь еще один момент. Сместим группу относительно центра тройник, задав статическое значение «Базовая точка» - «Y координата» равное 2 (можно задать другое значение в зависимости от высоты текста: высота текста, деленная пополам плюс расстояние на зазор между текстом и тройником).

Теперь текст сместился от центра тройника

  

Проверка поведения при смене направления потока.

Ну и следующий шаг – это проверка поведения при смене направления потока линии.

Выделите тройник.

Убедитесь, что в свойствах тройника установлено значение «Да» в свойстве «Ориентировать по связи». Как только вы устанавливаете «Да», то автоматически появляется еще одно свойство «Ориентировать по потоку» с значением «Да».

 

В принципе можно ориентацию по потоку отключить и тогда можно не проводить следующие действия, но пользователь не всегда может помнить, что нужно сделать с отключением ориентации по потоку и все равно придется контролировать это свойство через параметры 

Когда вы выполняете команду «Изменить направление» на ленте «Технологические схемы»

В свойствах сегмента линии появляется параметр FLOW_DIRECTION («Направление потока», см скриншот ниже). И текст будет снова перевернутым как на горизонтальном, так и на вертикальном участке (чтобы посмотреть, как работает на горизонтальном участке, самостоятельно его дочертите и перенесите на этот сегмент тройник)

Ну и чтобы исправить ситуацию нам поможет флип с направлением по Я для нашей группы GROUP

Поэтому выделите группу GROUP в редакторе параметрического оборудования и в «Ориентация» - «Z координата» нажмите на кнопку с троеточием

И в окне «Ориентация в пространстве» и в «Ориентация» - «Z координата» нажмите на кнопку с троеточием

И в мастере функций укажите следующую формулу:

if(object.SegmentData.Parameters("FLOW_DIRECTION").value="1",

-1*(object.SegDirection[0]+object.SegDirection[1]),

object.SegDirection[0]+object.SegDirection[1]

)

Где при помощи выражения object.SegmentData.Parameters("FLOW_DIRECTION").value считываем значение из данных сегмента к которому прикреплен тройник, выражение object.SegDirection[0] возвращает значение координаты X направления текущего сегмента, выражение object.SegDirection[1] возвращает значение координаты Y направления текущего сегмента.

Т.е. мы используя сумму значений ординат направления сегмента, чтобы определить разворот нашего текста. Если сегменты не ортогональные, то нужно будет задействовать тригонометрические функции. Но для упрощенного понимания оставим все как есть.

Проверим работу, нажав везде на кнопку Ок.

 

Завершение

На этом мы закончим этот обзор. Не забудьте добавить в БД Менеджера библиотек созданный вами элемент.

В завершении хочу сказать, что благодаря этому краткому обзору вы смогли ознакомится с параметризатором, ознакомится с работой в COM и учитывать особенности работы с условными графическими обозначениями их свойствами в Model Studio CS Технологических схемах.

 В следующем выпуске мы с вами познакомимся с интересной темой, на мой взгляд: передачи переходного диаметра в тройник из присоединенной к узлу тройника технологической линии. Соответственно вы получите опыт и понимание того, как достучаться до COM данных технологической линии, присоединенной к узлу условно-графического отображения тройника.
THIS HISTORY TO BE CONTINUED…

 

С уважением, Игорь Мартынец.

Ведущий специалист САПР

Бюро САПР, 2026г