Переключение состояний SVG

<< Click to Display Table of Contents >>

Navigation:  Создание окон для клиента визуализации > Рекомендации по созданию окон > Динамизация SVG элементов > Практические сценарии динамизации >

Переключение состояний SVG

Сценарий: Использовать CSS свойство display: none и display: block для переключения состояний в SVG.

Ссылка на ресурсы документации: https://disk.yandex.ru/d/YkDc6mWTXxnPOw

Примечание: Для удобства некоторые пункты вынесены в отдельные подразделы.

Небольшое описание:

Для SVG необходимо создать 5 фигур: Четверник, тройник, горизонтальную и угловую трубу и фланцы.

svg_scenarii_perekluchenie_1

Примечание: Не обязательно создавать развёрнутый дубликат под каждую фигуру, как это сделано сейчас в палитре MasterSCADA 4D:

svg_scenarii_perekluchenie_2

Для поворота воспользуемся инструментами MasterSCADA 4D в верхней панели инструментов:

svg_scenarii_perekluchenie_3

Далее нужно разместить все готовые фигуры в одну SVG и создать динамизацию с помощью XML, чтобы с помощью выпадающего списка отображать ту или иную фигуру.

svg_scenarii_perekluchenie_4

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

svg_scenarii_perekluchenie_5

Сценарий:

1.Создадим и разместим фигуры:

a.Создание Фланцев;

b.Создание Горизонтальной трубы;

c.Создание Тройника;

d.Создание Четверника;

e.Создание Четверти круга.

f.Объединим все фигуры в одну:

svg_scenarii_perekluchenie_89

g.Назовем группу "pipeline_icon":

svg_scenarii_perekluchenie_90

h.SVG готов. При экспорте из Figma следует активировать чекбокс Include 'id' attribute. Данный чекбокс при экспорте выставит id всем SVG элементам.

2.Откроем код SVG:

hmtoggle_plus1pipeline_icon.svg

3.Первым этапом подготовки SVG нужно с помощью CSS настроить отображение той или иной фигуры.

Как по итогу данный подход будет работать в SVG?

Пример: У нас есть три фигуры А, Б и В. Нужно отображать конкретную фигуру.

Чтобы этого добиться нужно создать селектор CSS следующим образом:

a.Пришел сигнал показать фигуру А:

Фигуру А - показать.

Фигуру Б - скрыть.

Фигуру В - скрыть.

b.Пришел сигнал показать фигуру Б:

Фигуру А - скрыть.

Фигуру Б - показать.

Фигуру В - скрыть.

c.Пришел сигнал показать фигуру В:

Фигуру А - скрыть.

Фигуру Б - скрыть.

Фигуру В - показать.

То есть в CSS при каждом сигнале необходимо указывать, какие фигуры скрыть, а какие показать.

4.Добавим в SVG тег style с экранированием CDATA:

hmtoggle_plus1pipeline_icon.svg

5.Пример настройки SVG для отображения одной фигуры:

В качестве механики скрыть/показать воспользуемся свойством CSS display (none - скрыть слой, block - показать).

hmtoggle_plus1Пример style

Важно! Обычно нужно избегать совпадений имен класса и id для лучшей читаемости кода, но в SVG-компонентах это является полезным исключением. Когда класс на родителе (.flansch) используется как переключатель состояния, а id (#flansch) для выбора соответствующего элемента, код становится более наглядным и понятным, явно показывая связь между состоянием компонента и элементом, который нужно показать.

Аналогичным образом настраиваем отображение каждой фигуры при появлении селекторов horizontal, tee, quad, quarter_circle:

hmtoggle_plus1pipeline_icon.svg

6.Теперь настроим слой заливки. Для этого в коде нужно найти слой "change_color". Но после экспорта к данному слою добавились суффиксы "_2", "_3", "_4", "_5":

svg_scenarii_perekluchenie_91

И все данные id нужно переименовать в "change_color" без суффиксов:

hmtoggle_plus1pipeline_icon.svg

SVG готов.

7.Приступим к тестовому импорту, чтобы сформировать XML файл:

Создаем окно. В контекстном меню окна выбираем Импорт SVG:

svg_scenarii_perekluchenie_92

В окне импорта создаем два параметра со следующими значениями:

Имя параметра

Id элемента SVG

Атрибут элемента SVG

select

pipeline_icon

class

color

change_color

fill

svg_scenarii_perekluchenie_93

Нажимаем Применить.

8.Открываем XML код:

hmtoggle_plus1pipeline_icon.xml

9.Далее, настроим параметр select, чтобы после импорта появился выпадающий список со списком селекторов:

a.В первую очередь в параметре select, после Path="class" нужно убрать закрывающий тег слэш "/":

hmtoggle_plus1        pipeline_icon.xml

b.Далее нужно вместо обычного тега слэш создать полноценный закрывающий тег </ParameterDef>:

hmtoggle_plus1        pipeline_icon.xml

c.Между открывающим и закрывающим тегом ParameterDef нужно добавить список тегов Value:

Внутри каждого тега Value будет атрибут DisplayName и контент. В атрибут и контент нужно записать название селектора. И так сделать для каждого тега Value.

hmtoggle_plus1        pipeline_icon.xml

XML файл готов.

10.Сделаем повторный импорт SVG:

В окне импорта нажмем Применить:

svg_scenarii_perekluchenie_94

11.Импорт прошел успешно. Видно, что появился параметр со списком селекторов и параметр выбора цвета:

svg_scenarii_perekluchenie_95

svg_scenarii_perekluchenie_96

12.Создаем окно для проверки 600x400. Разместим в нем "pipeline_icon", выпадающий список и кнопку выбора цвета:

У выпадающего списка настроим свойство Список со следующим значением:

flansch~horizontal~tee~quad~quarter_circle

Выпадающий список и его свойство Выбор связываем со свойством select SVG как входящую связь:

svg_scenarii_perekluchenie_97

У кнопки выбора цвета свойство Значение связываем со свойством color SVG как двунаправленную связь:

svg_scenarii_perekluchenie_98

13.Назначаем Окно как стартовое.

Запускаем проект на исполнение и при регулировании выпадающего списка можно изменить вид трубопровода:

a.svg_scenarii_perekluchenie_flansch

b.svg_scenarii_perekluchenie_horizontal

c.svg_scenarii_perekluchenie_tee

d.svg_scenarii_perekluchenie_quad

e.svg_scenarii_perekluchenie_quarter_circle

14.При помощи кнопки выбора цвета изменить цвет трубопровода:

a.svg_scenarii_perekluchenie_flansch_color

b.svg_scenarii_perekluchenie_horizontal_color

c.svg_scenarii_perekluchenie_tee_color

d.svg_scenarii_perekluchenie_quad_color

e.svg_scenarii_perekluchenie_quarter_circle_color

15.В качестве бонуса разместим трубопровод на мнемосхеме, а для поворота труб воспользуемся панелью инструментов MasterSCADA 4D Поворот и Отражение:

svg_scenarii_perekluchenie_99

svg_scenarii_perekluchenie_100

svg_scenarii_perekluchenie_101