Tenemos dos m�todos para modificar el contenido de un fichero SVG mediante Scripting:
-
Considerando el documento como un fichero XML est�ndar y utilizando DOM para su manipulaci�n.
-
Considerando el documento como un fichero espec�fico SVG y utlizando el modelo de objetos de SVG para su manipulaci�n.
�Funciones de ejemplo para el de DOM
<?xml version="1.0"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" height="300" onload="pinta()"> <script type="text/ecmascript"> <![CDATA[ function pinta() { var circleNode = svgDocument.createElement("circle"); circleNode.setAttribute("cx", 300*Math.random()); circleNode.setAttribute("cy", 300*Math.random()); circleNode.setAttribute("r", 30); circleNode.setAttribute("style", "stroke: none; " + "opacity: 0.3; " + "fill: rgb(" + 255*Math.random() + "," + 255*Math.random() + "," + 255*Math.random() + ");"); setTimeout("window.pinta()", 300); document.getElementById("dr").appendChild(circleNode); } ]]> </script> <g id="dr" /> </svg>

<?xml version="1.0"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="236" height="295"> <script type="text/ecmascript"><![CDATA[ var drag = false; var dx = 0; var dy = 0; var x = 0; var y = 0; var frame = document.documentElement.getElementById("frame"); var filtered = document.documentElement.getElementById("filtered"); var clip = document.documentElement.getElementById("clipRecorte"); frame.addEventListener("mousedown", mousedown_listener, false); frame.addEventListener("mouseup", mouseup_listener, false); frame.addEventListener("mousemove", mousemove_listener, false); function mousedown_listener(evt) { drag = true; dx = filtered.getAttribute("x") - evt.clientX; dy = filtered.getAttribute("y") - evt.clientY; } function mouseup_listener(evt) { drag = false; alert('x: ' + filtered.getAttribute("x") + ', ' + 'y: ' + filtered.getAttribute("y")); } function mousemove_listener(evt) { if (drag) { x = evt.clientX + dx; y = evt.clientY + dy; filtered.setAttribute("x", x); filtered.setAttribute("y", y); clip.getChildNodes().item(1).setAttribute("d", "M" + x + "," + y + " " + "L" + (100+x) + "," + y + " " + "L" + (100+x) + "," + (100+y) + " " + "L" + x + "," + (100+y) + " Z"); } } ]]> </script> <defs> <clipPath id="clipRecorte"> <path d="M0,0 L100,0 L100,100 L0,100 Z" /> </clipPath> </defs> <g id="target"> <image width="236" height="295" xlink:href="wilber-wizard.png" opacity="0.3" /> <image width="236" height="295" xlink:href="wilber-wizard.png" clip-path="url(#clipRecorte)" /> <g id="frame"> <rect id="filtered" width="100" height="100" style="fill: red; fill-opacity: 0; stroke: red; stroke-width: 1; shape-rendering: optimizeSpeed;" /> </g> </g> </svg>

�Funciones de ejemplo para el uso del modelo de objetos de
SVG
function init() { transform_list = document.getElementById('all').transform.baseVal; svg_element = document.getElementById('all').ownerSVGElement; } function Rotate() { var xform = document.getElementById('foo').createSVGTransform(); xform.setRotate(30,50,300); var id = svg_element.suspendRedraw(1000); transform_list.appendItem(xform); svg_element.unsuspendRedraw(id); } function Translate() { var xform = document.getElementById('foo').createSVGTransform(); xform.setTranslate(10,-10); var id = svg_element.suspendRedraw(1000); transform_list.appendItem(xform); svg_element.unsuspendRedraw(id); } function Scalein() { var xform = document.getElementById('foo').createSVGTransform(); xform.setScale(1.5,1.5); transform_list.appendItem(xform); } function Scaleout() { var xform = document.getElementById('foo').createSVGTransform(); xform.setScale(0.5,0.5); var id = svg_element.suspendRedraw(1000); transform_list.appendItem(xform); svg_element.unsuspendRedraw(id); } function DOMTest() { var p = document.getElementById('barx').points.getItem(0); for (var i=50;i<250;++i) { p.x = i; } } function DOMTest2() { var p = document.getElementById('bary').points.getItem(0); for (var i=50;i<250;++i) { p.y = i; } }