mirror of
https://bitbucket.org/wisemapping/wisemapping-open-source.git
synced 2024-11-22 22:27:55 +01:00
Finally connection predict is working.
This commit is contained in:
parent
eb709699b7
commit
9b2a24c437
@ -46,12 +46,18 @@ mindplot.DragConnector = new Class({
|
|||||||
|
|
||||||
_searchConnectionCandidates:function (dragTopic) {
|
_searchConnectionCandidates:function (dragTopic) {
|
||||||
var topics = this._designerModel.getTopics();
|
var topics = this._designerModel.getTopics();
|
||||||
|
var draggedNode = dragTopic.getDraggedTopic();
|
||||||
|
|
||||||
|
// Drag node connects to the border ...
|
||||||
|
var dragTopicWidth = dragTopic.getSize ? dragTopic.getSize().width : 0; // Hack...
|
||||||
|
var xMouseGap = dragTopic.getPosition().x > 0 ? 0 : dragTopicWidth;
|
||||||
|
var sPos = {x:dragTopic.getPosition().x - xMouseGap, y:dragTopic.getPosition().y};
|
||||||
|
|
||||||
|
|
||||||
// Perform a initial filter to discard topics:
|
// Perform a initial filter to discard topics:
|
||||||
// - Exclude dragged topic
|
// - Exclude dragged topic
|
||||||
// - Exclude dragTopic pivot
|
// - Exclude dragTopic pivot
|
||||||
// - Nodes that are collapsed
|
// - Nodes that are collapsed
|
||||||
var draggedNode = dragTopic.getDraggedTopic();
|
|
||||||
topics = topics.filter(function (topic) {
|
topics = topics.filter(function (topic) {
|
||||||
return draggedNode != topic && topic != dragTopic._draggedNode && !topic.areChildrenShrunken() && !topic.isCollapsed();
|
return draggedNode != topic && topic != dragTopic._draggedNode && !topic.areChildrenShrunken() && !topic.isCollapsed();
|
||||||
});
|
});
|
||||||
@ -59,41 +65,29 @@ mindplot.DragConnector = new Class({
|
|||||||
// Filter all the nodes that are outside the vertical boundary:
|
// Filter all the nodes that are outside the vertical boundary:
|
||||||
// * The node is to out of the x scope
|
// * The node is to out of the x scope
|
||||||
// * The x distance greater the vertical tolerated distance
|
// * The x distance greater the vertical tolerated distance
|
||||||
var sourcePosition = dragTopic.getPosition();
|
|
||||||
topics = topics.filter(function (topic) {
|
topics = topics.filter(function (topic) {
|
||||||
var tpos = topic.getPosition();
|
var tpos = topic.getPosition();
|
||||||
var distance = (sourcePosition.x - tpos.x) * Math.sign(sourcePosition.x);
|
|
||||||
|
|
||||||
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
|
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
|
||||||
var width = topic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE ? topic.getSize().width / 2 : topic.getSize().width;
|
var txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
|
||||||
return (distance > width) && ((distance - width) < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
|
var distance = (sPos.x - txborder) * Math.sign(sPos.x);
|
||||||
|
return distance > 0 && (distance < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Assign a priority based on the distance:
|
// Assign a priority based on the distance:
|
||||||
// - Alignment with the targetNode
|
// - Alignment with the targetNode
|
||||||
// - Vertical distance
|
// - Vertical distance
|
||||||
//
|
// - Horizontal proximity
|
||||||
topics = topics.sort(function (a, b) {
|
topics = topics.sort(function (a, b) {
|
||||||
var aPos = a.getPosition();
|
var aPos = a.getPosition();
|
||||||
var ad = (aPos.x - sourcePosition.x) * Math.sign(aPos.x);
|
|
||||||
|
|
||||||
var bPos = b.getPosition();
|
var bPos = b.getPosition();
|
||||||
var bd = ( bPos.x - sourcePosition.x) * Math.sign(bPos.x);
|
|
||||||
|
|
||||||
var av = this._isVerticallyAligned(a.getSize(), a.getPosition(), sourcePosition);
|
var av = this._isVerticallyAligned(a.getSize(), a.getPosition(), sPos);
|
||||||
var bv = this._isVerticallyAligned(b.getSize(), b.getPosition(), sourcePosition);
|
var bv = this._isVerticallyAligned(b.getSize(), b.getPosition(), sPos);
|
||||||
|
|
||||||
return ((bv ? 1000 : 1) + bd) - ((av ? 1000 : 1) + ad);
|
return ((av ? 1 : 10000) + Math.abs(aPos.x - sPos.x) + Math.abs(aPos.y - sPos.y)) - ((bv ? 1 : 10000) + Math.abs(bPos.x - sPos.x) + Math.abs(bPos.y - sPos.y));
|
||||||
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
// console.log("---- out ----");
|
|
||||||
// topics.each(function (e) {
|
|
||||||
// console.log(e.getText());
|
|
||||||
// });
|
|
||||||
// console.log("---- out ----");
|
|
||||||
|
|
||||||
|
|
||||||
return topics;
|
return topics;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ mindplot.DragTopic = new Class({
|
|||||||
// All topic element must be positioned based on the innerShape.
|
// All topic element must be positioned based on the innerShape.
|
||||||
var draggedNode = this._draggedNode;
|
var draggedNode = this._draggedNode;
|
||||||
var size = draggedNode.getSize();
|
var size = draggedNode.getSize();
|
||||||
var cx = Math.ceil(position.x - (size.width / 2));
|
var cx = position.x - (position.x > 0 ? 0 : size.width);
|
||||||
var cy = Math.ceil(position.y - (size.height / 2));
|
var cy = Math.ceil(position.y - (size.height / 2));
|
||||||
this._elem2d.setPosition(cx, cy);
|
this._elem2d.setPosition(cx, cy);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user