@rxflow/manhattan 0.0.2-alpha.8 → 0.0.2

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.
Files changed (157) hide show
  1. package/README.md +214 -10
  2. package/esm/getManHattanPath.js +92 -69
  3. package/esm/obstacle/ObstacleMap.js +218 -99
  4. package/esm/obstacle/QuadTree.js +488 -0
  5. package/esm/options/resolver.js +147 -18
  6. package/esm/pathfinder/PathCache.js +278 -0
  7. package/esm/pathfinder/findRoute.js +98 -44
  8. package/esm/pathfinder/index.js +2 -1
  9. package/esm/svg/pathConverter.js +170 -1
  10. package/esm/utils/AdaptiveStepCalculator.js +252 -0
  11. package/esm/utils/ErrorRecovery.js +499 -0
  12. package/esm/utils/GlobalGrid.js +259 -0
  13. package/esm/utils/PerformanceMonitor.js +360 -0
  14. package/esm/utils/getAnchorPoints.js +0 -4
  15. package/esm/utils/grid.js +18 -13
  16. package/esm/utils/heuristics.js +144 -0
  17. package/esm/utils/index.js +7 -1
  18. package/esm/utils/pathProcessing.js +270 -0
  19. package/esm/utils/pathValidation.js +0 -1
  20. package/esm/utils/rect.js +11 -4
  21. package/esm/utils/route.js +18 -2
  22. package/package.json +10 -2
  23. package/cjs/geometry/Line.d.ts +0 -21
  24. package/cjs/geometry/Line.d.ts.map +0 -1
  25. package/cjs/geometry/Line.js +0 -88
  26. package/cjs/geometry/Point.d.ts +0 -49
  27. package/cjs/geometry/Point.d.ts.map +0 -1
  28. package/cjs/geometry/Point.js +0 -94
  29. package/cjs/geometry/Rectangle.d.ts +0 -41
  30. package/cjs/geometry/Rectangle.d.ts.map +0 -1
  31. package/cjs/geometry/Rectangle.js +0 -65
  32. package/cjs/geometry/collision.d.ts +0 -15
  33. package/cjs/geometry/collision.d.ts.map +0 -1
  34. package/cjs/geometry/collision.js +0 -81
  35. package/cjs/geometry/index.d.ts +0 -5
  36. package/cjs/geometry/index.d.ts.map +0 -1
  37. package/cjs/geometry/index.js +0 -45
  38. package/cjs/getManHattanPath.d.ts +0 -53
  39. package/cjs/getManHattanPath.d.ts.map +0 -1
  40. package/cjs/getManHattanPath.js +0 -418
  41. package/cjs/index.d.ts +0 -16
  42. package/cjs/index.d.ts.map +0 -1
  43. package/cjs/index.js +0 -117
  44. package/cjs/obstacle/ObstacleMap.d.ts +0 -34
  45. package/cjs/obstacle/ObstacleMap.d.ts.map +0 -1
  46. package/cjs/obstacle/ObstacleMap.js +0 -223
  47. package/cjs/obstacle/index.d.ts +0 -2
  48. package/cjs/obstacle/index.d.ts.map +0 -1
  49. package/cjs/obstacle/index.js +0 -12
  50. package/cjs/options/defaults.d.ts +0 -16
  51. package/cjs/options/defaults.d.ts.map +0 -1
  52. package/cjs/options/defaults.js +0 -39
  53. package/cjs/options/index.d.ts +0 -4
  54. package/cjs/options/index.d.ts.map +0 -1
  55. package/cjs/options/index.js +0 -38
  56. package/cjs/options/resolver.d.ts +0 -10
  57. package/cjs/options/resolver.d.ts.map +0 -1
  58. package/cjs/options/resolver.js +0 -120
  59. package/cjs/options/types.d.ts +0 -169
  60. package/cjs/options/types.d.ts.map +0 -1
  61. package/cjs/options/types.js +0 -5
  62. package/cjs/pathfinder/SortedSet.d.ts +0 -35
  63. package/cjs/pathfinder/SortedSet.d.ts.map +0 -1
  64. package/cjs/pathfinder/SortedSet.js +0 -95
  65. package/cjs/pathfinder/findRoute.d.ts +0 -8
  66. package/cjs/pathfinder/findRoute.d.ts.map +0 -1
  67. package/cjs/pathfinder/findRoute.js +0 -330
  68. package/cjs/pathfinder/index.d.ts +0 -3
  69. package/cjs/pathfinder/index.d.ts.map +0 -1
  70. package/cjs/pathfinder/index.js +0 -19
  71. package/cjs/svg/index.d.ts +0 -3
  72. package/cjs/svg/index.d.ts.map +0 -1
  73. package/cjs/svg/index.js +0 -31
  74. package/cjs/svg/pathConverter.d.ts +0 -10
  75. package/cjs/svg/pathConverter.d.ts.map +0 -1
  76. package/cjs/svg/pathConverter.js +0 -116
  77. package/cjs/svg/pathParser.d.ts +0 -11
  78. package/cjs/svg/pathParser.d.ts.map +0 -1
  79. package/cjs/svg/pathParser.js +0 -76
  80. package/cjs/utils/direction.d.ts +0 -24
  81. package/cjs/utils/direction.d.ts.map +0 -1
  82. package/cjs/utils/direction.js +0 -54
  83. package/cjs/utils/getAnchorPoints.d.ts +0 -15
  84. package/cjs/utils/getAnchorPoints.d.ts.map +0 -1
  85. package/cjs/utils/getAnchorPoints.js +0 -75
  86. package/cjs/utils/grid.d.ts +0 -27
  87. package/cjs/utils/grid.d.ts.map +0 -1
  88. package/cjs/utils/grid.js +0 -66
  89. package/cjs/utils/index.d.ts +0 -8
  90. package/cjs/utils/index.d.ts.map +0 -1
  91. package/cjs/utils/index.js +0 -82
  92. package/cjs/utils/node.d.ts +0 -27
  93. package/cjs/utils/node.d.ts.map +0 -1
  94. package/cjs/utils/node.js +0 -36
  95. package/cjs/utils/pathValidation.d.ts +0 -11
  96. package/cjs/utils/pathValidation.d.ts.map +0 -1
  97. package/cjs/utils/pathValidation.js +0 -130
  98. package/cjs/utils/rect.d.ts +0 -9
  99. package/cjs/utils/rect.d.ts.map +0 -1
  100. package/cjs/utils/rect.js +0 -103
  101. package/cjs/utils/route.d.ts +0 -19
  102. package/cjs/utils/route.d.ts.map +0 -1
  103. package/cjs/utils/route.js +0 -76
  104. package/esm/geometry/Line.d.ts +0 -21
  105. package/esm/geometry/Line.d.ts.map +0 -1
  106. package/esm/geometry/Point.d.ts +0 -49
  107. package/esm/geometry/Point.d.ts.map +0 -1
  108. package/esm/geometry/Rectangle.d.ts +0 -41
  109. package/esm/geometry/Rectangle.d.ts.map +0 -1
  110. package/esm/geometry/collision.d.ts +0 -15
  111. package/esm/geometry/collision.d.ts.map +0 -1
  112. package/esm/geometry/index.d.ts +0 -5
  113. package/esm/geometry/index.d.ts.map +0 -1
  114. package/esm/getManHattanPath.d.ts +0 -53
  115. package/esm/getManHattanPath.d.ts.map +0 -1
  116. package/esm/index.d.ts +0 -16
  117. package/esm/index.d.ts.map +0 -1
  118. package/esm/obstacle/ObstacleMap.d.ts +0 -34
  119. package/esm/obstacle/ObstacleMap.d.ts.map +0 -1
  120. package/esm/obstacle/index.d.ts +0 -2
  121. package/esm/obstacle/index.d.ts.map +0 -1
  122. package/esm/options/defaults.d.ts +0 -16
  123. package/esm/options/defaults.d.ts.map +0 -1
  124. package/esm/options/index.d.ts +0 -4
  125. package/esm/options/index.d.ts.map +0 -1
  126. package/esm/options/resolver.d.ts +0 -10
  127. package/esm/options/resolver.d.ts.map +0 -1
  128. package/esm/options/types.d.ts +0 -169
  129. package/esm/options/types.d.ts.map +0 -1
  130. package/esm/pathfinder/SortedSet.d.ts +0 -35
  131. package/esm/pathfinder/SortedSet.d.ts.map +0 -1
  132. package/esm/pathfinder/findRoute.d.ts +0 -8
  133. package/esm/pathfinder/findRoute.d.ts.map +0 -1
  134. package/esm/pathfinder/index.d.ts +0 -3
  135. package/esm/pathfinder/index.d.ts.map +0 -1
  136. package/esm/svg/index.d.ts +0 -3
  137. package/esm/svg/index.d.ts.map +0 -1
  138. package/esm/svg/pathConverter.d.ts +0 -10
  139. package/esm/svg/pathConverter.d.ts.map +0 -1
  140. package/esm/svg/pathParser.d.ts +0 -11
  141. package/esm/svg/pathParser.d.ts.map +0 -1
  142. package/esm/utils/direction.d.ts +0 -24
  143. package/esm/utils/direction.d.ts.map +0 -1
  144. package/esm/utils/getAnchorPoints.d.ts +0 -15
  145. package/esm/utils/getAnchorPoints.d.ts.map +0 -1
  146. package/esm/utils/grid.d.ts +0 -27
  147. package/esm/utils/grid.d.ts.map +0 -1
  148. package/esm/utils/index.d.ts +0 -8
  149. package/esm/utils/index.d.ts.map +0 -1
  150. package/esm/utils/node.d.ts +0 -27
  151. package/esm/utils/node.d.ts.map +0 -1
  152. package/esm/utils/pathValidation.d.ts +0 -11
  153. package/esm/utils/pathValidation.d.ts.map +0 -1
  154. package/esm/utils/rect.d.ts +0 -9
  155. package/esm/utils/rect.d.ts.map +0 -1
  156. package/esm/utils/route.d.ts +0 -19
  157. package/esm/utils/route.d.ts.map +0 -1
