@antv/l7-layers 2.9.17 → 2.9.20

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 (360) hide show
  1. package/es/Geometry/index.js +12 -2
  2. package/es/Geometry/index.js.map +1 -1
  3. package/es/Geometry/models/billboard.d.ts +3 -3
  4. package/es/Geometry/models/billboard.js +11 -6
  5. package/es/Geometry/models/billboard.js.map +1 -1
  6. package/es/Geometry/models/plane.d.ts +3 -3
  7. package/es/Geometry/models/plane.js +12 -7
  8. package/es/Geometry/models/plane.js.map +1 -1
  9. package/es/Geometry/models/sprite.d.ts +3 -3
  10. package/es/Geometry/models/sprite.js +11 -6
  11. package/es/Geometry/models/sprite.js.map +1 -1
  12. package/es/canvas/index.js +12 -2
  13. package/es/canvas/index.js.map +1 -1
  14. package/es/citybuliding/building.js +12 -2
  15. package/es/citybuliding/building.js.map +1 -1
  16. package/es/citybuliding/models/build.d.ts +2 -1
  17. package/es/citybuliding/models/build.js +16 -3
  18. package/es/citybuliding/models/build.js.map +1 -1
  19. package/es/core/BaseLayer.d.ts +1 -1
  20. package/es/core/BaseLayer.js +105 -62
  21. package/es/core/BaseLayer.js.map +1 -1
  22. package/es/core/BaseModel.d.ts +2 -2
  23. package/es/core/BaseModel.js +2 -2
  24. package/es/core/BaseModel.js.map +1 -1
  25. package/es/core/interface.d.ts +2 -0
  26. package/es/core/interface.js.map +1 -1
  27. package/es/core/triangulation.d.ts +1 -0
  28. package/es/core/triangulation.js +37 -11
  29. package/es/core/triangulation.js.map +1 -1
  30. package/es/earth/index.js +8 -2
  31. package/es/earth/index.js.map +1 -1
  32. package/es/earth/models/atmosphere.d.ts +2 -2
  33. package/es/earth/models/atmosphere.js +11 -6
  34. package/es/earth/models/atmosphere.js.map +1 -1
  35. package/es/earth/models/base.d.ts +2 -2
  36. package/es/earth/models/base.js +11 -6
  37. package/es/earth/models/base.js.map +1 -1
  38. package/es/earth/models/bloomsphere.d.ts +2 -2
  39. package/es/earth/models/bloomsphere.js +11 -6
  40. package/es/earth/models/bloomsphere.js.map +1 -1
  41. package/es/heatmap/index.js +17 -5
  42. package/es/heatmap/index.js.map +1 -1
  43. package/es/heatmap/models/grid.d.ts +2 -2
  44. package/es/heatmap/models/grid.js +12 -8
  45. package/es/heatmap/models/grid.js.map +1 -1
  46. package/es/heatmap/models/grid3d.d.ts +2 -2
  47. package/es/heatmap/models/grid3d.js +12 -6
  48. package/es/heatmap/models/grid3d.js.map +1 -1
  49. package/es/heatmap/models/heatmap.d.ts +2 -2
  50. package/es/heatmap/models/heatmap.js +112 -62
  51. package/es/heatmap/models/heatmap.js.map +1 -1
  52. package/es/heatmap/models/hexagon.d.ts +2 -2
  53. package/es/heatmap/models/hexagon.js +11 -6
  54. package/es/heatmap/models/hexagon.js.map +1 -1
  55. package/es/image/index.js +12 -2
  56. package/es/image/index.js.map +1 -1
  57. package/es/image/models/dataImage.d.ts +3 -3
  58. package/es/image/models/dataImage.js +10 -5
  59. package/es/image/models/dataImage.js.map +1 -1
  60. package/es/image/models/image.d.ts +3 -3
  61. package/es/image/models/image.js +11 -7
  62. package/es/image/models/image.js.map +1 -1
  63. package/es/line/index.d.ts +0 -2
  64. package/es/line/index.js +12 -5
  65. package/es/line/index.js.map +1 -1
  66. package/es/line/models/arc.d.ts +2 -2
  67. package/es/line/models/arc.js +15 -10
  68. package/es/line/models/arc.js.map +1 -1
  69. package/es/line/models/arc_3d.d.ts +2 -2
  70. package/es/line/models/arc_3d.js +13 -8
  71. package/es/line/models/arc_3d.js.map +1 -1
  72. package/es/line/models/earthArc_3d.d.ts +2 -2
  73. package/es/line/models/earthArc_3d.js +17 -9
  74. package/es/line/models/earthArc_3d.js.map +1 -1
  75. package/es/line/models/great_circle.d.ts +2 -2
  76. package/es/line/models/great_circle.js +12 -7
  77. package/es/line/models/great_circle.js.map +1 -1
  78. package/es/line/models/half.d.ts +2 -2
  79. package/es/line/models/half.js +46 -29
  80. package/es/line/models/half.js.map +1 -1
  81. package/es/line/models/index.d.ts +1 -1
  82. package/es/line/models/index.js +0 -2
  83. package/es/line/models/index.js.map +1 -1
  84. package/es/line/models/line.d.ts +2 -2
  85. package/es/line/models/line.js +28 -16
  86. package/es/line/models/line.js.map +1 -1
  87. package/es/line/models/linearline.d.ts +2 -11
  88. package/es/line/models/linearline.js +14 -24
  89. package/es/line/models/linearline.js.map +1 -1
  90. package/es/line/models/simpleLine.d.ts +2 -2
  91. package/es/line/models/simpleLine.js +13 -8
  92. package/es/line/models/simpleLine.js.map +1 -1
  93. package/es/line/models/tile.d.ts +2 -11
  94. package/es/line/models/tile.js +45 -39
  95. package/es/line/models/tile.js.map +1 -1
  96. package/es/line/models/wall.d.ts +2 -2
  97. package/es/line/models/wall.js +13 -9
  98. package/es/line/models/wall.js.map +1 -1
  99. package/es/mask/index.js +12 -2
  100. package/es/mask/index.js.map +1 -1
  101. package/es/mask/models/fill.d.ts +2 -2
  102. package/es/mask/models/fill.js +53 -27
  103. package/es/mask/models/fill.js.map +1 -1
  104. package/es/plugins/DataMappingPlugin.js +29 -8
  105. package/es/plugins/DataMappingPlugin.js.map +1 -1
  106. package/es/plugins/DataSourcePlugin.js +14 -5
  107. package/es/plugins/DataSourcePlugin.js.map +1 -1
  108. package/es/plugins/LayerModelPlugin.d.ts +2 -0
  109. package/es/plugins/LayerModelPlugin.js +35 -7
  110. package/es/plugins/LayerModelPlugin.js.map +1 -1
  111. package/es/plugins/PixelPickingPlugin.js +16 -13
  112. package/es/plugins/PixelPickingPlugin.js.map +1 -1
  113. package/es/point/index.d.ts +1 -1
  114. package/es/point/index.js +26 -15
  115. package/es/point/index.js.map +1 -1
  116. package/es/point/models/earthExtrude.d.ts +2 -2
  117. package/es/point/models/earthExtrude.js +16 -14
  118. package/es/point/models/earthExtrude.js.map +1 -1
  119. package/es/point/models/earthFill.d.ts +2 -11
  120. package/es/point/models/earthFill.js +13 -22
  121. package/es/point/models/earthFill.js.map +1 -1
  122. package/es/point/models/extrude.d.ts +2 -2
  123. package/es/point/models/extrude.js +49 -27
  124. package/es/point/models/extrude.js.map +1 -1
  125. package/es/point/models/fill.d.ts +2 -2
  126. package/es/point/models/fill.js +59 -41
  127. package/es/point/models/fill.js.map +1 -1
  128. package/es/point/models/fillmage.d.ts +2 -7
  129. package/es/point/models/fillmage.js +13 -22
  130. package/es/point/models/fillmage.js.map +1 -1
  131. package/es/point/models/image.d.ts +2 -2
  132. package/es/point/models/image.js +11 -6
  133. package/es/point/models/image.js.map +1 -1
  134. package/es/point/models/index.d.ts +1 -1
  135. package/es/point/models/index.js +0 -2
  136. package/es/point/models/index.js.map +1 -1
  137. package/es/point/models/normal.d.ts +2 -2
  138. package/es/point/models/normal.js +11 -6
  139. package/es/point/models/normal.js.map +1 -1
  140. package/es/point/models/radar.d.ts +2 -11
  141. package/es/point/models/radar.js +13 -22
  142. package/es/point/models/radar.js.map +1 -1
  143. package/es/point/models/simplePoint.d.ts +2 -2
  144. package/es/point/models/simplePoint.js +11 -6
  145. package/es/point/models/simplePoint.js.map +1 -1
  146. package/es/point/models/text.d.ts +3 -2
  147. package/es/point/models/text.js +110 -75
  148. package/es/point/models/text.js.map +1 -1
  149. package/es/point/models/tile.d.ts +2 -11
  150. package/es/point/models/tile.js +22 -25
  151. package/es/point/models/tile.js.map +1 -1
  152. package/es/polygon/index.js +12 -2
  153. package/es/polygon/index.js.map +1 -1
  154. package/es/polygon/models/extrude.d.ts +2 -2
  155. package/es/polygon/models/extrude.js +10 -5
  156. package/es/polygon/models/extrude.js.map +1 -1
  157. package/es/polygon/models/fill.d.ts +2 -2
  158. package/es/polygon/models/fill.js +27 -13
  159. package/es/polygon/models/fill.js.map +1 -1
  160. package/es/polygon/models/ocean.d.ts +2 -2
  161. package/es/polygon/models/ocean.js +12 -6
  162. package/es/polygon/models/ocean.js.map +1 -1
  163. package/es/polygon/models/tile.d.ts +2 -3
  164. package/es/polygon/models/tile.js +17 -27
  165. package/es/polygon/models/tile.js.map +1 -1
  166. package/es/polygon/models/water.d.ts +2 -2
  167. package/es/polygon/models/water.js +12 -6
  168. package/es/polygon/models/water.js.map +1 -1
  169. package/es/raster/index.js +12 -2
  170. package/es/raster/index.js.map +1 -1
  171. package/es/raster/models/raster.d.ts +3 -3
  172. package/es/raster/models/raster.js +11 -7
  173. package/es/raster/models/raster.js.map +1 -1
  174. package/es/tile/manager/tileLayerManager.js +3 -0
  175. package/es/tile/manager/tileLayerManager.js.map +1 -1
  176. package/es/tile/manager/tilePickerManager.js +1 -0
  177. package/es/tile/manager/tilePickerManager.js.map +1 -1
  178. package/es/tile/tileFactory/base.js.map +1 -1
  179. package/es/tile/tileFactory/point.js.map +1 -1
  180. package/es/tile/tileFactory/rasterDataLayer.js +12 -2
  181. package/es/tile/tileFactory/rasterDataLayer.js.map +1 -1
  182. package/es/tile/tileFactory/vectorLayer.js +12 -2
  183. package/es/tile/tileFactory/vectorLayer.js.map +1 -1
  184. package/es/utils/extrude_polyline.d.ts +15 -0
  185. package/es/utils/extrude_polyline.js +146 -14
  186. package/es/utils/extrude_polyline.js.map +1 -1
  187. package/es/wind/index.js +12 -2
  188. package/es/wind/index.js.map +1 -1
  189. package/es/wind/models/wind.d.ts +4 -2
  190. package/es/wind/models/wind.js +50 -18
  191. package/es/wind/models/wind.js.map +1 -1
  192. package/es/wind/models/windRender.js +1 -1
  193. package/es/wind/models/windRender.js.map +1 -1
  194. package/lib/Geometry/index.js +12 -2
  195. package/lib/Geometry/index.js.map +1 -1
  196. package/lib/Geometry/models/billboard.js +11 -6
  197. package/lib/Geometry/models/billboard.js.map +1 -1
  198. package/lib/Geometry/models/plane.js +12 -7
  199. package/lib/Geometry/models/plane.js.map +1 -1
  200. package/lib/Geometry/models/sprite.js +11 -6
  201. package/lib/Geometry/models/sprite.js.map +1 -1
  202. package/lib/canvas/index.js +12 -2
  203. package/lib/canvas/index.js.map +1 -1
  204. package/lib/citybuliding/building.js +12 -2
  205. package/lib/citybuliding/building.js.map +1 -1
  206. package/lib/citybuliding/models/build.js +16 -3
  207. package/lib/citybuliding/models/build.js.map +1 -1
  208. package/lib/core/BaseLayer.js +104 -61
  209. package/lib/core/BaseLayer.js.map +1 -1
  210. package/lib/core/BaseModel.js +2 -2
  211. package/lib/core/BaseModel.js.map +1 -1
  212. package/lib/core/interface.js.map +1 -1
  213. package/lib/core/triangulation.js +40 -16
  214. package/lib/core/triangulation.js.map +1 -1
  215. package/lib/earth/index.js +8 -2
  216. package/lib/earth/index.js.map +1 -1
  217. package/lib/earth/models/atmosphere.js +11 -6
  218. package/lib/earth/models/atmosphere.js.map +1 -1
  219. package/lib/earth/models/base.js +11 -6
  220. package/lib/earth/models/base.js.map +1 -1
  221. package/lib/earth/models/bloomsphere.js +11 -6
  222. package/lib/earth/models/bloomsphere.js.map +1 -1
  223. package/lib/heatmap/index.js +17 -5
  224. package/lib/heatmap/index.js.map +1 -1
  225. package/lib/heatmap/models/grid.js +12 -8
  226. package/lib/heatmap/models/grid.js.map +1 -1
  227. package/lib/heatmap/models/grid3d.js +12 -6
  228. package/lib/heatmap/models/grid3d.js.map +1 -1
  229. package/lib/heatmap/models/heatmap.js +113 -62
  230. package/lib/heatmap/models/heatmap.js.map +1 -1
  231. package/lib/heatmap/models/hexagon.js +11 -6
  232. package/lib/heatmap/models/hexagon.js.map +1 -1
  233. package/lib/image/index.js +12 -2
  234. package/lib/image/index.js.map +1 -1
  235. package/lib/image/models/dataImage.js +10 -5
  236. package/lib/image/models/dataImage.js.map +1 -1
  237. package/lib/image/models/image.js +11 -7
  238. package/lib/image/models/image.js.map +1 -1
  239. package/lib/line/index.js +12 -5
  240. package/lib/line/index.js.map +1 -1
  241. package/lib/line/models/arc.js +15 -10
  242. package/lib/line/models/arc.js.map +1 -1
  243. package/lib/line/models/arc_3d.js +13 -8
  244. package/lib/line/models/arc_3d.js.map +1 -1
  245. package/lib/line/models/earthArc_3d.js +17 -9
  246. package/lib/line/models/earthArc_3d.js.map +1 -1
  247. package/lib/line/models/great_circle.js +12 -7
  248. package/lib/line/models/great_circle.js.map +1 -1
  249. package/lib/line/models/half.js +48 -29
  250. package/lib/line/models/half.js.map +1 -1
  251. package/lib/line/models/index.js +0 -3
  252. package/lib/line/models/index.js.map +1 -1
  253. package/lib/line/models/line.js +29 -18
  254. package/lib/line/models/line.js.map +1 -1
  255. package/lib/line/models/linearline.js +14 -24
  256. package/lib/line/models/linearline.js.map +1 -1
  257. package/lib/line/models/simpleLine.js +13 -8
  258. package/lib/line/models/simpleLine.js.map +1 -1
  259. package/lib/line/models/tile.js +47 -39
  260. package/lib/line/models/tile.js.map +1 -1
  261. package/lib/line/models/wall.js +13 -9
  262. package/lib/line/models/wall.js.map +1 -1
  263. package/lib/mask/index.js +12 -2
  264. package/lib/mask/index.js.map +1 -1
  265. package/lib/mask/models/fill.js +55 -27
  266. package/lib/mask/models/fill.js.map +1 -1
  267. package/lib/plugins/DataMappingPlugin.js +29 -8
  268. package/lib/plugins/DataMappingPlugin.js.map +1 -1
  269. package/lib/plugins/DataSourcePlugin.js +13 -4
  270. package/lib/plugins/DataSourcePlugin.js.map +1 -1
  271. package/lib/plugins/LayerModelPlugin.js +35 -7
  272. package/lib/plugins/LayerModelPlugin.js.map +1 -1
  273. package/lib/plugins/PixelPickingPlugin.js +16 -13
  274. package/lib/plugins/PixelPickingPlugin.js.map +1 -1
  275. package/lib/point/index.js +26 -15
  276. package/lib/point/index.js.map +1 -1
  277. package/lib/point/models/earthExtrude.js +16 -15
  278. package/lib/point/models/earthExtrude.js.map +1 -1
  279. package/lib/point/models/earthFill.js +13 -22
  280. package/lib/point/models/earthFill.js.map +1 -1
  281. package/lib/point/models/extrude.js +51 -28
  282. package/lib/point/models/extrude.js.map +1 -1
  283. package/lib/point/models/fill.js +61 -42
  284. package/lib/point/models/fill.js.map +1 -1
  285. package/lib/point/models/fillmage.js +13 -22
  286. package/lib/point/models/fillmage.js.map +1 -1
  287. package/lib/point/models/image.js +11 -6
  288. package/lib/point/models/image.js.map +1 -1
  289. package/lib/point/models/index.js +0 -3
  290. package/lib/point/models/index.js.map +1 -1
  291. package/lib/point/models/normal.js +11 -6
  292. package/lib/point/models/normal.js.map +1 -1
  293. package/lib/point/models/radar.js +13 -22
  294. package/lib/point/models/radar.js.map +1 -1
  295. package/lib/point/models/simplePoint.js +11 -6
  296. package/lib/point/models/simplePoint.js.map +1 -1
  297. package/lib/point/models/text.js +112 -78
  298. package/lib/point/models/text.js.map +1 -1
  299. package/lib/point/models/tile.js +22 -25
  300. package/lib/point/models/tile.js.map +1 -1
  301. package/lib/polygon/index.js +12 -2
  302. package/lib/polygon/index.js.map +1 -1
  303. package/lib/polygon/models/extrude.js +10 -5
  304. package/lib/polygon/models/extrude.js.map +1 -1
  305. package/lib/polygon/models/fill.js +25 -11
  306. package/lib/polygon/models/fill.js.map +1 -1
  307. package/lib/polygon/models/ocean.js +12 -6
  308. package/lib/polygon/models/ocean.js.map +1 -1
  309. package/lib/polygon/models/tile.js +17 -27
  310. package/lib/polygon/models/tile.js.map +1 -1
  311. package/lib/polygon/models/water.js +12 -6
  312. package/lib/polygon/models/water.js.map +1 -1
  313. package/lib/raster/index.js +12 -2
  314. package/lib/raster/index.js.map +1 -1
  315. package/lib/raster/models/raster.js +11 -7
  316. package/lib/raster/models/raster.js.map +1 -1
  317. package/lib/tile/manager/tileLayerManager.js +3 -0
  318. package/lib/tile/manager/tileLayerManager.js.map +1 -1
  319. package/lib/tile/manager/tilePickerManager.js +1 -0
  320. package/lib/tile/manager/tilePickerManager.js.map +1 -1
  321. package/lib/tile/tileFactory/base.js.map +1 -1
  322. package/lib/tile/tileFactory/point.js.map +1 -1
  323. package/lib/tile/tileFactory/rasterDataLayer.js +12 -2
  324. package/lib/tile/tileFactory/rasterDataLayer.js.map +1 -1
  325. package/lib/tile/tileFactory/vectorLayer.js +12 -2
  326. package/lib/tile/tileFactory/vectorLayer.js.map +1 -1
  327. package/lib/utils/extrude_polyline.js +148 -14
  328. package/lib/utils/extrude_polyline.js.map +1 -1
  329. package/lib/wind/index.js +12 -2
  330. package/lib/wind/index.js.map +1 -1
  331. package/lib/wind/models/wind.js +49 -18
  332. package/lib/wind/models/wind.js.map +1 -1
  333. package/lib/wind/models/windRender.js +1 -1
  334. package/lib/wind/models/windRender.js.map +1 -1
  335. package/package.json +9 -8
  336. package/es/line/models/arcmini.d.ts +0 -9
  337. package/es/line/models/arcmini.js +0 -145
  338. package/es/line/models/arcmini.js.map +0 -1
  339. package/es/point/models/icon-font.d.ts +0 -11
  340. package/es/point/models/icon-font.js +0 -181
  341. package/es/point/models/icon-font.js.map +0 -1
  342. package/es/raster/image.d.ts +0 -0
  343. package/es/raster/image.js +0 -2
  344. package/es/raster/image.js.map +0 -1
  345. package/es/raster/raster2d.d.ts +0 -27
  346. package/es/raster/raster2d.js +0 -158
  347. package/es/raster/raster2d.js.map +0 -1
  348. package/es/utils/geo.d.ts +0 -12
  349. package/es/utils/geo.js +0 -53
  350. package/es/utils/geo.js.map +0 -1
  351. package/lib/line/models/arcmini.js +0 -161
  352. package/lib/line/models/arcmini.js.map +0 -1
  353. package/lib/point/models/icon-font.js +0 -196
  354. package/lib/point/models/icon-font.js.map +0 -1
  355. package/lib/raster/image.js +0 -2
  356. package/lib/raster/image.js.map +0 -1
  357. package/lib/raster/raster2d.js +0 -172
  358. package/lib/raster/raster2d.js.map +0 -1
  359. package/lib/utils/geo.js +0 -65
  360. package/lib/utils/geo.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","indexes","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","push","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","currentIndex","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n indexes: number[];\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n indexes: [],\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec3,\n originCur: vec3,\n originNext: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n // @ts-ignore\n direction(lineA, cur as vec3, last as vec3);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n // @ts-ignore\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n cur as vec2,\n vec2.normalize(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n // @ts-ignore\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: vec3, a1: vec3) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
