@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CSS3DObject","Vector3","MathUtils","ObjectLayer","clampAlign","parseWeight","parseStyle","num","color","sanitizeUrl","arr2","arr3","rep","setStyles","arr4","defaults","text","value","fontSize","fontWeight","fontStyle","offset","align","spacing","bgUrl","hsl","bgNineSlice","enabled","slice","width","repeat","fill","radius","bgSlice","content","visible","size","scale","userScale3","pixelLock","billboard","anchor","InfoPanel","constructor","cfg","_defineProperty","config","JSON","parse","stringify","updateConfig","container","document","createElement","titleEl","contentEl","innerWrap","position","left","top","transform","pointerEvents","appendChild","_cssObject","add","applyStyle","t","c","ns","Array","isArray","length","sx","sy","sz","s","bb","ac","setPosition","x","y","z","set","setRotation","rotation","setScale","setScalar","setBillboard","mode","m","setVisible","v","display","boxSizing","transformOrigin","backgroundRepeat","backgroundPosition","backfaceVisibility","padding","pxW","pxH","height","minWidth","minHeight","style","bottom","textContent","textAlign","letterSpacing","whiteSpace","overflow","textOverflow","marginLeft","marginTop","wordBreak","hasBgUrl","w","wClamped","Math","min","borderStyle","borderWidth","borderImageSource","borderImageSlice","borderImageRepeat","backgroundImage","borderRadius","backgroundSize","filter","update","updateFacing","camera","objPos","_tmpObjPos","camPos","_tmpCamPos","getWorldPosition","lookAt","dx","dz","yaw","atan2","updateDynamicScale","viewportWidth","window","innerWidth","viewportHeight","innerHeight","camDir","_tmpCamDir","getWorldDirection","d","clone","sub","dot","fovRad","degToRad","fov","worldPerPixelY","tan","worldPerPixelX","aspect","userScale","Number","isFinite","MAX_S","MIN_S","max","dispose","parent","remove","getWorldSize","wpx","offsetWidth","hpx","offsetHeight"],"sources":["../../../../src/business/Poi/panel/index.ts"],"sourcesContent":["/*\n * @Descripttion: \n * @version: \n * @Author: 周志国\n * @Date: 2025-11-27 15:14:21\n * @LastEditors: 周志国\n * @LastEditTime: 2025-12-01 15:44:33\n * @changeLog: \n * @FilePath: /anov-3d-webgl/packages/anov-3d-ability/src/business/Poi/panel/index.ts\n */\nimport { CSS3DObject, Vector3, MathUtils, type PerspectiveCamera } from '@anov/3d-core'\nimport ObjectLayer from '../../Base/ObjectLayer'\nimport { clampAlign, parseWeight, parseStyle, num, color, sanitizeUrl, arr2, arr3, rep, setStyles, arr4 } from './utils'\nimport { InfoPanelConfig,InfoPanelUpdateConfig,NineSliceConfig} from './interfaces'\n/**\n * 文件概览\n * InfoPanel 是一个基于 CSS3DObject 的信息面板组件,用于在三维场景中以“屏幕像素”为基础进行排版和渲染。\n * - 最小像素尺寸通过 `size` 指定(默认 320x180),容器会随内容自适应增大。\n * - `pixelLock` 为 true 时,面板会随相机距离自动缩放以保持屏幕像素大小恒定。\n * - `scale`/`userScale3` 提供统一或非均匀的用户缩放,参与最终缩放计算。\n * - `billboard` 支持朝向相机(`yaw` 或 `full`),用于看板效果。\n */\n\n\n\n/**\n * 组件默认配置。\n * - text: 标题(主文本)相关样式与背景设置\n * - content: 副文本显示与样式\n * - size: 面板最小像素尺寸 `[width, height]`\n * - scale: 统一用户缩放系数(>0)\n * - userScale3: 非均匀用户缩放 `[sx, sy, sz]`,与 `scale` 相乘\n * - pixelLock: 是否锁定屏幕像素尺寸\n * - billboard: 看板模式('none'|'yaw'|'full')\n * - anchor: 面板锚点('top'|'center'|'bottom')\n */\nconst defaults: InfoPanelConfig = {\n text: {\n value: '',\n fontSize: 16,\n color: '#ffffff',\n fontWeight: 'normal',\n fontStyle: 'normal',\n offset: [0, 0] as [number, number],\n align: 'left',\n spacing: 0,\n bgUrl: '',\n hsl: [200, 120, 80],\n bgNineSlice: {\n enabled: true,\n slice: [65, 92, 27, 17] as [number, number, number, number],\n width: [65, 92, 27, 17] as [number, number, number, number],\n repeat: 'stretch',\n fill: true,\n radius: 0\n },\n bgSlice: [65, 92, 27, 17] as [number, number, number, number],\n },\n content: {\n visible: false,\n value: '',\n fontSize: 16,\n color: '#ffffff',\n fontWeight: 'normal',\n fontStyle: 'normal',\n align: 'left',\n offset: [0, 0] as [number, number],\n spacing: 0\n },\n // 默认面板像素尺寸(宽度,高度)\n size: [320, 180] as [number, number],\n scale: 1,\n // 非均匀用户缩放(来自外部 scale: [x,y,z])\n userScale3: [1, 1, 1] as [number, number, number],\n // 屏幕像素锁定:保持屏幕像素尺寸恒定\n pixelLock: true,\n billboard: 'none',\n anchor: 'top'\n}\n\n/**\n * InfoPanel\n * 一个基于 CSS3DObject 的三维信息面板。面板的排版以像素为单位,\n * 并可根据相机参数在 3D 世界中动态映射为适当的世界尺寸。\n *\n * 关键特性:\n * - 像素锁定(`pixelLock`):保证屏幕像素尺寸恒定的看板效果。\n * - 动态缩放(`updateDynamicScale`):实时根据相机 FOV、距离、视口宽高计算世界尺度。\n * - 看板模式(`billboard`):支持水平(yaw)和全方位(full)朝向相机。\n * - 自定义缩放(`scale` 与 `userScale3`):统一与非均匀缩放相乘得到最终缩放。\n *\n * 用法概览:\n * const panel = new InfoPanel({\n * text: { value: 'POI A', fontSize: 18 },\n * size: [320, 180],\n * scale: 1,\n * pixelLock: true,\n * billboard: 'yaw',\n * anchor: 'top'\n * });\n * panel.updateDynamicScale(camera);\n */\nexport default class InfoPanel extends ObjectLayer {\n // 新增字段声明,修复类型报错\n /**\n * 内部状态与元素引用\n * - config: 当前配置(已合并 defaults 与外部传入)\n * - container: 面板根容器(用于 CSS3DObject 承载)\n * - titleEl: 标题元素\n * - contentEl: 内容元素(可选)\n * - innerWrap: 内部包裹,用于实现锚点与偏移\n * - _cssObject: three.js CSS3DObject(加入到 scene graph)\n */\n private config: InfoPanelConfig\n private container: HTMLDivElement\n private titleEl: HTMLDivElement\n private contentEl: HTMLDivElement\n private innerWrap: HTMLDivElement\n private _cssObject: CSS3DObject\n // 复用的临时向量,避免频繁创建对象\n private _tmpObjPos: Vector3 = new Vector3()\n private _tmpCamPos: Vector3 = new Vector3()\n private _tmpCamDir: Vector3 = new Vector3()\n\n /**\n * 构造函数\n * @param cfg 外部配置对象;仅识别本组件支持的字段,其他字段会忽略\n */\n constructor(cfg: InfoPanelUpdateConfig = {}) {\n super()\n this.config = JSON.parse(JSON.stringify(defaults))\n this.updateConfig(cfg)\n this.container = document.createElement('div')\n this.titleEl = document.createElement('div')\n this.contentEl = document.createElement('div')\n this.innerWrap = document.createElement('div')\n // 内层包裹用于布局,默认采用容器左上角为参考点\n setStyles(this.innerWrap, {\n position: 'relative',\n left: '0',\n top: '0',\n transform: 'none',\n pointerEvents: 'auto',\n })\n this.innerWrap.appendChild(this.titleEl)\n this.innerWrap.appendChild(this.contentEl)\n this.container.appendChild(this.innerWrap)\n // 将 CSS3DObject 作为子节点添加,而非赋值到 this.object3D\n this._cssObject = new CSS3DObject(this.container)\n this.add(this._cssObject)\n this.applyStyle()\n }\n\n /**\n * 将传入的配置与默认值合并并规范化。\n * - 自动处理文本样式、九宫格背景、可见性、对齐与偏移。\n * - `scale`: 支持数值(统一缩放)或长度为 3 的数组(非均匀缩放)。\n * - `pixelLock`: 是否锁定屏幕像素尺寸。\n * - `anchor`: 面板锚点。\n * @param cfg 配置对象\n */\n updateConfig(cfg: InfoPanelUpdateConfig = {}) {\n const t = cfg.text || {}\n const c = cfg.content || {}\n this.config.text.value = typeof t.value === 'string' ? t.value : this.config.text.value\n this.config.text.fontSize = num(t.fontSize, this.config.text.fontSize)\n this.config.text.color = color(t.color, this.config.text.color)\n this.config.text.fontWeight = parseWeight(t.fontWeight || this.config.text.fontWeight)\n this.config.text.fontStyle = parseStyle(t.fontStyle || this.config.text.fontStyle)\n this.config.text.offset = arr2(t.offset, this.config.text.offset) as [number, number]\n this.config.text.align = clampAlign(t.align || this.config.text.align)\n this.config.text.spacing = num(t.spacing, this.config.text.spacing)\n this.config.text.bgUrl = typeof t.bgUrl === 'string' ? sanitizeUrl(t.bgUrl) : this.config.text.bgUrl\n this.config.text.hsl = arr3(t.hsl, this.config.text.hsl).slice(0, 3) as [number, number, number]\n const ns: Partial<NineSliceConfig> = t.bgNineSlice || {}\n this.config.text.bgNineSlice.enabled = typeof ns.enabled === 'boolean' ? ns.enabled : this.config.text.bgNineSlice.enabled\n this.config.text.bgNineSlice.slice = arr4(ns.slice||t.bgSlice, this.config.text.bgNineSlice.slice) as [number, number, number, number]\n this.config.text.bgNineSlice.width = arr4(ns.width||t.bgSlice, this.config.text.bgNineSlice.width) as [number, number, number, number]\n this.config.text.bgNineSlice.repeat = rep(ns.repeat || this.config.text.bgNineSlice.repeat) as NineSliceConfig['repeat']\n this.config.text.bgNineSlice.fill = typeof ns.fill === 'boolean' ? ns.fill : this.config.text.bgNineSlice.fill\n this.config.text.bgNineSlice.radius = num(ns.radius, this.config.text.bgNineSlice.radius)\n this.config.content.visible = typeof c.visible === 'boolean' ? c.visible : this.config.content.visible\n this.config.content.value = typeof c.value === 'string' ? c.value : this.config.content.value\n this.config.content.fontSize = num(c.fontSize, this.config.content.fontSize)\n this.config.content.color = color(c.color, this.config.content.color)\n this.config.content.fontWeight = parseWeight(c.fontWeight || this.config.content.fontWeight)\n this.config.content.fontStyle = parseStyle(c.fontStyle || this.config.content.fontStyle)\n this.config.content.align = clampAlign(c.align || this.config.content.align)\n this.config.content.offset = arr2(c.offset, this.config.content.offset) as [number, number]\n this.config.content.spacing = num(c.spacing, this.config.content.spacing)\n // 支持数值或数组。数值作为统一倍数,数组作为非均匀倍数\n if (Array.isArray(cfg.scale) && cfg.scale.length === 3) {\n const sx = num(cfg.scale[0], this.config.userScale3[0])\n const sy = num(cfg.scale[1], this.config.userScale3[1])\n const sz = num(cfg.scale[2], this.config.userScale3[2])\n this.config.userScale3 = [sx, sy, sz]\n } else {\n const s = num(cfg.scale, this.config.scale)\n // 用户缩放因子:仅作为乘数,不参与单位换算\n this.config.scale = s > 0 ? s : this.config.scale\n }\n const bb = (cfg.billboard || this.config.billboard)\n this.config.billboard = bb === 'yaw' || bb === 'full' ? bb : 'none'\n // 面板尺寸可通过 cfg.size 指定,否则使用默认尺寸\n this.config.size = arr2(cfg.size, this.config.size) as [number, number]\n // 屏幕像素锁定\n this.config.pixelLock = !!(typeof cfg.pixelLock === 'boolean' ? cfg.pixelLock : this.config.pixelLock)\n // 面板锚点\n const ac = cfg.anchor || this.config.anchor\n this.config.anchor = ac === 'top' || ac === 'center' || ac === 'bottom' ? ac : 'bottom'\n }\n\n /**\n * 设置面板世界坐标(应用到 CSS3DObject)。\n */\n setPosition(x: number, y: number, z: number): void {\n this._cssObject.position.set(x, y, z)\n }\n\n /**\n * 设置面板世界旋转(欧拉角,单位:弧度)。\n */\n setRotation(x: number, y: number, z: number): void {\n this._cssObject.rotation.set(x, y, z)\n }\n\n /**\n * 设置统一缩放因子(立即应用到 CSS3DObject)。\n * 注意:若使用 `updateDynamicScale`,每帧会覆盖此值。\n */\n setScale(s: number): void {\n this._cssObject.scale.setScalar(s)\n }\n\n /**\n * 设置看板模式。\n * @param mode 'none' | 'yaw' | 'full'\n */\n setBillboard(mode: 'none' | 'yaw' | 'full'): void {\n const m = mode === 'yaw' || mode === 'full' ? mode : 'none'\n this.config.billboard = m\n }\n\n /**\n * 设置可见性。\n * @param v 是否可见\n */\n setVisible(v: boolean): void {\n this._cssObject.visible = !!v\n }\n\n /**\n * 应用所有样式与文本到 DOM。\n * 仅影响面板的排版与外观,不涉及 3D 变换。\n */\n applyStyle(): void {\n const t = this.config.text\n const c = this.config.content\n // 基础容器样式,确保可见尺寸与居中锚点\n setStyles(this.container, {\n display: 'inline-block',\n boxSizing: 'border-box',\n transformOrigin: 'center center',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n backfaceVisibility: 'hidden',\n padding: '8px',\n })\n // 最小像素尺寸(默认 320x180,可通过 cfg.size 覆盖),容器尺寸随内容自适应\n const [pxW, pxH] = this.config.size\n setStyles(this.container, {\n width: '',\n height: '',\n minWidth: `${pxW}px`,\n minHeight: `${pxH}px`,\n })\n // 根据锚点设置内部包裹的定位与偏移(默认 top:以左上角为参考)\n if (this.config.anchor === 'top') {\n this.innerWrap.style.left = '0'\n this.innerWrap.style.top = '0'\n this.innerWrap.style.bottom = 'auto'\n this.innerWrap.style.transform = 'none'\n }\n else if (this.config.anchor === 'center') {\n this.innerWrap.style.left = '50%'\n this.innerWrap.style.top = '50%'\n this.innerWrap.style.bottom = 'auto'\n this.innerWrap.style.transform = 'translate(-50%, -50%)'\n }\n else { // bottom\n this.innerWrap.style.left = '0'\n this.innerWrap.style.top = 'auto'\n this.innerWrap.style.bottom = '0'\n this.innerWrap.style.transform = 'none'\n }\n this.titleEl.textContent = t.value || ''\n setStyles(this.titleEl, {\n fontSize: `${t.fontSize}px`,\n color: t.color,\n fontWeight: t.fontWeight,\n fontStyle: t.fontStyle,\n textAlign: t.align,\n letterSpacing: `${num(t.spacing)}px`,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginLeft: `${num(t.offset[0])}px`,\n marginTop: `${num(t.offset[1])}px`,\n })\n this.contentEl.style.display = c.visible ? 'block' : 'none'\n this.contentEl.textContent = c.value || ''\n setStyles(this.contentEl, {\n fontSize: `${c.fontSize}px`,\n color: c.color,\n fontWeight: c.fontWeight,\n fontStyle: c.fontStyle,\n textAlign: c.align,\n letterSpacing: `${num(c.spacing)}px`,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflow: 'visible',\n textOverflow: 'clip',\n marginLeft: `${num(c.offset[0])}px`,\n marginTop: `${num(c.offset[1])}px`,\n })\n const hasBgUrl = typeof t.bgUrl === 'string' && t.bgUrl.length > 0\n if (hasBgUrl) {\n if (t.bgNineSlice && t.bgNineSlice.enabled) {\n const s = t.bgNineSlice.slice\n const w = t.bgNineSlice.width\n // 厚度限制,避免边框厚度超过容器尺寸导致异常视觉放大\n const wClamped = [\n Math.min(w[0], pxH * 0.5),\n Math.min(w[1], pxW * 0.5),\n Math.min(w[2], pxH * 0.5),\n Math.min(w[3], pxW * 0.5),\n ] as [number, number, number, number]\n setStyles(this.container, {\n borderStyle: 'solid',\n borderWidth: `${wClamped[0]}px ${wClamped[1]}px ${wClamped[2]}px ${wClamped[3]}px`,\n borderImageSource: `url(${t.bgUrl})`,\n borderImageSlice: `${s[0]} ${s[1]} ${s[2]} ${s[3]}${t.bgNineSlice.fill ? ' fill' : ''}`,\n borderImageRepeat: t.bgNineSlice.repeat,\n backgroundImage: 'none',\n borderRadius: `${num(t.bgNineSlice.radius, 0)}px`,\n })\n } else {\n setStyles(this.container, {\n backgroundImage: `url(${t.bgUrl})`,\n borderImageSource: 'none',\n borderImageSlice: '',\n borderImageRepeat: '',\n borderStyle: 'none',\n borderWidth: '0px',\n })\n }\n } else {\n setStyles(this.container, {\n backgroundImage: 'none',\n borderImageSource: 'none',\n borderImageSlice: '',\n borderImageRepeat: '',\n borderStyle: 'none',\n borderWidth: '0px',\n })\n }\n // 背景填充整个容器尺寸\n setStyles(this.container, {\n backgroundSize: '100% 100%',\n textAlign: t.align,\n pointerEvents: 'auto',\n filter: `hue-rotate(${num(t.hsl[0], 0)}deg) saturate(${num(t.hsl[1], 0)}%) brightness(${num(t.hsl[2], 0)}%)`,\n })\n }\n\n /**\n * 更新配置并立即重新应用到 DOM。\n * @param cfg 新配置\n */\n update(cfg: InfoPanelUpdateConfig = {}): void {\n this.updateConfig(cfg)\n this.applyStyle()\n }\n\n /**\n * 根据看板模式使面板朝向相机。\n * - 'full':使用 `lookAt` 全方位朝向相机。\n * - 'yaw':仅绕 Y 轴旋转,保持水平面朝向相机。\n * - 'none':不处理朝向。\n * @param camera three.js 相机\n */\n updateFacing(camera: PerspectiveCamera): void {\n const mode = this.config.billboard\n if (mode === 'none') return\n const objPos = this._tmpObjPos\n const camPos = this._tmpCamPos\n this._cssObject.getWorldPosition(objPos)\n camera.getWorldPosition(camPos)\n if (mode === 'full') {\n this._cssObject.lookAt(camPos)\n } else if (mode === 'yaw') {\n const dx = camPos.x - objPos.x\n const dz = camPos.z - objPos.z\n const yaw = Math.atan2(dx, dz)\n this._cssObject.rotation.set(0, yaw, 0)\n }\n }\n\n /**\n * 动态缩放:根据相机 FOV、沿相机前向的距离 d、视口尺寸,\n * 计算“每像素对应的世界单位”,并结合用户缩放得到最终缩放。\n * - pixelLock: s = worldPerPixelX * userScale\n * - 非锁定: s = userScale\n * - 最终各轴缩放: [sx, sy, sz] = s * userScale3\n */\n updateDynamicScale(camera: PerspectiveCamera, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight): void {\n if (!camera) return\n const objPos = this._tmpObjPos\n const camPos = this._tmpCamPos\n const camDir = this._tmpCamDir\n this._cssObject.getWorldPosition(objPos)\n camera.getWorldPosition(camPos)\n camera.getWorldDirection(camDir)\n const d = objPos.clone().sub(camPos).dot(camDir)\n const fovRad = MathUtils.degToRad(camera.fov)\n const worldPerPixelY = (2 * d * Math.tan(fovRad / 2)) / viewportHeight\n const worldPerPixelX = worldPerPixelY * camera.aspect\n const userScale = this.config.scale\n const userScale3 = this.config.userScale3 || [1, 1, 1]\n // pixel-lock:保持屏幕像素尺寸恒定;非锁定:使用统一用户系数\n let s = this.config.pixelLock\n ? worldPerPixelX * (userScale > 0 ? userScale : 1)\n : (userScale > 0 ? userScale : 1)\n if (!Number.isFinite(s) || s <= 0) return\n // 简单限幅,避免极端相机参数造成缩放异常\n const MAX_S = 1e3\n const MIN_S = 1e-6\n s = Math.max(Math.min(s, MAX_S), MIN_S)\n const sx = s * (userScale3[0] || 1)\n const sy = s * (userScale3[1] || 1)\n const sz = s * (userScale3[2] || 1)\n this._cssObject.scale.set(sx, sy, sz)\n }\n\n // 移除父级缩放抵消,面板可响应外部实体缩放(含非均匀)\n\n /**\n * 释放面板:从场景移除 CSS3DObject,并清理 DOM。\n */\n dispose(): void {\n if (this._cssObject.parent) this._cssObject.parent.remove(this._cssObject)\n this.container.remove()\n }\n\n /**\n * 获取当前面板在世界坐标中的宽高(单位:世界单位)。\n * 注意:结果受相机参数、面板到相机的距离以及当前 `_cssObject.scale` 影响。\n * @param camera three.js 相机\n * @param viewportWidth 视口宽度(像素)\n * @param viewportHeight 视口高度(像素)\n * @returns `{ width, height }` 世界单位\n */\n getWorldSize(camera: PerspectiveCamera, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight): { width: number; height: number } {\n const objPos = this._tmpObjPos\n const camPos = this._tmpCamPos\n const camDir = this._tmpCamDir\n this._cssObject.getWorldPosition(objPos)\n camera.getWorldPosition(camPos)\n camera.getWorldDirection(camDir)\n const d = objPos.clone().sub(camPos).dot(camDir)\n const fovRad = MathUtils.degToRad(camera.fov)\n const worldPerPixelY = (2 * d * Math.tan(fovRad / 2)) / viewportHeight\n const worldPerPixelX = worldPerPixelY * camera.aspect\n const wpx = this.container.offsetWidth || 0\n const hpx = this.container.offsetHeight || 0\n const s = this._cssObject.scale.x\n return { width: wpx * worldPerPixelX * s, height: hpx * worldPerPixelY * s }\n }\n}\n\n"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 九宫格背景配置
|
|
3
|
+
*/
|
|
4
|
+
export interface NineSliceConfig {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
slice: [number, number, number, number];
|
|
7
|
+
width: [number, number, number, number];
|
|
8
|
+
repeat: 'stretch' | 'repeat' | 'round';
|
|
9
|
+
fill: boolean;
|
|
10
|
+
radius: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 主文本配置
|
|
14
|
+
*/
|
|
15
|
+
export interface TextConfig {
|
|
16
|
+
value: string;
|
|
17
|
+
fontSize: number;
|
|
18
|
+
color: string;
|
|
19
|
+
fontWeight: 'normal' | 'bold';
|
|
20
|
+
fontStyle: 'normal' | 'italic';
|
|
21
|
+
offset: [number, number];
|
|
22
|
+
align: 'left' | 'center' | 'right';
|
|
23
|
+
spacing: number;
|
|
24
|
+
bgUrl: string;
|
|
25
|
+
hsl: [number, number, number];
|
|
26
|
+
bgNineSlice: NineSliceConfig;
|
|
27
|
+
bgSlice: [number, number, number, number];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 内容文本配置
|
|
31
|
+
*/
|
|
32
|
+
export interface ContentConfig {
|
|
33
|
+
visible: boolean;
|
|
34
|
+
value: string;
|
|
35
|
+
fontSize: number;
|
|
36
|
+
color: string;
|
|
37
|
+
fontWeight: 'normal' | 'bold';
|
|
38
|
+
fontStyle: 'normal' | 'italic';
|
|
39
|
+
align: 'left' | 'center' | 'right';
|
|
40
|
+
offset: [number, number];
|
|
41
|
+
spacing: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 面板配置
|
|
45
|
+
*/
|
|
46
|
+
export interface InfoPanelConfig {
|
|
47
|
+
text: TextConfig;
|
|
48
|
+
content: ContentConfig;
|
|
49
|
+
size: [number, number];
|
|
50
|
+
scale: number;
|
|
51
|
+
userScale3: [number, number, number];
|
|
52
|
+
pixelLock: boolean;
|
|
53
|
+
billboard: 'none' | 'yaw' | 'full';
|
|
54
|
+
anchor: 'top' | 'center' | 'bottom';
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 面板可更新配置(Partial),用于 update / updateConfig
|
|
58
|
+
*/
|
|
59
|
+
export interface InfoPanelUpdateConfig {
|
|
60
|
+
text?: Partial<TextConfig>;
|
|
61
|
+
content?: Partial<ContentConfig>;
|
|
62
|
+
size?: [number, number];
|
|
63
|
+
scale?: number | [number, number, number];
|
|
64
|
+
pixelLock?: boolean;
|
|
65
|
+
billboard?: 'none' | 'yaw' | 'full';
|
|
66
|
+
anchor?: 'top' | 'center' | 'bottom';
|
|
67
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/business/Poi/panel/interfaces.ts"],"sourcesContent":["/*\n * @Descripttion: \n * @version: \n * @Author: 周志国\n * @Date: 2025-11-28 11:30:45\n * @LastEditors: 周志国\n * @LastEditTime: 2025-12-01 15:01:27\n * @changeLog: \n * @FilePath: /anov-3d-webgl/packages/anov-3d-ability/src/business/Poi/panel/interfaces.ts\n */\n/**\n * 九宫格背景配置\n */\nexport interface NineSliceConfig {\n enabled: boolean\n slice: [number, number, number, number]\n width: [number, number, number, number]\n repeat: 'stretch' | 'repeat' | 'round'\n fill: boolean\n radius: number\n}\n\n/**\n * 主文本配置\n */\nexport interface TextConfig {\n value: string\n fontSize: number\n color: string\n fontWeight: 'normal' | 'bold'\n fontStyle: 'normal' | 'italic'\n offset: [number, number]\n align: 'left' | 'center' | 'right'\n spacing: number\n bgUrl: string\n hsl: [number, number, number]\n bgNineSlice: NineSliceConfig\n bgSlice: [number, number, number, number]\n}\n\n/**\n * 内容文本配置\n */\nexport interface ContentConfig {\n visible: boolean\n value: string\n fontSize: number\n color: string\n fontWeight: 'normal' | 'bold'\n fontStyle: 'normal' | 'italic'\n align: 'left' | 'center' | 'right'\n offset: [number, number]\n spacing: number\n}\n\n/**\n * 面板配置\n */\nexport interface InfoPanelConfig {\n text: TextConfig\n content: ContentConfig\n size: [number, number]\n scale: number\n userScale3: [number, number, number]\n pixelLock: boolean\n billboard: 'none' | 'yaw' | 'full'\n anchor: 'top' | 'center' | 'bottom'\n}\n\n/**\n * 面板可更新配置(Partial),用于 update / updateConfig\n */\nexport interface InfoPanelUpdateConfig {\n text?: Partial<TextConfig>\n content?: Partial<ContentConfig>\n size?: [number, number]\n scale?: number | [number, number, number]\n pixelLock?: boolean\n billboard?: 'none' | 'yaw' | 'full'\n anchor?: 'top' | 'center' | 'bottom'\n}"],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将任意对齐值规范化为 'left' | 'center' | 'right'。
|
|
3
|
+
* @param v 任意字符串
|
|
4
|
+
* @returns 'left' | 'center' | 'right'
|
|
5
|
+
*/
|
|
6
|
+
declare function clampAlign(v: any): "center" | "left" | "right";
|
|
7
|
+
/**
|
|
8
|
+
* 将任意字重值规范化为 'normal' 或 'bold'。
|
|
9
|
+
* @param v 任意字符串
|
|
10
|
+
* @returns 'normal' | 'bold'
|
|
11
|
+
*/
|
|
12
|
+
declare function parseWeight(v: any): "normal" | "bold";
|
|
13
|
+
/**
|
|
14
|
+
* 将任意字体风格规范化为 'normal' 或 'italic'。
|
|
15
|
+
* @param v 任意字符串
|
|
16
|
+
* @returns 'normal' | 'italic'
|
|
17
|
+
*/
|
|
18
|
+
declare function parseStyle(v: any): "normal" | "italic";
|
|
19
|
+
/**
|
|
20
|
+
* 将输入转为数字;若无效则回退到默认值。
|
|
21
|
+
* @param n 任意值
|
|
22
|
+
* @param d 默认值
|
|
23
|
+
* @returns 有效数字
|
|
24
|
+
*/
|
|
25
|
+
declare function num(n: any, d?: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* 返回有效的颜色字符串;若无效则回退到默认值。
|
|
28
|
+
* @param c 任意值
|
|
29
|
+
* @param d 默认颜色,默认为 `#ffffff`
|
|
30
|
+
* @returns 颜色字符串
|
|
31
|
+
*/
|
|
32
|
+
declare function color(c: any, d?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* 清理 URL 字符串,去除反引号并修剪空白。
|
|
35
|
+
* @param u 任意值
|
|
36
|
+
* @returns 清理后的 URL 字符串(无效时返回空串)
|
|
37
|
+
*/
|
|
38
|
+
declare function sanitizeUrl(u: any): string;
|
|
39
|
+
/**
|
|
40
|
+
* 解析长度至少为 2 的数组,缺省回退到默认值。
|
|
41
|
+
* @param a 任意数组
|
|
42
|
+
* @param d 默认值 `[x, y]`
|
|
43
|
+
* @returns `[x, y]`
|
|
44
|
+
*/
|
|
45
|
+
declare function arr2(a: any, d?: number[]): number[];
|
|
46
|
+
/**
|
|
47
|
+
* 解析长度至少为 4 的数组,缺省回退到默认值。
|
|
48
|
+
* @param a 任意数组
|
|
49
|
+
* @param d 默认值 `[t, r, b, l]`
|
|
50
|
+
* @returns `[t, r, b, l]`
|
|
51
|
+
*/
|
|
52
|
+
declare function arr4(a: any, d?: number[]): number[];
|
|
53
|
+
/**
|
|
54
|
+
* 解析长度至少为 3 的数组,缺省回退到默认值。
|
|
55
|
+
* @param a 任意数组
|
|
56
|
+
* @param d 默认值 `[h, s, l]`
|
|
57
|
+
* @returns `[h, s, l]`
|
|
58
|
+
*/
|
|
59
|
+
declare function arr3(a: any, d?: number[]): number[];
|
|
60
|
+
/**
|
|
61
|
+
* 规范化九宫格边框的平铺模式。
|
|
62
|
+
* @param v 'repeat' | 'round' | 其他
|
|
63
|
+
* @returns 'repeat' | 'round' | 'stretch'
|
|
64
|
+
*/
|
|
65
|
+
declare function rep(v: any): any;
|
|
66
|
+
/**
|
|
67
|
+
* 批量应用内联样式到元素。
|
|
68
|
+
* @param el 目标元素
|
|
69
|
+
* @param styles 样式键值对
|
|
70
|
+
*/
|
|
71
|
+
declare function setStyles(el: HTMLElement, styles: Record<string, string>): void;
|
|
72
|
+
export { clampAlign, parseWeight, parseStyle, num, color, sanitizeUrl, arr2, arr3, arr4, rep, setStyles };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Descripttion:
|
|
3
|
+
* @version:
|
|
4
|
+
* @Author: 周志国
|
|
5
|
+
* @Date: 2025-11-28 10:40:08
|
|
6
|
+
* @LastEditors: 周志国
|
|
7
|
+
* @LastEditTime: 2025-12-01 15:44:23
|
|
8
|
+
* @changeLog:
|
|
9
|
+
* @FilePath: /anov-3d-webgl/packages/anov-3d-ability/src/business/Poi/panel/utils.ts
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 将任意对齐值规范化为 'left' | 'center' | 'right'。
|
|
13
|
+
* @param v 任意字符串
|
|
14
|
+
* @returns 'left' | 'center' | 'right'
|
|
15
|
+
*/
|
|
16
|
+
function clampAlign(v) {
|
|
17
|
+
if (v === 'center') return 'center';
|
|
18
|
+
if (v === 'right') return 'right';
|
|
19
|
+
return 'left';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 将任意字重值规范化为 'normal' 或 'bold'。
|
|
24
|
+
* @param v 任意字符串
|
|
25
|
+
* @returns 'normal' | 'bold'
|
|
26
|
+
*/
|
|
27
|
+
function parseWeight(v) {
|
|
28
|
+
if (v === 'bold') return 'bold';
|
|
29
|
+
return 'normal';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 将任意字体风格规范化为 'normal' 或 'italic'。
|
|
34
|
+
* @param v 任意字符串
|
|
35
|
+
* @returns 'normal' | 'italic'
|
|
36
|
+
*/
|
|
37
|
+
function parseStyle(v) {
|
|
38
|
+
if (v === 'italic') return 'italic';
|
|
39
|
+
return 'normal';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 将输入转为数字;若无效则回退到默认值。
|
|
44
|
+
* @param n 任意值
|
|
45
|
+
* @param d 默认值
|
|
46
|
+
* @returns 有效数字
|
|
47
|
+
*/
|
|
48
|
+
function num(n, d = 0) {
|
|
49
|
+
if (typeof n === 'number' && !Number.isNaN(n)) return n;
|
|
50
|
+
return d;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* 返回有效的颜色字符串;若无效则回退到默认值。
|
|
55
|
+
* @param c 任意值
|
|
56
|
+
* @param d 默认颜色,默认为 `#ffffff`
|
|
57
|
+
* @returns 颜色字符串
|
|
58
|
+
*/
|
|
59
|
+
function color(c, d = '#ffffff') {
|
|
60
|
+
if (typeof c === 'string' && c.length) return c;
|
|
61
|
+
return d;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* 清理 URL 字符串,去除反引号并修剪空白。
|
|
66
|
+
* @param u 任意值
|
|
67
|
+
* @returns 清理后的 URL 字符串(无效时返回空串)
|
|
68
|
+
*/
|
|
69
|
+
function sanitizeUrl(u) {
|
|
70
|
+
if (typeof u !== 'string') return '';
|
|
71
|
+
// 去掉意外的反引号并修剪空白
|
|
72
|
+
return u.replace(/`/g, '').trim();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* 解析长度至少为 2 的数组,缺省回退到默认值。
|
|
77
|
+
* @param a 任意数组
|
|
78
|
+
* @param d 默认值 `[x, y]`
|
|
79
|
+
* @returns `[x, y]`
|
|
80
|
+
*/
|
|
81
|
+
function arr2(a, d = [0, 0]) {
|
|
82
|
+
if (Array.isArray(a) && a.length >= 2) return [num(a[0], d[0]), num(a[1], d[1])];
|
|
83
|
+
return d;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 解析长度至少为 4 的数组,缺省回退到默认值。
|
|
88
|
+
* @param a 任意数组
|
|
89
|
+
* @param d 默认值 `[t, r, b, l]`
|
|
90
|
+
* @returns `[t, r, b, l]`
|
|
91
|
+
*/
|
|
92
|
+
function arr4(a, d = [0, 0, 0, 0]) {
|
|
93
|
+
if (Array.isArray(a) && a.length >= 4) return [num(a[0], d[0]), num(a[1], d[1]), num(a[2], d[2]), num(a[3], d[3])];
|
|
94
|
+
return d;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 解析长度至少为 3 的数组,缺省回退到默认值。
|
|
98
|
+
* @param a 任意数组
|
|
99
|
+
* @param d 默认值 `[h, s, l]`
|
|
100
|
+
* @returns `[h, s, l]`
|
|
101
|
+
*/
|
|
102
|
+
function arr3(a, d = [0, 0, 0]) {
|
|
103
|
+
if (Array.isArray(a) && a.length >= 3) return [num(a[0], d[0]), num(a[1], d[1]), num(a[2], d[2])];
|
|
104
|
+
return d;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 规范化九宫格边框的平铺模式。
|
|
109
|
+
* @param v 'repeat' | 'round' | 其他
|
|
110
|
+
* @returns 'repeat' | 'round' | 'stretch'
|
|
111
|
+
*/
|
|
112
|
+
function rep(v) {
|
|
113
|
+
if (v === 'repeat' || v === 'round') return v;
|
|
114
|
+
return 'stretch';
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 批量应用内联样式到元素。
|
|
119
|
+
* @param el 目标元素
|
|
120
|
+
* @param styles 样式键值对
|
|
121
|
+
*/
|
|
122
|
+
function setStyles(el, styles) {
|
|
123
|
+
Object.assign(el.style, styles);
|
|
124
|
+
}
|
|
125
|
+
export { clampAlign, parseWeight, parseStyle, num, color, sanitizeUrl, arr2, arr3, arr4, rep, setStyles };
|
|
126
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["clampAlign","v","parseWeight","parseStyle","num","n","d","Number","isNaN","color","c","length","sanitizeUrl","u","replace","trim","arr2","a","Array","isArray","arr4","arr3","rep","setStyles","el","styles","Object","assign","style"],"sources":["../../../../src/business/Poi/panel/utils.ts"],"sourcesContent":["/*\n * @Descripttion: \n * @version: \n * @Author: 周志国\n * @Date: 2025-11-28 10:40:08\n * @LastEditors: 周志国\n * @LastEditTime: 2025-12-01 15:44:23\n * @changeLog: \n * @FilePath: /anov-3d-webgl/packages/anov-3d-ability/src/business/Poi/panel/utils.ts\n */\n/**\n * 将任意对齐值规范化为 'left' | 'center' | 'right'。\n * @param v 任意字符串\n * @returns 'left' | 'center' | 'right'\n */\nfunction clampAlign(v) {\n if (v === 'center') return 'center'\n if (v === 'right') return 'right'\n return 'left'\n}\n\n/**\n * 将任意字重值规范化为 'normal' 或 'bold'。\n * @param v 任意字符串\n * @returns 'normal' | 'bold'\n */\nfunction parseWeight(v) {\n if (v === 'bold') return 'bold'\n return 'normal'\n}\n\n/**\n * 将任意字体风格规范化为 'normal' 或 'italic'。\n * @param v 任意字符串\n * @returns 'normal' | 'italic'\n */\nfunction parseStyle(v) {\n if (v === 'italic') return 'italic'\n return 'normal'\n}\n\n/**\n * 将输入转为数字;若无效则回退到默认值。\n * @param n 任意值\n * @param d 默认值\n * @returns 有效数字\n */\nfunction num(n, d = 0) {\n if (typeof n === 'number' && !Number.isNaN(n)) return n\n return d\n}\n\n/**\n * 返回有效的颜色字符串;若无效则回退到默认值。\n * @param c 任意值\n * @param d 默认颜色,默认为 `#ffffff`\n * @returns 颜色字符串\n */\nfunction color(c, d = '#ffffff') {\n if (typeof c === 'string' && c.length) return c\n return d\n}\n\n/**\n * 清理 URL 字符串,去除反引号并修剪空白。\n * @param u 任意值\n * @returns 清理后的 URL 字符串(无效时返回空串)\n */\nfunction sanitizeUrl(u: any): string {\n if (typeof u !== 'string') return ''\n // 去掉意外的反引号并修剪空白\n return u.replace(/`/g, '').trim()\n}\n\n/**\n * 解析长度至少为 2 的数组,缺省回退到默认值。\n * @param a 任意数组\n * @param d 默认值 `[x, y]`\n * @returns `[x, y]`\n */\nfunction arr2(a, d = [0, 0]) {\n if (Array.isArray(a) && a.length >= 2) return [num(a[0], d[0]), num(a[1], d[1])]\n return d\n}\n\n/**\n * 解析长度至少为 4 的数组,缺省回退到默认值。\n * @param a 任意数组\n * @param d 默认值 `[t, r, b, l]`\n * @returns `[t, r, b, l]`\n */\nfunction arr4(a, d = [0, 0, 0, 0]) {\n if (Array.isArray(a) && a.length >= 4) return [num(a[0], d[0]), num(a[1], d[1]), num(a[2], d[2]), num(a[3], d[3])]\n return d\n}\n/**\n * 解析长度至少为 3 的数组,缺省回退到默认值。\n * @param a 任意数组\n * @param d 默认值 `[h, s, l]`\n * @returns `[h, s, l]`\n */\nfunction arr3(a, d = [0, 0, 0]) {\n if (Array.isArray(a) && a.length >= 3) return [num(a[0], d[0]), num(a[1], d[1]), num(a[2], d[2])]\n return d\n}\n\n/**\n * 规范化九宫格边框的平铺模式。\n * @param v 'repeat' | 'round' | 其他\n * @returns 'repeat' | 'round' | 'stretch'\n */\nfunction rep(v) {\n if (v === 'repeat' || v === 'round') return v\n return 'stretch'\n}\n\n/**\n * 批量应用内联样式到元素。\n * @param el 目标元素\n * @param styles 样式键值对\n */\nfunction setStyles(el: HTMLElement, styles: Record<string, string>) {\n Object.assign(el.style, styles)\n}\nexport { clampAlign, parseWeight, parseStyle, num, color, sanitizeUrl, arr2, arr3, arr4, rep, setStyles }\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,UAAUA,CAACC,CAAC,EAAE;EACrB,IAAIA,CAAC,KAAK,QAAQ,EAAE,OAAO,QAAQ;EACnC,IAAIA,CAAC,KAAK,OAAO,EAAE,OAAO,OAAO;EACjC,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAWA,CAACD,CAAC,EAAE;EACtB,IAAIA,CAAC,KAAK,MAAM,EAAE,OAAO,MAAM;EAC/B,OAAO,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASE,UAAUA,CAACF,CAAC,EAAE;EACrB,IAAIA,CAAC,KAAK,QAAQ,EAAE,OAAO,QAAQ;EACnC,OAAO,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,GAAGA,CAACC,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAE;EACrB,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAI,CAACE,MAAM,CAACC,KAAK,CAACH,CAAC,CAAC,EAAE,OAAOA,CAAC;EACvD,OAAOC,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,KAAKA,CAACC,CAAC,EAAEJ,CAAC,GAAG,SAAS,EAAE;EAC/B,IAAI,OAAOI,CAAC,KAAK,QAAQ,IAAIA,CAAC,CAACC,MAAM,EAAE,OAAOD,CAAC;EAC/C,OAAOJ,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASM,WAAWA,CAACC,CAAM,EAAU;EACnC,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE,OAAO,EAAE;EACpC;EACA,OAAOA,CAAC,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAACC,IAAI,CAAC,CAAC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,IAAIA,CAACC,CAAC,EAAEX,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;EAC3B,IAAIY,KAAK,CAACC,OAAO,CAACF,CAAC,CAAC,IAAIA,CAAC,CAACN,MAAM,IAAI,CAAC,EAAE,OAAO,CAACP,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,OAAOA,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASc,IAAIA,CAACH,CAAC,EAAEX,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;EACjC,IAAIY,KAAK,CAACC,OAAO,CAACF,CAAC,CAAC,IAAIA,CAAC,CAACN,MAAM,IAAI,CAAC,EAAE,OAAO,CAACP,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClH,OAAOA,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASe,IAAIA,CAACJ,CAAC,EAAEX,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;EAC9B,IAAIY,KAAK,CAACC,OAAO,CAACF,CAAC,CAAC,IAAIA,CAAC,CAACN,MAAM,IAAI,CAAC,EAAE,OAAO,CAACP,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEF,GAAG,CAACa,CAAC,CAAC,CAAC,CAAC,EAAEX,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACjG,OAAOA,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASgB,GAAGA,CAACrB,CAAC,EAAE;EACd,IAAIA,CAAC,KAAK,QAAQ,IAAIA,CAAC,KAAK,OAAO,EAAE,OAAOA,CAAC;EAC7C,OAAO,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASsB,SAASA,CAACC,EAAe,EAAEC,MAA8B,EAAE;EAClEC,MAAM,CAACC,MAAM,CAACH,EAAE,CAACI,KAAK,EAAEH,MAAM,CAAC;AACjC;AACA,SAASzB,UAAU,EAAEE,WAAW,EAAEC,UAAU,EAAEC,GAAG,EAAEK,KAAK,EAAEG,WAAW,EAAEI,IAAI,EAAEK,IAAI,EAAED,IAAI,EAAEE,GAAG,EAAEC,SAAS"}
|
|
@@ -1,117 +1,81 @@
|
|
|
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 _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
1
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
2
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
5
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
6
|
-
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); } }
|
|
7
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
8
|
-
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); }
|
|
9
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
10
|
-
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); }; }
|
|
11
|
-
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); }
|
|
12
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
13
|
-
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; } }
|
|
14
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
15
3
|
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; }
|
|
16
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" ==
|
|
17
|
-
function _toPrimitive(t, r) { if ("object" !=
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
5
|
+
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); }
|
|
18
6
|
import { Clock, Color, Mesh, NormalBlending, PlaneGeometry, ShaderMaterial, use } from '@anov/3d-core';
|
|
19
7
|
import CircleShader from "../shader/doubleCircle";
|
|
20
8
|
import ParticleMesh from '.';
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
function DoubleCircleMesh() {
|
|
25
|
-
var _this;
|
|
26
|
-
var option = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
27
|
-
_classCallCheck(this, DoubleCircleMesh);
|
|
28
|
-
_this = _super.call(this);
|
|
29
|
-
_defineProperty(_assertThisInitialized(_this), "_material", void 0);
|
|
30
|
-
_defineProperty(_assertThisInitialized(_this), "_radius", void 0);
|
|
31
|
-
_defineProperty(_assertThisInitialized(_this), "_color", void 0);
|
|
32
|
-
var _option$radius = option.radius,
|
|
33
|
-
radius = _option$radius === void 0 ? 0.5 : _option$radius,
|
|
34
|
-
_option$color = option.color,
|
|
35
|
-
color = _option$color === void 0 ? '0xFFFFFF' : _option$color,
|
|
36
|
-
_option$visible = option.visible,
|
|
37
|
-
visible = _option$visible === void 0 ? true : _option$visible;
|
|
38
|
-
_this._radius = radius;
|
|
39
|
-
_this._color = color;
|
|
40
|
-
_this.visible = visible;
|
|
41
|
-
_this.init();
|
|
42
|
-
return _this;
|
|
9
|
+
class DoubleCircleMesh extends ParticleMesh {
|
|
10
|
+
get radius() {
|
|
11
|
+
return this._radius;
|
|
43
12
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.
|
|
52
|
-
// 更新Mesh几何体大小
|
|
53
|
-
if (this._mesh) {
|
|
54
|
-
// 替换现有几何体
|
|
55
|
-
this._mesh.geometry.dispose(); // 释放旧几何体
|
|
56
|
-
this._mesh.geometry = new PlaneGeometry(value * 4, value * 4);
|
|
57
|
-
}
|
|
13
|
+
set radius(value) {
|
|
14
|
+
if (this._radius === value) return;
|
|
15
|
+
this._radius = value;
|
|
16
|
+
// 更新Mesh几何体大小
|
|
17
|
+
if (this._mesh) {
|
|
18
|
+
// 替换现有几何体
|
|
19
|
+
this._mesh.geometry.dispose(); // 释放旧几何体
|
|
20
|
+
this._mesh.geometry = new PlaneGeometry(value * 4, value * 4);
|
|
58
21
|
}
|
|
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
|
-
|
|
115
|
-
}
|
|
22
|
+
}
|
|
23
|
+
get color() {
|
|
24
|
+
return this._color;
|
|
25
|
+
}
|
|
26
|
+
set color(newValue) {
|
|
27
|
+
if (this._color === newValue) return;
|
|
28
|
+
this._color = newValue;
|
|
29
|
+
this._material.uniforms.color.value = new Color(this._color);
|
|
30
|
+
}
|
|
31
|
+
constructor(option = {}) {
|
|
32
|
+
super();
|
|
33
|
+
_defineProperty(this, "_material", void 0);
|
|
34
|
+
_defineProperty(this, "_radius", void 0);
|
|
35
|
+
_defineProperty(this, "_color", void 0);
|
|
36
|
+
const {
|
|
37
|
+
radius = 0.5,
|
|
38
|
+
color = '0xFFFFFF',
|
|
39
|
+
visible = true
|
|
40
|
+
} = option;
|
|
41
|
+
this._radius = radius;
|
|
42
|
+
this._color = color;
|
|
43
|
+
this.visible = visible;
|
|
44
|
+
this.init();
|
|
45
|
+
}
|
|
46
|
+
init() {
|
|
47
|
+
var _this = this;
|
|
48
|
+
return _asyncToGenerator(function* () {
|
|
49
|
+
const {
|
|
50
|
+
uniforms: defaultUniforms,
|
|
51
|
+
vertexShader,
|
|
52
|
+
fragmentShader
|
|
53
|
+
} = CircleShader;
|
|
54
|
+
const uniforms = structuredClone(defaultUniforms);
|
|
55
|
+
uniforms.color.value = new Color(_this.color);
|
|
56
|
+
_this._material = new ShaderMaterial({
|
|
57
|
+
uniforms,
|
|
58
|
+
vertexShader,
|
|
59
|
+
fragmentShader,
|
|
60
|
+
side: 2,
|
|
61
|
+
transparent: true,
|
|
62
|
+
depthWrite: false,
|
|
63
|
+
depthTest: true,
|
|
64
|
+
blending: NormalBlending,
|
|
65
|
+
// 明确混合模式
|
|
66
|
+
polygonOffset: false,
|
|
67
|
+
// 解决深度冲突
|
|
68
|
+
polygonOffsetFactor: -1
|
|
69
|
+
});
|
|
70
|
+
_this._mesh = new Mesh(new PlaneGeometry(_this.radius * 4, _this.radius * 4), _this._material);
|
|
71
|
+
_this._mesh.rotation.x = Math.PI / 2;
|
|
72
|
+
_this.add(_this._mesh);
|
|
73
|
+
const clock = new Clock();
|
|
74
|
+
use.useframe(() => {
|
|
75
|
+
_this._material.uniforms.iTime.value = clock.getElapsedTime() * 0.5;
|
|
76
|
+
});
|
|
77
|
+
})();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
116
80
|
export default DoubleCircleMesh;
|
|
117
81
|
//# sourceMappingURL=DoubleCircle.js.map
|