@rxflow/manhattan 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/geometry/Line.d.ts +21 -0
- package/cjs/geometry/Line.d.ts.map +1 -0
- package/cjs/geometry/Line.js +88 -0
- package/cjs/geometry/Point.d.ts +49 -0
- package/cjs/geometry/Point.d.ts.map +1 -0
- package/cjs/geometry/Point.js +94 -0
- package/cjs/geometry/Rectangle.d.ts +41 -0
- package/cjs/geometry/Rectangle.d.ts.map +1 -0
- package/cjs/geometry/Rectangle.js +65 -0
- package/cjs/geometry/collision.d.ts +15 -0
- package/cjs/geometry/collision.d.ts.map +1 -0
- package/cjs/geometry/collision.js +81 -0
- package/cjs/geometry/index.d.ts +5 -0
- package/cjs/geometry/index.d.ts.map +1 -0
- package/cjs/geometry/index.js +45 -0
- package/cjs/getManHattanPath.d.ts +53 -0
- package/cjs/getManHattanPath.d.ts.map +1 -0
- package/cjs/getManHattanPath.js +449 -0
- package/cjs/index.d.ts +16 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +117 -0
- package/cjs/obstacle/ObstacleMap.d.ts +66 -0
- package/cjs/obstacle/ObstacleMap.d.ts.map +1 -0
- package/cjs/obstacle/ObstacleMap.js +328 -0
- package/cjs/obstacle/QuadTree.d.ts +119 -0
- package/cjs/obstacle/QuadTree.d.ts.map +1 -0
- package/cjs/obstacle/QuadTree.js +334 -0
- package/cjs/obstacle/index.d.ts +2 -0
- package/cjs/obstacle/index.d.ts.map +1 -0
- package/cjs/obstacle/index.js +12 -0
- package/cjs/options/defaults.d.ts +16 -0
- package/cjs/options/defaults.d.ts.map +1 -0
- package/cjs/options/defaults.js +39 -0
- package/cjs/options/index.d.ts +4 -0
- package/cjs/options/index.d.ts.map +1 -0
- package/cjs/options/index.js +38 -0
- package/cjs/options/resolver.d.ts +10 -0
- package/cjs/options/resolver.d.ts.map +1 -0
- package/cjs/options/resolver.js +248 -0
- package/cjs/options/types.d.ts +210 -0
- package/cjs/options/types.d.ts.map +1 -0
- package/cjs/options/types.js +5 -0
- package/cjs/pathfinder/PathCache.d.ts +92 -0
- package/cjs/pathfinder/PathCache.d.ts.map +1 -0
- package/cjs/pathfinder/PathCache.js +249 -0
- package/cjs/pathfinder/SortedSet.d.ts +35 -0
- package/cjs/pathfinder/SortedSet.d.ts.map +1 -0
- package/cjs/pathfinder/SortedSet.js +95 -0
- package/cjs/pathfinder/findRoute.d.ts +8 -0
- package/cjs/pathfinder/findRoute.d.ts.map +1 -0
- package/cjs/pathfinder/findRoute.js +395 -0
- package/cjs/pathfinder/index.d.ts +4 -0
- package/cjs/pathfinder/index.d.ts.map +1 -0
- package/cjs/pathfinder/index.js +44 -0
- package/cjs/svg/index.d.ts +3 -0
- package/cjs/svg/index.d.ts.map +1 -0
- package/cjs/svg/index.js +31 -0
- package/cjs/svg/pathConverter.d.ts +23 -0
- package/cjs/svg/pathConverter.d.ts.map +1 -0
- package/cjs/svg/pathConverter.js +285 -0
- package/cjs/svg/pathParser.d.ts +11 -0
- package/cjs/svg/pathParser.d.ts.map +1 -0
- package/cjs/svg/pathParser.js +76 -0
- package/cjs/utils/AdaptiveStepCalculator.d.ts +90 -0
- package/cjs/utils/AdaptiveStepCalculator.d.ts.map +1 -0
- package/cjs/utils/AdaptiveStepCalculator.js +224 -0
- package/cjs/utils/ErrorRecovery.d.ts +182 -0
- package/cjs/utils/ErrorRecovery.d.ts.map +1 -0
- package/cjs/utils/ErrorRecovery.js +413 -0
- package/cjs/utils/GlobalGrid.d.ts +99 -0
- package/cjs/utils/GlobalGrid.d.ts.map +1 -0
- package/cjs/utils/GlobalGrid.js +224 -0
- package/cjs/utils/PerformanceMonitor.d.ts +139 -0
- package/cjs/utils/PerformanceMonitor.d.ts.map +1 -0
- package/cjs/utils/PerformanceMonitor.js +305 -0
- package/cjs/utils/direction.d.ts +24 -0
- package/cjs/utils/direction.d.ts.map +1 -0
- package/cjs/utils/direction.js +54 -0
- package/cjs/utils/getAnchorPoints.d.ts +15 -0
- package/cjs/utils/getAnchorPoints.d.ts.map +1 -0
- package/cjs/utils/getAnchorPoints.js +71 -0
- package/cjs/utils/grid.d.ts +42 -0
- package/cjs/utils/grid.d.ts.map +1 -0
- package/cjs/utils/grid.js +73 -0
- package/cjs/utils/heuristics.d.ts +61 -0
- package/cjs/utils/heuristics.d.ts.map +1 -0
- package/cjs/utils/heuristics.js +141 -0
- package/cjs/utils/index.d.ts +14 -0
- package/cjs/utils/index.d.ts.map +1 -0
- package/cjs/utils/index.js +148 -0
- package/cjs/utils/node.d.ts +27 -0
- package/cjs/utils/node.d.ts.map +1 -0
- package/cjs/utils/node.js +36 -0
- package/cjs/utils/pathProcessing.d.ts +45 -0
- package/cjs/utils/pathProcessing.d.ts.map +1 -0
- package/cjs/utils/pathProcessing.js +270 -0
- package/cjs/utils/pathValidation.d.ts +11 -0
- package/cjs/utils/pathValidation.d.ts.map +1 -0
- package/cjs/utils/pathValidation.js +129 -0
- package/cjs/utils/rect.d.ts +9 -0
- package/cjs/utils/rect.d.ts.map +1 -0
- package/cjs/utils/rect.js +110 -0
- package/cjs/utils/route.d.ts +19 -0
- package/cjs/utils/route.d.ts.map +1 -0
- package/cjs/utils/route.js +92 -0
- package/esm/geometry/Line.d.ts +21 -0
- package/esm/geometry/Line.d.ts.map +1 -0
- package/esm/geometry/Point.d.ts +49 -0
- package/esm/geometry/Point.d.ts.map +1 -0
- package/esm/geometry/Rectangle.d.ts +41 -0
- package/esm/geometry/Rectangle.d.ts.map +1 -0
- package/esm/geometry/collision.d.ts +15 -0
- package/esm/geometry/collision.d.ts.map +1 -0
- package/esm/geometry/index.d.ts +5 -0
- package/esm/geometry/index.d.ts.map +1 -0
- package/esm/getManHattanPath.d.ts +53 -0
- package/esm/getManHattanPath.d.ts.map +1 -0
- package/esm/index.d.ts +16 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/obstacle/ObstacleMap.d.ts +66 -0
- package/esm/obstacle/ObstacleMap.d.ts.map +1 -0
- package/esm/obstacle/QuadTree.d.ts +119 -0
- package/esm/obstacle/QuadTree.d.ts.map +1 -0
- package/esm/obstacle/index.d.ts +2 -0
- package/esm/obstacle/index.d.ts.map +1 -0
- package/esm/options/defaults.d.ts +16 -0
- package/esm/options/defaults.d.ts.map +1 -0
- package/esm/options/index.d.ts +4 -0
- package/esm/options/index.d.ts.map +1 -0
- package/esm/options/resolver.d.ts +10 -0
- package/esm/options/resolver.d.ts.map +1 -0
- package/esm/options/types.d.ts +210 -0
- package/esm/options/types.d.ts.map +1 -0
- package/esm/pathfinder/PathCache.d.ts +92 -0
- package/esm/pathfinder/PathCache.d.ts.map +1 -0
- package/esm/pathfinder/SortedSet.d.ts +35 -0
- package/esm/pathfinder/SortedSet.d.ts.map +1 -0
- package/esm/pathfinder/findRoute.d.ts +8 -0
- package/esm/pathfinder/findRoute.d.ts.map +1 -0
- package/esm/pathfinder/index.d.ts +4 -0
- package/esm/pathfinder/index.d.ts.map +1 -0
- package/esm/svg/index.d.ts +3 -0
- package/esm/svg/index.d.ts.map +1 -0
- package/esm/svg/pathConverter.d.ts +23 -0
- package/esm/svg/pathConverter.d.ts.map +1 -0
- package/esm/svg/pathParser.d.ts +11 -0
- package/esm/svg/pathParser.d.ts.map +1 -0
- package/esm/utils/AdaptiveStepCalculator.d.ts +90 -0
- package/esm/utils/AdaptiveStepCalculator.d.ts.map +1 -0
- package/esm/utils/ErrorRecovery.d.ts +182 -0
- package/esm/utils/ErrorRecovery.d.ts.map +1 -0
- package/esm/utils/GlobalGrid.d.ts +99 -0
- package/esm/utils/GlobalGrid.d.ts.map +1 -0
- package/esm/utils/PerformanceMonitor.d.ts +139 -0
- package/esm/utils/PerformanceMonitor.d.ts.map +1 -0
- package/esm/utils/direction.d.ts +24 -0
- package/esm/utils/direction.d.ts.map +1 -0
- package/esm/utils/getAnchorPoints.d.ts +15 -0
- package/esm/utils/getAnchorPoints.d.ts.map +1 -0
- package/esm/utils/grid.d.ts +42 -0
- package/esm/utils/grid.d.ts.map +1 -0
- package/esm/utils/heuristics.d.ts +61 -0
- package/esm/utils/heuristics.d.ts.map +1 -0
- package/esm/utils/index.d.ts +14 -0
- package/esm/utils/index.d.ts.map +1 -0
- package/esm/utils/node.d.ts +27 -0
- package/esm/utils/node.d.ts.map +1 -0
- package/esm/utils/pathProcessing.d.ts +45 -0
- package/esm/utils/pathProcessing.d.ts.map +1 -0
- package/esm/utils/pathValidation.d.ts +11 -0
- package/esm/utils/pathValidation.d.ts.map +1 -0
- package/esm/utils/rect.d.ts +9 -0
- package/esm/utils/rect.d.ts.map +1 -0
- package/esm/utils/route.d.ts +19 -0
- package/esm/utils/route.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.normalizeAngle = normalizeAngle;
|
|
7
|
+
exports.resolveOptions = resolveOptions;
|
|
8
|
+
var _geometry = require("../geometry");
|
|
9
|
+
var _defaults = require("./defaults");
|
|
10
|
+
var _AdaptiveStepCalculator = require("../utils/AdaptiveStepCalculator");
|
|
11
|
+
/**
|
|
12
|
+
* Default performance configuration
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_PERFORMANCE_CONFIG = {
|
|
15
|
+
enableCache: true,
|
|
16
|
+
cacheSize: 100,
|
|
17
|
+
enableQuadTree: true,
|
|
18
|
+
earlyTermination: false
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Default debug configuration
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_DEBUG_CONFIG = {
|
|
25
|
+
enableLogging: false,
|
|
26
|
+
enableMetrics: false,
|
|
27
|
+
logLevel: 'info'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Normalize padding value to box format
|
|
32
|
+
*/
|
|
33
|
+
function normalizePadding(padding) {
|
|
34
|
+
if (typeof padding === 'number') {
|
|
35
|
+
return {
|
|
36
|
+
top: padding,
|
|
37
|
+
right: padding,
|
|
38
|
+
bottom: padding,
|
|
39
|
+
left: padding
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return padding;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Normalize angle to 0-360 range
|
|
47
|
+
*/
|
|
48
|
+
function normalizeAngle(angle) {
|
|
49
|
+
while (angle < 0) {
|
|
50
|
+
angle += 360;
|
|
51
|
+
}
|
|
52
|
+
while (angle >= 360) {
|
|
53
|
+
angle -= 360;
|
|
54
|
+
}
|
|
55
|
+
return angle;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Validate and fix configuration options
|
|
60
|
+
*/
|
|
61
|
+
function validateAndFixOptions(options) {
|
|
62
|
+
const fixed = {
|
|
63
|
+
...options
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Validate step
|
|
67
|
+
if (fixed.step !== undefined && fixed.step <= 0) {
|
|
68
|
+
console.warn('[ManhattanRouter] Invalid step value, using default');
|
|
69
|
+
fixed.step = _defaults.defaults.step;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Validate maxLoopCount
|
|
73
|
+
if (fixed.maxLoopCount !== undefined && fixed.maxLoopCount <= 0) {
|
|
74
|
+
console.warn('[ManhattanRouter] Invalid maxLoopCount, using default');
|
|
75
|
+
fixed.maxLoopCount = _defaults.defaults.maxLoopCount;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Validate borderRadius
|
|
79
|
+
if (fixed.borderRadius !== undefined && fixed.borderRadius < 0) {
|
|
80
|
+
console.warn('[ManhattanRouter] Invalid borderRadius, using default');
|
|
81
|
+
fixed.borderRadius = _defaults.defaults.borderRadius;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Validate extensionDistance
|
|
85
|
+
if (fixed.extensionDistance !== undefined && fixed.extensionDistance < 0) {
|
|
86
|
+
console.warn('[ManhattanRouter] Invalid extensionDistance, using default');
|
|
87
|
+
fixed.extensionDistance = _defaults.defaults.extensionDistance;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Validate precision
|
|
91
|
+
if (fixed.precision !== undefined && (fixed.precision < 0 || fixed.precision > 10)) {
|
|
92
|
+
console.warn('[ManhattanRouter] Invalid precision, using default');
|
|
93
|
+
fixed.precision = _defaults.defaults.precision;
|
|
94
|
+
}
|
|
95
|
+
return fixed;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolve adaptive step configuration
|
|
100
|
+
*/
|
|
101
|
+
function resolveAdaptiveStepConfig(config) {
|
|
102
|
+
if (!config) {
|
|
103
|
+
return {
|
|
104
|
+
..._AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
enabled: config.enabled ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.enabled,
|
|
109
|
+
minStep: config.minStep ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.minStep,
|
|
110
|
+
maxStep: config.maxStep ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.maxStep,
|
|
111
|
+
densityBased: {
|
|
112
|
+
enabled: config.densityBased?.enabled ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.densityBased.enabled,
|
|
113
|
+
threshold: config.densityBased?.threshold ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.densityBased.threshold
|
|
114
|
+
},
|
|
115
|
+
distanceBased: {
|
|
116
|
+
enabled: config.distanceBased?.enabled ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.enabled,
|
|
117
|
+
shortPathThreshold: config.distanceBased?.shortPathThreshold ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.shortPathThreshold,
|
|
118
|
+
longPathThreshold: config.distanceBased?.longPathThreshold ?? _AdaptiveStepCalculator.DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.longPathThreshold
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Resolve performance configuration
|
|
125
|
+
*/
|
|
126
|
+
function resolvePerformanceConfig(config) {
|
|
127
|
+
if (!config) {
|
|
128
|
+
return {
|
|
129
|
+
...DEFAULT_PERFORMANCE_CONFIG
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
enableCache: config.enableCache ?? DEFAULT_PERFORMANCE_CONFIG.enableCache,
|
|
134
|
+
cacheSize: config.cacheSize ?? DEFAULT_PERFORMANCE_CONFIG.cacheSize,
|
|
135
|
+
enableQuadTree: config.enableQuadTree ?? DEFAULT_PERFORMANCE_CONFIG.enableQuadTree,
|
|
136
|
+
earlyTermination: config.earlyTermination ?? DEFAULT_PERFORMANCE_CONFIG.earlyTermination
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Resolve debug configuration
|
|
142
|
+
*/
|
|
143
|
+
function resolveDebugConfig(config) {
|
|
144
|
+
if (!config) {
|
|
145
|
+
return {
|
|
146
|
+
...DEFAULT_DEBUG_CONFIG
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
enableLogging: config.enableLogging ?? DEFAULT_DEBUG_CONFIG.enableLogging,
|
|
151
|
+
enableMetrics: config.enableMetrics ?? DEFAULT_DEBUG_CONFIG.enableMetrics,
|
|
152
|
+
logLevel: config.logLevel ?? DEFAULT_DEBUG_CONFIG.logLevel
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Resolve options by merging user options with defaults
|
|
158
|
+
*/
|
|
159
|
+
function resolveOptions(options = {}) {
|
|
160
|
+
// Validate and fix options first
|
|
161
|
+
const validatedOptions = validateAndFixOptions(options);
|
|
162
|
+
const step = validatedOptions.step ?? _defaults.defaults.step;
|
|
163
|
+
const maxLoopCount = validatedOptions.maxLoopCount ?? _defaults.defaults.maxLoopCount;
|
|
164
|
+
const precision = validatedOptions.precision ?? _defaults.defaults.precision;
|
|
165
|
+
const maxDirectionChange = validatedOptions.maxDirectionChange ?? _defaults.defaults.maxDirectionChange;
|
|
166
|
+
const startDirections = validatedOptions.startDirections ?? _defaults.defaults.startDirections;
|
|
167
|
+
const endDirections = validatedOptions.endDirections ?? _defaults.defaults.endDirections;
|
|
168
|
+
const excludeNodes = validatedOptions.excludeNodes ?? _defaults.defaults.excludeNodes;
|
|
169
|
+
const excludeShapes = validatedOptions.excludeShapes ?? _defaults.defaults.excludeShapes;
|
|
170
|
+
const excludeTerminals = validatedOptions.excludeTerminals ?? _defaults.defaults.excludeTerminals;
|
|
171
|
+
const borderRadius = validatedOptions.borderRadius ?? _defaults.defaults.borderRadius;
|
|
172
|
+
const extensionDistance = validatedOptions.extensionDistance ?? _defaults.defaults.extensionDistance;
|
|
173
|
+
const penalties = validatedOptions.penalties ?? _defaults.defaults.penalties;
|
|
174
|
+
const fallbackRoute = validatedOptions.fallbackRoute;
|
|
175
|
+
|
|
176
|
+
// Convert padding to paddingBox
|
|
177
|
+
const padding = validatedOptions.padding ?? _defaults.defaults.padding;
|
|
178
|
+
const sides = normalizePadding(padding);
|
|
179
|
+
const paddingBox = {
|
|
180
|
+
x: -sides.left,
|
|
181
|
+
y: -sides.top,
|
|
182
|
+
width: sides.left + sides.right,
|
|
183
|
+
height: sides.top + sides.bottom
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// Calculate cost (same as step)
|
|
187
|
+
const cost = step;
|
|
188
|
+
|
|
189
|
+
// Calculate directions array with offsets and costs
|
|
190
|
+
const directions = [{
|
|
191
|
+
cost,
|
|
192
|
+
offsetX: step,
|
|
193
|
+
offsetY: 0,
|
|
194
|
+
angle: 0
|
|
195
|
+
}, {
|
|
196
|
+
cost,
|
|
197
|
+
offsetX: -step,
|
|
198
|
+
offsetY: 0,
|
|
199
|
+
angle: 0
|
|
200
|
+
}, {
|
|
201
|
+
cost,
|
|
202
|
+
offsetX: 0,
|
|
203
|
+
offsetY: step,
|
|
204
|
+
angle: 0
|
|
205
|
+
}, {
|
|
206
|
+
cost,
|
|
207
|
+
offsetX: 0,
|
|
208
|
+
offsetY: -step,
|
|
209
|
+
angle: 0
|
|
210
|
+
}];
|
|
211
|
+
|
|
212
|
+
// Calculate angle for each direction
|
|
213
|
+
directions.forEach(direction => {
|
|
214
|
+
const point1 = new _geometry.Point(0, 0);
|
|
215
|
+
const point2 = new _geometry.Point(direction.offsetX, direction.offsetY);
|
|
216
|
+
direction.angle = normalizeAngle(point1.theta(point2));
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// Resolve new configuration sections
|
|
220
|
+
const adaptiveStep = resolveAdaptiveStepConfig(validatedOptions.adaptiveStep);
|
|
221
|
+
const performance = resolvePerformanceConfig(validatedOptions.performance);
|
|
222
|
+
const debug = resolveDebugConfig(validatedOptions.debug);
|
|
223
|
+
return {
|
|
224
|
+
step,
|
|
225
|
+
maxLoopCount,
|
|
226
|
+
precision,
|
|
227
|
+
maxDirectionChange,
|
|
228
|
+
startDirections,
|
|
229
|
+
endDirections,
|
|
230
|
+
excludeNodes,
|
|
231
|
+
excludeShapes,
|
|
232
|
+
excludeTerminals,
|
|
233
|
+
paddingBox,
|
|
234
|
+
borderRadius,
|
|
235
|
+
extensionDistance,
|
|
236
|
+
sourcePosition: validatedOptions.sourcePosition,
|
|
237
|
+
targetPosition: validatedOptions.targetPosition,
|
|
238
|
+
directionMap: _defaults.directionMap,
|
|
239
|
+
directions,
|
|
240
|
+
penalties,
|
|
241
|
+
cost,
|
|
242
|
+
fallbackRoute,
|
|
243
|
+
previousDirectionAngle: undefined,
|
|
244
|
+
adaptiveStep,
|
|
245
|
+
performance,
|
|
246
|
+
debug
|
|
247
|
+
};
|
|
248
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Point } from '../geometry';
|
|
2
|
+
import type { AdaptiveStepConfig } from '../utils/AdaptiveStepCalculator';
|
|
3
|
+
/**
|
|
4
|
+
* Direction type for routing
|
|
5
|
+
*/
|
|
6
|
+
export type Direction = 'top' | 'right' | 'bottom' | 'left';
|
|
7
|
+
/**
|
|
8
|
+
* ReactFlow internal node structure
|
|
9
|
+
* Based on ReactFlow's InternalNodeBase type
|
|
10
|
+
*/
|
|
11
|
+
export interface InternalNode {
|
|
12
|
+
id: string;
|
|
13
|
+
position: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
internals: {
|
|
18
|
+
positionAbsolute: {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
measured?: {
|
|
24
|
+
width?: number;
|
|
25
|
+
height?: number;
|
|
26
|
+
};
|
|
27
|
+
width?: number;
|
|
28
|
+
height?: number;
|
|
29
|
+
initialWidth?: number;
|
|
30
|
+
initialHeight?: number;
|
|
31
|
+
type?: string;
|
|
32
|
+
[key: string]: any;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Node lookup map type (ReactFlow's internal structure)
|
|
36
|
+
*/
|
|
37
|
+
export type NodeLookup = Map<string, InternalNode>;
|
|
38
|
+
/**
|
|
39
|
+
* Performance optimization configuration
|
|
40
|
+
*/
|
|
41
|
+
export interface PerformanceConfig {
|
|
42
|
+
/** Enable path caching */
|
|
43
|
+
enableCache?: boolean;
|
|
44
|
+
/** Maximum cache size */
|
|
45
|
+
cacheSize?: number;
|
|
46
|
+
/** Enable QuadTree for obstacle queries */
|
|
47
|
+
enableQuadTree?: boolean;
|
|
48
|
+
/** Enable early termination when good path found */
|
|
49
|
+
earlyTermination?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Debug configuration
|
|
53
|
+
*/
|
|
54
|
+
export interface DebugConfig {
|
|
55
|
+
/** Enable logging */
|
|
56
|
+
enableLogging?: boolean;
|
|
57
|
+
/** Enable performance metrics collection */
|
|
58
|
+
enableMetrics?: boolean;
|
|
59
|
+
/** Log level */
|
|
60
|
+
logLevel?: 'error' | 'warn' | 'info' | 'debug';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Manhattan router configuration options
|
|
64
|
+
*/
|
|
65
|
+
export interface ManhattanRouterOptions {
|
|
66
|
+
/**
|
|
67
|
+
* The size of step to find a route (the grid of the manhattan pathfinder)
|
|
68
|
+
* @default 10
|
|
69
|
+
*/
|
|
70
|
+
step?: number;
|
|
71
|
+
/**
|
|
72
|
+
* The number of route finding loops that cause the router to abort and return fallback route instead
|
|
73
|
+
* @default 2000
|
|
74
|
+
*/
|
|
75
|
+
maxLoopCount?: number;
|
|
76
|
+
/**
|
|
77
|
+
* The number of decimal places to round floating point coordinates
|
|
78
|
+
* @default 1
|
|
79
|
+
*/
|
|
80
|
+
precision?: number;
|
|
81
|
+
/**
|
|
82
|
+
* The maximum change of direction (in degrees)
|
|
83
|
+
* @default 90
|
|
84
|
+
*/
|
|
85
|
+
maxDirectionChange?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Possible starting directions from a node
|
|
88
|
+
* @default ['top', 'right', 'bottom', 'left']
|
|
89
|
+
*/
|
|
90
|
+
startDirections?: Direction[];
|
|
91
|
+
/**
|
|
92
|
+
* Possible ending directions to a node
|
|
93
|
+
* @default ['top', 'right', 'bottom', 'left']
|
|
94
|
+
*/
|
|
95
|
+
endDirections?: Direction[];
|
|
96
|
+
/**
|
|
97
|
+
* Should certain nodes not be considered as obstacles?
|
|
98
|
+
*/
|
|
99
|
+
excludeNodes?: string[];
|
|
100
|
+
/**
|
|
101
|
+
* Should certain types of nodes not be considered as obstacles?
|
|
102
|
+
*/
|
|
103
|
+
excludeShapes?: string[];
|
|
104
|
+
/**
|
|
105
|
+
* Should the source and/or target not be considered as obstacles?
|
|
106
|
+
*/
|
|
107
|
+
excludeTerminals?: ('source' | 'target')[];
|
|
108
|
+
/**
|
|
109
|
+
* The padding applied on the element bounding boxes
|
|
110
|
+
*/
|
|
111
|
+
padding?: number | {
|
|
112
|
+
top: number;
|
|
113
|
+
right: number;
|
|
114
|
+
bottom: number;
|
|
115
|
+
left: number;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Border radius for rounded corners at path turns (in pixels)
|
|
119
|
+
* Set to 0 for sharp corners
|
|
120
|
+
* @default 5
|
|
121
|
+
*/
|
|
122
|
+
borderRadius?: number;
|
|
123
|
+
/**
|
|
124
|
+
* Extension distance from node edge for path start/end points (in pixels)
|
|
125
|
+
* This controls how far the path extends away from the node before turning
|
|
126
|
+
* @default 20
|
|
127
|
+
*/
|
|
128
|
+
extensionDistance?: number;
|
|
129
|
+
/**
|
|
130
|
+
* Source position (from ReactFlow)
|
|
131
|
+
* Used for smart point generation
|
|
132
|
+
*/
|
|
133
|
+
sourcePosition?: string;
|
|
134
|
+
/**
|
|
135
|
+
* Target position (from ReactFlow)
|
|
136
|
+
* Used for smart point generation
|
|
137
|
+
*/
|
|
138
|
+
targetPosition?: string;
|
|
139
|
+
/**
|
|
140
|
+
* A penalty received for direction change
|
|
141
|
+
*/
|
|
142
|
+
penalties?: {
|
|
143
|
+
[angle: number]: number;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Fallback route function when pathfinding fails
|
|
147
|
+
*/
|
|
148
|
+
fallbackRoute?: (from: Point, to: Point) => Point[];
|
|
149
|
+
/**
|
|
150
|
+
* Adaptive step configuration
|
|
151
|
+
* Automatically adjusts step size based on node density and path distance
|
|
152
|
+
*/
|
|
153
|
+
adaptiveStep?: Partial<AdaptiveStepConfig>;
|
|
154
|
+
/**
|
|
155
|
+
* Performance optimization configuration
|
|
156
|
+
*/
|
|
157
|
+
performance?: PerformanceConfig;
|
|
158
|
+
/**
|
|
159
|
+
* Debug configuration
|
|
160
|
+
*/
|
|
161
|
+
debug?: DebugConfig;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Resolved options with all defaults applied
|
|
165
|
+
*/
|
|
166
|
+
export interface ResolvedOptions {
|
|
167
|
+
step: number;
|
|
168
|
+
maxLoopCount: number;
|
|
169
|
+
precision: number;
|
|
170
|
+
maxDirectionChange: number;
|
|
171
|
+
startDirections: Direction[];
|
|
172
|
+
endDirections: Direction[];
|
|
173
|
+
excludeNodes: string[];
|
|
174
|
+
excludeShapes: string[];
|
|
175
|
+
excludeTerminals: ('source' | 'target')[];
|
|
176
|
+
paddingBox: {
|
|
177
|
+
x: number;
|
|
178
|
+
y: number;
|
|
179
|
+
width: number;
|
|
180
|
+
height: number;
|
|
181
|
+
};
|
|
182
|
+
borderRadius: number;
|
|
183
|
+
extensionDistance: number;
|
|
184
|
+
sourcePosition?: string;
|
|
185
|
+
targetPosition?: string;
|
|
186
|
+
directionMap: {
|
|
187
|
+
top: Point;
|
|
188
|
+
right: Point;
|
|
189
|
+
bottom: Point;
|
|
190
|
+
left: Point;
|
|
191
|
+
};
|
|
192
|
+
directions: Array<{
|
|
193
|
+
cost: number;
|
|
194
|
+
offsetX: number;
|
|
195
|
+
offsetY: number;
|
|
196
|
+
angle?: number;
|
|
197
|
+
gridOffsetX?: number;
|
|
198
|
+
gridOffsetY?: number;
|
|
199
|
+
}>;
|
|
200
|
+
penalties: {
|
|
201
|
+
[angle: number]: number;
|
|
202
|
+
};
|
|
203
|
+
cost: number;
|
|
204
|
+
fallbackRoute?: (from: Point, to: Point) => Point[];
|
|
205
|
+
previousDirectionAngle?: number | null;
|
|
206
|
+
adaptiveStep: AdaptiveStepConfig;
|
|
207
|
+
performance: Required<PerformanceConfig>;
|
|
208
|
+
debug: Required<DebugConfig>;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PathCache - LRU cache for computed paths
|
|
3
|
+
* Feature: manhattan-optimization
|
|
4
|
+
*
|
|
5
|
+
* Implements a Least Recently Used (LRU) cache for storing computed paths.
|
|
6
|
+
* This improves performance by avoiding redundant path calculations for
|
|
7
|
+
* identical source-target-options combinations.
|
|
8
|
+
*
|
|
9
|
+
* Requirements: 3.4
|
|
10
|
+
*/
|
|
11
|
+
import { Point, Rectangle } from '../geometry';
|
|
12
|
+
import type { ResolvedOptions } from '../options';
|
|
13
|
+
/**
|
|
14
|
+
* Cache entry containing the computed path and metadata
|
|
15
|
+
*/
|
|
16
|
+
export interface CacheEntry {
|
|
17
|
+
path: Point[];
|
|
18
|
+
timestamp: number;
|
|
19
|
+
hitCount: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for PathCache
|
|
23
|
+
*/
|
|
24
|
+
export interface PathCacheConfig {
|
|
25
|
+
/** Maximum number of entries in the cache */
|
|
26
|
+
maxSize: number;
|
|
27
|
+
/** Time-to-live in milliseconds (0 = no expiration) */
|
|
28
|
+
ttl: number;
|
|
29
|
+
/** Whether caching is enabled */
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate a cache key from path parameters
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateCacheKey(sourceBBox: Rectangle, targetBBox: Rectangle, sourceAnchor: Point, targetAnchor: Point, options: ResolvedOptions): string;
|
|
36
|
+
/**
|
|
37
|
+
* LRU Cache for computed paths
|
|
38
|
+
*/
|
|
39
|
+
export declare class PathCache {
|
|
40
|
+
private cache;
|
|
41
|
+
private config;
|
|
42
|
+
private hits;
|
|
43
|
+
private misses;
|
|
44
|
+
constructor(config?: Partial<PathCacheConfig>);
|
|
45
|
+
/**
|
|
46
|
+
* Get a cached path if available and not expired
|
|
47
|
+
*/
|
|
48
|
+
get(key: string): Point[] | null;
|
|
49
|
+
/**
|
|
50
|
+
* Store a path in the cache
|
|
51
|
+
*/
|
|
52
|
+
set(key: string, path: Point[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a key exists in the cache (without updating LRU order)
|
|
55
|
+
*/
|
|
56
|
+
has(key: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Clear all cached entries
|
|
59
|
+
*/
|
|
60
|
+
clear(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get cache statistics
|
|
63
|
+
*/
|
|
64
|
+
getStats(): {
|
|
65
|
+
size: number;
|
|
66
|
+
maxSize: number;
|
|
67
|
+
hits: number;
|
|
68
|
+
misses: number;
|
|
69
|
+
hitRate: number;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Update cache configuration
|
|
73
|
+
*/
|
|
74
|
+
updateConfig(config: Partial<PathCacheConfig>): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get current configuration
|
|
77
|
+
*/
|
|
78
|
+
getConfig(): PathCacheConfig;
|
|
79
|
+
/**
|
|
80
|
+
* Remove expired entries (useful for periodic cleanup)
|
|
81
|
+
*/
|
|
82
|
+
cleanup(): number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the global path cache instance
|
|
86
|
+
*/
|
|
87
|
+
export declare function getGlobalPathCache(): PathCache;
|
|
88
|
+
/**
|
|
89
|
+
* Reset the global path cache (useful for testing)
|
|
90
|
+
*/
|
|
91
|
+
export declare function resetGlobalPathCache(): void;
|
|
92
|
+
//# sourceMappingURL=PathCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathCache.d.ts","sourceRoot":"","sources":["../../src/pathfinder/PathCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAA;CACjB;AAWD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,SAAS,EACrB,YAAY,EAAE,KAAK,EACnB,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,eAAe,GACvB,MAAM,CAsBR;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAKjD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,IAAI;IAiChC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;IAoBrC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAsBzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,QAAQ,IAAI;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;KAChB;IAWD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAiBpD;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,OAAO,IAAI,MAAM;CAiBlB;AAOD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,CAK9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
|