@anov/3d-ability 0.0.142 → 0.0.144

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 (257) hide show
  1. package/dist/business/Animation/motion/index.js +56 -35
  2. package/dist/business/Animation/motion/index.js.map +1 -1
  3. package/dist/business/Animation/type.js +2 -2
  4. package/dist/business/Area/Fence/FenceBase.js +187 -146
  5. package/dist/business/Area/Fence/FenceBase.js.map +1 -1
  6. package/dist/business/Area/Fence/fence_base_01.js +112 -120
  7. package/dist/business/Area/Fence/fence_base_01.js.map +1 -1
  8. package/dist/business/Area/Fence/fence_feeting_01.js +130 -218
  9. package/dist/business/Area/Fence/fence_feeting_01.js.map +1 -1
  10. package/dist/business/Area/Fence/fence_roll_01.js +130 -140
  11. package/dist/business/Area/Fence/fence_roll_01.js.map +1 -1
  12. package/dist/business/Area/FillArea/FillAreaBase.js +126 -87
  13. package/dist/business/Area/FillArea/FillAreaBase.js.map +1 -1
  14. package/dist/business/Area/FillArea/fillArea_face_01.js +98 -72
  15. package/dist/business/Area/FillArea/fillArea_face_01.js.map +1 -1
  16. package/dist/business/Area/FillArea/fillArea_line_01.js +94 -66
  17. package/dist/business/Area/FillArea/fillArea_line_01.js.map +1 -1
  18. package/dist/business/Area/index.js +483 -267
  19. package/dist/business/Area/index.js.map +1 -1
  20. package/dist/business/Area/tool.js +26 -14
  21. package/dist/business/Area/tool.js.map +1 -1
  22. package/dist/business/Base/ObjectLayer.js +46 -21
  23. package/dist/business/Base/ObjectLayer.js.map +1 -1
  24. package/dist/business/Batch/index.js +234 -189
  25. package/dist/business/Batch/index.js.map +1 -1
  26. package/dist/business/Box/index.js +81 -52
  27. package/dist/business/Box/index.js.map +1 -1
  28. package/dist/business/Cylinder/index.js +79 -51
  29. package/dist/business/Cylinder/index.js.map +1 -1
  30. package/dist/business/Flyline/bubble/CircleBubble.js +9 -1
  31. package/dist/business/Flyline/bubble/CircleBubble.js.map +1 -1
  32. package/dist/business/Flyline/bubble/index.js +21 -7
  33. package/dist/business/Flyline/bubble/index.js.map +1 -1
  34. package/dist/business/Flyline/index.js +162 -96
  35. package/dist/business/Flyline/index.js.map +1 -1
  36. package/dist/business/Flyline/line/ArcLine.js +291 -208
  37. package/dist/business/Flyline/line/ArcLine.js.map +1 -1
  38. package/dist/business/Flyline/line/index.js +22 -8
  39. package/dist/business/Flyline/line/index.js.map +1 -1
  40. package/dist/business/HeatMap/HeatMap.js +467 -380
  41. package/dist/business/HeatMap/HeatMap.js.map +1 -1
  42. package/dist/business/HeatMap/core.js +525 -405
  43. package/dist/business/HeatMap/core.js.map +1 -1
  44. package/dist/business/HeatMap/shader.js +3 -69
  45. package/dist/business/HeatMap/shader.js.map +1 -1
  46. package/dist/business/InfoPanel/index.js +242 -201
  47. package/dist/business/InfoPanel/index.js.map +1 -1
  48. package/dist/business/Line/index.js +88 -55
  49. package/dist/business/Line/index.js.map +1 -1
  50. package/dist/business/Mark/KeyframeAnimation.js +176 -145
  51. package/dist/business/Mark/KeyframeAnimation.js.map +1 -1
  52. package/dist/business/Mark/index.js +294 -196
  53. package/dist/business/Mark/index.js.map +1 -1
  54. package/dist/business/Mark/shader/tanhao.js +3 -36
  55. package/dist/business/Mark/shader/tanhao.js.map +1 -1
  56. package/dist/business/Mark/type.js +1 -1
  57. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js +551 -377
  58. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
  59. package/dist/business/MaterialSwitch/inject.js +58 -92
  60. package/dist/business/MaterialSwitch/inject.js.map +1 -1
  61. package/dist/business/MaterialSwitch/shader/finalFade.js +2 -74
  62. package/dist/business/MaterialSwitch/shader/finalFade.js.map +1 -1
  63. package/dist/business/MaterialSwitch/shader/ground.js +16 -95
  64. package/dist/business/MaterialSwitch/shader/ground.js.map +1 -1
  65. package/dist/business/MaterialSwitch/shader/groundBase64.js +3 -9
  66. package/dist/business/MaterialSwitch/shader/groundBase64.js.map +1 -1
  67. package/dist/business/MaterialSwitch/shader/realFade.js +9 -48
  68. package/dist/business/MaterialSwitch/shader/realFade.js.map +1 -1
  69. package/dist/business/Plane/index.js +78 -51
  70. package/dist/business/Plane/index.js.map +1 -1
  71. package/dist/business/Poi/index.js +336 -248
  72. package/dist/business/Poi/index.js.map +1 -1
  73. package/dist/business/Poi/link/Cylinder.js +89 -56
  74. package/dist/business/Poi/link/Cylinder.js.map +1 -1
  75. package/dist/business/Poi/link/Pyramid.js +165 -104
  76. package/dist/business/Poi/link/Pyramid.js.map +1 -1
  77. package/dist/business/Poi/link/index.d.ts +1 -1
  78. package/dist/business/Poi/link/index.js +114 -54
  79. package/dist/business/Poi/link/index.js.map +1 -1
  80. package/dist/business/Poi/panel/index.js +373 -315
  81. package/dist/business/Poi/panel/index.js.map +1 -1
  82. package/dist/business/Poi/panel/utils.js +10 -5
  83. package/dist/business/Poi/panel/utils.js.map +1 -1
  84. package/dist/business/Poi/particle/DoubleCircle.js +107 -71
  85. package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
  86. package/dist/business/Poi/particle/DynamicCircle.js +111 -75
  87. package/dist/business/Poi/particle/DynamicCircle.js.map +1 -1
  88. package/dist/business/Poi/particle/SingleCircle.js +98 -62
  89. package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
  90. package/dist/business/Poi/particle/index.js +117 -49
  91. package/dist/business/Poi/particle/index.js.map +1 -1
  92. package/dist/business/Poi/shader/circle.js +3 -31
  93. package/dist/business/Poi/shader/circle.js.map +1 -1
  94. package/dist/business/Poi/shader/cylinder.js +3 -37
  95. package/dist/business/Poi/shader/cylinder.js.map +1 -1
  96. package/dist/business/Poi/shader/doubleCircle.js +3 -55
  97. package/dist/business/Poi/shader/doubleCircle.js.map +1 -1
  98. package/dist/business/Poi/shader/dynamicCircle.js +3 -67
  99. package/dist/business/Poi/shader/dynamicCircle.js.map +1 -1
  100. package/dist/business/Poi/title/Border.js +27 -7
  101. package/dist/business/Poi/title/Border.js.map +1 -1
  102. package/dist/business/Poi/title/Ellipse.js +27 -7
  103. package/dist/business/Poi/title/Ellipse.js.map +1 -1
  104. package/dist/business/Poi/title/index.js +292 -208
  105. package/dist/business/Poi/title/index.js.map +1 -1
  106. package/dist/business/Poi/tools.js +17 -18
  107. package/dist/business/Poi/tools.js.map +1 -1
  108. package/dist/business/Sphere/index.js +72 -47
  109. package/dist/business/Sphere/index.js.map +1 -1
  110. package/dist/business/Spline/index.js +245 -190
  111. package/dist/business/Spline/index.js.map +1 -1
  112. package/dist/business/SplitBuilding/index.js +536 -327
  113. package/dist/business/SplitBuilding/index.js.map +1 -1
  114. package/dist/business/SplitBuilding/type.js +2 -2
  115. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js +275 -218
  116. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js.map +1 -1
  117. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js +177 -132
  118. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js.map +1 -1
  119. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js +1 -51
  120. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js.map +1 -1
  121. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js +1 -6
  122. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js.map +1 -1
  123. package/dist/business/TrafficComponents/base.js +55 -32
  124. package/dist/business/TrafficComponents/base.js.map +1 -1
  125. package/dist/business/TrafficComponents/utils.js +24 -25
  126. package/dist/business/TrafficComponents/utils.js.map +1 -1
  127. package/dist/business/Utils/Curve.js +56 -40
  128. package/dist/business/Utils/Curve.js.map +1 -1
  129. package/dist/business/Utils/constant.js +1 -1
  130. package/dist/business/Utils/constant.js.map +1 -1
  131. package/dist/business/Utils/defineProps.js +14 -13
  132. package/dist/business/Utils/defineProps.js.map +1 -1
  133. package/dist/business/Utils/round-curve.js +153 -127
  134. package/dist/business/Utils/round-curve.js.map +1 -1
  135. package/dist/business/VideoPanel/index.js +319 -258
  136. package/dist/business/VideoPanel/index.js.map +1 -1
  137. package/dist/business/Water/index.js +108 -78
  138. package/dist/business/Water/index.js.map +1 -1
  139. package/dist/business/Water/types.js +1 -1
  140. package/dist/business/Water/types.js.map +1 -1
  141. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +449 -383
  142. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
  143. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js +142 -107
  144. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js.map +1 -1
  145. package/dist/core/Controls/FirstViewControl/index.js +96 -84
  146. package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
  147. package/dist/core/Controls/ThirdViewControl/action/input.js +98 -77
  148. package/dist/core/Controls/ThirdViewControl/action/input.js.map +1 -1
  149. package/dist/core/Controls/ThirdViewControl/config/constants.js +1 -1
  150. package/dist/core/Controls/ThirdViewControl/config/constants.js.map +1 -1
  151. package/dist/core/Controls/ThirdViewControl/index.js +28 -19
  152. package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
  153. package/dist/core/Controls/ThirdViewControl/player/animation.js +155 -126
  154. package/dist/core/Controls/ThirdViewControl/player/animation.js.map +1 -1
  155. package/dist/core/Controls/ThirdViewControl/player/camera.js +63 -47
  156. package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
  157. package/dist/core/Controls/ThirdViewControl/player/control.js +49 -39
  158. package/dist/core/Controls/ThirdViewControl/player/control.js.map +1 -1
  159. package/dist/core/Controls/ThirdViewControl/player.js +91 -66
  160. package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
  161. package/dist/core/Controls/base.js +30 -14
  162. package/dist/core/Controls/base.js.map +1 -1
  163. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js +131 -92
  164. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js.map +1 -1
  165. package/dist/core/Debug/PerformanceInfo/Performance.js +47 -22
  166. package/dist/core/Debug/PerformanceInfo/Performance.js.map +1 -1
  167. package/dist/core/Light/PointLight/PointLightExt.js +21 -4
  168. package/dist/core/Light/PointLight/PointLightExt.js.map +1 -1
  169. package/dist/core/Material/FinirMaterial/FinirMaterial.js +57 -37
  170. package/dist/core/Material/FinirMaterial/FinirMaterial.js.map +1 -1
  171. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js +153 -116
  172. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js.map +1 -1
  173. package/dist/core/Material/PristineGridMaterial/shader/fragment.js +1 -95
  174. package/dist/core/Material/PristineGridMaterial/shader/fragment.js.map +1 -1
  175. package/dist/core/Material/PristineGridMaterial/shader/vertex.js +1 -26
  176. package/dist/core/Material/PristineGridMaterial/shader/vertex.js.map +1 -1
  177. package/dist/core/Material/SurfaceMaterial/index.js +172 -76
  178. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  179. package/dist/core/Material/decorators.js +11 -6
  180. package/dist/core/Material/decorators.js.map +1 -1
  181. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +12 -16
  182. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
  183. package/dist/core/PostEffects/addBrightnessContrastPass.js +13 -17
  184. package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
  185. package/dist/core/PostEffects/bloomPass.js +10 -17
  186. package/dist/core/PostEffects/bloomPass.js.map +1 -1
  187. package/dist/core/PostEffects/bloomSelect.js +43 -60
  188. package/dist/core/PostEffects/bloomSelect.js.map +1 -1
  189. package/dist/core/PostEffects/colorifyPass.js +13 -17
  190. package/dist/core/PostEffects/colorifyPass.js.map +1 -1
  191. package/dist/core/PostEffects/index.js +22 -28
  192. package/dist/core/PostEffects/index.js.map +1 -1
  193. package/dist/core/PostEffects/outlinePass.js +50 -37
  194. package/dist/core/PostEffects/outlinePass.js.map +1 -1
  195. package/dist/core/PostEffects/postprocessing.js +12 -14
  196. package/dist/core/PostEffects/postprocessing.js.map +1 -1
  197. package/dist/core/PostEffects/saoPass.js +10 -15
  198. package/dist/core/PostEffects/saoPass.js.map +1 -1
  199. package/dist/core/PostEffects/shader/colorify.js +3 -22
  200. package/dist/core/PostEffects/shader/colorify.js.map +1 -1
  201. package/dist/core/PostEffects/shader/gammaCorrectionShader.js +3 -27
  202. package/dist/core/PostEffects/shader/gammaCorrectionShader.js.map +1 -1
  203. package/dist/core/PostEffects/shader/mapping.js +3 -66
  204. package/dist/core/PostEffects/shader/mapping.js.map +1 -1
  205. package/dist/core/PostEffects/shader/thermalMaging.js +3 -28
  206. package/dist/core/PostEffects/shader/thermalMaging.js.map +1 -1
  207. package/dist/core/SceneEffect/grow/grow.js +101 -85
  208. package/dist/core/SceneEffect/grow/grow.js.map +1 -1
  209. package/dist/core/SceneEffect/grow/style_down.js +77 -60
  210. package/dist/core/SceneEffect/grow/style_down.js.map +1 -1
  211. package/dist/core/SceneEffect/grow/style_up.js +81 -64
  212. package/dist/core/SceneEffect/grow/style_up.js.map +1 -1
  213. package/dist/core/SceneEffect/grow/type.js +2 -2
  214. package/dist/core/SceneEffect/grow/type.js.map +1 -1
  215. package/dist/core/WeatherSystem/DynamicWeatherSystem.js +76 -51
  216. package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
  217. package/dist/core/WeatherSystem/hdr/index.js +105 -69
  218. package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
  219. package/dist/core/WeatherSystem/index.js +124 -77
  220. package/dist/core/WeatherSystem/index.js.map +1 -1
  221. package/dist/core/WeatherSystem/objects/fog/index.js +80 -52
  222. package/dist/core/WeatherSystem/objects/fog/index.js.map +1 -1
  223. package/dist/core/WeatherSystem/objects/rain/index.js +84 -72
  224. package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
  225. package/dist/core/WeatherSystem/objects/rain/lineRain.js +118 -88
  226. package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
  227. package/dist/core/WeatherSystem/objects/rain/plane.js +146 -116
  228. package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
  229. package/dist/core/WeatherSystem/objects/rain/point.js +148 -100
  230. package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
  231. package/dist/core/WeatherSystem/objects/sky/cloud.js +104 -71
  232. package/dist/core/WeatherSystem/objects/sky/cloud.js.map +1 -1
  233. package/dist/core/WeatherSystem/objects/sky/index.js +84 -66
  234. package/dist/core/WeatherSystem/objects/sky/index.js.map +1 -1
  235. package/dist/core/WeatherSystem/objects/sky/outline.js +45 -25
  236. package/dist/core/WeatherSystem/objects/sky/outline.js.map +1 -1
  237. package/dist/core/WeatherSystem/shaders/cloud.js +3 -74
  238. package/dist/core/WeatherSystem/shaders/cloud.js.map +1 -1
  239. package/dist/core/WeatherSystem/shaders/fog.js +3 -103
  240. package/dist/core/WeatherSystem/shaders/fog.js.map +1 -1
  241. package/dist/core/WeatherSystem/shaders/rain.js +7 -206
  242. package/dist/core/WeatherSystem/shaders/rain.js.map +1 -1
  243. package/dist/core/WeatherSystem/shaders/sky.js +3 -87
  244. package/dist/core/WeatherSystem/shaders/sky.js.map +1 -1
  245. package/dist/core/WeatherSystem/sky/index.js +135 -104
  246. package/dist/core/WeatherSystem/sky/index.js.map +1 -1
  247. package/dist/core/WeatherSystem/utils/constant.js +38 -44
  248. package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
  249. package/dist/core/WeatherSystem/utils/math.js +25 -18
  250. package/dist/core/WeatherSystem/utils/math.js.map +1 -1
  251. package/dist/core/WeatherSystem/utils/type.js +1 -1
  252. package/dist/core/WeatherSystem/utils/type.js.map +1 -1
  253. package/dist/core/WeatherSystem/weather/index.js +141 -96
  254. package/dist/core/WeatherSystem/weather/index.js.map +1 -1
  255. package/dist/utils/index.js +1 -1
  256. package/dist/utils/index.js.map +1 -1
  257. package/package.json +3 -3
