@antv/l7-layers 2.9.16 → 2.9.18

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 (60) hide show
  1. package/es/core/interface.d.ts +13 -0
  2. package/es/core/interface.js.map +1 -1
  3. package/es/core/triangulation.d.ts +0 -1
  4. package/es/core/triangulation.js +9 -36
  5. package/es/core/triangulation.js.map +1 -1
  6. package/es/image/index.d.ts +1 -1
  7. package/es/image/index.js +14 -2
  8. package/es/image/index.js.map +1 -1
  9. package/es/image/models/dataImage.d.ts +22 -0
  10. package/es/image/models/dataImage.js +230 -0
  11. package/es/image/models/dataImage.js.map +1 -0
  12. package/es/image/models/image.d.ts +1 -0
  13. package/es/image/models/image.js +7 -0
  14. package/es/image/models/image.js.map +1 -1
  15. package/es/image/models/index.d.ts +1 -1
  16. package/es/image/models/index.js +3 -1
  17. package/es/image/models/index.js.map +1 -1
  18. package/es/line/models/arc.js +2 -2
  19. package/es/line/models/arc.js.map +1 -1
  20. package/es/line/models/great_circle.js +2 -2
  21. package/es/line/models/line.js +1 -1
  22. package/es/line/models/simpleLine.d.ts +0 -1
  23. package/es/line/models/simpleLine.js +10 -53
  24. package/es/line/models/simpleLine.js.map +1 -1
  25. package/es/tile/manager/tileLayerManager.js +22 -2
  26. package/es/tile/manager/tileLayerManager.js.map +1 -1
  27. package/es/utils/extrude_polyline.d.ts +0 -15
  28. package/es/utils/extrude_polyline.js +6 -138
  29. package/es/utils/extrude_polyline.js.map +1 -1
  30. package/es/utils/simpleLine.d.ts +23 -0
  31. package/es/utils/simpleLine.js +105 -0
  32. package/es/utils/simpleLine.js.map +1 -0
  33. package/es/wind/models/wind.js +26 -22
  34. package/es/wind/models/wind.js.map +1 -1
  35. package/lib/core/interface.js.map +1 -1
  36. package/lib/core/triangulation.js +10 -36
  37. package/lib/core/triangulation.js.map +1 -1
  38. package/lib/image/index.js +14 -2
  39. package/lib/image/index.js.map +1 -1
  40. package/lib/image/models/dataImage.js +245 -0
  41. package/lib/image/models/dataImage.js.map +1 -0
  42. package/lib/image/models/image.js +7 -0
  43. package/lib/image/models/image.js.map +1 -1
  44. package/lib/image/models/index.js +4 -1
  45. package/lib/image/models/index.js.map +1 -1
  46. package/lib/line/models/arc.js +2 -2
  47. package/lib/line/models/arc.js.map +1 -1
  48. package/lib/line/models/great_circle.js +2 -2
  49. package/lib/line/models/line.js +1 -1
  50. package/lib/line/models/simpleLine.js +10 -53
  51. package/lib/line/models/simpleLine.js.map +1 -1
  52. package/lib/tile/manager/tileLayerManager.js +22 -2
  53. package/lib/tile/manager/tileLayerManager.js.map +1 -1
  54. package/lib/utils/extrude_polyline.js +6 -140
  55. package/lib/utils/extrude_polyline.js.map +1 -1
  56. package/lib/utils/simpleLine.js +117 -0
  57. package/lib/utils/simpleLine.js.map +1 -0
  58. package/lib/wind/models/wind.js +26 -22
  59. package/lib/wind/models/wind.js.map +1 -1
  60. package/package.json +5 -5
