259 lines
8 KiB
HTML
259 lines
8 KiB
HTML
<!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"
|
|
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<!--======================================================================-->
|
|
<!--= 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. =-->
|
|
<!--= See http://www.w3.org/Consortium/Legal/. =-->
|
|
<!--======================================================================-->
|
|
|
|
<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>
|