@anov/3d-ability 0.0.139 → 0.0.141

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 (265) hide show
  1. package/dist/business/Animation/motion/index.js +35 -56
  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 +146 -187
  5. package/dist/business/Area/Fence/FenceBase.js.map +1 -1
  6. package/dist/business/Area/Fence/fence_base_01.js +120 -112
  7. package/dist/business/Area/Fence/fence_base_01.js.map +1 -1
  8. package/dist/business/Area/Fence/fence_feeting_01.js +218 -130
  9. package/dist/business/Area/Fence/fence_feeting_01.js.map +1 -1
  10. package/dist/business/Area/Fence/fence_roll_01.js +140 -130
  11. package/dist/business/Area/Fence/fence_roll_01.js.map +1 -1
  12. package/dist/business/Area/FillArea/FillAreaBase.js +87 -126
  13. package/dist/business/Area/FillArea/FillAreaBase.js.map +1 -1
  14. package/dist/business/Area/FillArea/fillArea_face_01.js +72 -98
  15. package/dist/business/Area/FillArea/fillArea_face_01.js.map +1 -1
  16. package/dist/business/Area/FillArea/fillArea_line_01.js +66 -94
  17. package/dist/business/Area/FillArea/fillArea_line_01.js.map +1 -1
  18. package/dist/business/Area/index.js +267 -483
  19. package/dist/business/Area/index.js.map +1 -1
  20. package/dist/business/Area/tool.js +14 -26
  21. package/dist/business/Area/tool.js.map +1 -1
  22. package/dist/business/Base/ObjectLayer.js +21 -46
  23. package/dist/business/Base/ObjectLayer.js.map +1 -1
  24. package/dist/business/Batch/index.js +189 -234
  25. package/dist/business/Batch/index.js.map +1 -1
  26. package/dist/business/Box/index.js +52 -81
  27. package/dist/business/Box/index.js.map +1 -1
  28. package/dist/business/Cylinder/index.js +51 -79
  29. package/dist/business/Cylinder/index.js.map +1 -1
  30. package/dist/business/Flyline/bubble/CircleBubble.js +1 -9
  31. package/dist/business/Flyline/bubble/CircleBubble.js.map +1 -1
  32. package/dist/business/Flyline/bubble/index.js +7 -21
  33. package/dist/business/Flyline/bubble/index.js.map +1 -1
  34. package/dist/business/Flyline/index.js +96 -162
  35. package/dist/business/Flyline/index.js.map +1 -1
  36. package/dist/business/Flyline/line/ArcLine.js +208 -291
  37. package/dist/business/Flyline/line/ArcLine.js.map +1 -1
  38. package/dist/business/Flyline/line/index.js +8 -22
  39. package/dist/business/Flyline/line/index.js.map +1 -1
  40. package/dist/business/HeatMap/HeatMap.js +380 -467
  41. package/dist/business/HeatMap/HeatMap.js.map +1 -1
  42. package/dist/business/HeatMap/core.js +405 -525
  43. package/dist/business/HeatMap/core.js.map +1 -1
  44. package/dist/business/HeatMap/shader.js +69 -3
  45. package/dist/business/HeatMap/shader.js.map +1 -1
  46. package/dist/business/InfoPanel/index.js +201 -242
  47. package/dist/business/InfoPanel/index.js.map +1 -1
  48. package/dist/business/Line/index.js +55 -88
  49. package/dist/business/Line/index.js.map +1 -1
  50. package/dist/business/Mark/KeyframeAnimation.js +145 -176
  51. package/dist/business/Mark/KeyframeAnimation.js.map +1 -1
  52. package/dist/business/Mark/index.js +196 -294
  53. package/dist/business/Mark/index.js.map +1 -1
  54. package/dist/business/Mark/shader/tanhao.js +36 -3
  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 +377 -551
  58. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
  59. package/dist/business/MaterialSwitch/inject.js +92 -58
  60. package/dist/business/MaterialSwitch/inject.js.map +1 -1
  61. package/dist/business/MaterialSwitch/shader/finalFade.js +74 -2
  62. package/dist/business/MaterialSwitch/shader/finalFade.js.map +1 -1
  63. package/dist/business/MaterialSwitch/shader/ground.js +95 -16
  64. package/dist/business/MaterialSwitch/shader/ground.js.map +1 -1
  65. package/dist/business/MaterialSwitch/shader/groundBase64.js +9 -3
  66. package/dist/business/MaterialSwitch/shader/groundBase64.js.map +1 -1
  67. package/dist/business/MaterialSwitch/shader/realFade.js +48 -9
  68. package/dist/business/MaterialSwitch/shader/realFade.js.map +1 -1
  69. package/dist/business/Plane/index.js +51 -78
  70. package/dist/business/Plane/index.js.map +1 -1
  71. package/dist/business/Poi/index.d.ts +5 -0
  72. package/dist/business/Poi/index.js +256 -295
  73. package/dist/business/Poi/index.js.map +1 -1
  74. package/dist/business/Poi/link/Cylinder.js +56 -89
  75. package/dist/business/Poi/link/Cylinder.js.map +1 -1
  76. package/dist/business/Poi/link/Pyramid.js +104 -165
  77. package/dist/business/Poi/link/Pyramid.js.map +1 -1
  78. package/dist/business/Poi/link/index.d.ts +1 -1
  79. package/dist/business/Poi/link/index.js +54 -114
  80. package/dist/business/Poi/link/index.js.map +1 -1
  81. package/dist/business/Poi/panel/index.d.ts +124 -0
  82. package/dist/business/Poi/panel/index.js +474 -0
  83. package/dist/business/Poi/panel/index.js.map +1 -0
  84. package/dist/business/Poi/panel/interfaces.d.ts +67 -0
  85. package/dist/business/Poi/panel/interfaces.js +2 -0
  86. package/dist/business/Poi/panel/interfaces.js.map +1 -0
  87. package/dist/business/Poi/panel/utils.d.ts +72 -0
  88. package/dist/business/Poi/panel/utils.js +126 -0
  89. package/dist/business/Poi/panel/utils.js.map +1 -0
  90. package/dist/business/Poi/particle/DoubleCircle.js +71 -107
  91. package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
  92. package/dist/business/Poi/particle/DynamicCircle.js +75 -111
  93. package/dist/business/Poi/particle/DynamicCircle.js.map +1 -1
  94. package/dist/business/Poi/particle/SingleCircle.js +62 -98
  95. package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
  96. package/dist/business/Poi/particle/index.js +49 -117
  97. package/dist/business/Poi/particle/index.js.map +1 -1
  98. package/dist/business/Poi/shader/circle.js +31 -3
  99. package/dist/business/Poi/shader/circle.js.map +1 -1
  100. package/dist/business/Poi/shader/cylinder.js +37 -3
  101. package/dist/business/Poi/shader/cylinder.js.map +1 -1
  102. package/dist/business/Poi/shader/doubleCircle.js +55 -3
  103. package/dist/business/Poi/shader/doubleCircle.js.map +1 -1
  104. package/dist/business/Poi/shader/dynamicCircle.js +67 -3
  105. package/dist/business/Poi/shader/dynamicCircle.js.map +1 -1
  106. package/dist/business/Poi/title/Border.js +7 -27
  107. package/dist/business/Poi/title/Border.js.map +1 -1
  108. package/dist/business/Poi/title/Ellipse.js +7 -27
  109. package/dist/business/Poi/title/Ellipse.js.map +1 -1
  110. package/dist/business/Poi/title/index.js +208 -292
  111. package/dist/business/Poi/title/index.js.map +1 -1
  112. package/dist/business/Poi/tools.js +22 -19
  113. package/dist/business/Poi/tools.js.map +1 -1
  114. package/dist/business/Poi/types.d.ts +3 -0
  115. package/dist/business/Poi/types.js.map +1 -1
  116. package/dist/business/Sphere/index.js +47 -72
  117. package/dist/business/Sphere/index.js.map +1 -1
  118. package/dist/business/Spline/index.js +190 -245
  119. package/dist/business/Spline/index.js.map +1 -1
  120. package/dist/business/SplitBuilding/index.js +327 -536
  121. package/dist/business/SplitBuilding/index.js.map +1 -1
  122. package/dist/business/SplitBuilding/type.js +2 -2
  123. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js +218 -275
  124. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js.map +1 -1
  125. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js +132 -177
  126. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js.map +1 -1
  127. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js +51 -1
  128. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js.map +1 -1
  129. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js +6 -1
  130. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js.map +1 -1
  131. package/dist/business/TrafficComponents/base.js +32 -55
  132. package/dist/business/TrafficComponents/base.js.map +1 -1
  133. package/dist/business/TrafficComponents/utils.js +25 -24
  134. package/dist/business/TrafficComponents/utils.js.map +1 -1
  135. package/dist/business/Utils/Curve.js +40 -56
  136. package/dist/business/Utils/Curve.js.map +1 -1
  137. package/dist/business/Utils/constant.js +1 -1
  138. package/dist/business/Utils/constant.js.map +1 -1
  139. package/dist/business/Utils/defineProps.js +13 -14
  140. package/dist/business/Utils/defineProps.js.map +1 -1
  141. package/dist/business/Utils/round-curve.js +127 -153
  142. package/dist/business/Utils/round-curve.js.map +1 -1
  143. package/dist/business/VideoPanel/index.js +258 -319
  144. package/dist/business/VideoPanel/index.js.map +1 -1
  145. package/dist/business/Water/index.js +78 -108
  146. package/dist/business/Water/index.js.map +1 -1
  147. package/dist/business/Water/types.js +1 -1
  148. package/dist/business/Water/types.js.map +1 -1
  149. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +383 -449
  150. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
  151. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js +107 -142
  152. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js.map +1 -1
  153. package/dist/core/Controls/FirstViewControl/index.js +84 -96
  154. package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
  155. package/dist/core/Controls/ThirdViewControl/action/input.js +77 -98
  156. package/dist/core/Controls/ThirdViewControl/action/input.js.map +1 -1
  157. package/dist/core/Controls/ThirdViewControl/config/constants.js +1 -1
  158. package/dist/core/Controls/ThirdViewControl/config/constants.js.map +1 -1
  159. package/dist/core/Controls/ThirdViewControl/index.js +19 -28
  160. package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
  161. package/dist/core/Controls/ThirdViewControl/player/animation.js +126 -155
  162. package/dist/core/Controls/ThirdViewControl/player/animation.js.map +1 -1
  163. package/dist/core/Controls/ThirdViewControl/player/camera.js +47 -63
  164. package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
  165. package/dist/core/Controls/ThirdViewControl/player/control.js +39 -49
  166. package/dist/core/Controls/ThirdViewControl/player/control.js.map +1 -1
  167. package/dist/core/Controls/ThirdViewControl/player.js +66 -91
  168. package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
  169. package/dist/core/Controls/base.js +14 -30
  170. package/dist/core/Controls/base.js.map +1 -1
  171. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js +92 -131
  172. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js.map +1 -1
  173. package/dist/core/Debug/PerformanceInfo/Performance.js +22 -47
  174. package/dist/core/Debug/PerformanceInfo/Performance.js.map +1 -1
  175. package/dist/core/Light/PointLight/PointLightExt.js +4 -21
  176. package/dist/core/Light/PointLight/PointLightExt.js.map +1 -1
  177. package/dist/core/Material/FinirMaterial/FinirMaterial.js +37 -57
  178. package/dist/core/Material/FinirMaterial/FinirMaterial.js.map +1 -1
  179. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js +116 -153
  180. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js.map +1 -1
  181. package/dist/core/Material/PristineGridMaterial/shader/fragment.js +95 -1
  182. package/dist/core/Material/PristineGridMaterial/shader/fragment.js.map +1 -1
  183. package/dist/core/Material/PristineGridMaterial/shader/vertex.js +26 -1
  184. package/dist/core/Material/PristineGridMaterial/shader/vertex.js.map +1 -1
  185. package/dist/core/Material/SurfaceMaterial/index.js +76 -172
  186. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  187. package/dist/core/Material/decorators.js +6 -11
  188. package/dist/core/Material/decorators.js.map +1 -1
  189. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +16 -12
  190. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
  191. package/dist/core/PostEffects/addBrightnessContrastPass.js +17 -13
  192. package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
  193. package/dist/core/PostEffects/bloomPass.js +17 -10
  194. package/dist/core/PostEffects/bloomPass.js.map +1 -1
  195. package/dist/core/PostEffects/bloomSelect.js +60 -43
  196. package/dist/core/PostEffects/bloomSelect.js.map +1 -1
  197. package/dist/core/PostEffects/colorifyPass.js +17 -13
  198. package/dist/core/PostEffects/colorifyPass.js.map +1 -1
  199. package/dist/core/PostEffects/index.js +28 -22
  200. package/dist/core/PostEffects/index.js.map +1 -1
  201. package/dist/core/PostEffects/outlinePass.js +37 -50
  202. package/dist/core/PostEffects/outlinePass.js.map +1 -1
  203. package/dist/core/PostEffects/postprocessing.js +14 -12
  204. package/dist/core/PostEffects/postprocessing.js.map +1 -1
  205. package/dist/core/PostEffects/saoPass.js +15 -10
  206. package/dist/core/PostEffects/saoPass.js.map +1 -1
  207. package/dist/core/PostEffects/shader/colorify.js +22 -3
  208. package/dist/core/PostEffects/shader/colorify.js.map +1 -1
  209. package/dist/core/PostEffects/shader/gammaCorrectionShader.js +27 -3
  210. package/dist/core/PostEffects/shader/gammaCorrectionShader.js.map +1 -1
  211. package/dist/core/PostEffects/shader/mapping.js +66 -3
  212. package/dist/core/PostEffects/shader/mapping.js.map +1 -1
  213. package/dist/core/PostEffects/shader/thermalMaging.js +28 -3
  214. package/dist/core/PostEffects/shader/thermalMaging.js.map +1 -1
  215. package/dist/core/SceneEffect/grow/grow.js +85 -101
  216. package/dist/core/SceneEffect/grow/grow.js.map +1 -1
  217. package/dist/core/SceneEffect/grow/style_down.js +60 -77
  218. package/dist/core/SceneEffect/grow/style_down.js.map +1 -1
  219. package/dist/core/SceneEffect/grow/style_up.js +64 -81
  220. package/dist/core/SceneEffect/grow/style_up.js.map +1 -1
  221. package/dist/core/SceneEffect/grow/type.js +2 -2
  222. package/dist/core/SceneEffect/grow/type.js.map +1 -1
  223. package/dist/core/WeatherSystem/DynamicWeatherSystem.js +51 -76
  224. package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
  225. package/dist/core/WeatherSystem/hdr/index.js +69 -105
  226. package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
  227. package/dist/core/WeatherSystem/index.js +77 -124
  228. package/dist/core/WeatherSystem/index.js.map +1 -1
  229. package/dist/core/WeatherSystem/objects/fog/index.js +52 -80
  230. package/dist/core/WeatherSystem/objects/fog/index.js.map +1 -1
  231. package/dist/core/WeatherSystem/objects/rain/index.js +72 -84
  232. package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
  233. package/dist/core/WeatherSystem/objects/rain/lineRain.js +88 -118
  234. package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
  235. package/dist/core/WeatherSystem/objects/rain/plane.js +116 -146
  236. package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
  237. package/dist/core/WeatherSystem/objects/rain/point.js +100 -148
  238. package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
  239. package/dist/core/WeatherSystem/objects/sky/cloud.js +71 -104
  240. package/dist/core/WeatherSystem/objects/sky/cloud.js.map +1 -1
  241. package/dist/core/WeatherSystem/objects/sky/index.js +66 -84
  242. package/dist/core/WeatherSystem/objects/sky/index.js.map +1 -1
  243. package/dist/core/WeatherSystem/objects/sky/outline.js +25 -45
  244. package/dist/core/WeatherSystem/objects/sky/outline.js.map +1 -1
  245. package/dist/core/WeatherSystem/shaders/cloud.js +74 -3
  246. package/dist/core/WeatherSystem/shaders/cloud.js.map +1 -1
  247. package/dist/core/WeatherSystem/shaders/fog.js +103 -3
  248. package/dist/core/WeatherSystem/shaders/fog.js.map +1 -1
  249. package/dist/core/WeatherSystem/shaders/rain.js +206 -7
  250. package/dist/core/WeatherSystem/shaders/rain.js.map +1 -1
  251. package/dist/core/WeatherSystem/shaders/sky.js +87 -3
  252. package/dist/core/WeatherSystem/shaders/sky.js.map +1 -1
  253. package/dist/core/WeatherSystem/sky/index.js +104 -135
  254. package/dist/core/WeatherSystem/sky/index.js.map +1 -1
  255. package/dist/core/WeatherSystem/utils/constant.js +44 -38
  256. package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
  257. package/dist/core/WeatherSystem/utils/math.js +18 -25
  258. package/dist/core/WeatherSystem/utils/math.js.map +1 -1
  259. package/dist/core/WeatherSystem/utils/type.js +1 -1
  260. package/dist/core/WeatherSystem/utils/type.js.map +1 -1
  261. package/dist/core/WeatherSystem/weather/index.js +96 -141
  262. package/dist/core/WeatherSystem/weather/index.js.map +1 -1
  263. package/dist/utils/index.js +1 -1
  264. package/dist/utils/index.js.map +1 -1
  265. package/package.json +3 -3
