@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,23 +1,6 @@
|
|
|
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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
3
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
5
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
6
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
9
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
10
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
11
|
-
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); }
|
|
12
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
13
|
-
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); }; }
|
|
14
|
-
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); }
|
|
15
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
16
|
-
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; } }
|
|
17
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
18
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; }
|
|
19
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" ==
|
|
20
|
-
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); }
|
|
21
4
|
/* eslint-disable no-void */
|
|
22
5
|
|
|
23
6
|
import { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Float32BufferAttribute, Group, LineCurve3, Mesh, MeshBasicMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core';
|
|
@@ -30,28 +13,25 @@ import { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Float32
|
|
|
30
13
|
* @param height
|
|
31
14
|
* @param depth
|
|
32
15
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
var width = a.distanceTo(b);
|
|
38
|
-
var box = new BoxGeometry(width, height, depth);
|
|
39
|
-
var currentMaterial = new MeshBasicMaterial({
|
|
16
|
+
const createBoxGeometryByPoints = (a, b, height = 30, depth = 10, material) => {
|
|
17
|
+
const width = a.distanceTo(b);
|
|
18
|
+
const box = new BoxGeometry(width, height, depth);
|
|
19
|
+
let currentMaterial = new MeshBasicMaterial({
|
|
40
20
|
color: new Color('#fff')
|
|
41
21
|
});
|
|
42
22
|
if (material) currentMaterial = material;
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
const mesh = new Mesh(box, currentMaterial);
|
|
24
|
+
const midpoint = new Vector3().addVectors(a, b).multiplyScalar(0.5);
|
|
45
25
|
mesh.position.x = midpoint.x;
|
|
46
26
|
mesh.position.y = midpoint.y + height / 2;
|
|
47
27
|
mesh.position.z = midpoint.z;
|
|
48
|
-
|
|
28
|
+
const direction = new Vector3();
|
|
49
29
|
direction.subVectors(a, b);
|
|
50
30
|
direction.normalize();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
31
|
+
const axis = new Vector3(0, 1, 0); // axis
|
|
32
|
+
const angle = new Vector3(1, 0, 0).angleTo(direction);
|
|
33
|
+
const quaternion = new Quaternion().setFromAxisAngle(axis, angle);
|
|
34
|
+
const newDirection = new Vector3(1, 0, 0).applyQuaternion(quaternion);
|
|
55
35
|
if (!newDirection.angleTo(direction)) mesh.rotateOnAxis(axis, angle);else mesh.rotateOnAxis(axis, -angle);
|
|
56
36
|
return mesh;
|
|
57
37
|
};
|
|
@@ -62,10 +42,8 @@ var createBoxGeometryByPoints = function createBoxGeometryByPoints(a, b) {
|
|
|
62
42
|
* @param h
|
|
63
43
|
* @returns
|
|
64
44
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var h = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50;
|
|
68
|
-
var shape = new Shape();
|
|
45
|
+
const rectangle = (w = 0.1, h = 50) => {
|
|
46
|
+
const shape = new Shape();
|
|
69
47
|
shape.moveTo(0, 0);
|
|
70
48
|
shape.lineTo(0, w);
|
|
71
49
|
shape.lineTo(h, w);
|
|
@@ -73,7 +51,7 @@ var rectangle = function rectangle() {
|
|
|
73
51
|
shape.lineTo(0, 0);
|
|
74
52
|
return shape;
|
|
75
53
|
};
|
|
76
|
-
|
|
54
|
+
const defMaterial = new ShaderMaterial({
|
|
77
55
|
uniforms: {
|
|
78
56
|
u_color: {
|
|
79
57
|
value: new Color('#fab73f')
|
|
@@ -85,8 +63,25 @@ var defMaterial = new ShaderMaterial({
|
|
|
85
63
|
value: 1.0
|
|
86
64
|
}
|
|
87
65
|
},
|
|
88
|
-
vertexShader:
|
|
89
|
-
|
|
66
|
+
vertexShader: `
|
|
67
|
+
uniform float u_height;
|
|
68
|
+
uniform float u_speed;
|
|
69
|
+
varying float v_opacity;
|
|
70
|
+
|
|
71
|
+
void main() {
|
|
72
|
+
v_opacity = mix(1.0, 0.0, position.y / u_height);
|
|
73
|
+
|
|
74
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
75
|
+
}`,
|
|
76
|
+
fragmentShader: `
|
|
77
|
+
uniform vec3 u_color;
|
|
78
|
+
uniform float u_opacity;
|
|
79
|
+
varying float v_opacity;
|
|
80
|
+
|
|
81
|
+
void main() {
|
|
82
|
+
gl_FragColor = vec4(u_color, 1.0);
|
|
83
|
+
}
|
|
84
|
+
`,
|
|
90
85
|
transparent: true,
|
|
91
86
|
side: 2,
|
|
92
87
|
depthTest: false
|
|
@@ -101,137 +96,120 @@ var defMaterial = new ShaderMaterial({
|
|
|
101
96
|
* @param close
|
|
102
97
|
* @returns
|
|
103
98
|
*/
|
|
104
|
-
|
|
105
|
-
var radius = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;
|
|
106
|
-
var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 50;
|
|
107
|
-
var close = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
108
|
-
var material = arguments.length > 4 ? arguments[4] : undefined;
|
|
99
|
+
const createCurve = (points, radius = 20, height = 50, close = false, material) => {
|
|
109
100
|
if (!material) material = defMaterial;
|
|
110
|
-
|
|
111
|
-
|
|
101
|
+
const curve = new CurvePath();
|
|
102
|
+
const shape = rectangle(0.1, height);
|
|
112
103
|
if (points.length < 2) throw new Error('At least two points are required to create a curve');
|
|
113
104
|
if (points.length === 2) {
|
|
114
|
-
|
|
105
|
+
const line = new LineCurve3(points[0], points[1]);
|
|
115
106
|
curve.curves.push(line);
|
|
116
107
|
return [curve];
|
|
117
108
|
}
|
|
118
|
-
|
|
119
|
-
for (
|
|
109
|
+
const lines = [];
|
|
110
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
120
111
|
if (i === 0) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
112
|
+
const dir = points[0].clone().sub(points[1]).normalize();
|
|
113
|
+
const realEndPoints = points[1].clone().add(dir.multiplyScalar(radius));
|
|
114
|
+
let firstPoint = points[0];
|
|
124
115
|
if (close) firstPoint = points[0].clone().add(points[1].clone().sub(points[0]).normalize().multiplyScalar(radius));
|
|
125
116
|
lines.push(new LineCurve3(firstPoint, realEndPoints));
|
|
126
117
|
} else if (i === points.length - 1) {
|
|
127
118
|
//
|
|
128
119
|
} else {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
120
|
+
const dir1 = points[i - 1].clone().sub(points[i]).normalize();
|
|
121
|
+
const dir2 = points[i + 1].clone().sub(points[i]).normalize();
|
|
122
|
+
const dir3 = points[i].clone().sub(points[i + 1]).normalize();
|
|
123
|
+
const nextDir1 = dir2.clone();
|
|
124
|
+
const nextDir2 = points[i].clone().sub(points[i + 1]).normalize();
|
|
125
|
+
const p1 = points[i].clone().add(dir1.multiplyScalar(radius));
|
|
126
|
+
const p2 = points[i].clone();
|
|
127
|
+
const p3 = points[i].clone().add(dir2.multiplyScalar(radius));
|
|
128
|
+
const beziercurve = new QuadraticBezierCurve3(p1, p2, p3);
|
|
129
|
+
const realLastPoints = points[i].clone().add(nextDir1.multiplyScalar(radius));
|
|
130
|
+
const realEndPoints = points[i + 1].clone().add(nextDir2.multiplyScalar(radius));
|
|
140
131
|
lines.push(beziercurve);
|
|
141
|
-
lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1 ? close ? points[i + 1].clone().add(dir3.multiplyScalar(radius)) : points[i + 1] :
|
|
132
|
+
lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1 ? close ? points[i + 1].clone().add(dir3.multiplyScalar(radius)) : points[i + 1] : realEndPoints));
|
|
142
133
|
}
|
|
143
134
|
}
|
|
144
135
|
if (close) {
|
|
145
136
|
// first point
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
137
|
+
const dir1 = points[1].clone().sub(points[0]).normalize();
|
|
138
|
+
const dir2 = points[points.length - 1].clone().sub(points[0]).normalize();
|
|
139
|
+
const p1 = points[0].clone().add(dir1.multiplyScalar(radius));
|
|
140
|
+
const p2 = points[0];
|
|
141
|
+
const p3 = points[0].clone().add(dir2.multiplyScalar(radius));
|
|
142
|
+
const beziercurve = new QuadraticBezierCurve3(p3, p2, p1);
|
|
152
143
|
|
|
153
144
|
// last point
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
145
|
+
const dir3 = points[0].clone().sub(points[points.length - 1]).normalize();
|
|
146
|
+
const dir4 = points[points.length - 2].clone().sub(points[points.length - 1]).normalize();
|
|
147
|
+
const p4 = points[points.length - 1].clone().add(dir3.multiplyScalar(radius));
|
|
148
|
+
const p5 = points[points.length - 1];
|
|
149
|
+
const p6 = points[points.length - 1].clone().add(dir4.multiplyScalar(radius));
|
|
150
|
+
const beziercurve2 = new QuadraticBezierCurve3(p6, p5, p4);
|
|
160
151
|
|
|
161
152
|
// last line
|
|
162
|
-
|
|
153
|
+
const laseLine = new LineCurve3(p4, p3);
|
|
163
154
|
lines.push(beziercurve2);
|
|
164
155
|
lines.push(laseLine);
|
|
165
|
-
lines.push(
|
|
156
|
+
lines.push(beziercurve);
|
|
166
157
|
}
|
|
167
|
-
|
|
168
|
-
lines.forEach(
|
|
158
|
+
const group = new Group();
|
|
159
|
+
lines.forEach(line => {
|
|
169
160
|
curve.curves.push(line);
|
|
170
161
|
if (line.type === 'QuadraticBezierCurve3') {
|
|
171
|
-
|
|
162
|
+
const extrudeSettings = {
|
|
172
163
|
steps: 100,
|
|
173
164
|
bevelEnabled: false,
|
|
174
165
|
extrudePath: line
|
|
175
166
|
};
|
|
176
|
-
|
|
177
|
-
|
|
167
|
+
const geometry = new ExtrudeGeometry(shape, extrudeSettings);
|
|
168
|
+
const arcWall = new Mesh(geometry, material);
|
|
178
169
|
arcWall.translateY(arcWall.position.y + height);
|
|
179
170
|
if (radius) group.add(arcWall);
|
|
180
171
|
} else {
|
|
181
|
-
|
|
172
|
+
const mesh = createBoxGeometryByPoints(line.v1, line.v2, height, 0.1, material);
|
|
182
173
|
group.add(mesh);
|
|
183
174
|
}
|
|
184
175
|
});
|
|
185
176
|
return [curve, group];
|
|
186
177
|
};
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var _super = _createSuper(RoundLineGeometry);
|
|
190
|
-
function RoundLineGeometry(points, option) {
|
|
178
|
+
class RoundLineGeometry extends BufferGeometry {
|
|
179
|
+
constructor(points, option) {
|
|
191
180
|
var _option$radius;
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
_createCurve2 = _slicedToArray(_createCurve, 1),
|
|
198
|
-
curve = _createCurve2[0];
|
|
199
|
-
var currentPoints = curve.getPoints(option.pointNum || 1000);
|
|
200
|
-
var geometry = new BufferGeometry();
|
|
181
|
+
super();
|
|
182
|
+
_defineProperty(this, "curve", void 0);
|
|
183
|
+
const [curve] = createCurve(points, (_option$radius = option.radius) !== null && _option$radius !== void 0 ? _option$radius : 20, void 0, option.close || false);
|
|
184
|
+
const currentPoints = curve.getPoints(option.pointNum || 1000);
|
|
185
|
+
const geometry = new BufferGeometry();
|
|
201
186
|
geometry.setFromPoints(currentPoints);
|
|
202
|
-
|
|
203
|
-
return _this;
|
|
187
|
+
this.curve = curve;
|
|
204
188
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
var createRoundLineWallMesh = function createRoundLineWallMesh(points, option, material) {
|
|
189
|
+
}
|
|
190
|
+
const createRoundLineWallMesh = (points, option, material) => {
|
|
208
191
|
var _option$radius2, _option$height;
|
|
209
|
-
|
|
210
|
-
_createCurve4 = _slicedToArray(_createCurve3, 2),
|
|
211
|
-
_ = _createCurve4[0],
|
|
212
|
-
group = _createCurve4[1];
|
|
192
|
+
const [_, group] = createCurve(points, (_option$radius2 = option.radius) !== null && _option$radius2 !== void 0 ? _option$radius2 : 20, (_option$height = option.height) !== null && _option$height !== void 0 ? _option$height : 50, option.close || false, material);
|
|
213
193
|
return group;
|
|
214
194
|
};
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
var total = points.length;
|
|
220
|
-
var lastP2 = null;
|
|
195
|
+
const createRoundedClosedCurve = (points, radius = 20, closed = true) => {
|
|
196
|
+
const curves = [];
|
|
197
|
+
const total = points.length;
|
|
198
|
+
let lastP2 = null;
|
|
221
199
|
// 👇 避免 radius = 0 时直线退化问题
|
|
222
|
-
|
|
223
|
-
for (
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
200
|
+
const safeRadius = radius === 0 ? 0.0001 : radius;
|
|
201
|
+
for (let i = 0; i < total; i++) {
|
|
202
|
+
const curr = points[i];
|
|
203
|
+
const hasPrev = i > 0;
|
|
204
|
+
const hasNext = i < total - 1;
|
|
227
205
|
if (hasPrev && hasNext || closed) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
206
|
+
const pPrev = points[(i - 1 + total) % total];
|
|
207
|
+
const pNext = points[(i + 1) % total];
|
|
208
|
+
const v1 = curr.clone().sub(pPrev).normalize();
|
|
209
|
+
const v2 = pNext.clone().sub(curr).normalize();
|
|
210
|
+
const tangentLength = Math.min(safeRadius, curr.distanceTo(pPrev) / 2, curr.distanceTo(pNext) / 2);
|
|
211
|
+
const p1 = curr.clone().sub(v1.clone().multiplyScalar(tangentLength));
|
|
212
|
+
const p2 = curr.clone().add(v2.clone().multiplyScalar(tangentLength));
|
|
235
213
|
if (lastP2) curves.push(new LineCurve3(lastP2.clone(), p1.clone()));else if (!closed && i === 1) curves.push(new LineCurve3(points[0].clone(), p1.clone()));
|
|
236
214
|
curves.push(new QuadraticBezierCurve3(p1.clone(), curr.clone(), p2.clone()));
|
|
237
215
|
lastP2 = p2;
|
|
@@ -240,19 +218,17 @@ var createRoundedClosedCurve = function createRoundedClosedCurve(points) {
|
|
|
240
218
|
}
|
|
241
219
|
}
|
|
242
220
|
if (closed && lastP2) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
221
|
+
const first = points[0];
|
|
222
|
+
const prev = points[points.length - 1];
|
|
223
|
+
const next = points[1];
|
|
224
|
+
const v1 = first.clone().sub(prev).normalize();
|
|
225
|
+
const v2 = next.clone().sub(first).normalize();
|
|
226
|
+
const tangentLength = Math.min(safeRadius, first.distanceTo(prev) / 2, first.distanceTo(next) / 2);
|
|
227
|
+
const firstP1 = first.clone().sub(v1.clone().multiplyScalar(tangentLength));
|
|
250
228
|
curves.push(new LineCurve3(lastP2.clone(), firstP1.clone()));
|
|
251
229
|
}
|
|
252
|
-
|
|
253
|
-
curves.forEach(
|
|
254
|
-
return path.add(c);
|
|
255
|
-
});
|
|
230
|
+
const path = new CurvePath();
|
|
231
|
+
curves.forEach(c => path.add(c));
|
|
256
232
|
return path;
|
|
257
233
|
// for (let i = 0; i < total; i++) {
|
|
258
234
|
// const prev = points[(i - 1 + total) % total]
|
|
@@ -290,29 +266,27 @@ var createRoundedClosedCurve = function createRoundedClosedCurve(points) {
|
|
|
290
266
|
// curves.forEach(c => path.add(c))
|
|
291
267
|
// return path
|
|
292
268
|
};
|
|
293
|
-
|
|
269
|
+
const createRoundedClosedWallMesh = (points, option, material) => {
|
|
294
270
|
if (!material) material = defMaterial;
|
|
295
271
|
// const shape = rectangle(0.1, option.height)
|
|
296
272
|
if (points.length < 2) throw new Error('At least two points are required to create a curve');
|
|
297
|
-
|
|
298
|
-
|
|
273
|
+
const curvePath = createRoundedClosedCurve(points, option.radius, option.close);
|
|
274
|
+
const divisions = 1000;
|
|
299
275
|
// const upVec = new Vector3(0, 1, 0)
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return new Vector3(p.x, p.y + option.height, p.z);
|
|
303
|
-
});
|
|
276
|
+
const bottomPoints = curvePath.getSpacedPoints(divisions);
|
|
277
|
+
const topPoints = bottomPoints.map(p => new Vector3(p.x, p.y + option.height, p.z));
|
|
304
278
|
|
|
305
279
|
// 构建侧面 geometry
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
for (
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
280
|
+
const sideGeometry = new BufferGeometry();
|
|
281
|
+
const positions = [];
|
|
282
|
+
const indices = [];
|
|
283
|
+
for (let i = 0; i < divisions; i++) {
|
|
284
|
+
const b0 = bottomPoints[i];
|
|
285
|
+
const b1 = bottomPoints[i + 1];
|
|
286
|
+
const t0 = topPoints[i];
|
|
287
|
+
const t1 = topPoints[i + 1];
|
|
314
288
|
if (!b1 || !t1) break;
|
|
315
|
-
|
|
289
|
+
const baseIndex = positions.length / 3;
|
|
316
290
|
positions.push(b0.x, b0.y, b0.z); // 0
|
|
317
291
|
positions.push(b1.x, b1.y, b1.z); // 1
|
|
318
292
|
positions.push(t1.x, t1.y, t1.z); // 2
|
|
@@ -329,7 +303,7 @@ var createRoundedClosedWallMesh = function createRoundedClosedWallMesh(points, o
|
|
|
329
303
|
// const sideMaterial = new THREE.MeshNormalMaterial({
|
|
330
304
|
// side: THREE.DoubleSide,
|
|
331
305
|
// })
|
|
332
|
-
|
|
306
|
+
const sideMesh = new Mesh(sideGeometry, material);
|
|
333
307
|
// const extrudeSettings = {
|
|
334
308
|
// steps: 200,
|
|
335
309
|
// bevelEnabled: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BoxGeometry","BufferGeometry","Color","CurvePath","ExtrudeGeometry","Float32BufferAttribute","Group","LineCurve3","Mesh","MeshBasicMaterial","QuadraticBezierCurve3","Quaternion","ShaderMaterial","Shape","Vector3","createBoxGeometryByPoints","a","b","height","arguments","length","undefined","depth","material","width","distanceTo","box","currentMaterial","color","mesh","midpoint","addVectors","multiplyScalar","position","x","y","z","direction","subVectors","normalize","axis","angle","angleTo","quaternion","setFromAxisAngle","newDirection","applyQuaternion","rotateOnAxis","rectangle","w","h","shape","moveTo","lineTo","defMaterial","uniforms","u_color","value","u_height","u_opacity","vertexShader","fragmentShader","transparent","side","depthTest","createCurve","points","radius","close","curve","Error","line","curves","push","lines","i","dir","clone","sub","realEndPoints","add","firstPoint","dir1","dir2","dir3","nextDir1","nextDir2","p1","p2","p3","beziercurve","realLastPoints","dir4","p4","p5","p6","beziercurve2","laseLine","group","forEach","type","extrudeSettings","steps","bevelEnabled","extrudePath","geometry","arcWall","translateY","v1","v2","RoundLineGeometry","_BufferGeometry","_inherits","_super","_createSuper","option","_option$radius","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_createCurve","_createCurve2","_slicedToArray","currentPoints","getPoints","pointNum","setFromPoints","_createClass","createRoundLineWallMesh","_option$radius2","_option$height","_createCurve3","_createCurve4","_","createRoundedClosedCurve","closed","total","lastP2","safeRadius","curr","hasPrev","hasNext","pPrev","pNext","tangentLength","Math","min","first","prev","next","firstP1","path","c","createRoundedClosedWallMesh","curvePath","divisions","bottomPoints","getSpacedPoints","topPoints","map","p","sideGeometry","positions","indices","b0","b1","t0","t1","baseIndex","setAttribute","setIndex","computeVertexNormals","sideMesh"],"sources":["../../../src/business/Utils/round-curve.ts"],"sourcesContent":["/* eslint-disable no-void */\nimport type { Curve } from '@anov/3d-core'\nimport { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Float32BufferAttribute, Group, LineCurve3, Mesh, MeshBasicMaterial, MeshNormalMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core'\n\nexport interface TextureParamsType {\n texture?: string\n repeatX?: number\n repeatY?: number\n wrapS?: number\n wrapT?: number\n}\n\n/**\n * TODO: 参数优化\n * create box geometry by two points\n * just provide data not create mesh\n * @param a\n * @param b\n * @param height\n * @param depth\n */\nconst createBoxGeometryByPoints = (a: Vector3, b: Vector3, height = 30, depth = 10, material?: ShaderMaterial) => {\n const width = a.distanceTo(b)\n const box = new BoxGeometry(width, height, depth)\n\n let currentMaterial: MeshBasicMaterial | ShaderMaterial = new MeshBasicMaterial({ color: new Color('#fff') })\n if (material)\n currentMaterial = material\n\n const mesh = new Mesh(box, currentMaterial)\n const midpoint = new Vector3().addVectors(a, b).multiplyScalar(0.5)\n\n mesh.position.x = midpoint.x\n mesh.position.y = midpoint.y + height / 2\n mesh.position.z = midpoint.z\n\n const direction = new Vector3()\n direction.subVectors(a, b)\n direction.normalize()\n\n const axis = new Vector3(0, 1, 0) // axis\n const angle = new Vector3(1, 0, 0).angleTo(direction)\n\n const quaternion = new Quaternion().setFromAxisAngle(axis, angle)\n const newDirection = new Vector3(1, 0, 0).applyQuaternion(quaternion)\n\n if (!newDirection.angleTo(direction))\n mesh.rotateOnAxis(axis, angle)\n else\n mesh.rotateOnAxis(axis, -angle)\n\n return mesh\n}\n\n/**\n * rectangle shape\n * @param w\n * @param h\n * @returns\n */\nconst rectangle = (w = 0.1, h = 50) => {\n const shape = new Shape()\n\n shape.moveTo(0, 0)\n shape.lineTo(0, w)\n shape.lineTo(h, w)\n shape.lineTo(h, 0)\n shape.lineTo(0, 0)\n\n return shape\n}\n\nconst defMaterial = new ShaderMaterial({\n uniforms: {\n u_color: { value: new Color('#fab73f') },\n u_height: { value: 100 },\n u_opacity: { value: 1.0 },\n },\n\n vertexShader: `\n uniform float u_height;\n uniform float u_speed;\n varying float v_opacity;\n\n void main() {\n v_opacity = mix(1.0, 0.0, position.y / u_height);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform vec3 u_color;\n uniform float u_opacity;\n varying float v_opacity;\n\n void main() {\n gl_FragColor = vec4(u_color, 1.0);\n }\n `,\n transparent: true,\n side: 2,\n depthTest: false,\n})\n\n// const material = new MeshBasicMaterial({ color: new Color('#fab73f'), side: DoubleSide })\n\n/**\n * create round curve\n * @param points\n * @param radius\n * @param close\n * @returns\n */\nconst createCurve = (points: Vector3[], radius = 20, height = 50, close = false, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n\n const curve = new CurvePath()\n const shape = rectangle(0.1, height)\n\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n if (points.length === 2) {\n const line = new LineCurve3(points[0], points[1])\n curve.curves.push(line)\n\n return [curve]\n }\n\n const lines = []\n\n for (let i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n const dir = points[0].clone().sub(points[1]).normalize()\n const realEndPoints = points[1].clone().add(dir.multiplyScalar(radius))\n\n let firstPoint = points[0]\n\n if (close)\n firstPoint = points[0].clone().add(points[1].clone().sub(points[0]).normalize().multiplyScalar(radius))\n\n lines.push(new LineCurve3(firstPoint, realEndPoints))\n }\n else if (i === points.length - 1) {\n //\n }\n else {\n const dir1 = points[i - 1].clone().sub(points[i]).normalize()\n const dir2 = points[i + 1].clone().sub(points[i]).normalize()\n const dir3 = points[i].clone().sub(points[i + 1]).normalize()\n\n const nextDir1 = dir2.clone()\n const nextDir2 = points[i].clone().sub(points[i + 1]).normalize()\n\n const p1 = points[i].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[i].clone()\n const p3 = points[i].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p1, p2, p3)\n\n const realLastPoints = points[i].clone().add(nextDir1.multiplyScalar(radius))\n const realEndPoints = points[i + 1].clone().add(nextDir2.multiplyScalar(radius))\n\n lines.push(beziercurve)\n lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1\n ? close\n ? points[i + 1].clone().add(dir3.multiplyScalar(radius))\n : points[i + 1]\n : realEndPoints))\n }\n }\n\n if (close) {\n // first point\n const dir1 = points[1].clone().sub(points[0]).normalize()\n const dir2 = points[points.length - 1].clone().sub(points[0]).normalize()\n\n const p1 = points[0].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[0]\n const p3 = points[0].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p3, p2, p1)\n\n // last point\n const dir3 = points[0].clone().sub(points[points.length - 1]).normalize()\n const dir4 = points[points.length - 2].clone().sub(points[points.length - 1]).normalize()\n\n const p4 = points[points.length - 1].clone().add(dir3.multiplyScalar(radius))\n const p5 = points[points.length - 1]\n const p6 = points[points.length - 1].clone().add(dir4.multiplyScalar(radius))\n\n const beziercurve2 = new QuadraticBezierCurve3(p6, p5, p4)\n\n // last line\n const laseLine = new LineCurve3(p4, p3)\n\n lines.push(beziercurve2)\n lines.push(laseLine)\n lines.push(beziercurve)\n }\n\n const group = new Group()\n\n lines.forEach((line) => {\n curve.curves.push(line)\n\n if (line.type === 'QuadraticBezierCurve3') {\n const extrudeSettings = {\n steps: 100,\n bevelEnabled: false,\n extrudePath: line,\n }\n\n const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n const arcWall = new Mesh(geometry, material)\n\n arcWall.translateY(arcWall.position.y + height)\n\n if (radius)\n group.add(arcWall)\n }\n else {\n const mesh = createBoxGeometryByPoints(line.v1, line.v2, height, 0.1, material)\n group.add(mesh)\n }\n })\n\n return [curve, group] as any\n}\n\ntype RoundLineGeometryOption = {\n radius: number\n close: boolean\n pointNum?: number\n height?: number\n}\n\nclass RoundLineGeometry extends BufferGeometry {\n public curve: any\n\n constructor(points: Vector3[], option: RoundLineGeometryOption) {\n super()\n\n const [curve] = createCurve(points, option.radius ?? 20, void 0, option.close || false)\n const currentPoints = curve.getPoints(option.pointNum || 1000)\n\n const geometry = new BufferGeometry()\n geometry.setFromPoints(currentPoints)\n\n this.curve = curve\n }\n}\n\nconst createRoundLineWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n const [_, group] = createCurve(points, option.radius ?? 20, option.height ?? 50, option.close || false, material)\n\n return group\n}\n\nconst createRoundedClosedCurve = (points: Vector3[], radius = 20, closed = true) => {\n const curves: Curve<Vector3>[] = []\n const total = points.length\n let lastP2: Vector3 | null = null\n // 👇 避免 radius = 0 时直线退化问题\n const safeRadius = radius === 0 ? 0.0001 : radius\n\n for (let i = 0; i < total; i++) {\n const curr = points[i]\n const hasPrev = i > 0\n const hasNext = i < total - 1\n\n if ((hasPrev && hasNext) || closed) {\n const pPrev = points[(i - 1 + total) % total]\n const pNext = points[(i + 1) % total]\n\n const v1 = curr.clone().sub(pPrev).normalize()\n const v2 = pNext.clone().sub(curr).normalize()\n const tangentLength = Math.min(\n safeRadius,\n curr.distanceTo(pPrev) / 2,\n curr.distanceTo(pNext) / 2,\n )\n\n const p1 = curr\n .clone()\n .sub(v1.clone().multiplyScalar(tangentLength))\n const p2 = curr\n .clone()\n .add(v2.clone().multiplyScalar(tangentLength))\n\n if (lastP2)\n curves.push(new LineCurve3(lastP2.clone(), p1.clone()))\n else if (!closed && i === 1)\n curves.push(new LineCurve3(points[0].clone(), p1.clone()))\n\n curves.push(\n new QuadraticBezierCurve3(\n p1.clone(),\n curr.clone(),\n p2.clone(),\n ),\n )\n lastP2 = p2\n }\n else if (!hasNext && lastP2) {\n curves.push(new LineCurve3(lastP2.clone(), curr.clone()))\n }\n }\n\n if (closed && lastP2) {\n const first = points[0]\n const prev = points[points.length - 1]\n const next = points[1]\n\n const v1 = first.clone().sub(prev).normalize()\n const v2 = next.clone().sub(first).normalize()\n\n const tangentLength = Math.min(\n safeRadius,\n first.distanceTo(prev) / 2,\n first.distanceTo(next) / 2,\n )\n const firstP1 = first\n .clone()\n .sub(v1.clone().multiplyScalar(tangentLength))\n curves.push(new LineCurve3(lastP2.clone(), firstP1.clone()))\n }\n\n const path = new CurvePath<Vector3>()\n curves.forEach(c => path.add(c))\n return path\n // for (let i = 0; i < total; i++) {\n // const prev = points[(i - 1 + total) % total]\n // const curr = points[i]\n // const next = points[(i + 1) % total]\n\n // const v1 = curr.clone().sub(prev).normalize()\n // const v2 = next.clone().sub(curr).normalize()\n\n // const tangentLength = Math.min(safeRadius, curr.distanceTo(prev) / 2, curr.distanceTo(next) / 2)\n\n // const p1 = curr.clone().sub(v1.clone().multiplyScalar(tangentLength))\n // const p2 = curr.clone().add(v2.clone().multiplyScalar(tangentLength))\n\n // if (lastP2)\n // curves.push(new LineCurve3(lastP2.clone(), p1.clone()))\n\n // curves.push(new QuadraticBezierCurve3(p1.clone(), curr.clone(), p2.clone()))\n // lastP2 = p2\n // }\n\n // const prev = points[(total - 1 + total) % total]\n // const curr = points[0]\n // const next = points[1]\n\n // const v1 = curr.clone().sub(prev).normalize()\n // const v2 = next.clone().sub(curr).normalize()\n\n // const tangentLength = Math.min(safeRadius, curr.distanceTo(prev) / 2, curr.distanceTo(next) / 2)\n // const firstP1 = curr.clone().sub(v1.clone().multiplyScalar(tangentLength))\n\n // curves.push(new LineCurve3(lastP2!.clone(), firstP1.clone()))\n\n // const path = new CurvePath<THREE.Vector3>()\n // curves.forEach(c => path.add(c))\n // return path\n}\n\nconst createRoundedClosedWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n // const shape = rectangle(0.1, option.height)\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n const curvePath = createRoundedClosedCurve(points, option.radius, option.close)\n const divisions = 1000\n // const upVec = new Vector3(0, 1, 0)\n const bottomPoints = curvePath.getSpacedPoints(divisions)\n const topPoints = bottomPoints.map(\n p => new Vector3(p.x, p.y + option.height, p.z),\n )\n\n // 构建侧面 geometry\n const sideGeometry = new BufferGeometry()\n const positions = []\n const indices = []\n\n for (let i = 0; i < divisions; i++) {\n const b0 = bottomPoints[i]\n const b1 = bottomPoints[i + 1]\n const t0 = topPoints[i]\n const t1 = topPoints[i + 1]\n\n if (!b1 || !t1)\n break\n\n const baseIndex = positions.length / 3\n\n positions.push(b0.x, b0.y, b0.z) // 0\n positions.push(b1.x, b1.y, b1.z) // 1\n positions.push(t1.x, t1.y, t1.z) // 2\n positions.push(t0.x, t0.y, t0.z) // 3\n\n // 两个三角形组成一个四边面\n indices.push(baseIndex, baseIndex + 1, baseIndex + 2)\n indices.push(baseIndex, baseIndex + 2, baseIndex + 3)\n }\n\n sideGeometry.setAttribute(\n 'position',\n new Float32BufferAttribute(positions, 3),\n )\n sideGeometry.setIndex(indices)\n sideGeometry.computeVertexNormals()\n\n // const sideMaterial = new THREE.MeshNormalMaterial({\n // side: THREE.DoubleSide,\n // })\n const sideMesh = new Mesh(sideGeometry, material)\n // const extrudeSettings = {\n // steps: 200,\n // bevelEnabled: false,\n // extrudePath: curvePath,\n // }\n // const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n // const material1 = new MeshNormalMaterial({ wireframe: false })\n // const arcWall = new Mesh(geometry, material)\n // arcWall.translateY(arcWall.position.y + option.height)\n return sideMesh\n}\nexport {\n RoundLineGeometry,\n createRoundLineWallMesh,\n createRoundedClosedWallMesh,\n createRoundedClosedCurve,\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BoxGeometry","BufferGeometry","Color","CurvePath","ExtrudeGeometry","Float32BufferAttribute","Group","LineCurve3","Mesh","MeshBasicMaterial","QuadraticBezierCurve3","Quaternion","ShaderMaterial","Shape","Vector3","createBoxGeometryByPoints","a","b","height","depth","material","width","distanceTo","box","currentMaterial","color","mesh","midpoint","addVectors","multiplyScalar","position","x","y","z","direction","subVectors","normalize","axis","angle","angleTo","quaternion","setFromAxisAngle","newDirection","applyQuaternion","rotateOnAxis","rectangle","w","h","shape","moveTo","lineTo","defMaterial","uniforms","u_color","value","u_height","u_opacity","vertexShader","fragmentShader","transparent","side","depthTest","createCurve","points","radius","close","curve","length","Error","line","curves","push","lines","i","dir","clone","sub","realEndPoints","add","firstPoint","dir1","dir2","dir3","nextDir1","nextDir2","p1","p2","p3","beziercurve","realLastPoints","dir4","p4","p5","p6","beziercurve2","laseLine","group","forEach","type","extrudeSettings","steps","bevelEnabled","extrudePath","geometry","arcWall","translateY","v1","v2","RoundLineGeometry","constructor","option","_option$radius","_defineProperty","currentPoints","getPoints","pointNum","setFromPoints","createRoundLineWallMesh","_option$radius2","_option$height","_","createRoundedClosedCurve","closed","total","lastP2","safeRadius","curr","hasPrev","hasNext","pPrev","pNext","tangentLength","Math","min","first","prev","next","firstP1","path","c","createRoundedClosedWallMesh","curvePath","divisions","bottomPoints","getSpacedPoints","topPoints","map","p","sideGeometry","positions","indices","b0","b1","t0","t1","baseIndex","setAttribute","setIndex","computeVertexNormals","sideMesh"],"sources":["../../../src/business/Utils/round-curve.ts"],"sourcesContent":["/* eslint-disable no-void */\nimport type { Curve } from '@anov/3d-core'\nimport { BoxGeometry, BufferGeometry, Color, CurvePath, ExtrudeGeometry, Float32BufferAttribute, Group, LineCurve3, Mesh, MeshBasicMaterial, MeshNormalMaterial, QuadraticBezierCurve3, Quaternion, ShaderMaterial, Shape, Vector3 } from '@anov/3d-core'\n\nexport interface TextureParamsType {\n texture?: string\n repeatX?: number\n repeatY?: number\n wrapS?: number\n wrapT?: number\n}\n\n/**\n * TODO: 参数优化\n * create box geometry by two points\n * just provide data not create mesh\n * @param a\n * @param b\n * @param height\n * @param depth\n */\nconst createBoxGeometryByPoints = (a: Vector3, b: Vector3, height = 30, depth = 10, material?: ShaderMaterial) => {\n const width = a.distanceTo(b)\n const box = new BoxGeometry(width, height, depth)\n\n let currentMaterial: MeshBasicMaterial | ShaderMaterial = new MeshBasicMaterial({ color: new Color('#fff') })\n if (material)\n currentMaterial = material\n\n const mesh = new Mesh(box, currentMaterial)\n const midpoint = new Vector3().addVectors(a, b).multiplyScalar(0.5)\n\n mesh.position.x = midpoint.x\n mesh.position.y = midpoint.y + height / 2\n mesh.position.z = midpoint.z\n\n const direction = new Vector3()\n direction.subVectors(a, b)\n direction.normalize()\n\n const axis = new Vector3(0, 1, 0) // axis\n const angle = new Vector3(1, 0, 0).angleTo(direction)\n\n const quaternion = new Quaternion().setFromAxisAngle(axis, angle)\n const newDirection = new Vector3(1, 0, 0).applyQuaternion(quaternion)\n\n if (!newDirection.angleTo(direction))\n mesh.rotateOnAxis(axis, angle)\n else\n mesh.rotateOnAxis(axis, -angle)\n\n return mesh\n}\n\n/**\n * rectangle shape\n * @param w\n * @param h\n * @returns\n */\nconst rectangle = (w = 0.1, h = 50) => {\n const shape = new Shape()\n\n shape.moveTo(0, 0)\n shape.lineTo(0, w)\n shape.lineTo(h, w)\n shape.lineTo(h, 0)\n shape.lineTo(0, 0)\n\n return shape\n}\n\nconst defMaterial = new ShaderMaterial({\n uniforms: {\n u_color: { value: new Color('#fab73f') },\n u_height: { value: 100 },\n u_opacity: { value: 1.0 },\n },\n\n vertexShader: `\n uniform float u_height;\n uniform float u_speed;\n varying float v_opacity;\n\n void main() {\n v_opacity = mix(1.0, 0.0, position.y / u_height);\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`,\n fragmentShader: `\n uniform vec3 u_color;\n uniform float u_opacity;\n varying float v_opacity;\n\n void main() {\n gl_FragColor = vec4(u_color, 1.0);\n }\n `,\n transparent: true,\n side: 2,\n depthTest: false,\n})\n\n// const material = new MeshBasicMaterial({ color: new Color('#fab73f'), side: DoubleSide })\n\n/**\n * create round curve\n * @param points\n * @param radius\n * @param close\n * @returns\n */\nconst createCurve = (points: Vector3[], radius = 20, height = 50, close = false, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n\n const curve = new CurvePath()\n const shape = rectangle(0.1, height)\n\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n if (points.length === 2) {\n const line = new LineCurve3(points[0], points[1])\n curve.curves.push(line)\n\n return [curve]\n }\n\n const lines = []\n\n for (let i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n const dir = points[0].clone().sub(points[1]).normalize()\n const realEndPoints = points[1].clone().add(dir.multiplyScalar(radius))\n\n let firstPoint = points[0]\n\n if (close)\n firstPoint = points[0].clone().add(points[1].clone().sub(points[0]).normalize().multiplyScalar(radius))\n\n lines.push(new LineCurve3(firstPoint, realEndPoints))\n }\n else if (i === points.length - 1) {\n //\n }\n else {\n const dir1 = points[i - 1].clone().sub(points[i]).normalize()\n const dir2 = points[i + 1].clone().sub(points[i]).normalize()\n const dir3 = points[i].clone().sub(points[i + 1]).normalize()\n\n const nextDir1 = dir2.clone()\n const nextDir2 = points[i].clone().sub(points[i + 1]).normalize()\n\n const p1 = points[i].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[i].clone()\n const p3 = points[i].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p1, p2, p3)\n\n const realLastPoints = points[i].clone().add(nextDir1.multiplyScalar(radius))\n const realEndPoints = points[i + 1].clone().add(nextDir2.multiplyScalar(radius))\n\n lines.push(beziercurve)\n lines.push(new LineCurve3(realLastPoints, i + 1 === points.length - 1\n ? close\n ? points[i + 1].clone().add(dir3.multiplyScalar(radius))\n : points[i + 1]\n : realEndPoints))\n }\n }\n\n if (close) {\n // first point\n const dir1 = points[1].clone().sub(points[0]).normalize()\n const dir2 = points[points.length - 1].clone().sub(points[0]).normalize()\n\n const p1 = points[0].clone().add(dir1.multiplyScalar(radius))\n const p2 = points[0]\n const p3 = points[0].clone().add(dir2.multiplyScalar(radius))\n\n const beziercurve = new QuadraticBezierCurve3(p3, p2, p1)\n\n // last point\n const dir3 = points[0].clone().sub(points[points.length - 1]).normalize()\n const dir4 = points[points.length - 2].clone().sub(points[points.length - 1]).normalize()\n\n const p4 = points[points.length - 1].clone().add(dir3.multiplyScalar(radius))\n const p5 = points[points.length - 1]\n const p6 = points[points.length - 1].clone().add(dir4.multiplyScalar(radius))\n\n const beziercurve2 = new QuadraticBezierCurve3(p6, p5, p4)\n\n // last line\n const laseLine = new LineCurve3(p4, p3)\n\n lines.push(beziercurve2)\n lines.push(laseLine)\n lines.push(beziercurve)\n }\n\n const group = new Group()\n\n lines.forEach((line) => {\n curve.curves.push(line)\n\n if (line.type === 'QuadraticBezierCurve3') {\n const extrudeSettings = {\n steps: 100,\n bevelEnabled: false,\n extrudePath: line,\n }\n\n const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n const arcWall = new Mesh(geometry, material)\n\n arcWall.translateY(arcWall.position.y + height)\n\n if (radius)\n group.add(arcWall)\n }\n else {\n const mesh = createBoxGeometryByPoints(line.v1, line.v2, height, 0.1, material)\n group.add(mesh)\n }\n })\n\n return [curve, group] as any\n}\n\ntype RoundLineGeometryOption = {\n radius: number\n close: boolean\n pointNum?: number\n height?: number\n}\n\nclass RoundLineGeometry extends BufferGeometry {\n public curve: any\n\n constructor(points: Vector3[], option: RoundLineGeometryOption) {\n super()\n\n const [curve] = createCurve(points, option.radius ?? 20, void 0, option.close || false)\n const currentPoints = curve.getPoints(option.pointNum || 1000)\n\n const geometry = new BufferGeometry()\n geometry.setFromPoints(currentPoints)\n\n this.curve = curve\n }\n}\n\nconst createRoundLineWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n const [_, group] = createCurve(points, option.radius ?? 20, option.height ?? 50, option.close || false, material)\n\n return group\n}\n\nconst createRoundedClosedCurve = (points: Vector3[], radius = 20, closed = true) => {\n const curves: Curve<Vector3>[] = []\n const total = points.length\n let lastP2: Vector3 | null = null\n // 👇 避免 radius = 0 时直线退化问题\n const safeRadius = radius === 0 ? 0.0001 : radius\n\n for (let i = 0; i < total; i++) {\n const curr = points[i]\n const hasPrev = i > 0\n const hasNext = i < total - 1\n\n if ((hasPrev && hasNext) || closed) {\n const pPrev = points[(i - 1 + total) % total]\n const pNext = points[(i + 1) % total]\n\n const v1 = curr.clone().sub(pPrev).normalize()\n const v2 = pNext.clone().sub(curr).normalize()\n const tangentLength = Math.min(\n safeRadius,\n curr.distanceTo(pPrev) / 2,\n curr.distanceTo(pNext) / 2,\n )\n\n const p1 = curr\n .clone()\n .sub(v1.clone().multiplyScalar(tangentLength))\n const p2 = curr\n .clone()\n .add(v2.clone().multiplyScalar(tangentLength))\n\n if (lastP2)\n curves.push(new LineCurve3(lastP2.clone(), p1.clone()))\n else if (!closed && i === 1)\n curves.push(new LineCurve3(points[0].clone(), p1.clone()))\n\n curves.push(\n new QuadraticBezierCurve3(\n p1.clone(),\n curr.clone(),\n p2.clone(),\n ),\n )\n lastP2 = p2\n }\n else if (!hasNext && lastP2) {\n curves.push(new LineCurve3(lastP2.clone(), curr.clone()))\n }\n }\n\n if (closed && lastP2) {\n const first = points[0]\n const prev = points[points.length - 1]\n const next = points[1]\n\n const v1 = first.clone().sub(prev).normalize()\n const v2 = next.clone().sub(first).normalize()\n\n const tangentLength = Math.min(\n safeRadius,\n first.distanceTo(prev) / 2,\n first.distanceTo(next) / 2,\n )\n const firstP1 = first\n .clone()\n .sub(v1.clone().multiplyScalar(tangentLength))\n curves.push(new LineCurve3(lastP2.clone(), firstP1.clone()))\n }\n\n const path = new CurvePath<Vector3>()\n curves.forEach(c => path.add(c))\n return path\n // for (let i = 0; i < total; i++) {\n // const prev = points[(i - 1 + total) % total]\n // const curr = points[i]\n // const next = points[(i + 1) % total]\n\n // const v1 = curr.clone().sub(prev).normalize()\n // const v2 = next.clone().sub(curr).normalize()\n\n // const tangentLength = Math.min(safeRadius, curr.distanceTo(prev) / 2, curr.distanceTo(next) / 2)\n\n // const p1 = curr.clone().sub(v1.clone().multiplyScalar(tangentLength))\n // const p2 = curr.clone().add(v2.clone().multiplyScalar(tangentLength))\n\n // if (lastP2)\n // curves.push(new LineCurve3(lastP2.clone(), p1.clone()))\n\n // curves.push(new QuadraticBezierCurve3(p1.clone(), curr.clone(), p2.clone()))\n // lastP2 = p2\n // }\n\n // const prev = points[(total - 1 + total) % total]\n // const curr = points[0]\n // const next = points[1]\n\n // const v1 = curr.clone().sub(prev).normalize()\n // const v2 = next.clone().sub(curr).normalize()\n\n // const tangentLength = Math.min(safeRadius, curr.distanceTo(prev) / 2, curr.distanceTo(next) / 2)\n // const firstP1 = curr.clone().sub(v1.clone().multiplyScalar(tangentLength))\n\n // curves.push(new LineCurve3(lastP2!.clone(), firstP1.clone()))\n\n // const path = new CurvePath<THREE.Vector3>()\n // curves.forEach(c => path.add(c))\n // return path\n}\n\nconst createRoundedClosedWallMesh = (points: Vector3[], option: RoundLineGeometryOption, material?: ShaderMaterial) => {\n if (!material)\n material = defMaterial\n // const shape = rectangle(0.1, option.height)\n if (points.length < 2)\n throw new Error('At least two points are required to create a curve')\n\n const curvePath = createRoundedClosedCurve(points, option.radius, option.close)\n const divisions = 1000\n // const upVec = new Vector3(0, 1, 0)\n const bottomPoints = curvePath.getSpacedPoints(divisions)\n const topPoints = bottomPoints.map(\n p => new Vector3(p.x, p.y + option.height, p.z),\n )\n\n // 构建侧面 geometry\n const sideGeometry = new BufferGeometry()\n const positions = []\n const indices = []\n\n for (let i = 0; i < divisions; i++) {\n const b0 = bottomPoints[i]\n const b1 = bottomPoints[i + 1]\n const t0 = topPoints[i]\n const t1 = topPoints[i + 1]\n\n if (!b1 || !t1)\n break\n\n const baseIndex = positions.length / 3\n\n positions.push(b0.x, b0.y, b0.z) // 0\n positions.push(b1.x, b1.y, b1.z) // 1\n positions.push(t1.x, t1.y, t1.z) // 2\n positions.push(t0.x, t0.y, t0.z) // 3\n\n // 两个三角形组成一个四边面\n indices.push(baseIndex, baseIndex + 1, baseIndex + 2)\n indices.push(baseIndex, baseIndex + 2, baseIndex + 3)\n }\n\n sideGeometry.setAttribute(\n 'position',\n new Float32BufferAttribute(positions, 3),\n )\n sideGeometry.setIndex(indices)\n sideGeometry.computeVertexNormals()\n\n // const sideMaterial = new THREE.MeshNormalMaterial({\n // side: THREE.DoubleSide,\n // })\n const sideMesh = new Mesh(sideGeometry, material)\n // const extrudeSettings = {\n // steps: 200,\n // bevelEnabled: false,\n // extrudePath: curvePath,\n // }\n // const geometry = new ExtrudeGeometry(shape, extrudeSettings)\n // const material1 = new MeshNormalMaterial({ wireframe: false })\n // const arcWall = new Mesh(geometry, material)\n // arcWall.translateY(arcWall.position.y + option.height)\n return sideMesh\n}\nexport {\n RoundLineGeometry,\n createRoundLineWallMesh,\n createRoundedClosedWallMesh,\n createRoundedClosedCurve,\n}"],"mappings":"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"}
|