@anov/3d-ability 0.0.168 → 0.0.170

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 (243) hide show
  1. package/dist/business/Animation/motion/index.d.ts +3 -2
  2. package/dist/business/Animation/motion/index.js +6 -1
  3. package/dist/business/Animation/motion/index.js.map +1 -1
  4. package/dist/business/Area/Fence/FenceBase.d.ts +2 -2
  5. package/dist/business/Area/Fence/FenceBase.js +1 -1
  6. package/dist/business/Area/Fence/FenceBase.js.map +1 -1
  7. package/dist/business/Area/Fence/fence_base_01.js +1 -1
  8. package/dist/business/Area/Fence/fence_base_01.js.map +1 -1
  9. package/dist/business/Area/Fence/fence_feeting_01.js +1 -1
  10. package/dist/business/Area/Fence/fence_feeting_01.js.map +1 -1
  11. package/dist/business/Area/Fence/fence_roll_01.js +1 -1
  12. package/dist/business/Area/Fence/fence_roll_01.js.map +1 -1
  13. package/dist/business/Area/FillArea/FillAreaBase.d.ts +2 -2
  14. package/dist/business/Area/FillArea/FillAreaBase.js +1 -1
  15. package/dist/business/Area/FillArea/FillAreaBase.js.map +1 -1
  16. package/dist/business/Area/index.d.ts +2 -1
  17. package/dist/business/Area/index.js +2 -2
  18. package/dist/business/Area/index.js.map +1 -1
  19. package/dist/business/Base/ObjectLayer.d.ts +4 -2
  20. package/dist/business/Base/ObjectLayer.js +7 -11
  21. package/dist/business/Base/ObjectLayer.js.map +1 -1
  22. package/dist/business/Batch/index.d.ts +1 -1
  23. package/dist/business/Batch/index.js +2 -2
  24. package/dist/business/Batch/index.js.map +1 -1
  25. package/dist/business/Box/index.d.ts +1 -1
  26. package/dist/business/Box/index.js +2 -2
  27. package/dist/business/Box/index.js.map +1 -1
  28. package/dist/business/Box/interface.js.map +1 -1
  29. package/dist/business/Box/types.js.map +1 -1
  30. package/dist/business/Cylinder/index.d.ts +1 -1
  31. package/dist/business/Cylinder/index.js +2 -2
  32. package/dist/business/Cylinder/index.js.map +1 -1
  33. package/dist/business/Cylinder/interface.d.ts +1 -1
  34. package/dist/business/Cylinder/interface.js.map +1 -1
  35. package/dist/business/Cylinder/types.js.map +1 -1
  36. package/dist/business/Flyline/index.d.ts +2 -2
  37. package/dist/business/Flyline/index.js +8 -8
  38. package/dist/business/Flyline/index.js.map +1 -1
  39. package/dist/business/Flyline/line/ArcLine.d.ts +1 -1
  40. package/dist/business/Flyline/line/ArcLine.js +3 -3
  41. package/dist/business/Flyline/line/ArcLine.js.map +1 -1
  42. package/dist/business/HeatMap/HeatMap.d.ts +3 -59
  43. package/dist/business/HeatMap/HeatMap.js +7 -95
  44. package/dist/business/HeatMap/HeatMap.js.map +1 -1
  45. package/dist/business/InfoPanel/index.d.ts +3 -4
  46. package/dist/business/InfoPanel/index.js +13 -19
  47. package/dist/business/InfoPanel/index.js.map +1 -1
  48. package/dist/business/InfoPanel/type.js.map +1 -1
  49. package/dist/business/Line/index.d.ts +3 -3
  50. package/dist/business/Line/index.js +8 -7
  51. package/dist/business/Line/index.js.map +1 -1
  52. package/dist/business/Line/interface.d.ts +4 -4
  53. package/dist/business/Line/interface.js.map +1 -1
  54. package/dist/business/Line/types.js.map +1 -1
  55. package/dist/business/Mark/index.d.ts +2 -1
  56. package/dist/business/Mark/index.js +3 -3
  57. package/dist/business/Mark/index.js.map +1 -1
  58. package/dist/business/MaterialSwitch/MaterialSwitchSystem.d.ts +5 -3
  59. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js +14 -10
  60. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
  61. package/dist/business/MaterialSwitch/index.js.map +1 -1
  62. package/dist/business/Plane/index.d.ts +3 -2
  63. package/dist/business/Plane/index.js +2 -2
  64. package/dist/business/Plane/index.js.map +1 -1
  65. package/dist/business/Plane/interface.d.ts +5 -5
  66. package/dist/business/Plane/interface.js.map +1 -1
  67. package/dist/business/Plane/types.js.map +1 -1
  68. package/dist/business/Poi/index.d.ts +2 -3
  69. package/dist/business/Poi/index.js +25 -54
  70. package/dist/business/Poi/index.js.map +1 -1
  71. package/dist/business/Poi/link/Cylinder.d.ts +2 -1
  72. package/dist/business/Poi/link/Cylinder.js +3 -3
  73. package/dist/business/Poi/link/Cylinder.js.map +1 -1
  74. package/dist/business/Poi/link/Pyramid.d.ts +2 -1
  75. package/dist/business/Poi/link/Pyramid.js +2 -2
  76. package/dist/business/Poi/link/Pyramid.js.map +1 -1
  77. package/dist/business/Poi/link/index.d.ts +3 -3
  78. package/dist/business/Poi/link/index.js +2 -2
  79. package/dist/business/Poi/link/index.js.map +1 -1
  80. package/dist/business/Poi/panel/index.d.ts +3 -3
  81. package/dist/business/Poi/panel/index.js +7 -6
  82. package/dist/business/Poi/panel/index.js.map +1 -1
  83. package/dist/business/Poi/panel/interfaces.js.map +1 -1
  84. package/dist/business/Poi/panel/utils.d.ts +1 -1
  85. package/dist/business/Poi/panel/utils.js +3 -3
  86. package/dist/business/Poi/panel/utils.js.map +1 -1
  87. package/dist/business/Poi/particle/DoubleCircle.d.ts +2 -1
  88. package/dist/business/Poi/particle/DoubleCircle.js +3 -2
  89. package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
  90. package/dist/business/Poi/particle/DynamicCircle.d.ts +2 -1
  91. package/dist/business/Poi/particle/DynamicCircle.js +3 -2
  92. package/dist/business/Poi/particle/DynamicCircle.js.map +1 -1
  93. package/dist/business/Poi/particle/SingleCircle.d.ts +2 -1
  94. package/dist/business/Poi/particle/SingleCircle.js +3 -2
  95. package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
  96. package/dist/business/Poi/particle/index.d.ts +2 -2
  97. package/dist/business/Poi/particle/index.js +2 -2
  98. package/dist/business/Poi/particle/index.js.map +1 -1
  99. package/dist/business/Poi/title/Border.d.ts +2 -1
  100. package/dist/business/Poi/title/Border.js +2 -2
  101. package/dist/business/Poi/title/Border.js.map +1 -1
  102. package/dist/business/Poi/title/Ellipse.d.ts +2 -1
  103. package/dist/business/Poi/title/Ellipse.js +2 -2
  104. package/dist/business/Poi/title/Ellipse.js.map +1 -1
  105. package/dist/business/Poi/title/index.d.ts +3 -2
  106. package/dist/business/Poi/title/index.js +2 -2
  107. package/dist/business/Poi/title/index.js.map +1 -1
  108. package/dist/business/Sphere/index.d.ts +2 -2
  109. package/dist/business/Sphere/index.js +2 -2
  110. package/dist/business/Sphere/index.js.map +1 -1
  111. package/dist/business/Sphere/interface.js.map +1 -1
  112. package/dist/business/Sphere/types.js.map +1 -1
  113. package/dist/business/Spline/index.d.ts +2 -1
  114. package/dist/business/Spline/index.js +14 -28
  115. package/dist/business/Spline/index.js.map +1 -1
  116. package/dist/business/SplitBuilding/index.d.ts +2 -2
  117. package/dist/business/SplitBuilding/index.js +2 -2
  118. package/dist/business/SplitBuilding/index.js.map +1 -1
  119. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.d.ts +2 -2
  120. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js +6 -5
  121. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js.map +1 -1
  122. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.d.ts +2 -2
  123. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js +3 -3
  124. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js.map +1 -1
  125. package/dist/business/TrafficComponents/base.d.ts +4 -4
  126. package/dist/business/TrafficComponents/base.js +6 -6
  127. package/dist/business/TrafficComponents/base.js.map +1 -1
  128. package/dist/business/TrafficComponents/index.d.ts +4 -2
  129. package/dist/business/TrafficComponents/index.js +2 -2
  130. package/dist/business/TrafficComponents/index.js.map +1 -1
  131. package/dist/business/Utils/defineProps.js +3 -3
  132. package/dist/business/Utils/defineProps.js.map +1 -1
  133. package/dist/business/VideoPanel/index.d.ts +4 -4
  134. package/dist/business/VideoPanel/index.js +11 -13
  135. package/dist/business/VideoPanel/index.js.map +1 -1
  136. package/dist/business/VideoPanel/type.d.ts +8 -8
  137. package/dist/business/VideoPanel/type.js.map +1 -1
  138. package/dist/business/Water/index.d.ts +3 -1
  139. package/dist/business/Water/index.js +5 -5
  140. package/dist/business/Water/index.js.map +1 -1
  141. package/dist/business/index.d.ts +21 -18
  142. package/dist/business/index.js +18 -18
  143. package/dist/business/index.js.map +1 -1
  144. package/dist/core/Camera/PerspectiveCamera/CameraExpand.d.ts +1 -1
  145. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +4 -4
  146. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
  147. package/dist/core/Camera/index.d.ts +2 -1
  148. package/dist/core/Camera/index.js +1 -1
  149. package/dist/core/Camera/index.js.map +1 -1
  150. package/dist/core/Controls/FirstViewControl/index.d.ts +3 -2
  151. package/dist/core/Controls/FirstViewControl/index.js +4 -2
  152. package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
  153. package/dist/core/Controls/ThirdViewControl/index.d.ts +3 -2
  154. package/dist/core/Controls/ThirdViewControl/index.js +6 -3
  155. package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
  156. package/dist/core/Controls/ThirdViewControl/player/camera.d.ts +4 -2
  157. package/dist/core/Controls/ThirdViewControl/player/camera.js +5 -2
  158. package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
  159. package/dist/core/Controls/ThirdViewControl/player.d.ts +4 -2
  160. package/dist/core/Controls/ThirdViewControl/player.js +6 -2
  161. package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
  162. package/dist/core/Controls/base.d.ts +4 -3
  163. package/dist/core/Controls/base.js +5 -3
  164. package/dist/core/Controls/base.js.map +1 -1
  165. package/dist/core/Curve/index.d.ts +2 -1
  166. package/dist/core/Curve/index.js +1 -1
  167. package/dist/core/Curve/index.js.map +1 -1
  168. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  169. package/dist/core/Material/index.d.ts +5 -3
  170. package/dist/core/Material/index.js +3 -3
  171. package/dist/core/Material/index.js.map +1 -1
  172. package/dist/core/PostEffects/addACESFilmicToneMappingPass.d.ts +2 -1
  173. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +4 -4
  174. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
  175. package/dist/core/PostEffects/addBrightnessContrastPass.d.ts +2 -1
  176. package/dist/core/PostEffects/addBrightnessContrastPass.js +4 -4
  177. package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
  178. package/dist/core/PostEffects/bloomPass.d.ts +2 -1
  179. package/dist/core/PostEffects/bloomPass.js +6 -5
  180. package/dist/core/PostEffects/bloomPass.js.map +1 -1
  181. package/dist/core/PostEffects/bloomSelect.d.ts +2 -2
  182. package/dist/core/PostEffects/bloomSelect.js +7 -6
  183. package/dist/core/PostEffects/bloomSelect.js.map +1 -1
  184. package/dist/core/PostEffects/colorifyPass.d.ts +2 -2
  185. package/dist/core/PostEffects/colorifyPass.js +4 -4
  186. package/dist/core/PostEffects/colorifyPass.js.map +1 -1
  187. package/dist/core/PostEffects/index.d.ts +4 -13
  188. package/dist/core/PostEffects/index.js +14 -20
  189. package/dist/core/PostEffects/index.js.map +1 -1
  190. package/dist/core/PostEffects/outlinePass.d.ts +2 -2
  191. package/dist/core/PostEffects/outlinePass.js +4 -5
  192. package/dist/core/PostEffects/outlinePass.js.map +1 -1
  193. package/dist/core/PostEffects/postprocessing.d.ts +2 -2
  194. package/dist/core/PostEffects/postprocessing.js +2 -2
  195. package/dist/core/PostEffects/postprocessing.js.map +1 -1
  196. package/dist/core/PostEffects/saoPass.d.ts +2 -1
  197. package/dist/core/PostEffects/saoPass.js +4 -5
  198. package/dist/core/PostEffects/saoPass.js.map +1 -1
  199. package/dist/core/SceneEffect/grow/grow.d.ts +3 -1
  200. package/dist/core/SceneEffect/grow/grow.js +5 -3
  201. package/dist/core/SceneEffect/grow/grow.js.map +1 -1
  202. package/dist/core/WeatherSystem/DynamicWeatherSystem.d.ts +3 -1
  203. package/dist/core/WeatherSystem/DynamicWeatherSystem.js +6 -4
  204. package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
  205. package/dist/core/WeatherSystem/color/index.d.ts +3 -0
  206. package/dist/core/WeatherSystem/color/index.js +9 -14
  207. package/dist/core/WeatherSystem/color/index.js.map +1 -1
  208. package/dist/core/WeatherSystem/controller/ColorController.d.ts +3 -1
  209. package/dist/core/WeatherSystem/controller/ColorController.js +5 -3
  210. package/dist/core/WeatherSystem/controller/ColorController.js.map +1 -1
  211. package/dist/core/WeatherSystem/controller/HDRController.d.ts +3 -1
  212. package/dist/core/WeatherSystem/controller/HDRController.js +5 -3
  213. package/dist/core/WeatherSystem/controller/HDRController.js.map +1 -1
  214. package/dist/core/WeatherSystem/controller/SkyController.d.ts +3 -1
  215. package/dist/core/WeatherSystem/controller/SkyController.js +4 -2
  216. package/dist/core/WeatherSystem/controller/SkyController.js.map +1 -1
  217. package/dist/core/WeatherSystem/hdr/index.d.ts +4 -2
  218. package/dist/core/WeatherSystem/hdr/index.js +12 -11
  219. package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
  220. package/dist/core/WeatherSystem/index.d.ts +3 -2
  221. package/dist/core/WeatherSystem/index.js +7 -4
  222. package/dist/core/WeatherSystem/index.js.map +1 -1
  223. package/dist/core/WeatherSystem/objects/rain/index.d.ts +2 -1
  224. package/dist/core/WeatherSystem/objects/rain/index.js +3 -3
  225. package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
  226. package/dist/core/WeatherSystem/objects/rain/lineRain.d.ts +3 -1
  227. package/dist/core/WeatherSystem/objects/rain/lineRain.js +7 -5
  228. package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
  229. package/dist/core/WeatherSystem/objects/rain/plane.d.ts +3 -1
  230. package/dist/core/WeatherSystem/objects/rain/plane.js +6 -4
  231. package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
  232. package/dist/core/WeatherSystem/objects/rain/point.d.ts +3 -1
  233. package/dist/core/WeatherSystem/objects/rain/point.js +3 -0
  234. package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
  235. package/dist/core/WeatherSystem/sky/index.js.map +1 -1
  236. package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
  237. package/dist/core/WeatherSystem/weather/index.d.ts +3 -2
  238. package/dist/core/WeatherSystem/weather/index.js +7 -5
  239. package/dist/core/WeatherSystem/weather/index.js.map +1 -1
  240. package/dist/index.d.ts +13 -8
  241. package/dist/index.js +8 -8
  242. package/dist/index.js.map +1 -1
  243. package/package.json +3 -3
