@anov/3d-ability 0.0.139 → 0.0.141

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/business/Animation/motion/index.js +35 -56
  2. package/dist/business/Animation/motion/index.js.map +1 -1
  3. package/dist/business/Animation/type.js +2 -2
  4. package/dist/business/Area/Fence/FenceBase.js +146 -187
  5. package/dist/business/Area/Fence/FenceBase.js.map +1 -1
  6. package/dist/business/Area/Fence/fence_base_01.js +120 -112
  7. package/dist/business/Area/Fence/fence_base_01.js.map +1 -1
  8. package/dist/business/Area/Fence/fence_feeting_01.js +218 -130
  9. package/dist/business/Area/Fence/fence_feeting_01.js.map +1 -1
  10. package/dist/business/Area/Fence/fence_roll_01.js +140 -130
  11. package/dist/business/Area/Fence/fence_roll_01.js.map +1 -1
  12. package/dist/business/Area/FillArea/FillAreaBase.js +87 -126
  13. package/dist/business/Area/FillArea/FillAreaBase.js.map +1 -1
  14. package/dist/business/Area/FillArea/fillArea_face_01.js +72 -98
  15. package/dist/business/Area/FillArea/fillArea_face_01.js.map +1 -1
  16. package/dist/business/Area/FillArea/fillArea_line_01.js +66 -94
  17. package/dist/business/Area/FillArea/fillArea_line_01.js.map +1 -1
  18. package/dist/business/Area/index.js +267 -483
  19. package/dist/business/Area/index.js.map +1 -1
  20. package/dist/business/Area/tool.js +14 -26
  21. package/dist/business/Area/tool.js.map +1 -1
  22. package/dist/business/Base/ObjectLayer.js +21 -46
  23. package/dist/business/Base/ObjectLayer.js.map +1 -1
  24. package/dist/business/Batch/index.js +189 -234
  25. package/dist/business/Batch/index.js.map +1 -1
  26. package/dist/business/Box/index.js +52 -81
  27. package/dist/business/Box/index.js.map +1 -1
  28. package/dist/business/Cylinder/index.js +51 -79
  29. package/dist/business/Cylinder/index.js.map +1 -1
  30. package/dist/business/Flyline/bubble/CircleBubble.js +1 -9
  31. package/dist/business/Flyline/bubble/CircleBubble.js.map +1 -1
  32. package/dist/business/Flyline/bubble/index.js +7 -21
  33. package/dist/business/Flyline/bubble/index.js.map +1 -1
  34. package/dist/business/Flyline/index.js +96 -162
  35. package/dist/business/Flyline/index.js.map +1 -1
  36. package/dist/business/Flyline/line/ArcLine.js +208 -291
  37. package/dist/business/Flyline/line/ArcLine.js.map +1 -1
  38. package/dist/business/Flyline/line/index.js +8 -22
  39. package/dist/business/Flyline/line/index.js.map +1 -1
  40. package/dist/business/HeatMap/HeatMap.js +380 -467
  41. package/dist/business/HeatMap/HeatMap.js.map +1 -1
  42. package/dist/business/HeatMap/core.js +405 -525
  43. package/dist/business/HeatMap/core.js.map +1 -1
  44. package/dist/business/HeatMap/shader.js +69 -3
  45. package/dist/business/HeatMap/shader.js.map +1 -1
  46. package/dist/business/InfoPanel/index.js +201 -242
  47. package/dist/business/InfoPanel/index.js.map +1 -1
  48. package/dist/business/Line/index.js +55 -88
  49. package/dist/business/Line/index.js.map +1 -1
  50. package/dist/business/Mark/KeyframeAnimation.js +145 -176
  51. package/dist/business/Mark/KeyframeAnimation.js.map +1 -1
  52. package/dist/business/Mark/index.js +196 -294
  53. package/dist/business/Mark/index.js.map +1 -1
  54. package/dist/business/Mark/shader/tanhao.js +36 -3
  55. package/dist/business/Mark/shader/tanhao.js.map +1 -1
  56. package/dist/business/Mark/type.js +1 -1
  57. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js +377 -551
  58. package/dist/business/MaterialSwitch/MaterialSwitchSystem.js.map +1 -1
  59. package/dist/business/MaterialSwitch/inject.js +92 -58
  60. package/dist/business/MaterialSwitch/inject.js.map +1 -1
  61. package/dist/business/MaterialSwitch/shader/finalFade.js +74 -2
  62. package/dist/business/MaterialSwitch/shader/finalFade.js.map +1 -1
  63. package/dist/business/MaterialSwitch/shader/ground.js +95 -16
  64. package/dist/business/MaterialSwitch/shader/ground.js.map +1 -1
  65. package/dist/business/MaterialSwitch/shader/groundBase64.js +9 -3
  66. package/dist/business/MaterialSwitch/shader/groundBase64.js.map +1 -1
  67. package/dist/business/MaterialSwitch/shader/realFade.js +48 -9
  68. package/dist/business/MaterialSwitch/shader/realFade.js.map +1 -1
  69. package/dist/business/Plane/index.js +51 -78
  70. package/dist/business/Plane/index.js.map +1 -1
  71. package/dist/business/Poi/index.d.ts +5 -0
  72. package/dist/business/Poi/index.js +256 -295
  73. package/dist/business/Poi/index.js.map +1 -1
  74. package/dist/business/Poi/link/Cylinder.js +56 -89
  75. package/dist/business/Poi/link/Cylinder.js.map +1 -1
  76. package/dist/business/Poi/link/Pyramid.js +104 -165
  77. package/dist/business/Poi/link/Pyramid.js.map +1 -1
  78. package/dist/business/Poi/link/index.d.ts +1 -1
  79. package/dist/business/Poi/link/index.js +54 -114
  80. package/dist/business/Poi/link/index.js.map +1 -1
  81. package/dist/business/Poi/panel/index.d.ts +124 -0
  82. package/dist/business/Poi/panel/index.js +474 -0
  83. package/dist/business/Poi/panel/index.js.map +1 -0
  84. package/dist/business/Poi/panel/interfaces.d.ts +67 -0
  85. package/dist/business/Poi/panel/interfaces.js +2 -0
  86. package/dist/business/Poi/panel/interfaces.js.map +1 -0
  87. package/dist/business/Poi/panel/utils.d.ts +72 -0
  88. package/dist/business/Poi/panel/utils.js +126 -0
  89. package/dist/business/Poi/panel/utils.js.map +1 -0
  90. package/dist/business/Poi/particle/DoubleCircle.js +71 -107
  91. package/dist/business/Poi/particle/DoubleCircle.js.map +1 -1
  92. package/dist/business/Poi/particle/DynamicCircle.js +75 -111
  93. package/dist/business/Poi/particle/DynamicCircle.js.map +1 -1
  94. package/dist/business/Poi/particle/SingleCircle.js +62 -98
  95. package/dist/business/Poi/particle/SingleCircle.js.map +1 -1
  96. package/dist/business/Poi/particle/index.js +49 -117
  97. package/dist/business/Poi/particle/index.js.map +1 -1
  98. package/dist/business/Poi/shader/circle.js +31 -3
  99. package/dist/business/Poi/shader/circle.js.map +1 -1
  100. package/dist/business/Poi/shader/cylinder.js +37 -3
  101. package/dist/business/Poi/shader/cylinder.js.map +1 -1
  102. package/dist/business/Poi/shader/doubleCircle.js +55 -3
  103. package/dist/business/Poi/shader/doubleCircle.js.map +1 -1
  104. package/dist/business/Poi/shader/dynamicCircle.js +67 -3
  105. package/dist/business/Poi/shader/dynamicCircle.js.map +1 -1
  106. package/dist/business/Poi/title/Border.js +7 -27
  107. package/dist/business/Poi/title/Border.js.map +1 -1
  108. package/dist/business/Poi/title/Ellipse.js +7 -27
  109. package/dist/business/Poi/title/Ellipse.js.map +1 -1
  110. package/dist/business/Poi/title/index.js +208 -292
  111. package/dist/business/Poi/title/index.js.map +1 -1
  112. package/dist/business/Poi/tools.js +22 -19
  113. package/dist/business/Poi/tools.js.map +1 -1
  114. package/dist/business/Poi/types.d.ts +3 -0
  115. package/dist/business/Poi/types.js.map +1 -1
  116. package/dist/business/Sphere/index.js +47 -72
  117. package/dist/business/Sphere/index.js.map +1 -1
  118. package/dist/business/Spline/index.js +190 -245
  119. package/dist/business/Spline/index.js.map +1 -1
  120. package/dist/business/SplitBuilding/index.js +327 -536
  121. package/dist/business/SplitBuilding/index.js.map +1 -1
  122. package/dist/business/SplitBuilding/type.js +2 -2
  123. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js +218 -275
  124. package/dist/business/TrafficComponents/RealismTraffic/RealismTraffic.js.map +1 -1
  125. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js +132 -177
  126. package/dist/business/TrafficComponents/StreamerTraffic/StreamerTraffic.js.map +1 -1
  127. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js +51 -1
  128. package/dist/business/TrafficComponents/StreamerTraffic/fragmentShader.js.map +1 -1
  129. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js +6 -1
  130. package/dist/business/TrafficComponents/StreamerTraffic/vertexShader.js.map +1 -1
  131. package/dist/business/TrafficComponents/base.js +32 -55
  132. package/dist/business/TrafficComponents/base.js.map +1 -1
  133. package/dist/business/TrafficComponents/utils.js +25 -24
  134. package/dist/business/TrafficComponents/utils.js.map +1 -1
  135. package/dist/business/Utils/Curve.js +40 -56
  136. package/dist/business/Utils/Curve.js.map +1 -1
  137. package/dist/business/Utils/constant.js +1 -1
  138. package/dist/business/Utils/constant.js.map +1 -1
  139. package/dist/business/Utils/defineProps.js +13 -14
  140. package/dist/business/Utils/defineProps.js.map +1 -1
  141. package/dist/business/Utils/round-curve.js +127 -153
  142. package/dist/business/Utils/round-curve.js.map +1 -1
  143. package/dist/business/VideoPanel/index.js +258 -319
  144. package/dist/business/VideoPanel/index.js.map +1 -1
  145. package/dist/business/Water/index.js +78 -108
  146. package/dist/business/Water/index.js.map +1 -1
  147. package/dist/business/Water/types.js +1 -1
  148. package/dist/business/Water/types.js.map +1 -1
  149. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +383 -449
  150. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
  151. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js +107 -142
  152. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js.map +1 -1
  153. package/dist/core/Controls/FirstViewControl/index.js +84 -96
  154. package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
  155. package/dist/core/Controls/ThirdViewControl/action/input.js +77 -98
  156. package/dist/core/Controls/ThirdViewControl/action/input.js.map +1 -1
  157. package/dist/core/Controls/ThirdViewControl/config/constants.js +1 -1
  158. package/dist/core/Controls/ThirdViewControl/config/constants.js.map +1 -1
  159. package/dist/core/Controls/ThirdViewControl/index.js +19 -28
  160. package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
  161. package/dist/core/Controls/ThirdViewControl/player/animation.js +126 -155
  162. package/dist/core/Controls/ThirdViewControl/player/animation.js.map +1 -1
  163. package/dist/core/Controls/ThirdViewControl/player/camera.js +47 -63
  164. package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
  165. package/dist/core/Controls/ThirdViewControl/player/control.js +39 -49
  166. package/dist/core/Controls/ThirdViewControl/player/control.js.map +1 -1
  167. package/dist/core/Controls/ThirdViewControl/player.js +66 -91
  168. package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
  169. package/dist/core/Controls/base.js +14 -30
  170. package/dist/core/Controls/base.js.map +1 -1
  171. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js +92 -131
  172. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js.map +1 -1
  173. package/dist/core/Debug/PerformanceInfo/Performance.js +22 -47
  174. package/dist/core/Debug/PerformanceInfo/Performance.js.map +1 -1
  175. package/dist/core/Light/PointLight/PointLightExt.js +4 -21
  176. package/dist/core/Light/PointLight/PointLightExt.js.map +1 -1
  177. package/dist/core/Material/FinirMaterial/FinirMaterial.js +37 -57
  178. package/dist/core/Material/FinirMaterial/FinirMaterial.js.map +1 -1
  179. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js +116 -153
  180. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js.map +1 -1
  181. package/dist/core/Material/PristineGridMaterial/shader/fragment.js +95 -1
  182. package/dist/core/Material/PristineGridMaterial/shader/fragment.js.map +1 -1
  183. package/dist/core/Material/PristineGridMaterial/shader/vertex.js +26 -1
  184. package/dist/core/Material/PristineGridMaterial/shader/vertex.js.map +1 -1
  185. package/dist/core/Material/SurfaceMaterial/index.js +76 -172
  186. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  187. package/dist/core/Material/decorators.js +6 -11
  188. package/dist/core/Material/decorators.js.map +1 -1
  189. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +16 -12
  190. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
  191. package/dist/core/PostEffects/addBrightnessContrastPass.js +17 -13
  192. package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
  193. package/dist/core/PostEffects/bloomPass.js +17 -10
  194. package/dist/core/PostEffects/bloomPass.js.map +1 -1
  195. package/dist/core/PostEffects/bloomSelect.js +60 -43
  196. package/dist/core/PostEffects/bloomSelect.js.map +1 -1
  197. package/dist/core/PostEffects/colorifyPass.js +17 -13
  198. package/dist/core/PostEffects/colorifyPass.js.map +1 -1
  199. package/dist/core/PostEffects/index.js +28 -22
  200. package/dist/core/PostEffects/index.js.map +1 -1
  201. package/dist/core/PostEffects/outlinePass.js +37 -50
  202. package/dist/core/PostEffects/outlinePass.js.map +1 -1
  203. package/dist/core/PostEffects/postprocessing.js +14 -12
  204. package/dist/core/PostEffects/postprocessing.js.map +1 -1
  205. package/dist/core/PostEffects/saoPass.js +15 -10
  206. package/dist/core/PostEffects/saoPass.js.map +1 -1
  207. package/dist/core/PostEffects/shader/colorify.js +22 -3
  208. package/dist/core/PostEffects/shader/colorify.js.map +1 -1
  209. package/dist/core/PostEffects/shader/gammaCorrectionShader.js +27 -3
  210. package/dist/core/PostEffects/shader/gammaCorrectionShader.js.map +1 -1
  211. package/dist/core/PostEffects/shader/mapping.js +66 -3
  212. package/dist/core/PostEffects/shader/mapping.js.map +1 -1
  213. package/dist/core/PostEffects/shader/thermalMaging.js +28 -3
  214. package/dist/core/PostEffects/shader/thermalMaging.js.map +1 -1
  215. package/dist/core/SceneEffect/grow/grow.js +85 -101
  216. package/dist/core/SceneEffect/grow/grow.js.map +1 -1
  217. package/dist/core/SceneEffect/grow/style_down.js +60 -77
  218. package/dist/core/SceneEffect/grow/style_down.js.map +1 -1
  219. package/dist/core/SceneEffect/grow/style_up.js +64 -81
  220. package/dist/core/SceneEffect/grow/style_up.js.map +1 -1
  221. package/dist/core/SceneEffect/grow/type.js +2 -2
  222. package/dist/core/SceneEffect/grow/type.js.map +1 -1
  223. package/dist/core/WeatherSystem/DynamicWeatherSystem.js +51 -76
  224. package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
  225. package/dist/core/WeatherSystem/hdr/index.js +69 -105
  226. package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
  227. package/dist/core/WeatherSystem/index.js +77 -124
  228. package/dist/core/WeatherSystem/index.js.map +1 -1
  229. package/dist/core/WeatherSystem/objects/fog/index.js +52 -80
  230. package/dist/core/WeatherSystem/objects/fog/index.js.map +1 -1
  231. package/dist/core/WeatherSystem/objects/rain/index.js +72 -84
  232. package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
  233. package/dist/core/WeatherSystem/objects/rain/lineRain.js +88 -118
  234. package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
  235. package/dist/core/WeatherSystem/objects/rain/plane.js +116 -146
  236. package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
  237. package/dist/core/WeatherSystem/objects/rain/point.js +100 -148
  238. package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
  239. package/dist/core/WeatherSystem/objects/sky/cloud.js +71 -104
  240. package/dist/core/WeatherSystem/objects/sky/cloud.js.map +1 -1
  241. package/dist/core/WeatherSystem/objects/sky/index.js +66 -84
  242. package/dist/core/WeatherSystem/objects/sky/index.js.map +1 -1
  243. package/dist/core/WeatherSystem/objects/sky/outline.js +25 -45
  244. package/dist/core/WeatherSystem/objects/sky/outline.js.map +1 -1
  245. package/dist/core/WeatherSystem/shaders/cloud.js +74 -3
  246. package/dist/core/WeatherSystem/shaders/cloud.js.map +1 -1
  247. package/dist/core/WeatherSystem/shaders/fog.js +103 -3
  248. package/dist/core/WeatherSystem/shaders/fog.js.map +1 -1
  249. package/dist/core/WeatherSystem/shaders/rain.js +206 -7
  250. package/dist/core/WeatherSystem/shaders/rain.js.map +1 -1
  251. package/dist/core/WeatherSystem/shaders/sky.js +87 -3
  252. package/dist/core/WeatherSystem/shaders/sky.js.map +1 -1
  253. package/dist/core/WeatherSystem/sky/index.js +104 -135
  254. package/dist/core/WeatherSystem/sky/index.js.map +1 -1
  255. package/dist/core/WeatherSystem/utils/constant.js +44 -38
  256. package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
  257. package/dist/core/WeatherSystem/utils/math.js +18 -25
  258. package/dist/core/WeatherSystem/utils/math.js.map +1 -1
  259. package/dist/core/WeatherSystem/utils/type.js +1 -1
  260. package/dist/core/WeatherSystem/utils/type.js.map +1 -1
  261. package/dist/core/WeatherSystem/weather/index.js +96 -141
  262. package/dist/core/WeatherSystem/weather/index.js.map +1 -1
  263. package/dist/utils/index.js +1 -1
  264. package/dist/utils/index.js.map +1 -1
  265. package/package.json +3 -3
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -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":"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"}
@@ -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" == _typeof(i) ? i : String(i); }
17
- 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); }
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
- var DoubleCircleMesh = /*#__PURE__*/function (_ParticleMesh) {
22
- _inherits(DoubleCircleMesh, _ParticleMesh);
23
- var _super = _createSuper(DoubleCircleMesh);
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
- _createClass(DoubleCircleMesh, [{
45
- key: "radius",
46
- get: function get() {
47
- return this._radius;
48
- },
49
- set: function set(value) {
50
- if (this._radius === value) return;
51
- this._radius = value;
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
- key: "color",
61
- get: function get() {
62
- return this._color;
63
- },
64
- set: function set(newValue) {
65
- if (this._color === newValue) return;
66
- this._color = newValue;
67
- this._material.uniforms.color.value = new Color(this._color);
68
- }
69
- }, {
70
- key: "init",
71
- value: function () {
72
- var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
73
- var _this2 = this;
74
- var defaultUniforms, vertexShader, fragmentShader, uniforms, clock;
75
- return _regeneratorRuntime().wrap(function _callee$(_context) {
76
- while (1) switch (_context.prev = _context.next) {
77
- case 0:
78
- defaultUniforms = CircleShader.uniforms, vertexShader = CircleShader.vertexShader, fragmentShader = CircleShader.fragmentShader;
79
- uniforms = structuredClone(defaultUniforms);
80
- uniforms.color.value = new Color(this.color);
81
- this._material = new ShaderMaterial({
82
- uniforms: uniforms,
83
- vertexShader: vertexShader,
84
- fragmentShader: fragmentShader,
85
- side: 2,
86
- transparent: true,
87
- depthWrite: false,
88
- depthTest: true,
89
- blending: NormalBlending,
90
- // 明确混合模式
91
- polygonOffset: false,
92
- // 解决深度冲突
93
- polygonOffsetFactor: -1
94
- });
95
- this._mesh = new Mesh(new PlaneGeometry(this.radius * 4, this.radius * 4), this._material);
96
- this._mesh.rotation.x = Math.PI / 2;
97
- this.add(this._mesh);
98
- clock = new Clock();
99
- use.useframe(function () {
100
- _this2._material.uniforms.iTime.value = clock.getElapsedTime() * 0.5;
101
- });
102
- case 9:
103
- case "end":
104
- return _context.stop();
105
- }
106
- }, _callee, this);
107
- }));
108
- function init() {
109
- return _init.apply(this, arguments);
110
- }
111
- return init;
112
- }()
113
- }]);
114
- return DoubleCircleMesh;
115
- }(ParticleMesh);
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