@@ -1,251 +1,206 @@
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); }
12
1
  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; }
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); }
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); }
15
4
  import { Group, Mesh, Quaternion, Vector3 } from '@anov/3d-core';
16
5
  import ObjectLayer from "../Base/ObjectLayer";
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;
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;
133
103
 
134
- // 获取第一个点和最后一个点
135
- var startPoint = curvePath.getPoint(0);
136
- var endPoint = curvePath.getPoint(1);
104
+ // 获取第一个点和最后一个点
105
+ const startPoint = curvePath.getPoint(0);
106
+ const endPoint = curvePath.getPoint(1);
137
107
 
138
- // 计算距离
139
- var distance = startPoint.distanceTo(endPoint);
108
+ // 计算距离
109
+ const distance = startPoint.distanceTo(endPoint);
140
110
 
141
- // 如果距离小于容差,则认为是闭合的
142
- return distance < tolerance;
143
- }
111
+ // 如果距离小于容差,则认为是闭合的
112
+ return distance < tolerance;
113
+ }
144
114
 
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);
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 [];
126
+ }
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;
194
152
  }
153
+ currentU = (low + high) / 2;
154
+
155
+ // 如果已达曲线末端,则退出循环
156
+ if (currentU >= 1) break;
195
157
 
196
- // 确保添加最后一个点(如果还没添加)
197
- if (currentU < 1) points.push(curvePath.getPointAt(1));
198
- return points;
158
+ // 获取点并添加到结果数组
159
+ const point = curvePath.getPointAt(currentU);
160
+ points.push(point);
199
161
  }
