view onlypaths/js/svgrenderer_mini.js @ 70:751fb9fd445b laserkard

finally got a lisp server yay
author Robert McIntyre <rlm@mit.edu>
date Tue, 22 Jun 2010 20:15:19 -0400
parents 26c2b3ad21c7
children
line wrap: on
line source
1 /*----------------------------------------------------------------------------
2 SVGRENDERER 1.0
3 SVG Renderer For RichDraw
4 -----------------------------------------------------------------------------
5 Created by Mark Finkle (mark.finkle@gmail.com)
6 Implementation of SVG based renderer.
7 -----------------------------------------------------------------------------
8 */
9 function AbstractRenderer() {
11 };
13 AbstractRenderer.prototype.init = function(elem) {};
14 AbstractRenderer.prototype.bounds = function(shape) { return { x:0, y:0, width:0, height: 0 }; };
16 function SVGRenderer() {
17 this.base = AbstractRenderer;
18 this.svgRoot = null;
19 }
22 SVGRenderer.prototype = new AbstractRenderer;
27 SVGRenderer.prototype.init = function(elem) {
28 this.container = elem;
30 this.container.style.MozUserSelect = 'none';
32 var svgNamespace = 'http://www.w3.org/2000/svg';
34 this.svgRoot = this.container.ownerDocument.createElementNS(svgNamespace, "svg");
35 this.svgRoot.setAttributeNS(null,'viewBox', zoominit);
36 this.svgRoot.setAttributeNS(null,'preserveAspectRatio','none');
37 this.svgRoot.setAttributeNS(null,'space','preserve');
38 this.container.appendChild(this.svgRoot);
39 }
41 SVGRenderer.prototype.view = function(left,top,width,height,viewBox) {
42 if(mode=='preview')
43 {
44 var svgNamespace = 'http://www.w3.org/2000/svg';
45 var tokens = viewBox.split(' ');
46 var prx=100;
47 this.container.style.top =(parseInt(document.getElementById('FRONT').style.height)-height)/2+'px'
49 this.container.style.width = width;//document.getElementById('FRONT').style.width;
50 this.container.style.height =height;//document.getElementById('FRONT').style.height;
51 //alert(this.container.style.width+' '+width)
52 //alert(this.container.style.height+' '+height)
53 this.svgRoot.setAttributeNS(null,'x', left);
54 this.svgRoot.setAttributeNS(null,'y', top);
55 this.svgRoot.setAttributeNS(null,'width', width);
56 this.svgRoot.setAttributeNS(null,'height', height);
58 var x=parseFloat(tokens[0])-prx*4;
59 var y=parseFloat(tokens[1])-prx*2;
60 var w=parseFloat(tokens[2])+prx;
61 var h=parseFloat(tokens[3])+prx;
62 //workspace= x+''+y+''+w+''+h;
63 //workspace= left+''+top+''+width+''+heigth;
64 this.svgRoot.setAttributeNS(null,'viewBox', viewBox);
65 //this.svgRoot.setAttributeNS(null,'viewBox', workspace);
66 //zoominit = workspace;
67 }
68 else
69 {
70 this.container.style.top =0+'px';
72 var tokens = viewBox.split(' ');
73 proporImage= (parseFloat(tokens[2])-parseFloat(tokens[0]))/(parseFloat(tokens[3])-parseFloat(tokens[1]));
74 //alert(proporImage +' '+proporCanvas)
75 //if(marginx<=parseInt(document.getElementById('FRONT').style.width)){marginx=0;}
76 docx=parseFloat(tokens[0]);
77 docy=parseFloat(tokens[1]);
78 docw=parseFloat(tokens[2]);
79 doch=parseFloat(tokens[3]);
81 marginx=(parseInt(document.getElementById('FRONT').style.width)-(parseFloat(tokens[2])-parseFloat(tokens[0])))/2;
82 marginy=(parseInt(document.getElementById('FRONT').style.height)-(parseFloat(tokens[3])-parseFloat(tokens[1])))/2;
83 //if(marginx<=0){marginx=0;}
84 //if(marginy<=0){marginy=0;}
85 var x=(parseFloat(tokens[0])-marginx);
86 var y=(parseFloat(tokens[1])-marginy);
87 var w=(parseFloat(tokens[2])+marginx*2);
88 var h=(parseFloat(tokens[3])+marginy*2);
89 //alert(tokens[3]+' '+tokens[1]+' / '+(parseFloat(tokens[3])-parseFloat(tokens[1]))+' '+parseInt(document.getElementById('FRONT').style.height)+' /'+h+' '+height);
90 //if(h>=parseInt(document.getElementById('FRONT').style.height)){h=parseInt(document.getElementById('FRONT').style.height);}
91 //if(h>=parseInt(document.getElementById('FRONT').style.height)){y=0;h=600;}//parseInt(document.getElementById('FRONT').style.height)*2}
92 zoominit1 = x+' '+y+' '+w+' '+h;
93 //alert(this.container.style.height+' '+height+' '+h+' '+zoominit1)
94 this.svgRoot.setAttributeNS(null,'width', w);
95 this.svgRoot.setAttributeNS(null,'height', h);
96 this.svgRoot.setAttributeNS(null,'viewBox', zoominit1);
97 zoomx=x;
98 zoomy=y;
99 //this.svgRoot.setAttributeNS(null,'viewBox', zoominit;
100 //this.rectCanvas(x,y,w,h,zoominit)
101 //this.rectCanvas(left,top,width,height,viewBox)
103 }
104 }
106 SVGRenderer.prototype.zoomFrame = function(zoom){
107 this.svgRoot.setAttributeNS(null,'viewBox', zoom);
108 }
110 SVGRenderer.prototype.rectDoc = function(viewBox) {
111 var svgNamespace = 'http://www.w3.org/2000/svg';
112 var tokens = viewBox.split(' ');
113 var shape = document.getElementById('rectCanvas');
114 if (shape) {
115 this.remove(shape);
116 }
117 var rect=this.container.ownerDocument.createElementNS(svgNamespace, 'rect');
118 rect.setAttributeNS(null, 'id', 'rectDoc');
119 rect.setAttributeNS(null, 'x', tokens[0] + 'px');
120 rect.setAttributeNS(null, 'y', tokens[1] + 'px');
121 rect.setAttributeNS(null, 'width', tokens[2]+ 'px');
122 rect.setAttributeNS(null, 'height', tokens[3] + 'px');
123 rect.setAttributeNS(null, 'fill', 'none');
124 rect.setAttributeNS(null, 'stroke', '#000000');
125 rect.setAttributeNS(null, 'stroke-width', 1+'px');
126 // this.svgRoot.appendChild(rect)
127 this.svgRoot.appendChild(rect);
129 }
130 SVGRenderer.prototype.rectCanvas = function(docx,docy,docw,doch,viewBox) {
132 var svgNamespace = 'http://www.w3.org/2000/svg';
134 var tokens = zoominit1.split(' ');
135 var shape = document.getElementById('rectCanvas');
136 if (shape) {
137 this.remove(shape);
138 }
140 var rect=this.container.ownerDocument.createElementNS(svgNamespace, 'rect');
141 rect.setAttributeNS(null, 'id', 'rectBackground');
142 rect.setAttributeNS(null, 'x', tokens[0] + 'px');
143 rect.setAttributeNS(null, 'y', tokens[1] + 'px');
144 rect.setAttributeNS(null, 'width', tokens[2] + 'px');
145 rect.setAttributeNS(null, 'height', tokens[3] + 'px');
146 rect.setAttributeNS(null, 'fill', '#666666');
147 rect.setAttributeNS(null, 'stroke', 'none');
148 //this.svgRoot.appendChild(rect)
149 this.svgRoot.insertBefore( rect, this.svgRoot.firstChild );
151 //this.index('rectBackground',0);
153 /* var shape = document.getElementById('rectOverCanvas');
154 if (shape) {
155 this.remove(shape);
156 }
157 var rect=this.container.ownerDocument.createElementNS(svgNamespace, 'rect');
158 rect.setAttributeNS(null, 'id', 'rectOverCanvas');
159 rect.setAttributeNS(null, 'x', docx + 'px');
160 rect.setAttributeNS(null, 'y', docy + 'px');
161 rect.setAttributeNS(null, 'width', docw + 'px');
162 rect.setAttributeNS(null, 'height', doch + 'px');
163 rect.setAttributeNS(null, 'fill', 'none');
164 rect.setAttributeNS(null, 'stroke', '#000000');
165 rect.setAttributeNS(null, 'stroke-width', 1+'px');
166 // this.svgRoot.appendChild(rect)
167 this.svgRoot.insertBefore( rect, this.svgRoot.lastChild );
168 */
169 }
171 SVGRenderer.prototype.removeAll = function()
172 {
173 while( this.svgRoot.hasChildNodes () )
174 {
175 this.svgRoot.removeChild( this.svgRoot.firstChild );
176 }
177 }
179 SVGRenderer.prototype.create = function(shape, fillColor, lineColor, fillOpac, lineOpac, lineWidth, left, top, width, height, textMessaje, textSize, textFamily, imageHref, points, transform, parent) {
180 var svgNamespace = 'http://www.w3.org/2000/svg';
181 var xlinkNS="http://www.w3.org/1999/xlink";
183 var svg;
185 if (shape == 'rect') {
186 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'rect');
187 svg.setAttributeNS(null, 'x', left + 'px');
188 svg.setAttributeNS(null, 'y', top + 'px');
189 svg.setAttributeNS(null, 'width', width + 'px');
190 svg.setAttributeNS(null, 'height', height + 'px');
191 svg.style.position = 'absolute';
192 }
193 else if (shape == 'ellipse' || shape == 'circle') {
195 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'ellipse');
196 svg.setAttributeNS(null, 'cx', (left + width / 2) + 'px');
197 svg.setAttributeNS(null, 'cy', (top + height / 2) + 'px');
198 if(shape == 'circle'){
199 svg.setAttributeNS(null, 'rx', (width / 2) + 'px');
200 svg.setAttributeNS(null, 'ry', (width / 2) + 'px');
201 }else{
202 svg.setAttributeNS(null, 'rx', (width / 2) + 'px');
203 svg.setAttributeNS(null, 'ry', (height / 2) + 'px');
205 }
206 svg.style.position = 'absolute';
207 }
208 else if (shape == 'roundrect') {
209 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'rect');
210 svg.setAttributeNS(null, 'x', left + 'px');
211 svg.setAttributeNS(null, 'y', top + 'px');
213 var percent = width*20/100;
214 if(width<height)
215 var percent = width*20/100;
216 else
217 var percent = height*20/100;
219 svg.setAttributeNS(null, 'rx', percent+'px');
220 svg.setAttributeNS(null, 'ry', percent+'px');
221 svg.setAttributeNS(null, 'width', width + 'px');
222 svg.setAttributeNS(null, 'height', height + 'px');
223 svg.style.position = 'absolute';
224 }
225 else if (shape == 'line') {
226 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'line');
227 svg.setAttributeNS(null, 'x1', left + 'px');
228 svg.setAttributeNS(null, 'y1', top + 'px');
229 svg.setAttributeNS(null, 'x2', left + width + 'px');
230 svg.setAttributeNS(null, 'y2', top + height + 'px');
231 svg.style.position = 'absolute';
232 }
233 else if (shape == 'polyline') {
234 var xcenterpoly=xpArray;
235 var ycenterpoly=ypArray;
236 var thispath=''+xpArray[1]+','+ypArray[1];
237 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'polyline');
238 svg.setAttributeNS(null, 'points', points);
239 svg.style.position = 'absolute';
240 }
241 else if (shape == 'path')
242 {
243 var k = (Math.sqrt(2)-1)*4/3;
244 var circle="M 0,1 L 0.552,1 1,0.552 1,0 1,-0.552 0.552,-1 0,-1 -0.552,-1 -1,-0.552 -1,0 -1,0.552 -0.552,1 0,1z" // 4th
245 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'path');
246 svg.setAttributeNS(null, 'd', points);
247 svg.style.position = 'absolute';
248 }
249 else if (shape == 'controlpath')
250 {
251 var point='M '+left+','+top+' L '+(left+1)+','+(top+1)+'z' // 4th
252 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'path');
253 svg.setAttributeNS(null, 'd', point);
254 svg.setAttributeNS(null,'transform', "translate(0,0)");
255 svg.style.position = 'absolute';
256 }
257 else if (shape == 'text') {
258 var data = this.container.ownerDocument.createTextNode(textMessaje);
259 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'text');
260 svg.setAttributeNS(null, 'x', parseFloat(left) + 'px');
261 svg.setAttributeNS(null, 'y', parseFloat(top) + 'px');
262 svg.setAttributeNS(null, 'font-family', textFamily );
263 svg.setAttributeNS(null, 'font-size', parseFloat(textSize));
264 svg.setAttributeNS(null, 'text-anchor','middle');
266 svg.style.position = 'absolute';
267 svg.appendChild(data);
268 }
269 else if (shape == 'clipPath') {
270 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'clipPath');
273 }
274 else if (shape == 'linearGradient') {
275 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'linearGradient');
276 svg.setAttributeNS(null, 'x1', parseFloat(left));
277 svg.setAttributeNS(null, 'y1', parseFloat(top ));
278 svg.setAttributeNS(null, 'x2', parseFloat(width));
279 svg.setAttributeNS(null, 'y2', parseFloat(height));
281 }
282 else if (shape == 'stop') {
283 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'stop');
284 svg.setAttributeNS(null, 'stop-color', fillColor);
285 svg.setAttributeNS(null, 'stop-opacity', parseFloat(fillOpac));
286 svg.setAttributeNS(null, 'offset', parseFloat(lineOpac));
288 }
289 else if (shape == 'group') {
290 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'g');
291 svg.setAttributeNS(null, 'x', left + 'px');
292 svg.setAttributeNS(null, 'y', top + 'px');
293 svg.setAttributeNS(null, 'width', width + 'px');
294 svg.setAttributeNS(null, 'height', height + 'px');
295 svg.setAttributeNS(null, 'fill-opacity', parseFloat(fillOpac));
296 svg.setAttributeNS(null, 'fill', fillColor);
297 }
298 else if (shape == 'image') {
299 var svg = this.container.ownerDocument.createElementNS(svgNamespace, 'image');
300 svg.setAttributeNS(xlinkNS,'href', imageHref);
301 svg.setAttributeNS(null, 'x', left + 'px');
302 svg.setAttributeNS(null, 'y', top + 'px');
303 svg.setAttributeNS(null, 'width', width + 'px');
304 svg.setAttributeNS(null, 'height', height + 'px');
305 svg.setAttributeNS(null, 'opacity', parseFloat(fillOpac));
306 svg.setAttributeNS(null, 'preserveAspectRatio','none');//xMinYMin slice
307 }
309 if(shape == 'zoom')
310 {
312 }else
313 {
314 if(transform!='')
315 {
316 svg.setAttributeNS(null, 'transform', transform);
317 }
318 if(shape != 'image' || shape != 'group' || shape != 'stop' )
320 {
321 if (lineColor.length == 0){ lineColor = 'none';}
322 if (fillColor.length == 0){ fillColor = 'none';}
323 svg.setAttributeNS(null, 'fill', fillColor);
324 svg.setAttributeNS(null, 'stroke', lineColor);
325 svg.setAttributeNS(null, 'stroke-width', parseFloat(lineWidth));
326 svg.setAttributeNS(null, 'fill-opacity', parseFloat(fillOpac));
327 svg.setAttributeNS(null, 'stroke-opacity',parseFloat(lineOpac));
328 svg.setAttributeNS(null, 'stroke-linejoin','round')
330 }
333 if(parent==''){
334 this.svgRoot.appendChild(svg);
335 }else{
336 if(document.getElementById(parent)){
337 var parentShape = document.getElementById(parent);
338 parentShape.appendChild(svg);
339 }
340 }
342 return svg;
344 }
346 };
348 SVGRenderer.prototype.zoomFrame = function(zoom){
349 this.svgRoot.setAttributeNS(null,'viewBox', zoom);
352 }
353 SVGRenderer.prototype.zoom = function(clicx,clicy){
354 /*
355 function(direction, amount) {
356 var viewBox = this.rootNode.getAttribute('viewBox');
357 var viewVals = viewBox.split(' ');
358 if (amount == null) {
359 amount = SVGElement.panFactor;
360 }
361 switch (direction) {
362 case 'left':
363 amount = 0 - amount;
364 // intentionally fall through
365 case 'right':
366 var currentPosition = parseFloat(viewVals[0]);
367 currentPosition += amount;
368 viewVals[0] = currentPosition;
369 break;
370 case 'up':
371 amount = 0 - amount;
372 // intentionally fall through
373 case 'down':
374 var currentPosition = parseFloat(viewVals[1]);
375 currentPosition += amount;
376 viewVals[1] = currentPosition;
377 break;
378 case 'origin':
379 // reset everything to initial values
380 viewVals[0] = 0;
381 viewVals[1] = 0;
382 this.rootNode.currentScale = 1;
383 this.rootNode.currentTranslate.x = 0;
384 this.rootNode.currentTranslate.y = 0;
385 break;
386 }
387 this.rootNode.setAttribute('viewBox', viewVals.join(' '));
388 */
392 //canvasWidth
393 //canvasheight
394 if(zoommode=='frame')
395 {
396 var viewBox = this.svgRoot.getAttributeNS(null,'viewBox');
398 //alert(viewBox);
400 var viewBox = zoominit;
401 var viewVals = viewBox.split(' ');
403 zoomx = parseFloat(viewVals[0]);
404 zoomy = parseFloat(viewVals[1]);
405 zoomw = parseFloat(viewVals[2]);
406 zoomh = parseFloat(viewVals[3]);
407 proporDiagonal=1;
408 }
409 else
410 {
412 var viewBox = this.svgRoot.getAttributeNS(null,'viewBox');
414 var viewVals = viewBox.split(' ');
415 var prevX = parseFloat(viewVals[0]);
416 var prevY = parseFloat(viewVals[1]);
417 var prevW = parseFloat(viewVals[2]);
418 var prevH = parseFloat(viewVals[3]);
419 var prevWidth=prevW-prevX;
420 var prevHeight=prevH-prevY;
422 }
424 if(zoommode=='more')
425 {
426 fieldViewx=prevW*0.95;
427 fieldViewy=prevH*0.95;
428 diagonalFrame=dist2p(0,0,fieldViewx,fieldViewy);
429 //diagonalAngle=getAngle(fieldViewx,fieldViewy);
430 zoomx=(diagonalMidx+(diagonalFrame/2)*Math.cos(diagonalAngle+Math.PI));//-(fieldViewx/8);//-(canvasW/2)docx-fieldViewx;
431 zoomy=(diagonalMidy+(diagonalFrame/2)*Math.sin(diagonalAngle+Math.PI));//-(fieldViewy/8);//-(canvasH/2);//docy-fieldViewy;
432 zoomw=prevW*0.95;
433 zoomh=prevH*0.95;
436 proporDiagonal=diagonalFrame/diagonalinit;
437 //alert(proporDiagonal);
438 }
439 if(zoommode=='minus')
440 {
441 fieldViewx=prevW*1.05;
442 fieldViewy=prevH*1.05;
443 diagonalFrame=dist2p(0,0,fieldViewx,fieldViewy);
444 //diagonalAngle=getAngle(fieldViewx,fieldViewy);
445 zoomx=(diagonalMidx+(diagonalFrame/2)*Math.cos(diagonalAngle+Math.PI));//-(fieldViewx/8);//-(canvasW/2)docx-fieldViewx;
446 zoomy=(diagonalMidy+(diagonalFrame/2)*Math.sin(diagonalAngle+Math.PI));//-(fieldViewy/8);//-(canvasH/2);//docy-fieldViewy;
447 zoomw=prevW*1.05;
448 zoomh=prevH*1.05;
449 proporDiagonal=diagonalFrame/diagonalinit;
451 }
452 if(zoommode=='window')
453 {
455 zoomx=c.mouseDownX;
456 zoomy=c.mouseDownY;
457 var dF=dist2p(c.mouseDownX,c.mouseDownY,clicx,clicy);
458 //var mid=pmd2pb(c.clicX,c.clicX,clicx,clicy,0.5)
459 zoomw=dF*proporDoc;//(mid[1]+(dF/2)*Math.cos(diagonalAngle+Math.PI));
460 zoomh=dF;//(mid[2]+(dF/2)*Math.sin(diagonalAngle+Math.PI));
463 }
464 var direction=0;
465 if(zoommode=='hand')
466 {
467 direction=ang2v(clicx,clicy,centerZoomx,centerZoomy);
468 var distance=dist2p(clicx,clicy,centerZoomx,centerZoomy);
469 var left = prevX+distance*Math.cos(direction);
470 var top = prevY+distance*Math.sin(direction);
471 makeWorkSite(prevH,left,top);
472 }
473 direction=direction*180/Math.PI;
474 //this.svgRoot.currentScale = zoomscale+0.1;
475 //this.svgRoot.currentTranslate.x = 0;
476 //this.svgRoot.currentTranslate.y = 0;
477 //var resultPosx=clicx-((prevscalex-posx)/2);//-Math.abs(posx+clicx)
478 //var resultPosy=clicy-((prevscalex-posy)/2);//-Math.abs(posy+clicy)
479 //var resultPosx=-Math.abs(posx+clicx);
480 //var resultPosy=-Math.abs(posy+clicy);
482 this.svgRoot.setAttributeNS(null,'viewBox', (zoomx)+' '+(zoomy)+' '+zoomw+' '+zoomh+'');
483 var viewBox = this.svgRoot.getAttributeNS(null,'viewBox');
484 //$('status').innerHTML=' '+viewBox;
485 //alert(direction+'__'+prevZoomCenterx+' '+prevZoomCentery+' '+centerZoomx+' '+centerZoomy);
486 }
488 //this.mode, this.fillColor, this.lineColor, this.fillOpac, this.lineOpac, this.lineWidth, this.mouseDownX, this.mouseDownY, 1, 1,'',''
489 SVGRenderer.prototype.datacreate = function(fillColor, lineColor, fillOpac, lineOpac, lineWidth, left, top, width, height, textMessaje, textSize, textFamily, imageHref, transform) {
490 var svgNamespace = 'http://www.w3.org/2000/svg';
491 var svg;
492 svg = this.container.ownerDocument.createElementNS(svgNamespace, 'path');
493 svg.setAttributeNS(null, 'd', data);
494 svg.setAttributeNS(null,'transform', "translate(0,0)");
495 svg.style.position = 'absolute';
496 if (fillColor.length == 0){fillColor = 'none';}
497 svg.setAttributeNS(null, 'fill', fillColor);
498 if (lineColor.length == 0){lineColor = 'none';}
499 svg.setAttributeNS(null, 'stroke', lineColor);
500 svg.setAttributeNS(null, 'stroke-width', lineWidth);
501 this.svgRoot.appendChild(svg);
502 return svg;
503 };
505 SVGRenderer.prototype.index = function(shape,order) {
507 if(order==-1)
508 {
509 this.svgRoot.appendChild( shape );
510 }
511 if(order==0){
513 this.svgRoot.insertBefore( shape, shape.parentNode.firstChild );
514 }
516 if(order==1 || order==2)
517 {
518 var id=shape.getAttributeNS(null, 'id');
519 //alert(id);
522 var numNodes=this.svgRoot.childNodes.length;
523 //alert(numNodes);
525 var num=0;
526 for(var i = 1; i < numNodes; i++)
527 {
529 var etiq=this.svgRoot.childNodes[i].getAttributeNS(null, 'id');
530 if (etiq==id)
531 {
532 num=i;
534 }
535 }
536 //alert(num);
537 if(order==1)
538 {
539 if((num-1)>=-1)
540 {
541 this.svgRoot.insertBefore( shape, this.svgRoot.childNodes[num-1]);
542 }
543 }
544 if(order==2){
545 if((num+1)<numNodes)
546 {
547 this.svgRoot.insertBefore( shape, this.svgRoot.childNodes[num+2]);
548 }
549 }
551 }
554 /*var contshapes = shape.parentNode.childNodes.length;
555 var elem1 = shape;//this.svgRoot.childNodes[1];
556 var elem2 = shape.parentNode.childNodes[parseInt(contshapes-9)];
557 var tmp = elem1.cloneNode( true );
558 shape.parentNode.replaceChild( tmp, elem2 );
559 shape.parentNode.replaceChild( elem2, elem1 );
560 */
561 //alert(elem2+' '+ elem1 )
562 //return elem2;
564 }
565 SVGRenderer.prototype.remove = function(shape) {
566 //shape.parentNode.removeChild(shape);
567 this.svgRoot.removeChild(shape);
568 }
571 SVGRenderer.prototype.copy = function(shape)
572 {
573 var svg;
574 svg =shape.cloneNode(false);
575 if(shape.tagName=="text"){
576 var text=shape.textContent ;
577 svg.textContent=text;
578 }
579 //svg.setAttributeNS(null, 'fill', "#aa00aa");
580 return svg;
581 };
584 SVGRenderer.prototype.paste = function(clipboard,left,top)
585 {
586 //var svg;
587 //svg =shape;
588 //clipboard.setAttributeNS(null, 'fill', "#0000aa");
589 //clipboard.setAttributeNS(null,'transform', "translate("+left+","+top+")");
590 this.svgRoot.appendChild(clipboard);
591 return clipboard;
592 };
595 SVGRenderer.prototype.duplicate = function(shape)
596 {
597 var svg;
598 svg =shape.cloneNode(false);
599 //svg.setAttributeNS(null, 'fill', "#aa00aa");
600 this.svgRoot.appendChild(svg);
601 return svg;
602 };
604 SVGRenderer.prototype.undo = function()
605 {
606 this.svgRoot.removeChild( this.svgRoot.lastChild );
607 };
609 /*
610 function zSwap(parent, elem1, elem2)
611 {
612 var tmp = elem1.cloneNode( true );
613 parent.replaceChild( tmp, elem2 );
614 parent.replaceChild( elem2, elem1 );
615 }
617 SVGRenderer.prototype.moveToTop( svgNode )
618 {
619 this.svgRoot.appendChild( svgNode );
620 }
623 SVGRenderer.prototype.moveToBottom( svgNode )
624 {
625 this.svgRoot.insertBefore( svgNode, svgNode.parentNode.firstChild );
626 }
628 */
634 var xshe=0; //bad
635 var yshe=0;
636 var isArc=false;
637 var contArc=0;
638 SVGRenderer.prototype.move = function(shape, left, top,fromX,fromY) {
639 //typeTransform='Translate';
641 var box = shape.getBBox();
642 var angle=0;
643 var dist=0;
644 var rotated=false;
646 if (shape.hasAttributeNS(null,'transform')) {
647 var tran=shape.getAttributeNS(null, 'transform');
648 var rot='';
649 var scl='';
650 var angle=0;
651 if(tran.indexOf('rotate')!=-1)
652 {
653 if(tran.indexOf('scale')!=-1)
654 {
655 var chain2=tran.split('),');
656 rot= GetString(chain2[0], 'rotate(', ',');
657 angle=parseFloat(rot);
658 scl= GetString(tran, 'scale(', ')');
659 }else{
660 var chain2=tran.split(',');
661 var rot0=chain2[0].split('rotate(');
662 rot='good';
663 angle=parseFloat(rot0[1]);
664 scl='';
666 }
667 }else{
668 if(tran.indexOf('scale')!=-1)
669 {
670 scl= GetString(tran, 'scale(', ')');
671 angle=0;
672 }else{
673 //
674 }
675 }
677 //var h=shape.getAttributeNS(null, SVG_TRANSFORM_ROTATE );
679 var centerx=box.x+(box.width/2);
680 var centery=box.y+(box.height/2);
681 var cadRot='';
682 var cadScale='';
683 var union='';
684 if(angle!=0)
685 {
686 cadRot='rotate('+(angle)+', '+centerx+', '+centery+')';
687 }
688 if(scl.length>2)
689 {
690 if(rot.length>2){ union=',';}
691 cadScale='scale('+scl+')';
692 if(scl.indexOf('-')!=-1)
693 {
694 var dist= dist2p(left,top,box.x,box.y);
696 left=left;
697 }
698 if(scl.indexOf(',-')!=-1 || scl.indexOf(', -')!=-1 )
699 {
700 //top=eval('-'+top);
701 var dist= dist2p(left,top,box.x,box.y);
702 top=top;
703 }
705 }
706 //shape.setAttributeNS(null,'transform', 'rotate('+(angle)+', '+centerx+', '+centery+')');
707 shape.setAttributeNS(null,'transform', cadRot+union+cadScale);
709 //var angleRad=angle*Math.PI/180;
713 //dist=dist2p(x,y,left, top) ;
714 rotated=true;
716 }
718 contmove++;
720 if (shape.tagName == 'rect'){
721 /* var dudy= shape.parentNode;
722 if(dudy.tagName=='g'){
723 document.forms[0].code.value= 'this g ============ ';
724 shape.setAttributeNS(null, 'x', left);
725 shape.setAttributeNS(null, 'y', top);
727 dudy.setAttributeNS(null, 'x', left);
728 dudy.setAttributeNS(null, 'y', top);
729 dudy.childNodes[0].setAttributeNS(null, 'x', left);
730 dudy.childNodes[0].setAttributeNS(null, 'y', top);
732 }else{
733 //document.forms[0].code.value= box.x+' '+box.y+' formX Y'+ fromX+'_'+fromY+' left '+left+'_'+top+'==============';
734 //document.forms[0].code.value+= tran+' rot '+ angle+'_'+x+'_'+y+' dist '+dist;
735 if(rotated){
736 //shape.setAttributeNS(null, 'x', box.x*Math.cos(angleRad)) ;
737 //shape.setAttributeNS(null, 'y', box.y*Math.sin(angleRad)) ;
738 shape.setAttributeNS(null, 'x', left);
739 shape.setAttributeNS(null, 'y', top);
742 }else{
743 */
744 shape.setAttributeNS(null, 'x', left);
745 shape.setAttributeNS(null, 'y', top);
746 //}
747 //$('option_rect_trx').value= left;
748 //$('option_rect_try').value= top;
749 // var h=shape.getAttributeNS(null, 'height');
750 //var w=shape.getAttributeNS(null, 'width');
751 //document.forms[0].code.value= h+' '+w;
752 //}
753 }
754 if (shape.tagName == 'g')
755 {
756 //this.editor.log(shape.tagName+' ==============');
758 shape.setAttributeNS(null, 'x', left);
759 shape.setAttributeNS(null, 'y', top);
760 shape.childNodes[0].setAttributeNS(null, 'x', left + 'px');
761 shape.childNodes[0].setAttributeNS(null, 'y', top + 'px');
762 shape.childNodes[1].setAttributeNS(null, 'x', left + 'px');
763 shape.childNodes[1].setAttributeNS(null, 'y', top + 'px');
765 }
766 if (shape.tagName == 'image'){
767 shape.setAttributeNS(null, 'x',left + 'px');
768 shape.setAttributeNS(null, 'y', top + 'px');
769 //$('option_img_trx').value= left;
770 //$('option_img_try').value= top;
771 var h=shape.getAttributeNS(null, 'height');
772 var w=shape.getAttributeNS(null, 'width');
773 // this.editor.log( h+' '+w);
774 }
775 if (shape.tagName == 'text'){
776 var size=parseFloat(shape.getAttributeNS(null, 'font-size'));
777 //$('code').value=size;
778 shape.setAttributeNS(null, 'x', left + 'px');
779 shape.setAttributeNS(null, 'y', parseFloat(top+size) + 'px');
780 //$('option_text_trx').value= left;
781 //$('option_text_try').value= top;
783 }
784 if (shape.tagName == 'line'){
785 var deltaX = shape.getBBox().width;
786 var deltaY = shape.getBBox().height;
787 shape.setAttributeNS(null, 'x1', left + 'px');
788 shape.setAttributeNS(null, 'y1', top + 'px');
790 shape.setAttributeNS(null, 'x2', left + deltaX + 'px');
791 shape.setAttributeNS(null, 'y2', top + deltaY + 'px');
792 //$('option_line_trx').value= left;
793 //$('option_line_try').value= top;
795 }
796 if (shape.tagName == 'ellipse'){
797 var putx=left + (shape.getBBox().width / 2)
798 var puty= top + (shape.getBBox().height / 2)
799 shape.setAttributeNS(null, 'cx', putx + 'px');
800 shape.setAttributeNS(null, 'cy', puty + 'px');
801 //$('option_ellipse_trx').value= putx;
802 //$('option_ellipse_try').value= puty;
804 }
805 if (shape.tagName == 'path' || shape.tagName == 'polyline' ) {
807 if(contmove==1){
808 xshe=left;
809 yshe=top;
810 }
811 var path=shape.getAttributeNS(null, 'd');
812 path=path.replace(/, /g, ',');
813 path=path.replace(/ ,/g, ',');
814 var ps =path.split(" ")
815 var pcc = "";
816 var point =ps[0].split(",");
819 var num0= parseFloat(point[0].substring(1));
820 var num1= parseFloat(point[1]);
822 var ang= ang2v(box.x,box.y,left,top) ;
823 var angle = Math.round((ang/Math.PI* 2)* 360);
824 var angx = Math.cos(ang);
825 var angy = Math.sin(ang);
826 var dist= dist2p(left,top,box.x,box.y);
827 var xinc=dist*angx;
828 var yinc=dist*angy;
829 var re = /^[-]?\d*\.?\d*$/;
830 for(var i = 0; i < ps.length; i++)
831 {
832 if(ps[i].indexOf(',')>0){
834 var point =ps[i].split(",");
835 var char1=point[0].substring(0,1);
836 if(char1=='A' || char1=='a'){isArc=true; contArc=0;}
837 if(isArc==true){contArc++}
838 if(contArc==4){contArc=0; isArc=false}
840 //if (isNaN(valnum))
841 if (!char1.match(re))
842 {
843 var num0= parseFloat(point[0].substring(1));
844 var text=char1;
845 }else{
846 if(isArc==true && contArc==2 )
847 {
848 var num0= point[0];
849 }else{
850 var num0= parseFloat(point[0]);
851 }
852 var text='';
854 }
857 if(isArc==true && contArc==2)
858 {
859 point[1]= point[1].toString() ;
860 }
861 else
862 {
864 num0+=xinc;
865 point[1]= parseFloat(point[1]);
866 point[1]+=yinc;
868 }
869 var cx=num0;
871 var cy=point[1];
872 pcc+=text+cx+','+cy+' ';
873 }else{
874 pcc+=ps[i]+' ';
875 }
876 }
878 shape.setAttributeNS(null,'d', pcc);
880 }
883 //$('status').innerHTML=typeTransform+': '+left+' '+top;
884 //$('option_select_trx').value= left;
885 //$('option_select_try').value= top;
889 };
893 SVGRenderer.prototype.track = function(shape) {
894 // TODO
895 };
898 SVGRenderer.prototype.clic = function(shape) {
899 var end='';
900 if(data_path_close==true){end='z';}
901 var maxcont=setPoints.length;
902 var thispath='M'+setPoints[0]+' ';
903 $('someinfo').value=maxcont;
905 for(var conta=1;conta< maxcont;conta++){
906 thispath+='L'+setPoints[conta]+' ';
907 }
908 //var pointshape=shape.getAttributeNS(null,"d");
909 //shape.setAttributeNS(null,'d',thispath+end);
910 var path=thispath+end;
912 shape.setAttributeNS(null,'d',path);
913 $('control_codebase').value=path;
915 }
918 SVGRenderer.prototype.resize = function(shape, fromX, fromY, toX, toY) {
919 var deltaX = toX - fromX;
920 var deltaY = toY - fromY;
922 /* if (lineColor.length == 0){lineColor = 'none';}
923 if (fillColor.length == 0){fillColor = 'none';}
924 shape.style.fill = fillColor;
925 shape.style.stroke = lineColor;
926 shape.style.strokeWidth = lineWidth;
927 shape.style.fillOpacity = fillOpac;
928 shape.style.strokOpacity = lineOpac;
929 */
930 if (shape.tagName == 'rect' )
931 {
934 if (deltaX < 0) {
935 shape.setAttributeNS(null, 'x', toX + 'px');
936 shape.setAttributeNS(null, 'width', -deltaX + 'px');
937 }
938 else
939 {
940 shape.setAttributeNS(null, 'width', deltaX + 'px');
941 }
943 if (deltaY < 0)
944 {
945 shape.setAttributeNS(null, 'y', toY + 'px');
946 shape.setAttributeNS(null, 'height', -deltaY + 'px');
947 }
948 else
949 {
950 shape.setAttributeNS(null, 'height', deltaY + 'px');
951 }
952 /*shape.style.fill = fillColor;
953 shape.style.stroke = lineColor;
954 shape.style.strokeWidth = lineWidth;
955 shape.style.fillOpacity = fillOpac;
956 shape.style.strokOpacity = lineOpac;
957 */
959 }
961 /* if ( shape.tagName == 'simage' )
962 {
963 var img=shape.firstChild;//nodeName;//nodparseFloatue;//nodes.item(0);
964 //alert(img);
965 if (deltaX < 0) {
966 shape.setAttributeNS(null, 'x', parseFloat(toX) + 'px');
967 shape.setAttributeNS(null, 'width', parseFloat(-deltaX) + 'px');
969 }
970 else
971 {
972 shape.setAttributeNS(null, 'width', parseFloat(deltaX) + 'px');
973 }
975 if (deltaY < 0)
976 {
977 shape.setAttributeNS(null, 'y', parseFloat(toY) + 'px');
978 shape.setAttributeNS(null, 'height', parseFloat(-deltaY) + 'px');
979 }
980 else
981 {
982 shape.setAttributeNS(null, 'height', parseFloat(deltaY) + 'px');
983 }
984 var h=shape.getAttributeNS(null, 'height');
985 var w=shape.getAttributeNS(null, 'width');
986 document.forms[0].code.value= h+' '+w;
990 }*/
991 if (shape.tagName == 'g' || shape.tagName == 'image')
992 {
995 if (deltaX < 0)
996 {
997 shape.setAttributeNS(null, 'x', parseFloat(toX) + 'px' );
998 shape.setAttributeNS(null, 'width', parseFloat(-deltaX) + 'px');
1002 else
1004 shape.setAttributeNS(null, 'width', parseFloat(deltaX) + 'px');
1007 if (deltaY < 0)
1009 shape.setAttributeNS(null, 'y', parseFloat(toY) + 'px');
1010 shape.setAttributeNS(null, 'height', parseFloat(-deltaY) + 'px' );
1012 else
1014 shape.setAttributeNS(null, 'height', parseFloat(deltaY) + 'px');
1019 if (shape.tagName == 'ellipse') {
1020 if (deltaX < 0) {
1021 shape.setAttributeNS(null, 'cx', (fromX + deltaX / 2) + 'px');
1022 shape.setAttributeNS(null, 'rx', (-deltaX / 2) + 'px');
1024 else {
1025 shape.setAttributeNS(null, 'cx', (fromX + deltaX / 2) + 'px');
1026 shape.setAttributeNS(null, 'rx', (deltaX / 2) + 'px');
1029 if (deltaY < 0) {
1030 shape.setAttributeNS(null, 'cy', (fromY + deltaY / 2) + 'px');
1031 shape.setAttributeNS(null, 'ry', (-deltaY / 2) + 'px');
1033 else {
1034 shape.setAttributeNS(null, 'cy', (fromY + deltaY / 2) + 'px');
1035 shape.setAttributeNS(null, 'ry', (deltaY / 2) + 'px');
1038 if (shape.tagName == 'line') {
1039 shape.setAttributeNS(null, 'x2', toX);
1040 shape.setAttributeNS(null, 'y2', toY);
1042 if (shape.tagName == 'polyline') {
1044 xpArray.push(toX);
1045 ypArray.push(toY);
1046 var thispath=''+xpArray[1]+','+ypArray[1];
1047 var thispath1='';
1048 var thispath2='';
1049 var maxcont=xpArray.length;
1051 for(var conta=2;conta< maxcont;conta++){
1052 thispath1+=' '+xpArray[conta]+' '+ypArray[conta];
1053 thispath2+=' '+xpArray[conta]+', '+ypArray[conta];
1058 shape.setAttributeNS(null,'points',thispath+thispath1);
1063 if (shape.tagName == 'path') {
1065 if (selectmode == 'controlpath')
1067 var end='';
1068 if(data_path_close==true){end='z';}
1070 var thispath='M'+setPoints[0]+' ';
1071 var maxcont=setPoints.length;
1073 for(var conta=1;conta< maxcont;conta++){
1074 thispath+='L'+setPoints[conta]+' ';
1078 var path=thispath+'L'+toX+','+toY+end;
1079 //var pointshape=shape.getAttributeNS(null,"d");
1080 shape.setAttributeNS(null,'d',path);
1081 document.forms[0].control_codebase.value=path;
1083 else
1086 xpArray.push(toX);
1087 ypArray.push(toY);
1089 var thispath=''+xpArray[1]+','+ypArray[1];
1090 var thispath1='';
1091 var thispath2='';
1092 var maxcont=xpArray.length;
1094 for(var conta=2;conta< maxcont;conta++){
1095 //thispath1+=' '+xpArray[conta]+' '+ypArray[conta];
1096 thispath2+=' '+xpArray[conta]+','+ypArray[conta];
1097 //if((conta+2)%3==0){thispath2+=' C';}
1099 var end='';
1100 if(data_path_close==true){end='z';}
1101 shape.setAttributeNS(null,'d','M '+thispath+ ' L'+thispath2+end);
1105 /*
1107 var pointshape=shape.getAttributeNS(null,"points");
1108 var thispoint=' '+toX+' '+toY;
1109 $('status').innerHTML =pointshape;
1110 shape.setAttributeNS(null,'points',pointshape+thispoint)
1111 shape.setAttributeNS(null, 'stroke-width', "25");
1112 shape.setAttributeNS(null, 'fill', "#FFFF00");
1114 //shape.points.push(toX);
1115 //shape.points.push(toY);
1116 //shape.setAttribute("points",pointshape+);
1117 // var maxcont=xpArray.length-1;
1118 var thispath=''+xpArray[1]+','+ypArray[1];
1119 var maxcont=xpArray.length;
1120 //alert(maxcont);
1121 for(var conta=2;conta< maxcont;conta++){
1122 thispath+=','+xpArray[conta]+','+ypArray[conta];
1124 //alert(shape.points[1]);
1125 //shape.setAttribute("points",thispath);
1126 //points.Value = thispath;
1127 var thispath=''+xpArray[1]+','+ypArray[1];
1128 var maxcont=xpArray.length;
1129 //alert(maxcont);
1130 for(var conta=1;conta< maxcont;conta++){
1131 thispath+=','+xpArray[conta]+','+ypArray[conta];
1134 shape.points.Value = thispath;
1135 */
1140 /*
1143 //this.renderer.move(this.selected, this.selectedBounds.x + deltaX, this.selectedBounds.y + deltaY);
1144 // shape.setAttributeNS(null,'transform', "translate("+(toX)+","+(toy)+")");
1148 var thispath=''+xpArray[0]+','+ypArray[0];
1149 var maxcont=xpArray.length;
1150 //shape.setAttributeNS(null,'transform', "translate("+toX+","+toY+")");
1151 for(var conta=1;conta< maxcont;conta++){
1152 thispath+=','+xpArray[conta]+','+ypArray[conta];
1155 shape.setAttributeNS(null, 'x', toX);
1156 shape.setAttributeNS(null, 'y', toY);
1157 shape.setAttributeNS(null, 'points', thispath);
1158 */
1161 if (shape == 'text') {}
1163 };
1164 SVGRenderer.prototype.tocurve = function()
1166 var points=$('control_codebase').value.split('L');
1167 var chain='';
1168 chain+=points[0]+'C';
1169 var numpoints=points.length-1;
1170 for(var a=1;a<numpoints;a++)
1172 if(a%3==0)
1174 chain+=points[a]+'C';
1176 else
1178 chain+=points[a];
1181 if(numpoints%3==0){
1182 chain+=points[numpoints]+'';
1184 if(numpoints%3==2){
1185 chain+=points[numpoints-1]+'';
1186 chain+=points[numpoints]+'';
1188 if(numpoints%3==1){
1189 chain+=points[numpoints-1]+'';
1190 chain+=points[numpoints-1]+'';
1191 chain+=points[numpoints]+'';
1193 if(numpoints%3==3){
1194 chain+=points[numpoints-1]+'';
1195 chain+=points[numpoints-1]+'';
1196 chain+=points[numpoints-1]+'';
1197 chain+=points[numpoints]+'';
1200 $('someinfo').value=numpoints+ ' '+ numpoints%3;
1201 $('control_codebase').value=chain;
1202 setShape();
1203 };
1204 SVGRenderer.prototype.info = function(shape)
1206 var shInfo = {};
1207 if(shape.id != "tracker"){
1208 //shInfo.id = shape.id.substr(6);
1209 shInfo.id =shape.getAttribute('id');
1210 shInfo.type = shape.tagName;
1211 if (shape.hasAttributeNS(null,'transform')) {
1212 shInfo.transform = shape.getAttribute('transform');
1213 }else{
1214 shInfo.transform ='';
1217 if(shape.tagName == "text"){
1219 shInfo.textFamily = shape.getAttribute('font-family')
1220 shInfo.textSize = parseInt(shape.getAttribute('font-size'))
1221 shInfo.top = parseFloat(shape.getAttribute('y'))
1222 shInfo.left = parseFloat(shape.getAttribute('x'))
1223 shInfo.text = shape.textContent
1224 shInfo.lineWidth = parseFloat(shape.getAttribute('stroke-width'))
1226 //shInfo.text = shape.nodparseFloatue;
1230 if(shape.tagName !='image' || shape.tagName !='g' || shape.tagName !='stop')
1232 shInfo.fillColor = shape.getAttribute('fill')
1233 shInfo.lineColor = shape.getAttribute('stroke')
1234 shInfo.fillOpac = parseFloat(shape.getAttribute('fill-opacity'))
1235 shInfo.lineOpac = parseFloat(shape.getAttribute('stroke-opacity'))
1236 shInfo.lineWidth = parseFloat(shape.getAttribute('stroke-width'))
1238 var mystyle= shape.getAttribute('style');
1240 if(mystyle!= null && mystyle.indexOf('<![CDATA[')>=0)
1244 else
1246 // shInfo.style=shape.getAttribute('style');
1248 if(mystyle!= null){
1249 //var estilo=shape.getAttribute('style');
1250 var data;
1252 var estilo=generateJSON(mystyle);
1253 eval("data="+estilo);
1254 //var data=eval('"'+estilo+'"');
1255 //var data=estilo.evalJSON();
1257 (data["font-size"])?shInfo.textSize=data["font-size"]:shInfo.textSize;
1258 (data["font-family"])?shInfo.textFamily=data["font-family"]:shInfo.textFamily;
1260 (data.fill)?shInfo.fillColor=data.fill:shInfo.fillColor;
1261 (data.stroke)?shInfo.lineColor=data.stroke:shInfo.lineColor;
1262 (data.transform)?shInfo.transform=data.transform:shInfo.transform;
1263 (data["fill-opacity"])?shInfo.fillOpac=data["fill-opacity"]:shInfo.fillOpac;
1264 //shInfo.fillColor=data.fill;
1265 //document.getElementById("someinfo").value +=data.fill+' ';//estilo ;//data['fill']+' ';//
1271 if (shape.tagName == 'rect')
1273 if(shape.getAttribute('rx') || shape.getAttribute('ry')){
1274 shInfo.type = "roundrect";
1275 shInfo.rx = parseFloat(shape.getAttribute('rx'))
1276 shInfo.ry = parseFloat(shape.getAttribute('rx'))
1278 shInfo.left = parseFloat(shape.getAttribute( 'x'));
1279 shInfo.top = parseFloat(shape.getAttribute( 'y'));
1280 shInfo.width = parseFloat(shape.getAttribute('width'));
1281 shInfo.height = parseFloat(shape.getAttribute('height'));
1283 else if (shape.tagName == 'ellipse' || shape.tagName == 'circle')
1285 if(shape.tagName == 'circle'){
1286 shInfo.width = parseFloat(shape.getAttribute('r'))*2;
1287 shInfo.height = parseFloat(shape.getAttribute('r'))*2;
1288 }else{
1289 shInfo.width = parseFloat(shape.getAttribute('rx'))*2;
1290 shInfo.height = parseFloat(shape.getAttribute('ry'))*2;
1293 shInfo.left = parseFloat(shape.getAttribute('cx')) - (shInfo.width/2);
1294 shInfo.top = parseFloat(shape.getAttribute('cy')) - (shInfo.height/2) ;
1296 else if(shape.tagName == 'linearGradient') {
1297 shInfo.left = (shape.getAttribute( 'x1'));
1298 shInfo.top = parseFloat(shape.getAttribute( 'y1'));
1299 shInfo.width = parseFloat(shape.getAttribute('x2'));
1300 shInfo.height = parseFloat(shape.getAttribute('y2'));
1303 else if(shape.tagName == 'stop') {
1304 shInfo.fillColor = shape.getAttribute('stop-color');
1305 shInfo.fillOpac = shape.getAttribute('stop-opacity');
1306 shInfo.lineOpac = shape.getAttribute('offset');
1307 var mystyle= shape.getAttribute('style');
1308 if(mystyle!= null && mystyle.indexOf('<![CDATA[')>=0)
1312 else
1314 if(mystyle!= null){
1315 var data;
1316 var estilo=generateJSON(mystyle);
1317 eval("data="+estilo);
1318 (data["stop-color"])?shInfo.fillColor=data["stop-color"]:shInfo.fillColor;
1319 (data["stop-opacity"])?shInfo.fillOpac=data["stop-opacity"]:shInfo.fillOpac;
1320 document.getElementById("someinfo").value +=data["stop-color"]+' ';
1325 else if (shape.tagName == 'line')
1327 shInfo.left = parseFloat(shape.getAttribute('x1'));
1328 shInfo.top = parseFloat(shape.getAttribute('y1'));
1329 shInfo.width = parseFloat(shape.getAttribute('x2')) -shInfo.left;
1330 shInfo.height = parseFloat(shape.getAttribute('y2')) -shInfo.top;
1332 else if (shape.tagName == 'polyline')
1334 shInfo.points = shape.getAttribute('points');
1336 else if (shape.tagName == 'g')
1338 shInfo.type = "group";
1339 shInfo.left = parseFloat(shape.getAttribute( 'x'));
1340 shInfo.top = parseFloat(shape.getAttribute( 'y'));
1341 shInfo.width = parseFloat(shape.getAttribute('width'));
1342 shInfo.height = parseFloat(shape.getAttribute('height'));
1343 shInfo.fillColor = shape.getAttribute('fill')
1346 else if (shape.tagName == 'path')
1348 shInfo.points = shape.getAttribute('d');
1349 //shInfo.transform = shape.getAttribute('transform');
1351 //alert(shInfo.transform);
1352 //document.forms[0].codebase.value=shape.getAttribute('d');
1355 else
1358 if (shape.tagName == 'image')
1361 shInfo.left = parseFloat(shape.getAttribute( 'x'));
1362 shInfo.top = parseFloat(shape.getAttribute( 'y'));
1363 shInfo.width = parseFloat(shape.getAttribute('width'));
1364 shInfo.height = parseFloat(shape.getAttribute('height'));
1365 shInfo.fillOpac = parseFloat(shape.getAttribute('opacity'));
1366 shInfo.href = shape.getAttribute('href');
1369 if(shape.parentNode.tagName != 'svg'){
1370 //shInfo.width = parseFloat(shape.getAttribute('width'));
1371 //shInfo.height = parseFloat(shape.getAttribute('height'));
1372 //shInfo.viewBox = parseFloat(shape.getAttribute('viewBox'));
1373 shInfo.parent=shape.parentNode.getAttribute('id');
1376 return shInfo;
1377 }else{
1378 //do nothing if its the tracker
1383 };
1384 SVGRenderer.prototype.info01 = function(shape)
1387 var shInfo = {};
1388 if(shape.id != "tracker"){
1389 shInfo.id = shape.id.substr(6);
1390 shInfo.type = shape.tagName;
1391 if (shape.hasAttributeNS(null,'transform')) {
1392 shInfo.transform = shape.getAttribute('transform');
1393 }else{
1394 shInfo.transform ='';
1398 if(shape.tagName !='image')
1400 shInfo.fillColor = shape.getAttribute('fill')
1401 shInfo.lineColor = shape.getAttribute('stroke')
1402 shInfo.fillOpac = parseFloat(shape.getAttribute('fill-opacity'))
1403 shInfo.lineOpac = parseFloat(shape.getAttribute('stroke-opacity'))
1404 shInfo.lineWidth = parseFloat(shape.getAttribute('stroke-width'))
1408 if (shape.tagName == 'rect')
1410 if(shape.getAttribute('rx') || shape.getAttribute('ry')){
1411 shInfo.type = "roundrect";
1412 shInfo.rx = parseFloat(shape.getAttribute('rx'))
1413 shInfo.ry = parseFloat(shape.getAttribute('rx'))
1415 shInfo.left = parseFloat(shape.getAttribute( 'x'));
1416 shInfo.top = parseFloat(shape.getAttribute( 'y'));
1417 shInfo.width = parseFloat(shape.getAttribute('width'));
1418 shInfo.height = parseFloat(shape.getAttribute('height'));
1420 else if (shape.tagName == 'ellipse')
1422 shInfo.width = parseFloat(shape.getAttribute('rx'))*2;
1423 shInfo.height = parseFloat(shape.getAttribute('ry'))*2;
1424 shInfo.left = parseFloat(shape.getAttribute('cx')) - (shInfo.width/2);
1425 shInfo.top = parseFloat(shape.getAttribute('cy')) - (shInfo.height/2) ;
1428 else if (shape.tagName == 'line')
1430 shInfo.left = parseFloat(shape.getAttribute('x1'));
1431 shInfo.top = parseFloat(shape.getAttribute('y1'));
1432 shInfo.width = parseFloat(shape.getAttribute('x2')) -shInfo.left;
1433 shInfo.height = parseFloat(shape.getAttribute('y2')) -shInfo.top;
1435 else if (shape.tagName == 'polyline')
1437 shInfo.points = shape.getAttribute('points');
1439 else
1441 if (shape.tagName == 'path')
1443 shInfo.d = shape.getAttribute('d');
1444 //shInfo.transform = shape.getAttribute('transform');
1446 //alert(shInfo.transform);
1447 //document.forms[0].codebase.value=shape.getAttribute('d');
1450 else
1452 if(shape.tagName == "text"){
1454 shInfo.textFamily = shape.getAttribute('font-family')
1455 shInfo.textSize = parseInt(shape.getAttribute('font-size'))
1456 shInfo.top = parseFloat(shape.getAttribute('y'))
1457 shInfo.left = parseFloat(shape.getAttribute('x'))
1458 shInfo.text = shape.textContent
1459 shInfo.lineWidth = parseFloat(shape.getAttribute('stroke-width'))
1461 //shInfo.text = shape.nodparseFloatue;
1463 else
1465 if (shape.tagName == 'image')
1468 shInfo.left = parseFloat(shape.getAttribute( 'x'));
1469 shInfo.top = parseFloat(shape.getAttribute( 'y'));
1470 shInfo.width = parseFloat(shape.getAttribute('width'));
1471 shInfo.height = parseFloat(shape.getAttribute('height'));
1472 shInfo.fillOpac = parseFloat(shape.getAttribute('opacity'));
1473 shInfo.href = shape.getAttribute('href');
1477 return shInfo;
1478 }else{
1479 //do nothing if its the tracker
1489 SVGRenderer.prototype.transformShape = function(shape,data,transform)
1491 var svgNamespace = 'http://www.w3.org/2000/svg';
1492 var xlinkNS="http://www.w3.org/1999/xlink";
1493 //
1495 if(shape.tagName == 'rect')
1497 var box = shape.getBBox();
1498 var sdata=data.split(';');
1500 //alert(data[0]);
1501 shape.setAttributeNS(null,'x',parseFloat(sdata[0]));
1502 shape.setAttributeNS(null,'y',parseFloat(sdata[1]));
1503 shape.setAttributeNS(null, 'width', parseFloat(sdata[2]));
1504 shape.setAttributeNS(null, 'height', parseFloat(sdata[3]));
1505 var centerx=parseFloat(sdata[0])+parseFloat(box.width/2);
1506 var centery=parseFloat(sdata[1])+parseFloat(box.height/2);
1507 shape.setAttributeNS(null, 'transform','rotate('+parseFloat(sdata[4])+','+centerx+','+centery+')');
1509 //shape.nodparseFloatue=data;
1511 else
1512 if(shape.tagName == 'text')
1514 if(data.indexOf('<;>',0)==-1 )
1516 shape.textContent = data;
1518 else
1520 var sdata=data.split('<;>'); //?????????
1521 shape.textContent = sdata[0];
1522 shape.setAttributeNS(null,'font-size',parseFloat(sdata[1]));
1523 shape.setAttributeNS(null,'font-family',sdata[2]);
1525 //shape.nodparseFloatue=data;
1527 else
1528 if (shape.tagName == 'polyline')
1530 shape.setAttributeNS(null,'points',data);
1532 else
1533 if (shape.tagName == 'image')
1535 //alert(data);
1536 if(data.indexOf(';',0)==-1 )
1538 shape.setAttributeNS(xlinkNS,'href',data);
1540 else
1542 var box = shape.getBBox();
1543 var sdata=data.split(';');
1544 shape.setAttributeNS(null,'x',parseFloat(sdata[0]));
1545 shape.setAttributeNS(null,'y',parseFloat(sdata[1]));
1546 shape.setAttributeNS(null, 'width', parseFloat(sdata[2]));
1547 shape.setAttributeNS(null, 'height',parseFloat(sdata[3]));
1548 var centerx=parseFloat(sdata[0])+parseFloat(box.width/2);
1549 var centery=parseFloat(sdata[1])+parseFloat(box.height/2);
1550 shape.setAttributeNS(null, 'transform',' rotate('+parseFloat(sdata[4])+','+centerx+','+centery+')');
1556 else
1557 if (shape.tagName == 'path')
1559 if(data.indexOf(';',0)==-1 )
1561 shape.setAttributeNS(null, 'd', data);
1562 shape.setAttributeNS(null, 'transform', transform);
1564 else
1566 var box = shape.getBBox();
1567 var sdata=data.split(';');
1568 var centerx=parseFloat(sdata[0])+parseFloat(box.width/2);
1569 var centery=parseFloat(sdata[1])+parseFloat(box.height/2);
1570 shape.setAttributeNS(null, 'transform','scale('+parseFloat(sdata[2])+','+parseFloat(sdata[3])+')'+' rotate('+parseFloat(sdata[4])+','+centerx+','+centery+')'+' translate('+parseFloat(sdata[0])+','+parseFloat(sdata[1])+')');
1578 SVGRenderer.prototype.editShape = function(shape,data)
1580 if(shape.tagName == 'text'){
1581 shape.textContent = data
1582 }else
1583 if (shape.tagName == 'polyline')
1585 shape.setAttributeNS(null,'points',data);
1587 else
1589 if (shape.tagName == 'path')
1591 shape.setAttributeNS(null, 'd', data);
1596 SVGRenderer.prototype.editCommand = function(shape, cmd, value)
1598 if (shape != null) {
1599 if (cmd == 'fillcolor') {
1600 if (value != '')
1601 shape.setAttributeNS(null, 'fill', value);
1602 else
1603 shape.setAttributeNS(null, 'fill', 'none');
1605 else if (cmd == 'linecolor') {
1606 if (value != '')
1607 shape.setAttributeNS(null, 'stroke', value);
1608 else
1609 shape.setAttributeNS(null, 'stroke', 'none');
1611 else if (cmd == 'linewidth') {
1612 shape.setAttributeNS(null, 'stroke-width', parseInt(value) + 'px');
1614 else if (cmd == 'fillopacity') {
1615 if(shape.tagName=='image')
1617 shape.setAttributeNS(null, 'opacity', parseFloat(value));
1619 else
1621 shape.setAttributeNS(null, 'fill-opacity', parseFloat(value));
1625 else if (cmd == 'lineopacity') {
1627 shape.setAttributeNS(null, 'stroke-opacity', parseFloat(value));
1635 SVGRenderer.prototype.queryCommand = function(shape, cmd)
1637 var result = '';
1639 if (shape != null) {
1640 if (cmd == 'fillcolor') {
1641 result = shape.getAttributeNS(null, 'fill');
1642 if (result == 'none')
1643 result = '';
1645 else if (cmd == 'linecolor') {
1646 result = shape.getAttributeNS(null, 'stroke');
1647 if (result == 'none')
1648 result = '';
1650 else if (cmd == 'linewidth') {
1651 result = shape.getAttributeNS(null, 'stroke');
1652 if (result == 'none')
1653 result = '';
1654 else
1655 result = shape.getAttributeNS(null, 'stroke-width');
1657 else if (cmd == 'fillopacity') {
1658 if(shape.tagName=='image')
1660 shape.setAttributeNS(null, 'opacity', parseFloat(value));
1662 else
1664 shape.setAttributeNS(null, 'fill-opacity', parseFloat(value));
1668 else if (cmd == 'lineopacity') {
1670 shape.setAttributeNS(null, 'stroke-opacity', parseFloat(value));
1676 return result;
1679 SVGRenderer.prototype.getProperties = function(shape)
1681 var result = '';
1683 if (shape != null)
1685 result = shape.getAttributeNS(null, 'fill');
1686 if (result == 'none')
1688 mefillColor.visible = 'hidden';
1689 mefillColor.hex = '#000000';
1690 filldraw=true;
1691 setbe(1,'img_okfill');
1693 else
1695 //alert(mefillColor.hex+' '+result);
1696 mefillColor.visible = 'visible';
1697 mefillColor.hex = result;
1698 var rgb=hex2rgb(result)
1699 mefillColor.r=rgb[0];
1700 mefillColor.g=rgb[1];
1701 mefillColor.b=rgb[2];
1702 filldraw=false;
1703 setbe(1,'img_okfill');
1707 result = shape.getAttributeNS(null, 'stroke');
1708 if (result == 'none')
1710 mestrokeColor.visible = 'hidden';
1711 mestrokeColor.hex = '#000000';
1712 mestrokeColor.width = 0;
1713 strokedraw=true;
1714 setbe(2,'img_okstroke');
1717 else
1719 mestrokeColor.visible = 'visible';
1720 mestrokeColor.hex = result;
1721 var rgb=hex2rgb(result)
1722 mestrokeColor.r=rgb[0];
1723 mestrokeColor.g=rgb[1];
1724 mestrokeColor.b=rgb[2];
1725 strokedraw=false;
1726 setbe(2,'img_okstroke');
1730 result = shape.getAttributeNS(null, 'stroke-width');
1731 mestrokeColor.width = result;
1733 result = shape.getAttributeNS(null, 'fill-opacity');
1734 mefillColor.opacity = result;
1736 result = shape.getAttributeNS(null, 'stroke-opacity');
1737 mestrokeColor.opacity = result;
1739 setProperties();
1744 SVGRenderer.prototype.showMultiSelect = function(iniX,iniY) {
1745 var tracker = document.getElementById('trackerMultiSelect');
1746 if (tracker) {
1747 this.remove(tracker);
1750 var coord=this.editor.inputxy;
1751 toX=parseFloat(coord[0]);
1752 toY=parseFloat(coord[1]);
1754 tracker = document.createElementNS(svgNamespace, 'rect');
1756 tracker.setAttributeNS(null, 'x', iniX);
1757 tracker.setAttributeNS(null, 'y', iniY);
1758 tracker.setAttributeNS(null, 'width', toX);
1759 tracker.setAttributeNS(null, 'height', toY);
1760 tracker.setAttributeNS(null, 'fill', '#ffffff');
1761 tracker.setAttributeNS(null, 'stroke', 'green');
1762 tracker.setAttributeNS(null, 'stroke-width', '1');
1764 this.svgRoot.appendChild(tracker);
1768 function mouseCoord()
1770 var coord=this.editor.inputxy;
1771 coord[0]=parseFloat(coord[0]);
1772 coord[1]=parseFloat(coord[1]);
1773 return coord
1775 /*
1776 function nodeHit(node)
1778 node.addEventListener("mousemove", function(event) {nodeMove(node)}, false);
1782 function nodeUp(node)
1784 //node.stopObserving("mousemove");
1787 function nodeMove(node)
1789 var mypath=$('control_codebase').value;
1790 var x= $('option_path_x').value;
1791 var y= $('option_path_y').value;
1792 var precoord=x+','+y;
1793 var coord=mouseCoord();
1794 node.setAttributeNS(null, 'x', coord[0]-2);
1795 node.setAttributeNS(null, 'y', coord[1]-2);
1797 $('option_path_x').value=parseFloat(node.getAttributeNS(null,'x'))+2;
1798 $('option_path_y').value=parseFloat(node.getAttributeNS(null,'y'))+2;
1800 var cadx= $('option_path_x').value;
1801 var cady= $('option_path_y').value;
1802 var coord=cadx+','+cady;
1803 var cad1=new RegExp(precoord,"g");
1806 var result=mypath.replace(cad1, coord);
1809 $('control_codebase').value=result;
1811 $('someinfo').value=precoord;
1812 setShape();
1817 */
1818 var memoNode=null;
1819 var memoPrevControl=new Array();
1820 var memoNextControl=new Array();
1821 SVGRenderer.prototype.nodeMove = function(newx,newy) {
1822 var mypath=$('control_codebase').value;
1823 var x= $('option_path_x').value;
1824 var y= $('option_path_y').value;
1825 var precoord=x+','+y;
1827 $('option_path_x').value=newx;
1828 $('option_path_y').value=newy;
1830 var cadx= newx;
1831 var cady= newy;
1833 var coord=cadx+','+cady;
1834 var cad1=new RegExp(precoord,"g");
1837 var result=mypath.replace(cad1, coord);
1840 $('control_codebase').value=result;
1842 $('someinfo').value=precoord;
1843 setShape();
1847 function drawNodeControl(svg,numId){
1849 var svgNamespace = 'http://www.w3.org/2000/svg';
1850 var color1='#0066ff';
1851 // if(parseInt(memoNode.id)==a){
1853 var pointprev=memoPrevControl[numId].split(',');
1855 var controlNode1 = document.createElementNS(svgNamespace, 'rect');
1856 controlNode1.setAttributeNS(null, 'x', pointprev[0]-2);
1857 controlNode1.setAttributeNS(null, 'y', pointprev[1]-2);
1859 controlNode1.setAttributeNS(null, 'width', 4);
1860 controlNode1.setAttributeNS(null, 'height', 4);
1861 controlNode1.setAttributeNS(null, 'fill', color1);
1862 controlNode1.setAttributeNS(null, 'stroke', '#000000');
1863 controlNode1.setAttributeNS(null, 'stroke-width', '0');
1864 controlNode1.setAttributeNS(null, 'id', 'controlNode1');
1865 controlNode1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
1866 svg.appendChild(controlNode1);
1868 var pointnext=memoNextControl[numId].split(',');
1871 var controlNode2 = document.createElementNS(svgNamespace, 'rect');
1872 controlNode2.setAttributeNS(null, 'x', pointnext[0]-2);
1873 controlNode2.setAttributeNS(null, 'y', pointnext[1]-2);
1875 controlNode2.setAttributeNS(null, 'width', 4);
1876 controlNode2.setAttributeNS(null, 'height', 4);
1877 controlNode2.setAttributeNS(null, 'fill', color1);
1878 controlNode2.setAttributeNS(null, 'stroke', '#000000');
1879 controlNode2.setAttributeNS(null, 'stroke-width', '0');
1880 controlNode2.setAttributeNS(null, 'id', 'controlNode1');
1881 controlNode2.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
1882 svg.appendChild(controlNode2);
1884 //}
1889 SVGRenderer.prototype.showNodesCurve = function(path,controlNodeNum){
1890 memoNextControl=new Array();
1891 memoPrevControl=new Array();
1892 var svgNamespace = 'http://www.w3.org/2000/svg';
1893 // tracker = document.createElementNS(svgNamespace, 'g');
1894 var svg = this.container.ownerDocument.createElementNS(svgNamespace, 'g');
1895 svg.setAttributeNS(null, 'id', 'editNodesPath');
1897 /* var group = document.getElementById('editNodesPath');
1898 if (group)
1900 this.remove(group);
1902 */
1904 var points=path.split(' ');
1905 var chain='';
1906 var segment=' ';
1907 prevControl=' ';
1908 nextControl=' ';
1909 nodePoint=' ';
1910 var init=points[0].split('M');
1911 var allcoords=init[1].split(' ');
1912 var point=allcoords[0].split(',');
1913 var rect1 = document.createElementNS(svgNamespace, 'rect');
1914 rect1.setAttributeNS(null, 'x', point[0]-2);
1915 rect1.setAttributeNS(null, 'y', point[1]-2);
1917 rect1.setAttributeNS(null, 'width', 4);
1918 rect1.setAttributeNS(null, 'height', 4);
1919 rect1.setAttributeNS(null, 'fill', '#ff7700');
1920 rect1.setAttributeNS(null, 'stroke', '#000000');
1921 rect1.setAttributeNS(null, 'stroke-width', '0');
1922 rect1.setAttributeNS(null, 'id', '0');
1923 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'stroke-width', 1 ); }, false);
1924 rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
1926 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'stroke-width', 0 );}, false);
1928 svg.appendChild(rect1);
1930 if(controlNodeNum==0){ var color='#ffff00';}
1931 if(controlNodeNum==1){var color='#00ffff';}
1932 if(controlNodeNum==2){var color='#00cc00';}
1933 var color1='#ffff00';
1935 var numpoints=points.length-1;
1936 var recalls='';
1937 var re = /^[-]?\d*\.?\d*$/;
1938 for(var a=1;a<=numpoints;a++)
1941 var ini=points[a].substring(0,1);
1942 if (!ini.match(re))
1944 var end=points[a].substring(1);
1945 color='#0000ff';
1946 if(ini=='L' || ini=='M')
1948 color='#ffff00';
1951 if(ini=='C')
1953 recall=a+2;
1954 //color='#ffff00';
1957 }else
1959 var end=points[a];
1960 var ini='';
1961 color='#ff00ff';
1962 if(a==recall)
1964 color='#ffff00';
1969 //segment=points[a].split(',');
1970 /*prevControl=segment[0]+' ';
1971 nextControl=segment[1]+' ';
1972 nodePoint=segment[2]+' ';
1973 memoPrevControl[a]=prevControl;
1974 memoNextControl[a]=nextControl;
1975 if(controlNodeNum==0){chain+=prevControl; var point=prevControl.split(',');}
1976 if(controlNodeNum==1){chain+=nextControl; var point=nextControl.split(',');}
1977 if(controlNodeNum==2){chain+=nodePoint; var point=nodePoint.split(',');}
1978 if(controlNodeNum==3){chain+=nodePoint; var point=nodePoint.split(',');}
1980 */
1981 //if (isNaN(valnum))
1983 //if(ini=='C'){color='#ff00ff';}
1985 var point=end.split(',');
1986 if(memoNode!=null){
1988 var rect1 = document.createElementNS(svgNamespace, 'rect');
1989 rect1.setAttributeNS(null, 'x', point[0]-2);
1990 rect1.setAttributeNS(null, 'y', point[1]-2);
1992 rect1.setAttributeNS(null, 'width', 4);
1993 rect1.setAttributeNS(null, 'height', 4);
1994 rect1.setAttributeNS(null, 'fill', color);
1995 rect1.setAttributeNS(null, 'stroke', '#000000');
1996 rect1.setAttributeNS(null, 'stroke-width', '0');
1997 rect1.setAttributeNS(null, 'id', ''+a);
1998 rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );}drawNodeControl(svg,this.getAttributeNS(null,'id')); memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2000 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2001 // rect1.addEventListener("mousedown", function(event) {nodeHit(this);if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; document.forms[0].option_path_x.focus(); }, false);
2002 //rect1.addEventListener("mousedown", function(event) { if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} nodeHit(this); memoNode=this;this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2003 //rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} addControlPoints(segment[0],segment[1],svg); memoNode=this; this.setAttributeNS(null, 'fillColor', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2004 //rect1.addEventListener("mouseup", function(event) {nodeUp(this); }, false);
2005 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'fillColor', '#ffcc00' ); }, false);
2006 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'fillColor', '#00cc00' ); }, false);
2009 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'stroke-width', 0 ); }, false);
2011 svg.appendChild(rect1);
2014 var info='';
2016 if(controlNodeNum==0){info='prev Control'}
2017 if(controlNodeNum==1){info='next Control'}
2018 if(controlNodeNum==2){info='points node'}
2019 // $('someinfo').value=numpoints+ ' '+info+':'+ chain;
2020 $('someinfo').value='Crtl+Arrow to move';
2021 //return chain;
2024 //this.svgRoot.appendChild(svg);
2026 return svg;
2028 };
2030 SVGRenderer.prototype.showNodesCurve1 = function(path,controlNodeNum){
2031 memoNextControl=new Array();
2032 memoPrevControl=new Array();
2033 var svgNamespace = 'http://www.w3.org/2000/svg';
2034 // tracker = document.createElementNS(svgNamespace, 'g');
2035 var svg = this.container.ownerDocument.createElementNS(svgNamespace, 'g');
2036 svg.setAttributeNS(null, 'id', 'editNodesPath');
2038 /* var group = document.getElementById('editNodesPath');
2039 if (group)
2041 this.remove(group);
2043 */
2045 var points=path.split('C');
2046 var chain='';
2047 var segment=' ';
2048 prevControl=' ';
2049 nextControl=' ';
2050 nodePoint=' ';
2051 var init=points[0].split('M');
2052 var allcoords=init[1].split(' ');
2053 var point=allcoords[0].split(',');
2054 var rect1 = document.createElementNS(svgNamespace, 'rect');
2055 rect1.setAttributeNS(null, 'x', point[0]-2);
2056 rect1.setAttributeNS(null, 'y', point[1]-2);
2058 rect1.setAttributeNS(null, 'width', 4);
2059 rect1.setAttributeNS(null, 'height', 4);
2060 rect1.setAttributeNS(null, 'fill', '#ff7700');
2061 rect1.setAttributeNS(null, 'stroke', '#000000');
2062 rect1.setAttributeNS(null, 'stroke-width', '0');
2063 rect1.setAttributeNS(null, 'id', '0');
2064 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'stroke-width', 1 ); }, false);
2065 rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2067 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'stroke-width', 0 );}, false);
2069 svg.appendChild(rect1);
2071 if(controlNodeNum==0){ var color='#ffff00';}
2072 if(controlNodeNum==1){var color='#00ffff';}
2073 if(controlNodeNum==2){var color='#00cc00';}
2074 var color1='#ffff00';
2076 var numpoints=points.length-1;
2077 for(var a=1;a<=numpoints;a++)
2082 segment=points[a].split(' ');
2083 prevControl=segment[0]+' ';
2084 nextControl=segment[1]+' ';
2085 nodePoint=segment[2]+' ';
2086 memoPrevControl[a]=prevControl;
2087 memoNextControl[a]=nextControl;
2088 if(controlNodeNum==0){chain+=prevControl; var point=prevControl.split(',');}
2089 if(controlNodeNum==1){chain+=nextControl; var point=nextControl.split(',');}
2090 if(controlNodeNum==2){chain+=nodePoint; var point=nodePoint.split(',');}
2091 if(controlNodeNum==3){chain+=nodePoint; var point=nodePoint.split(',');}
2093 if(memoNode!=null){
2095 var rect1 = document.createElementNS(svgNamespace, 'rect');
2096 rect1.setAttributeNS(null, 'x', point[0]-2);
2097 rect1.setAttributeNS(null, 'y', point[1]-2);
2099 rect1.setAttributeNS(null, 'width', 4);
2100 rect1.setAttributeNS(null, 'height', 4);
2101 rect1.setAttributeNS(null, 'fill', color);
2102 rect1.setAttributeNS(null, 'stroke', '#000000');
2103 rect1.setAttributeNS(null, 'stroke-width', '0');
2104 rect1.setAttributeNS(null, 'id', ''+a);
2105 rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );}drawNodeControl(svg,this.getAttributeNS(null,'id')); memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2107 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2108 // rect1.addEventListener("mousedown", function(event) {nodeHit(this);if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} memoNode=this; this.setAttributeNS(null, 'fill-color', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; document.forms[0].option_path_x.focus(); }, false);
2109 //rect1.addEventListener("mousedown", function(event) { if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} nodeHit(this); memoNode=this;this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2110 //rect1.addEventListener("mousedown", function(event) {if(memoNode != null){memoNode.setAttributeNS(null, 'stroke-width', 0 );} addControlPoints(segment[0],segment[1],svg); memoNode=this; this.setAttributeNS(null, 'fillColor', '#ffff00' );this.setAttributeNS(null, 'stroke-width', 1 );$('option_path_num').value=this.getAttributeNS(null,'id'); $('option_path_x').value=parseFloat(this.getAttributeNS(null,'x'))+2; $('option_path_y').value=parseFloat(this.getAttributeNS(null,'y'))+2; }, false);
2111 //rect1.addEventListener("mouseup", function(event) {nodeUp(this); }, false);
2112 //rect1.addEventListener("mouseover", function(event) {this.setAttributeNS(null, 'fillColor', '#ffcc00' ); }, false);
2113 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'fillColor', '#00cc00' ); }, false);
2116 //rect1.addEventListener("mouseout", function(event) {this.setAttributeNS(null, 'stroke-width', 0 ); }, false);
2118 svg.appendChild(rect1);
2121 var info='';
2123 if(controlNodeNum==0){info='prev Control'}
2124 if(controlNodeNum==1){info='next Control'}
2125 if(controlNodeNum==2){info='points node'}
2126 // $('someinfo').value=numpoints+ ' '+info+':'+ chain;
2127 $('someinfo').value='Crtl+Arrow to move';
2128 //return chain;
2131 //this.svgRoot.appendChild(svg);
2133 return svg;
2135 };
2136 SVGRenderer.prototype.showTracker = function(shape,pathsEdit) {
2138 var box = shape.getBBox();
2139 var matrix = shape.getScreenCTM();
2140 var trshape= shape.getAttributeNS(null, 'transform');
2141 var shap=1;
2142 var T = shape.getCTM();
2143 //a,b,c,d,e,f
2148 //var thisTransform = { sx: s[0], r: shape.vRotate, t: shape.vTranslate };
2149 //if (currentTransform != null) alert(currentTransform.t);
2151 if (shape.tagName == 'rect') {
2153 $('option_rect_rot').value= T.b* (Math.PI * 2 / 360);
2154 $('option_rect_trx').value= box.x;
2155 $('option_rect_try').value= box.y;
2156 $('option_rect_sclx').value= box.width;
2157 $('option_rect_scly').value= box.height;
2161 if (shape.tagName == 'image'){
2162 $('option_img_trx').value= box.x;
2163 $('option_img_try').value= box.y;
2164 $('option_img_sclx').value= box.width;
2165 $('option_img_scly').value= box.height;
2166 $('option_img_rot').value= T.b* (Math.PI * 2 / 360);
2168 if (shape.tagName == 'text'){
2169 /* f$('option_text_trx').value= box.x;
2170 $('option_text_try').value= box.y;
2171 $('option_text_sclx').value= box.width;
2172 $('option_text_scly').value= box.height;
2173 $('option_text_rot').value= T.b* (Math.PI * 2 / 360);
2174 */
2176 if (shape.tagName == 'line'){
2177 /*
2178 $('option_line_trx').value= box.x;
2179 $('option_line_try').value= box.y;
2180 */
2182 if (shape.tagName == 'ellipse'){
2183 /*$('option_ellipse_trx').value= putx;
2184 $('option_ellipse_try').value= puty;
2185 $('option_ellipse_sclx').value= box.width;
2186 $('option_ellipse_scly').value= box.height;
2187 $('option_ellipse_rot').value= T.b* (Math.PI * 2 / 360);
2188 */
2193 /* if (shape.getAttributeNS(null, 'transform') ) {
2196 shap=2; }else{
2197 }*/
2198 var tracker = document.getElementById('tracker');
2199 if (tracker) {
2200 this.remove(tracker);
2203 var svgNamespace = 'http://www.w3.org/2000/svg';
2205 tracker = document.createElementNS(svgNamespace, 'g');
2206 tracker.setAttributeNS(null, 'id', 'tracker');
2208 var controlPoints=null;
2209 if (shape.tagName == 'path') { shap=2;
2211 /* $('option_path_trx').value= box.x;
2212 $('option_path_try').value= box.y;
2213 $('option_path_sclx').value= T.a;
2214 $('option_path_scly').value= T.d;
2215 $('option_path_rot').value= T.b* (Math.PI * 2 / 360);
2216 */
2217 var path=shape.getAttributeNS(null, 'd');
2218 $('control_codebase').value=path;
2220 //controlPoints=this.showNodesCurve(path,0);
2221 //controlPoints=this.showNodesCurve(path,1);
2222 controlPoints=this.showNodesCurve(path,2);
2225 /* controlPoints=this.showNodesCurve(path,1);
2227 tracker.appendChild(controlPoints);
2229 controlPoints=this.showNodesCurve(path,0);
2231 tracker.appendChild(controlPoints);
2232 */
2235 var svg = this.container.ownerDocument.createElementNS(svgNamespace, 'g');
2236 svg.setAttributeNS(null, 'id', 'transformSquares');
2239 //var rect = document.createElementNS(svgNamespace, 'rect');
2240 var border = document.createElementNS(svgNamespace, 'path');
2242 var trshape='translate (0,0) rotate(0) translate(0,0) ';
2243 var trshape_split=trshape.split(') ');
2245 // get_between (trshape, s1, s2) ;
2246 if(shape.getAttributeNS(null, 'transform')){
2247 var trshape=shape.getAttributeNS(null, 'transform') ;
2248 //var spl=trshape.replace(', ',' ');
2249 //var spl1=spl.replace(')',' ');
2250 var trshape_split=trshape.split(') ');
2255 var corners = [];
2256 var point = createPoint(box.x, box.y, box.width, box.height);
2257 //point = {x:box.x, y:box.y, width: box.width, height:box.height};
2258 //point = createPoint(box.x, box.y, box.width, box.height);
2259 //1
2260 corners.push( createPoint(box.x + box.width, box.y, box.width, box.height) );
2261 point.x = box.x + box.width;
2262 point.y = box.y;
2263 //2
2264 corners.push( createPoint(box.x + box.width, box.y + box.height, box.width, box.height) );
2265 point.x = box.x + box.width;
2266 point.y = box.y + box.height;
2267 //3
2268 //corners.push( point.matrixTransform(matrix) );
2269 corners.push( createPoint(box.x , box.y + box.height, box.width, box.height) );
2270 point.x = box.x;
2271 point.y = box.y + box.height;
2272 //4
2273 corners.push( createPoint(box.x + box.width, box.y, box.width, box.height) );
2275 var max = createPoint(corners[0].x, corners[0].y);
2276 var min = createPoint(corners[0].x, corners[0].y);
2278 // identify the new corner coordinates of the
2279 // fully transformed bounding box
2280 for (var i = 1; i < corners.length; i++) {
2281 var x = corners[i].x;
2282 var y = corners[i].y;
2283 if (x < min.x) {
2284 min.x = x;
2286 else if (x > max.x) {
2287 max.x = x;
2289 if (y < min.y) {
2290 min.y = y;
2292 else if (y > max.y) {
2293 max.y = y;
2297 // return the bounding box as an SVGRect object
2298 //rect = document.createElementNS(svgNamespace, 'rect');
2299 //rect.setAttributeNS(null, 'x', min.x-10);
2300 //rect.setAttributeNS(null, 'y', min.y-10);
2302 //rect.setAttributeNS(null, 'width', max.x - min.x+20);
2303 //rect.setAttributeNS(null, 'height', max.y - min.y+20);
2305 border.setAttributeNS(null, 'd', "M"+(min.x-10)+","+ (min.y-10)+' h'+(box.width+20)+','+(0)+' v'+(0)+','+(box.height+20)+' h'+(-box.width-20)+','+(0)+' z M'+(box.x+box.width+10)+","+ (box.y+(box.height/2)+' h'+(25)+',0 '));
2308 border.setAttributeNS(null, 'fill', 'none');
2309 border.setAttributeNS(null, 'stroke', '#cccccc');
2310 border.setAttributeNS(null, 'stroke-width', '1');
2312 // createRect(min.x, min.y, max.x - min.x, max.y - min.y);
2314 var circle1 = document.createElementNS(svgNamespace, 'ellipse');
2315 circle1.setAttributeNS(null, 'cx', (box.x + box.width+40) + 'px');
2316 circle1.setAttributeNS(null, 'cy', (box.y + box.height / 2) + 'px');
2317 circle1.setAttributeNS(null, 'rx', (5) + 'px');
2318 circle1.setAttributeNS(null, 'ry', (5) + 'px');
2319 circle1.setAttributeNS(null, 'fill', '#ffffff');
2320 circle1.setAttributeNS(null, 'stroke', 'green');
2321 circle1.setAttributeNS(null, 'stroke-width', '1');
2323 var circleCenter = document.createElementNS(svgNamespace, 'ellipse');
2324 circleCenter.setAttributeNS(null, 'cx', (box.x + (box.width/2)) + 'px');
2325 circleCenter.setAttributeNS(null, 'cy', (box.y + (box.height /2)) + 'px');
2326 circleCenter.setAttributeNS(null, 'rx', (10) + 'px');
2327 circleCenter.setAttributeNS(null, 'ry', (10) + 'px');
2328 circleCenter.setAttributeNS(null, 'fill', '#ffffff');
2329 circleCenter.setAttributeNS(null, 'stroke', 'green');
2330 circleCenter.setAttributeNS(null, 'stroke-width', '1');
2332 var rect1 = document.createElementNS(svgNamespace, 'rect');
2333 rect1.setAttributeNS(null, 'width', 10);
2334 rect1.setAttributeNS(null, 'height', 10);
2335 rect1.setAttributeNS(null, 'fill', '#ffffff');
2336 rect1.setAttributeNS(null, 'stroke', 'green');
2337 rect1.setAttributeNS(null, 'stroke-width', '1');
2339 var rect2 = document.createElementNS(svgNamespace, 'rect');
2340 rect2.setAttributeNS(null, 'width', 10);
2341 rect2.setAttributeNS(null, 'height', 10);
2342 rect2.setAttributeNS(null, 'fill', '#ffffff');
2343 rect2.setAttributeNS(null, 'stroke', 'green');
2344 rect2.setAttributeNS(null, 'stroke-width', '1');
2346 var rect3 = document.createElementNS(svgNamespace, 'rect');
2347 rect3.setAttributeNS(null, 'width', 10);
2348 rect3.setAttributeNS(null, 'height', 10);
2349 rect3.setAttributeNS(null, 'fill', '#ffffff');
2350 rect3.setAttributeNS(null, 'stroke', 'green');
2351 rect3.setAttributeNS(null, 'stroke-width', '1');
2353 var rect4 = document.createElementNS(svgNamespace, 'rect');
2354 rect4.setAttributeNS(null, 'width', 10);
2355 rect4.setAttributeNS(null, 'height', 10);
2356 rect4.setAttributeNS(null, 'fill', '#ffffff');
2357 rect4.setAttributeNS(null, 'stroke', 'green');
2358 rect4.setAttributeNS(null, 'stroke-width', '1');
2360 var rectmid12 = document.createElementNS(svgNamespace, 'rect');
2361 rectmid12.setAttributeNS(null, 'width', 10);
2362 rectmid12.setAttributeNS(null, 'height', 10);
2363 rectmid12.setAttributeNS(null, 'fill', '#ffffff');
2364 rectmid12.setAttributeNS(null, 'stroke', 'green');
2365 rectmid12.setAttributeNS(null, 'stroke-width', '1');
2367 var rectmid23 = document.createElementNS(svgNamespace, 'rect');
2368 rectmid23.setAttributeNS(null, 'width', 10);
2369 rectmid23.setAttributeNS(null, 'height', 10);
2370 rectmid23.setAttributeNS(null, 'fill', '#ffffff');
2371 rectmid23.setAttributeNS(null, 'stroke', 'green');
2372 rectmid23.setAttributeNS(null, 'stroke-width', '1');
2374 var rectmid34 = document.createElementNS(svgNamespace, 'rect');
2375 rectmid34.setAttributeNS(null, 'width', 10);
2376 rectmid34.setAttributeNS(null, 'height', 10);
2377 rectmid34.setAttributeNS(null, 'fill', '#ffffff');
2378 rectmid34.setAttributeNS(null, 'stroke', 'green');
2379 rectmid34.setAttributeNS(null, 'stroke-width', '1');
2381 var rectmid41 = document.createElementNS(svgNamespace, 'rect');
2382 rectmid41.setAttributeNS(null, 'width', 10);
2383 rectmid41.setAttributeNS(null, 'height', 10);
2384 rectmid41.setAttributeNS(null, 'fill', '#ffffff');
2385 rectmid41.setAttributeNS(null, 'stroke', 'green');
2386 rectmid41.setAttributeNS(null, 'stroke-width', '1');
2387 // rect.setAttributeNS(null, 'x', box.x - 10);
2388 // rect.setAttributeNS(null, 'y', box.y - 10);
2390 rect1.setAttributeNS(null, 'x', box.x - 10-5);
2391 rect1.setAttributeNS(null, 'y', box.y - 10-5);
2394 rect2.setAttributeNS(null, 'x', box.x + box.width +5 );
2395 rect2.setAttributeNS(null, 'y', box.y -10 -5);
2397 rect3.setAttributeNS(null, 'x', box.x + box.width+5 );
2398 rect3.setAttributeNS(null, 'y', box.y + box.height+5);
2400 rect4.setAttributeNS(null, 'x', box.x -10-5 );
2401 rect4.setAttributeNS(null, 'y', box.y + box.height+5);
2405 rectmid12.setAttributeNS(null, 'x', box.x + (box.width/2) -5);
2406 rectmid12.setAttributeNS(null, 'y', box.y - 10-5);
2408 rectmid23.setAttributeNS(null, 'x', box.x + box.width +5 );
2409 rectmid23.setAttributeNS(null, 'y', box.y + (box.height/2)-5);
2411 rectmid34.setAttributeNS(null, 'x', box.x + (box.width/2)-5 );
2412 rectmid34.setAttributeNS(null, 'y', box.y + box.height+5);
2414 rectmid41.setAttributeNS(null, 'x', box.x -10-5 );
2415 rectmid41.setAttributeNS(null, 'y', box.y + (box.height/2)-5);
2417 svg.appendChild(border);
2418 //tracker.appendChild(getScreenBBox (shape));
2419 //currentTranslate
2420 //currentScale
2421 // shape.setAttributeNS(null,'transform', "translate("+(box.x+(box.width/2))+","+(box.y+(box.height/2))+") rotate("+rotatexxx+") translate("+(-box.x-(box.width/2))+","+(-box.y-(box.height/2))+") ");
2423 //var trshape=shape.getAttributeNS(null, 'transform') ;
2424 //----tracker.setAttributeNS(null,'transform', "translate("+(box.x+(box.width/2))+","+(box.y+(box.height/2))+") "+trshape_split[1]+") translate("+(-box.x-(box.width/2))+","+(-box.y-(box.height/2))+") ");
2428 //}
2429 // tracker.appendChild(getScreenBBox (shape));
2430 var colorin="#ff0000";
2431 var colorout="#ffffff"
2433 circle1.addEventListener("mouseover", function(event) {circle1.setAttributeNS(null, 'cursor', 's-resize'); circle1.setAttributeNS(null, 'fill', colorin ); typeTransform='Rotate'; scaleType='nw'; }, false);
2434 circle1.addEventListener("mouseout", function(event) {circle1.setAttributeNS(null, 'cursor', 'default'); circle1.setAttributeNS(null, 'fill', colorout ); typeTransform='Rotate'; }, false); //typeTransform='rotate'
2435 circleCenter.addEventListener("mouseover", function(event) {circleCenter.setAttributeNS(null, 'cursor', 'move'); circleCenter.setAttributeNS(null, 'fill', colorin ); typeTransform='spìnCenter'; scaleType='nw'; }, false);
2436 circleCenter.addEventListener("mouseout", function(event) {circleCenter.setAttributeNS(null, 'cursor', 'default'); circleCenter.setAttributeNS(null, 'fill', colorout ); typeTransform=''; }, false); //typeTransform='rotate'
2439 //rect1.addEventListener("mouseover", cursore1in, false);
2440 rect1.addEventListener("mouseover", function(event) {rect1.setAttributeNS(null, 'cursor', 'nw-resize'); rect1.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='nw';}, false);
2441 rect1.addEventListener("mouseout", function(event) {rect1.setAttributeNS(null, 'cursor', 'default'); rect1.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false); //typeTransform='rotate'
2442 //rect1.addEventListener("click", function(event) { rect1.setAttributeNS(null, 'fill', '#00ff00' ); typeTransform='Scale'; }, false);
2444 rect2.addEventListener("mouseover", function(event) {rect2.setAttributeNS(null, 'cursor', 'ne-resize'); rect2.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='ne';}, false);
2445 rect2.addEventListener("mouseout", function(event) {rect2.setAttributeNS(null, 'cursor', 'default'); rect2.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2447 rect3.addEventListener("mouseover", function(event) {rect3.setAttributeNS(null, 'cursor', 'se-resize'); rect3.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='se';}, false);
2448 rect3.addEventListener("mouseout", function(event) {rect3.setAttributeNS(null, 'cursor', 'default'); rect3.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2450 rect4.addEventListener("mouseover", function(event) {rect4.setAttributeNS(null, 'cursor', 'sw-resize'); rect4.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='sw';}, false);
2451 rect4.addEventListener("mouseout", function(event) {rect4.setAttributeNS(null, 'cursor', 'default'); rect4.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2453 rectmid12.addEventListener("mouseover", function(event) {rectmid12.setAttributeNS(null, 'cursor', 'n-resize'); rectmid12.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='n';}, false);
2454 rectmid12.addEventListener("mouseout", function(event) {rectmid12.setAttributeNS(null, 'cursor', 'default'); rectmid12.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2456 rectmid23.addEventListener("mouseover", function(event) {rectmid23.setAttributeNS(null, 'cursor', 'e-resize'); rectmid23.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='e';}, false);
2457 rectmid23.addEventListener("mouseout", function(event) {rectmid23.setAttributeNS(null, 'cursor', 'default'); rectmid23.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2459 rectmid34.addEventListener("mouseover", function(event) {rectmid34.setAttributeNS(null, 'cursor', 's-resize'); rectmid34.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='s';}, false);
2460 rectmid34.addEventListener("mouseout", function(event) {rectmid34.setAttributeNS(null, 'cursor', 'default'); rectmid34.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2462 rectmid41.addEventListener("mouseover", function(event) {rectmid41.setAttributeNS(null, 'cursor', 'w-resize'); rectmid41.setAttributeNS(null, 'fill', colorin ); typeTransform='Scale'; scaleType='w'; }, false);
2463 rectmid41.addEventListener("mouseout", function(event) {rectmid41.setAttributeNS(null, 'cursor', 'default'); rectmid41.setAttributeNS(null, 'fill', colorout ); typeTransform='Scale'; }, false);
2465 //////////
2466 svg.setAttributeNS(null, 'transform',trshape);
2468 svg.appendChild(circle1);
2469 //tracker.appendChild(circleCenter);
2470 if (shape.tagName == 'text'){
2471 svg.appendChild(rect1);
2472 svg.appendChild(rect2);
2473 svg.appendChild(rect3);
2474 svg.appendChild(rect4);
2475 }else{
2476 svg.appendChild(rect1);
2477 svg.appendChild(rect2);
2478 svg.appendChild(rect3);
2479 svg.appendChild(rect4);
2480 svg.appendChild(rectmid12);
2481 svg.appendChild(rectmid23);
2482 svg.appendChild(rectmid34);
2483 svg.appendChild(rectmid41);
2486 if(pathsEdit)
2488 controlPoints.setAttributeNS(null, 'transform',trshape);
2489 tracker.appendChild(controlPoints);
2490 }else{
2491 tracker.appendChild(svg);
2493 this.svgRoot.appendChild(tracker);
2498 SVGRenderer.prototype.getMarkup = function() {
2500 return this.container.innerHTML;
2504 /////////////////////////////////
2505 var rotatexxx=0;
2507 var scaleType='';
2508 var xrot=0;
2509 var yrot=0;
2511 var point = {x:0, y:0, width: 0, height:0};
2513 function createPoint (x, y, width, height) {
2514 //var point = {x:34, y:22, width: 22, height:23};
2515 //point.x = x;
2516 //point.y = y;
2517 point = {x:x, y:y, width: width, height:height};
2518 return point;
2521 ///////////////////////////////
2523 SVGRenderer.prototype.restruct= function(shape)
2525 //alert('end');
2526 //forceRedraw();
2527 //clearWorkspace();
2528 //document.getElementById('richdraw').style.cursor='default';
2529 };
2533 SVGRenderer.prototype.transform = function() {
2534 //document.forms[0].code.value='Im tranforming';
2535 };
2537 SVGRenderer.prototype.scaleShape = function(shape,previus, toX, toY) {
2539 var box = shape.getBBox();
2540 var prevbox=previus.getBBox();
2541 var centerx= box.x+(box.width/2);
2542 var centery= box.y+(box.height/2);
2543 var coord=this.editor.inputxy;
2544 toX=parseFloat(coord[0]);
2545 toY=parseFloat(coord[1]);
2546 var d2p_center=dist2p(centerx,centery,toX,toY);
2548 var d2p=dist2p(box.x,box.y,toX,toY);
2550 var shareScale=box.width/d2p;
2552 var trans_ShareScale='';
2553 var tx, ty, tw, yh;
2555 if(scaleType.length==1){
2556 if(scaleType== 'w')
2558 trans_ShareScale=shareScale+",1";
2559 tx=toX;
2560 ty=prevbox.y;
2561 var dist=prevbox.x-toX;
2562 var w=dist+prevbox.width;
2563 if(w<1){w=1;}
2564 tw=w;
2565 th=prevbox.height;
2566 //document.forms[0].code.value=box.x+' '+toX+' '+dist+'';
2568 if(scaleType== 'e')
2570 trans_ShareScale=shareScale+",1";
2571 tx=prevbox.x;
2572 ty=prevbox.y;
2573 var dist=toX-(prevbox.x+prevbox.width); //dist2p(toX,b,c,d);
2574 var w=dist+prevbox.width;
2575 if(w<1){w=1;}
2576 tw=w;
2577 th=prevbox.height;
2580 if(scaleType== 'n')
2582 trans_ShareScale="1,"+shareScale;
2584 tx=prevbox.x;
2585 ty=toY;
2586 var dist=prevbox.y-toY;
2587 var h=dist+prevbox.height;
2588 if(h<1){h=1;}
2589 tw=prevbox.width;
2590 th=h;
2593 if( scaleType== 's')
2595 trans_ShareScale="1,"+shareScale;
2597 tx=prevbox.x;
2598 ty=prevbox.y;
2599 var dist=toY-(prevbox.y+prevbox.height); //dist2p(toX,b,c,d);
2600 var h=dist+prevbox.height;
2601 if(h<1){h=1;}
2602 tw=prevbox.width;
2603 th=h;
2607 if(scaleType.length==2){
2608 if(scaleType== 'nw'){
2609 trans_ShareScale=shareScale+","+shareScale;
2611 //var angle_diagonal=getAngle(prevbox.width,prevbox.height);
2612 var angle_diagonal=ang2v(prevbox.x,prevbox.y,prevbox.x+prevbox.width,prevbox.y+prevbox.height)
2614 var ax= prevbox.x;
2615 var ay= prevbox.y;
2616 var bx= prevbox.x+prevbox.width;
2617 var by= prevbox.y+prevbox.height;
2619 var cx= toX;
2620 var cy= toY;
2621 var dx= toX+10*Math.cos(angle_diagonal+(Math.PI/2));
2622 var dy= toY+10*Math.sin(angle_diagonal+(Math.PI/2));
2624 var section_a=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2625 this.editor.log(angle_diagonal* 180 / Math.PI);
2627 var tx= section_a[1];
2628 var ty= section_a[2];
2630 var ax= section_a[1];
2631 var ay= section_a[2];
2632 var bx= 0;
2633 var by= section_a[2] ;
2635 var cx=prevbox.x+prevbox.width;
2636 var cy= prevbox.y;
2638 var dx= prevbox.x+prevbox.width;
2639 var dy= 0;
2642 var section_b=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2644 var distx=dist2p(section_a[1],section_a[2],section_b[1],section_b[2]);
2648 var ax= section_a[1];
2649 var ay= section_a[2];
2650 var bx= section_a[1]
2651 var by= 0;
2653 var cx= prevbox.x;
2654 var cy= prevbox.y+prevbox.height;
2656 var dx= 0;
2657 var dy= prevbox.y+prevbox.height;
2660 var section_c=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2661 var disty=dist2p(section_a[1],section_a[2],section_c[1],section_c[2]);
2666 if(distx<1){distx=1;}
2669 if(disty<1){disty=1;}
2670 //document.forms[0].code.value=distx+' '+disty;
2671 tw=distx;
2672 th=disty;
2677 //////////////////// SE
2679 if( scaleType== 'se'){
2680 trans_ShareScale=shareScale+","+shareScale;
2683 //var angle_diagonal=getAngle(prevbox.width,prevbox.height);
2684 var angle_diagonal=ang2v(prevbox.x,prevbox.y,prevbox.x+prevbox.width,prevbox.y+prevbox.height)
2688 var ax= prevbox.x;
2689 var ay= prevbox.y;
2690 var bx= prevbox.x+prevbox.width;
2691 var by= prevbox.y+prevbox.height;
2693 var cx= toX;
2694 var cy= toY;
2695 var dx= toX+10*Math.cos(angle_diagonal+(Math.PI/2));
2696 var dy= toY+10*Math.sin(angle_diagonal+(Math.PI/2));
2698 var section_a=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2701 var svgNamespace = 'http://www.w3.org/2000/svg';
2702 var tracker = document.getElementById('tracker');
2704 //////////
2705 var tx= prevbox.x;
2706 var ty= prevbox.y;
2708 var ax= section_a[1];
2709 var ay= section_a[2];
2710 var bx= 0;
2711 var by= section_a[2] ;
2713 var cx=prevbox.x;
2714 var cy= prevbox.y;
2716 var dx= prevbox.x;
2717 var dy= 0;
2720 var section_b=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2722 /////////////////
2725 var distx=dist2p(section_a[1],section_a[2],section_b[1],section_b[2]);
2728 var ax= section_a[1];
2729 var ay= section_a[2];
2730 var bx= section_a[1]
2731 var by= 0;
2733 var cx= prevbox.x;
2734 var cy= prevbox.y;
2736 var dx=0;
2737 var dy= prevbox.y;
2740 var section_c=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2742 ///////////////
2744 var disty=dist2p(section_a[1],section_a[2],section_c[1],section_c[2]);
2748 if(distx<1){distx=1;}
2751 if(disty<1){disty=1;}
2753 tw=distx;
2754 th=disty;
2759 if(scaleType== 'ne'){
2761 trans_ShareScale=shareScale+","+shareScale;
2763 var angle_diagonal=ang2v(prevbox.x,prevbox.y+prevbox.height,prevbox.x+prevbox.width,prevbox.y)
2764 //var angle_diagonal=getAngle(prevbox.width,prevbox.height);
2769 var ax= prevbox.x;
2770 var ay= prevbox.y+prevbox.height;
2771 var bx= prevbox.x+prevbox.width;
2772 var by= prevbox.y;
2774 var cx= toX;
2775 var cy= toY;
2776 var dx= toX+10*Math.cos(angle_diagonal+(Math.PI/2));
2777 var dy= toY+10*Math.sin(angle_diagonal+(Math.PI/2));
2780 this.editor.log(angle_diagonal);
2783 var section_a=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2786 var svgNamespace = 'http://www.w3.org/2000/svg';
2787 var tracker = document.getElementById('tracker');
2789 //////////
2790 var tx= prevbox.x;
2791 var ty= section_a[2];
2793 var ax= section_a[1];
2794 var ay= section_a[2];
2795 var bx= 0;
2796 var by= section_a[2] ;
2798 var cx=prevbox.x;
2799 var cy= prevbox.y;
2801 var dx= prevbox.x;
2802 var dy= 0;
2805 var section_b=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2807 /////////////////
2810 var distx=dist2p(section_a[1],section_a[2],section_b[1],section_b[2]);
2813 var ax= section_a[1];
2814 var ay= section_a[2];
2815 var bx= section_a[1];
2816 var by= 0;
2818 var cx= prevbox.x;
2819 var cy= prevbox.y+prevbox.height;
2821 var dx=0;
2822 var dy= prevbox.y+prevbox.height;
2825 var section_c=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2827 ///////////////
2829 var disty=dist2p(section_a[1],section_a[2],section_c[1],section_c[2]);
2833 if(distx<1){distx=1;}
2836 if(disty<1){disty=1;}
2837 //document.forms[0].code.value=distx+' '+disty;
2838 tw=distx;
2839 th=disty;
2846 if(scaleType== 'sw'){
2847 trans_ShareScale=shareScale+","+shareScale;
2852 var angle_diagonal=ang2v(prevbox.x,prevbox.y+prevbox.height,prevbox.x+prevbox.width,prevbox.y)
2853 //var angle_diagonal=getAngle(prevbox.width,prevbox.height);
2858 var ax= prevbox.x;
2859 var ay= prevbox.y+prevbox.height;
2860 var bx= prevbox.x+prevbox.width;
2861 var by= prevbox.y;
2863 var cx= toX;
2864 var cy= toY;
2865 var dx= toX+10*Math.cos(angle_diagonal+(Math.PI/2));
2866 var dy= toY+10*Math.sin(angle_diagonal+(Math.PI/2));
2869 this.editor.log(angle_diagonal);
2872 var section_a=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2875 var svgNamespace = 'http://www.w3.org/2000/svg';
2876 var tracker = document.getElementById('tracker');
2878 //////////
2879 var tx= section_a[1];
2880 var ty= prevbox.y;
2882 var ax= section_a[1];
2883 var ay= section_a[2];
2884 var bx= 0;
2885 var by= section_a[2] ;
2887 var cx=prevbox.x+prevbox.width;
2888 var cy= prevbox.y+prevbox.height;
2890 var dx= prevbox.x+prevbox.width;
2891 var dy= 0;
2894 var section_b=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2895 var distx=dist2p(section_a[1],section_a[2],section_b[1],section_b[2]);
2897 /////////////////
2898 var ax= section_a[1];
2899 var ay= section_a[2];
2900 var bx= section_a[1];
2901 var by= 0;
2903 var cx= prevbox.x;
2904 var cy= prevbox.y;
2906 var dx=0;
2907 var dy= prevbox.y;
2910 var section_c=ntrsccn2rb(ax,ay,bx,by,cx,cy,dx,dy);
2911 var disty=dist2p(section_a[1],section_a[2],section_c[1],section_c[2]);
2912 ///////////////
2916 if(distx<1){distx=1;}
2919 if(disty<1){disty=1;}
2920 //document.forms[0].code.value=distx+' '+disty;
2921 tw=distx;
2922 th=disty;
2930 if(shape.tagName == 'rect')
2932 //alert(data[0]);
2933 shape.setAttributeNS(null,'x',tx);
2934 shape.setAttributeNS(null,'y',ty);
2935 shape.setAttributeNS(null, 'width', tw);
2936 shape.setAttributeNS(null, 'height', th);
2938 //shape.nodparseFloatue=data;
2940 else
2941 if(shape.tagName == 'text')
2944 var tsize=shape.getAttributeNS(null, 'font-size') ;
2945 tsize=eval(tsize);
2946 //shape.setAttributeNS(null, 'x', tx + 'px');
2947 //shape.setAttributeNS(null, 'y', ty + 'px');
2948 //var mysize=box.height+1 ;
2949 var mysize=parseInt(Math.round(th));
2951 if(scaleType== 'ne'){ shape.setAttributeNS(null, 'font-size',tsize+1);}
2952 //shape.setAttributeNS(null, 'font-size', mysize);
2955 /*
2956 shape.setAttributeNS(null,'x',tx);
2957 shape.setAttributeNS(null,'y',ty);
2958 shape.setAttributeNS(null, 'width', tw);
2959 shape.setAttributeNS(null, 'height', th);
2961 //previus.setAttributeNS(null,'transform', "scale("+trans_ShareScale+")");
2962 shape.setAttributeNS(null, 'x', tx + 'px');
2963 shape.setAttributeNS(null, 'y', ty + 'px');
2965 shape.setAttributeNS(null, 'textLength', parseInt(Math.round(tw)));
2967 */
2969 else
2970 if(shape.tagName == 'ellipse')
2972 //shape.getAttributeNS(null, 'transform)
2973 shape.setAttributeNS(null, 'cx', (tx + (box.width / 2)) + 'px');
2974 shape.setAttributeNS(null, 'cy', (ty + (box.height / 2)) + 'px');
2975 shape.setAttributeNS(null, 'rx', (tw / 2) + 'px');
2976 shape.setAttributeNS(null, 'ry', (th / 2) + 'px');
2980 else
2981 if(shape.tagName == 'line')
2983 shape.setAttributeNS(null, 'x1', tx + 'px');
2984 shape.setAttributeNS(null, 'y1', ty + 'px');
2985 shape.setAttributeNS(null, 'x2', tx + tw + 'px');
2986 shape.setAttributeNS(null, 'y2', ty + th + 'px');
2989 else
2990 if (shape.tagName == 'polyline')
2994 else
2995 if (shape.tagName == 'image')
2997 shape.setAttributeNS(null,'x',tx);
2998 shape.setAttributeNS(null,'y',ty);
2999 shape.setAttributeNS(null, 'width', tw);
3000 shape.setAttributeNS(null, 'height', th);
3003 else
3004 if (shape.tagName == 'path')
3006 // var xscale= box.width/tw;
3007 // var yscale= box.height/th;
3008 var xscale= tw/box.width;
3009 var yscale= th/box.height;
3010 var xinc=xscale;//dist*angx;
3011 var yinc=yscale/ty;//dist*angy;
3013 if(scaleType== 'n')
3015 tx=box.x+(box.width/2);
3016 ty=box.y+box.height;
3017 var xinc=1;
3018 var yinc=box.y/toY;//dist*angy;
3021 if(scaleType== 's')
3023 tx=box.x+(box.width/2);
3024 ty=box.y;
3025 var xinc=1;
3026 var yinc=toY/(box.y+box.height);//dist*angy;
3028 if(scaleType== 'e')
3030 tx=box.x;
3031 ty=box.y+(box.height/2);
3032 var xinc=toX/(box.x+box.width);
3033 var yinc=1;
3036 if(scaleType== 'w')
3038 tx=box.x+box.width;
3039 ty=box.y+(box.height/2);
3040 var xinc=box.x/toX;
3041 var yinc=1;
3044 if(scaleType== 'ne')
3046 tx=box.x;
3047 ty=box.y+box.height;
3048 var xinc=toX/(box.x+box.width);
3049 var yinc=xinc;
3051 if(scaleType== 'nw')
3053 tx=box.x+box.width;
3054 ty=box.y+box.height;
3055 var xinc=box.x/toX;
3056 var yinc=xinc;
3058 if(scaleType== 'se')
3060 tx=box.x;
3061 ty=box.y;
3062 var xinc=toX/(box.x+box.width);
3063 var yinc=xinc;
3065 if(scaleType== 'sw')
3067 tx=(box.x+box.width);
3068 ty=box.y;
3069 var xinc=box.x/toX;
3070 var yinc=xinc;
3072 if(xinc==0){ xinc= 0.0000001;}
3073 if(yinc==0){ yinc= 0.0000001; }
3074 var prevpath=previus.getAttributeNS(null, 'd');
3075 var path=shape.getAttributeNS(null, 'd');
3076 ////////////
3079 //xshe=left;
3080 //yshe=top;
3082 path=path.replace(/, /g, ',');
3083 path=path.replace(/ ,/g, ',');
3084 var ps =path.split(" ")
3085 var pcc = "";
3086 var point =ps[0].split(",");
3089 var num0= parseFloat(point[0].substring(1));
3090 var num1= parseFloat(point[1]);
3093 var ang= ang2v(box.x,box.y,tx,ty) ;
3094 var angle = Math.round((ang/Math.PI* 2)* 360);
3095 var angx = Math.cos(ang);
3096 var angy = Math.sin(ang);
3097 var dist= dist2p(tx,ty,box.x,box.y);
3098 //var xinc=xscale;//dist*angx;
3099 //var yinc=yscale;//dist*angy;
3100 var re = /^[-]?\d*\.?\d*$/;
3101 var axis = $V([tx,ty]);
3102 for(var i = 0; i < ps.length; i++)
3104 if(ps[i].indexOf(',')>0){
3106 var point =ps[i].split(",");
3107 var char1=point[0].substring(0,1);
3108 if(char1=='A' || char1=='a'){isArc=true; contArc=0;}
3109 if(isArc==true){contArc++}
3110 if(contArc==4){contArc=0; isArc=false}
3112 //if (isNaN(valnum))
3113 if (!char1.match(re))
3115 var num0= parseFloat(point[0].substring(1));
3116 var text=char1;
3117 }else{
3118 if(isArc==true && contArc==2 )
3120 var num0= point[0];
3121 }else{
3122 var num0= parseFloat(point[0]);
3124 var text='';
3129 if(isArc==true && contArc==2)
3131 point[1]= point[1].toString() ;
3133 else
3136 //num0*=xinc;
3137 point[1]= parseFloat(point[1]);
3138 //point[1]*=yinc;
3139 var pointIni=$V([num0,point[1],1]);
3140 var matrT = $M([[1,0,-tx],[0,1,-ty],[0,0,1]]);
3141 var matrS = $M([[xinc,0,0],[0,yinc,0],[0,0,1]]);
3142 var matrR = $M([[1,0,tx],[0,1,ty],[0,0,1]]);
3143 var matr1= matrT.x(pointIni);
3144 var matr2= matrS.x(matr1);
3145 //var pointR=pointIni.Random(1)
3146 //var pointR=pointIni.rotate(Math.PI/180,axis);
3147 //var pointRc=pointIni.cross(axis);
3148 //var pointR=matr2;
3149 var pointR=matrR.x(matr2);
3150 num0=pointR.elements[0];
3151 point[1]=pointR.elements[1];
3152 $('code').value=pointIni.elements[0]+','+pointR.elements[1]+' ';
3154 var cx=num0;
3155 var cy=point[1];
3156 pcc+=text+cx+','+cy+' ';
3157 //pcc+=text+cx+','+cy+' ';
3159 }else{
3160 pcc+=ps[i]+' ';
3164 shape.setAttributeNS(null,'d', pcc);
3168 //////////////
3169 /*
3170 path=path.replace(/, /g, ',');
3171 path=path.replace(/ ,/g, ',');
3172 var ps =path.split(" ")
3173 var pcc = "";
3175 var xinc=tx-prevbox.x;
3176 var yinc=ty-prevbox.y;
3178 var re = /^[-]?\d*\.?\d*$/;
3179 for(var i = 0; i < ps.length; i++)
3181 if(ps[i].indexOf(',')>0){
3183 var point =ps[i].split(",");
3184 var char1=point[0].substring(0,1);
3185 point[1]= parseFloat(point[1]);
3187 // var valnum =char1.charAt(0);
3188 //if (isNaN(valnum))
3189 if (!char1.match(re))
3192 var num0= parseFloat(point[0].substring(1));
3193 var text=char1;
3194 }else{
3195 var num0= parseFloat(point[0]);
3196 var text='';
3199 //num0+=dist*angx;
3200 //point[1]+=dist*angy;
3201 num0*=xscale;
3202 point[1]*=yscale;
3204 // num0+=xinc;
3205 // point[1]+=yinc;
3209 var cx=num0;
3210 var cy=point[1];
3211 pcc+=text+cx+','+cy+' ';
3212 }else{
3213 pcc+=ps[i]+' ';
3221 // $('code').value=dist+' '+ ang+' '+'__'+x+'= '+left+'/ '+y+'= ' +top+'';
3223 //shape.setAttributeNS(null,'transform', "rotate("+left+")");
3225 // shape.setAttributeNS(null,'transform', "translate("+trax+","+tray+") rotate("+0+") scale(1,1)");
3226 shape.setAttributeNS(null,'d', pcc);
3234 //document.forms[0].code.value='';
3235 //shape.setAttributeNS(null,'transform', "scale("+trans_ShareScale+")");
3236 */
3252 //$('status').innerHTML=typeTransform+': '+shareScale;
3255 };
3258 SVGRenderer.prototype.rotateShape = function(shape, previus, toX, toY) {
3260 //document.getElementById('richdraw').style.cursor='e-resize';
3261 var box = shape.getBBox();
3262 var prevbox=previus.getBBox();
3263 var centerx= box.x+(box.width/2);
3264 var centery= box.y+(box.height/2);
3265 var coord=this.editor.inputxy;
3267 var actual_angle=ang2v(centerx,centery,coord[0], coord[1]);
3269 if(xrot<toX) { rotatexxx+=1;}else{rotatexxx-=1;}
3270 xrot=toX;
3271 yrot=toY;
3273 var xtr=0;
3274 var ytr=0;
3276 var box= shape.getBBox();
3277 var tr1x= box.x;
3278 var tr1y= box.y;
3282 toX+=xtr;
3283 toY+=xtr;
3285 //var trax=parseFloat(toX-box.x); var tray= parseFloat(toY-box.y);
3286 var trax=parseFloat(box.x/2); var tray= parseFloat(box.y/2);
3287 var angler=Math.atan2(toX,toY);
3288 var angle=angler*180/Math.PI;
3289 var T = shape.getCTM();
3290 var rotini=T.a*(180 / Math.PI);
3291 var angle=rotini*180/Math.PI;
3292 var rot_angle=actual_angle*180/Math.PI;
3293 this.editor.log(centerx+' '+centery+' '+coord[0]+' '+coord[1]+'____ '+rot_angle+' '+actual_angle*180/Math.PI);
3296 // matrix( a, b, c, d, e, f )
3297 // a c e
3298 // b d f
3299 // 0 0 1
3300 //a scale factor of 2, a rotation of 30 deg and a translation of (500,50)
3301 //T 1.732 -1 500 1 1.732 50 0 0 1
3302 //T 1 ad-bc d -c -de+cf -b a be-df 0 0 1
3304 //shape.setAttributeNS(null,'transform', "translate("+(-xshe)+","+(-yshe)+")");
3306 // shape.setAttributeNS(null,"transform", " matrix( a, b, c, d, e, f )");
3307 // shape.setAttributeNS(null,'transform', "translate("+(box.x+(box.width/2))+","+(box.y+(box.height/2))+") rotate("+rotatexxx+") ");
3308 //shape.setAttributeNS(null,'transform', "translate("+(box.x+(box.width/2))+","+(box.y+(box.height/2))+") rotate("+rotatexxx+") translate("+(-box.x-(box.width/2))+","+(-box.y-(box.height/2))+") ");
3309 //shape.setAttributeNS(null,'transform', "rotate("+rotatexxx+","+(box.x+(box.width/2))+","+(box.y+(box.height/2))+")");
3310 //shape.setAttributeNS(null,'transform', "rotate("+rotatexxx+","+(prevbox.x+(prevbox.width/2))+","+(prevbox.y+(prevbox.height/2))+")");
3311 shape.setAttributeNS(null,'transform', "rotate("+rot_angle+","+(prevbox.x+(prevbox.width/2))+","+(prevbox.y+(prevbox.height/2))+")");
3314 //alert('[ ['+T.a+' '+T.c+' '+T.e+'] ['+T.b+' '+T.d+' '+T.f+'] [0 0 1] ]');
3315 //a,b,c,d,e,f
3317 // shape.setAttributeNS(null,'transform', 'matrix('+T.a+', '+T.b+', '+ T.c+', '+ T.d+', '+ T.e+', '+ T.f+')' );
3319 var x1=T.e;
3320 var y1=T.f;
3321 var sp = Math.sin(rotatexxx*(Math.PI / 180));
3322 var cp = Math.cos(rotatexxx*(Math.PI / 180));
3323 var x2 = 0 + r*rotatexxx*(Math.PI / 180);
3324 var y2 = 0;
3325 var r=0;
3327 var a=cp;
3328 var c=sp;
3329 var e=T.e;
3330 var b=T.b;
3331 var d=(-x1*cp+y1*sp+x2);
3332 var f=(-x1*sp-y1*cp+y2);
3334 var inv=T.inverse;
3335 var inv_mat=T.multiply(inv);
3336 //var matrix = "matrix(" + cp +"," + sp + "," + (-sp) + "," + cp + ","+ (-x1*cp+y1*sp+x2) + ","+ (-x1*sp-y1*cp+y2) + ")";
3337 //var matrix = "matrix(" + a +"," + c + "," + e + "," + b + ","+ d + ","+ f + ")";
3338 var matrix='matrix('+inv_mat.a+' '+inv_mat.b+' '+inv_mat.c+' '+inv_mat.d+' '+inv_mat.e+' '+inv_mat.f+')'
3340 //++ shape.setAttributeNS(null,'transform',matrix);
3342 //shape.setAttributeNS(null,'transform', "rotate("+rotatexxx+")");
3343 // shape.setAttributeNS(null,'transform', "translate("+(box.x)+","+(box.y)+")");
3345 //shape.setAttributeNS(null,'transform', "rotate("+rotatexxx+")");
3346 //shape.setAttributeNS(null, 'x', -box.width/2 + 'px');
3347 //shape.setAttributeNS(null, 'y', -box.height/2 + 'px');
3348 //shape.setAttributeNS(null,"transform", "matrix("+Math.cos(angle)+", "+Math.sin(angle)+", "+Math.sin(-angle)+", "+Math.cos(angle)+", 0, 0 )");
3349 //shape.setAttributeNS(null,'transform', "rotate("+10+")");
3351 //shape.setAttributeNS(null, 'x', box.width/2 + 'px');
3352 //shape.setAttributeNS(null, 'y', box.height/2 + 'px');
3356 //$('status').innerHTML = 'Mode: Draw '+pointshape +'_'+xsh +' '+ ysh+' '+trshape;
3358 //$('status').innerHTML=typeTransform+': '+rotatexxx;
3360 };
3364 // x(u) = x0*(1-u) + x1*u = x0 + (x1-x0)*u
3365 // y(u) = y0*(1-u) + y1*u = y0 + (y1-y0)*u
3369 SVGRenderer.prototype.getshapes = function(){
3370 return this.svgRoot.childNodes;
3373 SVGRenderer.prototype.reflect = function(HorV) {
3374 var shape= c.selected;
3375 var box = shape.getBBox();
3377 if(shape.tagName=="path")
3380 var tx=box.x+(box.width/2);
3381 var ty=box.y+(box.height/2);
3383 if(HorV=='V'){
3384 var xinc=-1;
3385 var yinc=1;
3387 if(HorV=='H'){
3388 var xinc=1;
3389 var yinc=-1;
3393 var path=shape.getAttributeNS(null, 'd');
3394 path=path.replace(/, /g, ',');
3395 path=path.replace(/ ,/g, ',');
3396 var ps =path.split(" ")
3397 var pcc = "";
3398 var point =ps[0].split(",");
3401 var num0= parseFloat(point[0].substring(1));
3402 var num1= parseFloat(point[1]);
3404 var re = /^[-]?\d*\.?\d*$/;
3405 var axis = $V([tx,ty]);
3407 for(var i = 0; i < ps.length; i++)
3409 if(ps[i].indexOf(',')>0){
3411 var point =ps[i].split(",");
3412 var char1=point[0].substring(0,1);
3413 if(char1=='A' || char1=='a'){isArc=true; contArc=0;}
3414 if(isArc==true){contArc++}
3415 if(contArc==4){contArc=0; isArc=false}
3417 //if (isNaN(valnum))
3418 if (!char1.match(re))
3420 var num0= parseFloat(point[0].substring(1));
3421 var text=char1;
3422 }else{
3423 if(isArc==true && contArc==2 )
3425 var num0= point[0];
3426 }else{
3427 var num0= parseFloat(point[0]);
3429 var text='';
3434 if(isArc==true && contArc==2)
3436 point[1]= point[1].toString() ;
3438 else
3441 //num0*=xinc;
3442 point[1]= parseFloat(point[1]);
3443 //point[1]*=yinc;
3444 var pointIni=$V([num0,point[1],1]);
3445 var matrT = $M([[1,0,-tx],[0,1,-ty],[0,0,1]]);
3446 var matrS = $M([[xinc,0,0],[0,yinc,0],[0,0,1]]);
3447 var matrR = $M([[1,0,tx],[0,1,ty],[0,0,1]]);
3448 var matr1= matrT.x(pointIni);
3449 var matr2= matrS.x(matr1);
3450 //var pointR=pointIni.Random(1)
3451 //var pointR=pointIni.rotate(Math.PI/180,axis);
3452 //var pointRc=pointIni.cross(axis);
3453 //var pointR=matr2;
3454 var pointR=matrR.x(matr2);
3455 num0=pointR.elements[0];
3456 point[1]=pointR.elements[1];
3457 $('code').value=pointIni.elements[0]+','+pointR.elements[1]+' ';
3459 var cx=num0;
3460 var cy=point[1];
3461 pcc+=text+cx+','+cy+' ';
3462 //pcc+=text+cx+','+cy+' ';
3464 }else{
3465 pcc+=ps[i]+' ';
3468 var svg =shape.cloneNode(false);
3469 svg.setAttributeNS(null,'d', pcc);
3470 this.svgRoot.appendChild(svg);
3471 return svg;
3473 else
3475 if(shape.tagName=="text" || shape.tagName=="image" )
3479 var tr='';
3480 var turn0='';
3481 var svg =shape.cloneNode(false);
3482 var x= shape.getAttributeNS(null, 'x');
3483 var y= shape.getAttributeNS(null, 'y');
3484 x+=box.width/2;
3485 y+=box.height/2;
3486 if(HorV=='V')
3488 svg.setAttributeNS(null,'x',-parseFloat(x));
3489 var scaleSim='-1, 1';
3490 svg.setAttributeNS(null,'transform','scale('+scaleSim+')');
3491 //svg.setAttributeNS(null,'y',parseFloat(x));
3492 svg.setAttributeNS(null,'x',-parseFloat(x));
3496 if(HorV=='H')
3498 var scaleSim='1, -1';
3499 svg.setAttributeNS(null,'y',-parseFloat(y));
3500 svg.setAttributeNS(null,'transform','scale('+scaleSim+')');
3501 //svg.setAttributeNS(null,'x',parseFloat(x));
3502 svg.setAttributeNS(null,'y',-parseFloat(y));
3507 if(shape.hasAttributeNS(null, 'transform'))
3509 tr=shape.getAttributeNS(null, 'transform');
3510 turn0=GetString(tr,'rotate(',')');
3512 svg.setAttributeNS(null,'transform','rotate('+turn+'),scale('+scaleSim+')');
3513 svg.setAttributeNS(null,'x',parseFloat(x));
3514 svg.setAttributeNS(null,'y',parseFloat(y));
3516 //svg.setAttributeNS(null,'transform','rotate('+turn+'),scale('+'');
3517 }else{
3523 if(shape.tagName=="text"){
3524 var text=shape.textContent ;
3525 svg.textContent=text;
3527 //svg.setAttributeNS(null,'writing-mode',mode);
3528 //svg.setAttributeNS(null,'glyph-orientation-horizontal','0deg');
3529 //
3530 //svg.appendChild(text);
3532 this.svgRoot.appendChild(svg);
3533 return svg;
3535 else
3537 if(shape.hasAttributeNS(null, 'transform'))
3541 var tr=shape.getAttributeNS(null, 'transform');
3542 var turn0=GetString(tr, 'rotate(',',');
3543 turn0=parseFloat(turn0);
3544 //alert(turn0);
3546 if(HorV=='V'){
3547 var angle=180;
3548 //var turn=(turn0+angle)-(turn0-90);
3549 var turn=turn0+((angle-turn0)*2);
3551 if(HorV=='H'){
3552 var angle=90;
3553 var turn=turn0+((angle-turn0)*2);
3555 var centerx= box.x+(box.width/2);
3556 var centery= box.y+(box.height/2);
3557 //this.editor.log(centerx+' '+centery+' '+coord[0]+' '+coord[1]+'____ '+rot_angle+' '+actual_angle*180/Math.PI);
3558 var svg =shape.cloneNode(false);
3559 svg.setAttributeNS(null,'transform', "rotate("+turn+","+centerx+","+centery+")");
3560 this.svgRoot.appendChild(svg);
3561 return svg;
3563 else
3565 var centerx= box.x+(box.width/2);
3566 var centery= box.y+(box.height/2);
3567 shape.setAttributeNS(null,'transform', "rotate("+180+","+centerx+","+centery+")");
3572 };
3573 //http://dev.opera.com/articles/view/svg-evolution-2-our-first-steps-into-sv/?page=3
3574 //http://www.w3.org/TR/2000/03/WD-SVG-20000303/exchange.html#StylingAttributes
3575 //http://www.xml.com/lpt/a/1390
3583 //http://xml-utils.com/conferencia-svg.html#d0e527
3584 //http://www.xml.com/lpt/a/1321
3585 //http://phrogz.net/objjob/object.asp?id=101
3586 //http://admisource.gouv.fr/plugins/scmcvs/cvsweb.php/Cassini-ihm/js-yosemite/mapApp.js?rev=1.1;cvsroot=cassini
3587 //http://groups.google.com/group/prototype-graphic/msg/0547c0caea8869c6
3588 //http://sylvester.jcoglan.com/