Source code
Revision control
Copy as Markdown
Other Tools
<!DOCTYPE html>
<html lang='en'>
<head>
<title>paths-dom-02-f-manual.svg</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Source SVG: paths-dom-02-f-manual.svg</h1>
<svg version="1.1" baseProfile="full" onload="CreatePath();setTimeout('AnimatePath();', 500);" id="svg-root"
width="100%" height="100%" viewBox="0 0 480 360"
<!--======================================================================-->
<!--= SVG 1.1 2nd Edition Test Case =-->
<!--======================================================================-->
<!--= Copyright 2009 World Wide Web Consortium, (Massachusetts =-->
<!--= Institute of Technology, European Research Consortium for =-->
<!--= Informatics and Mathematics (ERCIM), Keio University). =-->
<!--= All Rights Reserved. =-->
<!--======================================================================-->
<title id="test-title">$RCSfile: paths-dom-02-f.svg,v $</title>
<defs>
<font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
<font-face-src>
<font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
</font-face-src>
</font-face>
</defs>
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
<script><![CDATA[
var offset_angle = 90;
var current_shift = 0;
var shift_inc = 1;
var THRESHOLD = 60;
var segments_added = 0;
var seg_diff = 1;
var adjust_count = 0;
var anim_count = 0;
var adjust_count_max = 8;
var anim_count_max = 10;
var stopped = false;
function DegToRad(degs)
{
return (degs * Math.PI) / 180;
}
function CreatePath()
{
var pathelm = document.getElementById("mypath");
var pathlist = pathelm.pathSegList;
var move = pathelm.createSVGPathSegMovetoAbs(240 + 30 * Math.cos(DegToRad(offset_angle - 30)),
180 + 30 * Math.sin(DegToRad(offset_angle - 30)));
pathlist.appendItem(move);
var angle = offset_angle;
for (var i = 0; i < 6; i++)
{
var x, y, xcp, ycp;
x = 240 + 30 * Math.cos(DegToRad(angle + 30));
y = 180 + 30 * Math.sin(DegToRad(angle + 30));
xcp = 240 + 120 * Math.cos(DegToRad(angle));
ycp = 180 + 120 * Math.sin(DegToRad(angle));
var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
xcp, ycp,
xcp, ycp);
pathlist.appendItem(curve);
angle += 60;
}
pathlist.appendItem(pathelm.createSVGPathSegClosePath());
setTimeout('AdjustPath()', 500);
}
function AddSegment()
{
var pathelm = document.getElementById("mypath");
var pathlist = pathelm.pathSegList;
var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
var angle = offset_angle;
var inc_angle = 360/(segments+1);
var shift_v_x, shift_v_y, xcp, ycp;
var move = pathlist.getItem(0);
move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));
for (var i = 0; i < segments; i++)
{
var curve = pathlist.getItem(1+i);
shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
xcp = 240 + 120 * Math.cos(DegToRad(angle));
ycp = 180 + 120 * Math.sin(DegToRad(angle));
curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
curve.x1 = xcp - shift_v_x;
curve.y1 = ycp - shift_v_y;
curve.x2 = xcp + shift_v_x;
curve.y2 = ycp + shift_v_y;
angle += inc_angle;
}
shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
xcp = 240 + 120 * Math.cos(DegToRad(angle));
ycp = 180 + 120 * Math.sin(DegToRad(angle));
var x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
var y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
var curve = pathelm.createSVGPathSegCurvetoCubicAbs(x, y,
xcp - shift_v_x,
ycp - shift_v_y,
xcp + shift_v_x,
ycp + shift_v_y);
pathlist.insertItemBefore(curve, pathlist.numberOfItems-1);
}
function RemoveSegment()
{
var pathelm = document.getElementById("mypath");
var pathlist = pathelm.pathSegList;
var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
var angle = offset_angle;
var inc_angle = 360/(segments-1);
var shift_v_x, shift_v_y, xcp, ycp;
var move = pathlist.getItem(0);
move.x = 240 + 30 * Math.cos(DegToRad(offset_angle - inc_angle/2));
move.y = 180 + 30 * Math.sin(DegToRad(offset_angle - inc_angle/2));
for (var i = 0; i < segments-1; i++)
{
var curve = pathlist.getItem(1+i);
shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
xcp = 240 + 120 * Math.cos(DegToRad(angle));
ycp = 180 + 120 * Math.sin(DegToRad(angle));
curve.x = 240 + 30 * Math.cos(DegToRad(angle + inc_angle/2));
curve.y = 180 + 30 * Math.sin(DegToRad(angle + inc_angle/2));
curve.x1 = xcp - shift_v_x;
curve.y1 = ycp - shift_v_y;
curve.x2 = xcp + shift_v_x;
curve.y2 = ycp + shift_v_y;
angle += inc_angle;
}
pathlist.removeItem(pathlist.numberOfItems-2);
}
function AdjustPath()
{
if (seg_diff > 0)
{
AddSegment();
}
else
{
RemoveSegment();
}
segments_added += seg_diff;
if (segments_added > 5)
seg_diff = -1;
else if (segments_added <= 0)
seg_diff = 1;
if(adjust_count < adjust_count_max)
{
adjust_count++;
setTimeout('AdjustPath()', 500);
}
}
function AnimatePath()
{
var pathelm = document.getElementById("mypath");
var pathlist = pathelm.pathSegList;
var segments = pathlist.numberOfItems - 2; // Not MoveTo and Close
var angle = offset_angle;
var inc_angle = 360/segments;
for (var i = 0; i < segments; i++)
{
var curve = pathlist.getItem(1+i);
var shift_v_x, shift_v_y, xcp, ycp;
shift_v_x = current_shift * Math.cos(DegToRad(angle + 90));
shift_v_y = current_shift * Math.sin(DegToRad(angle + 90));
xcp = 240 + 120 * Math.cos(DegToRad(angle));
ycp = 180 + 120 * Math.sin(DegToRad(angle));
curve.x1 = xcp - shift_v_x;
curve.y1 = ycp - shift_v_y;
curve.x2 = xcp + shift_v_x;
curve.y2 = ycp + shift_v_y;
angle += inc_angle;
}
current_shift += shift_inc;
if (current_shift >= THRESHOLD || current_shift < 0)
shift_inc = -shift_inc;
if(adjust_count >= adjust_count_max)
{
anim_count++;
}
if(anim_count < anim_count_max)
setTimeout('AnimatePath();', 50);
else
document.getElementById("mypath").addEventListener("click", function func() { adjust_count_max=32768;anim_count_max=32768; AdjustPath(); AnimatePath(); }, false);
}
]]></script>
<path d="" id="mypath" stroke="black" fill="blue"/>
</g>
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
<text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.5 $</text>
</g>
<rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
<!-- comment out this watermark once the test is approved -->
<g id="draft-watermark">
<rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
<text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
</g>
</svg>
</body>
</html>