@7polo/kityminder-core
Version:
KityMinder Core Implement
63 lines (51 loc) • 1.82 kB
JavaScript
/**
* @fileOverview
*
* 提供折线相连的方法
*
* @author: techird
* @copyright: Baidu FEX, 2014
*/
define(function(require, exports, module) {
var kity = require('../core/kity');
var connect = require('../core/connect');
connect.register('poly', function(node, parent, connection, width) {
// 连线起点和终点
var po = parent.getLayoutVertexOut(),
pi = node.getLayoutVertexIn();
// 连线矢量和方向
var v = parent.getLayoutVectorOut().normalize();
var r = Math.round;
var abs = Math.abs;
var pathData = [];
pathData.push('M', r(po.x), r(po.y));
switch (true) {
case abs(v.x) > abs(v.y) && v.x < 0:
// left
pathData.push('h', -parent.getStyle('margin-left'));
pathData.push('v', pi.y - po.y);
pathData.push('H', pi.x);
break;
case abs(v.x) > abs(v.y) && v.x >= 0:
// right
pathData.push('h', parent.getStyle('margin-right'));
pathData.push('v', pi.y - po.y);
pathData.push('H', pi.x);
break;
case abs(v.x) <= abs(v.y) && v.y < 0:
// top
pathData.push('v', -parent.getStyle('margin-top'));
pathData.push('h', pi.x - po.x);
pathData.push('V', pi.y);
break;
case abs(v.x) <= abs(v.y) && v.y >= 0:
// bottom
pathData.push('v', parent.getStyle('margin-bottom'));
pathData.push('h', pi.x - po.x);
pathData.push('V', pi.y);
break;
}
connection.setMarker(null);
connection.setPathData(pathData);
});
});