JavaScript. Подробное руководство, 6-е издание, стр. 353

<b>      х2 + &quot;,&quot; + у2 +          // Дуга заканчивается в точке (х2,у2)</b>

<b>      Z&quot;;                      // Закончить рисование в точке (сх,су)</b>

<b>    // Теперь установить атрибуты элемента &lt;svg:path&gt;</b>

<b>    path.setAttribute(&quot;d&quot;, d);               // Установить описание контура</b>

<b>    path.setAttribute(&quot;fill&quot;, colors[i]);    // Установить цвет сектора</b>

<b>    path.setAttribute(&quot;stroke&quot;, &quot;black&quot;);    // Рамка сектора - черная</b>

<b>    path.setAttribute(&quot;stroke-width”, &quot;2&quot;);  // 2 единицы толщиной</b>

<b>    chart.appendChild(path);                 // Вставить сектор в диаграмму</b>

<b>    // Следующий сектор начинается в точке, где закончился предыдущий</b>

<b>    startangle = endangle;</b>

<b>    // Нарисовать маленький квадрат для идентификации сектора в легенде</b>

<b>    var icon = document.createElementNS(svgns, &quot;rect&quot;);</b>

<b>    icon.setAttribute(&quot;x”, lx);           // Координаты квадрата</b>

<b>    icon.setAttribute(&quot;y&quot;, ly + ЗО*і);</b>

<b>    icon.setAttribute(&quot;width&quot;, 20);       // Размер квадрата</b>

<b>    icon.setAttribute(&quot;height&quot;, 20);</b>

<b>    icon.setAttribute(&quot;fill&quot;, colors[i]); // Тем же цветом, что и сектор</b>

<b>    icon.setAttribute(&quot;stroke&quot;, &quot;black&quot;); // Такая же рамка,</b>

<b>    icon.setAttribute(&quot;stroke-width&quot;, &quot;2&quot;);</b>

<b>    chart.appendChild(icon);              // Добавить в диаграмму</b>

<b>    // Добавить метку правее квадрата</b>

<b>    var label = document.createElementNS(svgns, &quot;text&quot;);</b>

<b>    label.setAttribute(&quot;x&quot;, lx + 30); // Координаты текста</b>

<b>    label.setAttribute(&quot;y&quot;, ly + ЗО*і + 18);</b>

<b>    // Стиль текста можно также определить посредством таблицы CSS-стилей</b>

<b>    label.setAttribute(&quot;font-family&quot;, &quot;sans-serif&quot;);</b>

<b>    label.setAttribute(&quot;font-size&quot;, &quot;16&quot;);</b>

<b>    // Добавить текстовый DOM-узел в элемент &lt;svg:text&gt;</b>

<b>    label.appendChild(document.createTextNode(labels[і]));</b>

<b>    chart.appendChild(label); // Добавить текст в диаграмму</b>

<b>  }</b>

<b>  return chart;</b>

<b>}</b>

Программный код в примере 21.2 относительно прост. Здесь выполняются некоторые математические расчеты для преобразования исходных данных в углы секторов круговой диаграммы. Однако основную часть примера составляет программный код, создающий SVG-элементы и выполняющий настройку их атрибутов. Чтобы этот пример мог работать в броузерах, не полностью поддерживающих стандарт HTML5, здесь формат SVG интерпретируется как грамматика XML и вместо метода

<b>createElement()</b>
используются пространство имен SVG и метод
<b>createElementNS()</b>
.

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

<b>&lt;svg:path&gt;</b>
. Этот SVG-элемент описывает рисование произвольных фигур, состоящих из линий и кривых. Описание фигуры определяется атрибутом
<b>d</b>
элемента
<b>&lt;svg:path&gt;.</b>
Основу описания составляет компактная грамматика символьных кодов и чисел, определяющих координаты, углы и прочие значения. Например, символ
<b>М</b>
означает «move to» (переместиться в точку), и вслед за ним должны следовать координаты X и У точки. Символ
<b>L</b>
означает «line to» (рисовать линию до точки); он рисует линию от текущей точки до точки с координатами, которые следуют далее. Кроме того, в этом примере используется символьный код
<b>А</b>
, который рисует дугу (arc). Вслед за этим символом следуют семь чисел, описывающих дугу. Точное описание нас здесь не интересует, но вы можете найти его в спецификации по адресу http://www.w3.org/TR/SVG/.

Обратите внимание, что функция

<b>pieChart()</b>
возвращает элемент
<b>&lt;svg&gt;,</b>
содержащий описание круговой диаграммы, но она не вставляет этот элемент в документ. Предполагается, что это будет делать вызывающая программа. Диаграмма, изображенная на рис. 21.3, была создана с помощью следующего файла:

<b>&lt;html&gt;</b>

<b>&lt;head&gt;</b>

<b>  &lt;script src=&quot;PieChart.js&quot;x/scr.ipt&gt;</b>

<b>&lt;/head&gt;</b>

<b>&lt;body onload=&quot;document.body.appendChild(</b>

<b>                pieChart([12, 23, 34, 45], 640, 400, 200, 200, 150,</b>

<b>                ['красный','синий’,'желтый','зеленый'],</b>

<b>                ['Север','Юг', 'Восток', 'Запад'], 400, 100));</b>