Имитация градиента при помощи слоя непрозрачности

<< Click to Display Table of Contents >>

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

Имитация градиента при помощи слоя непрозрачности

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

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

Структура слоя SVG:

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

Цветная подложка, которая будет менять свой цвет.

1.В первую очередь рассмотрим, чем отличается данный сценарий от создания обычного градиента. Ниже пример из графического редактора Figma.

Создадим SVG 100x100.

SVG_imitaciya_gradienta_1

В неё добавим два квадрата 100x100:

SVG_imitaciya_gradienta_2

Выберем самый верхний SVG "Rectangle 27":

SVG_imitaciya_gradienta_3

"Rectangle 27" будет выступать в роли непрозрачного слоя для имитации градиента.

Выставим данному квадрату градиент, где центральный цвет будет белым, а крайние - прозрачными.

Stops

Color

Opacity

0%

#FFFFFF

0%

50%

#FFFFFF

100%

100%

#FFFFFF

0%

SVG_imitaciya_gradienta_4

Теперь выберем "Rectangle 26" и выставим ему цвет подложки #929292, который использовался в сценарии Поточечная динамизация градиента.

Это нужно для визуального сравнения: данный подход действительно имитирует обычный линейный градиент.

Слева квадрат с линейным градиентом из сценария Поточечная динамизация градиента, справа SVG, которая имитирует градиент с помощью специального слоя:

SVG_imitaciya_gradienta_5

SVG готов - экспортируем.

2.Посмотрим код SVG квадрата:

hmtoggle_plus1rect_imitation_gradient.svg

3.Необходимо динамизировать атрибут fill в теге <rect width="100" height="100" fill="#929292"/>.

Для этого в тег rect с fill #929292 добавим новый атрибут id со значением rect_color, чтобы XML смог к нему обратиться. Записывается это следующим образом: id="rect_color".

hmtoggle_plus1rect_imitation_gradient.svg

4.SVG готов - переходим к импорту:

Создаем новое окно > ПК мыши по Окну > Импорт SVG:

SVG_scenarii_cvet_dinam_1

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

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

Id элемента SVG

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

color

rect_color

fill

SVG_imitaciya_gradienta_6

После этого нажимаем Применить.

Важно! Если импорт прошел неудачно, то нужно самостоятельно создать XML с названием как у SVG, в примере выше название XML будет "rect_imitation_gradient.xml". Далее нужно проверить, какой тип параметра установился по умолчанию. Для динамизации цвета нужно использовать Type="HMI.SolidColorType", иначе цвет динамизировать не получится. Ниже приведён рабочий XML:

<?xml version="1.0" encoding="utf-8"?>

<SvgDef xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" CreateCommonAvary="false">

  <ParameterDefs>

     <ParameterDef DisplayName="color" Type="HMI.SolidColorType" ParamType="Attribute" ItemId="rect_color" Path="fill" />

  </ParameterDefs>

</SvgDef>

Если всё сделано верно, то в панели свойств появится специальное свойство, благодаря которому можно видоизменять иконку:

SVG_imitaciya_gradienta_7

6.Создадим новое окно. В него добавим кнопку выбора цвета и SVG:

SVG_imitaciya_gradienta_8

7.Выбираем кнопку выбора цвета и связываем с помощью зажатия ПК мыши свойство Значение кнопки выбора цвета со свойством color SVG:

SVG_imitaciya_gradienta_9

8.Назначаем Окно как стартовое и запускаем проект на исполнение.

Благодаря кнопке выбора цвета можно изменять заливку у квадрата, будто изменился цвет градиента:

SVG_imitaciya_gradienta_10_a     SVG_imitaciya_gradienta_10_b     SVG_imitaciya_gradienta_10_c

Примечаение: В данном сценарии нельзя менять цвет только у верхнего слоя непрозрачности, который имитирует градиент.

Так или иначе, этот сценарий сокращает количество параметров для регулирования цвета в сравнении со сценарием Поточечная динамизация градиента.