@anov/3d-ability 0.0.140 → 0.0.142

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 (266) 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.d.ts +1 -1
  134. package/dist/business/TrafficComponents/utils.js +26 -25
  135. package/dist/business/TrafficComponents/utils.js.map +1 -1
  136. package/dist/business/Utils/Curve.js +40 -56
  137. package/dist/business/Utils/Curve.js.map +1 -1
  138. package/dist/business/Utils/constant.js +1 -1
  139. package/dist/business/Utils/constant.js.map +1 -1
  140. package/dist/business/Utils/defineProps.js +13 -14
  141. package/dist/business/Utils/defineProps.js.map +1 -1
  142. package/dist/business/Utils/round-curve.js +127 -153
  143. package/dist/business/Utils/round-curve.js.map +1 -1
  144. package/dist/business/VideoPanel/index.js +258 -319
  145. package/dist/business/VideoPanel/index.js.map +1 -1
  146. package/dist/business/Water/index.js +78 -108
  147. package/dist/business/Water/index.js.map +1 -1
  148. package/dist/business/Water/types.js +1 -1
  149. package/dist/business/Water/types.js.map +1 -1
  150. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js +383 -449
  151. package/dist/core/Camera/PerspectiveCamera/CameraExpand.js.map +1 -1
  152. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js +107 -142
  153. package/dist/core/Camera/PerspectiveCamera/FollowOrbitControls.js.map +1 -1
  154. package/dist/core/Controls/FirstViewControl/index.js +84 -96
  155. package/dist/core/Controls/FirstViewControl/index.js.map +1 -1
  156. package/dist/core/Controls/ThirdViewControl/action/input.js +77 -98
  157. package/dist/core/Controls/ThirdViewControl/action/input.js.map +1 -1
  158. package/dist/core/Controls/ThirdViewControl/config/constants.js +1 -1
  159. package/dist/core/Controls/ThirdViewControl/config/constants.js.map +1 -1
  160. package/dist/core/Controls/ThirdViewControl/index.js +19 -28
  161. package/dist/core/Controls/ThirdViewControl/index.js.map +1 -1
  162. package/dist/core/Controls/ThirdViewControl/player/animation.js +126 -155
  163. package/dist/core/Controls/ThirdViewControl/player/animation.js.map +1 -1
  164. package/dist/core/Controls/ThirdViewControl/player/camera.js +47 -63
  165. package/dist/core/Controls/ThirdViewControl/player/camera.js.map +1 -1
  166. package/dist/core/Controls/ThirdViewControl/player/control.js +39 -49
  167. package/dist/core/Controls/ThirdViewControl/player/control.js.map +1 -1
  168. package/dist/core/Controls/ThirdViewControl/player.js +66 -91
  169. package/dist/core/Controls/ThirdViewControl/player.js.map +1 -1
  170. package/dist/core/Controls/base.js +14 -30
  171. package/dist/core/Controls/base.js.map +1 -1
  172. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js +92 -131
  173. package/dist/core/Curve/RoundedCornersCurve/RoundedCornersCurve.js.map +1 -1
  174. package/dist/core/Debug/PerformanceInfo/Performance.js +22 -47
  175. package/dist/core/Debug/PerformanceInfo/Performance.js.map +1 -1
  176. package/dist/core/Light/PointLight/PointLightExt.js +4 -21
  177. package/dist/core/Light/PointLight/PointLightExt.js.map +1 -1
  178. package/dist/core/Material/FinirMaterial/FinirMaterial.js +37 -57
  179. package/dist/core/Material/FinirMaterial/FinirMaterial.js.map +1 -1
  180. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js +116 -153
  181. package/dist/core/Material/PristineGridMaterial/PristineGridMaterial.js.map +1 -1
  182. package/dist/core/Material/PristineGridMaterial/shader/fragment.js +95 -1
  183. package/dist/core/Material/PristineGridMaterial/shader/fragment.js.map +1 -1
  184. package/dist/core/Material/PristineGridMaterial/shader/vertex.js +26 -1
  185. package/dist/core/Material/PristineGridMaterial/shader/vertex.js.map +1 -1
  186. package/dist/core/Material/SurfaceMaterial/index.js +76 -172
  187. package/dist/core/Material/SurfaceMaterial/index.js.map +1 -1
  188. package/dist/core/Material/decorators.js +6 -11
  189. package/dist/core/Material/decorators.js.map +1 -1
  190. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js +16 -12
  191. package/dist/core/PostEffects/addACESFilmicToneMappingPass.js.map +1 -1
  192. package/dist/core/PostEffects/addBrightnessContrastPass.js +17 -13
  193. package/dist/core/PostEffects/addBrightnessContrastPass.js.map +1 -1
  194. package/dist/core/PostEffects/bloomPass.js +17 -10
  195. package/dist/core/PostEffects/bloomPass.js.map +1 -1
  196. package/dist/core/PostEffects/bloomSelect.js +60 -43
  197. package/dist/core/PostEffects/bloomSelect.js.map +1 -1
  198. package/dist/core/PostEffects/colorifyPass.js +17 -13
  199. package/dist/core/PostEffects/colorifyPass.js.map +1 -1
  200. package/dist/core/PostEffects/index.js +28 -22
  201. package/dist/core/PostEffects/index.js.map +1 -1
  202. package/dist/core/PostEffects/outlinePass.js +37 -50
  203. package/dist/core/PostEffects/outlinePass.js.map +1 -1
  204. package/dist/core/PostEffects/postprocessing.js +14 -12
  205. package/dist/core/PostEffects/postprocessing.js.map +1 -1
  206. package/dist/core/PostEffects/saoPass.js +15 -10
  207. package/dist/core/PostEffects/saoPass.js.map +1 -1
  208. package/dist/core/PostEffects/shader/colorify.js +22 -3
  209. package/dist/core/PostEffects/shader/colorify.js.map +1 -1
  210. package/dist/core/PostEffects/shader/gammaCorrectionShader.js +27 -3
  211. package/dist/core/PostEffects/shader/gammaCorrectionShader.js.map +1 -1
  212. package/dist/core/PostEffects/shader/mapping.js +66 -3
  213. package/dist/core/PostEffects/shader/mapping.js.map +1 -1
  214. package/dist/core/PostEffects/shader/thermalMaging.js +28 -3
  215. package/dist/core/PostEffects/shader/thermalMaging.js.map +1 -1
  216. package/dist/core/SceneEffect/grow/grow.js +85 -101
  217. package/dist/core/SceneEffect/grow/grow.js.map +1 -1
  218. package/dist/core/SceneEffect/grow/style_down.js +60 -77
  219. package/dist/core/SceneEffect/grow/style_down.js.map +1 -1
  220. package/dist/core/SceneEffect/grow/style_up.js +64 -81
  221. package/dist/core/SceneEffect/grow/style_up.js.map +1 -1
  222. package/dist/core/SceneEffect/grow/type.js +2 -2
  223. package/dist/core/SceneEffect/grow/type.js.map +1 -1
  224. package/dist/core/WeatherSystem/DynamicWeatherSystem.js +51 -76
  225. package/dist/core/WeatherSystem/DynamicWeatherSystem.js.map +1 -1
  226. package/dist/core/WeatherSystem/hdr/index.js +69 -105
  227. package/dist/core/WeatherSystem/hdr/index.js.map +1 -1
  228. package/dist/core/WeatherSystem/index.js +77 -124
  229. package/dist/core/WeatherSystem/index.js.map +1 -1
  230. package/dist/core/WeatherSystem/objects/fog/index.js +52 -80
  231. package/dist/core/WeatherSystem/objects/fog/index.js.map +1 -1
  232. package/dist/core/WeatherSystem/objects/rain/index.js +72 -84
  233. package/dist/core/WeatherSystem/objects/rain/index.js.map +1 -1
  234. package/dist/core/WeatherSystem/objects/rain/lineRain.js +88 -118
  235. package/dist/core/WeatherSystem/objects/rain/lineRain.js.map +1 -1
  236. package/dist/core/WeatherSystem/objects/rain/plane.js +116 -146
  237. package/dist/core/WeatherSystem/objects/rain/plane.js.map +1 -1
  238. package/dist/core/WeatherSystem/objects/rain/point.js +100 -148
  239. package/dist/core/WeatherSystem/objects/rain/point.js.map +1 -1
  240. package/dist/core/WeatherSystem/objects/sky/cloud.js +71 -104
  241. package/dist/core/WeatherSystem/objects/sky/cloud.js.map +1 -1
  242. package/dist/core/WeatherSystem/objects/sky/index.js +66 -84
  243. package/dist/core/WeatherSystem/objects/sky/index.js.map +1 -1
  244. package/dist/core/WeatherSystem/objects/sky/outline.js +25 -45
  245. package/dist/core/WeatherSystem/objects/sky/outline.js.map +1 -1
  246. package/dist/core/WeatherSystem/shaders/cloud.js +74 -3
  247. package/dist/core/WeatherSystem/shaders/cloud.js.map +1 -1
  248. package/dist/core/WeatherSystem/shaders/fog.js +103 -3
  249. package/dist/core/WeatherSystem/shaders/fog.js.map +1 -1
  250. package/dist/core/WeatherSystem/shaders/rain.js +206 -7
  251. package/dist/core/WeatherSystem/shaders/rain.js.map +1 -1
  252. package/dist/core/WeatherSystem/shaders/sky.js +87 -3
  253. package/dist/core/WeatherSystem/shaders/sky.js.map +1 -1
  254. package/dist/core/WeatherSystem/sky/index.js +104 -135
  255. package/dist/core/WeatherSystem/sky/index.js.map +1 -1
  256. package/dist/core/WeatherSystem/utils/constant.js +44 -38
  257. package/dist/core/WeatherSystem/utils/constant.js.map +1 -1
  258. package/dist/core/WeatherSystem/utils/math.js +18 -25
  259. package/dist/core/WeatherSystem/utils/math.js.map +1 -1
  260. package/dist/core/WeatherSystem/utils/type.js +1 -1
  261. package/dist/core/WeatherSystem/utils/type.js.map +1 -1
  262. package/dist/core/WeatherSystem/weather/index.js +96 -141
  263. package/dist/core/WeatherSystem/weather/index.js.map +1 -1
  264. package/dist/utils/index.js +1 -1
  265. package/dist/utils/index.js.map +1 -1
  266. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","ObjectLayer","StrategyManage","pyramid","_pyramid","_callee","_callee$","_context","default","cylinder","_cylinder","_callee2","_callee2$","_context2","LinkMesh","_ObjectLayer","_inherits","_super","_createSuper","_this","_classCallCheck","_defineProperty","_assertThisInitialized","Set","_createClass","get","_readyPromise","_vspace","set","newValue","_hspace","_mesh","setupAnimation","addReloadListener","callback","_listeners","add","removeReloadListener","delete","destroy","remove","removeFromParent","clear"],"sources":["../../../../src/business/Poi/link/index.ts"],"sourcesContent":["import type { Group, Mesh } from '@anov/3d-core'\nimport ObjectLayer from '../../Base/ObjectLayer'\n\nexport const StrategyManage = {\n pyramid: async () => (await import('./Pyramid')).default,\n cylinder: async () => (await import('./Cylinder')).default,\n}\n\nexport default class LinkMesh extends ObjectLayer {\n _readyPromise: Promise<boolean>\n _vspace: [number, number] = [0, 0] // 垂直间距\n _hspace: [number, number] = [0, 0] // 水平间距\n _mesh: Group | Mesh\n _listeners = new Set()\n\n constructor() {\n super()\n }\n\n public get ready() {\n return this._readyPromise\n }\n\n public get vspace() {\n return this._vspace\n }\n\n public set vspace(newValue) {\n this._vspace = newValue\n }\n\n public get hspace() {\n return this._hspace\n }\n\n public get mesh() {\n return this._mesh\n }\n\n public setupAnimation() {}\n\n // 注册监听\n public addReloadListener(callback) {\n this._listeners.add(callback)\n }\n\n // 移除监听\n public removeReloadListener(callback) {\n this._listeners.delete(callback)\n }\n\n // 销毁\n public destroy() {\n this._mesh.remove()\n this._mesh.removeFromParent()\n this._listeners.clear()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["ObjectLayer","StrategyManage","pyramid","_ref","_asyncToGenerator","default","apply","arguments","cylinder","_ref2","LinkMesh","constructor","_defineProperty","Set","ready","_readyPromise","vspace","_vspace","newValue","hspace","_hspace","mesh","_mesh","setupAnimation","addReloadListener","callback","_listeners","add","removeReloadListener","delete","destroy","remove","removeFromParent","clear"],"sources":["../../../../src/business/Poi/link/index.ts"],"sourcesContent":["import type { Group, Mesh } from '@anov/3d-core'\nimport ObjectLayer from '../../Base/ObjectLayer'\n\nexport const StrategyManage = {\n pyramid: async () => (await import('./Pyramid')).default,\n cylinder: async () => (await import('./Cylinder')).default,\n}\n\nexport default class LinkMesh extends ObjectLayer {\n _readyPromise: Promise<boolean>\n _vspace: [number, number] = [0, 0] // 垂直间距\n _hspace: [number, number] = [0, 0] // 水平间距\n _mesh: Group | Mesh\n _listeners = new Set()\n\n constructor() {\n super()\n }\n\n public get ready() {\n return this._readyPromise\n }\n\n public get vspace() {\n return this._vspace\n }\n\n public set vspace(newValue) {\n this._vspace = newValue\n }\n\n public get hspace() {\n return this._hspace\n }\n\n public get mesh() {\n return this._mesh\n }\n\n public setupAnimation() {}\n\n // 注册监听\n public addReloadListener(callback) {\n this._listeners.add(callback)\n }\n\n // 移除监听\n public removeReloadListener(callback) {\n this._listeners.delete(callback)\n }\n\n // 销毁\n public destroy() {\n this._mesh.remove()\n this._mesh.removeFromParent()\n this._listeners.clear()\n }\n}"],"mappings":";;;;;AACA,OAAOA,WAAW;AAElB,OAAO,MAAMC,cAAc,GAAG;EAC5BC,OAAO;IAAA,IAAAC,IAAA,GAAAC,iBAAA,CAAE;MAAA,OAAY,OAAO,MAAM,YAAY,CAAC,EAAEC,OAAO;IAAA;IAAA,gBAAAH,QAAA;MAAA,OAAAC,IAAA,CAAAG,KAAA,OAAAC,SAAA;IAAA;EAAA;EACxDC,QAAQ;IAAA,IAAAC,KAAA,GAAAL,iBAAA,CAAE;MAAA,OAAY,OAAO,MAAM,aAAa,CAAC,EAAEC,OAAO;IAAA;IAAA,gBAAAG,SAAA;MAAA,OAAAC,KAAA,CAAAH,KAAA,OAAAC,SAAA;IAAA;EAAA;AAC5D,CAAC;AAED,eAAe,MAAMG,QAAQ,SAASV,WAAW,CAAC;EAOhDW,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAAAC,eAAA;IAAAA,eAAA,kBANmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC;IAAAA,eAAA,kBACP,CAAC,CAAC,EAAE,CAAC,CAAC;IAAC;IAAAA,eAAA;IAAAA,eAAA,qBAEtB,IAAIC,GAAG,CAAC,CAAC;EAItB;EAEA,IAAWC,KAAKA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACC,aAAa;EAC3B;EAEA,IAAWC,MAAMA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACC,OAAO;EACrB;EAEA,IAAWD,MAAMA,CAACE,QAAQ,EAAE;IAC1B,IAAI,CAACD,OAAO,GAAGC,QAAQ;EACzB;EAEA,IAAWC,MAAMA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACC,OAAO;EACrB;EAEA,IAAWC,IAAIA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACC,KAAK;EACnB;EAEOC,cAAcA,CAAA,EAAG,CAAC;;EAEzB;EACOC,iBAAiBA,CAACC,QAAQ,EAAE;IACjC,IAAI,CAACC,UAAU,CAACC,GAAG,CAACF,QAAQ,CAAC;EAC/B;;EAEA;EACOG,oBAAoBA,CAACH,QAAQ,EAAE;IACpC,IAAI,CAACC,UAAU,CAACG,MAAM,CAACJ,QAAQ,CAAC;EAClC;;EAEA;EACOK,OAAOA,CAAA,EAAG;IACf,IAAI,CAACR,KAAK,CAACS,MAAM,CAAC,CAAC;IACnB,IAAI,CAACT,KAAK,CAACU,gBAAgB,CAAC,CAAC;IAC7B,IAAI,CAACN,UAAU,CAACO,KAAK,CAAC,CAAC;EACzB;AACF"}
@@ -0,0 +1,124 @@
1
+ import { type PerspectiveCamera } from '@anov/3d-core';
2
+ import ObjectLayer from '../../Base/ObjectLayer';
3
+ import { InfoPanelUpdateConfig } from './interfaces';
4
+ /**
5
+ * InfoPanel
6
+ * 一个基于 CSS3DObject 的三维信息面板。面板的排版以像素为单位,
7
+ * 并可根据相机参数在 3D 世界中动态映射为适当的世界尺寸。
8
+ *
9
+ * 关键特性:
10
+ * - 像素锁定(`pixelLock`):保证屏幕像素尺寸恒定的看板效果。
11
+ * - 动态缩放(`updateDynamicScale`):实时根据相机 FOV、距离、视口宽高计算世界尺度。
12
+ * - 看板模式(`billboard`):支持水平(yaw)和全方位(full)朝向相机。
13
+ * - 自定义缩放(`scale` 与 `userScale3`):统一与非均匀缩放相乘得到最终缩放。
14
+ *
15
+ * 用法概览:
16
+ * const panel = new InfoPanel({
17
+ * text: { value: 'POI A', fontSize: 18 },
18
+ * size: [320, 180],
19
+ * scale: 1,
20
+ * pixelLock: true,
21
+ * billboard: 'yaw',
22
+ * anchor: 'top'
23
+ * });
24
+ * panel.updateDynamicScale(camera);
25
+ */
26
+ export default class InfoPanel extends ObjectLayer {
27
+ /**
28
+ * 内部状态与元素引用
29
+ * - config: 当前配置(已合并 defaults 与外部传入)
30
+ * - container: 面板根容器(用于 CSS3DObject 承载)
31
+ * - titleEl: 标题元素
32
+ * - contentEl: 内容元素(可选)
33
+ * - innerWrap: 内部包裹,用于实现锚点与偏移
34
+ * - _cssObject: three.js CSS3DObject(加入到 scene graph)
35
+ */
36
+ private config;
37
+ private container;
38
+ private titleEl;
39
+ private contentEl;
40
+ private innerWrap;
41
+ private _cssObject;
42
+ private _tmpObjPos;
43
+ private _tmpCamPos;
44
+ private _tmpCamDir;
45
+ /**
46
+ * 构造函数
47
+ * @param cfg 外部配置对象;仅识别本组件支持的字段,其他字段会忽略
48
+ */
49
+ constructor(cfg?: InfoPanelUpdateConfig);
50
+ /**
51
+ * 将传入的配置与默认值合并并规范化。
52
+ * - 自动处理文本样式、九宫格背景、可见性、对齐与偏移。
53
+ * - `scale`: 支持数值(统一缩放)或长度为 3 的数组(非均匀缩放)。
54
+ * - `pixelLock`: 是否锁定屏幕像素尺寸。
55
+ * - `anchor`: 面板锚点。
56
+ * @param cfg 配置对象
57
+ */
58
+ updateConfig(cfg?: InfoPanelUpdateConfig): void;
59
+ /**
60
+ * 设置面板世界坐标(应用到 CSS3DObject)。
61
+ */
62
+ setPosition(x: number, y: number, z: number): void;
63
+ /**
64
+ * 设置面板世界旋转(欧拉角,单位:弧度)。
65
+ */
66
+ setRotation(x: number, y: number, z: number): void;
67
+ /**
68
+ * 设置统一缩放因子(立即应用到 CSS3DObject)。
69
+ * 注意:若使用 `updateDynamicScale`,每帧会覆盖此值。
70
+ */
71
+ setScale(s: number): void;
72
+ /**
73
+ * 设置看板模式。
74
+ * @param mode 'none' | 'yaw' | 'full'
75
+ */
76
+ setBillboard(mode: 'none' | 'yaw' | 'full'): void;
77
+ /**
78
+ * 设置可见性。
79
+ * @param v 是否可见
80
+ */
81
+ setVisible(v: boolean): void;
82
+ /**
83
+ * 应用所有样式与文本到 DOM。
84
+ * 仅影响面板的排版与外观,不涉及 3D 变换。
85
+ */
86
+ applyStyle(): void;
87
+ /**
88
+ * 更新配置并立即重新应用到 DOM。
89
+ * @param cfg 新配置
90
+ */
91
+ update(cfg?: InfoPanelUpdateConfig): void;
92
+ /**
93
+ * 根据看板模式使面板朝向相机。
94
+ * - 'full':使用 `lookAt` 全方位朝向相机。
95
+ * - 'yaw':仅绕 Y 轴旋转,保持水平面朝向相机。
96
+ * - 'none':不处理朝向。
97
+ * @param camera three.js 相机
98
+ */
99
+ updateFacing(camera: PerspectiveCamera): void;
100
+ /**
101
+ * 动态缩放:根据相机 FOV、沿相机前向的距离 d、视口尺寸,
102
+ * 计算“每像素对应的世界单位”,并结合用户缩放得到最终缩放。
103
+ * - pixelLock: s = worldPerPixelX * userScale
104
+ * - 非锁定: s = userScale
105
+ * - 最终各轴缩放: [sx, sy, sz] = s * userScale3
106
+ */
107
+ updateDynamicScale(camera: PerspectiveCamera, viewportWidth?: number, viewportHeight?: number): void;
108
+ /**
109
+ * 释放面板:从场景移除 CSS3DObject,并清理 DOM。
110
+ */
111
+ dispose(): void;
112
+ /**
113
+ * 获取当前面板在世界坐标中的宽高(单位:世界单位)。
114
+ * 注意:结果受相机参数、面板到相机的距离以及当前 `_cssObject.scale` 影响。
115
+ * @param camera three.js 相机
116
+ * @param viewportWidth 视口宽度(像素)
117
+ * @param viewportHeight 视口高度(像素)
118
+ * @returns `{ width, height }` 世界单位
119
+ */
120
+ getWorldSize(camera: PerspectiveCamera, viewportWidth?: number, viewportHeight?: number): {
121
+ width: number;
122
+ height: number;
123
+ };
124
+ }
@@ -0,0 +1,474 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ /*
5
+ * @Descripttion:
6
+ * @version:
7
+ * @Author: 周志国
8
+ * @Date: 2025-11-27 15:14:21
9
+ * @LastEditors: 周志国
10
+ * @LastEditTime: 2025-12-01 15:44:33
11
+ * @changeLog:
12
+ * @FilePath: /anov-3d-webgl/packages/anov-3d-ability/src/business/Poi/panel/index.ts
13
+ */
14
+ import { CSS3DObject, Vector3, MathUtils } from '@anov/3d-core';
15
+ import ObjectLayer from "../../Base/ObjectLayer";
16
+ import { clampAlign, parseWeight, parseStyle, num, color, sanitizeUrl, arr2, arr3, rep, setStyles, arr4 } from "./utils";
17
+ /**
18
+ * 文件概览
19
+ * InfoPanel 是一个基于 CSS3DObject 的信息面板组件,用于在三维场景中以“屏幕像素”为基础进行排版和渲染。
20
+ * - 最小像素尺寸通过 `size` 指定(默认 320x180),容器会随内容自适应增大。
21
+ * - `pixelLock` 为 true 时,面板会随相机距离自动缩放以保持屏幕像素大小恒定。
22
+ * - `scale`/`userScale3` 提供统一或非均匀的用户缩放,参与最终缩放计算。
23
+ * - `billboard` 支持朝向相机(`yaw` 或 `full`),用于看板效果。
24
+ */
25
+
26
+ /**
27
+ * 组件默认配置。
28
+ * - text: 标题(主文本)相关样式与背景设置
29
+ * - content: 副文本显示与样式
30
+ * - size: 面板最小像素尺寸 `[width, height]`
31
+ * - scale: 统一用户缩放系数(>0)
32
+ * - userScale3: 非均匀用户缩放 `[sx, sy, sz]`,与 `scale` 相乘
33
+ * - pixelLock: 是否锁定屏幕像素尺寸
34
+ * - billboard: 看板模式('none'|'yaw'|'full')
35
+ * - anchor: 面板锚点('top'|'center'|'bottom')
36
+ */
37
+ const defaults = {
38
+ text: {
39
+ value: '',
40
+ fontSize: 16,
41
+ color: '#ffffff',
42
+ fontWeight: 'normal',
43
+ fontStyle: 'normal',
44
+ offset: [0, 0],
45
+ align: 'left',
46
+ spacing: 0,
47
+ bgUrl: '',
48
+ hsl: [200, 120, 80],
49
+ bgNineSlice: {
50
+ enabled: true,
51
+ slice: [65, 92, 27, 17],
52
+ width: [65, 92, 27, 17],
53
+ repeat: 'stretch',
54
+ fill: true,
55
+ radius: 0
56
+ },
57
+ bgSlice: [65, 92, 27, 17]
58
+ },
59
+ content: {
60
+ visible: false,
61
+ value: '',
62
+ fontSize: 16,
63
+ color: '#ffffff',
64
+ fontWeight: 'normal',
65
+ fontStyle: 'normal',
66
+ align: 'left',
67
+ offset: [0, 0],
68
+ spacing: 0
69
+ },
70
+ // 默认面板像素尺寸(宽度,高度)
71
+ size: [320, 180],
72
+ scale: 1,
73
+ // 非均匀用户缩放(来自外部 scale: [x,y,z])
74
+ userScale3: [1, 1, 1],
75
+ // 屏幕像素锁定:保持屏幕像素尺寸恒定
76
+ pixelLock: true,
77
+ billboard: 'none',
78
+ anchor: 'top'
79
+ };
80
+
81
+ /**
82
+ * InfoPanel
83
+ * 一个基于 CSS3DObject 的三维信息面板。面板的排版以像素为单位,
84
+ * 并可根据相机参数在 3D 世界中动态映射为适当的世界尺寸。
85
+ *
86
+ * 关键特性:
87
+ * - 像素锁定(`pixelLock`):保证屏幕像素尺寸恒定的看板效果。
88
+ * - 动态缩放(`updateDynamicScale`):实时根据相机 FOV、距离、视口宽高计算世界尺度。
89
+ * - 看板模式(`billboard`):支持水平(yaw)和全方位(full)朝向相机。
90
+ * - 自定义缩放(`scale` 与 `userScale3`):统一与非均匀缩放相乘得到最终缩放。
91
+ *
92
+ * 用法概览:
93
+ * const panel = new InfoPanel({
94
+ * text: { value: 'POI A', fontSize: 18 },
95
+ * size: [320, 180],
96
+ * scale: 1,
97
+ * pixelLock: true,
98
+ * billboard: 'yaw',
99
+ * anchor: 'top'
100
+ * });
101
+ * panel.updateDynamicScale(camera);
102
+ */
103
+ export default class InfoPanel extends ObjectLayer {
104
+ /**
105
+ * 构造函数
106
+ * @param cfg 外部配置对象;仅识别本组件支持的字段,其他字段会忽略
107
+ */
108
+ constructor(cfg = {}) {
109
+ super();
110
+ // 新增字段声明,修复类型报错
111
+ /**
112
+ * 内部状态与元素引用
113
+ * - config: 当前配置(已合并 defaults 与外部传入)
114
+ * - container: 面板根容器(用于 CSS3DObject 承载)
115
+ * - titleEl: 标题元素
116
+ * - contentEl: 内容元素(可选)
117
+ * - innerWrap: 内部包裹,用于实现锚点与偏移
118
+ * - _cssObject: three.js CSS3DObject(加入到 scene graph)
119
+ */
120
+ _defineProperty(this, "config", void 0);
121
+ _defineProperty(this, "container", void 0);
122
+ _defineProperty(this, "titleEl", void 0);
123
+ _defineProperty(this, "contentEl", void 0);
124
+ _defineProperty(this, "innerWrap", void 0);
125
+ _defineProperty(this, "_cssObject", void 0);
126
+ // 复用的临时向量,避免频繁创建对象
127
+ _defineProperty(this, "_tmpObjPos", new Vector3());
128
+ _defineProperty(this, "_tmpCamPos", new Vector3());
129
+ _defineProperty(this, "_tmpCamDir", new Vector3());
130
+ this.config = JSON.parse(JSON.stringify(defaults));
131
+ this.updateConfig(cfg);
132
+ this.container = document.createElement('div');
133
+ this.titleEl = document.createElement('div');
134
+ this.contentEl = document.createElement('div');
135
+ this.innerWrap = document.createElement('div');
136
+ // 内层包裹用于布局,默认采用容器左上角为参考点
137
+ setStyles(this.innerWrap, {
138
+ position: 'relative',
139
+ left: '0',
140
+ top: '0',
141
+ transform: 'none',
142
+ pointerEvents: 'auto'
143
+ });
144
+ this.innerWrap.appendChild(this.titleEl);
145
+ this.innerWrap.appendChild(this.contentEl);
146
+ this.container.appendChild(this.innerWrap);
147
+ // 将 CSS3DObject 作为子节点添加,而非赋值到 this.object3D
148
+ this._cssObject = new CSS3DObject(this.container);
149
+ this.add(this._cssObject);
150
+ this.applyStyle();
151
+ }
152
+
153
+ /**
154
+ * 将传入的配置与默认值合并并规范化。
155
+ * - 自动处理文本样式、九宫格背景、可见性、对齐与偏移。
156
+ * - `scale`: 支持数值(统一缩放)或长度为 3 的数组(非均匀缩放)。
157
+ * - `pixelLock`: 是否锁定屏幕像素尺寸。
158
+ * - `anchor`: 面板锚点。
159
+ * @param cfg 配置对象
160
+ */
161
+ updateConfig(cfg = {}) {
162
+ const t = cfg.text || {};
163
+ const c = cfg.content || {};
164
+ this.config.text.value = typeof t.value === 'string' ? t.value : this.config.text.value;
165
+ this.config.text.fontSize = num(t.fontSize, this.config.text.fontSize);
166
+ this.config.text.color = color(t.color, this.config.text.color);
167
+ this.config.text.fontWeight = parseWeight(t.fontWeight || this.config.text.fontWeight);
168
+ this.config.text.fontStyle = parseStyle(t.fontStyle || this.config.text.fontStyle);
169
+ this.config.text.offset = arr2(t.offset, this.config.text.offset);
170
+ this.config.text.align = clampAlign(t.align || this.config.text.align);
171
+ this.config.text.spacing = num(t.spacing, this.config.text.spacing);
172
+ this.config.text.bgUrl = typeof t.bgUrl === 'string' ? sanitizeUrl(t.bgUrl) : this.config.text.bgUrl;
173
+ this.config.text.hsl = arr3(t.hsl, this.config.text.hsl).slice(0, 3);
174
+ const ns = t.bgNineSlice || {};
175
+ this.config.text.bgNineSlice.enabled = typeof ns.enabled === 'boolean' ? ns.enabled : this.config.text.bgNineSlice.enabled;
176
+ this.config.text.bgNineSlice.slice = arr4(ns.slice || t.bgSlice, this.config.text.bgNineSlice.slice);
177
+ this.config.text.bgNineSlice.width = arr4(ns.width || t.bgSlice, this.config.text.bgNineSlice.width);
178
+ this.config.text.bgNineSlice.repeat = rep(ns.repeat || this.config.text.bgNineSlice.repeat);
179
+ this.config.text.bgNineSlice.fill = typeof ns.fill === 'boolean' ? ns.fill : this.config.text.bgNineSlice.fill;
180
+ this.config.text.bgNineSlice.radius = num(ns.radius, this.config.text.bgNineSlice.radius);
181
+ this.config.content.visible = typeof c.visible === 'boolean' ? c.visible : this.config.content.visible;
182
+ this.config.content.value = typeof c.value === 'string' ? c.value : this.config.content.value;
183
+ this.config.content.fontSize = num(c.fontSize, this.config.content.fontSize);
184
+ this.config.content.color = color(c.color, this.config.content.color);
185
+ this.config.content.fontWeight = parseWeight(c.fontWeight || this.config.content.fontWeight);
186
+ this.config.content.fontStyle = parseStyle(c.fontStyle || this.config.content.fontStyle);
187
+ this.config.content.align = clampAlign(c.align || this.config.content.align);
188
+ this.config.content.offset = arr2(c.offset, this.config.content.offset);
189
+ this.config.content.spacing = num(c.spacing, this.config.content.spacing);
190
+ // 支持数值或数组。数值作为统一倍数,数组作为非均匀倍数
191
+ if (Array.isArray(cfg.scale) && cfg.scale.length === 3) {
192
+ const sx = num(cfg.scale[0], this.config.userScale3[0]);
193
+ const sy = num(cfg.scale[1], this.config.userScale3[1]);
194
+ const sz = num(cfg.scale[2], this.config.userScale3[2]);
195
+ this.config.userScale3 = [sx, sy, sz];
196
+ } else {
197
+ const s = num(cfg.scale, this.config.scale);
198
+ // 用户缩放因子:仅作为乘数,不参与单位换算
199
+ this.config.scale = s > 0 ? s : this.config.scale;
200
+ }
201
+ const bb = cfg.billboard || this.config.billboard;
202
+ this.config.billboard = bb === 'yaw' || bb === 'full' ? bb : 'none';
203
+ // 面板尺寸可通过 cfg.size 指定,否则使用默认尺寸
204
+ this.config.size = arr2(cfg.size, this.config.size);
205
+ // 屏幕像素锁定
206
+ this.config.pixelLock = !!(typeof cfg.pixelLock === 'boolean' ? cfg.pixelLock : this.config.pixelLock);
207
+ // 面板锚点
208
+ const ac = cfg.anchor || this.config.anchor;
209
+ this.config.anchor = ac === 'top' || ac === 'center' || ac === 'bottom' ? ac : 'bottom';
210
+ }
211
+
212
+ /**
213
+ * 设置面板世界坐标(应用到 CSS3DObject)。
214
+ */
215
+ setPosition(x, y, z) {
216
+ this._cssObject.position.set(x, y, z);
217
+ }
218
+
219
+ /**
220
+ * 设置面板世界旋转(欧拉角,单位:弧度)。
221
+ */
222
+ setRotation(x, y, z) {
223
+ this._cssObject.rotation.set(x, y, z);
224
+ }
225
+
226
+ /**
227
+ * 设置统一缩放因子(立即应用到 CSS3DObject)。
228
+ * 注意:若使用 `updateDynamicScale`,每帧会覆盖此值。
229
+ */
230
+ setScale(s) {
231
+ this._cssObject.scale.setScalar(s);
232
+ }
233
+
234
+ /**
235
+ * 设置看板模式。
236
+ * @param mode 'none' | 'yaw' | 'full'
237
+ */
238
+ setBillboard(mode) {
239
+ const m = mode === 'yaw' || mode === 'full' ? mode : 'none';
240
+ this.config.billboard = m;
241
+ }
242
+
243
+ /**
244
+ * 设置可见性。
245
+ * @param v 是否可见
246
+ */
247
+ setVisible(v) {
248
+ this._cssObject.visible = !!v;
249
+ }
250
+
251
+ /**
252
+ * 应用所有样式与文本到 DOM。
253
+ * 仅影响面板的排版与外观,不涉及 3D 变换。
254
+ */
255
+ applyStyle() {
256
+ const t = this.config.text;
257
+ const c = this.config.content;
258
+ // 基础容器样式,确保可见尺寸与居中锚点
259
+ setStyles(this.container, {
260
+ display: 'inline-block',
261
+ boxSizing: 'border-box',
262
+ transformOrigin: 'center center',
263
+ backgroundRepeat: 'no-repeat',
264
+ backgroundPosition: 'center',
265
+ backfaceVisibility: 'hidden',
266
+ padding: '8px'
267
+ });
268
+ // 最小像素尺寸(默认 320x180,可通过 cfg.size 覆盖),容器尺寸随内容自适应
269
+ const [pxW, pxH] = this.config.size;
270
+ setStyles(this.container, {
271
+ width: '',
272
+ height: '',
273
+ minWidth: `${pxW}px`,
274
+ minHeight: `${pxH}px`
275
+ });
276
+ // 根据锚点设置内部包裹的定位与偏移(默认 top:以左上角为参考)
277
+ if (this.config.anchor === 'top') {
278
+ this.innerWrap.style.left = '0';
279
+ this.innerWrap.style.top = '0';
280
+ this.innerWrap.style.bottom = 'auto';
281
+ this.innerWrap.style.transform = 'none';
282
+ } else if (this.config.anchor === 'center') {
283
+ this.innerWrap.style.left = '50%';
284
+ this.innerWrap.style.top = '50%';
285
+ this.innerWrap.style.bottom = 'auto';
286
+ this.innerWrap.style.transform = 'translate(-50%, -50%)';
287
+ } else {
288
+ // bottom
289
+ this.innerWrap.style.left = '0';
290
+ this.innerWrap.style.top = 'auto';
291
+ this.innerWrap.style.bottom = '0';
292
+ this.innerWrap.style.transform = 'none';
293
+ }
294
+ this.titleEl.textContent = t.value || '';
295
+ setStyles(this.titleEl, {
296
+ fontSize: `${t.fontSize}px`,
297
+ color: t.color,
298
+ fontWeight: t.fontWeight,
299
+ fontStyle: t.fontStyle,
300
+ textAlign: t.align,
301
+ letterSpacing: `${num(t.spacing)}px`,
302
+ whiteSpace: 'nowrap',
303
+ overflow: 'hidden',
304
+ textOverflow: 'ellipsis',
305
+ marginLeft: `${num(t.offset[0])}px`,
306
+ marginTop: `${num(t.offset[1])}px`
307
+ });
308
+ this.contentEl.style.display = c.visible ? 'block' : 'none';
309
+ this.contentEl.textContent = c.value || '';
310
+ setStyles(this.contentEl, {
311
+ fontSize: `${c.fontSize}px`,
312
+ color: c.color,
313
+ fontWeight: c.fontWeight,
314
+ fontStyle: c.fontStyle,
315
+ textAlign: c.align,
316
+ letterSpacing: `${num(c.spacing)}px`,
317
+ whiteSpace: 'pre-wrap',
318
+ wordBreak: 'break-word',
319
+ overflow: 'visible',
320
+ textOverflow: 'clip',
321
+ marginLeft: `${num(c.offset[0])}px`,
322
+ marginTop: `${num(c.offset[1])}px`
323
+ });
324
+ const hasBgUrl = typeof t.bgUrl === 'string' && t.bgUrl.length > 0;
325
+ if (hasBgUrl) {
326
+ if (t.bgNineSlice && t.bgNineSlice.enabled) {
327
+ const s = t.bgNineSlice.slice;
328
+ const w = t.bgNineSlice.width;
329
+ // 厚度限制,避免边框厚度超过容器尺寸导致异常视觉放大
330
+ const wClamped = [Math.min(w[0], pxH * 0.5), Math.min(w[1], pxW * 0.5), Math.min(w[2], pxH * 0.5), Math.min(w[3], pxW * 0.5)];
331
+ setStyles(this.container, {
332
+ borderStyle: 'solid',
333
+ borderWidth: `${wClamped[0]}px ${wClamped[1]}px ${wClamped[2]}px ${wClamped[3]}px`,
334
+ borderImageSource: `url(${t.bgUrl})`,
335
+ borderImageSlice: `${s[0]} ${s[1]} ${s[2]} ${s[3]}${t.bgNineSlice.fill ? ' fill' : ''}`,
336
+ borderImageRepeat: t.bgNineSlice.repeat,
337
+ backgroundImage: 'none',
338
+ borderRadius: `${num(t.bgNineSlice.radius, 0)}px`
339
+ });
340
+ } else {
341
+ setStyles(this.container, {
342
+ backgroundImage: `url(${t.bgUrl})`,
343
+ borderImageSource: 'none',
344
+ borderImageSlice: '',
345
+ borderImageRepeat: '',
346
+ borderStyle: 'none',
347
+ borderWidth: '0px'
348
+ });
349
+ }
350
+ } else {
351
+ setStyles(this.container, {
352
+ backgroundImage: 'none',
353
+ borderImageSource: 'none',
354
+ borderImageSlice: '',
355
+ borderImageRepeat: '',
356
+ borderStyle: 'none',
357
+ borderWidth: '0px'
358
+ });
359
+ }
360
+ // 背景填充整个容器尺寸
361
+ setStyles(this.container, {
362
+ backgroundSize: '100% 100%',
363
+ textAlign: t.align,
364
+ pointerEvents: 'auto',
365
+ filter: `hue-rotate(${num(t.hsl[0], 0)}deg) saturate(${num(t.hsl[1], 0)}%) brightness(${num(t.hsl[2], 0)}%)`
366
+ });
367
+ }
368
+
369
+ /**
370
+ * 更新配置并立即重新应用到 DOM。
371
+ * @param cfg 新配置
372
+ */
373
+ update(cfg = {}) {
374
+ this.updateConfig(cfg);
375
+ this.applyStyle();
376
+ }
377
+
378
+ /**
379
+ * 根据看板模式使面板朝向相机。
380
+ * - 'full':使用 `lookAt` 全方位朝向相机。
381
+ * - 'yaw':仅绕 Y 轴旋转,保持水平面朝向相机。
382
+ * - 'none':不处理朝向。
383
+ * @param camera three.js 相机
384
+ */
385
+ updateFacing(camera) {
386
+ const mode = this.config.billboard;
387
+ if (mode === 'none') return;
388
+ const objPos = this._tmpObjPos;
389
+ const camPos = this._tmpCamPos;
390
+ this._cssObject.getWorldPosition(objPos);
391
+ camera.getWorldPosition(camPos);
392
+ if (mode === 'full') {
393
+ this._cssObject.lookAt(camPos);
394
+ } else if (mode === 'yaw') {
395
+ const dx = camPos.x - objPos.x;
396
+ const dz = camPos.z - objPos.z;
397
+ const yaw = Math.atan2(dx, dz);
398
+ this._cssObject.rotation.set(0, yaw, 0);
399
+ }
400
+ }
401
+
402
+ /**
403
+ * 动态缩放:根据相机 FOV、沿相机前向的距离 d、视口尺寸,
404
+ * 计算“每像素对应的世界单位”,并结合用户缩放得到最终缩放。
405
+ * - pixelLock: s = worldPerPixelX * userScale
406
+ * - 非锁定: s = userScale
407
+ * - 最终各轴缩放: [sx, sy, sz] = s * userScale3
408
+ */
409
+ updateDynamicScale(camera, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight) {
410
+ if (!camera) return;
411
+ const objPos = this._tmpObjPos;
412
+ const camPos = this._tmpCamPos;
413
+ const camDir = this._tmpCamDir;
414
+ this._cssObject.getWorldPosition(objPos);
415
+ camera.getWorldPosition(camPos);
416
+ camera.getWorldDirection(camDir);
417
+ const d = objPos.clone().sub(camPos).dot(camDir);
418
+ const fovRad = MathUtils.degToRad(camera.fov);
419
+ const worldPerPixelY = 2 * d * Math.tan(fovRad / 2) / viewportHeight;
420
+ const worldPerPixelX = worldPerPixelY * camera.aspect;
421
+ const userScale = this.config.scale;
422
+ const userScale3 = this.config.userScale3 || [1, 1, 1];
423
+ // pixel-lock:保持屏幕像素尺寸恒定;非锁定:使用统一用户系数
424
+ let s = this.config.pixelLock ? worldPerPixelX * (userScale > 0 ? userScale : 1) : userScale > 0 ? userScale : 1;
425
+ if (!Number.isFinite(s) || s <= 0) return;
426
+ // 简单限幅,避免极端相机参数造成缩放异常
427
+ const MAX_S = 1e3;
428
+ const MIN_S = 1e-6;
429
+ s = Math.max(Math.min(s, MAX_S), MIN_S);
430
+ const sx = s * (userScale3[0] || 1);
431
+ const sy = s * (userScale3[1] || 1);
432
+ const sz = s * (userScale3[2] || 1);
433
+ this._cssObject.scale.set(sx, sy, sz);
434
+ }
435
+
436
+ // 移除父级缩放抵消,面板可响应外部实体缩放(含非均匀)
437
+
438
+ /**
439
+ * 释放面板:从场景移除 CSS3DObject,并清理 DOM。
440
+ */
441
+ dispose() {
442
+ if (this._cssObject.parent) this._cssObject.parent.remove(this._cssObject);
443
+ this.container.remove();
444
+ }
445
+
446
+ /**
447
+ * 获取当前面板在世界坐标中的宽高(单位:世界单位)。
448
+ * 注意:结果受相机参数、面板到相机的距离以及当前 `_cssObject.scale` 影响。
449
+ * @param camera three.js 相机
450
+ * @param viewportWidth 视口宽度(像素)
451
+ * @param viewportHeight 视口高度(像素)
452
+ * @returns `{ width, height }` 世界单位
453
+ */
454
+ getWorldSize(camera, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight) {
455
+ const objPos = this._tmpObjPos;
456
+ const camPos = this._tmpCamPos;
457
+ const camDir = this._tmpCamDir;
458
+ this._cssObject.getWorldPosition(objPos);
459
+ camera.getWorldPosition(camPos);
460
+ camera.getWorldDirection(camDir);
461
+ const d = objPos.clone().sub(camPos).dot(camDir);
462
+ const fovRad = MathUtils.degToRad(camera.fov);
463
+ const worldPerPixelY = 2 * d * Math.tan(fovRad / 2) / viewportHeight;
464
+ const worldPerPixelX = worldPerPixelY * camera.aspect;
465
+ const wpx = this.container.offsetWidth || 0;
466
+ const hpx = this.container.offsetHeight || 0;
467
+ const s = this._cssObject.scale.x;
468
+ return {
469
+ width: wpx * worldPerPixelX * s,
470
+ height: hpx * worldPerPixelY * s
471
+ };
472
+ }
473
+ }
474
+ //# sourceMappingURL=index.js.map