Масштабируемая векторная графика (Scalable Vector Graphics)

Рисование

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

Заливка

Заливка цветом может применяться к фигурам, тексту и элементам Path. При указании цвета допустимы именованные названия (см. Приложение 1), а также RGB - код в десятичной или шестнадцатеричной формах. В табл. 5.1 приводится описание основных атрибутов заливки.

Атрибуты заливки
№ Название
5.1.1 fill
Описание
Заливка цветом внутренней части фигуры или текста
Диапазон значений
Именованные названия, десятичный или шестнадцатеричный индекс цвета
Значение по умолчанию
Черный (black)
№ Название
5.1.2 fill-opacity
Описание
Прозрачность заливки
Диапазон значений
Число между 0 (полная прозрачность) и 1 (полная непрозрачность)
Значение по умолчанию
1
№ Название
5.1.3 fill-rule
Описание
Режим заливки фигуры, при которой остаются пустые (незакрашенные) области.
Диапазон значений
nonzero | evenodd nonzero - полная заливка. evenodd - заливка с пустыми областями.
Значение по умолчанию
nonzero

Ранее мы пользовались при заливке только атрибутом fill. Следовательно, мы имели дело с полностью непрозрачными объектами, заполняемыми цветом полностью. В табл. 5.2 приводятся примеры использования атрибутов заливки.

Атрибуты fill, fill-opacity и fill-rule
№ Код Вид в браузере
5.2.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="210" height="100"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill1.svg
  </desc>
  <rect x="0" y="25" width="210" height="50"></rect>
  <rect x="10" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.1"></rect>
  <rect x="30" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.2"></rect>
  <rect x="50" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.3"></rect>
  <rect x="70" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.4"></rect>
  <rect x="90" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.5"></rect>
  <rect x="110" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.6"></rect>
  <rect x="130" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.7"></rect>
  <rect x="150" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.8"></rect>
  <rect x="170" y="0" width="10" height="100"  
        fill="red" fill-opacity="0.9"></rect>
  <rect x="190" y="0" width="10" height="100"  
        fill="red" fill-opacity="1"></rect>
</svg>
Описание
Полоски с различными значениями прозрачности.
№ Код Вид в браузере
5.2.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="210" height="100"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill2.svg
  </desc>
  <rect x="0" y="25" width="210" height="50"></rect>
  <rect x="10" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:0.1"></rect>
  <rect x="30" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:0.2"></rect>
  <rect x="50" y="0" width="10" height="100"  
        style="fill:red; fill-opacity:0.3"></rect>
  <rect x="70" y="0" width="10" height="100"  
        style="fill:red; fill-opacity:0.4"></rect>
  <rect x="90" y="0" width="10" height="100"  
        style="fill:red; fill-opacity:0.5"></rect>
  <rect x="110" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:0.6"></rect>
  <rect x="130" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:0.7"></rect>
  <rect x="150" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:0.8"></rect>
  <rect x="170" y="0" width="10" height="100"  
        style="fill:red; fill-opacity:0.9"></rect>
  <rect x="190" y="0" width="10" height="100" 
        style="fill:red; fill-opacity:1"></rect>
</svg>
Описание
Полоски с различными значениями прозрачности, оформление при помощи атрибута style.
№ Код Вид в браузере
5.2.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="210" height="100"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill3.svg
  </desc>
  <rect x="0" y="25" width="210" height="50" ></rect>
  <g style="fill:red; fill-opacity:0.6">
    <rect x="10"  y="0" width="10" height="100"></rect>
    <rect x="30"  y="0" width="10" height="100"></rect>
    <rect x="50"  y="0" width="10" height="100"></rect>
    <rect x="70"  y="0" width="10" height="100"></rect>
    <rect x="90"  y="0" width="10" height="100"></rect>
    <rect x="110" y="0" width="10" height="100"></rect>
    <rect x="130" y="0" width="10" height="100"></rect>
    <rect x="150" y="0" width="10" height="100"></rect>
    <rect x="170" y="0" width="10" height="100"></rect>
    <rect x="190" y="0" width="10" height="100"></rect>
  </g>
</svg>
Описание
Задание единой прозрачности для группы элементов.
№ Код Вид в браузере
5.2.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200" height="100"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill4.svg
  </desc>
  <polygon fill-rule="nonzero" fill="red" stroke="black"
           points="50,6 18,86 98,38 2,38 82,86"/>
  <polygon fill-rule="evenodd" fill="red" stroke="black"
           points="151,6 119,86 199,38 103,38 183,86"/>
</svg>
Описание
Режимы заливки - полная и с пустыми областями.
№ Код Вид в браузере
5.2.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200" height="100"   
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill5.svg
  </desc>
  <polygon style="fill-rule: nonzero; fill: red; stroke: black;"
           points="50,6 18,86 98,38 2,38 82,86"/>
  <polygon style="fill-rule: evenodd; fill: red; stroke: black;"
           points="151,6 119,86 199,38 103,38 183,86" />
</svg>
Описание
Режимы заливки - полная и с пустыми областями, оформление при помощи атрибута style.
№ Код Вид в браузере
5.2.6
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="250" height="300"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример fill6.svg
  </desc>
  <!--Фоновый черный прямоугольник-->
  <rect x="0" y="25" width="250" height="250" ></rect>
  <!--Непрозрачный текст-->
  <g font-family="Arial" font-size="40" stroke="white" 
     stroke-width="1">
    <text x="10" y="100" fill="red">
      Red
    </text>
    <text x="10" y="150" fill="yellow">
      Yellow
    </text>
    <text x="10" y="200" fill="green">
      Green
    </text>
  </g>
  <!--Полупрозрачный текст-->
  <g style="fill:red; fill-opacity:0.6">
    <g font-family="Arial" font-size="40" stroke="white" 
       stroke-width="1">
      <text x="135" y="100" fill="red">
        Red
      </text>
      <text x="135" y="150" fill="yellow">
        Yellow
      </text>
      <text x="135" y="200" fill="green">
        Green
      </text>
    </g>
  </g>
</svg>
Описание
Полностью непрозрачный и частично прозрачный текст на черном фоне. Для оформления текста используются группы.

Линейная градиентная заливка

Линейная градиентная заливка предназначена для получения плавного цветового перехода в направлении, заданной прямой. Элемент linearGradient определяется в области defs, а затем он может быть применен для произвольной фигуры в качестве заливки:

<defs>
  <linearGradient id="MyGradient">
    <stop offset="30%" stop-color="red"/>
    <stop offset="70%" stop-color="yellow"/>
  </linearGradient>
</defs>
<rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)"/>

Внутри элементов stop задаются цвета градиента в атрибутах stop-color и граница области каждого из цветов в атрибутах offset (рис. 5.1):

(рис 5.1) Определение linearGradient

Атрибут offset определяет области покрытия исходных цветов и формируемого ими промежуточного. Так, на рисунке первый цвет занимает 30%, второй цвет также 30% (100-70=30), а область градиента занимает всю остальную часть, т.е. 40%. В табл. 5.3 приводится примеры с различными значениями атрибута offset.

Элемент linearGradient, атрибут offset.
№ Код Вид в браузере
5.3.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientoffset1.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Атрибуты offset с первыми предельными граничными значениями - 0 и 100%.
№ Код Вид в браузере
5.3.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientoffset2.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="20%" stop-color="red"/>
      <stop offset="80%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset со значениями - 20 и 80%. Хорошо заметны области чистых цветов.
№ Код Вид в браузере
5.3.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientoffset3.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="30%" stop-color="red"/>
      <stop offset="70%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset со значениями - 30 и 70%.
№ Код Вид в браузере
5.3.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientoffset4.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="50%" stop-color="red"/>
      <stop offset="50%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Атрибуты offset со вторыми предельными граничными значениями - 50 и 50%. В этом случае градиент вырождается в две области с чистыми цветами.

В рассмотренных случая мы видели направление градиента только в одном направлении - горизонтальном. Для произвольного направления вводится набор атрибутов x1, x2, y1, y2 следующим образом:

<defs>
  <linearGradient id="MyGradient" x1="0%" y1="0%" x2="100%" y2="100%" >
    <stop offset="0%" stop-color="red"/>
    <stop offset="100%" stop-color="yellow"/>
  </linearGradient>
</defs>
<rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)" />

В этом случае градиент будет направлен из верхнего левого в правый нижний угол прямоугольника (рис. 5.2):

(рис 5.2) Направление градиента

Атрибуты x1, y1 и x2, y2 задают координаты двух точек, в направлении которых будет направлен градиент. При этом для углов области градиента значения атрибутов определяются указанным на рисунке образом. Можно провести аналогию между значениями в процентах и обычными координатами - оси направлены совершенно одинаково. В табл. 5.4 приведены различные предельные случаи направления градиента.

Элемент linearGradient, направление градиента
№ Код Вид в браузере
5.4.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientDirection1.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient" 
                    x1="0%" y1="0%" x2="100%" y2="100%" >
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)" />
</svg>
Описание
Направление градиента из верхнего левого в правый нижний угол.
№ Код Вид в браузере
5.4.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientDirection2.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient" 
                    x1="0%" y1="0%" x2="100%" y2="0%" >
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Обычное направление градиента, с которым мы уже сталкивались ранее (см. linearGradientoffset1.svg) по умолчанию совпадает с указанными значениями набора атрибутов.
№ Код Вид в браузере
5.4.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientDirection3.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient" 
                    x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Направление градиента сверху вниз.
№ Код Вид в браузере
5.4.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientDirection4.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient" 
                    x1="100%" y1="0%" x2="0%" y2="0%">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Направление градиента слева направо. В принципе, такое же расположение можно получить, если поменять местами цвета градиента.
№ Код Вид в браузере
5.4.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример  linearGradientDirection5.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient" 
                    x1="0%" y1="100%" x2="0%" y2="0%" >
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Направление градиента снизу вверх.

Для других, промежуточных значений, можно изменять значения атрибутов в диапазоне от 0 до 100%.

Внутри определения градиента можно помещать несколько цветов:

<defs>
  <linearGradient id="MyGradient">
    <stop offset="0%" stop-color="blue"/>
    <stop offset="20%" stop-color="red"/>
    <stop offset="30%" stop-color="orange"/>
    <stop offset="40%" stop-color="yellow"/>
    <stop offset="50%" stop-color="green"/>
    <stop offset="60%" stop-color="deepskyblue"/>
    <stop offset="70%" stop-color="blue"/>
    <stop offset="80%" stop-color="purple"/>
    <stop offset="100%" stop-color="white"/>
  </linearGradient>
</defs>
<rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)"/>

Таким образом, получается серия цветов, напоминающая радугу (спектр). В табл. 5.5 приводятся различные примеры использования градиента.

Элемент linearGradient, серия цветов, атрибут stop-opacity.
№ Код Вид в браузере
5.5.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientSome1.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </linearGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)" />
</svg>
Описание
Градиент содержащий серию цветов.
№ Код Вид в браузере
5.5.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientSome2.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </linearGradient>
  </defs>
  <circle cx="75" cy="75" r="75" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Применение градиента к окружности.
№ Код Вид в браузере
5.5.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientSome3.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </linearGradient>
  </defs>
  <rect x="10" y ="5" width="130" height="90" 
        fill="url(#MyGradient)"/>
  <circle cx="35" cy="120" r="25" 
          fill="url(#MyGradient)" />
  <circle cx="115" cy="120" r="25" 
          fill="url(#MyGradient)" />
</svg>
Описание
Применение градиента к нескольким фигурам. Распределение цветов масштабируется в зависимости от размеров фигуры.
№ Код Вид в браузере
5.5.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="250" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientSome4.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </linearGradient>
  </defs>
  <text x="10" y="100" font-family="Arial Bold" 
        font-size="90" stroke="black" stroke-width="1"
        fill="url(#MyGradient)">
    Текст
  </text>
