+153
@@ -0,0 +1,153 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user