@@ -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","simpleSegment","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":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA,IAAMA,GAAG,GAAGC,eAAKC,MAAL,EAAZ;;AACA,IAAMC,MAAM,GAAGF,eAAKC,MAAL,EAAf;;AACA,IAAME,KAAK,GAAGH,eAAKC,MAAL,EAAd;;AACA,IAAMG,KAAK,GAAGJ,eAAKC,MAAL,EAAd;;AACA,IAAMI,OAAO,GAAGL,eAAKC,MAAL,EAAhB;;AAEO,SAASK,YAAT,CACLC,WADK,EAELC,KAFK,EAGLC,KAHK,EAILC,GAJK,EAKLC,SALK,EAMW;AAChBX,iBAAKY,GAAL,CAASL,WAAT,EAAsBE,KAAtB,EAA6BC,GAA7B;;AACAV,iBAAKa,SAAL,CAAeN,WAAf,EAA4BA,WAA5B;;AACAC,EAAAA,KAAK,GAAGR,eAAKc,UAAL,CAAgB,CAACP,WAAW,CAAC,CAAD,CAA5B,EAAiCA,WAAW,CAAC,CAAD,CAA5C,CAAR;;AACA,MAAMQ,MAAM,GAAGf,eAAKc,UAAL,CAAgB,CAACL,KAAK,CAAC,CAAD,CAAtB,EAA2BA,KAAK,CAAC,CAAD,CAAhC,CAAf;;AACA,SAAO,CAACE,SAAS,GAAGX,eAAKgB,GAAL,CAASR,KAAT,EAAgBO,MAAhB,CAAb,EAAsCP,KAAtC,CAAP;AACD;;AACM,SAASS,aAAT,CAAuBC,GAAvB,EAAkCC,GAAlC,EAA6C;AAClD,SAAOnB,eAAKoB,GAAL,CAASF,GAAT,EAAc,CAACC,GAAG,CAAC,CAAD,CAAlB,EAAuBA,GAAG,CAAC,CAAD,CAA1B,CAAP;AACD;;AAEM,SAASE,SAAT,CAAmBH,GAAnB,EAA8BI,CAA9B,EAAuCC,CAAvC,EAAgD;AACrDvB,iBAAKwB,GAAL,CAASN,GAAT,EAAcI,CAAd,EAAiBC,CAAjB;;AACAvB,iBAAKa,SAAL,CAAeK,GAAf,EAAoBA,GAApB;;AACA,SAAOA,GAAP;AACD;;AAED,SAASO,YAAT,CAAsBH,CAAtB,EAA+BC,CAA/B,EAAwC;AACtC,SAAOD,CAAC,CAAC,CAAD,CAAD,KAASC,CAAC,CAAC,CAAD,CAAV,IAAiBD,CAAC,CAAC,CAAD,CAAD,KAASC,CAAC,CAAC,CAAD,CAAlC;AACD;;AAED,SAASG,cAAT,CAAwBC,MAAxB,EAA4C;AAC1C,MAAMC,GAAG,GAAG,IAAIC,GAAJ,EAAZ;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAAM,CAACI,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,QAAME,GAAG,GAAGL,MAAM,CAAC,CAAD,CAAN,CAAUM,QAAV,KAAuB,GAAvB,GAA6BN,MAAM,CAAC,CAAD,CAAN,CAAUM,QAAV,EAAzC;;AACA,QAAIL,GAAG,CAACM,GAAJ,CAAQF,GAAR,CAAJ,EAAkB;AAChBL,MAAAA,MAAM,CAACQ,MAAP,CAAcL,CAAd,EAAiB,CAAjB;AACAA,MAAAA,CAAC;AACF,KAHD,MAGO;AACLF,MAAAA,GAAG,CAACR,GAAJ,CAAQY,GAAR,EAAaA,GAAb;AACD;AACF;;AACD,SAAOL,MAAP;AACD;;IAWoBS,e;AAoBnB,6BAAoD;AAAA,QAAxCC,IAAwC,uEAAJ,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAPzB,CAAC,CAOwB;AAAA,iDAN9BrC,eAAKc,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,CAM8B;AAAA,mDALzB,KAKyB;AAAA,gDAJ5B,KAI4B;AAAA,yDAHpB,CAGoB;AAAA,wDAFrB,CAEqB;AAClD,SAAKwB,IAAL,GAAYD,IAAI,CAACC,IAAL,IAAa,OAAzB;AACA,SAAKC,GAAL,GAAWF,IAAI,CAACE,GAAL,IAAY,MAAvB;AACA,SAAKC,UAAL,GAAkBH,IAAI,CAACG,UAAL,IAAmB,EAArC;AACA,SAAKC,SAAL,GAAiBJ,IAAI,CAACI,SAAL,IAAkB,CAAnC;AACA,SAAKC,IAAL,GAAYL,IAAI,CAACK,IAAL,IAAa,KAAzB;AACA,SAAKC,OAAL,GAAe;AACbC,MAAAA,SAAS,EAAE,EADE;AAEbC,MAAAA,OAAO,EAAE,EAFI;AAGbC,MAAAA,OAAO,EAAE,EAHI;AAIbC,MAAAA,UAAU,EAAE,CAJC;AAKbC,MAAAA,OAAO,EAAE;AALI,KAAf;AAOD;;;;WAED,wBAAsBC,MAAtB,EAA0CC,YAA1C,EAAoE;AAClE,UAAMP,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIM,MAAM,CAAClB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKQ,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAAClB,MAArB;AACA,UAAIyB,KAAK,GAAGb,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,KAApB,EAA2BzB,CAAC,EAA5B,EAAgC;AAAA;;AAC9B,YAAM2B,IAAI,GAAGR,MAAM,CAACnB,CAAC,GAAG,CAAL,CAAnB;AACA2B,QAAAA,IAAI,CAACC,IAAL,mBAAUR,YAAY,CAACpB,CAAC,GAAG,CAAL,CAAZ,CAAoB,CAApB,CAAV,2DAAoC,CAApC;AAEA,YAAM6B,UAAU,GAAGT,YAAY,CAACpB,CAAC,GAAG,CAAL,CAA/B;AAEA,YAAM8B,GAAG,GAAGX,MAAM,CAACnB,CAAD,CAAlB;AACA8B,QAAAA,GAAG,CAACF,IAAJ,qBAASR,YAAY,CAACpB,CAAD,CAAZ,CAAgB,CAAhB,CAAT,+DAA+B,CAA/B;AAEA,YAAM+B,SAAS,GAAGX,YAAY,CAACpB,CAAD,CAA9B;AAEA,YAAMgC,IAAI,GACRhC,CAAC,GAAGmB,MAAM,CAAClB,MAAP,GAAgB,CAApB,8CACQkB,MAAM,CAACnB,CAAC,GAAG,CAAL,CADd,uBACuBoB,YAAY,CAACpB,CAAC,GAAG,CAAL,CAAZ,CAAoB,CAApB,CADvB,6DACiD,CADjD,KAEI,IAHN;AAIA,YAAMiC,UAAU,GACdjC,CAAC,GAAGoB,YAAY,CAACnB,MAAb,GAAsB,CAA1B,GAA8BmB,YAAY,CAACpB,CAAC,GAAG,CAAL,CAA1C,GAAoD,IADtD;AAGA,YAAMkC,GAAG,GAAG,KAAKC,cAAL,CACVtB,OADU,EAEVa,KAFU,EAIVC,IAJU,EAMVG,GANU,EAQVE,IARU,EAUVH,UAVU,EAWVE,SAXU,EAaVE,UAbU,CAAZ;AAeAP,QAAAA,KAAK,IAAIQ,GAAT;AACD;;AACD,UAAI,KAAKtB,IAAT,EAAe;AACb,aAAK,IAAIZ,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,EAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,EAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKwB,aAApC;AACD;AACF;;AACDX,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,8BAA4BM,MAA5B,EAAgDC,YAAhD,EAA0E;AACxE,UAAMP,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIM,MAAM,CAAClB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKQ,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAAClB,MAArB;AACA,UAAIyB,KAAK,GAAGb,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,KAApB,EAA2BzB,CAAC,EAA5B,EAAgC;AAAA;;AAC9B,YAAM2B,IAAI,GAAGR,MAAM,CAACnB,CAAC,GAAG,CAAL,CAAnB;AACA2B,QAAAA,IAAI,CAACC,IAAL,oBAAUR,YAAY,CAACpB,CAAC,GAAG,CAAL,CAAZ,CAAoB,CAApB,CAAV,6DAAoC,CAApC;AAEA,YAAM6B,UAAU,GAAGT,YAAY,CAACpB,CAAC,GAAG,CAAL,CAA/B;AAEA,YAAM8B,GAAG,GAAGX,MAAM,CAACnB,CAAD,CAAlB;AACA8B,QAAAA,GAAG,CAACF,IAAJ,sBAASR,YAAY,CAACpB,CAAD,CAAZ,CAAgB,CAAhB,CAAT,iEAA+B,CAA/B;AAEA,YAAM+B,SAAS,GAAGX,YAAY,CAACpB,CAAD,CAA9B;AAEA,YAAMgC,IAAI,GACRhC,CAAC,GAAGmB,MAAM,CAAClB,MAAP,GAAgB,CAApB,8CACQkB,MAAM,CAACnB,CAAC,GAAG,CAAL,CADd,uBACuBoB,YAAY,CAACpB,CAAC,GAAG,CAAL,CAAZ,CAAoB,CAApB,CADvB,6DACiD,CADjD,KAEI,IAHN;AAIA,YAAMiC,UAAU,GACdjC,CAAC,GAAGoB,YAAY,CAACnB,MAAb,GAAsB,CAA1B,GAA8BmB,YAAY,CAACpB,CAAC,GAAG,CAAL,CAA1C,GAAoD,IADtD;AAGA,YAAMkC,GAAG,GAAG,KAAKE,aAAL,CACVvB,OADU,EAEVa,KAFU,EAIVC,IAJU,EAMVG,GANU,EAQVE,IARU,EAUVH,UAVU,EAWVE,SAXU,EAaVE,UAbU,CAAZ;AAeAP,QAAAA,KAAK,IAAIQ,GAAT;AACD;;AACD,UAAI,KAAKtB,IAAT,EAAe;AACb,aAAK,IAAIZ,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,GAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,GAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKwB,aAApC;AACD;AACF;;AACDX,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,iBAAeM,MAAf,EAAmC;AACjC,UAAMN,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIM,MAAM,CAAClB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKQ,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAAClB,MAArB;AACA,UAAIyB,KAAK,GAAGb,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,KAApB,EAA2BzB,CAAC,EAA5B,EAAgC;AAC9B,YAAM2B,IAAI,GAAGR,MAAM,CAACnB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM8B,GAAG,GAAGX,MAAM,CAACnB,CAAD,CAAlB;AACA,YAAMgC,IAAI,GAAGhC,CAAC,GAAGmB,MAAM,CAAClB,MAAP,GAAgB,CAApB,GAAwBkB,MAAM,CAACnB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAMkC,GAAG,GAAG,KAAKG,OAAL,CAAaxB,OAAb,EAAsBa,KAAtB,EAA6BC,IAA7B,EAAmCG,GAAnC,EAAwCE,IAAxC,CAAZ;AACAN,QAAAA,KAAK,IAAIQ,GAAT;AACD;;AACD,UAAI,KAAKtB,IAAT,EAAe;AACb,aAAK,IAAIZ,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,GAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,GAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKwB,aAApC;AACD;AACF;;AACDX,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,uBAAqBM,MAArB,EAAyC;AACvC,UAAMN,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIM,MAAM,CAAClB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKQ,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAEA,UAAMC,KAAK,GAAGN,MAAM,CAAClB,MAArB;AACA,UAAIyB,KAAK,GAAGb,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyB,KAApB,EAA2BzB,CAAC,EAA5B,EAAgC;AAC9B,YAAM2B,IAAI,GAAGR,MAAM,CAACnB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM8B,GAAG,GAAGX,MAAM,CAACnB,CAAD,CAAlB;AACA,YAAMgC,IAAI,GAAGhC,CAAC,GAAGmB,MAAM,CAAClB,MAAP,GAAgB,CAApB,GAAwBkB,MAAM,CAACnB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAMkC,GAAG,GAAG,KAAKE,aAAL,CAAmBvB,OAAnB,EAA4Ba,KAA5B,EAAmCC,IAAnC,EAAyCG,GAAzC,EAA8CE,IAA9C,CAAZ;AACAN,QAAAA,KAAK,IAAIQ,GAAT;AACD;;AAED,UAAI,KAAKtB,IAAT,EAAe;AACb,aAAK,IAAIZ,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,GAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,GAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKwB,aAApC;AACD;AACF;;AACDX,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,wBACEA,OADF,EAEEyB,KAFF,EAGEX,IAHF,EAIEG,GAJF,EAKEE,IALF,EAMEH,UANF,EAOEE,SAPF,EAQEE,UARF,EASE;AACA,UAAIP,KAAK,GAAG,CAAZ;AACA,UAAMX,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMuB,SAAS,GAAG,KAAK9B,GAAL,KAAa,QAA/B;AACA,UAAM+B,SAAS,GAAG,KAAKhC,IAAL,KAAc,OAAhC;AACA,UAAMiC,OAAO,GAAG,2BAAa,CAACV,SAAS,CAAC,CAAD,CAAV,EAAeA,SAAS,CAAC,CAAD,CAAxB,CAAb,CAAhB;AAIA,UAAMW,QAAQ,GAAG,2BAAa,CAACb,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAb,CAAjB;AAKAtC,MAAAA,SAAS,CAAClB,KAAD,EAAQyD,GAAR,EAAqBH,IAArB,CAAT;AACA,UAAIgB,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK/B,IAAT,EAAe;AAEb+B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKlB,aAAL,IAAsBmB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKpB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcrD,eAAKC,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKiD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIiB,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAG3E,eAAKC,MAAL,EAAb;;AACA,cAAM2E,IAAI,GAAG5E,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS+D,IAAT,EAAe,KAAKtB,MAApB,EAA4BlD,KAA5B;;AACAH,yBAAKY,GAAL,CAASgE,IAAT,EAAe,KAAKvB,MAApB,EAA4BlD,KAA5B;;AACA2C,UAAAA,OAAO,CAACY,IAAR,CAAakB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA9B,UAAAA,OAAO,CAACY,IAAR,CAAaiB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA/B,UAAAA,SAAS,CAACc,IAAV,CACED,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBmB,eAJvB,EAKE,CAAC,KAAKhC,SALR,EAMEgB,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQA,eAAKd,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACED,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBmB,eAJvB,EAKE,KAAKhC,SALP,EAMEgB,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQA,eAAKd,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACD,SA3BD,MA2BO;AACL,eAAKC,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEW,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aAAL,GAAqBmB,eANvB;AAQD;AACF;;AAED5B,MAAAA,OAAO,CAACa,IAAR,CAAaU,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACN,IAAL,EAAW;AACT7C,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;;AACA,YAAIkE,SAAJ,EAAe;AACb,cAAMM,IAAI,GAAG3E,eAAKC,MAAL,EAAb;;AACA,cAAM2E,KAAI,GAAG5E,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASoD,KAAT,EAAezE,KAAf,EAAsB,KAAKkD,MAA3B;;AACArD,yBAAKY,GAAL,CAAS+D,IAAT,EAAexE,KAAf,EAAsB,KAAKkD,MAA3B;;AAEAP,UAAAA,OAAO,CAACY,IAAR,CAAakB,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA9B,UAAAA,OAAO,CAACY,IAAR,CAAaiB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AAEA/B,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SALP,EAMEmB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SALP,EAMEmB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACD,SA5BD,MA4BO;AACL,eAAKC,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIE,KAAKP,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aANP;AAQD;;AACDT,QAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAKAZ,QAAAA,KAAK,IAAI,CAAT;AACD,OA9CD,MA8CO;AAEL,YAAI/B,YAAY,CAACmC,GAAD,EAAcE,IAAd,CAAhB,EAA6C;AAC3C9D,yBAAKY,GAAL,CAEEkD,IAFF,EAIEF,GAJF,EAKE5D,eAAKa,SAAL,CAEEiD,IAFF,EAIE9D,eAAK+E,QAAL,CAAcjB,IAAd,EAA4BF,GAA5B,EAAyCH,IAAzC,CAJF,CALF;AAYD;;AAEDpC,QAAAA,SAAS,CAACjB,KAAD,EAAQ0D,IAAR,EAAsBF,GAAtB,CAAT;;AAGA,4BAA0BtD,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOuC,QAAP;AAAA,YAAiBxE,KAAjB;;AAUA,YAAIyE,IAAI,GAAGjF,eAAKgB,GAAL,CAASX,OAAT,EAAkB,KAAKgD,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI6B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAK5C,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM6C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAK3C,UAAjB,EAA6B;AAC3B0C,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTpC,UAAAA,OAAO,CAACY,IAAR,CAAa,KAAKL,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAP,UAAAA,OAAO,CAACY,IAAR,CAAalD,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AAEAoC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,CAAC,KAAKb,SAAN,GAAkBwC,IALpB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SAAL,GAAiBwC,IALnB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACAhC,UAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAC8B,IAAnB,GACA,CAACb,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAOAvB,UAAAA,OAAO,CAACa,IAAR,CAAaU,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAnD,UAAAA,aAAa,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKoF,IAAL,CAAU,KAAK/B,MAAf,EAAuBtD,GAAvB;;AACA+C,UAAAA,OAAO,CAACY,IAAR,CAAa,KAAKL,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAT,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,CAAC,KAAKb,SAAN,GAAkBwC,IALpB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACArB,UAAAA,KAAK,IAAI,CAAT;AACD,SA9CD,MA8CO;AACL,eAAKsB,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIEpD,KAJF,EAKEwE,QALF,EAME,KAAK1B,aANP;AAQAT,UAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAMAa,UAAAA,IAAI,GAAG,CAAC,CAAR;;AAGAjF,yBAAKoF,IAAL,CAAU,KAAK/B,MAAf,EAAuB7C,KAAvB;;AACAgD,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB8B,IAAhB;AACD;;AACD,aAAOzB,KAAP;AACD;;;WACD,uBACEb,OADF,EAEEyB,KAFF,EAGEX,IAHF,EAIEG,GAJF,EAKEE,IALF,EAME;AACA,UAAIN,KAAK,GAAG,CAAZ;AACA,UAAMX,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMyB,OAAO,GAAG,2BAAa,CAACX,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAb,CAAhB;AACA,UAAMY,QAAQ,GAAG,2BAAa,CAACf,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;AAEApC,MAAAA,SAAS,CAAClB,KAAD,EAAQoE,OAAR,EAAiBC,QAAjB,CAAT;AACA,UAAIC,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK/B,IAAT,EAAe;AAEb+B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKlB,aAAL,IAAsBmB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKpB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcrD,eAAKC,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKiD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;AAEA,aAAK0B,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEW,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aAAL,GAAqBmB,eANvB;AAQD;;AAED5B,MAAAA,OAAO,CAACa,IAAR,CAAaU,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACN,IAAL,EAAW;AACT7C,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;AACA,aAAK2E,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIE,KAAKP,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aANP;AASAT,QAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAKAZ,QAAAA,KAAK,IAAI,CAAT;AACD,OAjBD,MAiBO;AACL,YAAM6B,QAAQ,GAAG,2BAAa,CAACvB,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;;AACA,YAAIrC,YAAY,CAAC8C,OAAD,EAAUc,QAAV,CAAhB,EAAqC;AACnCrF,yBAAKY,GAAL,CACEyE,QADF,EAEEd,OAFF,EAGEvE,eAAKa,SAAL,CAAewE,QAAf,EAAyBrF,eAAK+E,QAAL,CAAcM,QAAd,EAAwBd,OAAxB,EAAiCC,QAAjC,CAAzB,CAHF;AAKD;;AACDnD,QAAAA,SAAS,CAACjB,KAAD,EAAQiF,QAAR,EAAkBd,OAAlB,CAAT;;AAIA,6BAA0BjE,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOuC,QAAP;AAAA,YAAiBxE,KAAjB;;AAUA,YAAIyE,IAAI,GAAGjF,eAAKgB,GAAL,CAASX,OAAT,EAAkB,KAAKgD,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,aAAKyB,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIEpD,KAJF,EAKEwE,QALF,EAME,KAAK1B,aANP;AAQAT,QAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAMAa,QAAAA,IAAI,GAAG,CAAC,CAAR;;AAGAjF,uBAAKoF,IAAL,CAAU,KAAK/B,MAAf,EAAuB7C,KAAvB;;AACAgD,QAAAA,KAAK,IAAI,CAAT;AACA,aAAKL,QAAL,GAAgB8B,IAAhB;AACD;;AACD,aAAOzB,KAAP;AACD;;;WACD,iBACEb,OADF,EAEEyB,KAFF,EAGEX,IAHF,EAIEG,GAJF,EAKEE,IALF,EAME;AACA,UAAIN,KAAK,GAAG,CAAZ;AACA,UAAMX,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMuB,SAAS,GAAG,KAAK9B,GAAL,KAAa,QAA/B;AACA,UAAM+B,SAAS,GAAG,KAAKhC,IAAL,KAAc,OAAhC;AACA,UAAMiC,OAAO,GAAG,2BAAa,CAACX,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAb,CAAhB;AACA,UAAMY,QAAQ,GAAG,2BAAa,CAACf,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;AAEApC,MAAAA,SAAS,CAAClB,KAAD,EAAQoE,OAAR,EAAiBC,QAAjB,CAAT;AACA,UAAIC,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK/B,IAAT,EAAe;AAEb+B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKlB,aAAL,IAAsBmB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKpB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcrD,eAAKC,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKiD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIiB,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAG3E,eAAKC,MAAL,EAAb;;AACA,cAAM2E,IAAI,GAAG5E,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS+D,IAAT,EAAe,KAAKtB,MAApB,EAA4BlD,KAA5B;;AACAH,yBAAKY,GAAL,CAASgE,IAAT,EAAe,KAAKvB,MAApB,EAA4BlD,KAA5B;;AACA2C,UAAAA,OAAO,CAACY,IAAR,CAAakB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA9B,UAAAA,OAAO,CAACY,IAAR,CAAaiB,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA/B,UAAAA,SAAS,CAACc,IAAV,CACED,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBmB,eAJvB,EAKE,CAAC,KAAKhC,SALR,EAMEgB,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQA,eAAKd,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACED,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBmB,eAJvB,EAKE,KAAKhC,SALP,EAMEgB,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQA,eAAKd,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AAGD,SA7BD,MA6BO;AACL,eAAKC,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEW,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aAAL,GAAqBmB,eANvB;AAQD;AACF;;AAED5B,MAAAA,OAAO,CAACa,IAAR,CAAaU,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACN,IAAL,EAAW;AACT7C,QAAAA,aAAa,CAAC,KAAKoC,MAAN,EAAclD,KAAd,CAAb;;AACA,YAAIkE,SAAJ,EAAe;AAGb,cAAMM,KAAI,GAAG3E,eAAKC,MAAL,EAAb;;AACA,cAAM2E,KAAI,GAAG5E,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASoD,KAAT,EAAezE,KAAf,EAAsB,KAAKkD,MAA3B;;AACArD,yBAAKY,GAAL,CAAS+D,KAAT,EAAexE,KAAf,EAAsB,KAAKkD,MAA3B;;AAEAP,UAAAA,OAAO,CAACY,IAAR,CAAakB,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA9B,UAAAA,OAAO,CAACY,IAAR,CAAaiB,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA/B,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SALP,EAMEmB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SALP,EAMEmB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACD,SA7BD,MA6BO;AACL,eAAKC,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIE,KAAKP,MAJP,EAKE,KAAKZ,SALP,EAME,KAAKa,aANP;AAQD;;AAGDT,QAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAKAZ,QAAAA,KAAK,IAAI,CAAT;AACD,OAjDD,MAiDO;AACL,YAAM6B,QAAQ,GAAG,2BAAa,CAACvB,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;;AACA,YAAIrC,YAAY,CAAC8C,OAAD,EAAUc,QAAV,CAAhB,EAAqC;AACnCrF,yBAAKY,GAAL,CACEyE,QADF,EAEEd,OAFF,EAGEvE,eAAKa,SAAL,CAAewE,QAAf,EAAyBrF,eAAK+E,QAAL,CAAcM,QAAd,EAAwBd,OAAxB,EAAiCC,QAAjC,CAAzB,CAHF;AAKD;;AACDnD,QAAAA,SAAS,CAACjB,KAAD,EAAQiF,QAAR,EAAkBd,OAAlB,CAAT;;AAIA,6BAA0BjE,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOuC,QAAP;AAAA,YAAiBxE,KAAjB;;AAUA,YAAIyE,IAAI,GAAGjF,eAAKgB,GAAL,CAASX,OAAT,EAAkB,KAAKgD,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI6B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAK5C,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM6C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAK3C,UAAjB,EAA6B;AAC3B0C,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTpC,UAAAA,OAAO,CAACY,IAAR,CAAa,KAAKL,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAP,UAAAA,OAAO,CAACY,IAAR,CAAalD,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AACAoC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,CAAC,KAAKb,SAAN,GAAkBwC,IALpB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,KAAKb,SAAL,GAAiBwC,IALnB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACAhC,UAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAC8B,IAAnB,GACA,CAACb,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAOAvB,UAAAA,OAAO,CAACa,IAAR,CAAaU,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAnD,UAAAA,aAAa,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKoF,IAAL,CAAU,KAAK/B,MAAf,EAAuBtD,GAAvB;;AACA+C,UAAAA,OAAO,CAACY,IAAR,CAAa,KAAKL,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAT,UAAAA,SAAS,CAACc,IAAV,CACEE,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKN,aAJP,EAKE,CAAC,KAAKb,SAAN,GAAkBwC,IALpB,EAMErB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQA,eAAKjB,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,eAAKA,YAAL;AACArB,UAAAA,KAAK,IAAI,CAAT;AACD,SA7CD,MA6CO;AACL,eAAKsB,UAAL,CACElC,SADF,EAEEE,OAFF,EAGEc,GAHF,EAIEpD,KAJF,EAKEwE,QALF,EAME,KAAK1B,aANP;AAQAT,UAAAA,OAAO,CAACa,IAAR,OAAAb,OAAO,mCACD,KAAKM,QAAL,KAAkB,CAAlB,GACA,CAACiB,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAMAa,UAAAA,IAAI,GAAG,CAAC,CAAR;;AAGAjF,yBAAKoF,IAAL,CAAU,KAAK/B,MAAf,EAAuB7C,KAAvB;;AACAgD,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB8B,IAAhB;AACD;;AACD,aAAOzB,KAAP;AACD;;;WACD,oBACEZ,SADF,EAEEE,OAFF,EAGEwC,KAHF,EAIEjC,MAJF,EAKEZ,SALF,EAME8C,aANF,EAOE;AACAzC,MAAAA,OAAO,CAACY,IAAR,CAAaL,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAP,MAAAA,OAAO,CAACY,IAAR,CAAaL,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAT,MAAAA,SAAS,CAACc,IAAV,CACE4B,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE,CAAC9C,SALH,EAME6C,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQA,WAAK3C,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACAjC,MAAAA,SAAS,CAACc,IAAV,CACE4B,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE9C,SALF,EAME6C,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQA,WAAK3C,OAAL,CAAaK,OAAb,CAAqBU,IAArB,CAA0B,KAAKmB,YAA/B;AACA,WAAKA,YAAL;AACD;;;WACD,6BAA4BW,EAA5B,EAAsCC,EAAtC,EAAgD;AAC9C,UAAMC,EAAE,GAAGD,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,UAAMG,EAAE,GAAGF,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,aAAOI,IAAI,CAACC,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;AACD","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 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 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 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 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 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(\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","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"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ exports.direction = direction;
10
+
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ var _l7Utils = require("@antv/l7-utils");
18
+
19
+ var _glMatrix = require("gl-matrix");
20
+
21
+ var lineA = _glMatrix.vec2.create();
22
+
23
+ function direction(out, a, b) {
24
+ _glMatrix.vec2.sub(out, a, b);
25
+
26
+ _glMatrix.vec2.normalize(out, out);
27
+
28
+ return out;
29
+ }
30
+
31
+ var ExtrudePolyline = function () {
32
+ function ExtrudePolyline() {
33
+ (0, _classCallCheck2.default)(this, ExtrudePolyline);
34
+ (0, _defineProperty2.default)(this, "complex", void 0);
35
+ (0, _defineProperty2.default)(this, "started", false);
36
+ (0, _defineProperty2.default)(this, "totalDistance", 0);
37
+ (0, _defineProperty2.default)(this, "currentIndex", 0);
38
+ this.complex = {
39
+ positions: [],
40
+ indices: [],
41
+ startIndex: 0,
42
+ indexes: []
43
+ };
44
+ }
45
+
46
+ (0, _createClass2.default)(ExtrudePolyline, [{
47
+ key: "simpleExtrude",
48
+ value: function simpleExtrude(points) {
49
+ var complex = this.complex;
50
+
51
+ if (points.length <= 1) {
52
+ return complex;
53
+ }
54
+
55
+ this.started = false;
56
+ this.totalDistance = 0;
57
+ var total = points.length;
58
+ var count = complex.startIndex;
59
+
60
+ for (var i = 1; i < total; i++) {
61
+ var last = points[i - 1];
62
+ var cur = points[i];
63
+ var amt = this.simpleSegment(complex, count, last, cur);
64
+ count += amt;
65
+ }
66
+
67
+ for (var _i = 0; _i < complex.positions.length / 6; _i++) {
68
+ complex.positions[_i * 6 + 5] = this.totalDistance;
69
+ }
70
+
71
+ return complex;
72
+ }
73
+ }, {
74
+ key: "simpleSegment",
75
+ value: function simpleSegment(complex, index, last, cur) {
76
+ var count = 0;
77
+ var indices = complex.indices;
78
+ var positions = complex.positions;
79
+ var flatCur = (0, _l7Utils.aProjectFlat)([cur[0], cur[1]]);
80
+ var flatLast = (0, _l7Utils.aProjectFlat)([last[0], last[1]]);
81
+ direction(lineA, flatCur, flatLast);
82
+ var segmentDistance = this.lineSegmentDistance(flatCur, flatLast);
83
+ this.totalDistance += segmentDistance;
84
+
85
+ if (!this.started) {
86
+ this.started = true;
87
+ this.extrusions(positions, last, this.totalDistance - segmentDistance);
88
+ }
89
+
90
+ this.extrusions(positions, cur, this.totalDistance);
91
+ indices.push(index + 0, index + 1, index + 2);
92
+ indices.push(index + 2, index + 1, index + 3);
93
+ count += 2;
94
+ return count;
95
+ }
96
+ }, {
97
+ key: "extrusions",
98
+ value: function extrusions(positions, point, distanceRadio) {
99
+ positions.push(point[0], point[1], point[2] | 0, distanceRadio, 0, point[2] | 0);
100
+ this.complex.indexes.push(this.currentIndex);
101
+ positions.push(point[0], point[1], point[2] | 0, distanceRadio, 0, point[2] | 0);
102
+ this.complex.indexes.push(this.currentIndex);
103
+ this.currentIndex++;
104
+ }
105
+ }, {
106
+ key: "lineSegmentDistance",
107
+ value: function lineSegmentDistance(b1, a1) {
108
+ var dx = a1[0] - b1[0];
109
+ var dy = a1[1] - b1[1];
110
+ return Math.sqrt(dx * dx + dy * dy);
111
+ }
112
+ }]);
113
+ return ExtrudePolyline;
114
+ }();
115
+
116
+ exports.default = ExtrudePolyline;
117
+ //# sourceMappingURL=simpleLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/simpleLine.ts"],"names":["lineA","vec2","create","direction","out","a","b","sub","normalize","ExtrudePolyline","complex","positions","indices","startIndex","indexes","points","length","started","totalDistance","total","count","i","last","cur","amt","simpleSegment","index","flatCur","flatLast","segmentDistance","lineSegmentDistance","extrusions","push","point","distanceRadio","currentIndex","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\n\nconst lineA = vec2.create();\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\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n startIndex: number;\n indexes: number[];\n };\n\n private started: boolean = false;\n\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor() {\n this.complex = {\n positions: [],\n indices: [],\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\n this.started = false;\n\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 amt = this.simpleSegment(complex, count, last, cur);\n count += amt;\n }\n\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n return complex;\n }\n private simpleSegment(complex: any, index: number, last: vec3, cur: vec3) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n\n direction(lineA, flatCur, flatLast);\n\n const segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n\n if (!this.started) {\n this.started = true;\n this.extrusions(positions, last, this.totalDistance - segmentDistance);\n }\n\n this.extrusions(positions, cur, this.totalDistance);\n indices.push(index + 0, index + 1, index + 2);\n indices.push(index + 2, index + 1, index + 3);\n count += 2;\n\n return count;\n }\n private extrusions(\n positions: number[],\n point: vec3, // 顶点\n distanceRadio: number,\n ) {\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n 0,\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 0,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: [number, number], a1: [number, number]) {\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":"simpleLine.js"}
@@ -92,6 +92,32 @@ var WindModel = function (_BaseModel) {
92
92
  value: function initModels() {
93
93
  var _this3 = this;
94
94
 
95
+ var _ref = this.layer.getLayerConfig(),
96
+ _ref$uMin = _ref.uMin,
97
+ uMin = _ref$uMin === void 0 ? -21.32 : _ref$uMin,
98
+ _ref$uMax = _ref.uMax,
99
+ uMax = _ref$uMax === void 0 ? 26.8 : _ref$uMax,
100
+ _ref$vMin = _ref.vMin,
101
+ vMin = _ref$vMin === void 0 ? -21.57 : _ref$vMin,
102
+ _ref$vMax = _ref.vMax,
103
+ vMax = _ref$vMax === void 0 ? 21.42 : _ref$vMax,
104
+ _ref$fadeOpacity = _ref.fadeOpacity,
105
+ fadeOpacity = _ref$fadeOpacity === void 0 ? 0.996 : _ref$fadeOpacity,
106
+ _ref$speedFactor = _ref.speedFactor,
107
+ speedFactor = _ref$speedFactor === void 0 ? 0.25 : _ref$speedFactor,
108
+ _ref$dropRate = _ref.dropRate,
109
+ dropRate = _ref$dropRate === void 0 ? 0.003 : _ref$dropRate,
110
+ _ref$dropRateBump = _ref.dropRateBump,
111
+ dropRateBump = _ref$dropRateBump === void 0 ? 0.01 : _ref$dropRateBump,
112
+ _ref$rampColors = _ref.rampColors,
113
+ rampColors = _ref$rampColors === void 0 ? defaultRampColors : _ref$rampColors,
114
+ _ref$sizeScale = _ref.sizeScale,
115
+ sizeScale = _ref$sizeScale === void 0 ? 0.5 : _ref$sizeScale,
116
+ _ref$mask = _ref.mask,
117
+ mask = _ref$mask === void 0 ? false : _ref$mask,
118
+ _ref$maskInside = _ref.maskInside,
119
+ maskInside = _ref$maskInside === void 0 ? true : _ref$maskInside;
120
+
95
121
  var createTexture2D = this.rendererService.createTexture2D;
96
122
  var source = this.layer.getSource();
97
123
  this.texture = createTexture2D({
@@ -101,28 +127,6 @@ var WindModel = function (_BaseModel) {
101
127
  var glContext = this.rendererService.getGLContext();
102
128
  this.imageCoords = source.data.dataArray[0].coordinates;
103
129
  source.data.images.then(function (imageData) {
104
- var _ref = _this3.layer.getLayerConfig(),
105
- _ref$uMin = _ref.uMin,
106
- uMin = _ref$uMin === void 0 ? -21.32 : _ref$uMin,
107
- _ref$uMax = _ref.uMax,
108
- uMax = _ref$uMax === void 0 ? 26.8 : _ref$uMax,
109
- _ref$vMin = _ref.vMin,
110
- vMin = _ref$vMin === void 0 ? -21.57 : _ref$vMin,
111
- _ref$vMax = _ref.vMax,
112
- vMax = _ref$vMax === void 0 ? 21.42 : _ref$vMax,
113
- _ref$fadeOpacity = _ref.fadeOpacity,
114
- fadeOpacity = _ref$fadeOpacity === void 0 ? 0.996 : _ref$fadeOpacity,
115
- _ref$speedFactor = _ref.speedFactor,
116
- speedFactor = _ref$speedFactor === void 0 ? 0.25 : _ref$speedFactor,
117
- _ref$dropRate = _ref.dropRate,
118
- dropRate = _ref$dropRate === void 0 ? 0.003 : _ref$dropRate,
119
- _ref$dropRateBump = _ref.dropRateBump,
120
- dropRateBump = _ref$dropRateBump === void 0 ? 0.01 : _ref$dropRateBump,
121
- _ref$rampColors = _ref.rampColors,
122
- rampColors = _ref$rampColors === void 0 ? defaultRampColors : _ref$rampColors,
123
- _ref$sizeScale = _ref.sizeScale,
124
- sizeScale = _ref$sizeScale === void 0 ? 0.5 : _ref$sizeScale;
125
-
126
130
  _this3.sizeScale = sizeScale;
127
131
 
128
132
  var _this3$getWindSize = _this3.getWindSize(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["defaultRampColors","WindModel","FrequencyController","frequency","run","drawWind","drawColorMode","Error","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","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 } 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\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 { createTexture2D } = this.rendererService;\n\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 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 } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\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 });\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","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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antv/l7-layers",
3
- "version": "2.9.16",
3
+ "version": "2.9.18",
4
4
  "description": "L7's collection of built-in layers",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -25,9 +25,9 @@
25
25
  "author": "xiaoiver",
26
26
  "license": "ISC",
27
27
  "dependencies": {
28
- "@antv/l7-core": "2.9.16",
29
- "@antv/l7-source": "2.9.16",
30
- "@antv/l7-utils": "2.9.16",
28
+ "@antv/l7-core": "2.9.18",
29
+ "@antv/l7-source": "2.9.18",
30
+ "@antv/l7-utils": "2.9.18",
31
31
  "@babel/runtime": "^7.7.7",
32
32
  "@mapbox/martini": "^0.2.0",
33
33
  "@turf/helpers": "^6.1.4",
@@ -57,7 +57,7 @@
57
57
  "@types/gl-matrix": "^2.4.5",
58
58
  "@types/lodash": "^4.14.138"
59
59
  },
60
- "gitHead": "7a4758195bb4d33cfb40e50536768e097b359022",
60
+ "gitHead": "8f65189c3e6bcd423c4ae3481bc99527501134c9",
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  }