</svg>
Описание
Заливка градиентом текста.
№ Код Вид в браузере
5.5.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример linearGradientSome5.svg
  </desc>
  <defs>
    <linearGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="100%" stop-color="white" 
            stop-opacity="0"/>
    </linearGradient>
  </defs>
  <rect x="0" y="10" width="150" height="130"></rect>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)" />
</svg>
Описание
Атрибут stop-opacity позволяет задавать прозрачность цвета градиента.

Радиальная градиентная заливка

Радиальная градиентная заливка позволяет получать плавное изменение цвета в направлении от центра или к центру окружности.

<defs>
  <radialGradient id="MyGradient">
    <stop offset="0%" stop-color="red"/>
    <stop offset="100%" stop-color="yellow"/>
  </radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />

Определения радиального и линейного градиентов совпадают, за исключением ключевого слова radialGradient. Графически распределение цвета выглядит так (рис. 5.3):

(рис 5.3) Определение radialGradient

Атрибут offset в данном случае отсчитывается в направлении радиуса окружности. В табл. 5.6 приводятся примеры с различными значениями этого атрибута.

Элемент radialGradient, атрибут offset.
№ Код Вид в браузере
5.6.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Лекция 5. Рисование</title>
  <desc>
     Пример radialGradientoffset1.svg
  </desc>
<defs>
<radialGradient id="MyGradient">
<stop offset="0%" stop-color="red"/>
<stop offset="100%" stop-color="yellow"/>
</radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset с первыми предельными граничными значениями - 0 и 100%.
№ Код Вид в браузере
5.6.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Лекция 5. Рисование</title>
  <desc>
     Пример radialGradientoffset2.svg
  </desc>
<defs>
<radialGradient id="MyGradient">
<stop offset="0%" stop-color="yellow"/>
<stop offset="100%" stop-color="red"/>
</radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset с первыми предельными граничными значениями - 0 и 100%. Цвета градиента поменяли местами.
№ Код Вид в браузере
5.6.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Лекция 5. Рисование</title>
  <desc>
     Пример radialGradientoffset3.svg
  </desc>
<defs>
<radialGradient id="MyGradient">
<stop offset="20%" stop-color="red"/>
<stop offset="80%" stop-color="yellow"/>
</radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset со значениями - 20 и 80%. Как и в случае линейного градиента хорошо заметны области чистых цветов.
№ Код Вид в браузере
5.6.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Лекция 5. Рисование</title>
  <desc>
     Пример radialGradientoffset4.svg
  </desc>
<defs>
<radialGradient id="MyGradient">
<stop offset="30%" stop-color="red"/>
<stop offset="70%" stop-color="yellow"/>
</radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset со значениями - 30 и 70%.
№ Код Вид в браузере
5.6.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
<title>Лекция 5. Рисование</title>
  <desc>
     Пример radialGradientoffset5.svg
  </desc>
<defs>
<radialGradient id="MyGradient">
<stop offset="50%" stop-color="red"/>
<stop offset="50%" stop-color="yellow"/>
</radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
</svg>
Описание
Атрибуты offset со вторыми предельными граничными значениями - 50 и 50%. В этом случае градиент вырождается в две радиальные области с чистыми цветами.

Для элемента radialGradient можно задать область распространения непосредственно в его определении, при помощи атрибутов cx, cy и r:

<defs>
  <radialGradient id="MyGradient"  
                  cx="50%" cy="50%" r="25%">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
  </radialGradient>
</defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)"/>

В этом случае область градиента будет локализована в центре фигуры в окружности с радиусом 25% (рис. 5.4)

(рис 5.4) Локализация радиального градиента

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

Элемент radialGradient, атрибуты cx, cy и r.
№ Код Вид в браузере
5.7.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize1.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient" 
                    cx="50%" cy="50%" r="50%">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Значения атрибутов совпадают с принятыми по умолчанию (см. radialGradientoffset1.svg)
№ Код Вид в браузере
5.7.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize2.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient"
                    cx="50%" cy="50%" r="25%">
      <stop offset="0%"   stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Градиент локализован в окружности с радиусом 25%
№ Код Вид в браузере
5.7.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="300"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize3.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient1">
      <stop offset="0%"   stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
    <radialGradient id="MyGradient2"  
                    cx="50%" cy="50%" r="25%">
      <stop offset="0%" stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <rect height="150" width="150" x="0" y="0" 
        fill="url(#MyGradient1)"/>
  <rect height="150" width="150" x="0" y="150" 
        fill="url(#MyGradient2)"/>
  <!--Вспомогательная линия-->
  <line x1="0" y1="150" x2="150" y2="150" 
        stroke="red" stroke-width="2"/>
</svg>
Описание
Заливка прямоугольника радиальным градиентом без атрибутов (наверху) и с атрибутами (внизу).
№ Код Вид в браузере
5.7.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize4.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient"
                    cx="50%" cy="50%" r="75%">
      <stop offset="0%"   stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Увеличение площади распространения градиента позволяет выделить его определенную часть.
№ Код Вид в браузере
5.7.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize5.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient"  
                    cx="25%" cy="25%" r="25%">
      <stop offset="0%"   stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Отсекание фигурой изображение градиента, локализованного в верхней левой части.
№ Код Вид в браузере
5.7.6
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientLocalize6.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient"  
                    cx="75%" cy="75%" r="25%">
      <stop offset="0%"   stop-color="red"/>
      <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Отсекание фигурой изображение градиента, локализованного в правой нижней части.

В последних двух примерах заметно"обрезанное" расположение области градиента. Для получения эффекта светового блика на фигуре также используется радиальный градиент. Но в этом случае следует применять атрибуты fx и fy, которые подстраивают распространение градиента под геометрические размеры фигуры (табл. 5.8).

Элемент radialGradient, атрибуты fx и fy.
№ Код Вид в браузере
5.8.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientF1.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient" 
                    fx="25%" fy="25%">
      <stop offset="0%"   stop-color="white"/>
      <stop offset="100%" stop-color="blue"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Эффект светового блика в левой верхней части фигуры.
№ Код Вид в браузере
5.8.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title>Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientF2.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient" 
                    fx="75%" fy="75%">
      <stop offset="0%"   stop-color="white"/>
      <stop offset="100%" stop-color="blue"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Эффект светового блика в правой нижней части фигуры.

Как и в случае линейного градиента, допускается применение нескольких цветов и управление прозрачностью при помощи атрибута stop-opacity (табл. 5.9)

Элемент radialGradient, серия цветов, атрибут stop-opacity.
№ Код Вид в браузере
5.9.1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome1.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="10%" stop-color="white"/>
      <stop offset="20%" stop-color="red"/>
      <stop offset="30%" stop-color="orange"/>
      <stop offset="40%" stop-color="yellow"/>
      <stop offset="50%" stop-color="green"/>
      <stop offset="60%" stop-color="deepskyblue"/>
      <stop offset="70%" stop-color="blue"/>
      <stop offset="80%" stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </radialGradient>
  </defs>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Заливка окружности радиальным градиентом, содержащим серию цветов.
№ Код Вид в браузере
5.9.2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome2.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="10%"  stop-color="white"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </radialGradient>
  </defs>
  <rect x="0" y="0" width="150" height="150" 
        fill="url(#MyGradient)"/>
</svg>
Описание
Заливка прямоугольника радиальным градиентом, содержащим серию цветов.
№ Код Вид в браузере
5.9.3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome3.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="10%"  stop-color="white"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </radialGradient>
  </defs>
  <rect x="10" y ="5" width="130" height="90" 
        fill="url(#MyGradient)"/>
  <circle cx="35" cy="120" r="25" 
          fill="url(#MyGradient)"/>
  <circle cx="115" cy="120" r="25" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Заливка нескольких фигур радиальным градиентом, содержащим серию цветов.
№ Код Вид в браузере
5.9.4
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="250" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome4.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="10%"  stop-color="white"/>
      <stop offset="20%"  stop-color="red"/>
      <stop offset="30%"  stop-color="orange"/>
      <stop offset="40%"  stop-color="yellow"/>
      <stop offset="50%"  stop-color="green"/>
      <stop offset="60%"  stop-color="deepskyblue"/>
      <stop offset="70%"  stop-color="blue"/>
      <stop offset="80%"  stop-color="purple"/>
      <stop offset="100%" stop-color="white"/>
    </radialGradient>
  </defs>
  <text x="10" y="100" 
        font-family="Arial Bold" font-size="90" 
        stroke="black" stroke-width="1"
        fill="url(#MyGradient)">
    Текст
  </text>
</svg>
Описание
Заливка текста радиальным градиентом.
№ Код Вид в браузере
5.9.5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome5.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="0%"   stop-color="blue"/>
      <stop offset="100%" stop-color="white" 
            stop-opacity="0"/>
    </radialGradient>
  </defs>
  <rect x="0" y="60" 
        width="150" height="30" ></rect>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)" />
</svg>
Описание
Радиальный градиент с нулевой прозрачностью по краям.
№ Код Вид в браузере
5.9.6
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="150" height="150"
     xmlns="http://www.w3.org/2000/svg" version="1.1">
  <title> Лекция 5. Рисование</title>
  <desc>
    Пример radialGradientSome6.svg
  </desc>
  <defs>
    <radialGradient id="MyGradient">
      <stop offset="0%"   stop-color="white" 
            stop-opacity="0"/>
      <stop offset="100%" stop-color="blue"/>
    </radialGradient>
  </defs>
  <rect x="0" y="60" width="150" height="30"></rect>
  <circle cx="75" cy="75" r="70" 
          fill="url(#MyGradient)"/>
</svg>
Описание
Радиальный градиент с нулевой прозрачностью в центре.

Паттерны

Элемент pattern предназначен для создания мозаичной графической текстуры, которая может применяться в качестве заливки или контура фигуры. Определение паттерна включает в себя графическое содержимое, которые будут представлять собой мозаику:

<pattern id="MyPattern" x="coordinate" y="coordinate" 
  width="length" height="length"
         patternUnits="userSpaceOnUse | objectBoundingBox" >
  <!-Графическое содержимое-->
</pattern>

Элемент pattern не входит в секцию defs, однако он не может быть отображен в документе непосредственно. Для его включения обязательно требуется фигура с установленными свойствами stroke или fill. В табл. 5.10 приводятся описание атрибутов этого элемента.