@@ -0,0 +1,252 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
7
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
9
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
10
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
+ /**
14
+ * AdaptiveStepCalculator - 自适应步长计算器
15
+ *
16
+ * 根据场景自动调整网格步长,平衡性能和路径质量
17
+ * - 高密度区域使用小步长,提高路径精度
18
+ * - 长距离路径使用大步长,提高计算性能
19
+ *
20
+ * Feature: manhattan-optimization
21
+ * Requirements: 2.3, 2.4
22
+ */
23
+
24
+ /**
25
+ * 自适应步长配置
26
+ */
27
+
28
+ /**
29
+ * 默认自适应步长配置
30
+ */
31
+ export var DEFAULT_ADAPTIVE_STEP_CONFIG = {
32
+ enabled: false,
33
+ minStep: 5,
34
+ maxStep: 20,
35
+ densityBased: {
36
+ enabled: true,
37
+ threshold: 0.5 // 每10000平方像素0.5个节点
38
+ },
39
+ distanceBased: {
40
+ enabled: true,
41
+ shortPathThreshold: 200,
42
+ longPathThreshold: 800
43
+ }
44
+ };
45
+
46
+ /**
47
+ * 自适应步长计算器
48
+ */
49
+ export var AdaptiveStepCalculator = /*#__PURE__*/function () {
50
+ function AdaptiveStepCalculator() {
51
+ var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
52
+ _classCallCheck(this, AdaptiveStepCalculator);
53
+ _defineProperty(this, "config", void 0);
54
+ this.config = this.mergeConfig(config);
55
+ }
56
+
57
+ /**
58
+ * 合并配置与默认值
59
+ */
60
+ _createClass(AdaptiveStepCalculator, [{
61
+ key: "mergeConfig",
62
+ value: function mergeConfig(config) {
63
+ var _config$enabled, _config$minStep, _config$maxStep, _config$densityBased$, _config$densityBased, _config$densityBased$2, _config$densityBased2, _config$distanceBased, _config$distanceBased2, _config$distanceBased3, _config$distanceBased4, _config$distanceBased5, _config$distanceBased6;
64
+ return {
65
+ enabled: (_config$enabled = config.enabled) !== null && _config$enabled !== void 0 ? _config$enabled : DEFAULT_ADAPTIVE_STEP_CONFIG.enabled,
66
+ minStep: (_config$minStep = config.minStep) !== null && _config$minStep !== void 0 ? _config$minStep : DEFAULT_ADAPTIVE_STEP_CONFIG.minStep,
67
+ maxStep: (_config$maxStep = config.maxStep) !== null && _config$maxStep !== void 0 ? _config$maxStep : DEFAULT_ADAPTIVE_STEP_CONFIG.maxStep,
68
+ densityBased: {
69
+ enabled: (_config$densityBased$ = (_config$densityBased = config.densityBased) === null || _config$densityBased === void 0 ? void 0 : _config$densityBased.enabled) !== null && _config$densityBased$ !== void 0 ? _config$densityBased$ : DEFAULT_ADAPTIVE_STEP_CONFIG.densityBased.enabled,
70
+ threshold: (_config$densityBased$2 = (_config$densityBased2 = config.densityBased) === null || _config$densityBased2 === void 0 ? void 0 : _config$densityBased2.threshold) !== null && _config$densityBased$2 !== void 0 ? _config$densityBased$2 : DEFAULT_ADAPTIVE_STEP_CONFIG.densityBased.threshold
71
+ },
72
+ distanceBased: {
73
+ enabled: (_config$distanceBased = (_config$distanceBased2 = config.distanceBased) === null || _config$distanceBased2 === void 0 ? void 0 : _config$distanceBased2.enabled) !== null && _config$distanceBased !== void 0 ? _config$distanceBased : DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.enabled,
74
+ shortPathThreshold: (_config$distanceBased3 = (_config$distanceBased4 = config.distanceBased) === null || _config$distanceBased4 === void 0 ? void 0 : _config$distanceBased4.shortPathThreshold) !== null && _config$distanceBased3 !== void 0 ? _config$distanceBased3 : DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.shortPathThreshold,
75
+ longPathThreshold: (_config$distanceBased5 = (_config$distanceBased6 = config.distanceBased) === null || _config$distanceBased6 === void 0 ? void 0 : _config$distanceBased6.longPathThreshold) !== null && _config$distanceBased5 !== void 0 ? _config$distanceBased5 : DEFAULT_ADAPTIVE_STEP_CONFIG.distanceBased.longPathThreshold
76
+ }
77
+ };
78
+ }
79
+
80
+ /**
81
+ * 计算节点密度
82
+ * @param nodeLookup 节点查找表
83
+ * @returns 密度值(节点数/10000平方像素)
84
+ */
85
+ }, {
86
+ key: "calculateNodeDensity",
87
+ value: function calculateNodeDensity(nodeLookup) {
88
+ if (nodeLookup.size === 0) return 0;
89
+ var minX = Infinity,
90
+ minY = Infinity;
91
+ var maxX = -Infinity,
92
+ maxY = -Infinity;
93
+ var _iterator = _createForOfIteratorHelper(nodeLookup.values()),
94
+ _step;
95
+ try {
96
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
97
+ var _node$internals$posit, _node$internals, _ref, _node$measured$width, _node$measured, _ref2, _node$measured$height, _node$measured2;
98
+ var node = _step.value;
99
+ var pos = (_node$internals$posit = (_node$internals = node.internals) === null || _node$internals === void 0 ? void 0 : _node$internals.positionAbsolute) !== null && _node$internals$posit !== void 0 ? _node$internals$posit : node.position;
100
+ var _width = (_ref = (_node$measured$width = (_node$measured = node.measured) === null || _node$measured === void 0 ? void 0 : _node$measured.width) !== null && _node$measured$width !== void 0 ? _node$measured$width : node.width) !== null && _ref !== void 0 ? _ref : 100;
101
+ var _height = (_ref2 = (_node$measured$height = (_node$measured2 = node.measured) === null || _node$measured2 === void 0 ? void 0 : _node$measured2.height) !== null && _node$measured$height !== void 0 ? _node$measured$height : node.height) !== null && _ref2 !== void 0 ? _ref2 : 50;
102
+ minX = Math.min(minX, pos.x);
103
+ minY = Math.min(minY, pos.y);
104
+ maxX = Math.max(maxX, pos.x + _width);
105
+ maxY = Math.max(maxY, pos.y + _height);
106
+ }
107
+
108
+ // 计算边界框面积(以10000平方像素为单位)
109
+ } catch (err) {
110
+ _iterator.e(err);
111
+ } finally {
112
+ _iterator.f();
113
+ }
114
+ var width = maxX - minX;
115
+ var height = maxY - minY;
116
+ var area = width * height / 10000;
117
+ if (area <= 0) return 0;
118
+ return nodeLookup.size / area;
119
+ }
120
+
121
+ /**
122
+ * 计算两点之间的曼哈顿距离
123
+ */
124
+ }, {
125
+ key: "calculateDistance",
126
+ value: function calculateDistance(source, target) {
127
+ return Math.abs(target.x - source.x) + Math.abs(target.y - source.y);
128
+ }
129
+
130
+ /**
131
+ * 基于距离计算步长
132
+ */
133
+ }, {
134
+ key: "calculateDistanceBasedStep",
135
+ value: function calculateDistanceBasedStep(distance) {
136
+ var _this$config = this.config,
137
+ minStep = _this$config.minStep,
138
+ maxStep = _this$config.maxStep,
139
+ distanceBased = _this$config.distanceBased;
140
+ if (!distanceBased.enabled) {
141
+ return minStep;
142
+ }
143
+ var shortPathThreshold = distanceBased.shortPathThreshold,
144
+ longPathThreshold = distanceBased.longPathThreshold;
145
+ if (distance <= shortPathThreshold) {
146
+ return minStep;
147
+ }
148
+ if (distance >= longPathThreshold) {
149
+ return maxStep;
150
+ }
151
+
152
+ // 线性插值
153
+ var ratio = (distance - shortPathThreshold) / (longPathThreshold - shortPathThreshold);
154
+ return Math.round(minStep + ratio * (maxStep - minStep));
155
+ }
156
+
157
+ /**
158
+ * 基于密度计算步长
159
+ */
160
+ }, {
161
+ key: "calculateDensityBasedStep",
162
+ value: function calculateDensityBasedStep(density) {
163
+ var _this$config2 = this.config,
164
+ minStep = _this$config2.minStep,
165
+ maxStep = _this$config2.maxStep,
166
+ densityBased = _this$config2.densityBased;
167
+ if (!densityBased.enabled) {
168
+ return maxStep;
169
+ }
170
+
171
+ // 高密度使用小步长
172
+ if (density >= densityBased.threshold) {
173
+ return minStep;
174
+ }
175
+
176
+ // 低密度使用大步长
177
+ if (density <= densityBased.threshold / 2) {
178
+ return maxStep;
179
+ }
180
+
181
+ // 线性插值
182
+ var ratio = (densityBased.threshold - density) / (densityBased.threshold / 2);
183
+ return Math.round(minStep + ratio * (maxStep - minStep));
184
+ }
185
+
186
+ /**
187
+ * 计算自适应步长
188
+ * 综合考虑距离和密度因素
189
+ */
190
+ }, {
191
+ key: "calculateStep",
192
+ value: function calculateStep(sourceNode, targetNode, nodeLookup) {
193
+ var _sourceNode$internals, _sourceNode$internals2, _targetNode$internals, _targetNode$internals2, _ref3, _sourceNode$measured$, _sourceNode$measured, _ref4, _sourceNode$measured$2, _sourceNode$measured2, _ref5, _targetNode$measured$, _targetNode$measured, _ref6, _targetNode$measured$2, _targetNode$measured2;
194
+ if (!this.config.enabled) {
195
+ return this.config.minStep;
196
+ }
197
+
198
+ // 获取源和目标位置
199
+ var sourcePos = (_sourceNode$internals = (_sourceNode$internals2 = sourceNode.internals) === null || _sourceNode$internals2 === void 0 ? void 0 : _sourceNode$internals2.positionAbsolute) !== null && _sourceNode$internals !== void 0 ? _sourceNode$internals : sourceNode.position;
200
+ var targetPos = (_targetNode$internals = (_targetNode$internals2 = targetNode.internals) === null || _targetNode$internals2 === void 0 ? void 0 : _targetNode$internals2.positionAbsolute) !== null && _targetNode$internals !== void 0 ? _targetNode$internals : targetNode.position;
201
+
202
+ // 计算节点中心点
203
+ var sourceWidth = (_ref3 = (_sourceNode$measured$ = (_sourceNode$measured = sourceNode.measured) === null || _sourceNode$measured === void 0 ? void 0 : _sourceNode$measured.width) !== null && _sourceNode$measured$ !== void 0 ? _sourceNode$measured$ : sourceNode.width) !== null && _ref3 !== void 0 ? _ref3 : 100;
204
+ var sourceHeight = (_ref4 = (_sourceNode$measured$2 = (_sourceNode$measured2 = sourceNode.measured) === null || _sourceNode$measured2 === void 0 ? void 0 : _sourceNode$measured2.height) !== null && _sourceNode$measured$2 !== void 0 ? _sourceNode$measured$2 : sourceNode.height) !== null && _ref4 !== void 0 ? _ref4 : 50;
205
+ var targetWidth = (_ref5 = (_targetNode$measured$ = (_targetNode$measured = targetNode.measured) === null || _targetNode$measured === void 0 ? void 0 : _targetNode$measured.width) !== null && _targetNode$measured$ !== void 0 ? _targetNode$measured$ : targetNode.width) !== null && _ref5 !== void 0 ? _ref5 : 100;
206
+ var targetHeight = (_ref6 = (_targetNode$measured$2 = (_targetNode$measured2 = targetNode.measured) === null || _targetNode$measured2 === void 0 ? void 0 : _targetNode$measured2.height) !== null && _targetNode$measured$2 !== void 0 ? _targetNode$measured$2 : targetNode.height) !== null && _ref6 !== void 0 ? _ref6 : 50;
207
+ var sourceCenter = {
208
+ x: sourcePos.x + sourceWidth / 2,
209
+ y: sourcePos.y + sourceHeight / 2
210
+ };
211
+ var targetCenter = {
212
+ x: targetPos.x + targetWidth / 2,
213
+ y: targetPos.y + targetHeight / 2
214
+ };
215
+
216
+ // 计算距离
217
+ var distance = this.calculateDistance(sourceCenter, targetCenter);
218
+
219
+ // 计算密度
220
+ var density = this.calculateNodeDensity(nodeLookup);
221
+
222
+ // 获取基于距离和密度的步长
223
+ var distanceStep = this.calculateDistanceBasedStep(distance);
224
+ var densityStep = this.calculateDensityBasedStep(density);
225
+
226
+ // 取两者中较小的值(更保守的选择)
227
+ var step = Math.min(distanceStep, densityStep);
228
+
229
+ // 确保步长在有效范围内
230
+ return Math.max(this.config.minStep, Math.min(this.config.maxStep, step));
231
+ }
232
+
233
+ /**
234
+ * 获取当前配置
235
+ */
236
+ }, {
237
+ key: "getConfig",
238
+ value: function getConfig() {
239
+ return _objectSpread({}, this.config);
240
+ }
241
+
242
+ /**
243
+ * 更新配置
244
+ */
245
+ }, {
246
+ key: "updateConfig",
247
+ value: function updateConfig(config) {
248
+ this.config = this.mergeConfig(_objectSpread(_objectSpread({}, this.config), config));
249
+ }
250
+ }]);
251
+ return AdaptiveStepCalculator;
252
+ }();