In rete http://www.elegio.it/svg/svg2014/
Nuovi lavori SVG del 2014
Mi riprometto di mettere qui le cose nuove del 2014 senza però dimenticarmi di tutto quello che ho fatto negli anni precedenti.
La cartella storica radice delle attività SVG è questa:
http://www.elegio.it/svg/
Come regola di catalogazione uso l'anno ossia svg2011 svg2012 svg2013 e, naturalmente ora svg2014
Come altro tipo di ordinamento ho iniziato a raccogliere lavori nella cartella
omnia
per cui è possibile trovare materiale anche in :http://www.elegio.it/omnia/sv/
Qui, per ora, per dare una qualche utilità a questa pagina, inserisco alcuni esempi utili per farsi o RIFARSI l'idea di come si fa ad usare la grafica vettoriale SVG. Notare che ho trascritto anche alcuni indirizzi utilissimi per fare o trasformare immagini in SVG.
Attenzione, sono 9 MByte : http://www.elegio.it/deposito/!REC-SVG11-20110816.pdf
Esplora le immagini e scopri dove sono i collegamenti esterni. Clicca dove compare la manina...
Cosa ho scritto qui in SVG
Ovviamente questa pagina vuole dimostrare che anche un imbranato come me puņ fare grafica vettoriale a mano o ... personalizzare immagini SVG realizzate con INKSCAPE (http://inkscape.org/ ) o trasformate in SVG ( http://image.online-convert.com/convert-to-svg ) o DA CHIUNQUE ... si sia preoccupato di scrivere il suo SVG in modo leggibile...E' un po' come era la situazione di chi avesse voluto, 30 anni fa , riutilizzare il Fortran ( non quello moderno : http://www.g95.org ... vedere anche http://www.elegio.it/fortran/ per essere certi di poterne scaricare almeno una versione ... ) scritto da studenti alle prime armi e disordinatissimi e pasticcioni ☺...
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="450" viewBox="0 0 1200 900"> <rect x="1" y="1" rx="12" ry="12" width="1198" height="898" style="fill:gold; stroke-width:4; stroke:red" /> <g font-size="150" fill="red" stroke="blue" stroke-width="2" > <text x="40" y="360">Vuoi fare qualche</text> <text x="40" y="560">prova SVG ?</text> <a xlink:href="http://www.elegio.it/calcolatrice/archivio-utili-201308.html"> <text x="40" y="760">Usa questa pagina!</text></a></g> <a xlink:href="http://www.elegio.it/doc/" > <image x="5" y="5" width="140" height="140" xlink:href="http://www.elegio.it/doc/pi/non-e-fior2ag.jpg"> </image></a> <g transform="rotate(12 1120 70)"> <a xlink:href="http://www.w3.org/TR/2011/REC-SVG11-20110816/" > <image x="1060" y="10" width="120" height="120" xlink:href="http://www.elegio.it/calcolatrice/loghino_animato.gif"> </image> <circle r="15" cx="1120" cy="70" fill="none" stroke="red" stroke-width="2" /> </a></g> </svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="450" viewBox="0 0 1200 900"> <rect x="1" y="1" rx="12" ry="12" width="1198" height="898" style="fill:ivory; stroke-width:4; stroke:red" /> <g fill="blue" stroke="magenta" stroke-width="6" > <polyline fill="none" stroke="blue" stroke-width="10" transform="translate(0,470)" points="50,375 150,375 150,325 250,325 250,375 350,375 350,250 450,250 450,375 550,375 550,175 650,175 650,375 750,375 750,100 850,100 850,375 950,375 950,25 1050,25 1050,375 1150,375" /> <a xlink:href="http://www.elegio.it/calcolatrice/"> <circle r="55" cx="100" cy="100" /> <ellipse rx="30" ry="80" cx="200" cy="200" fill="none" transform="rotate(22.5 200 200)" /> <line x1="350" y1="15" x2="10" y2="250" stroke="red" /> </a> <g transform="rotate(-40 400 500)"> <a xlink:href= "http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataCubicBezierCommands" > <circle r="30" cx="400" cy="500" /> <path transform="translate(-200,-300)" stroke-width="10" d="M600,800 C625,700 725,700 750,800 S875,900 1000,850" fill="none" /></a> </g> <g transform="rotate(20 200 500)"> <polygon fill="red" stroke="blue" stroke-width="10" transform="translate(-150 300)" points="350,75 379,161 469,161 397,215 423,301 350,250 277,301 303,215 231,161 321,161" /> <a xlink:href="http://www.elegio.it/max/"> <circle r="15" cx="200" cy="500" /></a> </g> </g> <g font-size="70" fill="red" stroke="blue" stroke-width="2" > <text x="360" y="100">Un consiglio: sei danaroso ?</text> <a xlink:href="http://it.wikipedia.org/wiki/Mathematica"> <text x="320" y="180">♚ + $ Usa Mathematica ! </text></a> <a xlink:href="http://it.wikipedia.org/wiki/Maxima_%28software%29"> <text x="280" y="260">Ma se sei povero usa Maxima !</text></a></g> </svg>Disegni SVG per creare come background un reticolo di carta millimetrata
Pro memoria di una funzione Javascript utile !
Attenzione : questo testo viene automaticamente soppresso se questo documento viene stampato, dato che lo scopo principale di questo documento è la creazione di fogli di carta a quadretti. Comunque questo è anche un promemoria di come fare a fare scomparire parti volute, come ad esempio pulsanti di pilotaggio dei calcoli effettuati dinamicamente, quando si stampa un documento.
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="648" height="960" viewBox="0 0 3240 4800" onload="creaipath(evt);"> <script type="text/ecmascript"><![CDATA[ function creaipath(evento){ modificopapol('pentagono',1,1500); // alert("Ho finito di creare il path con la modificopapol"); } ]]></script> <path fill="none" stroke="gray" stroke-width="5" d="M 50,25 l 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,0,125,3125,0,0,125,-3125,0,0,125, 3125,0,0,125,-3125,0,3125,0, 0,125,-3125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750,125,0,0,-4750,125,0,0,4750,125,0, 0,-4750,125,0,0,4750 "/> <g id="pentagono"> <path fill="ivory" stroke="navy" stroke-width="10" fill-opacity="0.4" d="M 0,0 L 3240,4800"> <desc>M 1550,2400 m {qq=qa;qp=0;qq},0 ?? Dopo le prime definizioni inizio a tracciare il pentagono !! l {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Secondo punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Terzo punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Quarto punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Quinto punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ??? Ho finito !!! </desc> </path> <a xlink:href= "http://www.elegio.it/calcolatrice/archivio-utili-201308.html#n002"> <path fill="yellow" stroke="magenta" stroke-width="10" fill-opacity="0.4" d="M 0,4800 L 3240,0"> <desc>M 1550,2400 m {qq=qa/2;qp=0;qq},0 ?? Dopo le prime definizioni inizio a tracciare il pentagono !! l {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Secondo punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Terzo punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Quarto punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ? Quinto punto ! {qp++;round(qq*(cos(2*PI*qp/5)-cos(2*PI*(qp-1)/5)))} {round(qq*(sin(2*PI*qp/5)-sin(2*PI*(qp-1)/5)))} ??? Ho finito !!! </desc> </path></a> </g> </svg>La funzione utilizzata è questa:<script type="text/javascript"> // // Funzione Javascript per la generazione dinamica // del disegno di un gruppo di path e di polyline e di polygon // e per consentire l'inserimento di commenti ( che ovviamente vanno // eliminati quando il disegno viene trasferito all'attributo d dei // vari path o all'attributo points dei vari polyline e polygon ). // function modificopapol(gpapolid,ricopio){ // // Elimina i commenti e valuta le stringhe ripulite // dai commenti. Per applicare i risultati delle valutazioni, // ricopio deve essere un numero. // // Utilizza gli argomenti facoltativi come parametri usabili // nel creare i disegni dei path o polyline o polygon ed il // primo argomento facoltativo se non numero, attiva gli "alert" di debug. // var elobj,obj,listapapol=[0,0,0],lista,figlio,j,jj,jel,nn,mm,mf,zz,zf, vzf=[[],[],[]]; // // Parametri vari definibili dinamicamente... // I primi sei qa,qb...qf, sono inizializzabili tramite gli // argomenti facoltativi. // var qa=0,qb=0,qc=0,qd=0,qe=0,qf=0,qg=0,qh=0,qi=0,qj=0; var qk=0,ql=0,qm=0,qn=0,qo=0,qp=0,qq=0,qr=0,qs=0,qt=0; var qu=0,qv=0,qw=0,qx=0,qy=0,qz=0; var qxa=0,qxb=0,qxc=0,qxd=0,qxe=0,qxf=0,qxg=0,qxh=0,qxi=0,qxj=0; var qxk=0,qxl=0,qxm=0,qxn=0,qxo=0,qxp=0,qxq=0,qxr=0,qxs=0,qxt=0; var qxu=0,qxv=0,qxw=0,qxx=0,qxy=0,qxz=0; var qya=0,qyb=0,qyc=0,qyd=0,qye=0,qyf=0,qyg=0,qyh=0,qyi=0,qyj=0; var qyk=0,qyl=0,qym=0,qyn=0,qyo=0,qyp=0,qyq=0,qyr=0,qys=0,qyt=0; var qyu=0,qyv=0,qyw=0,qyx=0,qyy=0,qyz=0; var qza=0,qzb=0,qzc=0,qzd=0,qze=0,qzf=0,qzg=0,qzh=0,qzi=0,qzj=0; var qzk=0,qzl=0,qzm=0,qzn=0,qzo=0,qzp=0,qzq=0,qzr=0,qzs=0,qzt=0; var qzu=0,qzv=0,qzw=0,qzx=0,qzy=0,qzz=0; // // Attivazione del debug e vari tipi di commenti da eliminare // eventualmente... // var inikommento,endkommento,dimkommento; var modifico,xdebug=false,debugk=[["???","!!!"],["??","!!"],["?","!"]]; var nomielementi=[["path","d"],["polyline","points"],["polygon","points"]] // if(arguments.length>2){ // // Se il primo argomento facoltativo risulta // non essere un numero ma un vettore di almeno due // elementi,fa anche stampe di debug. // Se è un vettore prende il primo elemento. // xdebug=isNaN(arguments[2]); if(xdebug)qa=arguments[2][0]; else if(arguments[2].length>0)qa=arguments[2][0]; else qa=arguments[2]; if(arguments.length>3)qb=arguments[3]; if(arguments.length>4)qc=arguments[4]; if(arguments.length>5)qd=arguments[5]; if(arguments.length>6)qe=arguments[6]; if(arguments.length>6)qf=arguments[7]; } elobj=document.getElementById(gpapolid); for(jel=0;nomielementi.length>jel;jel++){ listapapol[jel]=elobj.getElementsByTagName(nomielementi[jel][0]); lista=[]; for(jj=0;listapapol[jel].length>jj;jj++){ obj=listapapol[jel][jj]; vzf[jel][jj]="Non usato"; figlio=obj.firstChild; lista=obj.childNodes; modifico=false; for(j=0;lista.length>j;j++)if(lista[j].nodeName=="desc" ){modifico=true;figlio=lista[j];break;} zz=figlio.textContent; // // Cancella tutti i tipi di commenti // if(modifico){ for(j=0;debugk.length>j;j++){ inikommento=debugk[j][0]; endkommento=debugk[j][1]; dimkommento=endkommento.length; mm=zz.indexOf(inikommento); if(mm>=0){ zf=""; nn=0; while(mm>=0){ mf=zz.indexOf(endkommento,mm); if(mf>=0){zf+=zz.slice(nn,mm); nn=mf+dimkommento; mm=zz.indexOf(inikommento,nn);} else mm=-1; }; zf+=zz.substr(nn); zz=zf;} } // // Fa la valutazione della stringa depurata // dai commenti e con le parti eseguibili // delimitate da parentesi graffe. // nn=0; mm=zz.indexOf("{"); zf=""; while(mm>=0){ mf=zz.indexOf("}",mm); if(mf>=0){zf+=zz.slice(nn,mm); with(Math){zf+=" "+eval(zz.slice(mm+1,mf))}; nn=mf+1; mm=zz.indexOf("{",nn);} else mm=-1; }; zf+=zz.substr(nn); vzf[jel][jj]=zf; // Se è abilitato modifica effettivamente // l'elemento path o polyline o polygon. if(!isNaN(ricopio))obj.setAttribute(nomielementi[jel][1],zf); if(xdebug) alert(nomielementi[jel][0]+"("+jj+" ) Ottiene: \n"+zf); } } } // // Se ricopio vale 1 o vale "fammivedere" ricopia i risultati // in una marca di nome "g_"+gpapolid. // if(ricopio==1 || ricopio=="fammivedere" ){ zz="Scrivo:"; for(jel=0;nomielementi.length>jel;jel++){ for(jj=0;listapapol[jel].length>jj;jj++){ zz+="\u003cbr/\u003e"+nomielementi[jel][0]+" "+jj+ " : "+vzf[jel][jj]+" "; } } obj=document.getElementById("g_"+gpapolid); obj.innerHTML=zz; } return vzf; } // </script>
...Javascript non abilitato...