diff options
Diffstat (limited to 'script/connections.js')
-rwxr-xr-x | script/connections.js | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/script/connections.js b/script/connections.js new file mode 100755 index 0000000..37270a4 --- /dev/null +++ b/script/connections.js @@ -0,0 +1,408 @@ +Schematic.prototype.connect =function(line,x,y){ +var x1=line.getAttributeNS(null,"x1")-0; +var x2=line.getAttributeNS(null,"x2")-0; +var y1=line.getAttributeNS(null,"y1")-0; +var y2=line.getAttributeNS(null,"y2")-0; +this.remove(line); +this.wireevents(this.createline('black',2,x1,y1,x,y)); +this.wireevents(this.createline('black',2,x,y,x2,y2)); +if($('templine1')){ +x1=$('templine1').getAttributeNS(null,'x1'); +y1=$('templine1').getAttributeNS(null,'y1'); +x2=$('templine1').getAttributeNS(null,'x2'); +y2=$('templine1').getAttributeNS(null,'y2'); +var svg=this.createline('black',2, x1, y1,x2, y2); +this.wireevents(svg); +this.drawing.appendChild(svg) +} +if($("templine2")){ +x1=$('templine2').getAttributeNS(null,'x1'); +y1=$('templine2').getAttributeNS(null,'y1'); +x2=$('templine2').getAttributeNS(null,'x2'); +y2=$('templine2').getAttributeNS(null,'y2'); +var svg=this.createline('black',2, x1, y1,x2, y2); +this.wireevents(svg); +this.drawing.appendChild(svg) +} + this.remove($("templine1")); + this.remove($("templine2")); +} +/* + Event.observe(circle,"mouseover",function(){ + var data = $A(arguments); + data.shift(); + this.onconnector=true; + if(this.mode=='line'){ + var x=data[0].getAttribute("cx"); + var y=data[0].getAttribute("cy"); + var line1=$("templine1"); + var line2=$("templine2") + var l1x1=line1.getAttribute("x1"); + var l1x2=line1.getAttribute("x2"); +// var l2y2=line2.getAttribute("y2"); + +// horizontal x2 + if(l1x1 != l1x2){ + line1.setAttribute("x2",x); + line2.setAttribute("x1",x); + line2.setAttribute("x2",x); + line2.setAttribute("y2",y); + + + } + else { + line1.setAttribute("y2",y); + + line2.setAttribute("y1",y); + line2.setAttribute("y2",y); + line2.setAttribute("x2",x); + } + + } + + data[0].setAttribute('visibility','visible'); + }.bindAsEventListener(this,circle)); + + Event.observe(circle,"mouseout",function(){ + this.onconnector=false; + if(!this.connections){ + var data = $A(arguments); + data.shift(); + data[0].setAttribute('visibility','hidden'); + } + }.bindAsEventListener(this,circle)); + + Event.observe(circle,"mousedown",function(){ + var data = $A(arguments); + data.shift(); + if(this.mode=='select'){ + parent.webtronics.setMode('line','Wire'); + var svg = this.createline('blue',2, data[0], data[1], data[0], data[1]); + svg.id = 'templine1'; + svg.setAttributeNS(null,'stroke-dasharray','3,2'); + this.info.appendChild(svg); + } + else{ + this.wiresegment(); + this.wiresegment(); + + this.remove($("templine1")); + parent.webtronics.setMode('select','Selection'); + } + }.bindAsEventListener(this,parts[i].analogpins[j].x,parts[i].analogpins[j].y)); +*/ +Schematic.prototype.maketerminal=function(wire){ + var circle=this.createdot('red',0,0,5); + circle.setAttribute("pointer-events","all"); + circle.setAttributeNS(null, 'fill-opacity', .35); + circle.setAttribute('visibility','hidden'); + + + + Event.observe(circle,"mouseout",function(){ + var data = $A(arguments); + data.shift(); + this.onconnector=false; + data[0].setAttribute('visibility','hidden'); + }.bindAsEventListener(this,circle)); + +/*this makes sure dots are not shown when not moused over*/ + + Event.observe(circle,"mouseover",function(){ + var data = $A(arguments); + data.shift(); + this.onconnector=true; + if(this.mode=='line'){ + var x=data[0].getAttribute("cx"); + var y=data[0].getAttribute("cy"); + var line1=$("templine1"); + var line2=$("templine2") + if(line1==null)return; + var l1x1=line1.getAttribute("x1"); + var l1x2=line1.getAttribute("x2"); + +//this locks the templine onto the dot +// horizontal x2 + if(l1x1 != l1x2){ + line1.setAttribute("x2",x); + if(line2){ + line2.setAttribute("x1",x); + line2.setAttribute("x2",x); + line2.setAttribute("y2",y); + } + + } + else { + line1.setAttribute("y2",y); + if(line2){ + line2.setAttribute("y1",y); + line2.setAttribute("y2",y); + line2.setAttribute("x2",x); + } + } + + } data[0].setAttribute('visibility','visible'); + }.bindAsEventListener(this,circle)); + + + Event.observe(circle,"mousedown",function(e){ + var data = $A(arguments); + data.shift(); + var x=data[0].getAttribute("cx"); + var y=data[0].getAttribute("cy"); + var dots=$$("#webtronics_drawing > circle"); + var found=false; +/* + for(var i=0;i<dots.length;i++){ + if((Math.abs(dots[i].getAttribute("cx")-x)<5)&&(Math.abs(dots[i].getAttribute("cy")-y)<5)){ + x=dots[i].getAttribute("cx"); + y=dots[i].getAttribute("cy"); + found=true; + break; + } + } +*/ +// if(!found){ + if(data[1]!=null){ + this.drawing.appendChild(this.createdot('black',x,y,3)); + this.connect(data[1],x,y); + } +// } + if(this.mode=='select'){ + + parent.webtronics.setMode('line','Wire'); + var svg = this.createline('blue',2, x, y, x, y); + svg.setAttribute( 'class',"templine"); + svg.id = 'templine1'; + svg.setAttributeNS(null,'stroke-dasharray','3,2'); + this.info.appendChild(svg); + } + else{ + this.wiresegment(); + this.wiresegment(); + + this.remove($("templine2")); + this.remove($("templine1")); + parent.webtronics.setMode('select','Selection'); + } + }.bindAsEventListener(this,circle,wire)); + return circle; +} + +Schematic.prototype.wireevents=function(svg){ + this.drawing.appendChild(svg); + + var x1=svg.getAttributeNS(null,'x1'); + var y1=svg.getAttributeNS(null,'y1'); + var x2=svg.getAttributeNS(null,'x2'); + var y2=svg.getAttributeNS(null,'y2'); + + +// extra wide line to help capture events + var eventline = this.createline('blue',5, x1, y1,x2,y2); + eventline.setAttribute('class',"webtronics_schematic_wire_eventline"); + eventline.setAttribute("pointer-events","all"); + eventline.setAttribute('visibility','hidden'); + this.info.appendChild(eventline); +//each line has one terminal + + + + + + + //line to make connections + Event.observe(eventline,"mouseover",function(e){ +// var connector=$$('#information > .webtronics_schematic_wire_connector'); +// for(var i=0;i<connector.length;i++)connector[i].parentNode.removeChild(connector[i]); + if(!this.drag){ + + var real=this.realPosition(Event.pointerX(e),Event.pointerY(e)); + var x = real.x;//Math.round(real.x/this.grid) * this.grid; + var y =real.y;//Math.round(real.y/this.grid) * this.grid; + + var lx1=svg.getAttribute("x1"); + var lx2=svg.getAttribute("x2"); + if(lx1==lx2){ + x= lx1; + if($("templine2"))y = $("templine2").getAttribute("y1"); + else if($("templine1"))y = $("templine1").getAttribute("y1"); + //else var y= real.y; + } + else { + if($("templine2"))x = $("templine2").getAttribute("x1"); + else if($("templine1"))x = $("templine1").getAttribute("x1"); + //else var x= real.x; + y=svg.getAttribute("y2"); + } + var terminal=this.maketerminal(eventline); + terminal.setAttribute('class',"webtronics_wire_terminal"); + this.info.appendChild(terminal); + terminal.setAttribute("cx",x); + terminal.setAttribute("cy",y); + + } + + }.bindAsEventListener(this)); + + +} + +Schematic.prototype.addconnects=function(){ + this.changeobserver.disconnect(); + + this.removeconnects(); + var parts=parent.netlistcreator.getwtxdata($$('#webtronics_drawing > g')); + //this.connectnamewires(parts); + for(var i=0 ;i<parts.length;i++){ + if(parts[i].analogpins!=undefined)for(var j=0;j<parts[i].analogpins.length;j++){ + + var terminal=this.maketerminal(null); + terminal.setAttribute('class',"webtronics_part_terminal"); + terminal.setAttribute("cx",parts[i].analogpins[j].x); + terminal.setAttribute("cy",parts[i].analogpins[j].y); + this.info.appendChild(terminal); + + } + + +// if(parts[i].digitalpins!=undefined)for(var j=0;j<parts[i].digitalpins.length;j++){ +// } + } +//clean up lines while i'm at it + var lines=$$("#webtronics_drawing > line"); + + for(var i=0;i<lines.length;i++){ + + if(lines[i].getAttributeNS(null,'x1')==lines[i].getAttributeNS(null,'x2') && lines[i].getAttributeNS(null,'y1')==lines[i].getAttributeNS(null,'y2')){ + this.remove(lines[i]); + } + else this.wireevents(lines[i]); + + + } + this.hideconnects(); + this.changeobserver.observe(this.drawing, { attributes: true, childList: true, characterData: true ,subtree:true}); + + +} + +Schematic.prototype.connect=function(line,x,y){ + + + + var x1=line.getAttributeNS(null,"x1")-0; + var x2=line.getAttributeNS(null,"x2")-0; + var y1=line.getAttributeNS(null,"y1")-0; + var y2=line.getAttributeNS(null,"y2")-0; + this.remove(line); + this.wireevents(this.createline('black',2,x1,y1,x,y)); + this.wireevents(this.createline('black',2,x,y,x2,y2)); + + if($('templine1')){ + x1=$('templine1').getAttributeNS(null,'x1'); + y1=$('templine1').getAttributeNS(null,'y1'); + x2=$('templine1').getAttributeNS(null,'x2'); + y2=$('templine1').getAttributeNS(null,'y2'); + var svg=this.createline('black',2, x1, y1,x2, y2); + this.wireevents(svg); + this.drawing.appendChild(svg) + } + if($("templine2")){ + x1=$("templine2").getAttributeNS(null,'x1'); + y1=$("templine2").getAttributeNS(null,'y1'); + x2=$("templine2").getAttributeNS(null,'x2'); + y2=$("templine2").getAttributeNS(null,'y2'); + var svg=this.createline('black',2, x1, y1,x2, y2); + this.wireevents(svg); + this.drawing.appendChild(svg) + } + + this.remove($("templine1")); + this.remove($("templine2")); + + +} + +Schematic.prototype.snaptowire=function(part){ + var pins=this.getpins(part); + + var wires=$$( "#webtronics_drawing > line" ); + + for(var i=0;i<wires.length;i++){ + + var x1=wires[i].getAttribute("x1"); + var y1=wires[i].getAttribute("y1"); + var x2=wires[i].getAttribute("x2"); + var y2=wires[i].getAttribute("y2"); + for(var j=0;j<pins.length;j++){ + if((Math.abs(x1-pins[j].x)<5)&&(Math.abs(y1-pins[j].y)<5)){ + this.move(part,x1-pins[j].x, y1-pins[j].y); + return; + } + if((Math.abs(x2-pins[j].x)<5)&&(Math.abs(y2-pins[j].y)<5)){ + this.move(part,x2-pins[j].x, y2-pins[j].y); + return ; + } + + } + + } + + return {x:0,y:0}; + + +} + + + +Schematic.prototype.wiresegment=function(){ + if($('templine1')){ + /*create line*/ + var x1=$('templine1').getAttributeNS(null,'x1'); + var y1=$('templine1').getAttributeNS(null,'y1'); + var x2=$('templine1').getAttributeNS(null,'x2'); + var y2=$('templine1').getAttributeNS(null,'y2'); + if(!(x1==x2&&y1==y2)){ + var svg=this.createline('black',2, x1, y1,x2, y2); + + this.drawing.appendChild(svg); + + this.wireevents(svg); + this.remove($('templine1')); + if($('templine2'))$('templine2').id='templine1'; + else{ + svg = this.createline('blue',2, x2, y2,x2,y2); + svg.setAttribute( 'class',"templine"); + svg.id = 'templine1'; + svg.setAttributeNS(null,'stroke-dasharray','3,2'); + this.info.appendChild(svg); + } + } + } +} + +Schematic.prototype.showconnects=function(elem,pin){ + var connector=$$('#information > .webtronics_part_terminal') + for(var i=0;i<connector.length;i++){ + connector[i].setAttribute('visibility','visible'); + } +} + +Schematic.prototype.hideconnects=function(){ + var connector=$$('#information > .webtronics_part_terminal') + for(var i=0;i<connector.length;i++){ + connector[i].setAttribute('visibility','hidden'); + } +} + + +Schematic.prototype.removeconnects=function(){ + + var connector=$$('#information > .webtronics_wire_terminal , #information > .webtronics_part_terminal,#information > .webtronics_schematic_wire_eventline ') + for(var i=0;i<connector.length;i++)connector[i].parentNode.removeChild(connector[i]); +} + + + + |