Into a Path

Transform [matrix, scale, rotate, translate]
//-1){ //alert('matrix'); var t00= GetString(t, 'matrix(', ')'); var tr0=t00.split(','); typeT='matrix' } if(t.indexOf('translate')>-1){ //alert('translate'); var t00= GetString(t, 'translate(', ')'); var tr0=t00.split(','); typeT='translate' } if(t.indexOf('rotate')>-1){ //alert('rotate'); var t00= GetString(t, 'rotate(', ')'); var tr0=t00.split(','); //if(){} //var tr0=t00[]; ; typeT='rotate' } var relativex=0, relativey=0 if(t.indexOf('scale')>-1){ var t00= GetString(t, 'scale(', ')'); var tr0=t00.split(','); typeT='scale' var tr=[parseFloat(tr0[0]), 0, 0, parseFloat(tr0[1]), 0 ,0] relativex=0 relativey=0 } if( typeT=='matrix'){ var tr=[parseFloat(tr0[0]), parseFloat(tr0[1]), parseFloat(tr0[2]), parseFloat(tr0[3]) , parseFloat(tr0[4]) , parseFloat(tr0[5])] } if( typeT=='translate'){ var tr=[1, 0, 0, 1 , parseFloat(tr0[0]) , parseFloat(tr0[1])] } var relRotation=0 if( typeT=='rotate'){ var tr1=deg2rad(parseFloat(tr0[0])) relRotation=parseFloat(tr0[0]) var p2=[0,0] var p1=[0, 0] if(tr0.length >1){ p2=[parseFloat(tr0[1]),parseFloat(tr0[2])] } var tr = [Math.cos(tr1), Math.sin(tr1), -Math.sin(tr1), Math.cos(tr1) , 0 , 0] relativex=p2[0] relativey=p2[1] } if( typeT=='skewx'){ tr0=deg2rad(parseFloat(tr0)) var tr=[1, 0, Math.tan(tr0), 1, 0, 0] } if( typeT=='skewy'){ tr0=deg2rad(parseFloat(tr0)) var tr=[1, Math.tan(tr0), 0, 1, 0, 0] } if( typeT==''){ var tr=[1, 0, 0, 1, 0 ,0] } return tr } function pathtrack(path,tr){ var endcommands = 'Zz'; var endcommand = new RegExp( '[' + endcommands + ']' ); path=path.replace(/^\s+|\s+$/g,""); //alert(path.toSource()) //alert(tr.join('_')) var t='', chain= '' var track=[] , order=0, actual=0, prev=0 for (var i=0;i<=path.length;i++) { t = path.charAt(i) if (t.match(command)){ actual=i chain= path.substring(prev,actual) prev=actual track[order]=[chain.substring(0,1),chain.substring(1)] order++ } if(i==path.length){ if (!t.match(endcommand)){ actual=i chain= path.substring(prev,actual) prev=actual track[order]=[chain.substring(0,1),chain.substring(1)] order++ } } } //////////////// var type=0, xycoord=[], chain='' for (var i=1;i (((' +track[i][1]+')))
' var xycoord1=track[i][1].split('_') // UNIFORM STRING TO ARRAY xycoord for (var m=0; m < xycoord1.length; m++) { if(xycoord1[m].length > 0){ xycoord.push( xycoord1[m] ) //chain+=' '+ xycoord[m]+ ' ' } } //if(track[i][1].indexOf(',')==-1 && xycoord.length > 2 ){ var cont=0, cont1=0 var xycoo=[] // X AND Y GROUPING for (var m=0; m < xycoord.length; m++) { //chain+= '_'+xycoord[m] var brk= false if(type=='a' || type=='A'){ if(m==0 || m==5 || m==7){ xycoo[cont1] = xycoord[cont]+','+xycoord[cont+1] cont1++ cont+=2 brk=true//;continue } if(m==2){ xycoo[cont1] = xycoord[cont+1] cont1++ cont+=1 brk=true//;continue } if(m==3){ xycoo[cont1] = xycoord[cont]+','+xycoord[cont+1] cont1++ cont+=2 brk=true//;continue } }else{ if(m%2==0 && !brk){ xycoo[cont1] = xycoord[cont]+','+xycoord[cont+1] cont1++ cont+=2 } } } xycoord= xycoo //} //IN ARRAY track[i][2]=[] for (var a = 0; a < xycoord.length; a++) { track[i][2].push(xycoord[a]) } } ////////////////// var type=0, xycoord=[];//, chain='' var x=0, y=0, xy=[] , TXY=[] for (var i=1;i ' TXY[i]=[] TXY[i][0]=track[i][0] var cont=1 var cont1=1 for (var a=0;a< track[i][2].length;a++) { if(track[i][2][a].indexOf(',')>-1) { xy=track[i][2][a].split(',') x=parseFloat(xy[0]) y=parseFloat(xy[1]) if(type < 11){ var VXY=$V([x,y,0]); var VT=$V([tr[4],tr[5],0]) var matrT= $M([[ tr[0], tr[1], 0 ],[tr[2] ,tr[3] ,0 ],[ 0, 0, 1]]); var XY = matrT.multiply(VXY); var RXY= XY.add(VT); //TXY[i][cont]=[x,y] TXY[i][cont]=[RXY.elements[0],RXY.elements[1]] //chain+=''+TXY[i][cont].join(',')+' ' }else{ TXY[i][cont]=[x,y] } cont++ }else{ if(track[i][2][a].length>0){ TXY[i][cont] = parseFloat(track[i][2][a]) //chain+=''+TXY[i][cont]+' ' cont++ }else{ } } } //chain+='
' //document.write(chain) } var code = rebuild6(TXY) var codeString = rebuildPath(TXY) return [chain,code,codeString] } function rebuild6a(track){ return track.toSource() } function rebuild6(track){ var type=0, xycoord=[], chain='' var x=0, y=0, xy=[] for (var i=1;i ' for (var a=1;a < track[i].length;a++) { //chain+=track[i] if(track[i][a].length > 1){ if (a%2==0){ chain+='x:' + track[i][a][0]+' y:'+ track[i][a][1] + ' ' } else{ chain+='x:' + track[i][a][0]+' y:'+ track[i][a][1] + ' ' } }else{ chain+=''+ track[i][a] + ' ' } } chain+='
' } return chain } function rebuildPath(track){ var type=0, xycoord=[], chain='' var x=0, y=0, xy=[] for (var i=1;i 1){ if (a%2==0){ chain+='' + track[i][a][0]+','+ track[i][a][1] + ' ' } else{ chain+='' + track[i][a][0]+','+ track[i][a][1] + ' ' } }else{ //alert(track[i][a]) chain+=''+ track[i][a] + ' ' } } chain+='' } return chain } var str="" var collection=[] collection[0]='M 13.637059,16.6015 L 57.704964,19.379419 L 100.25764,11.17193 L 128.66818,67.487934 L 78.791899,82.513953 L 25.885159,80.493648 L 13.637059,16.6015 z' //book //http://www.webtoolkit.info/demo/javascript-trim function trim(str, chars) { return ltrim(rtrim(str, chars), chars); } function ltrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); } function rtrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); } var paper function init(){ str=document.forms[0].inputstr.value paper = Raphael("viewerRaphael", 400, 400 ); var tr=transformF(document.forms[0].transformI.value) //alert(tr.join(' ')) var code= pathtrack(str,tr) document.getElementById('divcode').innerHTML=code[0]+'
'+code[1]+'
'+code[2] var path1shape = paper.path(str).attr({"fill": "none", "stroke": "#000000", "stroke-width": 6, "opacity": 1}) //var path2shape = paper.path(code[2]).attr({"fill": "none", "stroke": "#770000", "stroke-width": 6, "opacity": 1}).translate(50,0) document.forms[0].inputstr.value=code[2] return false } ///////////////////////// function rad2deg(angle){ return (angle/Math.PI) * 180; } function deg2rad(angle){ return angle / 180 * Math.PI; } function GetString(source, start, end){ if(!source || source.indexOf(start) == -1){ return source } else{ var st = source.indexOf(start) + start.length; var en = source.indexOf(end, start); return source.substring(st, en);//trimAll(source.substring(st, en)); } } function ReplaceString(source, ini, text){ if(source.indexOf(ini) > -1 && ini.length > 0){ var st = source.indexOf(ini) + ini.length; var en0 = source.substring(0,source.indexOf(ini)) var en2 = source.substring(st) return en0+text+en2 ;//trimAll(source.substring(st, en)); }else{ return source } } ///////////////////////// // link: http://onlypaths.com/aaopblog/2010/5/18/index.htm // http://jsfiddle.net/fxCrH/ //]]>