@@ -1,3 +1,4 @@
1
+ import type { SceneControl } from '@anov/3d-core';
1
2
  import { Mesh } from '@anov/3d-core';
2
3
  import ObjectLayer from '../Base/ObjectLayer';
3
4
  import type { ISpline, Option } from './types';
@@ -25,7 +26,7 @@ declare class Spline extends ObjectLayer implements ISpline {
25
26
  set textureSpeed(value: number);
26
27
  get close(): boolean;
27
28
  set close(value: boolean);
28
- constructor(option: Option);
29
+ constructor(option: Option, sceneControl: SceneControl);
29
30
  private init;
30
31
  private createCurveAndGeometry;
31
32
  private createMaterial;
@@ -12,16 +12,16 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
12
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; }
13
13
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
14
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); }
15
- import { DoubleSide, Mesh, MeshBasicMaterial, TubeGeometry, Vector3, MirroredRepeatWrapping, RepeatWrapping, TextureLoader, use } from '@anov/3d-core';
15
+ import { DoubleSide, Mesh, MeshBasicMaterial, MirroredRepeatWrapping, RepeatWrapping, TextureLoader, TubeGeometry, Vector3, use } from '@anov/3d-core';
16
16
  import ObjectLayer from "../Base/ObjectLayer";
17
17
  import { RoundLineGeometry } from "../Utils/round-curve";