@@ -1,206 +1,251 @@
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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
+ 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); } }
4
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
5
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
6
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
7
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
9
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
10
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
11
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
1
12
  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; }
2
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
3
- 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
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
14
+ 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); }
4
15
  import { Group, Mesh, Quaternion, Vector3 } from '@anov/3d-core';
5
16
  import ObjectLayer from "../Base/ObjectLayer";
6
- export class Batch extends ObjectLayer {
7
- get mesh() {
8
- return this._mesh;
9
- }
10
- get path() {
11
- return this._path;
12
- }
13
- set path(newValue) {
14
- if (newValue === this._path) return;
15
- this._path = newValue;
16
- this.handlePropertyUpdate();
17
- }
18
- get number() {
19
- return this._number;
20
- }
21
- set number(newValue) {
22
- if (newValue === this._number) return;
23
- this._number = Math.max(1, newValue);
24
- this.handlePropertyUpdate();
25
- }
26
- get span() {
27
- return this._span;
28
- }
29
- set span(newValue) {
30
- if (newValue === this._span) return;
31
- this._span = newValue > 0 ? newValue : 10;
32
- this.handlePropertyUpdate();
33
- }
34
- get followTangent() {
35
- return this._followTangent;
36
- }
37
- set followTangent(newValue) {
38
- if (newValue === this._followTangent) return;
39
- this.handlePropertyUpdate();
40
- }
41
- constructor(option) {
42
- super();
43
- _defineProperty(this, "_mesh", void 0);
44
- _defineProperty(this, "_path", void 0);
45
- _defineProperty(this, "_number", void 0);
46
- _defineProperty(this, "_span", void 0);
47
- _defineProperty(this, "_followTangent", void 0);
48
- _defineProperty(this, "_entity", void 0);
49
- _defineProperty(this, "_option", void 0);
50
- const {
51
- path,
52
- number,
53
- span,
54
- entity,
55
- followTangent
56
- } = option;
57
- this._path = path;
58
- this._number = number;
59
- this._span = span;
60
- this._followTangent = followTangent;
61
- this._entity = entity;
62
- this._option = option;
63
- this.init();
64
- }
65
- init() {
66
- var _points;
67
- // 判断是否闭合
68
- const isClosed = this.isEffectivelyClosed(this._path);
69
- let points = [];
70
- if (this.number > 0) points = this.getAdaptiveSpacedPoints(this.path, this.number);else if (this.span && this.span > 0) points = this.getPointsAtDistance(this.path, this.span);
71
- this._mesh = new Group();
72
-
73
- // 模型原始旋转(转换为四元数后叠加)
74
- const originalEuler = this._entity.rotation.clone();
75
- const rotationQuaternion = new Quaternion().setFromEuler(originalEuler);
76
- // 预创建可复用对象减少内存分配
77
- const _tempTangent = new Vector3();
78
- const _lookAtTarget = new Vector3();
79
- (_points = points) === null || _points === void 0 || _points.forEach((point, index) => {
80
- const proxy = this._entity.clone();
81
- proxy.visible = true;
82
- proxy.position.add(point);
83
- if (this._followTangent) {
84
- // 重置旋转
85
- proxy.quaternion.identity();
86
- // 计算当前点在曲线上的参数化位置 (0到1)
87
- const t = index / Math.max(1, points.length - 1);
88
- // 获取精确的切线方向(自动归一化)
89
- this._path.getTangent(t, _tempTangent);
90
- // 计算看向目标点:当前位置 + 切线方向
91
- _lookAtTarget.copy(point).add(_tempTangent);
92
- // 设置模型朝向(默认使用 THREE.Object3D 的默认 UP 方向)
93
- proxy.lookAt(_lookAtTarget);
94
- // 在局部坐标系叠加旋转
95
- proxy.quaternion.multiply(rotationQuaternion);
96
- }
97
- this._mesh.add(proxy);
98
- });
99
- this.add(this._mesh);
100
- }
101
- isEffectivelyClosed(curvePath, tolerance = 0.01) {
102
- if (curvePath.closed) return true;
103
-
104
- // 获取第一个点和最后一个点
105
- const startPoint = curvePath.getPoint(0);
106
- const endPoint = curvePath.getPoint(1);
17
+ export var Batch = /*#__PURE__*/function (_ObjectLayer) {
18
+ _inherits(Batch, _ObjectLayer);
19
+ var _super = _createSuper(Batch);
20
+ function Batch(option) {
21
+ var _this;
22
+ _classCallCheck(this, Batch);
23
+ _this = _super.call(this);
24
+ _defineProperty(_assertThisInitialized(_this), "_mesh", void 0);
25
+ _defineProperty(_assertThisInitialized(_this), "_path", void 0);
26
+ _defineProperty(_assertThisInitialized(_this), "_number", void 0);
27
+ _defineProperty(_assertThisInitialized(_this), "_span", void 0);
28
+ _defineProperty(_assertThisInitialized(_this), "_followTangent", void 0);
29
+ _defineProperty(_assertThisInitialized(_this), "_entity", void 0);
30
+ _defineProperty(_assertThisInitialized(_this), "_option", void 0);
31
+ var path = option.path,
32
+ number = option.number,
33
+ span = option.span,
34
+ entity = option.entity,
35
+ followTangent = option.followTangent;
36
+ _this._path = path;
37
+ _this._number = number;
38
+ _this._span = span;
39
+ _this._followTangent = followTangent;
40
+ _this._entity = entity;
41
+ _this._option = option;
42
+ _this.init();
43
+ return _this;
44
+ }
45
+ _createClass(Batch, [{
46
+ key: "mesh",
47
+ get: function get() {
48
+ return this._mesh;
49
+ }
50
+ }, {
51
+ key: "path",
52
+ get: function get() {
53
+ return this._path;
54
+ },
55
+ set: function set(newValue) {
56
+ if (newValue === this._path) return;
57
+ this._path = newValue;
58
+ this.handlePropertyUpdate();
59
+ }
60
+ }, {
61
+ key: "number",
62
+ get: function get() {
63
+ return this._number;
64
+ },
65
+ set: function set(newValue) {
66
+ if (newValue === this._number) return;
67
+ this._number = Math.max(1, newValue);
68
+ this.handlePropertyUpdate();
69
+ }
70
+ }, {
71
+ key: "span",
72
+ get: function get() {
73
+ return this._span;
74
+ },
75
+ set: function set(newValue) {
76
+ if (newValue === this._span) return;
77
+ this._span = newValue > 0 ? newValue : 10;
78
+ this.handlePropertyUpdate();
79
+ }
80
+ }, {
81
+ key: "followTangent",
82
+ get: function get() {
83
+ return this._followTangent;
84
+ },
85
+ set: function set(newValue) {
86
+ if (newValue === this._followTangent) return;
87
+ this.handlePropertyUpdate();
88
+ }
89
+ }, {
90
+ key: "init",
91
+ value: function init() {
92
+ var _points,
93
+ _this2 = this;
94
+ // 判断是否闭合
95
+ var isClosed = this.isEffectivelyClosed(this._path);
96
+ var points = [];
97
+ if (this.number > 0) points = this.getAdaptiveSpacedPoints(this.path, this.number);else if (this.span && this.span > 0) points = this.getPointsAtDistance(this.path, this.span);
98
+ this._mesh = new Group();
99
+
100
+ // 模型原始旋转(转换为四元数后叠加)
101
+ var originalEuler = this._entity.rotation.clone();
102
+ var rotationQuaternion = new Quaternion().setFromEuler(originalEuler);
103
+ // 预创建可复用对象减少内存分配
104
+ var _tempTangent = new Vector3();
105
+ var _lookAtTarget = new Vector3();
106
+ (_points = points) === null || _points === void 0 || _points.forEach(function (point, index) {
107
+ var proxy = _this2._entity.clone();
108
+ proxy.visible = true;
109
+ proxy.position.add(point);
110
+ if (_this2._followTangent) {
111
+ // 重置旋转
112
+ proxy.quaternion.identity();
113
+ // 计算当前点在曲线上的参数化位置 (0到1)
114
+ var t = index / Math.max(1, points.length - 1);
115
+ // 获取精确的切线方向(自动归一化)
116
+ _this2._path.getTangent(t, _tempTangent);
117
+ // 计算看向目标点:当前位置 + 切线方向
118
+ _lookAtTarget.copy(point).add(_tempTangent);
119
+ // 设置模型朝向(默认使用 THREE.Object3D 的默认 UP 方向)
120
+ proxy.lookAt(_lookAtTarget);
121
+ // 在局部坐标系叠加旋转
122
+ proxy.quaternion.multiply(rotationQuaternion);
123
+ }
124
+ _this2._mesh.add(proxy);
125
+ });
126
+ this.add(this._mesh);
127
+ }
128
+ }, {
129
+ key: "isEffectivelyClosed",
130
+ value: function isEffectivelyClosed(curvePath) {
131
+ var tolerance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;
132
+ if (curvePath.closed) return true;
107
133
 
108
- // 计算距离
109
- const distance = startPoint.distanceTo(endPoint);
134
+ // 获取第一个点和最后一个点
135
+ var startPoint = curvePath.getPoint(0);
136
+ var endPoint = curvePath.getPoint(1);
110
137
 
111
- // 如果距离小于容差,则认为是闭合的
112
- return distance < tolerance;
113
- }
138
+ // 计算距离
139
+ var distance = startPoint.distanceTo(endPoint);
114
140
 
115
- /**
116
- * 从曲线路径上每隔指定距离采样点
117
- * @param {THREE.CurvePath} curvePath - Three.js的CurvePath对象(可以是曲线或直线组合)
118
- * @param {Number} distance - 采样点之间的距离(单位:米)
119
- * @return {Array<THREE.Vector3>} 采样点坐标数组
120
- */
121
- getPointsAtDistance(curvePath, distance) {
122
- // 确保参数有效
123
- if (!curvePath || typeof distance !== 'number' || distance <= 0) {
124
- console.error('Invalid parameters');
125
- return [];
141
+ // 如果距离小于容差,则认为是闭合的
142
+ return distance < tolerance;
126
143
  }
127
- const points = [];
128
-
129
- // 获取曲线总长度
130
- const totalLength = curvePath.getLength();
131
-
132
- // 计算需要的采样点数量
133
- const numSamples = Math.floor(totalLength / distance) + 1;
134
-
135
- // 第一个点总是加入(起点)
136
- points.push(curvePath.getPointAt(0));
137
- let currentU = 0;
138
- // 使用二分查找法找到每个距离点对应的u参数
139
- for (let i = 1; i < numSamples; i++) {
140
- const targetDistance = i * distance;
141
-
142
- // 从上一个点开始查找
143
- let low = currentU;
144
- let high = 1;
145
- let mid, tempDistance;
146
-
147
- // 二分查找法查找对应的u值
148
- while (high - low > 0.0001) {
149
- mid = (low + high) / 2;
150
- tempDistance = curvePath.getLength() * mid;
151
- if (tempDistance < targetDistance) low = mid;else high = mid;
152
- }
153
- currentU = (low + high) / 2;
154
144
 
155
- // 如果已达曲线末端,则退出循环
156
- if (currentU >= 1) break;
145
+ /**
146
+ * 从曲线路径上每隔指定距离采样点
147
+ * @param {THREE.CurvePath} curvePath - Three.js的CurvePath对象(可以是曲线或直线组合)
148
+ * @param {Number} distance - 采样点之间的距离(单位:米)
149
+ * @return {Array<THREE.Vector3>} 采样点坐标数组
150
+ */
151
+ }, {
152
+ key: "getPointsAtDistance",
153
+ value: function getPointsAtDistance(curvePath, distance) {
154
+ // 确保参数有效
155
+ if (!curvePath || typeof distance !== 'number' || distance <= 0) {
156
+ console.error('Invalid parameters');
157
+ return [];
158
+ }
159
+ var points = [];
160
+
161
+ // 获取曲线总长度
162
+ var totalLength = curvePath.getLength();
163
+
164
+ // 计算需要的采样点数量
165
+ var numSamples = Math.floor(totalLength / distance) + 1;
166
+
167
+ // 第一个点总是加入(起点)
168
+ points.push(curvePath.getPointAt(0));
169
+ var currentU = 0;
170
+ // 使用二分查找法找到每个距离点对应的u参数
171
+ for (var i = 1; i < numSamples; i++) {
172
+ var targetDistance = i * distance;
173
+
174
+ // 从上一个点开始查找
175
+ var low = currentU;
176
+ var high = 1;
177
+ var mid = void 0,
178
+ tempDistance = void 0;
179
+
180
+ // 二分查找法查找对应的u值
181
+ while (high - low > 0.0001) {
182
+ mid = (low + high) / 2;
183
+ tempDistance = curvePath.getLength() * mid;
184
+ if (tempDistance < targetDistance) low = mid;else high = mid;
185
+ }
186
+ currentU = (low + high) / 2;
187
+
188
+ // 如果已达曲线末端,则退出循环
189
+ if (currentU >= 1) break;
190
+
191
+ // 获取点并添加到结果数组
192
+ var point = curvePath.getPointAt(currentU);
193
+ points.push(point);
194
+ }
157
195
 
158
- // 获取点并添加到结果数组
159
- const point = curvePath.getPointAt(currentU);
160
- points.push(point);
196
+ // 确保添加最后一个点(如果还没添加)
197
+ if (currentU < 1) points.push(curvePath.getPointAt(1));
198
+ return points;
161
199
  }
162
200
 
163
- // 确保添加最后一个点(如果还没添加)
164
- if (currentU < 1) points.push(curvePath.getPointAt(1));
165
- return points;
166
- }
167
-
168
- // 创建自适应采样点获取方法(处理count=1的特殊情况)
169
- getAdaptiveSpacedPoints(curve, count) {
170
- if (count <= 0) return [];
201
+ // 创建自适应采样点获取方法(处理count=1的特殊情况)
202
+ }, {
203
+ key: "getAdaptiveSpacedPoints",
204
+ value: function getAdaptiveSpacedPoints(curve, count) {
205
+ if (count <= 0) return [];
206
+
207
+ // 当请求1个点时返回路径中点
208
+ if (count === 1) {
209
+ var midPoint = new Vector3();
210
+ curve.getPointAt(0.5, midPoint); // 获取50%位置的点
211
+ return [midPoint];
212
+ }
171
213
 
172
- // 当请求1个点时返回路径中点
173
- if (count === 1) {
174
- const midPoint = new Vector3();
175
- curve.getPointAt(0.5, midPoint); // 获取50%位置的点
176
- return [midPoint];
214
+ // 常规情况返回等间距点
215
+ return curve.getSpacedPoints(count - 1);
177
216
  }
178
217
 
179
- // 常规情况返回等间距点
180
- return curve.getSpacedPoints(count - 1);
181
- }
182
-
183
- // 统一属性更新入口
184
- handlePropertyUpdate() {
185
- this.clearScene();
186
- this.init();
187
- }
218
+ // 统一属性更新入口
219
+ }, {
220
+ key: "handlePropertyUpdate",
221
+ value: function handlePropertyUpdate() {
222
+ this.clearScene();
223
+ this.init();
224
+ }
188
225
 
189
- // 内存安全清理
190
- clearScene() {
191
- this._mesh.traverse(child => {
192
- if (child instanceof Mesh) {
193
- var _child$geometry, _child$material;
194
- (_child$geometry = child.geometry) === null || _child$geometry === void 0 || _child$geometry.dispose();
195
- Array.isArray(child.material) ? child.material.forEach(m => m.dispose()) : (_child$material = child.material) === null || _child$material === void 0 ? void 0 : _child$material.dispose();
196
- }
197
- });
198
- this.remove(this._mesh);
199
- }
226
+ // 内存安全清理
227
+ }, {
228
+ key: "clearScene",
229
+ value: function clearScene() {
230
+ this._mesh.traverse(function (child) {
231
+ if (child instanceof Mesh) {
232
+ var _child$geometry, _child$material;
233
+ (_child$geometry = child.geometry) === null || _child$geometry === void 0 || _child$geometry.dispose();
234
+ Array.isArray(child.material) ? child.material.forEach(function (m) {
235
+ return m.dispose();
236
+ }) : (_child$material = child.material) === null || _child$material === void 0 ? void 0 : _child$material.dispose();
237
+ }
238
+ });
239
+ this.remove(this._mesh);
240
+ }
200
241
 
201
- // 显式销毁方法
202
- dispose() {
203
- this.clearScene();
204
- }
205
- }
242
+ // 显式销毁方法
243
+ }, {
244
+ key: "dispose",
245
+ value: function dispose() {
246
+ this.clearScene();
247
+ }
248
+ }]);
249
+ return Batch;
250
+ }(ObjectLayer);
206
251
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Group","Mesh","Quaternion","Vector3","ObjectLayer","Batch","mesh","_mesh","path","_path","newValue","handlePropertyUpdate","number","_number","Math","max","span","_span","followTangent","_followTangent","constructor","option","_defineProperty","entity","_entity","_option","init","_points","isClosed","isEffectivelyClosed","points","getAdaptiveSpacedPoints","getPointsAtDistance","originalEuler","rotation","clone","rotationQuaternion","setFromEuler","_tempTangent","_lookAtTarget","forEach","point","index","proxy","visible","position","add","quaternion","identity","t","length","getTangent","copy","lookAt","multiply","curvePath","tolerance","closed","startPoint","getPoint","endPoint","distance","distanceTo","console","error","totalLength","getLength","numSamples","floor","push","getPointAt","currentU","i","targetDistance","low","high","mid","tempDistance","curve","count","midPoint","getSpacedPoints","clearScene","traverse","child","_child$geometry","_child$material","geometry","dispose","Array","isArray","material","m","remove"],"sources":["../../../src/business/Batch/index.ts"],"sourcesContent":["import { Group, Mesh, Quaternion, Vector3 } from '@anov/3d-core'\nimport type { CurvePath, Object3D } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport type { BatchInterface, Option } from './type'\n\nexport class Batch extends ObjectLayer implements BatchInterface {\n _mesh: Group\n _path: CurvePath<Vector3>\n _number: number\n _span: number\n _followTangent: boolean\n _entity: Object3D\n _option: any\n\n public get mesh() {\n return this._mesh\n }\n\n public get path(): CurvePath<Vector3> {\n return this._path\n }\n\n public set path(newValue: CurvePath<Vector3>) {\n if (newValue === this._path)\n return\n this._path = newValue\n this.handlePropertyUpdate()\n }\n\n public get number(): number {\n return this._number\n }\n\n public set number(newValue: number) {\n if (newValue === this._number)\n return\n this._number = Math.max(1, newValue)\n this.handlePropertyUpdate()\n }\n\n public get span(): number {\n return this._span\n }\n\n public set span(newValue: number) {\n if (newValue === this._span)\n return\n this._span = newValue > 0 ? newValue : 10\n this.handlePropertyUpdate()\n }\n\n public get followTangent(): boolean {\n return this._followTangent\n }\n\n public set followTangent(newValue: boolean) {\n if (newValue === this._followTangent)\n return\n this.handlePropertyUpdate()\n }\n\n constructor(option: Option) {\n super()\n\n const { path, number, span, entity, followTangent } = option\n this._path = path\n this._number = number\n this._span = span\n this._followTangent = followTangent\n this._entity = entity\n this._option = option\n\n this.init()\n }\n\n private init() {\n // 判断是否闭合\n const isClosed = this.isEffectivelyClosed(this._path)\n\n let points = []\n if (this.number > 0)\n points = this.getAdaptiveSpacedPoints(this.path, this.number)\n else if (this.span && this.span > 0)\n points = this.getPointsAtDistance(this.path, this.span)\n\n this._mesh = new Group()\n\n // 模型原始旋转(转换为四元数后叠加)\n const originalEuler = this._entity.rotation.clone()\n const rotationQuaternion = new Quaternion()\n .setFromEuler(originalEuler)\n // 预创建可复用对象减少内存分配\n const _tempTangent = new Vector3()\n const _lookAtTarget = new Vector3()\n points?.forEach((point: Vector3, index) => {\n const proxy = this._entity.clone()\n proxy.visible = true\n proxy.position.add(point)\n\n if (this._followTangent) {\n // 重置旋转\n proxy.quaternion.identity()\n // 计算当前点在曲线上的参数化位置 (0到1)\n const t = index / Math.max(1, points.length - 1)\n // 获取精确的切线方向(自动归一化)\n this._path.getTangent(t, _tempTangent)\n // 计算看向目标点:当前位置 + 切线方向\n _lookAtTarget.copy(point).add(_tempTangent)\n // 设置模型朝向(默认使用 THREE.Object3D 的默认 UP 方向)\n proxy.lookAt(_lookAtTarget)\n // 在局部坐标系叠加旋转\n proxy.quaternion.multiply(rotationQuaternion)\n }\n this._mesh.add(proxy)\n })\n\n this.add(this._mesh)\n }\n\n private isEffectivelyClosed(curvePath, tolerance = 0.01) {\n if (curvePath.closed)\n return true\n\n // 获取第一个点和最后一个点\n const startPoint = curvePath.getPoint(0)\n const endPoint = curvePath.getPoint(1)\n\n // 计算距离\n const distance = startPoint.distanceTo(endPoint)\n\n // 如果距离小于容差,则认为是闭合的\n return distance < tolerance\n }\n\n /**\n * 从曲线路径上每隔指定距离采样点\n * @param {THREE.CurvePath} curvePath - Three.js的CurvePath对象(可以是曲线或直线组合)\n * @param {Number} distance - 采样点之间的距离(单位:米)\n * @return {Array<THREE.Vector3>} 采样点坐标数组\n */\n private getPointsAtDistance(curvePath, distance) {\n // 确保参数有效\n if (!curvePath || typeof distance !== 'number' || distance <= 0) {\n console.error('Invalid parameters')\n return []\n }\n\n const points = []\n\n // 获取曲线总长度\n const totalLength = curvePath.getLength()\n\n // 计算需要的采样点数量\n const numSamples = Math.floor(totalLength / distance) + 1\n\n // 第一个点总是加入(起点)\n points.push(curvePath.getPointAt(0))\n\n let currentU = 0\n // 使用二分查找法找到每个距离点对应的u参数\n for (let i = 1; i < numSamples; i++) {\n const targetDistance = i * distance\n\n // 从上一个点开始查找\n let low = currentU\n let high = 1\n let mid, tempDistance\n\n // 二分查找法查找对应的u值\n while (high - low > 0.0001) {\n mid = (low + high) / 2\n tempDistance = curvePath.getLength() * mid\n\n if (tempDistance < targetDistance)\n low = mid\n else\n high = mid\n }\n\n currentU = (low + high) / 2\n\n // 如果已达曲线末端,则退出循环\n if (currentU >= 1)\n break\n\n // 获取点并添加到结果数组\n const point = curvePath.getPointAt(currentU)\n points.push(point)\n }\n\n // 确保添加最后一个点(如果还没添加)\n if (currentU < 1)\n points.push(curvePath.getPointAt(1))\n\n return points\n }\n\n // 创建自适应采样点获取方法(处理count=1的特殊情况)\n private getAdaptiveSpacedPoints(curve: CurvePath<Vector3>, count: number) {\n if (count <= 0)\n return []\n\n // 当请求1个点时返回路径中点\n if (count === 1) {\n const midPoint = new Vector3()\n curve.getPointAt(0.5, midPoint) // 获取50%位置的点\n return [midPoint]\n }\n\n // 常规情况返回等间距点\n return curve.getSpacedPoints(count - 1)\n }\n\n // 统一属性更新入口\n private handlePropertyUpdate() {\n this.clearScene()\n this.init()\n }\n\n // 内存安全清理\n private clearScene() {\n this._mesh.traverse((child) => {\n if (child instanceof Mesh) {\n child.geometry?.dispose()\n Array.isArray(child.material)\n ? child.material.forEach(m => m.dispose())\n : child.material?.dispose()\n }\n })\n this.remove(this._mesh)\n }\n\n // 显式销毁方法\n dispose() {\n this.clearScene()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["Group","Mesh","Quaternion","Vector3","ObjectLayer","Batch","_ObjectLayer","_inherits","_super","_createSuper","option","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","path","number","span","entity","followTangent","_path","_number","_span","_followTangent","_entity","_option","init","_createClass","key","get","_mesh","set","newValue","handlePropertyUpdate","Math","max","value","_points","_this2","isClosed","isEffectivelyClosed","points","getAdaptiveSpacedPoints","getPointsAtDistance","originalEuler","rotation","clone","rotationQuaternion","setFromEuler","_tempTangent","_lookAtTarget","forEach","point","index","proxy","visible","position","add","quaternion","identity","t","length","getTangent","copy","lookAt","multiply","curvePath","tolerance","arguments","undefined","closed","startPoint","getPoint","endPoint","distance","distanceTo","console","error","totalLength","getLength","numSamples","floor","push","getPointAt","currentU","i","targetDistance","low","high","mid","tempDistance","curve","count","midPoint","getSpacedPoints","clearScene","traverse","child","_child$geometry","_child$material","geometry","dispose","Array","isArray","material","m","remove"],"sources":["../../../src/business/Batch/index.ts"],"sourcesContent":["import { Group, Mesh, Quaternion, Vector3 } from '@anov/3d-core'\nimport type { CurvePath, Object3D } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport type { BatchInterface, Option } from './type'\n\nexport class Batch extends ObjectLayer implements BatchInterface {\n _mesh: Group\n _path: CurvePath<Vector3>\n _number: number\n _span: number\n _followTangent: boolean\n _entity: Object3D\n _option: any\n\n public get mesh() {\n return this._mesh\n }\n\n public get path(): CurvePath<Vector3> {\n return this._path\n }\n\n public set path(newValue: CurvePath<Vector3>) {\n if (newValue === this._path)\n return\n this._path = newValue\n this.handlePropertyUpdate()\n }\n\n public get number(): number {\n return this._number\n }\n\n public set number(newValue: number) {\n if (newValue === this._number)\n return\n this._number = Math.max(1, newValue)\n this.handlePropertyUpdate()\n }\n\n public get span(): number {\n return this._span\n }\n\n public set span(newValue: number) {\n if (newValue === this._span)\n return\n this._span = newValue > 0 ? newValue : 10\n this.handlePropertyUpdate()\n }\n\n public get followTangent(): boolean {\n return this._followTangent\n }\n\n public set followTangent(newValue: boolean) {\n if (newValue === this._followTangent)\n return\n this.handlePropertyUpdate()\n }\n\n constructor(option: Option) {\n super()\n\n const { path, number, span, entity, followTangent } = option\n this._path = path\n this._number = number\n this._span = span\n this._followTangent = followTangent\n this._entity = entity\n this._option = option\n\n this.init()\n }\n\n private init() {\n // 判断是否闭合\n const isClosed = this.isEffectivelyClosed(this._path)\n\n let points = []\n if (this.number > 0)\n points = this.getAdaptiveSpacedPoints(this.path, this.number)\n else if (this.span && this.span > 0)\n points = this.getPointsAtDistance(this.path, this.span)\n\n this._mesh = new Group()\n\n // 模型原始旋转(转换为四元数后叠加)\n const originalEuler = this._entity.rotation.clone()\n const rotationQuaternion = new Quaternion()\n .setFromEuler(originalEuler)\n // 预创建可复用对象减少内存分配\n const _tempTangent = new Vector3()\n const _lookAtTarget = new Vector3()\n points?.forEach((point: Vector3, index) => {\n const proxy = this._entity.clone()\n proxy.visible = true\n proxy.position.add(point)\n\n if (this._followTangent) {\n // 重置旋转\n proxy.quaternion.identity()\n // 计算当前点在曲线上的参数化位置 (0到1)\n const t = index / Math.max(1, points.length - 1)\n // 获取精确的切线方向(自动归一化)\n this._path.getTangent(t, _tempTangent)\n // 计算看向目标点:当前位置 + 切线方向\n _lookAtTarget.copy(point).add(_tempTangent)\n // 设置模型朝向(默认使用 THREE.Object3D 的默认 UP 方向)\n proxy.lookAt(_lookAtTarget)\n // 在局部坐标系叠加旋转\n proxy.quaternion.multiply(rotationQuaternion)\n }\n this._mesh.add(proxy)\n })\n\n this.add(this._mesh)\n }\n\n private isEffectivelyClosed(curvePath, tolerance = 0.01) {\n if (curvePath.closed)\n return true\n\n // 获取第一个点和最后一个点\n const startPoint = curvePath.getPoint(0)\n const endPoint = curvePath.getPoint(1)\n\n // 计算距离\n const distance = startPoint.distanceTo(endPoint)\n\n // 如果距离小于容差,则认为是闭合的\n return distance < tolerance\n }\n\n /**\n * 从曲线路径上每隔指定距离采样点\n * @param {THREE.CurvePath} curvePath - Three.js的CurvePath对象(可以是曲线或直线组合)\n * @param {Number} distance - 采样点之间的距离(单位:米)\n * @return {Array<THREE.Vector3>} 采样点坐标数组\n */\n private getPointsAtDistance(curvePath, distance) {\n // 确保参数有效\n if (!curvePath || typeof distance !== 'number' || distance <= 0) {\n console.error('Invalid parameters')\n return []\n }\n\n const points = []\n\n // 获取曲线总长度\n const totalLength = curvePath.getLength()\n\n // 计算需要的采样点数量\n const numSamples = Math.floor(totalLength / distance) + 1\n\n // 第一个点总是加入(起点)\n points.push(curvePath.getPointAt(0))\n\n let currentU = 0\n // 使用二分查找法找到每个距离点对应的u参数\n for (let i = 1; i < numSamples; i++) {\n const targetDistance = i * distance\n\n // 从上一个点开始查找\n let low = currentU\n let high = 1\n let mid, tempDistance\n\n // 二分查找法查找对应的u值\n while (high - low > 0.0001) {\n mid = (low + high) / 2\n tempDistance = curvePath.getLength() * mid\n\n if (tempDistance < targetDistance)\n low = mid\n else\n high = mid\n }\n\n currentU = (low + high) / 2\n\n // 如果已达曲线末端,则退出循环\n if (currentU >= 1)\n break\n\n // 获取点并添加到结果数组\n const point = curvePath.getPointAt(currentU)\n points.push(point)\n }\n\n // 确保添加最后一个点(如果还没添加)\n if (currentU < 1)\n points.push(curvePath.getPointAt(1))\n\n return points\n }\n\n // 创建自适应采样点获取方法(处理count=1的特殊情况)\n private getAdaptiveSpacedPoints(curve: CurvePath<Vector3>, count: number) {\n if (count <= 0)\n return []\n\n // 当请求1个点时返回路径中点\n if (count === 1) {\n const midPoint = new Vector3()\n curve.getPointAt(0.5, midPoint) // 获取50%位置的点\n return [midPoint]\n }\n\n // 常规情况返回等间距点\n return curve.getSpacedPoints(count - 1)\n }\n\n // 统一属性更新入口\n private handlePropertyUpdate() {\n this.clearScene()\n this.init()\n }\n\n // 内存安全清理\n private clearScene() {\n this._mesh.traverse((child) => {\n if (child instanceof Mesh) {\n child.geometry?.dispose()\n Array.isArray(child.material)\n ? child.material.forEach(m => m.dispose())\n : child.material?.dispose()\n }\n })\n this.remove(this._mesh)\n }\n\n // 显式销毁方法\n dispose() {\n this.clearScene()\n }\n}"],"mappings":"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"}