1
+ {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","indexes","points","lastFlip","started","normal","totalDistance","total","count","last","cur","next","amt","simpleSegment","originPoints","push","originLast","originCur","originNext","segment_gaode2","segment","index","flatCur","flatLast","segmentDistance","lineSegmentDistance","extrusions","flatNext","subtract","miterLen","flip","copy","capSquare","joinBevel","out1","out2","currentIndex","bevel","limit","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n indexes: number[];\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n indexes: [],\n };\n }\n\n public simpleExtrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.simpleSegment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n\n public simpleExtrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.simpleSegment(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n\n private simpleSegment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n this.lastFlip = flip;\n }\n return count;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec3,\n originCur: vec3,\n originNext: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n // @ts-ignore\n direction(lineA, cur as vec3, last as vec3);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n // @ts-ignore\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n cur as vec2,\n vec2.normalize(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n // @ts-ignore\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: vec3, a1: vec3) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
package/lib/wind/index.js CHANGED
@@ -51,14 +51,24 @@ var WindLayer = function (_BaseLayer) {
51
51
  (0, _createClass2.default)(WindLayer, [{
52
52
  key: "buildModels",
53
53
  value: function buildModels() {
54
+ var _this2 = this;
55
+
54
56
  var modelType = this.getModelType();
55
57
  this.layerModel = new _models.default[modelType](this);
56
- this.models = this.layerModel.initModels();
58
+ this.layerModel.initModels(function (models) {
59
+ _this2.models = models;
60
+
61
+ _this2.renderLayers();
62
+ });
57
63
  }
58
64
  }, {
59
65
  key: "rebuildModels",
60
66
  value: function rebuildModels() {
61
- this.models = this.layerModel.buildModels();
67
+ var _this3 = this;
68
+
69
+ this.layerModel.buildModels(function (models) {
70
+ return _this3.models = models;
71
+ });
62
72
  }
63
73
  }, {
64
74
  key: "renderModels",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/wind/index.ts"],"names":["WindLayer","modelType","getModelType","layerModel","WindModels","models","initModels","buildModels","render","properties","opacity","type","minimum","maximum","defaultConfig","wind","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IACqBA,S;;;;;;;;;;;;;;;uFACG,W;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAWH,SAAX,CAAJ,CAA0B,IAA1B,CAAlB;AACA,WAAKI,MAAL,GAAc,KAAKF,UAAL,CAAgBG,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKF,UAAL,CAAgBI,WAAhB,EAAd;AACD;;;WAED,wBAAsB;AACpB,UAAI,KAAKJ,UAAT,EAAqB;AACnB,aAAKA,UAAL,CAAgBK,MAAhB;AACD;;AAED,aAAO,IAAP;AACD;;;WACD,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKT,YAAL,EAAb;AACA,UAAMY,aAAa,GAAG;AACpBC,QAAAA,IAAI,EAAE;AADc,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAAwC;AACtC,aAAO,MAAP;AACD;;;EAvCoCK,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IWindLayerStyleOptions } from '../core/interface';\nimport WindModels, { WindModelType } from './models';\nexport default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {\n public type: string = 'WindLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new WindModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n public renderModels() {\n if (this.layerModel) {\n this.layerModel.render(); // 独立的渲染流程\n }\n\n return this;\n }\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n wind: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): WindModelType {\n return 'wind';\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/wind/index.ts"],"names":["WindLayer","modelType","getModelType","layerModel","WindModels","initModels","models","renderLayers","buildModels","render","properties","opacity","type","minimum","maximum","defaultConfig","wind","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IACqBA,S;;;;;;;;;;;;;;;uFACG,W;;;;;;WACtB,uBAAqB;AAAA;;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAWH,SAAX,CAAJ,CAA0B,IAA1B,CAAlB;AACA,WAAKE,UAAL,CAAgBE,UAAhB,CAA2B,UAACC,MAAD,EAAY;AACrC,QAAA,MAAI,CAACA,MAAL,GAAcA,MAAd;;AACA,QAAA,MAAI,CAACC,YAAL;AACD,OAHD;AAID;;;WACD,yBAAuB;AAAA;;AACrB,WAAKJ,UAAL,CAAgBK,WAAhB,CAA4B,UAACF,MAAD;AAAA,eAAa,MAAI,CAACA,MAAL,GAAcA,MAA3B;AAAA,OAA5B;AACD;;;WAED,wBAAsB;AACpB,UAAI,KAAKH,UAAT,EAAqB;AACnB,aAAKA,UAAL,CAAgBM,MAAhB;AACD;;AAED,aAAO,IAAP;AACD;;;WACD,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKV,YAAL,EAAb;AACA,UAAMa,aAAa,GAAG;AACpBC,QAAAA,IAAI,EAAE;AADc,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAAwC;AACtC,aAAO,MAAP;AACD;;;EA1CoCK,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IWindLayerStyleOptions } from '../core/interface';\nimport WindModels, { WindModelType } from './models';\nexport default class WindLayer extends BaseLayer<IWindLayerStyleOptions> {\n public type: string = 'WindLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new WindModels[modelType](this);\n this.layerModel.initModels((models) => {\n this.models = models;\n this.renderLayers();\n });\n }\n public rebuildModels() {\n this.layerModel.buildModels((models) => (this.models = models));\n }\n\n public renderModels() {\n if (this.layerModel) {\n this.layerModel.render(); // 独立的渲染流程\n }\n\n return this;\n }\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n wind: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): WindModelType {\n return 'wind';\n }\n}\n"],"file":"index.js"}
@@ -69,6 +69,7 @@ var WindModel = function (_BaseModel) {
69
69
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "imageCoords", void 0);
70
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sizeScale", 0.5);
71
71
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "frequency", new _l7Utils.FrequencyController(7.2));
72
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "cacheZoom", void 0);
72
73
  return _this;
73
74
  }
74
75
 
@@ -89,8 +90,11 @@ var WindModel = function (_BaseModel) {
89
90
  }
90
91
  }, {
91
92
  key: "initModels",
92
- value: function initModels() {
93
- var _this3 = this;
93
+ value: function initModels(callbackModel) {
94
+ var _source$data,
95
+ _source$data2,
96
+ _source$data2$images,
97
+ _this3 = this;
94
98
 
95
99
  var _ref = this.layer.getLayerConfig(),
96
100
  _ref$uMin = _ref.uMin,
@@ -124,10 +128,13 @@ var WindModel = function (_BaseModel) {
124
128
  height: 0,
125
129
  width: 0
126
130
  });
131
+ this.cacheZoom = Math.floor(this.mapService.getZoom());
127
132
  var glContext = this.rendererService.getGLContext();
128
- this.imageCoords = source.data.dataArray[0].coordinates;
129
- source.data.images.then(function (imageData) {
130
- _this3.sizeScale = sizeScale;
133
+ this.imageCoords = (_source$data = source.data) === null || _source$data === void 0 ? void 0 : _source$data.dataArray[0].coordinates;
134
+ (_source$data2 = source.data) === null || _source$data2 === void 0 ? void 0 : (_source$data2$images = _source$data2.images) === null || _source$data2$images === void 0 ? void 0 : _source$data2$images.then(function (imageData) {
135
+ var _this3$texture;
136
+
137
+ _this3.sizeScale = sizeScale * _this3.getZoomScale();
131
138
 
132
139
  var _this3$getWindSize = _this3.getWindSize(),
133
140
  imageWidth = _this3$getWindSize.imageWidth,
@@ -153,18 +160,18 @@ var WindModel = function (_BaseModel) {
153
160
  image: imageData[0]
154
161
  });
155
162
 
163
+ (_this3$texture = _this3.texture) === null || _this3$texture === void 0 ? void 0 : _this3$texture.destroy();
156
164
  _this3.texture = createTexture2D({
157
- data: imageData[0],
158
- width: imageData[0].width,
159
- height: imageData[0].height
165
+ width: imageWidth,
166
+ height: imageHeight
160
167
  });
161
168
 
162
169
  _this3.layerService.updateLayerRenderList();
163
170
 
164
171
  _this3.layerService.renderLayers();
165
172
  });
166
- this.colorModel = this.layer.buildLayerModel({
167
- moduleName: 'WindLayer',
173
+ this.layer.buildLayerModel({
174
+ moduleName: 'wind',
168
175
  vertexShader: WindVert,
169
176
  fragmentShader: WindFrag,
170
177
  triangulation: _triangulation.RasterImageTriangulation,
@@ -173,16 +180,21 @@ var WindModel = function (_BaseModel) {
173
180
  enable: false
174
181
  },
175
182
  blend: this.getBlend()
183
+ }).then(function (model) {
184
+ _this3.colorModel = model;
185
+ callbackModel([model]);
186
+ }).catch(function (err) {
187
+ console.warn(err);
188
+ callbackModel([]);
176
189
  });
177
- return [this.colorModel];
178
190
  }
179
191
  }, {
180
192
  key: "getWindSize",
181
193
  value: function getWindSize() {
182
194
  var p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);
183
195
  var p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);
184
- var imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);
185
- var imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);
196
+ var imageWidth = Math.min(Math.floor((p2.x - p1.x) * this.sizeScale), 2048);
197
+ var imageHeight = Math.min(Math.floor((p1.y - p2.y) * this.sizeScale), 2048);
186
198
  return {
187
199
  imageWidth: imageWidth,
188
200
  imageHeight: imageHeight
@@ -190,8 +202,8 @@ var WindModel = function (_BaseModel) {
190
202
  }
191
203
  }, {
192
204
  key: "buildModels",
193
- value: function buildModels() {
194
- return this.initModels();
205
+ value: function buildModels(callbackModel) {
206
+ this.initModels(callbackModel);
195
207
  }
196
208
  }, {
197
209
  key: "clearModels",
@@ -234,6 +246,11 @@ var WindModel = function (_BaseModel) {
234
246
  }
235
247
  });
236
248
  }
249
+ }, {
250
+ key: "getZoomScale",
251
+ value: function getZoomScale() {
252
+ return Math.min((this.cacheZoom + 4) / 30 * 2, 2);
253
+ }
237
254
  }, {
238
255
  key: "drawWind",
239
256
  value: function drawWind() {
@@ -262,18 +279,24 @@ var WindModel = function (_BaseModel) {
262
279
  _ref2$sizeScale = _ref2.sizeScale,
263
280
  sizeScale = _ref2$sizeScale === void 0 ? 0.5 : _ref2$sizeScale;
264
281
 
265
- if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {
282
+ var newNumParticles = numParticles;
283
+ var currentZoom = Math.floor(this.mapService.getZoom());
284
+
285
+ if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale || currentZoom !== this.cacheZoom) {
286
+ var zoomScale = this.getZoomScale();
266
287
  this.sizeScale = sizeScale;
288
+ newNumParticles *= zoomScale;
267
289
 
268
290
  var _this$getWindSize = this.getWindSize(),
269
291
  imageWidth = _this$getWindSize.imageWidth,
270
292
  imageHeight = _this$getWindSize.imageHeight;
271
293
 
272
294
  this.wind.reSize(imageWidth, imageHeight);
295
+ this.cacheZoom = currentZoom;
273
296
  }
274
297
 
275
298
  this.wind.updateWindDir(uMin, uMax, vMin, vMax);
276
- this.wind.updateParticelNum(numParticles);
299
+ this.wind.updateParticelNum(newNumParticles);
277
300
  this.wind.updateColorRampTexture(rampColors);
278
301
  this.wind.fadeOpacity = fadeOpacity;
279
302
  this.wind.speedFactor = speedFactor;
@@ -296,10 +319,18 @@ var WindModel = function (_BaseModel) {
296
319
  }, {
297
320
  key: "drawColorMode",
298
321
  value: function drawColorMode() {
322
+ var _this$colorModel;
323
+
299
324
  var _ref3 = this.layer.getLayerConfig(),
300
325
  opacity = _ref3.opacity;
301
326
 
302
- this.colorModel.draw({
327
+ this.layer.masks.map(function (m) {
328
+ m.hooks.beforeRenderData.call();
329
+ m.hooks.beforeRender.call();
330
+ m.render();
331
+ m.hooks.afterRender.call();
332
+ });
333
+ (_this$colorModel = this.colorModel) === null || _this$colorModel === void 0 ? void 0 : _this$colorModel.draw({
303
334
  uniforms: {
304
335
  u_opacity: opacity || 1.0,
305
336
  u_texture: this.texture
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["defaultRampColors","WindModel","FrequencyController","frequency","run","drawWind","drawColorMode","Error","layer","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","mask","maskInside","createTexture2D","rendererService","source","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getWindSize","imageWidth","imageHeight","options","wind","Wind","setWind","image","layerService","updateLayerRenderList","renderLayers","colorModel","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","RasterImageTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels() {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n // mask\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n const { createTexture2D } = this.rendererService;\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.colorModel = this.layer.buildLayerModel({\n moduleName: 'WindLayer',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n // stencil: getMask(mask, maskInside),\n });\n\n return [this.colorModel];\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["defaultRampColors","WindModel","FrequencyController","frequency","run","drawWind","drawColorMode","Error","callbackModel","layer","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","mask","maskInside","createTexture2D","rendererService","source","getSource","texture","height","width","cacheZoom","Math","floor","mapService","getZoom","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getZoomScale","getWindSize","imageWidth","imageHeight","options","wind","Wind","setWind","image","destroy","layerService","updateLayerRenderList","renderLayers","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","RasterImageTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","model","colorModel","catch","err","console","warn","p1","lngLatToPixel","p2","min","x","y","initModels","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","newNumParticles","currentZoom","zoomScale","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","masks","map","m","hooks","beforeRenderData","call","beforeRender","render","afterRender","uniforms","u_opacity","u_texture","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n private cacheZoom: number;\n\n public render() {\n // Tip: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels(callbackModel: (models: IModel[]) => void) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n // mask\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n const { createTexture2D } = this.rendererService;\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n this.cacheZoom = Math.floor(this.mapService.getZoom());\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data?.dataArray[0].coordinates as [Point, Point];\n\n source.data?.images?.then((imageData: HTMLImageElement[]) => {\n this.sizeScale = sizeScale * this.getZoomScale();\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n this.texture?.destroy();\n\n this.texture = createTexture2D({\n width: imageWidth,\n height: imageHeight,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.layer\n .buildLayerModel({\n moduleName: 'wind',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n })\n .then((model) => {\n this.colorModel = model;\n callbackModel([model]);\n })\n .catch((err) => {\n console.warn(err);\n callbackModel([]);\n });\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.min(\n Math.floor((p2.x - p1.x) * this.sizeScale),\n 2048,\n );\n const imageHeight = Math.min(\n Math.floor((p1.y - p2.y) * this.sizeScale),\n 2048,\n );\n return { imageWidth, imageHeight };\n }\n\n public buildModels(callbackModel: (models: IModel[]) => void) {\n this.initModels(callbackModel);\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private getZoomScale() {\n return Math.min(((this.cacheZoom + 4) / 30) * 2, 2);\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n let newNumParticles = numParticles;\n const currentZoom = Math.floor(this.mapService.getZoom());\n if (\n (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) ||\n currentZoom !== this.cacheZoom\n ) {\n const zoomScale = this.getZoomScale();\n this.sizeScale = sizeScale;\n newNumParticles *= zoomScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n this.cacheZoom = currentZoom;\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(newNumParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n\n this.layer.masks.map((m) => {\n m.hooks.beforeRenderData.call();\n m.hooks.beforeRender.call();\n m.render();\n m.hooks.afterRender.call();\n });\n\n this.colorModel?.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
@@ -244,9 +244,9 @@ var Wind = function () {
244
244
  var gl = this.gl;
245
245
  bindFramebuffer(gl, this.framebuffer, this.screenTexture);
246
246
  gl.viewport(0, 0, this.width, this.height);
247
+ gl.disable(gl.BLEND);
247
248
  this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);
248
249
  this.drawParticles();
249
- gl.disable(gl.BLEND);
250
250
  this.pixels = new Uint8Array(4 * this.width * this.height);
251
251
  gl.readPixels(0, 0, this.width, this.height, gl.RGBA, gl.UNSIGNED_BYTE, this.pixels);
252
252
  bindFramebuffer(gl, null, null);