200
162
 
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
- }
163
+ // 确保添加最后一个点(如果还没添加)
164
+ if (currentU < 1) points.push(curvePath.getPointAt(1));
165
+ return points;
166
+ }
213
167
 
214
- // 常规情况返回等间距点
215
- return curve.getSpacedPoints(count - 1);
216
- }
168
+ // 创建自适应采样点获取方法(处理count=1的特殊情况)
169
+ getAdaptiveSpacedPoints(curve, count) {
170
+ if (count <= 0) return [];
217
171
 
218
- // 统一属性更新入口
219
- }, {
220
- key: "handlePropertyUpdate",
221
- value: function handlePropertyUpdate() {
222
- this.clearScene();
223
- this.init();
172
+ // 当请求1个点时返回路径中点
173
+ if (count === 1) {
174
+ const midPoint = new Vector3();
175
+ curve.getPointAt(0.5, midPoint); // 获取50%位置的点
176
+ return [midPoint];
224
177
  }
225
178
 
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
- }
179
+ // 常规情况返回等间距点
180
+ return curve.getSpacedPoints(count - 1);
181
+ }
241
182
 
242
- // 显式销毁方法
243
- }, {
244
- key: "dispose",
245
- value: function dispose() {
246
- this.clearScene();
247
- }
248
- }]);
249
- return Batch;
250
- }(ObjectLayer);
183
+ // 统一属性更新入口
184
+ handlePropertyUpdate() {
185
+ this.clearScene();
186
+ this.init();
187
+ }
188
+
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
+ }
200
+
201
+ // 显式销毁方法
202
+ dispose() {
203
+ this.clearScene();
204
+ }
205
+ }
251
206
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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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"}
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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"}