Line_Path.prototype=new Complex_Graphics();Line_Path.prototype.constructor=Line_Path;function Line_Path(){this._list_of_graphics=new Array();this._direction_vector=null;this._start_point=null;this._type="";this._lookup_x=null;this._lookup_y=null}Line_Path.prototype.draw=function(j){try{var g=false;if(this._lookup_x==null||this._lookup_y==null){this._lookup_x=new Array();this._lookup_y=new Array();g=true}var f=1;if(this._optimized_drawing){f=4}for(var c=0;c<this._list_of_graphics.length;c++){if(this._list_of_graphics[c].constructor!=Line_Path){if(this._list_of_graphics[c].constructor==Arc){if(this._list_of_graphics[c]._optimized_drawing){var b=new Line(this._list_of_graphics[c]._p1,this._list_of_graphics[c]._p2);b._optimized_drawing=true;var a=new Line(this._list_of_graphics[c]._p2,this._list_of_graphics[c]._p3);a._optimized_drawing=true;this.optimize_drawing(new Array(b,a),f,j)}else{var d=this._list_of_graphics[c].linearize();if(d==null){continue}this._list_of_graphics[c]._p2.draw(j);this.optimize_drawing(d._list_of_graphics,f,j)}}else{if(this._list_of_graphics[c].constructor==Circle){this._list_of_graphics[c].draw(j)}else{this.optimize_drawing(new Array(this._list_of_graphics[c]),f,j)}}}else{this._list_of_graphics[c]._lookup_x=this._lookup_x;this._list_of_graphics[c]._lookup_y=this._lookup_y;this._list_of_graphics[c].draw(j);this._lookup_x=this._list_of_graphics[c]._lookup_x;this._lookup_y=this._list_of_graphics[c]._lookup_y}}if(g){this._lookup_x=null;this._lookup_y=null}}catch(h){throw"Line_Path.draw(): "+h}};Line_Path.prototype.optimize_drawing=function(g,h,f){try{var m;var l;for(var c=0;c<g.length;c++){var b=_MAP_WRAPPER.convert_to_pixel(g[c]._p1._x,g[c]._p1._y,true);var a=_MAP_WRAPPER.convert_to_pixel(g[c]._p2._x,g[c]._p2._y,true);var k=g[c].clip(b[0],b[1],a[0],a[1]);if(k!=null){m=true;l=true;for(var j=0;j<this._lookup_x.length;j++){if(this._optimized_drawing){if(Math.abs(k[0]-this._lookup_x[j])<h&&Math.abs(k[1]-this._lookup_y[j])<h){m=false}if(Math.abs(k[2]-this._lookup_x[j])<h&&Math.abs(k[3]-this._lookup_y[j])<h){l=false}}else{if(Math.abs(k[0]-this._lookup_x[j])<h&&Math.abs(k[1]-this._lookup_y[j])<h&&Math.abs(k[2]-this._lookup_x[j])<h&&Math.abs(k[3]-this._lookup_y[j])<h){m=false;l=false}}}if(g[c]._optimized_drawing){if(m){this._lookup_x.push(k[0]);this._lookup_y.push(k[1]);f.setStroke(g[c]._p1.get_stroke());f.setColor(g[c]._p1.get_color());f.setPrintable(g[c]._p1._printable);f.drawRect(parseInt(k[0])-5*0.5,parseInt(k[1])-5*0.5,5,5)}if(l){this._lookup_x.push(k[2]);this._lookup_y.push(k[3]);f.setStroke(g[c]._p2.get_stroke());f.setColor(g[c]._p2.get_color());f.setPrintable(g[c]._p2._printable);f.drawRect(parseInt(k[2])-5*0.5,parseInt(k[3])-5*0.5,5,5)}}else{this._lookup_x.push(k[0]);this._lookup_y.push(k[1]);this._lookup_x.push(k[2]);this._lookup_y.push(k[3]);f.setStroke(g[c].get_stroke());f.setColor(g[c].get_color());f.setPrintable(g[c]._printable);f.drawLine(parseInt(k[0]),parseInt(k[1]),parseInt(k[2]),parseInt(k[3]))}}}}catch(d){throw"Line_Path.optimize_drawing(): "+d}};Line_Path.prototype.to_post_request=function(){try{var m=new Array();var k=new Array();var g=true;var j="";var l="";var f=false;var a=null;var n="";for(var d=0;d<this._list_of_graphics.length;d++){var c=this._list_of_graphics[d];if(c instanceof Line_Path){l+="!"+c.to_post_request();continue}if(c.constructor==Line){if(!f){f=true;n="LINESTRING "+c._p1._x+"_"+c._p1._y+","+c._p2._x+"_"+c._p2._y}else{n=","+c._p2._x+"_"+c._p2._y}}if(c.constructor==Arc){f=false;var b=c.to_post_request();m=b[0].split("_");k=b[1].split("_");n="ARC "+m[0]+"_"+k[0]+","+m[1]+"_"+k[1]+","+m[2]+"_"+k[2];if(g&&(d+1<this._list_of_graphics.length)){n+="#"}}if(c.constructor==Circle){f=false;var b=c.to_post_request();m=b[0].split("_");k=b[1].split("_");n="CIRCLE "+m[0]+"_"+k[0]+","+m[1]+"_"+k[1]+","+m[2]+"_"+k[2]+","+m[3]+"_"+k[3];if(g&&(d+1<this._list_of_graphics.length)){n+="#"}}if(g){g=false}else{if(!f){j="#"}else{if(f&&a instanceof Line){j=""}else{if(f&&a instanceof Arc){j="#"}}}}l+=j+n;a=c}return l}catch(h){throw"Line_Path.to_post_request() :"+h}};Line_Path.prototype.remove_line=function(a){try{for(var c=0;c<this._list_of_graphics.length;c++){var b=this._list_of_graphics[c];if(b instanceof Line_Path){b.remove_line(a)}else{if(b.equals(a)){this._list_of_graphics.splice(c,1);break}}}}catch(d){throw"Line_Path.remove_line(): "+d}};Line_Path.prototype.get_nearest_vertex_to_point=function(a){try{var c=this._list_of_graphics[0];if(c instanceof Line_Path){return c.get_nearest_vertex_to_point(a)}var b=null;c=this.get_nearest_line_to_point(a);if(c.constructor==Arc){if(c._p1.distance(a)<c._p2.distance(a)){if(c._p1.distance(a)<c._p3.distance(a)){b=c._p1}else{b=c._p3}}else{if(c._p2.distance(a)<c._p3.distance(a)){b=c._p2}else{b=c._p3}}}else{if(c.constructor==Line){if(c._p1.distance(a)<c._p2.distance(a)){b=c._p1}else{b=c._p2}}else{if(c.constructor==Circle){b=c.get_nearest_vertex_to_point(a)}}}return b}catch(d){throw"Line_Path.get_nearest_vertex_to_point(): "+d}};Line_Path.prototype.move_vertex=function(l,d){try{var b=null;var a=null;var n=true;var m=this._list_of_graphics.length;for(var j=0;j<m;j++){var c=this._list_of_graphics[j];if(c instanceof Line){if(c._p1.equals(l)||c._p2.equals(l)){if(n){b=c;n=false}else{a=c;break}}}else{if(c instanceof Arc){if(c._p1.equals(l)||c._p2.equals(l)||c._p3.equals(l)){if(n){b=c;n=false}else{a=c;break}}}else{if(c instanceof Circle){var h=new Point(c._center._x-c._radius,c._center._y);var q=new Point(c._center._x,c._center._y+c._radius);var p=new Point(c._center._x+c._radius,c._center._y);var r=new Point(c._center._x,c._center._y-c._radius);var g=new Arc(h,q,p);g._optimized_drawing=true;var f=new Arc(p,r,h);f._optimized_drawing=true;if(h.equals(l)){this._list_of_graphics.splice(j,1,g,f);j--;m++}else{if(q.equals(l)){this._list_of_graphics.splice(j,1,g,f);j--;m++}else{if(p.equals(l)){this._list_of_graphics.splice(j,1,g,f);j--;m++}else{if(r.equals(l)){this._list_of_graphics.splice(j,1,g,f);j--;m++}}}}}}}}if(b!=null){this.change_line_vertex_position(b,l,d)}if(a!=null){this.change_line_vertex_position(a,l,d)}}catch(k){throw"Line_Path.move_vertex(): "+k}};Line_Path.prototype.change_line_vertex_position=function(a,c,b){try{if(a.constructor==Line){if(a._p1.equals(c)){a._p1=b.clone()}else{if(a._p2.equals(c)){a._p2=b.clone()}}}else{if(a.constructor==Arc){if(a._p1.equals(c)){a._p1=b.clone()}else{if(a._p2.equals(c)){a._p2=b.clone()}else{if(a._p3.equals(c)){a._p3=b.clone()}}}}}a._optimized_drawing=false}catch(d){throw"Line_Path.change_line_vertex_position(): "+d}};Line_Path.prototype.add_vertex=function(f){try{var c=this.get_nearest_line_to_point(f);if(c.constructor==Arc){alert("Aggiungi Vertice impossibile sugli Archi!");return false}if(c.constructor==Circle){alert("Aggiungi Vertice impossibile sui Cerchi!");return false}var d=new Line(c._p1,f);d._optimized_drawing=false;var b=new Line(f.clone(),c._p2);b._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(c),1,d,b);return true}catch(a){throw"Line_Path.add_vertex(): "+a}};Line_Path.prototype.add_arc=function(d){try{var c=this.get_nearest_line_to_point(d);if(c.constructor==Arc){alert("Aggiungi Arco impossibile sugli Archi!");return false}if(c.constructor==Circle){alert("Aggiungi Arco impossibile sui Cerchi!");return false}var a=new Arc(c._p1,d,c._p2);this._list_of_graphics.splice(this.get_index_of_object(c),1,a);return true}catch(b){throw"Line_Path.add_arc(): "+b}};Line_Path.prototype.delete_vertex=function(k){try{var b=null;var a=null;var p=true;var n=this._list_of_graphics.length;for(var j=0;j<n;j++){var c=this._list_of_graphics[j];if(c.constructor==Line){if(c._p1.equals(k)||c._p2.equals(k)){if(p){b=c;p=false}else{a=c;break}}}else{if(c.constructor==Arc){if(c._p1.equals(k)||c._p2.equals(k)||c._p3.equals(k)){if(p){b=c;p=false}else{a=c;break}}}else{if(c instanceof Circle){var h=new Point(c._center._x-c._radius,c._center._y);var r=new Point(c._center._x,c._center._y+c._radius);var q=new Point(c._center._x+c._radius,c._center._y);var s=new Point(c._center._x,c._center._y-c._radius);var f=new Arc(h,r,q);f._optimized_drawing=true;var d=new Arc(q,s,h);d._optimized_drawing=true;if(h.equals(k)){this._list_of_graphics.splice(j,1,f,d);j--;n++}else{if(r.equals(k)){this._list_of_graphics.splice(j,1,f,d);j--;n++}else{if(q.equals(k)){this._list_of_graphics.splice(j,1,f,d);j--;n++}else{if(s.equals(k)){this._list_of_graphics.splice(j,1,f,d);j--;n++}}}}}}}}if(_SELECTED_VERTEX!=null&&_SELECTED_VERTEX.equals(k)){remove_from_extra_graphics(_SELECTED_VERTEX,_SELECTION_DRAWING_ENGINE);_SELECTED_VERTEX=null}if(b!=null&&a!=null){if(b instanceof Arc&&a instanceof Line){if(this._list_of_graphics.length==2&&((a._p1.equals(b._p1)&&a._p2.equals(b._p3))||(a._p2.equals(b._p1)&&a._p1.equals(b._p3)))){this.remove_line(b);a._optimized_drawing=false;return}if(b._p1.equals(k)&&a._p2.equals(k)){var l=new Arc(a._p1.clone(),b._p2.clone(),b._p3.clone())}else{if(b._p3.equals(k)&&a._p1.equals(k)){var l=new Arc(b._p1.clone(),b._p2.clone(),a._p2.clone())}else{alert("Geometria non valida!");return}}l._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(b),1,l);this._list_of_graphics.splice(this.get_index_of_object(a),1);return}else{if(b instanceof Line&&a instanceof Arc){if(this._list_of_graphics.length==2&&((b._p1.equals(a._p1)&&b._p2.equals(a._p3))||(b._p2.equals(a._p1)&&b._p1.equals(a._p3)))){this.remove_line(a);b._optimized_drawing=false;return}if(a._p1.equals(k)&&b._p2.equals(k)){var l=new Arc(b._p1.clone(),a._p2.clone(),a._p3.clone())}else{if(a._p3.equals(k)&&b._p1.equals(k)){var l=new Arc(a._p1.clone(),a._p2.clone(),b._p2.clone())}else{alert("Geometria non valida!");return}}l._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(b),1,l);this._list_of_graphics.splice(this.get_index_of_object(a),1);return}else{if(b instanceof Arc&&a instanceof Arc){if(this._list_of_graphics.length==2&&((b._p1.equals(a._p1)&&b._p3.equals(a._p3))||(a._p1.equals(b._p3)&&a._p3.equals(b._p1)))){if((b._p1.equals(k)&&a._p3.equals(k))||(b._p3.equals(k)&&a._p1.equals(k))){var g=new Line(b._p1.clone(),b._p3.clone())}else{alert("Geometria non valida!");return}g._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(b),1,g);this._list_of_graphics.splice(this.get_index_of_object(a),1);return}if(b._p3.equals(k)&&a._p1.equals(k)){var l=new Arc(b._p1.clone(),b._p2.clone(),a._p3.clone())}else{if(b._p1.equals(k)&&a._p3.equals(k)){var l=new Arc(a._p1.clone(),a._p2.clone(),b._p3.clone())}else{alert("Geometria non valida!");return}}l._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(b),1,l);this._list_of_graphics.splice(this.get_index_of_object(a),1);return}else{if(b instanceof Line&&a instanceof Line){if(b._p1.equals(k)&&a._p2.equals(k)){var g=new Line(a._p1.clone(),b._p2.clone())}else{if(b._p2.equals(k)&&a._p1.equals(k)){var g=new Line(b._p1.clone(),a._p2.clone())}else{alert("Geometria non valida!");return}}g._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(b),1,g);this._list_of_graphics.splice(this.get_index_of_object(a),1);if(this._list_of_graphics.length==2&&this._list_of_graphics[0].equals(g)&&this._list_of_graphics[1].equals(g)){this.remove_line(g)}return}}}}}else{var t=(b!=null)?b:a;if(t instanceof Arc){var g=new Line(t._p1.clone(),t._p3.clone());g._optimized_drawing=false;this._list_of_graphics.splice(this.get_index_of_object(t),1,g);if(this._list_of_graphics.length==2&&this._list_of_graphics[0].equals(g)&&this._list_of_graphics[1].equals(g)){this.remove_line(g)}}else{if(t instanceof Line){this.remove_line(t)}}}}catch(m){throw"Line_Path.delete_vertex(): "+m}};Line_Path.prototype.close_ring=function(){try{var d=this._list_of_graphics[0];var b=this._list_of_graphics[this._list_of_graphics.length-1];if(d.constructor==Line&&b.constructor==Line){b._p2=d._p1.clone()}else{if(d.constructor==Arc&&b.constructor==Line){b._p2=d._p1.clone()}else{if(d.constructor==Arc&&b.constructor==Arc){b._p3=d._p1.clone()}else{if(d.constructor==Line&&b.constructor==Arc){b._p3=d._p1.clone()}}}}for(var a=0;a<this._list_of_graphics.length;a++){if(this._list_of_graphics[a] instanceof Line_Path){this._list_of_graphics[a].close_ring()}}}catch(c){throw"Line_Path.close_ring(): "+c}};Line_Path.prototype.get_nearest_line_to_point=function(a){try{var d=this._list_of_graphics[0];if(d instanceof Line_Path){return d.get_nearest_line_to_point(a)}var g=d.distance_from_point(a._x,a._y,true);for(var b=1;b<this._list_of_graphics.length;b++){var f=this._list_of_graphics[b];if(f instanceof Line_Path){}else{if(f.distance_from_point(a._x,a._y,true)<g){g=f.distance_from_point(a._x,a._y,true);d=f}}}return d}catch(c){throw"Line_Path.get_nearest_line_to_point() "+c}};Line_Path.prototype.get_nearest_line_path_to_point=function(b){try{if(!(this._list_of_graphics[0] instanceof Line_Path)){return this}var f=this._list_of_graphics[0];var j=this._list_of_graphics[0].get_nearest_line_to_point(b).distance_from_point(b._x,b._y,true);var a=null;for(var d=1;d<this._list_of_graphics.length;d++){var c=this._list_of_graphics[d].get_nearest_line_to_point(b);if(c.distance_from_point(b._x,b._y,true)<j){j=c.distance_from_point(b._x,b._y,true);f=this._list_of_graphics[d]}}a=f;if(a.has_internal_rings()){for(d=0;d<a._list_of_graphics.length;d++){var h=a._list_of_graphics[d];if(h instanceof Line_Path){c=h.get_nearest_line_to_point(b);if(c.distance_from_point(b._x,b._y,true)<j){j=c.distance_from_point(b._x,b._y,true);f=h}}}}return f}catch(g){throw"Line_Path.get_nearest_line_path_to_point() "+g}};Line_Path.prototype.get_line_paths_containing_point=function(a){try{var f=new Array();for(var d=0;d<this._list_of_graphics.length;d++){if(this._list_of_graphics[d] instanceof Line_Path){var b=this._list_of_graphics[d].get_nearest_line_to_point(a);if(new Number(b.distance_from_point(a._x,a._y,true)).toFixed(_COORDINATE_PRECISION)==0){f.push(this._list_of_graphics[d])}if(this._list_of_graphics[d].has_internal_rings()){for(var c=0;c<this._list_of_graphics[d]._list_of_graphics.length;c++){var h=this._list_of_graphics[d]._list_of_graphics[c];if(h instanceof Line_Path){b=h.get_nearest_line_to_point(a);if(new Number(b.distance_from_point(a._x,a._y,true)).toFixed(_COORDINATE_PRECISION)==0){f.push(h)}}}}}}if(f.length==0&&new Number(this.get_nearest_line_to_point(a).distance_from_point(a._x,a._y,true)).toFixed(_COORDINATE_PRECISION)==0){f.push(this)}return f}catch(g){throw"Line_Path.get_line_paths_containing_point() "+g}};Line_Path.prototype.get_lines_containing_point=function(a){try{var g=new Array();for(var b=0;b<this._list_of_graphics.length;b++){var f=this._list_of_graphics[b];if(f instanceof Line_Path){}else{if(f instanceof Line){if(f._p1.equals(a)||f._p2.equals(a)){g.push(f)}}else{if(f instanceof Arc){if(f._p1.equals(a)||f._p2.equals(a)||f._p3.equals(a)){g.push(f)}}else{if(f instanceof Circle){var c=f.get_nearest_vertex_to_point(a);if(c.equals(a)){g.push(f)}}}}}}return g}catch(d){throw"Line_Path.get_lines_containing_point() "+d}};Line_Path.prototype.has_internal_rings=function(){try{for(var a=0;a<this._list_of_graphics.length;a++){if(this._list_of_graphics[a] instanceof Line_Path){return true}}return false}catch(b){throw"Line_Path.has_internal_rings(): "+b}};Line_Path.prototype.has_arcs=function(){try{var b=false;for(var a=0;a<this._list_of_graphics.length;a++){var d=this._list_of_graphics[a];if(d instanceof Line_Path){b=d.has_arcs()}if(d instanceof Arc){b=true;break}}return b}catch(c){throw"Line_Path.has_arcs(): "+c}};Line_Path.prototype.move=function(c,b){try{for(var a=0;a<this._list_of_graphics.length;a++){this._list_of_graphics[a].move(c,b)}return false}catch(d){throw"Line_Path.move(): "+d}};Line_Path.prototype.get_index_of_object=function(b){try{var a=-1;for(var c=0;c<this._list_of_graphics.length;c++){var f=this._list_of_graphics[c];if(f instanceof Line_Path){a=f.get_index_of_object(b)}if(f===b){a=c;break}}return a}catch(d){throw"Line_Path.get_index_of_object(): "+d}};Line_Path.prototype.to_string=function(){var b="Line_Path\n";for(var a=0;a<this._list_of_graphics.length;a++){b+=this._list_of_graphics[a].to_string()+"\n"}return b};Line_Path.prototype.invert_points=function(){try{for(var a=0;a<this._list_of_graphics.length;a++){this._list_of_graphics[a].invert_points()}}catch(b){throw"Line_Path.invert_points(): "+b}};Line_Path.prototype.reverse_geometry=function(){try{this._list_of_graphics.reverse();for(var a=0;a<this._list_of_graphics.length;a++){if(this._list_of_graphics[a] instanceof Line_Path){this._list_of_graphics[a].reverse_geometry()}else{this._list_of_graphics[a].invert_points()}}}catch(b){throw"Line_Path.invert_points(): "+b}};Line_Path.prototype.get_first_object=function(){try{if(this._list_of_graphics.length==0){return null}else{if(this._list_of_graphics[0] instanceof Line_Path){return this._list_of_graphics[0].get_first_object()}else{this._list_of_graphics[0]}}}catch(a){throw"Line_Path.get_last_object(): "+a}};Line_Path.prototype.get_last_object=function(){try{var b=null;for(var a=0;a<this._list_of_graphics.length;a++){if(this._list_of_graphics[a] instanceof Line_Path){b=this._list_of_graphics[a].get_last_object()}else{b=this._list_of_graphics[a]}}return b}catch(c){throw"Line_Path.get_last_object(): "+c}};Line_Path.prototype.is_empty=function(){try{if(this._list_of_graphics.length==0){return true}else{return false}}catch(a){throw"Line_Path.is_empty(): "+a}};Line_Path.prototype.set_optimized_drawing=function(a){try{for(var b=0;b<this._list_of_graphics.length;b++){if(this._list_of_graphics[b] instanceof Line_Path){this._list_of_graphics[b].set_optimized_drawing(a)}else{this._list_of_graphics[b]._optimized_drawing=a}}this._optimized_drawing=a}catch(c){throw"Line_Path.set_optimized_drawing(): "+c}};
