mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-15 11:07:57 +01:00
99 lines
3.0 KiB
JavaScript
99 lines
3.0 KiB
JavaScript
|
/*
|
||
|
* 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);
|
||
|
};
|
||
|
|