№ Название
5.10.1 x, y
Описание
Координаты верхнего левого угла графического элемента, который служит мозаикой в паттерне.
№ Название
5.10.2 width, height
Описание
Ширина и высота площади, которую занимает отдельный элемент мозаики. Визуально этот параметр определяет разреженность или уплотненность паттерна.
№ Название
5.10.3 patternUnits
Описание
Определение координатной системы для атрибутов x, y, width и height. Возможны следующие значения:
  • userSpaceOnUse - атрибуты x, y, width и height определяются в системе координат той фигуры, для которой будет применяться паттерн.
  • objectBoundingBox - атрибуты x, y, width и height определяются в системе координат самого паттерна.
  • Если параметр patternUnits не указан, то по умолчанию принимается значение objectBoundingBox.

    В табл. 5.11 приводятся примеры использования паттернов.

    Элемент pattern.
    № Код Вид в браузере
    5.11.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern1.svg
      </desc>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <circle cx="11" cy="11" r="10" fill="red" stroke="black"/>
      </pattern>
      <rect x="2" y="2" width="146" height="146" 
            fill="url(#MyPattern)" stroke="black" stroke-width ="2"/>
    </svg>
    Описание
    Графическое содержимое паттерна представляет собой размноженный элемент circle.
    № Код Вид в браузере
    5.11.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
         Пример pattern2.svg
      </desc>
    <pattern id="MyPattern" x="0" y="0" width="40" height="40"
    patternUnits="userSpaceOnUse">
    <circle cx="11" cy="11" r="10" fill="red" stroke="black" />
    </pattern>
      <rect x="2" y="2" width="146" height="146" 
            fill="url(#MyPattern)" stroke="black" stroke-width ="2" />
    </svg>
    Описание
    По сравнению с предыдущим примером, здесь увеличены значения атрибутов width и height в определении паттерна. Визуально шарики отстоят друг от друга на большее расстояние.
    № Код Вид в браузере
    5.11.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern3.svg
      </desc>
      <pattern id="MyPattern" x="20" y="10" width="40" height="40"
               patternUnits="userSpaceOnUse">
        <circle cx="11" cy="11" r="10" fill="red" stroke="black" />
      </pattern>
      <rect x="2" y="2" width="146" height="146" fill="url(#MyPattern)" 
            stroke="black" stroke-width ="2" />
    </svg>
    Описание
    Смещение верхней точки заполнителя при изменении атрибутов x и y внутри паттерна.
    № Код Вид в браузере
    5.11.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern4.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)"/>
      </pattern>
      <ellipse cx="75" cy="75" rx="75" ry="50" fill="url(#MyPattern)" 
               stroke="black" stroke-width ="2" />
    </svg>
    Описание
    В качестве графического содержимого паттерна применяется элемент rect, заполненный градиентной заливкой.
    № Код Вид в браузере
    5.11.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример pattern5.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)" />
      </pattern>
      <ellipse cx="75" cy="75" rx="75" ry="50" fill="magenta" 
               stroke="url(#MyPattern)" stroke-width ="10" />
    </svg>
    Описание
    Применение элемента pattern в качестве контура фигуры.
    № Код Вид в браузере
    5.11.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="250" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример pattern6.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)"/>
      </pattern>
      <text x="10" y="100" font-family="Arial Bold" font-size="90" 
            stroke="black" stroke-width="1" fill="url(#MyPattern)">
        Текст
      </text>
    </svg>
    Описание
    Заполнение паттерном текста.

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

    Контуры

    Оформление фигуры определяется не только ее заливкой, но и контуром. В первых лекциях мы определяли цвет заливки и ее толщину. Теперь рассмотрим другие атрибуты контура, доступные в SVG - графике. Описание всех атрибутов приводятся в табл. 5.12.

    Атрибуты контура.
    № Название
    5.12.1 stroke
    Описание
    Рисование контура фигуры
    Диапазон значений
    <color>
    Значение по умолчанию
    Фигура без контура.
    № Название
    5.12.2 stroke-width
    Описание
    Толщина линии
    Диапазон значений
    <length>
    Значение по умолчанию
    1 пиксел
    № Название
    5.12.3 stroke-opacity
    Описание
    Прозрачность заливки
    Диапазон значений
    Число между 0 (полная прозрачность) и 1 (полная непрозрачность)
    Значение по умолчанию
    1
    № Название
    5.12.4 stroke-dasharray
    Описание
    Определение стиля линии - сплошная, пунктиром или точками.
    Диапазон значений
    <number>
    Значение по умолчанию
    Сплошная. В качестве значения допускается указание ряда чисел.
    № Название
    5.12.5 dashoffset
    Описание
    Определение отступа при задании пунктирной линии
    Диапазон значений
    <length>
    Значение по умолчанию
    0
    № Название
    5.12.6 stroke-linecap
    Описание
    Задание типа линии на концах - обычная (butt), скругленная (round) и с выступом (square).
    Диапазон значений
    butt | round | square
    Значение по умолчанию
    butt
    № Название
    5.12.7 sroke-linejoin
    Описание
    Тип линии на изгибе - обычный ( miter ), сглаженный ( round ) и рубленый ( bevel ).
    Диапазон значений
    mitre | round | bevel
    Значение по умолчанию
    mitre
    № Название
    5.12.8 stroke-mitrelimit
    Описание
    Величина отступа при выборе значении miter атрибута stroke-linejoin
    Диапазон значений
    <number>
    Значение по умолчанию
    4

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

    Атрибуты контура.
    № Код Вид в браузере
    5.13.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke1.svg
      </desc>
      <rect x="0" y="30" width="150" height="90" ></rect>
      <circle cx="75" cy="75" r="60" fill="blue" stroke="red" 
              stroke-width="15" stroke-opacity="0.6"/>
    </svg>
    Описание
    Применение прозрачности к контуру. Заметно проведение контура по центральной части краев фигуры.
    № Код Вид в браузере
    5.13.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke2.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5"/>
    </svg>
    Описание
    Атрибут stroke-dasharray, получение точечной линии.
    № Код Вид в браузере
    5.13.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke3.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10"/>
    </svg>
    Описание
    Пара значений атрибута stroke-dasharray определяет размер точек и интервал между ними.
    № Код Вид в браузере
    5.13.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke4.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10,15"/>
    </svg>
    Описание
    Получение пунктирной линии. Тройка значений атрибута stroke-dasharray определяет размер точек, интервал между ними и размер отрезков.
    № Код Вид в браузере
    5.13.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke5.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10,15,5,10,15"/>
    </svg>
    Описание
    Повторяющиеся тройки значений приводят к тому же самому результату.
    № Код Вид в браузере
    5.13.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke6.svg
      </desc>
      <line x1="15" y1="0" x2="15" y2="100" 
            stroke="black" stroke-width="1"/>
      <line x1="0" y1="10" x2="200" y2="10" 
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="0%"/>
      <line x1="0" y1="30" x2="200" y2="30" 
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="25%"/>
      <line x1="0" y1="50" x2="200" y2="50"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="50%"/>
      <line x1="0" y1="70" x2="200" y2="70"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="75%"/>
      <line x1="0" y1="90" x2="200" y2="90"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="100%"/>
    </svg>
    Описание
    Атрибут stroke-dashoffset позволяет задать начальный отступ пунктирной линии.
    № Код Вид в браузере
    5.13.7
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke7.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
           stroke-linecap="butt"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением butt, совпадающим с принятым по умолчанию.
    № Код Вид в браузере
    5.13.8
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke8.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
            stroke-linecap="round"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением round, задает сглаживание на концах. Заметно выступающее расположение линии - для обеих линий заданы одинаковые значения абсцисс.
    № Код Вид в браузере
    5.13.9
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke9.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
            stroke-linecap="square"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением square, завершает линию обычным образом, но позволяет получить выступы по краям.
    № Код Вид в браузере
    5.13.10
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke10.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением miter, принятым по умолчанию.
    № Код Вид в браузере
    5.13.11
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke11.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="round" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением round, задающим сглаженный изгиб.
    № Код Вид в браузере
    5.13.12
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke12.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15" 
                 fill="none" stroke-linejoin="bevel" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением bevel, задающим рубленый изгиб.
    № Код Вид в браузере
    5.13.13
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="600"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke13.svg
      </desc>
      <line x1="70" y1="0" x2="70" y2="700" 
            stroke="black" stroke-width="1"/>
      <line x1="95" y1="0" x2="95" y2="700" 
            stroke="black" stroke-width="1"/>
      <polyline  points="10,30 70,50 10,70" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="1" />
      <polyline  points="10,130 70,150 10,170" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="2" />
      <polyline  points="10,230 70,250 10,270" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="3" />
      <polyline  points="10,330 70,350 10,370"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="4" />
      <polyline  points="10,430 70,450 10,470"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="5" />
      <polyline  points="10,530 70,550 10,570"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="6" />
    </svg>
    Описание
    В данном случае значения атрибута stroke-miterlimit до четырех задают рубленый изгиб, равные и больше четырех - обычный.

    Маркеры

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

    <defs>
      <marker id="myMarker" markerWidth="length" markerHeight="length"
              refX="coordinate" refY="coordinate" orient="auto">
      <!--Оформление маркера-->
    </marker>
        </defs>
        <line x1="10" y1="10" x2="130" y2="10"  stroke="red" stroke-width="2"
              marker-end="url(#myMarker)"/>

    Атрибут marker-end помещает в конец линии графический элемент, используемый в качестве оформления маркера. Описания атрибутов этого элемент приводятся в табл. 5.14.

    Элемент marker.
    № Название
    5.14.1 markerWidth, markerHeight
    Описание
    Ширина и высота фигуры, применяемой для оформления маркера.
    Диапазон значений
    <length>
    Значение по умолчанию
    3
    № Название
    5.14.2 refX, refY
    Описание
    Координаты верхней левой точки фигуры.
    Диапазон значений
    <coordinate>
    Значение по умолчанию
    0
    № Название
    5.14.3 orient
    Описание
    Поворот маркера вокруг центра.
    Диапазон значений
    <angle>
    Значение по умолчанию
    0
    № Название
    5.14.4 marker-start, marker-end, marker-mid
    Описание
    Расположение маркера на линии - в начале, конце или середине.
    Диапазон значений
    -
    Значение по умолчанию
    -

    Маркер, который был определен один раз, может применяться для многих линий в одном SVG - документе. В табл. 5.15 приводятся примеры использования этого элемента.

    Элемент marker.
    № Код Вид в браузере
    5.15.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker1.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="5" markerHeight="5"
                refX="0" refY="2.5" orient="auto">
          <polygon points="0,0, 5,2.5 0,5" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="20" markerHeight="20"
                refX="0" refY="10" orient="auto">
          <polygon points="0,0, 20,10 0,20" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="10" x2="130" y2="10"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="50" x2="130" y2="50"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="90" x2="130" y2="90"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Несколько маркеров, различающихся лишь значениями атрибутов markerWidth и markerHeight.
    № Код Вид в браузере
    5.15.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker2.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="-5" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3"
                markerWidth="10" markerHeight="10"
                refX="5" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Горизонтальное позиционирование маркера относительно линии при помощи атрибутов refX и refY.
    № Код Вид в браузере
    5.15.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker3.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="0" refY="0" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="10" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Вертикальное позиционирование маркера относительно линии при помощи атрибутов refX и refY.
    № Код Вид в браузере
    5.15.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker4.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="-20">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="20">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Атрибут orient отвечает за поворот маркера.
    № Код Вид в браузере
    5.15.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker5.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"
            stroke="red" stroke-width="2"
            marker-start="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)" />
      <line x1="10" y1="95" x2="130" y2="95"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"
            marker-start="url(#myMarker3)"/>
    </svg>
    Описание
    Размещение маркера относительно центра линии.
    № Код Вид в браузере
    5.15.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker6.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="25" markerHeight="25"
                refX="-2230" refY="400" orient="auto"
                viewBox="0 0 1000 800">
          <circle cx="500" cy="400" r="300" fill="lightskyblue"
                  stroke="blue" stroke-width="30"/>
          <ellipse cx="500" cy="500" rx="150" ry="100" 
                   fill="none" stroke="blue" stroke-width="30"/>
          <rect x="300" y="370" width="400" height="130"  
                fill="lightskyblue"/>
          <ellipse cx="350" cy="300"  rx="100" ry="50" 
                   fill="white" stroke="blue" stroke-width="30"/>
          <ellipse cx="650" cy="300"  rx="100" ry="50" 
                   fill="white" stroke="blue" stroke-width="30"/>
          <circle cx="350" cy="300"  r="25" fill="black"/>
          <circle cx="650" cy="300"  r="25" fill="black"/>
        </marker>
        <marker id="myMarker2" markerWidth="60" markerHeight="60"
        refX="100" refY="38" orient="auto" viewBox="0 0 200 100">
          <polygon fill="red"
                   points="100,10 105.8,27.2 123.8,27.2 109.4,38
                           114.6,55.2 100,45 85.4,55.2 90.6,38
                           76.2,27.2 94.2,27.2" />
        </marker>
        <defs>
          <radialGradient id="MyGradient" fx="25%" fy="25%">
            <stop offset="0%" stop-color="white"/>
            <stop offset="100%" stop-color="blue"/>
          </radialGradient>
        </defs>
        <marker id="myMarker3"
                markerWidth="15" markerHeight="15"
                refX="37.5" refY="70" orient="auto"
                viewBox="0 0 150 150">
          <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
        </marker>
      </defs>
      <line x1="10" y1="20" x2="130" y2="30"  
            stroke="red" stroke-width="2"
            marker-start="url(#myMarker1)"/>
      <line x1="10" y1="60" x2="130" y2="70"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)" />
      <line x1="10" y1="100" x2="130" y2="110"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"
            marker-start="url(#myMarker3)"/>
    </svg>
    Описание
    В качестве фигуры для оформления маркера может выступать группа простых элементов.

    Элемент symbol

    В Лекции 2 мы рассматривали объединении отдельных элементов в группы. Это очень удобный способ объединения фигур для задания координат, применения атрибутов и как мы увидим в следующих лекциях применения трансформаций. Но существует еще один способ объединения фигур, позволяющий создавать свои собственные элементы. Для них можно задавать цвет заливки, контура, размеры - словом поступать с ними так, как и в случае определения обычных элементов. Рассмотрим следующий фрагмент кода:

    <defs>
      <symbol id="mySymbol" viewBox="0 0 100 100" 
         preserveAspectRatio="none">
        <path d="M 15,50 L 45, 50 M 30, 30 L 30, 75 M 30, 
           75 L 40, 90 M 30, 75 L 20, 90"></path>
        <circle cx="30" cy="30" r="10"/>
      </symbol>
    </defs>
    <use xlink:href="#mySymbol" x="0" y="10" width="100" 
      height="150" fill="pink" stroke="red" stroke-width="3"/>

    Внутри секции defs помещается определение элемента symbol, содержащее окружность и элемент Path. Координаты этих элементов определяются в собственной системе - для этого вводится атрибут viewBox. Созданный символ используется в SVG - документе при помощи элемента use и атрибута xlink:href. Размеры символа можно менять без соблюдения пропорций - для этого в его определении включен атрибут preserveAspectRatio со значением none. В табл. 5.16 приводятся примеры использования символов.

    Элемент symbol.
    № Код Вид в браузере
    5.16.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol1.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
      </defs>
      <use xlink:href="#mySymbol" x="0"  y="10" 
           width="150" height="150"/>
      <use xlink:href="#mySymbol" x="50" y="10" 
           width="300" height="150"/>
      <use xlink:href="#mySymbol" x="50" y="90" 
           width="150" height="300"/>
    </svg>
    Описание
    Применение символа с заданием различных геометрических размеров. По умолчанию фигуры заливаются черным цветом с толщиной линий в 1 пиксел.
    № Код Вид в браузере
    5.16.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol2.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
      </defs>
      <use xlink:href="#mySymbol" x="0"   y="10" 
           width="100" height="150" fill="pink"
           stroke="red" stroke-width="3"/>
      <use xlink:href="#mySymbol" x="50"  y="80" 
           width="70" height="70" fill="pink"
           stroke="red" stroke-width="2"/>
      <use xlink:href="#mySymbol" x="80"  y="80" 
           width="70" height="70" fill="lightblue" 
           stroke="blue" stroke-width="2"/>
      <use xlink:href="#mySymbol" x="100" y="0" 
           width="120" height="160" fill="lightblue"
           stroke="blue" stroke-width="3"/>
    </svg>
    Описание
    Применение символа с заданием геометрических размеров, а также заливки и контура.
    № Код Вид в браузере
    5.16.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol3.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
        <symbol id="myFamily">
          <use xlink:href="#mySymbol" x="0" y="10" 
               width="100" height="150" fill="pink" 
               stroke="red" stroke-width="3"/>
          <use xlink:href="#mySymbol" x="50" y="80" 
               width="70" height="70" fill="pink"
               stroke="red" stroke-width="2"/>
          <use xlink:href="#mySymbol" x="80" y="80" 
               width="70" height="70" fill="lightblue"
               stroke="blue" stroke-width="2"/>
          <use xlink:href="#mySymbol" x="100" y="0"
               width="120" height="160" fill="lightblue"
               stroke="blue" stroke-width="3"/>
        </symbol>
      </defs>
      <use xlink:href="#myFamily" x="0" y="0"
           width="150" height="150"/>
      <use xlink:href="#myFamily" x="0" y="120"
           width="150" height="150"/>
      <use xlink:href="#myFamily" x="0" y="240"
           width="150" height="150"/>
    </svg>
    Описание
    Применение вложенных символов.

    Элемент clipPath

    Элемент clipPath предназначен для отсекания заданной областью части изображения. Этот инструмент хорошо знаком пользователям графических программ, например в Adobe Photoshop для таких задач имеются специальные инструменты (рис. 5.5):

    (рис 5.5) Инструмент горизонтальный текст-маска в программе Adobe Photoshop

    Фрагмент кода для элемента clipPath выглядит так:

    <defs>
      <!--Объект clipPath-->
      <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
      </clipPath>
    </defs>
    <image x="10" y="5" width="291" height="195"
          clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>

    Внутри элемента определяется фигура, которая будет ограничивать изображения. Элемент image предназначен для помещения в SVG - документ внешнего графического файла - в данном случае используется"sea2.jpg". В табл. 5.17 приводятся примеры использования элемента clipPath.

    Элемент clipPath.
    № Код Вид в браузере
    5.17.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath1.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения окружностью.
    № Код Вид в браузере
    5.17.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath2.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <polygon points="20,10 280,10 20, 190 280,190"
                   stroke="red" stroke-width="3" fill="lightpink"/>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения элементов polygon. (См. polygon3.svg)
    № Код Вид в браузере
    5.17.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath3.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="100" cy="100" r="90"></circle>
          <circle cx="200" cy="100" r="90"></circle>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    При наложении двух элементов, определяемых в clipPath, занимаемая ими площадь объединяется.
    № Код Вид в браузере
    5.17.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath4.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="100" cy="100" r="90"></circle>
          <circle cx="200" cy="100" r="90"></circle>
        </clipPath>
      </defs>
      <rect width="300" height="200" x="0" y="0" fill="black">
      </rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Для оформления можно использовать дополнительные элементы.
    № Код Вид в браузере
    5.17.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath5.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <rect  width="300" height="200" x="0" y="0" fill="pink">
      </rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
      <circle cx="150" cy="100" r="90" fill="none" 
              stroke="red" stroke-width="5" stroke-dasharray="5"/>
    </svg>
    Описание
    Для последовательности элементов, среди которых имеется элемент image, справедлив тот же самый вертикальный порядок.
    № Код Вид в браузере
    5.17.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath6.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <text x="2" y="150" font-family="Arial" font-size="150">
            АБВ
          </text>
        </clipPath>
      </defs>
      <image x="0" y="0" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения текстом.
    № Код Вид в браузере
    5.17.7
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath7.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <text x="2" y="150" font-family="Arial" font-size="150">
            АБВ
          </text>
        </clipPath>
      </defs>
      <rect  width="300" height="200" x="0" y="0" fill="yellow">
      </rect>
      <image x="0" y="0" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
      <text x="2" y="150" font-family="Arial" font-size="150" 
            fill="none" stroke="orange" stroke-width="3">
        АБВ
      </text>
    </svg>
    Описание
    Отсекание части изображения текстом с оформлением.

    Элемент mask

    При работе с clipPath можно было заметить, что внутреннее оформление фигуры, определяемой внутри элемента, игнорируется. Элемент mask является инструментом, поддерживающим все свойства элемента clipPath с учетом графической структуры заполнителя. Фрагмент кода для элемента mask выглядит так:

    <defs>
      <mask id="myMask">
        <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
        </circle>
      </mask>
    </defs>
    <image x="10" y="5" width="291" height="195"
           mask="url(#myMask)" xlink:href="sea2.jpg"/>

    Здесь в качестве заливки фигуры-заполнителя используется радиальный градиент. В табл. 5.18 приводятся примеры использования элемента mask.

    № Код Вид в браузере
    5.18.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример mask1.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="0%" stop-color="white" stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
      mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Применение в качестве заполнителя маски окружности с градиентной заливкой.
    № Код Вид в браузере
    5.18.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример mask2.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="white" stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
             mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Применение в качестве заполнителя маски окружности с градиентной заливкой. Уменьшением размера градиентной области достигается увеличение площади открытой поверхности.
    № Код Вид в браузере
    5.18.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
         Пример mask3.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="white" 
                stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="100" cy="100" r="90" fill="url(#myGradient)">
          </circle>
          <circle cx="200" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
             mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Так же, как и в случае clipPath, при использовании нескольких фигур в качестве заполнителя их площади объединяются.
    № Код Вид в браузере
    5.18.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
         Пример noMask1.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="blue" 
                stop-opacity="0"/>
          <stop offset="100%" stop-color="blue" 
                stop-opacity="1"/>
        </radialGradient>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <rect width="300" height="200"
            x="0" y="0" fill="blue"></rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)"
             xlink:href="sea2.jpg"/>
      <circle cx="150" cy="100" r="90"  
              fill="url(#myGradient)">
      </circle>
    </svg>
    Описание
    При использовании заполнителя, заполненного градиентом любого цвета, на рисунке заметно уменьшение прозрачности белого цвета. Для получения нужного цвета используется комбинация обычного элемента clipPath и наложения радиального градиента с падением прозрачности.
    № Код Вид в браузере
    5.18.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"  
       
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
        <desc>
         Пример mask4.svg
        </desc>
      <defs>
       <!--Градиент для заливки маски-->
       <linearGradient id="myGradient" x1="0%" 
          y1="0%" x2="0%" y2="100%" >
        <stop offset="0%" stop-color="white" 
             stop-opacity="1"/>
        <stop offset="100%" stop-color="white" 
             stop-opacity="0"/>
       </linearGradient>
       <!--Объект mask-->
       <mask id="myMask">
        <rect x="0" y="0" width="300" 
              height="200" fill="url(#myGradient)"/>
       </mask>
     </defs>
     <text x="2" y="150" font-family="Arial" 
           font-size="150" fill="red"  mask="url(#myMask)">
        АБВ
     </text>
    </svg>
    Описание
    Маскированный текст.

    Мы закончили рассмотрение основных возможностей рисования, связанных с простой графикой.

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

    Заливка

    Заливка цветом может применяться к фигурам, тексту и элементам Path. При указании цвета допустимы именованные названия (см. Приложение 1), а также RGB - код в десятичной или шестнадцатеричной формах. В табл. 5.1 приводится описание основных атрибутов заливки.

    Атрибуты заливки
    № Название
    5.1.1 fill
    Описание
    Заливка цветом внутренней части фигуры или текста
    Диапазон значений
    Именованные названия, десятичный или шестнадцатеричный индекс цвета
    Значение по умолчанию
    Черный (black)
    № Название
    5.1.2 fill-opacity
    Описание
    Прозрачность заливки
    Диапазон значений
    Число между 0 (полная прозрачность) и 1 (полная непрозрачность)
    Значение по умолчанию
    1
    № Название
    5.1.3 fill-rule
    Описание
    Режим заливки фигуры, при которой остаются пустые (незакрашенные) области.
    Диапазон значений
    nonzero | evenodd nonzero - полная заливка. evenodd - заливка с пустыми областями.
    Значение по умолчанию
    nonzero

    Ранее мы пользовались при заливке только атрибутом fill. Следовательно, мы имели дело с полностью непрозрачными объектами, заполняемыми цветом полностью. В табл. 5.2 приводятся примеры использования атрибутов заливки.

    Атрибуты fill, fill-opacity и fill-rule
    № Код Вид в браузере
    5.2.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="210" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill1.svg
      </desc>
      <rect x="0" y="25" width="210" height="50"></rect>
      <rect x="10" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.1"></rect>
      <rect x="30" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.2"></rect>
      <rect x="50" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.3"></rect>
      <rect x="70" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.4"></rect>
      <rect x="90" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.5"></rect>
      <rect x="110" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.6"></rect>
      <rect x="130" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.7"></rect>
      <rect x="150" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.8"></rect>
      <rect x="170" y="0" width="10" height="100"  
            fill="red" fill-opacity="0.9"></rect>
      <rect x="190" y="0" width="10" height="100"  
            fill="red" fill-opacity="1"></rect>
    </svg>
    Описание
    Полоски с различными значениями прозрачности.
    № Код Вид в браузере
    5.2.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="210" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill2.svg
      </desc>
      <rect x="0" y="25" width="210" height="50"></rect>
      <rect x="10" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:0.1"></rect>
      <rect x="30" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:0.2"></rect>
      <rect x="50" y="0" width="10" height="100"  
            style="fill:red; fill-opacity:0.3"></rect>
      <rect x="70" y="0" width="10" height="100"  
            style="fill:red; fill-opacity:0.4"></rect>
      <rect x="90" y="0" width="10" height="100"  
            style="fill:red; fill-opacity:0.5"></rect>
      <rect x="110" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:0.6"></rect>
      <rect x="130" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:0.7"></rect>
      <rect x="150" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:0.8"></rect>
      <rect x="170" y="0" width="10" height="100"  
            style="fill:red; fill-opacity:0.9"></rect>
      <rect x="190" y="0" width="10" height="100" 
            style="fill:red; fill-opacity:1"></rect>
    </svg>
    Описание
    Полоски с различными значениями прозрачности, оформление при помощи атрибута style.
    № Код Вид в браузере
    5.2.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="210" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill3.svg
      </desc>
      <rect x="0" y="25" width="210" height="50" ></rect>
      <g style="fill:red; fill-opacity:0.6">
        <rect x="10"  y="0" width="10" height="100"></rect>
        <rect x="30"  y="0" width="10" height="100"></rect>
        <rect x="50"  y="0" width="10" height="100"></rect>
        <rect x="70"  y="0" width="10" height="100"></rect>
        <rect x="90"  y="0" width="10" height="100"></rect>
        <rect x="110" y="0" width="10" height="100"></rect>
        <rect x="130" y="0" width="10" height="100"></rect>
        <rect x="150" y="0" width="10" height="100"></rect>
        <rect x="170" y="0" width="10" height="100"></rect>
        <rect x="190" y="0" width="10" height="100"></rect>
      </g>
    </svg>
    Описание
    Задание единой прозрачности для группы элементов.
    № Код Вид в браузере
    5.2.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill4.svg
      </desc>
      <polygon fill-rule="nonzero" fill="red" stroke="black"
               points="50,6 18,86 98,38 2,38 82,86"/>
      <polygon fill-rule="evenodd" fill="red" stroke="black"
               points="151,6 119,86 199,38 103,38 183,86"/>
    </svg>
    Описание
    Режимы заливки - полная и с пустыми областями.
    № Код Вид в браузере
    5.2.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"   
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill5.svg
      </desc>
      <polygon style="fill-rule: nonzero; fill: red; stroke: black;"
               points="50,6 18,86 98,38 2,38 82,86"/>
      <polygon style="fill-rule: evenodd; fill: red; stroke: black;"
               points="151,6 119,86 199,38 103,38 183,86" />
    </svg>
    Описание
    Режимы заливки - полная и с пустыми областями, оформление при помощи атрибута style.
    № Код Вид в браузере
    5.2.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="250" height="300"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример fill6.svg
      </desc>
      <!--Фоновый черный прямоугольник-->
      <rect x="0" y="25" width="250" height="250" ></rect>
      <!--Непрозрачный текст-->
      <g font-family="Arial" font-size="40" stroke="white" 
         stroke-width="1">
        <text x="10" y="100" fill="red">
          Red
        </text>
        <text x="10" y="150" fill="yellow">
          Yellow
        </text>
        <text x="10" y="200" fill="green">
          Green
        </text>
      </g>
      <!--Полупрозрачный текст-->
      <g style="fill:red; fill-opacity:0.6">
        <g font-family="Arial" font-size="40" stroke="white" 
           stroke-width="1">
          <text x="135" y="100" fill="red">
            Red
          </text>
          <text x="135" y="150" fill="yellow">
            Yellow
          </text>
          <text x="135" y="200" fill="green">
            Green
          </text>
        </g>
      </g>
    </svg>
    Описание
    Полностью непрозрачный и частично прозрачный текст на черном фоне. Для оформления текста используются группы.

    Линейная градиентная заливка

    Линейная градиентная заливка предназначена для получения плавного цветового перехода в направлении, заданной прямой. Элемент linearGradient определяется в области defs, а затем он может быть применен для произвольной фигуры в качестве заливки:

    <defs>
      <linearGradient id="MyGradient">
        <stop offset="30%" stop-color="red"/>
        <stop offset="70%" stop-color="yellow"/>
      </linearGradient>
    </defs>
    <rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)"/>

    Внутри элементов stop задаются цвета градиента в атрибутах stop-color и граница области каждого из цветов в атрибутах offset (рис. 5.1):

    (рис 5.1) Определение linearGradient

    Атрибут offset определяет области покрытия исходных цветов и формируемого ими промежуточного. Так, на рисунке первый цвет занимает 30%, второй цвет также 30% (100-70=30), а область градиента занимает всю остальную часть, т.е. 40%. В табл. 5.3 приводится примеры с различными значениями атрибута offset.

    Элемент linearGradient, атрибут offset.
    № Код Вид в браузере
    5.3.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientoffset1.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Атрибуты offset с первыми предельными граничными значениями - 0 и 100%.
    № Код Вид в браузере
    5.3.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientoffset2.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="20%" stop-color="red"/>
          <stop offset="80%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset со значениями - 20 и 80%. Хорошо заметны области чистых цветов.
    № Код Вид в браузере
    5.3.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientoffset3.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="30%" stop-color="red"/>
          <stop offset="70%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset со значениями - 30 и 70%.
    № Код Вид в браузере
    5.3.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientoffset4.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="50%" stop-color="red"/>
          <stop offset="50%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Атрибуты offset со вторыми предельными граничными значениями - 50 и 50%. В этом случае градиент вырождается в две области с чистыми цветами.

    В рассмотренных случая мы видели направление градиента только в одном направлении - горизонтальном. Для произвольного направления вводится набор атрибутов x1, x2, y1, y2 следующим образом:

    <defs>
      <linearGradient id="MyGradient" x1="0%" y1="0%" x2="100%" y2="100%" >
        <stop offset="0%" stop-color="red"/>
        <stop offset="100%" stop-color="yellow"/>
      </linearGradient>
    </defs>
    <rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)" />

    В этом случае градиент будет направлен из верхнего левого в правый нижний угол прямоугольника (рис. 5.2):

    (рис 5.2) Направление градиента

    Атрибуты x1, y1 и x2, y2 задают координаты двух точек, в направлении которых будет направлен градиент. При этом для углов области градиента значения атрибутов определяются указанным на рисунке образом. Можно провести аналогию между значениями в процентах и обычными координатами - оси направлены совершенно одинаково. В табл. 5.4 приведены различные предельные случаи направления градиента.

    Элемент linearGradient, направление градиента
    № Код Вид в браузере
    5.4.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientDirection1.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient" 
                        x1="0%" y1="0%" x2="100%" y2="100%" >
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)" />
    </svg>
    Описание
    Направление градиента из верхнего левого в правый нижний угол.
    № Код Вид в браузере
    5.4.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientDirection2.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient" 
                        x1="0%" y1="0%" x2="100%" y2="0%" >
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Обычное направление градиента, с которым мы уже сталкивались ранее (см. linearGradientoffset1.svg) по умолчанию совпадает с указанными значениями набора атрибутов.
    № Код Вид в браузере
    5.4.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientDirection3.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient" 
                        x1="0%" y1="0%" x2="0%" y2="100%">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Направление градиента сверху вниз.
    № Код Вид в браузере
    5.4.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientDirection4.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient" 
                        x1="100%" y1="0%" x2="0%" y2="0%">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Направление градиента слева направо. В принципе, такое же расположение можно получить, если поменять местами цвета градиента.
    № Код Вид в браузере
    5.4.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример  linearGradientDirection5.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient" 
                        x1="0%" y1="100%" x2="0%" y2="0%" >
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Направление градиента снизу вверх.

    Для других, промежуточных значений, можно изменять значения атрибутов в диапазоне от 0 до 100%.

    Внутри определения градиента можно помещать несколько цветов:

    <defs>
      <linearGradient id="MyGradient">
        <stop offset="0%" stop-color="blue"/>
        <stop offset="20%" stop-color="red"/>
        <stop offset="30%" stop-color="orange"/>
        <stop offset="40%" stop-color="yellow"/>
        <stop offset="50%" stop-color="green"/>
        <stop offset="60%" stop-color="deepskyblue"/>
        <stop offset="70%" stop-color="blue"/>
        <stop offset="80%" stop-color="purple"/>
        <stop offset="100%" stop-color="white"/>
      </linearGradient>
    </defs>
    <rect x="0" y="0" width="150" height="150" fill="url(#MyGradient)"/>

    Таким образом, получается серия цветов, напоминающая радугу (спектр). В табл. 5.5 приводятся различные примеры использования градиента.

    Элемент linearGradient, серия цветов, атрибут stop-opacity.
    № Код Вид в браузере
    5.5.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientSome1.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)" />
    </svg>
    Описание
    Градиент содержащий серию цветов.
    № Код Вид в браузере
    5.5.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientSome2.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <circle cx="75" cy="75" r="75" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Применение градиента к окружности.
    № Код Вид в браузере
    5.5.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientSome3.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <rect x="10" y ="5" width="130" height="90" 
            fill="url(#MyGradient)"/>
      <circle cx="35" cy="120" r="25" 
              fill="url(#MyGradient)" />
      <circle cx="115" cy="120" r="25" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Применение градиента к нескольким фигурам. Распределение цветов масштабируется в зависимости от размеров фигуры.
    № Код Вид в браузере
    5.5.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="250" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientSome4.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <text x="10" y="100" font-family="Arial Bold" 
            font-size="90" stroke="black" stroke-width="1"
            fill="url(#MyGradient)">
        Текст
      </text>
    </svg>
    Описание
    Заливка градиентом текста.
    № Код Вид в браузере
    5.5.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример linearGradientSome5.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="100%" stop-color="white" 
                stop-opacity="0"/>
        </linearGradient>
      </defs>
      <rect x="0" y="10" width="150" height="130"></rect>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибут stop-opacity позволяет задавать прозрачность цвета градиента.

    Радиальная градиентная заливка

    Радиальная градиентная заливка позволяет получать плавное изменение цвета в направлении от центра или к центру окружности.

    <defs>
      <radialGradient id="MyGradient">
        <stop offset="0%" stop-color="red"/>
        <stop offset="100%" stop-color="yellow"/>
      </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />

    Определения радиального и линейного градиентов совпадают, за исключением ключевого слова radialGradient. Графически распределение цвета выглядит так (рис. 5.3):

    (рис 5.3) Определение radialGradient

    Атрибут offset в данном случае отсчитывается в направлении радиуса окружности. В табл. 5.6 приводятся примеры с различными значениями этого атрибута.

    Элемент radialGradient, атрибут offset.
    № Код Вид в браузере
    5.6.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
    <title>Лекция 5. Рисование</title>
      <desc>
         Пример radialGradientoffset1.svg
      </desc>
    <defs>
    <radialGradient id="MyGradient">
    <stop offset="0%" stop-color="red"/>
    <stop offset="100%" stop-color="yellow"/>
    </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset с первыми предельными граничными значениями - 0 и 100%.
    № Код Вид в браузере
    5.6.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
    <title>Лекция 5. Рисование</title>
      <desc>
         Пример radialGradientoffset2.svg
      </desc>
    <defs>
    <radialGradient id="MyGradient">
    <stop offset="0%" stop-color="yellow"/>
    <stop offset="100%" stop-color="red"/>
    </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset с первыми предельными граничными значениями - 0 и 100%. Цвета градиента поменяли местами.
    № Код Вид в браузере
    5.6.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
    <title>Лекция 5. Рисование</title>
      <desc>
         Пример radialGradientoffset3.svg
      </desc>
    <defs>
    <radialGradient id="MyGradient">
    <stop offset="20%" stop-color="red"/>
    <stop offset="80%" stop-color="yellow"/>
    </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset со значениями - 20 и 80%. Как и в случае линейного градиента хорошо заметны области чистых цветов.
    № Код Вид в браузере
    5.6.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
    <title>Лекция 5. Рисование</title>
      <desc>
         Пример radialGradientoffset4.svg
      </desc>
    <defs>
    <radialGradient id="MyGradient">
    <stop offset="30%" stop-color="red"/>
    <stop offset="70%" stop-color="yellow"/>
    </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset со значениями - 30 и 70%.
    № Код Вид в браузере
    5.6.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
    <title>Лекция 5. Рисование</title>
      <desc>
         Пример radialGradientoffset5.svg
      </desc>
    <defs>
    <radialGradient id="MyGradient">
    <stop offset="50%" stop-color="red"/>
    <stop offset="50%" stop-color="yellow"/>
    </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
    </svg>
    Описание
    Атрибуты offset со вторыми предельными граничными значениями - 50 и 50%. В этом случае градиент вырождается в две радиальные области с чистыми цветами.

    Для элемента radialGradient можно задать область распространения непосредственно в его определении, при помощи атрибутов cx, cy и r:

    <defs>
      <radialGradient id="MyGradient"  
                      cx="50%" cy="50%" r="25%">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
      </radialGradient>
    </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)"/>

    В этом случае область градиента будет локализована в центре фигуры в окружности с радиусом 25% (рис. 5.4)

    (рис 5.4) Локализация радиального градиента

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

    Элемент radialGradient, атрибуты cx, cy и r.
    № Код Вид в браузере
    5.7.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize1.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient" 
                        cx="50%" cy="50%" r="50%">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Значения атрибутов совпадают с принятыми по умолчанию (см. radialGradientoffset1.svg)
    № Код Вид в браузере
    5.7.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize2.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient"
                        cx="50%" cy="50%" r="25%">
          <stop offset="0%"   stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Градиент локализован в окружности с радиусом 25%
    № Код Вид в браузере
    5.7.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="300"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize3.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient1">
          <stop offset="0%"   stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
        <radialGradient id="MyGradient2"  
                        cx="50%" cy="50%" r="25%">
          <stop offset="0%" stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <rect height="150" width="150" x="0" y="0" 
            fill="url(#MyGradient1)"/>
      <rect height="150" width="150" x="0" y="150" 
            fill="url(#MyGradient2)"/>
      <!--Вспомогательная линия-->
      <line x1="0" y1="150" x2="150" y2="150" 
            stroke="red" stroke-width="2"/>
    </svg>
    Описание
    Заливка прямоугольника радиальным градиентом без атрибутов (наверху) и с атрибутами (внизу).
    № Код Вид в браузере
    5.7.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize4.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient"
                        cx="50%" cy="50%" r="75%">
          <stop offset="0%"   stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Увеличение площади распространения градиента позволяет выделить его определенную часть.
    № Код Вид в браузере
    5.7.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize5.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient"  
                        cx="25%" cy="25%" r="25%">
          <stop offset="0%"   stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Отсекание фигурой изображение градиента, локализованного в верхней левой части.
    № Код Вид в браузере
    5.7.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientLocalize6.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient"  
                        cx="75%" cy="75%" r="25%">
          <stop offset="0%"   stop-color="red"/>
          <stop offset="100%" stop-color="yellow"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Отсекание фигурой изображение градиента, локализованного в правой нижней части.

    В последних двух примерах заметно"обрезанное" расположение области градиента. Для получения эффекта светового блика на фигуре также используется радиальный градиент. Но в этом случае следует применять атрибуты fx и fy, которые подстраивают распространение градиента под геометрические размеры фигуры (табл. 5.8).

    Элемент radialGradient, атрибуты fx и fy.
    № Код Вид в браузере
    5.8.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientF1.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient" 
                        fx="25%" fy="25%">
          <stop offset="0%"   stop-color="white"/>
          <stop offset="100%" stop-color="blue"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Эффект светового блика в левой верхней части фигуры.
    № Код Вид в браузере
    5.8.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientF2.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient" 
                        fx="75%" fy="75%">
          <stop offset="0%"   stop-color="white"/>
          <stop offset="100%" stop-color="blue"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Эффект светового блика в правой нижней части фигуры.

    Как и в случае линейного градиента, допускается применение нескольких цветов и управление прозрачностью при помощи атрибута stop-opacity (табл. 5.9)

    Элемент radialGradient, серия цветов, атрибут stop-opacity.
    № Код Вид в браузере
    5.9.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome1.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="10%" stop-color="white"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </radialGradient>
      </defs>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Заливка окружности радиальным градиентом, содержащим серию цветов.
    № Код Вид в браузере
    5.9.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome2.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="10%"  stop-color="white"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </radialGradient>
      </defs>
      <rect x="0" y="0" width="150" height="150" 
            fill="url(#MyGradient)"/>
    </svg>
    Описание
    Заливка прямоугольника радиальным градиентом, содержащим серию цветов.
    № Код Вид в браузере
    5.9.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome3.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="10%"  stop-color="white"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </radialGradient>
      </defs>
      <rect x="10" y ="5" width="130" height="90" 
            fill="url(#MyGradient)"/>
      <circle cx="35" cy="120" r="25" 
              fill="url(#MyGradient)"/>
      <circle cx="115" cy="120" r="25" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Заливка нескольких фигур радиальным градиентом, содержащим серию цветов.
    № Код Вид в браузере
    5.9.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="250" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome4.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="10%"  stop-color="white"/>
          <stop offset="20%"  stop-color="red"/>
          <stop offset="30%"  stop-color="orange"/>
          <stop offset="40%"  stop-color="yellow"/>
          <stop offset="50%"  stop-color="green"/>
          <stop offset="60%"  stop-color="deepskyblue"/>
          <stop offset="70%"  stop-color="blue"/>
          <stop offset="80%"  stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </radialGradient>
      </defs>
      <text x="10" y="100" 
            font-family="Arial Bold" font-size="90" 
            stroke="black" stroke-width="1"
            fill="url(#MyGradient)">
        Текст
      </text>
    </svg>
    Описание
    Заливка текста радиальным градиентом.
    № Код Вид в браузере
    5.9.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome5.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="0%"   stop-color="blue"/>
          <stop offset="100%" stop-color="white" 
                stop-opacity="0"/>
        </radialGradient>
      </defs>
      <rect x="0" y="60" 
            width="150" height="30" ></rect>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)" />
    </svg>
    Описание
    Радиальный градиент с нулевой прозрачностью по краям.
    № Код Вид в браузере
    5.9.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример radialGradientSome6.svg
      </desc>
      <defs>
        <radialGradient id="MyGradient">
          <stop offset="0%"   stop-color="white" 
                stop-opacity="0"/>
          <stop offset="100%" stop-color="blue"/>
        </radialGradient>
      </defs>
      <rect x="0" y="60" width="150" height="30"></rect>
      <circle cx="75" cy="75" r="70" 
              fill="url(#MyGradient)"/>
    </svg>
    Описание
    Радиальный градиент с нулевой прозрачностью в центре.

    Паттерны

    Элемент pattern предназначен для создания мозаичной графической текстуры, которая может применяться в качестве заливки или контура фигуры. Определение паттерна включает в себя графическое содержимое, которые будут представлять собой мозаику:

    <pattern id="MyPattern" x="coordinate" y="coordinate" 
      width="length" height="length"
             patternUnits="userSpaceOnUse | objectBoundingBox" >
      <!-Графическое содержимое-->
    </pattern>

    Элемент pattern не входит в секцию defs, однако он не может быть отображен в документе непосредственно. Для его включения обязательно требуется фигура с установленными свойствами stroke или fill. В табл. 5.10 приводятся описание атрибутов этого элемента.

    № Название
    5.10.1 x, y
    Описание
    Координаты верхнего левого угла графического элемента, который служит мозаикой в паттерне.
    № Название
    5.10.2 width, height
    Описание
    Ширина и высота площади, которую занимает отдельный элемент мозаики. Визуально этот параметр определяет разреженность или уплотненность паттерна.
    № Название
    5.10.3 patternUnits
    Описание
    Определение координатной системы для атрибутов x, y, width и height. Возможны следующие значения:
  • userSpaceOnUse - атрибуты x, y, width и height определяются в системе координат той фигуры, для которой будет применяться паттерн.
  • objectBoundingBox - атрибуты x, y, width и height определяются в системе координат самого паттерна.
  • Если параметр patternUnits не указан, то по умолчанию принимается значение objectBoundingBox.

    В табл. 5.11 приводятся примеры использования паттернов.

    Элемент pattern.
    № Код Вид в браузере
    5.11.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern1.svg
      </desc>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <circle cx="11" cy="11" r="10" fill="red" stroke="black"/>
      </pattern>
      <rect x="2" y="2" width="146" height="146" 
            fill="url(#MyPattern)" stroke="black" stroke-width ="2"/>
    </svg>
    Описание
    Графическое содержимое паттерна представляет собой размноженный элемент circle.
    № Код Вид в браузере
    5.11.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
         Пример pattern2.svg
      </desc>
    <pattern id="MyPattern" x="0" y="0" width="40" height="40"
    patternUnits="userSpaceOnUse">
    <circle cx="11" cy="11" r="10" fill="red" stroke="black" />
    </pattern>
      <rect x="2" y="2" width="146" height="146" 
            fill="url(#MyPattern)" stroke="black" stroke-width ="2" />
    </svg>
    Описание
    По сравнению с предыдущим примером, здесь увеличены значения атрибутов width и height в определении паттерна. Визуально шарики отстоят друг от друга на большее расстояние.
    № Код Вид в браузере
    5.11.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern3.svg
      </desc>
      <pattern id="MyPattern" x="20" y="10" width="40" height="40"
               patternUnits="userSpaceOnUse">
        <circle cx="11" cy="11" r="10" fill="red" stroke="black" />
      </pattern>
      <rect x="2" y="2" width="146" height="146" fill="url(#MyPattern)" 
            stroke="black" stroke-width ="2" />
    </svg>
    Описание
    Смещение верхней точки заполнителя при изменении атрибутов x и y внутри паттерна.
    № Код Вид в браузере
    5.11.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример pattern4.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)"/>
      </pattern>
      <ellipse cx="75" cy="75" rx="75" ry="50" fill="url(#MyPattern)" 
               stroke="black" stroke-width ="2" />
    </svg>
    Описание
    В качестве графического содержимого паттерна применяется элемент rect, заполненный градиентной заливкой.
    № Код Вид в браузере
    5.11.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример pattern5.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)" />
      </pattern>
      <ellipse cx="75" cy="75" rx="75" ry="50" fill="magenta" 
               stroke="url(#MyPattern)" stroke-width ="10" />
    </svg>
    Описание
    Применение элемента pattern в качестве контура фигуры.
    № Код Вид в браузере
    5.11.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="250" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример pattern6.svg
      </desc>
      <defs>
        <linearGradient id="MyGradient">
          <stop offset="0%" stop-color="blue"/>
          <stop offset="20%" stop-color="red"/>
          <stop offset="30%" stop-color="orange"/>
          <stop offset="40%" stop-color="yellow"/>
          <stop offset="50%" stop-color="green"/>
          <stop offset="60%" stop-color="deepskyblue"/>
          <stop offset="70%" stop-color="blue"/>
          <stop offset="80%" stop-color="purple"/>
          <stop offset="100%" stop-color="white"/>
        </linearGradient>
      </defs>
      <pattern id="MyPattern" x="0" y="0" width="22" height="22"
               patternUnits="userSpaceOnUse">
        <rect x="1" y="1" width="20" height = "20" fill="url(#MyGradient)"/>
      </pattern>
      <text x="10" y="100" font-family="Arial Bold" font-size="90" 
            stroke="black" stroke-width="1" fill="url(#MyPattern)">
        Текст
      </text>
    </svg>
    Описание
    Заполнение паттерном текста.

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

    Контуры

    Оформление фигуры определяется не только ее заливкой, но и контуром. В первых лекциях мы определяли цвет заливки и ее толщину. Теперь рассмотрим другие атрибуты контура, доступные в SVG - графике. Описание всех атрибутов приводятся в табл. 5.12.

    Атрибуты контура.
    № Название
    5.12.1 stroke
    Описание
    Рисование контура фигуры
    Диапазон значений
    <color>
    Значение по умолчанию
    Фигура без контура.
    № Название
    5.12.2 stroke-width
    Описание
    Толщина линии
    Диапазон значений
    <length>
    Значение по умолчанию
    1 пиксел
    № Название
    5.12.3 stroke-opacity
    Описание
    Прозрачность заливки
    Диапазон значений
    Число между 0 (полная прозрачность) и 1 (полная непрозрачность)
    Значение по умолчанию
    1
    № Название
    5.12.4 stroke-dasharray
    Описание
    Определение стиля линии - сплошная, пунктиром или точками.
    Диапазон значений
    <number>
    Значение по умолчанию
    Сплошная. В качестве значения допускается указание ряда чисел.
    № Название
    5.12.5 dashoffset
    Описание
    Определение отступа при задании пунктирной линии
    Диапазон значений
    <length>
    Значение по умолчанию
    0
    № Название
    5.12.6 stroke-linecap
    Описание
    Задание типа линии на концах - обычная (butt), скругленная (round) и с выступом (square).
    Диапазон значений
    butt | round | square
    Значение по умолчанию
    butt
    № Название
    5.12.7 sroke-linejoin
    Описание
    Тип линии на изгибе - обычный ( miter ), сглаженный ( round ) и рубленый ( bevel ).
    Диапазон значений
    mitre | round | bevel
    Значение по умолчанию
    mitre
    № Название
    5.12.8 stroke-mitrelimit
    Описание
    Величина отступа при выборе значении miter атрибута stroke-linejoin
    Диапазон значений
    <number>
    Значение по умолчанию
    4

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

    Атрибуты контура.
    № Код Вид в браузере
    5.13.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke1.svg
      </desc>
      <rect x="0" y="30" width="150" height="90" ></rect>
      <circle cx="75" cy="75" r="60" fill="blue" stroke="red" 
              stroke-width="15" stroke-opacity="0.6"/>
    </svg>
    Описание
    Применение прозрачности к контуру. Заметно проведение контура по центральной части краев фигуры.
    № Код Вид в браузере
    5.13.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke2.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5"/>
    </svg>
    Описание
    Атрибут stroke-dasharray, получение точечной линии.
    № Код Вид в браузере
    5.13.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke3.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10"/>
    </svg>
    Описание
    Пара значений атрибута stroke-dasharray определяет размер точек и интервал между ними.
    № Код Вид в браузере
    5.13.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke4.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10,15"/>
    </svg>
    Описание
    Получение пунктирной линии. Тройка значений атрибута stroke-dasharray определяет размер точек, интервал между ними и размер отрезков.
    № Код Вид в браузере
    5.13.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="150" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke5.svg
      </desc>
      <circle cx="75" cy="75" r="70" fill="none" stroke="red" 
              stroke-width="5" stroke-dasharray="5,10,15,5,10,15"/>
    </svg>
    Описание
    Повторяющиеся тройки значений приводят к тому же самому результату.
    № Код Вид в браузере
    5.13.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke6.svg
      </desc>
      <line x1="15" y1="0" x2="15" y2="100" 
            stroke="black" stroke-width="1"/>
      <line x1="0" y1="10" x2="200" y2="10" 
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="0%"/>
      <line x1="0" y1="30" x2="200" y2="30" 
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="25%"/>
      <line x1="0" y1="50" x2="200" y2="50"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="50%"/>
      <line x1="0" y1="70" x2="200" y2="70"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="75%"/>
      <line x1="0" y1="90" x2="200" y2="90"
            stroke="red" stroke-width="5"
            stroke-dasharray="5,10,15" stroke-dashoffset="100%"/>
    </svg>
    Описание
    Атрибут stroke-dashoffset позволяет задать начальный отступ пунктирной линии.
    № Код Вид в браузере
    5.13.7
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke7.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
           stroke-linecap="butt"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением butt, совпадающим с принятым по умолчанию.
    № Код Вид в браузере
    5.13.8
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke8.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
            stroke-linecap="round"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением round, задает сглаживание на концах. Заметно выступающее расположение линии - для обеих линий заданы одинаковые значения абсцисс.
    № Код Вид в браузере
    5.13.9
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke9.svg
      </desc>
      <line x1="10" y1="25" x2="190" y2="25" 
            stroke="black" stroke-width="10" 
            stroke-linecap="square"/>
      <line x1="10" y1="60" x2="190" y2="60" 
            stroke="red" stroke-width="50"/>
    </svg>
    Описание
    Атрибут stroke-linecap со значением square, завершает линию обычным образом, но позволяет получить выступы по краям.
    № Код Вид в браузере
    5.13.10
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke10.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением miter, принятым по умолчанию.
    № Код Вид в браузере
    5.13.11
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke11.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="round" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением round, задающим сглаженный изгиб.
    № Код Вид в браузере
    5.13.12
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="100"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke12.svg
      </desc>
      <polyline  points="20,80 50,20 80,80" 
                 stroke="red" stroke-width="15" 
                 fill="none" stroke-linejoin="bevel" />
    </svg>
    Описание
    Атрибут stroke-linejoin со значением bevel, задающим рубленый изгиб.
    № Код Вид в браузере
    5.13.13
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="100" height="600"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример stroke13.svg
      </desc>
      <line x1="70" y1="0" x2="70" y2="700" 
            stroke="black" stroke-width="1"/>
      <line x1="95" y1="0" x2="95" y2="700" 
            stroke="black" stroke-width="1"/>
      <polyline  points="10,30 70,50 10,70" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="1" />
      <polyline  points="10,130 70,150 10,170" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="2" />
      <polyline  points="10,230 70,250 10,270" 
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="3" />
      <polyline  points="10,330 70,350 10,370"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="4" />
      <polyline  points="10,430 70,450 10,470"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="5" />
      <polyline  points="10,530 70,550 10,570"
                 stroke="red" stroke-width="15"
                 fill="none" stroke-linejoin="miter"
      stroke-miterlimit ="6" />
    </svg>
    Описание
    В данном случае значения атрибута stroke-miterlimit до четырех задают рубленый изгиб, равные и больше четырех - обычный.

    Маркеры

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

    <defs>
      <marker id="myMarker" markerWidth="length" markerHeight="length"
              refX="coordinate" refY="coordinate" orient="auto">
      <!--Оформление маркера-->
    </marker>
        </defs>
        <line x1="10" y1="10" x2="130" y2="10"  stroke="red" stroke-width="2"
              marker-end="url(#myMarker)"/>

    Атрибут marker-end помещает в конец линии графический элемент, используемый в качестве оформления маркера. Описания атрибутов этого элемент приводятся в табл. 5.14.

    Элемент marker.
    № Название
    5.14.1 markerWidth, markerHeight
    Описание
    Ширина и высота фигуры, применяемой для оформления маркера.
    Диапазон значений
    <length>
    Значение по умолчанию
    3
    № Название
    5.14.2 refX, refY
    Описание
    Координаты верхней левой точки фигуры.
    Диапазон значений
    <coordinate>
    Значение по умолчанию
    0
    № Название
    5.14.3 orient
    Описание
    Поворот маркера вокруг центра.
    Диапазон значений
    <angle>
    Значение по умолчанию
    0
    № Название
    5.14.4 marker-start, marker-end, marker-mid
    Описание
    Расположение маркера на линии - в начале, конце или середине.
    Диапазон значений
    -
    Значение по умолчанию
    -

    Маркер, который был определен один раз, может применяться для многих линий в одном SVG - документе. В табл. 5.15 приводятся примеры использования этого элемента.

    Элемент marker.
    № Код Вид в браузере
    5.15.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker1.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="5" markerHeight="5"
                refX="0" refY="2.5" orient="auto">
          <polygon points="0,0, 5,2.5 0,5" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="20" markerHeight="20"
                refX="0" refY="10" orient="auto">
          <polygon points="0,0, 20,10 0,20" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="10" x2="130" y2="10"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="50" x2="130" y2="50"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="90" x2="130" y2="90"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Несколько маркеров, различающихся лишь значениями атрибутов markerWidth и markerHeight.
    № Код Вид в браузере
    5.15.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker2.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="-5" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3"
                markerWidth="10" markerHeight="10"
                refX="5" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Горизонтальное позиционирование маркера относительно линии при помощи атрибутов refX и refY.
    № Код Вид в браузере
    5.15.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker3.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="0" refY="0" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="10" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Вертикальное позиционирование маркера относительно линии при помощи атрибутов refX и refY.
    № Код Вид в браузере
    5.15.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker4.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="-20">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="20">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)"/>
      <line x1="10" y1="95" x2="130" y2="95"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"/>
    </svg>
    Описание
    Атрибут orient отвечает за поворот маркера.
    № Код Вид в браузере
    5.15.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="120"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker5.svg
      </desc>
      <defs>
        <marker id="myMarker1"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none"
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker2"
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
        <marker id="myMarker3" 
                markerWidth="10" markerHeight="10"
                refX="0" refY="5" orient="auto">
          <polygon points="0,0, 10,5 0,10" fill="none" 
                   stroke="blue" stroke-width="1"/>
        </marker>
      </defs>
      <line x1="10" y1="15" x2="130" y2="15"
            stroke="red" stroke-width="2"
            marker-start="url(#myMarker1)"/>
      <line x1="10" y1="55" x2="130" y2="55"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)" />
      <line x1="10" y1="95" x2="130" y2="95"  
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"
            marker-start="url(#myMarker3)"/>
    </svg>
    Описание
    Размещение маркера относительно центра линии.
    № Код Вид в браузере
    5.15.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="180" height="150"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример marker6.svg
      </desc>
      <defs>
        <marker id="myMarker1" 
                markerWidth="25" markerHeight="25"
                refX="-2230" refY="400" orient="auto"
                viewBox="0 0 1000 800">
          <circle cx="500" cy="400" r="300" fill="lightskyblue"
                  stroke="blue" stroke-width="30"/>
          <ellipse cx="500" cy="500" rx="150" ry="100" 
                   fill="none" stroke="blue" stroke-width="30"/>
          <rect x="300" y="370" width="400" height="130"  
                fill="lightskyblue"/>
          <ellipse cx="350" cy="300"  rx="100" ry="50" 
                   fill="white" stroke="blue" stroke-width="30"/>
          <ellipse cx="650" cy="300"  rx="100" ry="50" 
                   fill="white" stroke="blue" stroke-width="30"/>
          <circle cx="350" cy="300"  r="25" fill="black"/>
          <circle cx="650" cy="300"  r="25" fill="black"/>
        </marker>
        <marker id="myMarker2" markerWidth="60" markerHeight="60"
        refX="100" refY="38" orient="auto" viewBox="0 0 200 100">
          <polygon fill="red"
                   points="100,10 105.8,27.2 123.8,27.2 109.4,38
                           114.6,55.2 100,45 85.4,55.2 90.6,38
                           76.2,27.2 94.2,27.2" />
        </marker>
        <defs>
          <radialGradient id="MyGradient" fx="25%" fy="25%">
            <stop offset="0%" stop-color="white"/>
            <stop offset="100%" stop-color="blue"/>
          </radialGradient>
        </defs>
        <marker id="myMarker3"
                markerWidth="15" markerHeight="15"
                refX="37.5" refY="70" orient="auto"
                viewBox="0 0 150 150">
          <circle cx="75" cy="75" r="70" fill="url(#MyGradient)" />
        </marker>
      </defs>
      <line x1="10" y1="20" x2="130" y2="30"  
            stroke="red" stroke-width="2"
            marker-start="url(#myMarker1)"/>
      <line x1="10" y1="60" x2="130" y2="70"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker2)" />
      <line x1="10" y1="100" x2="130" y2="110"
            stroke="red" stroke-width="2"
            marker-end="url(#myMarker3)"
            marker-start="url(#myMarker3)"/>
    </svg>
    Описание
    В качестве фигуры для оформления маркера может выступать группа простых элементов.

    Элемент symbol

    В Лекции 2 мы рассматривали объединении отдельных элементов в группы. Это очень удобный способ объединения фигур для задания координат, применения атрибутов и как мы увидим в следующих лекциях применения трансформаций. Но существует еще один способ объединения фигур, позволяющий создавать свои собственные элементы. Для них можно задавать цвет заливки, контура, размеры - словом поступать с ними так, как и в случае определения обычных элементов. Рассмотрим следующий фрагмент кода:

    <defs>
      <symbol id="mySymbol" viewBox="0 0 100 100" 
         preserveAspectRatio="none">
        <path d="M 15,50 L 45, 50 M 30, 30 L 30, 75 M 30, 
           75 L 40, 90 M 30, 75 L 20, 90"></path>
        <circle cx="30" cy="30" r="10"/>
      </symbol>
    </defs>
    <use xlink:href="#mySymbol" x="0" y="10" width="100" 
      height="150" fill="pink" stroke="red" stroke-width="3"/>

    Внутри секции defs помещается определение элемента symbol, содержащее окружность и элемент Path. Координаты этих элементов определяются в собственной системе - для этого вводится атрибут viewBox. Созданный символ используется в SVG - документе при помощи элемента use и атрибута xlink:href. Размеры символа можно менять без соблюдения пропорций - для этого в его определении включен атрибут preserveAspectRatio со значением none. В табл. 5.16 приводятся примеры использования символов.

    Элемент symbol.
    № Код Вид в браузере
    5.16.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol1.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
      </defs>
      <use xlink:href="#mySymbol" x="0"  y="10" 
           width="150" height="150"/>
      <use xlink:href="#mySymbol" x="50" y="10" 
           width="300" height="150"/>
      <use xlink:href="#mySymbol" x="50" y="90" 
           width="150" height="300"/>
    </svg>
    Описание
    Применение символа с заданием различных геометрических размеров. По умолчанию фигуры заливаются черным цветом с толщиной линий в 1 пиксел.
    № Код Вид в браузере
    5.16.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol2.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
      </defs>
      <use xlink:href="#mySymbol" x="0"   y="10" 
           width="100" height="150" fill="pink"
           stroke="red" stroke-width="3"/>
      <use xlink:href="#mySymbol" x="50"  y="80" 
           width="70" height="70" fill="pink"
           stroke="red" stroke-width="2"/>
      <use xlink:href="#mySymbol" x="80"  y="80" 
           width="70" height="70" fill="lightblue" 
           stroke="blue" stroke-width="2"/>
      <use xlink:href="#mySymbol" x="100" y="0" 
           width="120" height="160" fill="lightblue"
           stroke="blue" stroke-width="3"/>
    </svg>
    Описание
    Применение символа с заданием геометрических размеров, а также заливки и контура.
    № Код Вид в браузере
    5.16.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="200" height="400"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title> Лекция 5. Рисование</title>
      <desc>
        Пример symbol3.svg
      </desc>
      <defs>
        <symbol id="mySymbol" viewBox="0 0 100 100" 
                preserveAspectRatio="none">
          <path d="M 15, 50 L 45, 50 M 30, 30 L 30, 75 
                   M 30, 75 L 40, 90 M 30, 75 L 20, 90">
          </path>
          <circle cx="30" cy="30" r="10"/>
        </symbol>
        <symbol id="myFamily">
          <use xlink:href="#mySymbol" x="0" y="10" 
               width="100" height="150" fill="pink" 
               stroke="red" stroke-width="3"/>
          <use xlink:href="#mySymbol" x="50" y="80" 
               width="70" height="70" fill="pink"
               stroke="red" stroke-width="2"/>
          <use xlink:href="#mySymbol" x="80" y="80" 
               width="70" height="70" fill="lightblue"
               stroke="blue" stroke-width="2"/>
          <use xlink:href="#mySymbol" x="100" y="0"
               width="120" height="160" fill="lightblue"
               stroke="blue" stroke-width="3"/>
        </symbol>
      </defs>
      <use xlink:href="#myFamily" x="0" y="0"
           width="150" height="150"/>
      <use xlink:href="#myFamily" x="0" y="120"
           width="150" height="150"/>
      <use xlink:href="#myFamily" x="0" y="240"
           width="150" height="150"/>
    </svg>
    Описание
    Применение вложенных символов.

    Элемент clipPath

    Элемент clipPath предназначен для отсекания заданной областью части изображения. Этот инструмент хорошо знаком пользователям графических программ, например в Adobe Photoshop для таких задач имеются специальные инструменты (рис. 5.5):

    (рис 5.5) Инструмент горизонтальный текст-маска в программе Adobe Photoshop

    Фрагмент кода для элемента clipPath выглядит так:

    <defs>
      <!--Объект clipPath-->
      <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
      </clipPath>
    </defs>
    <image x="10" y="5" width="291" height="195"
          clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>

    Внутри элемента определяется фигура, которая будет ограничивать изображения. Элемент image предназначен для помещения в SVG - документ внешнего графического файла - в данном случае используется"sea2.jpg". В табл. 5.17 приводятся примеры использования элемента clipPath.

    Элемент clipPath.
    № Код Вид в браузере
    5.17.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath1.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения окружностью.
    № Код Вид в браузере
    5.17.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath2.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <polygon points="20,10 280,10 20, 190 280,190"
                   stroke="red" stroke-width="3" fill="lightpink"/>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения элементов polygon. (См. polygon3.svg)
    № Код Вид в браузере
    5.17.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath3.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="100" cy="100" r="90"></circle>
          <circle cx="200" cy="100" r="90"></circle>
        </clipPath>
      </defs>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    При наложении двух элементов, определяемых в clipPath, занимаемая ими площадь объединяется.
    № Код Вид в браузере
    5.17.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath4.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="100" cy="100" r="90"></circle>
          <circle cx="200" cy="100" r="90"></circle>
        </clipPath>
      </defs>
      <rect width="300" height="200" x="0" y="0" fill="black">
      </rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Для оформления можно использовать дополнительные элементы.
    № Код Вид в браузере
    5.17.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath5.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <rect  width="300" height="200" x="0" y="0" fill="pink">
      </rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
      <circle cx="150" cy="100" r="90" fill="none" 
              stroke="red" stroke-width="5" stroke-dasharray="5"/>
    </svg>
    Описание
    Для последовательности элементов, среди которых имеется элемент image, справедлив тот же самый вертикальный порядок.
    № Код Вид в браузере
    5.17.6
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath6.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <text x="2" y="150" font-family="Arial" font-size="150">
            АБВ
          </text>
        </clipPath>
      </defs>
      <image x="0" y="0" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Отсекание части изображения текстом.
    № Код Вид в браузере
    5.17.7
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример clipPath7.svg
      </desc>
      <defs>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <text x="2" y="150" font-family="Arial" font-size="150">
            АБВ
          </text>
        </clipPath>
      </defs>
      <rect  width="300" height="200" x="0" y="0" fill="yellow">
      </rect>
      <image x="0" y="0" width="291" height="195"
             clip-path="url(#myclipPath)" xlink:href="sea2.jpg"/>
      <text x="2" y="150" font-family="Arial" font-size="150" 
            fill="none" stroke="orange" stroke-width="3">
        АБВ
      </text>
    </svg>
    Описание
    Отсекание части изображения текстом с оформлением.

    Элемент mask

    При работе с clipPath можно было заметить, что внутреннее оформление фигуры, определяемой внутри элемента, игнорируется. Элемент mask является инструментом, поддерживающим все свойства элемента clipPath с учетом графической структуры заполнителя. Фрагмент кода для элемента mask выглядит так:

    <defs>
      <mask id="myMask">
        <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
        </circle>
      </mask>
    </defs>
    <image x="10" y="5" width="291" height="195"
           mask="url(#myMask)" xlink:href="sea2.jpg"/>

    Здесь в качестве заливки фигуры-заполнителя используется радиальный градиент. В табл. 5.18 приводятся примеры использования элемента mask.

    № Код Вид в браузере
    5.18.1
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример mask1.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="0%" stop-color="white" stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
      mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Применение в качестве заполнителя маски окружности с градиентной заливкой.
    № Код Вид в браузере
    5.18.2
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
        Пример mask2.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="white" stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="150" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
             mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Применение в качестве заполнителя маски окружности с градиентной заливкой. Уменьшением размера градиентной области достигается увеличение площади открытой поверхности.
    № Код Вид в браузере
    5.18.3
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
         Пример mask3.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="white" 
                stop-opacity="1"/>
          <stop offset="100%" stop-color="white" stop-opacity="0"/>
        </radialGradient>
        <!--Объект mask-->
        <mask id="myMask">
          <circle cx="100" cy="100" r="90" fill="url(#myGradient)">
          </circle>
          <circle cx="200" cy="100" r="90" fill="url(#myGradient)">
          </circle>
        </mask>
      </defs>
      <image x="10" y="5" width="291" height="195"
             mask="url(#myMask)" xlink:href="sea2.jpg"/>
    </svg>
    Описание
    Так же, как и в случае clipPath, при использовании нескольких фигур в качестве заполнителя их площади объединяются.
    № Код Вид в браузере
    5.18.4
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
      <desc>
         Пример noMask1.svg
      </desc>
      <defs>
        <!--Градиент для заливки маски-->
        <radialGradient id="myGradient">
          <stop offset="80%" stop-color="blue" 
                stop-opacity="0"/>
          <stop offset="100%" stop-color="blue" 
                stop-opacity="1"/>
        </radialGradient>
        <!--Объект clipPath-->
        <clipPath id="myclipPath">
          <circle cx="150" cy="100" r="90">
          </circle>
        </clipPath>
      </defs>
      <rect width="300" height="200"
            x="0" y="0" fill="blue"></rect>
      <image x="10" y="5" width="291" height="195"
             clip-path="url(#myclipPath)"
             xlink:href="sea2.jpg"/>
      <circle cx="150" cy="100" r="90"  
              fill="url(#myGradient)">
      </circle>
    </svg>
    Описание
    При использовании заполнителя, заполненного градиентом любого цвета, на рисунке заметно уменьшение прозрачности белого цвета. Для получения нужного цвета используется комбинация обычного элемента clipPath и наложения радиального градиента с падением прозрачности.
    № Код Вид в браузере
    5.18.5
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
    <svg width="300" height="200"  
       
         xmlns="http://www.w3.org/2000/svg" version="1.1">
      <title>Лекция 5. Рисование</title>
        <desc>
         Пример mask4.svg
        </desc>
      <defs>
       <!--Градиент для заливки маски-->
       <linearGradient id="myGradient" x1="0%" 
          y1="0%" x2="0%" y2="100%" >
        <stop offset="0%" stop-color="white" 
             stop-opacity="1"/>
        <stop offset="100%" stop-color="white" 
             stop-opacity="0"/>
       </linearGradient>
       <!--Объект mask-->
       <mask id="myMask">
        <rect x="0" y="0" width="300" 
              height="200" fill="url(#myGradient)"/>
       </mask>
     </defs>
     <text x="2" y="150" font-family="Arial" 
           font-size="150" fill="red"  mask="url(#myMask)">
        АБВ
     </text>
    </svg>
    Описание
    Маскированный текст.

    Мы закончили рассмотрение основных возможностей рисования, связанных с простой графикой.

    Вернуться к учебному плану