|
var LGraphObject = require('./LGraphObject');
|
|
var IGeometry = require('./util/IGeometry');
|
|
var IMath = require('./util/IMath');
|
|
|
|
function LEdge(source, target, vEdge) {
|
|
LGraphObject.call(this, vEdge);
|
|
|
|
this.isOverlapingSourceAndTarget = false;
|
|
this.vGraphObject = vEdge;
|
|
this.bendpoints = [];
|
|
this.source = source;
|
|
this.target = target;
|
|
}
|
|
|
|
LEdge.prototype = Object.create(LGraphObject.prototype);
|
|
|
|
for (var prop in LGraphObject) {
|
|
LEdge[prop] = LGraphObject[prop];
|
|
}
|
|
|
|
LEdge.prototype.getSource = function ()
|
|
{
|
|
return this.source;
|
|
};
|
|
|
|
LEdge.prototype.getTarget = function ()
|
|
{
|
|
return this.target;
|
|
};
|
|
|
|
LEdge.prototype.isInterGraph = function ()
|
|
{
|
|
return this.isInterGraph;
|
|
};
|
|
|
|
LEdge.prototype.getLength = function ()
|
|
{
|
|
return this.length;
|
|
};
|
|
|
|
LEdge.prototype.isOverlapingSourceAndTarget = function ()
|
|
{
|
|
return this.isOverlapingSourceAndTarget;
|
|
};
|
|
|
|
LEdge.prototype.getBendpoints = function ()
|
|
{
|
|
return this.bendpoints;
|
|
};
|
|
|
|
LEdge.prototype.getLca = function ()
|
|
{
|
|
return this.lca;
|
|
};
|
|
|
|
LEdge.prototype.getSourceInLca = function ()
|
|
{
|
|
return this.sourceInLca;
|
|
};
|
|
|
|
LEdge.prototype.getTargetInLca = function ()
|
|
{
|
|
return this.targetInLca;
|
|
};
|
|
|
|
LEdge.prototype.getOtherEnd = function (node)
|
|
{
|
|
if (this.source === node)
|
|
{
|
|
return this.target;
|
|
}
|
|
else if (this.target === node)
|
|
{
|
|
return this.source;
|
|
}
|
|
else
|
|
{
|
|
throw "Node is not incident with this edge";
|
|
}
|
|
}
|
|
|
|
LEdge.prototype.getOtherEndInGraph = function (node, graph)
|
|
{
|
|
var otherEnd = this.getOtherEnd(node);
|
|
var root = graph.getGraphManager().getRoot();
|
|
|
|
while (true)
|
|
{
|
|
if (otherEnd.getOwner() == graph)
|
|
{
|
|
return otherEnd;
|
|
}
|
|
|
|
if (otherEnd.getOwner() == root)
|
|
{
|
|
break;
|
|
}
|
|
|
|
otherEnd = otherEnd.getOwner().getParent();
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
LEdge.prototype.updateLength = function ()
|
|
{
|
|
var clipPointCoordinates = new Array(4);
|
|
|
|
this.isOverlapingSourceAndTarget =
|
|
IGeometry.getIntersection(this.target.getRect(),
|
|
this.source.getRect(),
|
|
clipPointCoordinates);
|
|
|
|
if (!this.isOverlapingSourceAndTarget)
|
|
{
|
|
this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];
|
|
this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];
|
|
|
|
if (Math.abs(this.lengthX) < 1.0)
|
|
{
|
|
this.lengthX = IMath.sign(this.lengthX);
|
|
}
|
|
|
|
if (Math.abs(this.lengthY) < 1.0)
|
|
{
|
|
this.lengthY = IMath.sign(this.lengthY);
|
|
}
|
|
|
|
this.length = Math.sqrt(
|
|
this.lengthX * this.lengthX + this.lengthY * this.lengthY);
|
|
}
|
|
};
|
|
|
|
LEdge.prototype.updateLengthSimple = function ()
|
|
{
|
|
this.lengthX = this.target.getCenterX() - this.source.getCenterX();
|
|
this.lengthY = this.target.getCenterY() - this.source.getCenterY();
|
|
|
|
if (Math.abs(this.lengthX) < 1.0)
|
|
{
|
|
this.lengthX = IMath.sign(this.lengthX);
|
|
}
|
|
|
|
if (Math.abs(this.lengthY) < 1.0)
|
|
{
|
|
this.lengthY = IMath.sign(this.lengthY);
|
|
}
|
|
|
|
this.length = Math.sqrt(
|
|
this.lengthX * this.lengthX + this.lengthY * this.lengthY);
|
|
}
|
|
|
|
module.exports = LEdge;
|
|
|