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;