Пример создания анимированных объектов

В данном примере рассмотрен процесс создания внешне идентичных анимированных объектов SimInTech двумя различными способами:

На рисунке ниже представлен внешний вид этих объектов.

Внешне идентичные анимированные объекты: а – объект, скомпонованный из примитивов непосредственно в схемном окне проекта; б – объект, скомпонованный внутри контейнера «графическая группа»

В отдельных примерах рассмотрены случаи создания анимированной пиктограммы для блока «Субмодель» и панели управления.

Процесс создания анимированного объекта условно можно разделить на три этапа:

Приведённый порядок следования этапов не является обязательным, действия могут выполняться в удобной для разработчика последовательности.

Для любой анимации необходимы динамически изменяющиеся в процессе расчёта значения. В реальном проекте моделирования такие значения есть в наличии де-факто, если появляется задача их визуализации. В нашем примере пока таких сигналов нет, поэтому мы начнём с нулевого этапа – создания модели, порождающей какие-либо величины, изменяющиеся во времени.

Нулевой этап – создание модели, предмета визуализации

Для этого создадим новый пустой проект типа «Схема автоматики» (процесс создания анимированных объектов во всех типах проектов одинаков). Затем соберём в нём следующую модель на основе библиотечных блоков SimInTech.

Исходная расчетная модель

Изменим свойства блоков источников следующим образом:

Характеристики динамических блоков модели

При запуске расчёта данной модели на выходе мы будем иметь две динамически изменяющихся величины: синусоидальный сигнал с диапазоном значений от 0 до 100 и пилообразный периодический сигнал с диапазоном значений от 0 до 4. Теперь можно приступать к созданию анимированного виртуального показывающего прибора, который будет осуществлять визуализацию рассчитываемых сигналов.

Первый этап – компоновка изображения для будущей анимации

Мы рассмотрим процесс создания виртуального показывающего прибора с двумя шкалами и одним цифровым показанием. Данный прибор будет создан в двух вариантах: как набор примитивов в схемном окне проекта и как содержимое графической группы.

Виртуальный прибор, скомпонованный непосредственно в схемном окне проекта

Растровое изображение лицевой панели будущего виртуального прибора

Пурпурный цвет (RGB: 255 0 255) используется в тех местах, которые в окончательном варианте должны стать прозрачными. Можно использовать любой другой цвет, однако использование пурпурного для этих целей является традиционным. Сохраняем полученный рисунок в одном из растровых форматов: BMP, JPG, PNG. Дальнейшие действия выполняются в окне созданного ранее проекта SimInTech.

Панель графических примитивов SimInTech

Свойства примитива «Растровое изображение / RasterImage»

По завершении установок нажать в окне «Свойства» кнопку «Ок». В результате в схемном окне проекта должно появиться нечто похожее на изображение ниже.

Вид примитива «Растровое изображение / RasterImage» после предварительной настройки

Изменяя размеры примитива можно добиться более приемлемого отображения.

Вид примитива «Растровое изображение / RasterImage» после изменения размеров

Взаимное расположение вершин полигона

Пусть полигон перекрывает по высоте длинную щель в лицевой панели нашего виртуального прибора.

Добавление полигона

Обратите внимание: любой выделяемый графический примитив отображается поверх других независимо от его реального положения. После снятия выделения примитив отображается в соответствии со своим порядком размещения по глубине. Подробнее о манипуляциях с графическими объектами читайте в соответствующем разделе.

Добавление шкалы

Встраивание стандартного стрелочного прибора

Добавление и изменение размера прямоугольника для фона

Изменение цвета заливки фонового прямоугольника на черный

Перенос фонового прямоугольника на задний план

Новый внешний вид виртуального прибора

Осталось дополнить проект цифровым прибором, который будет показывать в зависимости от положения выключателя либо значение сигнала sin1, либо значение сигнала pila1. Для этого разместим в схемном окне проекта рядом с нашим виртуальным прибором примитив « Текст».

Добавление текстового примитива для отображения значений источников из модели

Оставим данный примитив без изменений и добавим управляющий графический примитив « Кнопка».

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

Итак, изображение в схемном окне проекта скомпоновано.

Второй этап – создание окружения

Окно редактора связей

Настройки для добавляемых в проект сигналов

Установление соответствия между выходами схемы модели и сигналами проекта

Теперь при запуске расчёта модели в сигналы sin1 и pila1 будут записываться значения синусоиды и пилы от источников из нашей схемы, собранной в схемном окне проекта.

Третий этап – описание связей и логики работы

Описание связей между сигналами и свойствами объектов может быть сделано как с помощью редактора связей, так и с помощью скрипта на встроенном языке программирования. В нашем примере мы будем использовать оба варианта.

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

Окно редактора связей

Добавление сигнала pila1 в качестве источника

Добавление свойства Value стрелочного прибора в качестве приемника сигнала pila1

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

Окно свойств объекта

Редактор скриптов

Формирование динамически изменяющихся координат для полигона

Окончательный вид строки скрипта для привязки размера шкалы из полигона к значению источника sin1

Как видно из примера формат записи свойств графических объектов в скрипте формируется в манере языков объектно-ориентированного программирования: <имя_графического_объекта>.<название_свойства> .

Пример анимации на текущей стадии

if button1.down then

begin

textlabel4.text = "Значение pila1 = ";

textlabel4.values = pila1;

end

else

begin

textlabel4.text = "Значение sin1 = ";

textlabel4.values = sin1;

end

Обратите внимание: свойство «Text» примитива «Текст / Textlabel» предназначено для хранения статичных надписей. Динамически изменяющиеся значения должны присваиваться свойству «Values».

Свойство button1.down принимает значение TRUE при нажатой кнопке и FALSE при отжатой. На основании значения этого свойства свойствам текстового примитива textlabel4.text и textlabel4.values присваиваются соответственно текстовое описание и значение либо для сигнала pila1, либо для сигнала sin1.

Вновь запустим процесс расчета модели: цифровой индикатор должен отображать значения в соответствии с положением переключателя. Сам переключатель должен срабатывать по клику ЛКМ.

Виртуальный прибор, скомпонованный в графическом контейнере

Вид вновь добавленной в схемное окно проекта пустой группы

Свойства графического контейнера Group1

Редактор глобальных (общих) свойств

Как и в случае с предыдущим прибором нам нужно передавать в свойства примитивов значения сигналов sin1 и pila1. Поэтому подготовим два глобальных свойства для трансляции этих значений в группу.

Набор необходимых глобальных свойств и их характеристики

Отображение вновь добавленных глобальных свойств графического контейнера в общем списке

Список глобальных свойств графического контейнера во внутреннем редакторе связей

Перетащим свойство pila1_into_gr в ячейку «Источник» в правой части окна, как мы поступали до этого с сигналом проекта.

Выбор глобального свойства pila_into_gr в качестве источника значений…

Теперь выделим в окне редактирования группы примитив стрелочного прибора, чтобы во вкладке «Объект» отобразились его свойства и перетащим в ячейку «Приемник» свойство «Value».

…И свойства Value второго стрелочного прибора в качестве приемника значений

Окончательный текст скрипта

Полный набор связей внутри графического контейнера

Свойство «Чувствительность / Sensible» в значении «Да»

Вид готовых анимированных объектов