-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathNetworkUtil.js
More file actions
121 lines (113 loc) · 3.3 KB
/
NetworkUtil.js
File metadata and controls
121 lines (113 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
let util = require('../util')
/**
* Utility Class
*/
class NetworkUtil {
/**
* @ignore
*/
constructor() {}
/**
* Find the center position of the network considering the bounding boxes
*
* @param {Array.<Node>} allNodes
* @param {Array.<Node>} [specificNodes=[]]
* @returns {{minX: number, maxX: number, minY: number, maxY: number}}
* @static
*/
static getRange(allNodes, specificNodes = []) {
var minY = 1e9,
maxY = -1e9,
minX = 1e9,
maxX = -1e9,
node
if (specificNodes.length > 0) {
for (var i = 0; i < specificNodes.length; i++) {
node = allNodes[specificNodes[i]]
if (minX > node.shape.boundingBox.left) {
minX = node.shape.boundingBox.left
}
if (maxX < node.shape.boundingBox.right) {
maxX = node.shape.boundingBox.right
}
if (minY > node.shape.boundingBox.top) {
minY = node.shape.boundingBox.top
} // top is negative, bottom is positive
if (maxY < node.shape.boundingBox.bottom) {
maxY = node.shape.boundingBox.bottom
} // top is negative, bottom is positive
}
}
if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {
;(minY = 0), (maxY = 0), (minX = 0), (maxX = 0)
}
return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }
}
/**
* Find the center position of the network
*
* @param {Array.<Node>} allNodes
* @param {Array.<Node>} [specificNodes=[]]
* @returns {{minX: number, maxX: number, minY: number, maxY: number}}
* @static
*/
static getRangeCore(allNodes, specificNodes = []) {
var minY = 1e9,
maxY = -1e9,
minX = 1e9,
maxX = -1e9,
node
if (specificNodes.length > 0) {
for (var i = 0; i < specificNodes.length; i++) {
node = allNodes[specificNodes[i]]
if (minX > node.x) {
minX = node.x
}
if (maxX < node.x) {
maxX = node.x
}
if (minY > node.y) {
minY = node.y
} // top is negative, bottom is positive
if (maxY < node.y) {
maxY = node.y
} // top is negative, bottom is positive
}
}
if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {
;(minY = 0), (maxY = 0), (minX = 0), (maxX = 0)
}
return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }
}
/**
* @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};
* @returns {{x: number, y: number}}
* @static
*/
static findCenter(range) {
return {
x: 0.5 * (range.maxX + range.minX),
y: 0.5 * (range.maxY + range.minY)
}
}
/**
* This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.
* @param {vis.Item} item
* @param {'node'|undefined} type
* @returns {{}}
* @static
*/
static cloneOptions(item, type) {
let clonedOptions = {}
if (type === undefined || type === 'node') {
util.deepExtend(clonedOptions, item.options, true)
clonedOptions.x = item.x
clonedOptions.y = item.y
clonedOptions.amountOfConnections = item.edges.length
} else {
util.deepExtend(clonedOptions, item.options, true)
}
return clonedOptions
}
}
export default NetworkUtil