/* * Copyright [2011] [wisemapping] * * Licensed under the Apache License, Version 2.0 (the "License") plus the * "powered by wisemapping" text requirement on every single page; * you may not use this file except in compliance with the License. * You may obtain a copy of the license at * * http://www.wisemapping.org/license * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ web2d.peer.svg.ArrowPeer = function() { var svgElement = window.document.createElementNS(this.svgNamespace, 'path'); web2d.peer.svg.ElementPeer.call(this, svgElement); this._style={}; this._controlPoint=new core.Point(); this._fromPoint = new core.Point(); }; objects.extend(web2d.peer.svg.ArrowPeer, web2d.peer.svg.ElementPeer); web2d.peer.svg.ArrowPeer.prototype.setFrom = function(x,y) { this._fromPoint.x = x; this._fromPoint.y = y; this._redraw(); }; web2d.peer.svg.ArrowPeer.prototype.setControlPoint = function (point) { this._controlPoint = point; this._redraw(); }; web2d.peer.svg.ArrowPeer.prototype.setStrokeColor = function (color) { this.setStroke(null,null,color, null); }; web2d.peer.svg.ArrowPeer.prototype.setStrokeWidth = function(width) { this.setStroke(width); }; web2d.peer.svg.ArrowPeer.prototype.setDashed = function(isDashed, length, spacing){ if(core.Utils.isDefined(isDashed) && isDashed && core.Utils.isDefined(length) && core.Utils.isDefined(spacing)){ this._native.setAttribute("stroke-dasharray",length+","+spacing); } else { this._native.setAttribute("stroke-dasharray",""); } }; web2d.peer.svg.ArrowPeer.prototype._updateStyle = function() { var style = ""; for(var key in this._style){ style+=key+":"+this._style[key]+" "; } this._native.setAttribute("style",style); }; web2d.peer.svg.ArrowPeer.prototype._redraw = function() { var x,y, xp, yp; if(this._controlPoint.y == 0) this._controlPoint.y=1; var y0 = this._controlPoint.y; var x0 = this._controlPoint.x; var x2=x0+y0; var y2 = y0-x0; var x3 = x0-y0; var y3 = y0+x0; var m = y2/x2; var mp = y3/x3; var l = 6; var pow = Math.pow; x = (x2==0?0:Math.sqrt(pow(l,2)/(1+pow(m,2)))); x *=Math.sign(x2); y = (x2==0?l*Math.sign(y2):m*x); xp = (x3==0?0:Math.sqrt(pow(l,2)/(1+pow(mp,2)))); xp *=Math.sign(x3); yp = (x3==0?l*Math.sign(y3):mp*xp); var path = "M"+this._fromPoint.x+","+this._fromPoint.y+" " +"L"+(x+this._fromPoint.x)+","+(y+this._fromPoint.y) +"M"+this._fromPoint.x+","+this._fromPoint.y+" " +"L"+(xp+this._fromPoint.x)+","+(yp+this._fromPoint.y) ; this._native.setAttribute("d",path); };