<!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>