18
18
  var Spline = /*#__PURE__*/function (_ObjectLayer) {
19
19
  _inherits(Spline, _ObjectLayer);
20
20
  var _super = _createSuper(Spline);
21
- function Spline(option) {
21
+ function Spline(option, sceneControl) {
22
22
  var _this;
23
23
  _classCallCheck(this, Spline);
24
- _this = _super.call(this);
24
+ _this = _super.call(this, sceneControl);
25
25
  _defineProperty(_assertThisInitialized(_this), "_width", void 0);
26
26
  _defineProperty(_assertThisInitialized(_this), "_color", void 0);
27
27
  _defineProperty(_assertThisInitialized(_this), "_points", void 0);
@@ -71,9 +71,7 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
71
71
  set: function set(newValue) {
72
72
  this._color = newValue;
73
73
  // 更新颜色时更新材质
74
- if (this.mesh && this.mesh.material && !this._textureUrl) {
75
- this.mesh.material.color.set(newValue);
76
- }
74
+ if (this.mesh && this.mesh.material && !this._textureUrl) this.mesh.material.color.set(newValue);
77
75
  }
78
76
  }, {
79
77
  key: "points",
@@ -142,7 +140,7 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
142
140
  // 添加到场景
143
141
  this.add(this.mesh);
144
142
  } catch (error) {
145
- console.error("Failed to create spline:", error);
143
+ console.error('Failed to create spline:', error);
146
144
  }
147
145
  }
148
146
 
@@ -150,9 +148,7 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
150
148
  }, {
151
149
  key: "createCurveAndGeometry",
152
150
  value: function createCurveAndGeometry() {
153
- if (!this._points || !this._points.length) {
154
- throw new Error("Points array cannot be empty");
155
- }
151
+ if (!this._points || !this._points.length) throw new Error('Points array cannot be empty');
156
152
 
157
153
  // 创建曲线点
158
154
  var groundLinePoints = this._points.map(function (v) {
@@ -194,7 +190,7 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
194
190
 
195
191
  // 设置纹理动画
196
192
  if (this._textureSpeed) {
197
- this._disposeCallbacks = use.useframe(function () {
193
+ this._disposeCallbacks = use.useframe(this.sceneControl, function () {
198
194
  texture.offset.x += _this2._textureSpeed;
199
195
  });
200
196
  }
@@ -216,19 +212,13 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
216
212
  this.remove(this.mesh);
217
213
 
218
214
  // 释放几何体资源
219
- if (this.mesh.geometry) {
220
- this.mesh.geometry.dispose();
221
- }
215
+ if (this.mesh.geometry) this.mesh.geometry.dispose();
222
216
 
223
217
  // 释放材质资源
224
218
  if (this.mesh.material) {
225
- if (Array.isArray(this.mesh.material)) {
226
- this.mesh.material.forEach(function (mat) {
227
- return mat.dispose();
228
- });
229
- } else {
230
- this.mesh.material.dispose();
231
- }
219
+ if (Array.isArray(this.mesh.material)) this.mesh.material.forEach(function (mat) {
220
+ return mat.dispose();
221
+ });else this.mesh.material.dispose();
232
222
  }
233
223
  this._disposeCallbacks && this._disposeCallbacks();
234
224
  }
@@ -252,13 +242,9 @@ var Spline = /*#__PURE__*/function (_ObjectLayer) {
252
242
 
253
243
  // 处理旧材质
254
244
  if (this.mesh.material) {
255
- if (Array.isArray(this.mesh.material)) {
256
- this.mesh.material.forEach(function (mat) {
257
- return mat.dispose();
258
- });
259
- } else {
260
- this.mesh.material.dispose();
261
- }
245
+ if (Array.isArray(this.mesh.material)) this.mesh.material.forEach(function (mat) {
246
+ return mat.dispose();
247
+ });else this.mesh.material.dispose();
262
248
  }
263
249
 
264
250
  // 创建新材质
@@ -1 +1 @@
1
- {"version":3,"names":["DoubleSide","Mesh","MeshBasicMaterial","TubeGeometry","Vector3","MirroredRepeatWrapping","RepeatWrapping","TextureLoader","use","ObjectLayer","RoundLineGeometry","Spline","_ObjectLayer","_inherits","_super","_createSuper","option","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_option$width","width","_option$color","color","_option$points","points","textureUrl","textureSpeed","_option$radius","radius","_option$close","close","_width","_color","_radius","_points","_close","_textureUrl","_textureSpeed","init","_createClass","key","get","set","newValue","updateGeometry","mesh","material","value","updateMaterial","_this$createCurveAndG","createCurveAndGeometry","curve","geometry","createMaterial","add","error","console","length","Error","groundLinePoints","map","v","position","groundLine","tube","_this2","textLoader","texture","load","repeat","wrapS","wrapT","transparent","_disposeCallbacks","useframe","offset","x","side","cleanupResources","remove","dispose","Array","isArray","forEach","mat","destroy"],"sources":["../../../src/business/Spline/index.ts"],"sourcesContent":["import type { Curve } from '@anov/3d-core'\nimport { DoubleSide, Mesh, MeshBasicMaterial, TubeGeometry, Vector3, MirroredRepeatWrapping, RepeatWrapping, TextureLoader, use } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport { RoundLineGeometry } from '../Utils/round-curve'\nimport type { ISpline, Option } from './types'\nclass Spline extends ObjectLayer implements ISpline {\n _width: number\n _color: string\n _points: any\n _radius: number\n _textureUrl: string\n _textureSpeed: number\n _close: boolean = false\n mesh!: Mesh\n private _disposeCallbacks: Function\n\n get width(): number {\n return this._width\n }\n\n set width(newValue: number) {\n this._width = newValue\n // 更新宽度时重新生成管道几何体\n this.updateGeometry()\n }\n\n get color(): string {\n return this._color\n }\n\n set color(newValue: string) {\n this._color = newValue\n // 更新颜色时更新材质\n if (this.mesh && this.mesh.material && !this._textureUrl) {\n (this.mesh.material as MeshBasicMaterial).color.set(newValue)\n }\n }\n\n get points(): any {\n return this._points\n }\n\n set points(value: any) {\n this._points = value\n // 点发生变化时重新初始化几何体\n this.updateGeometry()\n }\n\n get radius(): number {\n return this._radius\n }\n\n set radius(value: number) {\n this._radius = value\n // 半径变化时更新几何体\n this.updateGeometry()\n }\n\n get textureUrl(): string {\n return this._textureUrl\n }\n\n set textureUrl(value: string) {\n this._textureUrl = value\n // 纹理URL变化时更新材质\n this.updateMaterial()\n }\n\n get textureSpeed(): number {\n return this._textureSpeed\n }\n\n set textureSpeed(value: number) {\n this._textureSpeed = value\n }\n\n get close(): boolean {\n return this._close\n }\n\n set close(value: boolean) {\n this._close = value\n // 闭合状态变化时更新几何体\n this.updateGeometry()\n }\n\n constructor(option: Option) {\n super()\n const { width = 2, color = '#fff', points = [], textureUrl, textureSpeed, radius = 1, close = false } = option\n this._width = width\n this._color = color\n this._radius = radius\n this._points = points\n this._close = close\n this._textureUrl = textureUrl\n this._textureSpeed = textureSpeed\n this.init()\n }\n\n private init() {\n // 初始化时直接调用统一的创建几何体和材质方法\n try {\n\n // 创建新的曲线和几何体\n const { curve, geometry } = this.createCurveAndGeometry();\n \n // 创建材质\n const material = this.createMaterial();\n\n // 创建网格\n this.mesh = new Mesh(geometry, material);\n\n // 添加到场景\n this.add(this.mesh);\n } catch (error) {\n console.error(\"Failed to create spline:\", error);\n }\n }\n\n // 统一创建曲线和几何体的方法\n private createCurveAndGeometry(): { curve: Curve<Vector3>, geometry: TubeGeometry } {\n if (!this._points || !this._points.length) {\n throw new Error(\"Points array cannot be empty\");\n }\n\n // 创建曲线点\n const groundLinePoints = this._points.map(v => new Vector3(v.position[0], v.position[1], v.position[2]));\n\n // 创建圆形线几何体\n const groundLine = new RoundLineGeometry(groundLinePoints, {\n radius: this._radius,\n close: this._close,\n });\n\n // 获取曲线\n const curve = groundLine.curve;\n\n // 创建管道几何体\n const tube = new TubeGeometry(curve, 10000, this._width, 2, this._close);\n\n return { curve, geometry: tube };\n }\n\n // 创建材质方法\n private createMaterial(): MeshBasicMaterial {\n if (this._textureUrl) {\n const textLoader = new TextureLoader();\n const texture = textLoader.load(this._textureUrl);\n texture.repeat.set(1, 2);\n texture.wrapS = RepeatWrapping;\n texture.wrapT = MirroredRepeatWrapping;\n\n const material = new MeshBasicMaterial({\n map: texture,\n transparent: true,\n });\n\n // 设置纹理动画\n if (this._textureSpeed) {\n this._disposeCallbacks = use.useframe(() => {\n texture.offset.x += this._textureSpeed;\n });\n }\n\n return material;\n } else {\n return new MeshBasicMaterial({\n color: this._color,\n side: DoubleSide,\n });\n }\n }\n\n // 清理资源\n private cleanupResources() {\n if (this.mesh) {\n // 从场景中移除\n this.remove(this.mesh);\n\n // 释放几何体资源\n if (this.mesh.geometry) {\n this.mesh.geometry.dispose();\n }\n\n // 释放材质资源\n if (this.mesh.material) {\n if (Array.isArray(this.mesh.material)) {\n this.mesh.material.forEach(mat => mat.dispose());\n } else {\n this.mesh.material.dispose();\n }\n }\n\n this._disposeCallbacks && this._disposeCallbacks()\n }\n }\n\n // 更新几何体方法\n private updateGeometry() {\n if (!this._points || !this._points.length) return;\n // 清理旧资源\n this.cleanupResources();\n this.init();\n }\n\n // 更新材质方法\n private updateMaterial() {\n if (!this.mesh) return;\n\n // 处理旧材质\n if (this.mesh.material) {\n if (Array.isArray(this.mesh.material)) {\n this.mesh.material.forEach(mat => mat.dispose());\n } else {\n this.mesh.material.dispose();\n }\n }\n\n // 创建新材质\n this.mesh.material = this.createMaterial();\n }\n\n // 销毁\n destroy() {\n this.cleanupResources()\n }\n}\n\nexport { Spline }"],"mappings":"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"}
1
+ {"version":3,"names":["DoubleSide","Mesh","MeshBasicMaterial","MirroredRepeatWrapping","RepeatWrapping","TextureLoader","TubeGeometry","Vector3","use","ObjectLayer","RoundLineGeometry","Spline","_ObjectLayer","_inherits","_super","_createSuper","option","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_option$width","width","_option$color","color","_option$points","points","textureUrl","textureSpeed","_option$radius","radius","_option$close","close","_width","_color","_radius","_points","_close","_textureUrl","_textureSpeed","init","_createClass","key","get","set","newValue","updateGeometry","mesh","material","value","updateMaterial","_this$createCurveAndG","createCurveAndGeometry","curve","geometry","createMaterial","add","error","console","length","Error","groundLinePoints","map","v","position","groundLine","tube","_this2","textLoader","texture","load","repeat","wrapS","wrapT","transparent","_disposeCallbacks","useframe","offset","x","side","cleanupResources","remove","dispose","Array","isArray","forEach","mat","destroy"],"sources":["../../../src/business/Spline/index.ts"],"sourcesContent":["import type { Curve, SceneControl } from '@anov/3d-core'\nimport { DoubleSide, Mesh, MeshBasicMaterial, MirroredRepeatWrapping, RepeatWrapping, TextureLoader, TubeGeometry, Vector3, use } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport { RoundLineGeometry } from '../Utils/round-curve'\nimport type { ISpline, Option } from './types'\n\nclass Spline extends ObjectLayer implements ISpline {\n _width: number\n _color: string\n _points: any\n _radius: number\n _textureUrl: string\n _textureSpeed: number\n _close = false\n mesh!: Mesh\n private _disposeCallbacks: Function\n\n get width(): number {\n return this._width\n }\n\n set width(newValue: number) {\n this._width = newValue\n // 更新宽度时重新生成管道几何体\n this.updateGeometry()\n }\n\n get color(): string {\n return this._color\n }\n\n set color(newValue: string) {\n this._color = newValue\n // 更新颜色时更新材质\n if (this.mesh && this.mesh.material && !this._textureUrl)\n (this.mesh.material as MeshBasicMaterial).color.set(newValue)\n }\n\n get points(): any {\n return this._points\n }\n\n set points(value: any) {\n this._points = value\n // 点发生变化时重新初始化几何体\n this.updateGeometry()\n }\n\n get radius(): number {\n return this._radius\n }\n\n set radius(value: number) {\n this._radius = value\n // 半径变化时更新几何体\n this.updateGeometry()\n }\n\n get textureUrl(): string {\n return this._textureUrl\n }\n\n set textureUrl(value: string) {\n this._textureUrl = value\n // 纹理URL变化时更新材质\n this.updateMaterial()\n }\n\n get textureSpeed(): number {\n return this._textureSpeed\n }\n\n set textureSpeed(value: number) {\n this._textureSpeed = value\n }\n\n get close(): boolean {\n return this._close\n }\n\n set close(value: boolean) {\n this._close = value\n // 闭合状态变化时更新几何体\n this.updateGeometry()\n }\n\n constructor(option: Option, sceneControl: SceneControl) {\n super(sceneControl)\n const { width = 2, color = '#fff', points = [], textureUrl, textureSpeed, radius = 1, close = false } = option\n this._width = width\n this._color = color\n this._radius = radius\n this._points = points\n this._close = close\n this._textureUrl = textureUrl\n this._textureSpeed = textureSpeed\n this.init()\n }\n\n private init() {\n // 初始化时直接调用统一的创建几何体和材质方法\n try {\n // 创建新的曲线和几何体\n const { curve, geometry } = this.createCurveAndGeometry()\n\n // 创建材质\n const material = this.createMaterial()\n\n // 创建网格\n this.mesh = new Mesh(geometry, material)\n\n // 添加到场景\n this.add(this.mesh)\n }\n catch (error) {\n console.error('Failed to create spline:', error)\n }\n }\n\n // 统一创建曲线和几何体的方法\n private createCurveAndGeometry(): { curve: Curve<Vector3>; geometry: TubeGeometry } {\n if (!this._points || !this._points.length)\n throw new Error('Points array cannot be empty')\n\n // 创建曲线点\n const groundLinePoints = this._points.map(v => new Vector3(v.position[0], v.position[1], v.position[2]))\n\n // 创建圆形线几何体\n const groundLine = new RoundLineGeometry(groundLinePoints, {\n radius: this._radius,\n close: this._close,\n })\n\n // 获取曲线\n const curve = groundLine.curve\n\n // 创建管道几何体\n const tube = new TubeGeometry(curve, 10000, this._width, 2, this._close)\n\n return { curve, geometry: tube }\n }\n\n // 创建材质方法\n private createMaterial(): MeshBasicMaterial {\n if (this._textureUrl) {\n const textLoader = new TextureLoader()\n const texture = textLoader.load(this._textureUrl)\n texture.repeat.set(1, 2)\n texture.wrapS = RepeatWrapping\n texture.wrapT = MirroredRepeatWrapping\n\n const material = new MeshBasicMaterial({\n map: texture,\n transparent: true,\n })\n\n // 设置纹理动画\n if (this._textureSpeed) {\n this._disposeCallbacks = use.useframe(this.sceneControl, () => {\n texture.offset.x += this._textureSpeed\n })\n }\n\n return material\n }\n else {\n return new MeshBasicMaterial({\n color: this._color,\n side: DoubleSide,\n })\n }\n }\n\n // 清理资源\n private cleanupResources() {\n if (this.mesh) {\n // 从场景中移除\n this.remove(this.mesh)\n\n // 释放几何体资源\n if (this.mesh.geometry)\n this.mesh.geometry.dispose()\n\n // 释放材质资源\n if (this.mesh.material) {\n if (Array.isArray(this.mesh.material))\n this.mesh.material.forEach(mat => mat.dispose())\n else\n this.mesh.material.dispose()\n }\n\n this._disposeCallbacks && this._disposeCallbacks()\n }\n }\n\n // 更新几何体方法\n private updateGeometry() {\n if (!this._points || !this._points.length)\n return\n // 清理旧资源\n this.cleanupResources()\n this.init()\n }\n\n // 更新材质方法\n private updateMaterial() {\n if (!this.mesh)\n return\n\n // 处理旧材质\n if (this.mesh.material) {\n if (Array.isArray(this.mesh.material))\n this.mesh.material.forEach(mat => mat.dispose())\n else\n this.mesh.material.dispose()\n }\n\n // 创建新材质\n this.mesh.material = this.createMaterial()\n }\n\n // 销毁\n destroy() {\n this.cleanupResources()\n }\n}\n\nexport { Spline }"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Object3D } from '@anov/3d-core';
1
+ import type { Object3D, SceneControl } from '@anov/3d-core';
2
2
  import ObjectLayer from '../Base/ObjectLayer';
3
3
  import { EBuildingSplitType } from './type';
4
4
  declare class BuildingSplit extends ObjectLayer {
@@ -9,7 +9,7 @@ declare class BuildingSplit extends ObjectLayer {
9
9
  private hasRoof;
10
10
  private currentAnimation;
11
11
  private _building;
12
- constructor(building: Object3D);
12
+ constructor(building: Object3D, sceneControl: SceneControl);
13
13
  get building(): Object3D<import("@anov/3d-core").Object3DEventMap>;
14
14
  /**
15
15
  * 初始化建筑拆分器
@@ -21,10 +21,10 @@ import { EBuildingSplitType, EDirection } from "./type";
21
21
  var BuildingSplit = /*#__PURE__*/function (_ObjectLayer) {
22
22
  _inherits(BuildingSplit, _ObjectLayer);
23
23
  var _super = _createSuper(BuildingSplit);
24
- function BuildingSplit(building) {
24
+ function BuildingSplit(building, sceneControl) {
25
25
  var _this;
26
26
  _classCallCheck(this, BuildingSplit);
27
- _this = _super.call(this);
27
+ _this = _super.call(this, sceneControl);
28
28
  _defineProperty(_assertThisInitialized(_this), "floorGroups", new Map());
29
29
  _defineProperty(_assertThisInitialized(_this), "sortedFloorLevels", []);
30
30
  _defineProperty(_assertThisInitialized(_this), "aboveGroundFloorCount", 0);
@@ -1 +1 @@
1
- {"version":3,"names":["Vector3","ObjectLayer","EBuildingSplitType","EDirection","BuildingSplit","_ObjectLayer","_inherits","_super","_createSuper","building","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","timer","_building","init","_createClass","key","get","value","floorGroups","sortedFloorLevels","aboveGroundFloorCount","undergroundFloorCount","hasRoof","parseFloors","Array","from","values","map","group","level","sort","a","b","_this2","traverse","object","type","name","startsWith","addToFloorGroup","mesh","originalPosition","position","clone","originalVisibility","visible","prefix","isUnderground","length","floorNum","parseInt","substring","isNaN","concat","Math","max","component","_this$floorGroups$get","arguments","undefined","has","set","isRoof","components","push","split","options","floor","animation","animOption","Move","duration","currentAnimation","window","clearTimeout","resetBuilding","success","message","abs","Hide","hideAboveFloors","moveAboveFloorsDirection","Solo","showSoloFloor","targetFloor","_iterator","_createForOfIteratorHelper","_step","s","n","done","floorGroup","floorLevel","_iterator2","_step2","copy","err","e","f","shouldBeVisible","_iterator3","_step3","moveAboveFloorsUp","distance","_iterator4","_step4","_iterator6","_step6","startPositions","targetPositions","_iterator5","_step5","_iterator7","_step7","targetPos","y","animatePositions","_ref","rule","_ref$direction","direction","_iterator8","_step8","_iterator10","_step10","_iterator9","_step9","_iterator11","_step11","add","fromArray","getDirectionVector","vector","coefficient","Right","Left","Front","Back","Right_Front","Left_Front","Right_Back","Left_Back","_iterator12","_step12","_iterator13","_step13","_iterator14","_step14","_this3","startTime","performance","now","animate","currentTime","elapsed","progress","min","forEach","startPos","lerpVectors","requestAnimationFrame","setTimeout","_iterator15","_step15","_iterator16","_step16","getFloorCounts","aboveGround","underground"],"sources":["../../../src/business/SplitBuilding/index.ts"],"sourcesContent":["import { Group, Mesh, Vector3 } from '@anov/3d-core'\nimport type { Object3D } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport type { AnimationOption, Option } from './type'\nimport { EBuildingSplitType, EDirection } from './type'\n\ntype FloorComponent = {\n mesh: Object3D\n originalPosition: Vector3\n originalVisibility: boolean\n}\n\ntype FloorGroup = {\n level: number\n isUnderground: boolean\n isRoof: boolean\n components: FloorComponent[]\n}\n\nclass BuildingSplit extends ObjectLayer {\n private floorGroups: Map<string, FloorGroup> = new Map()\n private sortedFloorLevels: number[] = []\n private aboveGroundFloorCount = 0\n private undergroundFloorCount = 0\n private hasRoof = false\n private currentAnimation: { timer: number | null } = { timer: null }\n\n private _building: Object3D\n\n constructor(building: Object3D) {\n super()\n this._building = building\n this.init()\n }\n\n public get building() {\n return this._building\n }\n\n /**\n * 初始化建筑拆分器\n * @param building 建筑模型\n */\n public init(): void {\n this.floorGroups = new Map()\n this.sortedFloorLevels = []\n this.aboveGroundFloorCount = 0\n this.undergroundFloorCount = 0\n this.hasRoof = false\n\n // 解析所有楼层\n this.parseFloors()\n\n // 排序楼层编号从低到高\n this.sortedFloorLevels = Array.from(this.floorGroups.values())\n .map(group => group.level)\n .sort((a, b) => a - b)\n }\n\n /**\n * 解析建筑模型中的楼层\n */\n private parseFloors(): void {\n this.building.traverse((object) => {\n if (object.type === 'Mesh' || object.type === 'Group') {\n const name = object.name\n // 检查是否为屋顶\n if (name.startsWith('Roof')) {\n this.addToFloorGroup('Roof', {\n mesh: object,\n originalPosition: object.position.clone(),\n originalVisibility: object.visible,\n })\n this.hasRoof = true\n return\n }\n\n // 提取楼层前缀\n let prefix: string | null = null\n let level = 0\n let isUnderground = false\n\n if (name.startsWith('F') && name.length >= 3) {\n // 地上楼层\n const floorNum = parseInt(name.substring(1, 3))\n if (!isNaN(floorNum)) {\n prefix = `F${name.substring(1, 3)}`\n level = floorNum\n isUnderground = false\n this.aboveGroundFloorCount = Math.max(this.aboveGroundFloorCount, floorNum)\n }\n }\n else if (name.startsWith('B') && name.length >= 3) {\n // 地下楼层\n const floorNum = parseInt(name.substring(1, 3))\n if (!isNaN(floorNum)) {\n prefix = `B${name.substring(1, 3)}`\n level = -floorNum\n isUnderground = true\n this.undergroundFloorCount = Math.max(this.undergroundFloorCount, floorNum)\n }\n }\n\n if (prefix) {\n this.addToFloorGroup(prefix, {\n mesh: object,\n originalPosition: object.position.clone(),\n originalVisibility: object.visible,\n }, level, isUnderground)\n }\n }\n })\n }\n\n /**\n * 将组件添加到对应楼层分组\n */\n private addToFloorGroup(\n prefix: string,\n component: FloorComponent,\n level: number = this.aboveGroundFloorCount + 1,\n isUnderground = false,\n ): void {\n if (!this.floorGroups.has(prefix)) {\n this.floorGroups.set(prefix, {\n level,\n isUnderground,\n isRoof: prefix === 'Roof',\n components: [],\n })\n }\n\n this.floorGroups.get(prefix)?.components.push(component)\n }\n\n /**\n * 拆分楼层\n * @param options 拆分选项\n * @returns 成功或错误信息\n */\n public split(options): { success: boolean; message?: string } {\n const { floor, animation } = options\n const animOption: AnimationOption = animation || {\n type: EBuildingSplitType.Move,\n duration: 1000,\n }\n\n // 取消当前动画\n if (this.currentAnimation.timer !== null) {\n window.clearTimeout(this.currentAnimation.timer)\n this.currentAnimation.timer = null\n }\n\n // 处理 floor = 0 的情况:恢复完整状态\n if (floor === 0) {\n this.resetBuilding()\n return { success: true }\n }\n\n // 验证楼层参数\n if (floor > 0 && floor > this.aboveGroundFloorCount) {\n return {\n success: false,\n message: `地上楼层数超出范围,最大楼层为 ${this.aboveGroundFloorCount}`,\n }\n }\n\n if (floor < 0 && Math.abs(floor) > this.undergroundFloorCount) {\n return {\n success: false,\n message: `地下楼层数超出范围,最大地下楼层为 ${this.undergroundFloorCount}`,\n }\n }\n\n // 执行拆分操作\n switch (animOption.type) {\n case EBuildingSplitType.Hide:\n this.hideAboveFloors(floor)\n break\n case EBuildingSplitType.Move:\n this.moveAboveFloorsDirection(floor, animOption)\n break\n case EBuildingSplitType.Solo:\n this.showSoloFloor(floor)\n break\n }\n\n return { success: true }\n }\n\n /**\n * 隐藏指定楼层以上的楼层\n * @param targetFloor 目标楼层\n */\n private hideAboveFloors(targetFloor: number): void {\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n // 重置所有楼层组件位置\n for (const component of floorGroup.components)\n component.mesh.position.copy(component.originalPosition)\n\n // 设置可见性\n const shouldBeVisible = floorLevel <= targetFloor\n for (const component of floorGroup.components)\n component.mesh.visible = shouldBeVisible\n }\n }\n\n /**\n * 将指定楼层以上的楼层整体上移\n * @param targetFloor 目标楼层\n * @param animation 动画选项\n */\n private moveAboveFloorsUp(targetFloor: number, animation: AnimationOption): void {\n const distance = 10\n const duration = animation.duration\n\n // 重置所有楼层可见性\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components)\n component.mesh.visible = true\n }\n\n // 计算起始位置和目标位置\n const startPositions = new Map<Object3D, Vector3>()\n const targetPositions = new Map<Object3D, Vector3>()\n\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n for (const component of floorGroup.components) {\n startPositions.set(component.mesh, component.mesh.position.clone())\n\n if (floorLevel > targetFloor) {\n // 上方楼层需要上移\n const targetPos = component.originalPosition.clone()\n targetPos.y += distance\n targetPositions.set(component.mesh, targetPos)\n }\n else {\n // 其他楼层保持原位\n targetPositions.set(component.mesh, component.originalPosition.clone())\n }\n }\n }\n\n // 执行动画\n this.animatePositions(startPositions, targetPositions, duration)\n }\n\n /**\n * 将指定楼层以上的楼层向指定方向移动\n * @param targetFloor 目标楼层\n * @param animation 动画选项\n */\n private moveAboveFloorsDirection(targetFloor: number, animation: AnimationOption): void {\n const { direction = [10, 10, 0] } = animation.rule || {}\n const duration = animation.duration\n\n // 重置所有楼层可见性\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components)\n component.mesh.visible = true\n }\n\n // 计算起始位置和目标位置\n const startPositions = new Map<Object3D, Vector3>()\n const targetPositions = new Map<Object3D, Vector3>()\n\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n for (const component of floorGroup.components) {\n startPositions.set(component.mesh, component.mesh.position.clone())\n\n if (floorLevel > targetFloor) {\n // 上方楼层需要移动\n const targetPos = component.originalPosition.clone().add(new Vector3().fromArray(direction))\n targetPositions.set(component.mesh, targetPos)\n }\n else {\n // 其他楼层保持原位\n targetPositions.set(component.mesh, component.originalPosition.clone())\n }\n }\n }\n\n // 执行动画\n this.animatePositions(startPositions, targetPositions, duration)\n }\n\n /**\n * 计算方向向量\n * 规则:往右方(X)、前方(Z)是正、往左方(X)、后方(Z)是负数\n * @param direction 方向枚举\n * @param distance 移动距离\n * @returns Vector3 方向向量\n */\n private getDirectionVector(direction: EDirection, distance: number): Vector3 {\n const vector = new Vector3(0, 0, 0)\n const coefficient = 0.7071 // cos(45°) ≈ 0.7071\n switch (direction) {\n case EDirection.Right:\n vector.set(distance, 0, 0)\n break\n case EDirection.Left:\n vector.set(-distance, 0, 0)\n break\n case EDirection.Front:\n vector.set(0, 0, distance)\n break\n case EDirection.Back:\n vector.set(0, 0, -distance)\n break\n case EDirection.Right_Front:\n vector.set(distance * coefficient, distance * coefficient, distance * coefficient)\n break\n case EDirection.Left_Front:\n vector.set(-distance * coefficient, distance * coefficient, distance * coefficient)\n break\n case EDirection.Right_Back:\n vector.set(distance * coefficient, distance * coefficient, -distance * coefficient)\n break\n case EDirection.Left_Back:\n vector.set(-distance * coefficient, distance * coefficient, -distance * coefficient)\n break\n default:\n // 默认向右移动\n vector.set(distance, 0, 0)\n }\n\n return vector\n }\n\n /**\n * 只显示指定楼层\n * @param targetFloor 目标楼层\n */\n private showSoloFloor(targetFloor: number): void {\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n // 重置所有楼层组件位置\n for (const component of floorGroup.components)\n component.mesh.position.copy(component.originalPosition)\n\n // 设置可见性\n const shouldBeVisible = floorLevel === targetFloor\n for (const component of floorGroup.components)\n component.mesh.visible = shouldBeVisible\n }\n }\n\n /**\n * 执行位置动画\n * @param startPositions 起始位置\n * @param targetPositions 目标位置\n * @param duration 动画时长\n */\n private animatePositions(\n startPositions: Map<Object3D, Vector3>,\n targetPositions: Map<Object3D, Vector3>,\n duration: number,\n ): void {\n const startTime = performance.now()\n\n const animate = () => {\n const currentTime = performance.now()\n const elapsed = currentTime - startTime\n const progress = Math.min(elapsed / duration, 1)\n\n targetPositions.forEach((targetPos, mesh) => {\n const startPos = startPositions.get(mesh)\n if (startPos) {\n // 线性插值计算当前位置\n mesh.position.lerpVectors(startPos, targetPos, progress)\n }\n })\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n else {\n // 动画结束\n this.currentAnimation.timer = null\n }\n }\n\n animate()\n\n // 设置超时以确保动画完成\n this.currentAnimation.timer = window.setTimeout(() => {\n this.currentAnimation.timer = null\n }, duration + 100)\n }\n\n /**\n * 重置建筑到初始状态\n */\n private resetBuilding(): void {\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components) {\n // 恢复原始位置\n component.mesh.position.copy(component.originalPosition)\n\n // 恢复原始可见性\n component.mesh.visible = component.originalVisibility\n }\n }\n }\n\n /**\n * 获取楼层总数信息\n */\n public getFloorCounts(): { aboveGround: number; underground: number; hasRoof: boolean } {\n return {\n aboveGround: this.aboveGroundFloorCount,\n underground: this.undergroundFloorCount,\n hasRoof: this.hasRoof,\n }\n }\n}\n\nexport { BuildingSplit, EBuildingSplitType }"],"mappings":"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"}
1
+ {"version":3,"names":["Vector3","ObjectLayer","EBuildingSplitType","EDirection","BuildingSplit","_ObjectLayer","_inherits","_super","_createSuper","building","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","timer","_building","init","_createClass","key","get","value","floorGroups","sortedFloorLevels","aboveGroundFloorCount","undergroundFloorCount","hasRoof","parseFloors","Array","from","values","map","group","level","sort","a","b","_this2","traverse","object","type","name","startsWith","addToFloorGroup","mesh","originalPosition","position","clone","originalVisibility","visible","prefix","isUnderground","length","floorNum","parseInt","substring","isNaN","concat","Math","max","component","_this$floorGroups$get","arguments","undefined","has","set","isRoof","components","push","split","options","floor","animation","animOption","Move","duration","currentAnimation","window","clearTimeout","resetBuilding","success","message","abs","Hide","hideAboveFloors","moveAboveFloorsDirection","Solo","showSoloFloor","targetFloor","_iterator","_createForOfIteratorHelper","_step","s","n","done","floorGroup","floorLevel","_iterator2","_step2","copy","err","e","f","shouldBeVisible","_iterator3","_step3","moveAboveFloorsUp","distance","_iterator4","_step4","_iterator6","_step6","startPositions","targetPositions","_iterator5","_step5","_iterator7","_step7","targetPos","y","animatePositions","_ref","rule","_ref$direction","direction","_iterator8","_step8","_iterator10","_step10","_iterator9","_step9","_iterator11","_step11","add","fromArray","getDirectionVector","vector","coefficient","Right","Left","Front","Back","Right_Front","Left_Front","Right_Back","Left_Back","_iterator12","_step12","_iterator13","_step13","_iterator14","_step14","_this3","startTime","performance","now","animate","currentTime","elapsed","progress","min","forEach","startPos","lerpVectors","requestAnimationFrame","setTimeout","_iterator15","_step15","_iterator16","_step16","getFloorCounts","aboveGround","underground"],"sources":["../../../src/business/SplitBuilding/index.ts"],"sourcesContent":["import { Vector3 } from '@anov/3d-core'\nimport type { Object3D, SceneControl } from '@anov/3d-core'\nimport ObjectLayer from '../Base/ObjectLayer'\nimport type { AnimationOption } from './type'\nimport { EBuildingSplitType, EDirection } from './type'\n\ntype FloorComponent = {\n mesh: Object3D\n originalPosition: Vector3\n originalVisibility: boolean\n}\n\ntype FloorGroup = {\n level: number\n isUnderground: boolean\n isRoof: boolean\n components: FloorComponent[]\n}\n\nclass BuildingSplit extends ObjectLayer {\n private floorGroups: Map<string, FloorGroup> = new Map()\n private sortedFloorLevels: number[] = []\n private aboveGroundFloorCount = 0\n private undergroundFloorCount = 0\n private hasRoof = false\n private currentAnimation: { timer: number | null } = { timer: null }\n\n private _building: Object3D\n\n constructor(building: Object3D, sceneControl: SceneControl) {\n super(sceneControl)\n this._building = building\n this.init()\n }\n\n public get building() {\n return this._building\n }\n\n /**\n * 初始化建筑拆分器\n * @param building 建筑模型\n */\n public init(): void {\n this.floorGroups = new Map()\n this.sortedFloorLevels = []\n this.aboveGroundFloorCount = 0\n this.undergroundFloorCount = 0\n this.hasRoof = false\n\n // 解析所有楼层\n this.parseFloors()\n\n // 排序楼层编号从低到高\n this.sortedFloorLevels = Array.from(this.floorGroups.values())\n .map(group => group.level)\n .sort((a, b) => a - b)\n }\n\n /**\n * 解析建筑模型中的楼层\n */\n private parseFloors(): void {\n this.building.traverse((object) => {\n if (object.type === 'Mesh' || object.type === 'Group') {\n const name = object.name\n // 检查是否为屋顶\n if (name.startsWith('Roof')) {\n this.addToFloorGroup('Roof', {\n mesh: object,\n originalPosition: object.position.clone(),\n originalVisibility: object.visible,\n })\n this.hasRoof = true\n return\n }\n\n // 提取楼层前缀\n let prefix: string | null = null\n let level = 0\n let isUnderground = false\n\n if (name.startsWith('F') && name.length >= 3) {\n // 地上楼层\n const floorNum = parseInt(name.substring(1, 3))\n if (!isNaN(floorNum)) {\n prefix = `F${name.substring(1, 3)}`\n level = floorNum\n isUnderground = false\n this.aboveGroundFloorCount = Math.max(this.aboveGroundFloorCount, floorNum)\n }\n }\n else if (name.startsWith('B') && name.length >= 3) {\n // 地下楼层\n const floorNum = parseInt(name.substring(1, 3))\n if (!isNaN(floorNum)) {\n prefix = `B${name.substring(1, 3)}`\n level = -floorNum\n isUnderground = true\n this.undergroundFloorCount = Math.max(this.undergroundFloorCount, floorNum)\n }\n }\n\n if (prefix) {\n this.addToFloorGroup(prefix, {\n mesh: object,\n originalPosition: object.position.clone(),\n originalVisibility: object.visible,\n }, level, isUnderground)\n }\n }\n })\n }\n\n /**\n * 将组件添加到对应楼层分组\n */\n private addToFloorGroup(\n prefix: string,\n component: FloorComponent,\n level: number = this.aboveGroundFloorCount + 1,\n isUnderground = false,\n ): void {\n if (!this.floorGroups.has(prefix)) {\n this.floorGroups.set(prefix, {\n level,\n isUnderground,\n isRoof: prefix === 'Roof',\n components: [],\n })\n }\n\n this.floorGroups.get(prefix)?.components.push(component)\n }\n\n /**\n * 拆分楼层\n * @param options 拆分选项\n * @returns 成功或错误信息\n */\n public split(options): { success: boolean; message?: string } {\n const { floor, animation } = options\n const animOption: AnimationOption = animation || {\n type: EBuildingSplitType.Move,\n duration: 1000,\n }\n\n // 取消当前动画\n if (this.currentAnimation.timer !== null) {\n window.clearTimeout(this.currentAnimation.timer)\n this.currentAnimation.timer = null\n }\n\n // 处理 floor = 0 的情况:恢复完整状态\n if (floor === 0) {\n this.resetBuilding()\n return { success: true }\n }\n\n // 验证楼层参数\n if (floor > 0 && floor > this.aboveGroundFloorCount) {\n return {\n success: false,\n message: `地上楼层数超出范围,最大楼层为 ${this.aboveGroundFloorCount}`,\n }\n }\n\n if (floor < 0 && Math.abs(floor) > this.undergroundFloorCount) {\n return {\n success: false,\n message: `地下楼层数超出范围,最大地下楼层为 ${this.undergroundFloorCount}`,\n }\n }\n\n // 执行拆分操作\n switch (animOption.type) {\n case EBuildingSplitType.Hide:\n this.hideAboveFloors(floor)\n break\n case EBuildingSplitType.Move:\n this.moveAboveFloorsDirection(floor, animOption)\n break\n case EBuildingSplitType.Solo:\n this.showSoloFloor(floor)\n break\n }\n\n return { success: true }\n }\n\n /**\n * 隐藏指定楼层以上的楼层\n * @param targetFloor 目标楼层\n */\n private hideAboveFloors(targetFloor: number): void {\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n // 重置所有楼层组件位置\n for (const component of floorGroup.components)\n component.mesh.position.copy(component.originalPosition)\n\n // 设置可见性\n const shouldBeVisible = floorLevel <= targetFloor\n for (const component of floorGroup.components)\n component.mesh.visible = shouldBeVisible\n }\n }\n\n /**\n * 将指定楼层以上的楼层整体上移\n * @param targetFloor 目标楼层\n * @param animation 动画选项\n */\n private moveAboveFloorsUp(targetFloor: number, animation: AnimationOption): void {\n const distance = 10\n const duration = animation.duration\n\n // 重置所有楼层可见性\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components)\n component.mesh.visible = true\n }\n\n // 计算起始位置和目标位置\n const startPositions = new Map<Object3D, Vector3>()\n const targetPositions = new Map<Object3D, Vector3>()\n\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n for (const component of floorGroup.components) {\n startPositions.set(component.mesh, component.mesh.position.clone())\n\n if (floorLevel > targetFloor) {\n // 上方楼层需要上移\n const targetPos = component.originalPosition.clone()\n targetPos.y += distance\n targetPositions.set(component.mesh, targetPos)\n }\n else {\n // 其他楼层保持原位\n targetPositions.set(component.mesh, component.originalPosition.clone())\n }\n }\n }\n\n // 执行动画\n this.animatePositions(startPositions, targetPositions, duration)\n }\n\n /**\n * 将指定楼层以上的楼层向指定方向移动\n * @param targetFloor 目标楼层\n * @param animation 动画选项\n */\n private moveAboveFloorsDirection(targetFloor: number, animation: AnimationOption): void {\n const { direction = [10, 10, 0] } = animation.rule || {}\n const duration = animation.duration\n\n // 重置所有楼层可见性\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components)\n component.mesh.visible = true\n }\n\n // 计算起始位置和目标位置\n const startPositions = new Map<Object3D, Vector3>()\n const targetPositions = new Map<Object3D, Vector3>()\n\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n for (const component of floorGroup.components) {\n startPositions.set(component.mesh, component.mesh.position.clone())\n\n if (floorLevel > targetFloor) {\n // 上方楼层需要移动\n const targetPos = component.originalPosition.clone().add(new Vector3().fromArray(direction))\n targetPositions.set(component.mesh, targetPos)\n }\n else {\n // 其他楼层保持原位\n targetPositions.set(component.mesh, component.originalPosition.clone())\n }\n }\n }\n\n // 执行动画\n this.animatePositions(startPositions, targetPositions, duration)\n }\n\n /**\n * 计算方向向量\n * 规则:往右方(X)、前方(Z)是正、往左方(X)、后方(Z)是负数\n * @param direction 方向枚举\n * @param distance 移动距离\n * @returns Vector3 方向向量\n */\n private getDirectionVector(direction: EDirection, distance: number): Vector3 {\n const vector = new Vector3(0, 0, 0)\n const coefficient = 0.7071 // cos(45°) ≈ 0.7071\n switch (direction) {\n case EDirection.Right:\n vector.set(distance, 0, 0)\n break\n case EDirection.Left:\n vector.set(-distance, 0, 0)\n break\n case EDirection.Front:\n vector.set(0, 0, distance)\n break\n case EDirection.Back:\n vector.set(0, 0, -distance)\n break\n case EDirection.Right_Front:\n vector.set(distance * coefficient, distance * coefficient, distance * coefficient)\n break\n case EDirection.Left_Front:\n vector.set(-distance * coefficient, distance * coefficient, distance * coefficient)\n break\n case EDirection.Right_Back:\n vector.set(distance * coefficient, distance * coefficient, -distance * coefficient)\n break\n case EDirection.Left_Back:\n vector.set(-distance * coefficient, distance * coefficient, -distance * coefficient)\n break\n default:\n // 默认向右移动\n vector.set(distance, 0, 0)\n }\n\n return vector\n }\n\n /**\n * 只显示指定楼层\n * @param targetFloor 目标楼层\n */\n private showSoloFloor(targetFloor: number): void {\n for (const floorGroup of this.floorGroups.values()) {\n const floorLevel = floorGroup.level\n\n // 重置所有楼层组件位置\n for (const component of floorGroup.components)\n component.mesh.position.copy(component.originalPosition)\n\n // 设置可见性\n const shouldBeVisible = floorLevel === targetFloor\n for (const component of floorGroup.components)\n component.mesh.visible = shouldBeVisible\n }\n }\n\n /**\n * 执行位置动画\n * @param startPositions 起始位置\n * @param targetPositions 目标位置\n * @param duration 动画时长\n */\n private animatePositions(\n startPositions: Map<Object3D, Vector3>,\n targetPositions: Map<Object3D, Vector3>,\n duration: number,\n ): void {\n const startTime = performance.now()\n\n const animate = () => {\n const currentTime = performance.now()\n const elapsed = currentTime - startTime\n const progress = Math.min(elapsed / duration, 1)\n\n targetPositions.forEach((targetPos, mesh) => {\n const startPos = startPositions.get(mesh)\n if (startPos) {\n // 线性插值计算当前位置\n mesh.position.lerpVectors(startPos, targetPos, progress)\n }\n })\n\n if (progress < 1) {\n requestAnimationFrame(animate)\n }\n else {\n // 动画结束\n this.currentAnimation.timer = null\n }\n }\n\n animate()\n\n // 设置超时以确保动画完成\n this.currentAnimation.timer = window.setTimeout(() => {\n this.currentAnimation.timer = null\n }, duration + 100)\n }\n\n /**\n * 重置建筑到初始状态\n */\n private resetBuilding(): void {\n for (const floorGroup of this.floorGroups.values()) {\n for (const component of floorGroup.components) {\n // 恢复原始位置\n component.mesh.position.copy(component.originalPosition)\n\n // 恢复原始可见性\n component.mesh.visible = component.originalVisibility\n }\n }\n }\n\n /**\n * 获取楼层总数信息\n */\n public getFloorCounts(): { aboveGround: number; underground: number; hasRoof: boolean } {\n return {\n aboveGround: this.aboveGroundFloorCount,\n underground: this.undergroundFloorCount,\n hasRoof: this.hasRoof,\n }\n }\n}\n\nexport { BuildingSplit, EBuildingSplitType }"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CurvePath, Vector3 } from '@anov/3d-core';
1
+ import type { CurvePath, SceneControl, Vector3 } from '@anov/3d-core';
2
2
  import { BaseTraffic } from '../base';
3
3
  import type { RealismTrafficInterface } from '.';
4
4
  type ResourceParams = {
@@ -47,7 +47,7 @@ export declare class RealismTraffic extends BaseTraffic implements RealismTraffi
47
47
  set divide(num: number);
48
48
  visible: boolean;
49
49
  get baseTime(): number;
50
- constructor(params: RealismTrafficParams);
50
+ constructor(params: RealismTrafficParams, sceneControl: SceneControl);
51
51
  /**
52
52
  * load benchmark model
53
53
  */
@@ -56,10 +56,10 @@ var overrideVisible = function overrideVisible(target, propertyKey) {
56
56
  export var RealismTraffic = (_class = /*#__PURE__*/function (_BaseTraffic) {
57
57
  _inherits(RealismTraffic, _BaseTraffic);
58
58
  var _super = _createSuper(RealismTraffic);
59
- function RealismTraffic(params) {
59
+ function RealismTraffic(params, sceneControl) {
60
60
  var _this;
61
61
  _classCallCheck(this, RealismTraffic);
62
- _this = _super.call(this, params);
62
+ _this = _super.call(this, params, sceneControl);
63
63
  /** 车辆模型池 */
64
64
  _defineProperty(_assertThisInitialized(_this), "_resource", void 0);
65
65
  /** 基准时间 */
@@ -147,13 +147,13 @@ export var RealismTraffic = (_class = /*#__PURE__*/function (_BaseTraffic) {
147
147
  this._benchmarkVehicles = [];
148
148
  if (!this._resource.length) return;
149
149
  var promises = this._resource.map(function (_ref) {
150
- var _utils$storeManagemen;
150
+ var _this2$sceneControl$c, _this2$sceneControl;
151
151
  var url = _ref.url;
152
152
  return loaderModule.loadGLTF({
153
153
  url: url,
154
154
  draco: true,
155
155
  // todo sdk 接口支持 decoderPath
156
- dracoPath: (_utils$storeManagemen = utils.storeManagement.get('decoderPath')) !== null && _utils$storeManagemen !== void 0 ? _utils$storeManagemen : '/draco/'
156
+ dracoPath: (_this2$sceneControl$c = (_this2$sceneControl = _this2.sceneControl) === null || _this2$sceneControl === void 0 ? void 0 : _this2$sceneControl.context.storeManagement.get('decoderPath')) !== null && _this2$sceneControl$c !== void 0 ? _this2$sceneControl$c : '/draco/'
157
157
  });
158
158
  });
159
159
  Promise.allSettled(promises).then(function (res) {
@@ -303,7 +303,8 @@ export var RealismTraffic = (_class = /*#__PURE__*/function (_BaseTraffic) {
303
303
  }
304
304
  var control = moveWithLine(model, laneline, {
305
305
  duration: this.baseTime,
306
- direction: lc && (lc === null || lc === void 0 ? void 0 : lc.direction) === 0 ? -1 : 1
306
+ direction: lc && (lc === null || lc === void 0 ? void 0 : lc.direction) === 0 ? -1 : 1,
307
+ sceneControl: this.sceneControl
307
308
  });
308
309
  this._control.push(control);
309
310
  control.setProgress(progress);
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","LoaderModule","utils","BaseTraffic","moveWithLine","loaderModule","overrideVisible","target","propertyKey","getter","_visible","setter","newValue","_target$_control","_control","forEach","control","stop","_target$_control2","continue","Object","defineProperty","get","set","enumerable","configurable","RealismTraffic","_class","_BaseTraffic","_inherits","_super","_createSuper","params","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_initializerDefineProperty","_descriptor","path","_params$width","width","_params$divide","divide","resource","_params$totalNum","totalNum","_params$baseTime","baseTime","_params$control","_params$corner","corner","_path","_width","_divide","_resource","_totalNum","_baseTime","_lanelineControl","_corner","console","error","Error","generateLaneLines","loadBenchmarkModel","handleVisibilityChange","_createClass","key","w","num","value","_this2","_benchmarkVehicles","length","promises","map","_ref","_utils$storeManagemen","url","loadGLTF","draco","dracoPath","storeManagement","Promise","allSettled","then","res","modelRes","status","push","normalizedVehicleSize","scene","randomPool","generateRandomPool","generateInitPosition","getMaxVehicleLength","maxLength","reduce","max","vehicle","box","setFromObject","currentLength","z","min","_this3","lineLengths","lanelines","line","getLength","part","Math","floor","capacity","pre","next","buildRandomPool","pool","i","j","t","_this4","document","addEventListener","hidden","index","random","current","currentLaneline","point","getPointAt","_startingPoints","_startingLookatPoints","_startingProgressPoints","_startinglanelinePoints","splice","placeVehicle","_this5","_vehicles","removeFromParent","remove","randomModelIndex","currentVehicle","clone","position","copy","lookAt","add","run","dispatchEvent","type","laneline","model","progress","laneIndex","lc","find","log","duration","direction","setProgress","currentWidth","x","scalingFactor","scale","parent","_get","_getPrototypeOf","prototype","_applyDecoratedDescriptor","writable","initializer"],"sources":["../../../../src/business/TrafficComponents/RealismTraffic/RealismTraffic.ts"],"sourcesContent":["/* eslint-disable max-statements-per-line */\nimport type { CurvePath, Group, Object3D, Vector3 } from '@anov/3d-core'\nimport { Box3, LoaderModule, utils } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport type { RealismTrafficInterface } from '.'\n\nconst { moveWithLine } = utils\n\ntype ResourceParams = {\n url: string\n}\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype RealismTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n resource: ResourceParams[]\n baseTime?: number\n totalNum?: number\n control?: LanelineControl[]\n corner?: number\n}\n\nconst loaderModule = new LoaderModule()\n\nconst overrideVisible = (target: any, propertyKey: string | symbol) => {\n const getter = () => {\n return target._visible\n }\n\n const setter = (newValue: any) => {\n target._visible = newValue\n\n if (newValue === false) {\n target._control ?? [].forEach((control) => {\n control.stop()\n })\n }\n else {\n target._control ?? [].forEach((control) => {\n control.continue()\n })\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n enumerable: true,\n configurable: true,\n })\n}\n\n/**\n * 写实风格车辆交通组件\n */\nexport class RealismTraffic extends BaseTraffic implements RealismTrafficInterface {\n /** 车辆模型池 */\n private _resource: ResourceParams[]\n\n /** 基准时间 */\n private _baseTime: number\n\n /** 车辆数量 */\n private _totalNum = 5\n\n private _startingPoints: Vector3[] = []\n\n private _startingLookatPoints: Vector3[] = []\n\n private _startingProgressPoints: number[] = []\n\n private _startinglanelinePoints: number[] = []\n\n private _visible = true\n\n private _control: ReturnType<typeof moveWithLine>[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n /** 基准载具池 */\n private _benchmarkVehicles: Group[] = []\n\n /** 实际载具 */\n private _vehicles: Group[] = []\n\n /** 车道线 */\n public lanelines: CurvePath<Vector3>[] = []\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n @overrideVisible\n override visible = true\n\n public get baseTime(): number {\n return this._baseTime\n }\n\n constructor(params: RealismTrafficParams) {\n super(params)\n\n const { path, width = 2, divide = 1, resource, totalNum = 5, baseTime = 10, control = [], corner = 10 } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._resource = resource\n this._totalNum = totalNum\n this._baseTime = baseTime\n this._lanelineControl = control\n this._corner = corner\n\n if (width === 0 || divide === 0) {\n console.error('宽度或车道数不能为0')\n throw new Error('宽度或车道数不能为0')\n }\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n this.handleVisibilityChange()\n }\n\n /**\n * load benchmark model\n */\n private loadBenchmarkModel() {\n this._benchmarkVehicles = []\n\n if (!this._resource.length)\n return\n\n const promises = this._resource.map(({ url }) => {\n return loaderModule.loadGLTF({\n url,\n draco: true,\n // todo sdk 接口支持 decoderPath\n dracoPath: utils.storeManagement.get('decoderPath') ?? '/draco/',\n })\n })\n\n Promise.allSettled(promises).then((res) => {\n res.forEach((modelRes) => {\n if (modelRes.status === 'fulfilled')\n this._benchmarkVehicles.push(this.normalizedVehicleSize(modelRes.value.scene as Group))\n })\n\n const randomPool = this.generateRandomPool()\n this.generateInitPosition(randomPool)\n })\n }\n\n /**\n * get max vehicle length\n */\n private getMaxVehicleLength() {\n const maxLength = this._benchmarkVehicles.reduce((max, vehicle) => {\n const box = new Box3().setFromObject(vehicle)\n const currentLength = box.max.z - box.min.z\n\n return currentLength > max ? currentLength : max\n }, 0)\n\n return maxLength\n }\n\n /**\n * check reasonable location\n */\n private generateRandomPool() {\n const lineLengths = this.lanelines.map(line => line.getLength())\n const part = lineLengths.map(length => Math.floor(length / this.getMaxVehicleLength()))\n const capacity = part.reduce((pre, next) => { return pre + next }, 0)\n\n if (capacity < this._totalNum)\n throw new Error('载具数量不合理')\n\n return this.buildRandomPool(part)\n }\n\n /**\n * build random pool\n */\n private buildRandomPool(part: number[]) {\n const pool = []\n\n part.forEach((part, i) => {\n for (let j = 0; j < part; j++) {\n pool.push({\n t: 1 / part * j,\n line: i,\n })\n }\n })\n\n return pool\n }\n\n /**\n * handle requestAnimationFrame pause\n */\n private handleVisibilityChange() {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this._control.forEach((control) => {\n control.stop()\n })\n }\n else {\n this._control.forEach((control) => {\n control.continue()\n })\n }\n })\n }\n\n /**\n * generate random movement starting point\n */\n private generateInitPosition(randomPool) {\n for (let i = 0; i < this._totalNum; i++) {\n const index = Math.floor(Math.random() * randomPool.length)\n const current = randomPool[index]\n const currentLaneline = this.lanelines[current.line]\n const point = currentLaneline.getPointAt(current.t)\n\n this._startingPoints.push(point)\n this._startingLookatPoints.push(currentLaneline.getPointAt((current.t + 0.01) % 1))\n this._startingProgressPoints.push(current.t)\n this._startinglanelinePoints.push(current.line)\n\n randomPool.splice(index, 1)\n }\n\n this.placeVehicle()\n }\n\n /**\n * place vehicle\n */\n private placeVehicle() {\n this._vehicles.forEach((vehicle, i) => {\n vehicle.removeFromParent()\n this._control[i].remove()\n })\n\n this._vehicles = []\n this._control = []\n\n for (let i = 0; i < this._startingPoints.length; i++) {\n const randomModelIndex = Math.floor(Math.random() * this._benchmarkVehicles.length)\n const currentVehicle = this._benchmarkVehicles[randomModelIndex].clone()\n\n currentVehicle.position.copy(this._startingPoints[i])\n currentVehicle.lookAt(this._startingLookatPoints[i])\n\n this._vehicles.push(currentVehicle)\n this.add(currentVehicle)\n this.run(this.lanelines[this._startinglanelinePoints[i]], currentVehicle, this._startingProgressPoints[i], this._startinglanelinePoints[i])\n }\n\n this.dispatchEvent({\n type: 'realismTraffic-loaded',\n })\n }\n\n /**\n * run\n * @param laneline\n * @param model\n * @param progress\n * @param laneIndex\n */\n private run(laneline: CurvePath<Vector3>, model: Object3D, progress: number, laneIndex: number) {\n const lc = this._lanelineControl.find(lc => lc.index === laneIndex)\n\n if (this.baseTime === 0) {\n console.log('baseTime is 0')\n return\n }\n\n const control = moveWithLine(model, laneline, {\n duration: this.baseTime,\n direction: (lc && lc?.direction === 0) ? -1 : 1,\n })\n\n this._control.push(control)\n control.setProgress(progress)\n }\n\n /**\n * normalized vehicle size\n */\n private normalizedVehicleSize(model: Group) {\n const box = new Box3().setFromObject(model)\n const currentWidth = box.max.x - box.min.x\n const scalingFactor = (this._width / (this._divide + 1)) / currentWidth * 0.7\n\n model.scale.set(scalingFactor, scalingFactor, scalingFactor)\n\n return model\n }\n\n override removeFromParent(): this {\n // todo: 升级three.js后,父对象变化,会触发此函数,重组内部引起关系\n this.parent && this._control.forEach((control) => {\n control.remove()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","LoaderModule","utils","BaseTraffic","moveWithLine","loaderModule","overrideVisible","target","propertyKey","getter","_visible","setter","newValue","_target$_control","_control","forEach","control","stop","_target$_control2","continue","Object","defineProperty","get","set","enumerable","configurable","RealismTraffic","_class","_BaseTraffic","_inherits","_super","_createSuper","params","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_initializerDefineProperty","_descriptor","path","_params$width","width","_params$divide","divide","resource","_params$totalNum","totalNum","_params$baseTime","baseTime","_params$control","_params$corner","corner","_path","_width","_divide","_resource","_totalNum","_baseTime","_lanelineControl","_corner","console","error","Error","generateLaneLines","loadBenchmarkModel","handleVisibilityChange","_createClass","key","w","num","value","_this2","_benchmarkVehicles","length","promises","map","_ref","_this2$sceneControl$c","_this2$sceneControl","url","loadGLTF","draco","dracoPath","context","storeManagement","Promise","allSettled","then","res","modelRes","status","push","normalizedVehicleSize","scene","randomPool","generateRandomPool","generateInitPosition","getMaxVehicleLength","maxLength","reduce","max","vehicle","box","setFromObject","currentLength","z","min","_this3","lineLengths","lanelines","line","getLength","part","Math","floor","capacity","pre","next","buildRandomPool","pool","i","j","t","_this4","document","addEventListener","hidden","index","random","current","currentLaneline","point","getPointAt","_startingPoints","_startingLookatPoints","_startingProgressPoints","_startinglanelinePoints","splice","placeVehicle","_this5","_vehicles","removeFromParent","remove","randomModelIndex","currentVehicle","clone","position","copy","lookAt","add","run","dispatchEvent","type","laneline","model","progress","laneIndex","lc","find","log","duration","direction","setProgress","currentWidth","x","scalingFactor","scale","parent","_get","_getPrototypeOf","prototype","_applyDecoratedDescriptor","writable","initializer"],"sources":["../../../../src/business/TrafficComponents/RealismTraffic/RealismTraffic.ts"],"sourcesContent":["/* eslint-disable max-statements-per-line */\nimport type { CurvePath, Group, Object3D, SceneControl, Vector3 } from '@anov/3d-core'\nimport { Box3, LoaderModule, utils } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport type { RealismTrafficInterface } from '.'\n\nconst { moveWithLine } = utils\n\ntype ResourceParams = {\n url: string\n}\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype RealismTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n resource: ResourceParams[]\n baseTime?: number\n totalNum?: number\n control?: LanelineControl[]\n corner?: number\n}\n\nconst loaderModule = new LoaderModule()\n\nconst overrideVisible = (target: any, propertyKey: string | symbol) => {\n const getter = () => {\n return target._visible\n }\n\n const setter = (newValue: any) => {\n target._visible = newValue\n\n if (newValue === false) {\n target._control ?? [].forEach((control) => {\n control.stop()\n })\n }\n else {\n target._control ?? [].forEach((control) => {\n control.continue()\n })\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n enumerable: true,\n configurable: true,\n })\n}\n\n/**\n * 写实风格车辆交通组件\n */\nexport class RealismTraffic extends BaseTraffic implements RealismTrafficInterface {\n /** 车辆模型池 */\n private _resource: ResourceParams[]\n\n /** 基准时间 */\n private _baseTime: number\n\n /** 车辆数量 */\n private _totalNum = 5\n\n private _startingPoints: Vector3[] = []\n\n private _startingLookatPoints: Vector3[] = []\n\n private _startingProgressPoints: number[] = []\n\n private _startinglanelinePoints: number[] = []\n\n private _visible = true\n\n private _control: ReturnType<typeof moveWithLine>[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n /** 基准载具池 */\n private _benchmarkVehicles: Group[] = []\n\n /** 实际载具 */\n private _vehicles: Group[] = []\n\n /** 车道线 */\n public lanelines: CurvePath<Vector3>[] = []\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n @overrideVisible\n override visible = true\n\n public get baseTime(): number {\n return this._baseTime\n }\n\n constructor(params: RealismTrafficParams, sceneControl: SceneControl) {\n super(params, sceneControl)\n\n const { path, width = 2, divide = 1, resource, totalNum = 5, baseTime = 10, control = [], corner = 10 } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._resource = resource\n this._totalNum = totalNum\n this._baseTime = baseTime\n this._lanelineControl = control\n this._corner = corner\n\n if (width === 0 || divide === 0) {\n console.error('宽度或车道数不能为0')\n throw new Error('宽度或车道数不能为0')\n }\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n this.handleVisibilityChange()\n }\n\n /**\n * load benchmark model\n */\n private loadBenchmarkModel() {\n this._benchmarkVehicles = []\n\n if (!this._resource.length)\n return\n\n const promises = this._resource.map(({ url }) => {\n return loaderModule.loadGLTF({\n url,\n draco: true,\n // todo sdk 接口支持 decoderPath\n dracoPath: this.sceneControl?.context.storeManagement.get('decoderPath') ?? '/draco/',\n })\n })\n\n Promise.allSettled(promises).then((res) => {\n res.forEach((modelRes) => {\n if (modelRes.status === 'fulfilled')\n this._benchmarkVehicles.push(this.normalizedVehicleSize(modelRes.value.scene as Group))\n })\n\n const randomPool = this.generateRandomPool()\n this.generateInitPosition(randomPool)\n })\n }\n\n /**\n * get max vehicle length\n */\n private getMaxVehicleLength() {\n const maxLength = this._benchmarkVehicles.reduce((max, vehicle) => {\n const box = new Box3().setFromObject(vehicle)\n const currentLength = box.max.z - box.min.z\n\n return currentLength > max ? currentLength : max\n }, 0)\n\n return maxLength\n }\n\n /**\n * check reasonable location\n */\n private generateRandomPool() {\n const lineLengths = this.lanelines.map(line => line.getLength())\n const part = lineLengths.map(length => Math.floor(length / this.getMaxVehicleLength()))\n const capacity = part.reduce((pre, next) => { return pre + next }, 0)\n\n if (capacity < this._totalNum)\n throw new Error('载具数量不合理')\n\n return this.buildRandomPool(part)\n }\n\n /**\n * build random pool\n */\n private buildRandomPool(part: number[]) {\n const pool = []\n\n part.forEach((part, i) => {\n for (let j = 0; j < part; j++) {\n pool.push({\n t: 1 / part * j,\n line: i,\n })\n }\n })\n\n return pool\n }\n\n /**\n * handle requestAnimationFrame pause\n */\n private handleVisibilityChange() {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this._control.forEach((control) => {\n control.stop()\n })\n }\n else {\n this._control.forEach((control) => {\n control.continue()\n })\n }\n })\n }\n\n /**\n * generate random movement starting point\n */\n private generateInitPosition(randomPool) {\n for (let i = 0; i < this._totalNum; i++) {\n const index = Math.floor(Math.random() * randomPool.length)\n const current = randomPool[index]\n const currentLaneline = this.lanelines[current.line]\n const point = currentLaneline.getPointAt(current.t)\n\n this._startingPoints.push(point)\n this._startingLookatPoints.push(currentLaneline.getPointAt((current.t + 0.01) % 1))\n this._startingProgressPoints.push(current.t)\n this._startinglanelinePoints.push(current.line)\n\n randomPool.splice(index, 1)\n }\n\n this.placeVehicle()\n }\n\n /**\n * place vehicle\n */\n private placeVehicle() {\n this._vehicles.forEach((vehicle, i) => {\n vehicle.removeFromParent()\n this._control[i].remove()\n })\n\n this._vehicles = []\n this._control = []\n\n for (let i = 0; i < this._startingPoints.length; i++) {\n const randomModelIndex = Math.floor(Math.random() * this._benchmarkVehicles.length)\n const currentVehicle = this._benchmarkVehicles[randomModelIndex].clone()\n\n currentVehicle.position.copy(this._startingPoints[i])\n currentVehicle.lookAt(this._startingLookatPoints[i])\n\n this._vehicles.push(currentVehicle)\n this.add(currentVehicle)\n this.run(this.lanelines[this._startinglanelinePoints[i]], currentVehicle, this._startingProgressPoints[i], this._startinglanelinePoints[i])\n }\n\n this.dispatchEvent({\n type: 'realismTraffic-loaded',\n })\n }\n\n /**\n * run\n * @param laneline\n * @param model\n * @param progress\n * @param laneIndex\n */\n private run(laneline: CurvePath<Vector3>, model: Object3D, progress: number, laneIndex: number) {\n const lc = this._lanelineControl.find(lc => lc.index === laneIndex)\n\n if (this.baseTime === 0) {\n console.log('baseTime is 0')\n return\n }\n\n const control = moveWithLine(model, laneline, {\n duration: this.baseTime,\n direction: (lc && lc?.direction === 0) ? -1 : 1,\n sceneControl: this.sceneControl,\n })\n\n this._control.push(control)\n control.setProgress(progress)\n }\n\n /**\n * normalized vehicle size\n */\n private normalizedVehicleSize(model: Group) {\n const box = new Box3().setFromObject(model)\n const currentWidth = box.max.x - box.min.x\n const scalingFactor = (this._width / (this._divide + 1)) / currentWidth * 0.7\n\n model.scale.set(scalingFactor, scalingFactor, scalingFactor)\n\n return model\n }\n\n override removeFromParent(): this {\n // todo: 升级three.js后,父对象变化,会触发此函数,重组内部引起关系\n this.parent && this._control.forEach((control) => {\n control.remove()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type CurvePath, type Vector3 } from '@anov/3d-core';
1
+ import { type CurvePath, type SceneControl, type Vector3 } from '@anov/3d-core';
2
2
  import { BaseTraffic } from '../base';
3
3
  import type { StreamerTrafficInterface } from '.';
4
4
  type LanelineControl = {
@@ -42,7 +42,7 @@ export declare class StreamerTraffic extends BaseTraffic implements StreamerTraf
42
42
  set width(w: number);
43
43
  get divide(): number;
44
44
  set divide(num: number);
45
- constructor(params: StreamerTrafficParams);
45
+ constructor(params: StreamerTrafficParams, sceneControl: SceneControl);
46
46
  /**
47
47
  * generate streamer
48
48
  */
@@ -24,10 +24,10 @@ import { vertexShader } from "./vertexShader";
24
24
  export var StreamerTraffic = /*#__PURE__*/function (_BaseTraffic) {
25
25
  _inherits(StreamerTraffic, _BaseTraffic);
26
26
  var _super = _createSuper(StreamerTraffic);
27
- function StreamerTraffic(params) {
27
+ function StreamerTraffic(params, sceneControl) {
28
28
  var _this;
29
29
  _classCallCheck(this, StreamerTraffic);
30
- _this = _super.call(this, params);
30
+ _this = _super.call(this, params, sceneControl);
31
31
  /** 流光速度 */
32
32
  _defineProperty(_assertThisInitialized(_this), "_speed", void 0);
33
33
  /** 流光数量 */
@@ -181,7 +181,7 @@ export var StreamerTraffic = /*#__PURE__*/function (_BaseTraffic) {
181
181
  key: "run",
182
182
  value: function run(material) {
183
183
  var clock = new Clock();
184
- this._control.push(use.useframe(function () {
184
+ this._control.push(use.useframe(this.sceneControl, function () {
185
185
  material.uniforms.uTime.value = clock.getElapsedTime();
186
186
  }));
187
187
  }