@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.
- package/dist/business/Animation/motion/index.js +35 -56
- package/dist/business/Animation/motion/index.js.map +1 -1
- package/dist/business/Animation/type.js +2 -2
- package/dist/business/Area/Fence/FenceBase.js +146 -187
- package/dist/business/Area/Fence/FenceBase.js.map +1 -1
- package/dist/business/Area/Fence/fence_base_01.js +120 -112
- package/dist/business/Area/Fence/fence_base_01.js.map +1 -1
- package/dist/business/Area/Fence/fence_feeting_01.js +218 -130
- package/dist/business/Area/Fence/fence_feeting_01.js.map +1 -1
- package/dist/business/Area/Fence/fence_roll_01.js +140 -130
- package/dist/business/Area/Fence/fence_roll_01.js.map +1 -1
- package/dist/business/Area/FillArea/FillAreaBase.js +87 -126
- package/dist/business/Area/FillArea/FillAreaBase.js.map +1 -1
- package/dist/business/Area/FillArea/fillArea_face_01.js +72 -98
- package/dist/business/Area/FillArea/fillArea_face_01.js.map +1 -1
- package/dist/business/Area/FillArea/fillArea_line_01.js +66 -94
- package/dist/business/Area/FillArea/fillArea_line_01.js.map +1 -1
- package/dist/business/Area/index.js +267 -483
- package/dist/business/Area/index.js.map +1 -1
- package/dist/business/Area/tool.js +14 -26
- package/dist/business/Area/tool.js.map +1 -1
- package/dist/business/Base/ObjectLayer.js +21 -46
- package/dist/business/Base/ObjectLayer.js.map +1 -1
- package/dist/business/Batch/index.js +189 -234
- package/dist/business/Batch/index.js.map +1 -1
- package/dist/business/Box/index.js +52 -81
- package/dist/business/Box/index.js.map +1 -1
- package/dist/business/Cylinder/index.js +51 -79
- package/dist/business/Cylinder/index.js.map +1 -1
- package/dist/business/Flyline/bubble/CircleBubble.js +1 -9
- package/dist/business/Flyline/bubble/CircleBubble.js.map +1 -1
- package/dist/business/Flyline/bubble/index.js +7 -21
- package/dist/business/Flyline/bubble/index.js.map +1 -1
- package/dist/business/Flyline/index.js +96 -162
- package/dist/business/Flyline/index.js.map +1 -1
- package/dist/business/Flyline/line/ArcLine.js +208 -291
- package/dist/business/Flyline/line/ArcLine.js.map +1 -1
- package/dist/business/Flyline/line/index.js +8 -22
- package/dist/business/Flyline/line/index.js.map +1 -1
- package/dist/business/HeatMap/HeatMap.js +380 -467
- package/dist/business/HeatMap/HeatMap.js.map +1 -1
- package/dist/business/HeatMap/core.js +405 -525
- package/dist/business/HeatMap/core.js.map +1 -1
- package/dist/business/HeatMap/shader.js +69 -3
- package/dist/business/HeatMap/shader.js.map +1 -1
- package/dist/business/InfoPanel/index.js +201 -242
- package/dist/business/InfoPanel/index.js.map +1 -1
- package/dist/business/Line/index.js +55 -88
- package/dist/business/Line/index.js.map +1 -1
- package/dist/business/Mark/KeyframeAnimation.js +145 -176
- package/dist/business/Mark/KeyframeAnimation.js.map +1 -1
- package/dist/business/Mark/index.js +196 -294
- package/dist/business/Mark/index.js.map +1 -1
- package/dist/business/Mark/shader/tanhao.js +36 -3
- package/dist/business/Mark/shader/tanhao.js.map +1 -1
- package/dist/business/Mark/type.js +1 -1
- package/dist/business/MaterialSwitch/MaterialSwitchSystem.js +377 -551
- package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
- package/dist/business/MaterialSwitch/inject.js +92 -58
- package/dist/business/MaterialSwitch/inject.js.map +1 -1
- package/dist/business/MaterialSwitch/shader/finalFade.js +74 -2
- package/dist/business/MaterialSwitch/shader/finalFade.js.map +1 -1
- package/dist/business/MaterialSwitch/shader/ground.js +95 -16
- package/dist/business/MaterialSwitch/shader/ground.js.map +1 -1
- package/dist/business/MaterialSwitch/shader/groundBase64.js +9 -3
- package/dist/business/MaterialSwitch/shader/groundBase64.js.map +1 -1
- package/dist/business/MaterialSwitch/shader/realFade.js +48 -9
- package/dist/business/MaterialSwitch/shader/realFade.js.map +1 -1
- package/dist/business/Plane/index.js +51 -78
- package/dist/business/Plane/index.js.map +1 -1
- package/dist/business/Poi/index.d.ts +5 -0
- package/dist/business/Poi/index.js +256 -295
- package/dist/business/Poi/index.js.map +1 -1
- package/dist/business/Poi/link/Cylinder.js +56 -89
- package/dist/business/Poi/link/Cylinder.js.map +1 -1
- package/dist/business/Poi/link/Pyramid.js +104 -165
- package/dist/business/Poi/link/Pyramid.js.map +1 -1
- package/dist/business/Poi/link/index.d.ts +1 -1
- package/dist/business/Poi/link/index.js +54 -114
- package/dist/business/Poi/link/index.js.map +1 -1
- package/dist/business/Poi/panel/index.d.ts +124 -0
- package/dist/business/Poi/panel/index.js +474 -0
- package/dist/business/Poi/panel/index.js.map +1 -0
- package/dist/business/Poi/panel/interfaces.d.ts +67 -0
- package/dist/business/Poi/panel/interfaces.js +2 -0
- package/dist/business/Poi/panel/interfaces.js.map +1 -0
- package/dist/business/Poi/panel/utils.d.ts +72 -0
- package/dist/business/Poi/panel/utils.js +126 -0
- package/dist/business/Poi/panel/utils.js.map +1 -0
- package/dist/business/Poi/particle/DoubleCircle.js +71 -107
- package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
- package/dist/business/Poi/particle/DynamicCircle.js +75 -111
- package/dist/business/Poi/particle/DynamicCircle.js.map +1 -1
- package/dist/business/Poi/particle/SingleCircle.js +62 -98
- package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
- package/dist/business/Poi/particle/index.js +49 -117
- package/dist/business/Poi/particle/index.js.map +1 -1
- package/dist/business/Poi/shader/circle.js +31 -3
- package/dist/business/Poi/shader/circle.js.map +1 -1
- package/dist/business/Poi/shader/cylinder.js +37 -3
- package/dist/business/Poi/shader/cylinder.js.map +1 -1
- package/dist/business/Poi/shader/doubleCircle.js +55 -3
- package/dist/business/Poi/shader/doubleCircle.js.map +1 -1
- package/dist/business/Poi/shader/dynamicCircle.js +67 -3
- package/dist/business/Poi/shader/dynamicCircle.js.map +1 -1
- package/dist/business/Poi/title/Border.js +7 -27
- package/dist/business/Poi/title/Border.js.map +1 -1
- package/dist/business/Poi/title/Ellipse.js +7 -27
- package/dist/business/Poi/title/Ellipse.js.map +1 -1
- package/dist/business/Poi/title/index.js +208 -292
- package/dist/business/Poi/title/index.js.map +1 -1
- package/dist/business/Poi/tools.js +22 -19
- package/dist/business/Poi/tools.js.map +1 -1
- package/dist/business/Poi/types.d.ts +3 -0
- package/dist/business/Poi/types.js.map +1 -1
- package/dist/business/Sphere/index.js +47 -72
- package/dist/business/Sphere/index.js.map +1 -1
- package/dist/business/Spline/index.js +190 -245
- package/dist/business/Spline/index.js.map +1 -1
- package/dist/business/SplitBuilding/index.js +327 -536
- package/dist/business/SplitBuilding/index.js.map +1 -1
- package/dist/business/SplitBuilding/type.js +2 -2
- package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js +218 -275
- package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js.map +1 -1
- package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js +132 -177
- package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js.map +1 -1
- package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js +51 -1
- package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js.map +1 -1
- package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js +6 -1
- package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js.map +1 -1
- package/dist/business/TrafficComponents/base.js +32 -55
- package/dist/business/TrafficComponents/base.js.map +1 -1
- package/dist/business/TrafficComponents/utils.js +25 -24
- package/dist/business/TrafficComponents/utils.js.map +1 -1
- package/dist/business/Utils/Curve.js +40 -56
- package/dist/business/Utils/Curve.js.map +1 -1
- package/dist/business/Utils/constant.js +1 -1
- package/dist/business/Utils/constant.js.map +1 -1
- package/dist/business/Utils/defineProps.js +13 -14
- package/dist/business/Utils/defineProps.js.map +1 -1
- package/dist/business/Utils/round-curve.js +127 -153
- package/dist/business/Utils/round-curve.js.map +1 -1
- package/dist/business/VideoPanel/index.js +258 -319
- package/dist/business/VideoPanel/index.js.map +1 -1
- package/dist/business/Water/index.js +78 -108
- package/dist/business/Water/index.js.map +1 -1
- package/dist/business/Water/types.js +1 -1
- package/dist/business/Water/types.js.map +1 -1
- package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +383 -449
- package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
- package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js +107 -142
- package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js.map +1 -1
- package/dist/core/Controls/FirstViewControl/index.js +84 -96
- package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/action/input.js +77 -98
- package/dist/core/Controls/ThirdViewControl/action/input.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/config/constants.js +1 -1
- package/dist/core/Controls/ThirdViewControl/config/constants.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/index.js +19 -28
- package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/player/animation.js +126 -155
- package/dist/core/Controls/ThirdViewControl/player/animation.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/player/camera.js +47 -63
- package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/player/control.js +39 -49
- package/dist/core/Controls/ThirdViewControl/player/control.js.map +1 -1
- package/dist/core/Controls/ThirdViewControl/player.js +66 -91
- package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
- package/dist/core/Controls/base.js +14 -30
- package/dist/core/Controls/base.js.map +1 -1
- package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js +92 -131
- package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js.map +1 -1
- package/dist/core/Debug/PerformanceInfo/Performance.js +22 -47
- package/dist/core/Debug/PerformanceInfo/Performance.js.map +1 -1
- package/dist/core/Light/PointLight/PointLightExt.js +4 -21
- package/dist/core/Light/PointLight/PointLightExt.js.map +1 -1
- package/dist/core/Material/FinirMaterial/FinirMaterial.js +37 -57
- package/dist/core/Material/FinirMaterial/FinirMaterial.js.map +1 -1
- package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js +116 -153
- package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js.map +1 -1
- package/dist/core/Material/PristineGridMaterial/shader/fragment.js +95 -1
- package/dist/core/Material/PristineGridMaterial/shader/fragment.js.map +1 -1
- package/dist/core/Material/PristineGridMaterial/shader/vertex.js +26 -1
- package/dist/core/Material/PristineGridMaterial/shader/vertex.js.map +1 -1
- package/dist/core/Material/SurfaceMaterial/index.js +76 -172
- package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
- package/dist/core/Material/decorators.js +6 -11
- package/dist/core/Material/decorators.js.map +1 -1
- package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +16 -12
- package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
- package/dist/core/PostEffects/addBrightnessContrastPass.js +17 -13
- package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
- package/dist/core/PostEffects/bloomPass.js +17 -10
- package/dist/core/PostEffects/bloomPass.js.map +1 -1
- package/dist/core/PostEffects/bloomSelect.js +60 -43
- package/dist/core/PostEffects/bloomSelect.js.map +1 -1
- package/dist/core/PostEffects/colorifyPass.js +17 -13
- package/dist/core/PostEffects/colorifyPass.js.map +1 -1
- package/dist/core/PostEffects/index.js +28 -22
- package/dist/core/PostEffects/index.js.map +1 -1
- package/dist/core/PostEffects/outlinePass.js +37 -50
- package/dist/core/PostEffects/outlinePass.js.map +1 -1
- package/dist/core/PostEffects/postprocessing.js +14 -12
- package/dist/core/PostEffects/postprocessing.js.map +1 -1
- package/dist/core/PostEffects/saoPass.js +15 -10
- package/dist/core/PostEffects/saoPass.js.map +1 -1
- package/dist/core/PostEffects/shader/colorify.js +22 -3
- package/dist/core/PostEffects/shader/colorify.js.map +1 -1
- package/dist/core/PostEffects/shader/gammaCorrectionShader.js +27 -3
- package/dist/core/PostEffects/shader/gammaCorrectionShader.js.map +1 -1
- package/dist/core/PostEffects/shader/mapping.js +66 -3
- package/dist/core/PostEffects/shader/mapping.js.map +1 -1
- package/dist/core/PostEffects/shader/thermalMaging.js +28 -3
- package/dist/core/PostEffects/shader/thermalMaging.js.map +1 -1
- package/dist/core/SceneEffect/grow/grow.js +85 -101
- package/dist/core/SceneEffect/grow/grow.js.map +1 -1
- package/dist/core/SceneEffect/grow/style_down.js +60 -77
- package/dist/core/SceneEffect/grow/style_down.js.map +1 -1
- package/dist/core/SceneEffect/grow/style_up.js +64 -81
- package/dist/core/SceneEffect/grow/style_up.js.map +1 -1
- package/dist/core/SceneEffect/grow/type.js +2 -2
- package/dist/core/SceneEffect/grow/type.js.map +1 -1
- package/dist/core/WeatherSystem/DynamicWeatherSystem.js +51 -76
- package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
- package/dist/core/WeatherSystem/hdr/index.js +69 -105
- package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
- package/dist/core/WeatherSystem/index.js +77 -124
- package/dist/core/WeatherSystem/index.js.map +1 -1
- package/dist/core/WeatherSystem/objects/fog/index.js +52 -80
- package/dist/core/WeatherSystem/objects/fog/index.js.map +1 -1
- package/dist/core/WeatherSystem/objects/rain/index.js +72 -84
- package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
- package/dist/core/WeatherSystem/objects/rain/lineRain.js +88 -118
- package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
- package/dist/core/WeatherSystem/objects/rain/plane.js +116 -146
- package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
- package/dist/core/WeatherSystem/objects/rain/point.js +100 -148
- package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
- package/dist/core/WeatherSystem/objects/sky/cloud.js +71 -104
- package/dist/core/WeatherSystem/objects/sky/cloud.js.map +1 -1
- package/dist/core/WeatherSystem/objects/sky/index.js +66 -84
- package/dist/core/WeatherSystem/objects/sky/index.js.map +1 -1
- package/dist/core/WeatherSystem/objects/sky/outline.js +25 -45
- package/dist/core/WeatherSystem/objects/sky/outline.js.map +1 -1
- package/dist/core/WeatherSystem/shaders/cloud.js +74 -3
- package/dist/core/WeatherSystem/shaders/cloud.js.map +1 -1
- package/dist/core/WeatherSystem/shaders/fog.js +103 -3
- package/dist/core/WeatherSystem/shaders/fog.js.map +1 -1
- package/dist/core/WeatherSystem/shaders/rain.js +206 -7
- package/dist/core/WeatherSystem/shaders/rain.js.map +1 -1
- package/dist/core/WeatherSystem/shaders/sky.js +87 -3
- package/dist/core/WeatherSystem/shaders/sky.js.map +1 -1
- package/dist/core/WeatherSystem/sky/index.js +104 -135
- package/dist/core/WeatherSystem/sky/index.js.map +1 -1
- package/dist/core/WeatherSystem/utils/constant.js +44 -38
- package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
- package/dist/core/WeatherSystem/utils/math.js +18 -25
- package/dist/core/WeatherSystem/utils/math.js.map +1 -1
- package/dist/core/WeatherSystem/utils/type.js +1 -1
- package/dist/core/WeatherSystem/utils/type.js.map +1 -1
- package/dist/core/WeatherSystem/weather/index.js +96 -141
- package/dist/core/WeatherSystem/weather/index.js.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- 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" ==
|
|
14
|
-
function _toPrimitive(t, r) { if ("object" !=
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
136
|
-
|
|
104
|
+
// 获取第一个点和最后一个点
|
|
105
|
+
const startPoint = curvePath.getPoint(0);
|
|
106
|
+
const endPoint = curvePath.getPoint(1);
|
|
137
107
|
|
|
138
|
-
|
|
139
|
-
|
|
108
|
+
// 计算距离
|
|
109
|
+
const distance = startPoint.distanceTo(endPoint);
|
|
140
110
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
111
|
+
// 如果距离小于容差,则认为是闭合的
|
|
112
|
+
return distance < tolerance;
|
|
113
|
+
}
|
|
144
114
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
-
|
|
198
|
-
|
|
158
|
+
// 获取点并添加到结果数组
|
|
159
|
+
const point = curvePath.getPointAt(currentU);
|
|
160
|
+
points.push(point);
|
|
199
161
|
}
|
|
200
162
|
|
|
201
|
-
//
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
216
|
-
|
|
168
|
+
// 创建自适应采样点获取方法(处理count=1的特殊情况)
|
|
169
|
+
getAdaptiveSpacedPoints(curve, count) {
|
|
170
|
+
if (count <= 0) return [];
|
|
217
171
|
|
|
218
|
-
//
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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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"}
|