@antv/l7-layers 2.6.32 → 2.6.36

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 (47) hide show
  1. package/es/core/triangulation.d.ts +6 -0
  2. package/es/core/triangulation.js +47 -0
  3. package/es/core/triangulation.js.map +1 -1
  4. package/es/line/index.d.ts +1 -1
  5. package/es/line/index.js +1 -0
  6. package/es/line/index.js.map +1 -1
  7. package/es/line/models/index.d.ts +1 -1
  8. package/es/line/models/index.js +3 -1
  9. package/es/line/models/index.js.map +1 -1
  10. package/es/line/models/line.d.ts +0 -1
  11. package/es/line/models/line.js +5 -32
  12. package/es/line/models/line.js.map +1 -1
  13. package/es/line/models/simpleLine.d.ts +10 -0
  14. package/es/line/models/simpleLine.js +221 -0
  15. package/es/line/models/simpleLine.js.map +1 -0
  16. package/es/line/models/wall.js +1 -1
  17. package/es/plugins/PixelPickingPlugin.js +24 -7
  18. package/es/plugins/PixelPickingPlugin.js.map +1 -1
  19. package/es/point/models/fill.js +4 -0
  20. package/es/point/models/fill.js.map +1 -1
  21. package/es/point/models/icon-font.js +1 -1
  22. package/es/point/models/image.js +5 -2
  23. package/es/point/models/image.js.map +1 -1
  24. package/es/utils/extrude_polyline.d.ts +13 -0
  25. package/es/utils/extrude_polyline.js +143 -7
  26. package/es/utils/extrude_polyline.js.map +1 -1
  27. package/lib/core/triangulation.js +49 -0
  28. package/lib/core/triangulation.js.map +1 -1
  29. package/lib/line/index.js +1 -0
  30. package/lib/line/index.js.map +1 -1
  31. package/lib/line/models/index.js +4 -1
  32. package/lib/line/models/index.js.map +1 -1
  33. package/lib/line/models/line.js +5 -32
  34. package/lib/line/models/line.js.map +1 -1
  35. package/lib/line/models/simpleLine.js +237 -0
  36. package/lib/line/models/simpleLine.js.map +1 -0
  37. package/lib/line/models/wall.js +1 -1
  38. package/lib/plugins/PixelPickingPlugin.js +24 -7
  39. package/lib/plugins/PixelPickingPlugin.js.map +1 -1
  40. package/lib/point/models/fill.js +4 -0
  41. package/lib/point/models/fill.js.map +1 -1
  42. package/lib/point/models/icon-font.js +1 -1
  43. package/lib/point/models/image.js +5 -2
  44. package/lib/point/models/image.js.map +1 -1
  45. package/lib/utils/extrude_polyline.js +145 -7
  46. package/lib/utils/extrude_polyline.js.map +1 -1
  47. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/point/models/image.ts"],"names":["AttributeType","gl","BaseModel","PointImageTriangulation","ImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","layer","renderLayers","mag","LINEAR","min","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","mipmap","getLayerConfig","opacity","offsets","getDirty","bind","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","registerBuiltinAttributes","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","pointImageVert","fragmentShader","pointImageFrag","triangulation","primitive","POINTS","depth","enable","blend","getBlend","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","Array","isArray","iconMap","getIconMap","shape","x","y"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ILayer,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { isNumber } from 'lodash';\nimport BaseModel, { styleOffset, styleSingle } from '../../core/BaseModel';\nimport { PointImageTriangulation } from '../../core/triangulation';\nimport pointImageFrag from '../shaders/image_frag.glsl';\nimport pointImageVert from '../shaders/image_vert.glsl';\ninterface IImageLayerStyleOptions {\n opacity: styleSingle;\n offsets: styleOffset;\n}\nexport default class ImageModel extends BaseModel {\n private texture: ITexture2D;\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n offsets = [0, 0],\n } = this.layer.getLayerConfig() as IImageLayerStyleOptions;\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n offsets,\n })\n ) {\n this.judgeStyleAttributes({\n opacity,\n offsets,\n });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n // u_opacity: opacity || 1.0,\n // u_offsets: [-offsets[0], offsets[1]],\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public initModels(): IModel[] {\n this.registerBuiltinAttributes();\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointImage',\n vertexShader: pointImageVert,\n fragmentShader: pointImageFrag,\n triangulation: PointImageTriangulation,\n primitive: gl.POINTS,\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\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: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n return Array.isArray(size) ? [size[0]] : [size as number];\n },\n },\n });\n\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 const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"image.js"}
1
+ {"version":3,"sources":["../../../src/point/models/image.ts"],"names":["AttributeType","gl","BaseModel","PointImageTriangulation","ImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","mag","min","mipmap","layer","renderLayers","LINEAR","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","offsets","getDirty","bind","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","registerBuiltinAttributes","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","pointImageVert","fragmentShader","pointImageFrag","triangulation","primitive","POINTS","depth","enable","blend","getBlend","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","Array","isArray","iconMap","getIconMap","shape","x","y"],"mappings":";;;;;;;;;;;;;AAAA,SACEA,aADF,EAEEC,EAFF,QAQO,eARP;AAUA,OAAOC,SAAP,MAAoD,sBAApD;AACA,SAASC,uBAAT,QAAwC,0BAAxC;;;;IAOqBC,U;;;;;;;;;;;;;;;;;;oEAiJK,YAAM;AAC5B,UAAQC,eAAR,GAA4B,MAAKC,eAAjC,CAAQD,eAAR;;AACA,UAAI,MAAKE,OAAT,EAAkB;AAChB,cAAKA,OAAL,CAAaC,MAAb,CAAoB;AAClBC,UAAAA,IAAI,EAAE,MAAKC,WAAL,CAAiBC,SAAjB,EADY;AAElBC,UAAAA,GAAG,EAAE,QAFa;AAGlBC,UAAAA,GAAG,EAAE,uBAHa;AAIlBC,UAAAA,MAAM,EAAE;AAJU,SAApB;;AAQA,cAAKC,KAAL,CAAWC,YAAX;;AACA;AACD;;AACD,YAAKT,OAAL,GAAeF,eAAe,CAAC;AAC7BI,QAAAA,IAAI,EAAE,MAAKC,WAAL,CAAiBC,SAAjB,EADuB;AAE7BC,QAAAA,GAAG,EAAEX,EAAE,CAACgB,MAFqB;AAI7BJ,QAAAA,GAAG,EAAEZ,EAAE,CAACiB,oBAJqB;AAK7BC,QAAAA,gBAAgB,EAAE,KALW;AAM7BC,QAAAA,KAAK,EAAE,IANsB;AAO7BC,QAAAA,MAAM,EAAE,MAAKX,WAAL,CAAiBY,YAAjB,IAAiC,GAPZ;AAQ7BR,QAAAA,MAAM,EAAE;AARqB,OAAD,CAA9B;AAUD,K;;;;;;;WAtKD,wBAAqC;AACnC,iBAGI,KAAKC,KAAL,CAAWQ,cAAX,EAHJ;AAAA,UACEC,OADF,QACEA,OADF;AAAA,8BAEEC,OAFF;AAAA,UAEEA,OAFF,6BAEY,CAAC,CAAD,EAAI,CAAJ,CAFZ;;AAIA,UAAI,KAAKnB,eAAL,CAAqBoB,QAArB,EAAJ,EAAqC;AACnC,aAAKnB,OAAL,CAAaoB,IAAb;AACD;;AAED,UACE,KAAKC,eAAL,IACA,KAAKC,qBAAL,CAA2B;AACzBL,QAAAA,OAAO,EAAPA,OADyB;AAEzBC,QAAAA,OAAO,EAAPA;AAFyB,OAA3B,CAFF,EAME;AACA,aAAKK,oBAAL,CAA0B;AACxBN,UAAAA,OAAO,EAAPA,OADwB;AAExBC,UAAAA,OAAO,EAAPA;AAFwB,SAA1B;AAIA,YAAMM,UAAU,GAAG,KAAKhB,KAAL,CAAWiB,cAAX,EAAnB;;AACA,iCAAgC,KAAKC,YAAL,CAC9B,KAAKC,UADyB,EAE9BH,UAF8B,EAG9B,KAAKI,cAHyB,CAAhC;AAAA,YAAQ1B,IAAR,sBAAQA,IAAR;AAAA,YAAcW,KAAd,sBAAcA,KAAd;AAAA,YAAqBC,MAArB,sBAAqBA,MAArB;;AAKA,aAAKe,QAAL,GAAgBf,MAAhB;AAEA,aAAKgB,WAAL,GACE,KAAKH,UAAL,GAAkB,CAAlB,IAAuBzB,IAAI,CAAC6B,MAAL,GAAc,CAArC,GACI,KAAKjC,eAAL,CAAqB;AACnBkC,UAAAA,KAAK,EAAE,IADY;AAEnB9B,UAAAA,IAAI,EAAJA,IAFmB;AAGnB+B,UAAAA,MAAM,EAAEvC,EAAE,CAACwC,SAHQ;AAInBC,UAAAA,IAAI,EAAEzC,EAAE,CAAC0C,KAJU;AAKnBvB,UAAAA,KAAK,EAALA,KALmB;AAMnBC,UAAAA,MAAM,EAANA;AANmB,SAArB,CADJ,GASI,KAAKhB,eAAL,CAAqB;AACnBkC,UAAAA,KAAK,EAAE,IADY;AAEnB9B,UAAAA,IAAI,EAAE,CAAC,CAAD,CAFa;AAGnB+B,UAAAA,MAAM,EAAEvC,EAAE,CAACwC,SAHQ;AAInBC,UAAAA,IAAI,EAAEzC,EAAE,CAAC0C,KAJU;AAKnBvB,UAAAA,KAAK,EAAE,CALY;AAMnBC,UAAAA,MAAM,EAAE;AANW,SAArB,CAVN;AAkBD;;AACD,aAAO;AACLuB,QAAAA,aAAa,EAAE,KAAKP,WADf;AAELQ,QAAAA,gBAAgB,EAAE,KAAKC,iBAAL,EAFb;AAILC,QAAAA,SAAS,EAAE,KAAKxC,OAJX;AAKLyC,QAAAA,UAAU,EAAE,CAAC,IAAD,EAAO,KAAKtC,WAAL,CAAiBY,YAAjB,IAAiC,GAAxC,CALP;AAQL2B,QAAAA,SAAS,EAAE,UAASzB,OAAT,IAAoBA,OAApB,GAA8B,GARpC;AASL0B,QAAAA,SAAS,EAAE,KAAKC,cAAL,CAAoB1B,OAApB,IACNA,OADM,GAEP,CAAC,CAAD,EAAI,CAAJ;AAXC,OAAP;AAaD;;;WAED,sBAA8B;AAC5B,WAAK2B,yBAAL;AACA,WAAKC,aAAL;AACA,WAAK3C,WAAL,CAAiB4C,EAAjB,CAAoB,aAApB,EAAmC,KAAKD,aAAxC;AACA,aAAO,KAAKE,WAAL,EAAP;AACD;;;WAED,uBAAqB;AAAA;;AACnB,4BAAKhD,OAAL,gEAAciD,OAAd;AACA,gCAAKnB,WAAL,wEAAkBmB,OAAlB;AACA,WAAK9C,WAAL,CAAiB+C,GAAjB,CAAqB,aAArB,EAAoC,KAAKJ,aAAzC;AACD;;;WAED,uBAA+B;AAC7B,aAAO,CACL,KAAKtC,KAAL,CAAW2C,eAAX,CAA2B;AACzBC,QAAAA,UAAU,EAAE,YADa;AAEzBC,QAAAA,YAAY,EAAEC,cAFW;AAGzBC,QAAAA,cAAc,EAAEC,cAHS;AAIzBC,QAAAA,aAAa,EAAE7D,uBAJU;AAKzB8D,QAAAA,SAAS,EAAEhE,EAAE,CAACiE,MALW;AAMzBC,QAAAA,KAAK,EAAE;AAAEC,UAAAA,MAAM,EAAE;AAAV,SANkB;AAOzBC,QAAAA,KAAK,EAAE,KAAKC,QAAL;AAPkB,OAA3B,CADK,CAAP;AAWD;;;WACD,qCAAsC;AAAA;;AAEpC,WAAKC,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,MAD0C;AAEhD/B,QAAAA,IAAI,EAAE1C,aAAa,CAAC0E,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,QADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAE5E,EAAE,CAAC6E,YAFJ;AAGNrE,YAAAA,IAAI,EAAE,EAHA;AAINiC,YAAAA,IAAI,EAAEzC,EAAE,CAAC0C;AAJH,WAFE;AAQVoC,UAAAA,IAAI,EAAE,CARI;AASVvE,UAAAA,MAAM,EAAE,gBACNwE,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gCAAqBH,OAArB,CAAQD,IAAR;AAAA,gBAAQA,IAAR,8BAAe,CAAf;AACA,mBAAOK,KAAK,CAACC,OAAN,CAAcN,IAAd,IAAsB,CAACA,IAAI,CAAC,CAAD,CAAL,CAAtB,GAAkC,CAACA,IAAD,CAAzC;AACD;AAjBS;AAHoC,OAAlD;AAyBA,WAAKR,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,IAD0C;AAEhD/B,QAAAA,IAAI,EAAE1C,aAAa,CAAC0E,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,MADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAE5E,EAAE,CAAC6E,YAFJ;AAGNrE,YAAAA,IAAI,EAAE,EAHA;AAINiC,YAAAA,IAAI,EAAEzC,EAAE,CAAC0C;AAJH,WAFE;AAQVoC,UAAAA,IAAI,EAAE,CARI;AASVvE,UAAAA,MAAM,EAAE,gBACNwE,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gBAAMG,OAAO,GAAG,MAAI,CAAC5E,WAAL,CAAiB6E,UAAjB,EAAhB;;AACA,gBAAQC,KAAR,GAAkBR,OAAlB,CAAQQ,KAAR;;AACA,wBAAiBF,OAAO,CAACE,KAAD,CAAP,IAA4B;AAAEC,cAAAA,CAAC,EAAE,CAAL;AAAQC,cAAAA,CAAC,EAAE;AAAX,aAA7C;AAAA,gBAAQD,CAAR,SAAQA,CAAR;AAAA,gBAAWC,CAAX,SAAWA,CAAX;;AACA,mBAAO,CAACD,CAAD,EAAIC,CAAJ,CAAP;AACD;AAnBS;AAHoC,OAAlD;AAyBD;;;;EA/IqCxF,S;;SAAnBE,U","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ILayer,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { isNumber } from 'lodash';\nimport BaseModel, { styleOffset, styleSingle } from '../../core/BaseModel';\nimport { PointImageTriangulation } from '../../core/triangulation';\nimport pointImageFrag from '../shaders/image_frag.glsl';\nimport pointImageVert from '../shaders/image_vert.glsl';\ninterface IImageLayerStyleOptions {\n opacity: styleSingle;\n offsets: styleOffset;\n}\nexport default class ImageModel extends BaseModel {\n private texture: ITexture2D;\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n offsets = [0, 0],\n } = this.layer.getLayerConfig() as IImageLayerStyleOptions;\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n offsets,\n })\n ) {\n this.judgeStyleAttributes({\n opacity,\n offsets,\n });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n // u_opacity: opacity || 1.0,\n // u_offsets: [-offsets[0], offsets[1]],\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public initModels(): IModel[] {\n this.registerBuiltinAttributes();\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointImage',\n vertexShader: pointImageVert,\n fragmentShader: pointImageFrag,\n triangulation: PointImageTriangulation,\n primitive: gl.POINTS,\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\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: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n return Array.isArray(size) ? [size[0]] : [size as number];\n },\n },\n });\n\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 const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true,\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"image.js"}
@@ -35,13 +35,26 @@ export default class ExtrudePolyline {
35
35
  normals: number[];
36
36
  startIndex: number;
37
37
  };
38
+ simpleExtrude_gaode2(points: number[][], originPoints: number[][]): {
39
+ positions: number[];
40
+ indices: number[];
41
+ normals: number[];
42
+ startIndex: number;
43
+ };
38
44
  extrude(points: number[][]): {
39
45
  positions: number[];
40
46
  indices: number[];
41
47
  normals: number[];
42
48
  startIndex: number;
43
49
  };
50
+ simpleExtrude(points: number[][]): {
51
+ positions: number[];
52
+ indices: number[];
53
+ normals: number[];
54
+ startIndex: number;
55
+ };
44
56
  private segment_gaode2;
57
+ private simpleSegment;
45
58
  private segment;
46
59
  private extrusions;
47
60
  private lineSegmentDistance;
@@ -105,11 +105,15 @@ var ExtrudePolyline = function () {
105
105
  var count = complex.startIndex;
106
106
 
107
107
  for (var i = 1; i < total; i++) {
108
+ var _originPoints$, _originPoints$i$, _originPoints$2;
109
+
108
110
  var last = points[i - 1];
111
+ last.push((_originPoints$ = originPoints[i - 1][2]) !== null && _originPoints$ !== void 0 ? _originPoints$ : 0);
109
112
  var originLast = originPoints[i - 1];
110
113
  var cur = points[i];
114
+ cur.push((_originPoints$i$ = originPoints[i][2]) !== null && _originPoints$i$ !== void 0 ? _originPoints$i$ : 0);
111
115
  var originCur = originPoints[i];
112
- var next = i < points.length - 1 ? points[i + 1] : null;
116
+ var next = i < points.length - 1 ? [].concat(_toConsumableArray(points[i + 1]), [(_originPoints$2 = originPoints[i + 1][2]) !== null && _originPoints$2 !== void 0 ? _originPoints$2 : 0]) : null;
113
117
  var originNext = i < originPoints.length - 1 ? originPoints[i + 1] : null;
114
118
  var amt = this.segment_gaode2(complex, count, last, cur, next, originLast, originCur, originNext);
115
119
  count += amt;
@@ -125,6 +129,46 @@ var ExtrudePolyline = function () {
125
129
  return complex;
126
130
  }
127
131
  }, {
132
+ key: "simpleExtrude_gaode2",
133
+ value: function simpleExtrude_gaode2(points, originPoints) {
134
+ var complex = this.complex;
135
+
136
+ if (points.length <= 1) {
137
+ return complex;
138
+ }
139
+
140
+ this.lastFlip = -1;
141
+ this.started = false;
142
+ this.normal = null;
143
+ this.totalDistance = 0;
144
+ var total = points.length;
145
+ var count = complex.startIndex;
146
+
147
+ for (var i = 1; i < total; i++) {
148
+ var _originPoints$3, _originPoints$i$2, _originPoints$4;
149
+
150
+ var last = points[i - 1];
151
+ last.push((_originPoints$3 = originPoints[i - 1][2]) !== null && _originPoints$3 !== void 0 ? _originPoints$3 : 0);
152
+ var originLast = originPoints[i - 1];
153
+ var cur = points[i];
154
+ cur.push((_originPoints$i$2 = originPoints[i][2]) !== null && _originPoints$i$2 !== void 0 ? _originPoints$i$2 : 0);
155
+ var originCur = originPoints[i];
156
+ var next = i < points.length - 1 ? [].concat(_toConsumableArray(points[i + 1]), [(_originPoints$4 = originPoints[i + 1][2]) !== null && _originPoints$4 !== void 0 ? _originPoints$4 : 0]) : null;
157
+ var originNext = i < originPoints.length - 1 ? originPoints[i + 1] : null;
158
+ var amt = this.simpleSegment(complex, count, last, cur, next, originLast, originCur, originNext);
159
+ count += amt;
160
+ }
161
+
162
+ if (this.dash) {
163
+ for (var _i2 = 0; _i2 < complex.positions.length / 6; _i2++) {
164
+ complex.positions[_i2 * 6 + 5] = this.totalDistance;
165
+ }
166
+ }
167
+
168
+ complex.startIndex = complex.positions.length / 6;
169
+ return complex;
170
+ }
171
+ }, {
128
172
  key: "extrude",
129
173
  value: function extrude(points) {
130
174
  var complex = this.complex;
@@ -149,8 +193,41 @@ var ExtrudePolyline = function () {
149
193
  }
150
194
 
151
195
  if (this.dash) {
152
- for (var _i2 = 0; _i2 < complex.positions.length / 6; _i2++) {
153
- complex.positions[_i2 * 6 + 5] = this.totalDistance;
196
+ for (var _i3 = 0; _i3 < complex.positions.length / 6; _i3++) {
197
+ complex.positions[_i3 * 6 + 5] = this.totalDistance;
198
+ }
199
+ }
200
+
201
+ complex.startIndex = complex.positions.length / 6;
202
+ return complex;
203
+ }
204
+ }, {
205
+ key: "simpleExtrude",
206
+ value: function simpleExtrude(points) {
207
+ var complex = this.complex;
208
+
209
+ if (points.length <= 1) {
210
+ return complex;
211
+ }
212
+
213
+ this.lastFlip = -1;
214
+ this.started = false;
215
+ this.normal = null;
216
+ this.totalDistance = 0;
217
+ var total = points.length;
218
+ var count = complex.startIndex;
219
+
220
+ for (var i = 1; i < total; i++) {
221
+ var last = points[i - 1];
222
+ var cur = points[i];
223
+ var next = i < points.length - 1 ? points[i + 1] : null;
224
+ var amt = this.simpleSegment(complex, count, last, cur, next);
225
+ count += amt;
226
+ }
227
+
228
+ if (this.dash) {
229
+ for (var _i4 = 0; _i4 < complex.positions.length / 6; _i4++) {
230
+ complex.positions[_i4 * 6 + 5] = this.totalDistance;
154
231
  }
155
232
  }
156
233
 
@@ -269,6 +346,65 @@ var ExtrudePolyline = function () {
269
346
  return count;
270
347
  }
271
348
  }, {
349
+ key: "simpleSegment",
350
+ value: function simpleSegment(complex, index, last, cur, next) {
351
+ var count = 0;
352
+ var indices = complex.indices;
353
+ var positions = complex.positions;
354
+ var normals = complex.normals;
355
+ var flatCur = aProjectFlat([cur[0], cur[1]]);
356
+ var flatLast = aProjectFlat([last[0], last[1]]);
357
+ direction(lineA, flatCur, flatLast);
358
+ var segmentDistance = 0;
359
+
360
+ if (this.dash) {
361
+ segmentDistance = this.lineSegmentDistance(flatCur, flatLast);
362
+ this.totalDistance += segmentDistance;
363
+ }
364
+
365
+ if (!this.normal) {
366
+ this.normal = vec2.create();
367
+ computeNormal(this.normal, lineA);
368
+ }
369
+
370
+ if (!this.started) {
371
+ this.started = true;
372
+ this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
373
+ }
374
+
375
+ indices.push(index + 0, index + 1, index + 2);
376
+
377
+ if (!next) {
378
+ computeNormal(this.normal, lineA);
379
+ this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
380
+ indices.push.apply(indices, _toConsumableArray(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
381
+ count += 2;
382
+ } else {
383
+ var flatNext = aProjectFlat([next[0], next[1]]);
384
+
385
+ if (isPointEqual(flatCur, flatNext)) {
386
+ vec2.add(flatNext, flatCur, vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)));
387
+ }
388
+
389
+ direction(lineB, flatNext, flatCur);
390
+
391
+ var _computeMiter3 = computeMiter(tangent, vec2.create(), lineA, lineB, this.thickness),
392
+ _computeMiter4 = _slicedToArray(_computeMiter3, 2),
393
+ miterLen = _computeMiter4[0],
394
+ miter = _computeMiter4[1];
395
+
396
+ var flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;
397
+ this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
398
+ indices.push.apply(indices, _toConsumableArray(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
399
+ flip = -1;
400
+ vec2.copy(this.normal, miter);
401
+ count += 2;
402
+ this.lastFlip = flip;
403
+ }
404
+
405
+ return count;
406
+ }
407
+ }, {
272
408
  key: "segment",
273
409
  value: function segment(complex, index, last, cur, next) {
274
410
  var count = 0;
@@ -340,10 +476,10 @@ var ExtrudePolyline = function () {
340
476
 
341
477
  direction(lineB, flatNext, flatCur);
342
478
 
343
- var _computeMiter3 = computeMiter(tangent, vec2.create(), lineA, lineB, this.thickness),
344
- _computeMiter4 = _slicedToArray(_computeMiter3, 2),
345
- miterLen = _computeMiter4[0],
346
- miter = _computeMiter4[1];
479
+ var _computeMiter5 = computeMiter(tangent, vec2.create(), lineA, lineB, this.thickness),
480
+ _computeMiter6 = _slicedToArray(_computeMiter5, 2),
481
+ miterLen = _computeMiter6[0],
482
+ miter = _computeMiter6[1];
347
483
 
348
484
  var flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;
349
485
  var bevel = joinBevel;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["aProjectFlat","vec2","tmp","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","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","push","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":";;;;;AAAA,SAASA,YAAT,QAA6B,gBAA7B;AACA,SAASC,IAAT,QAA2B,WAA3B;AACA,IAAMC,GAAG,GAAGD,IAAI,CAACE,MAAL,EAAZ;AACA,IAAMC,MAAM,GAAGH,IAAI,CAACE,MAAL,EAAf;AACA,IAAME,KAAK,GAAGJ,IAAI,CAACE,MAAL,EAAd;AACA,IAAMG,KAAK,GAAGL,IAAI,CAACE,MAAL,EAAd;AACA,IAAMI,OAAO,GAAGN,IAAI,CAACE,MAAL,EAAhB;AAEA,OAAO,SAASK,YAAT,CACLC,WADK,EAELC,KAFK,EAGLC,KAHK,EAILC,GAJK,EAKLC,SALK,EAMW;AAChBZ,EAAAA,IAAI,CAACa,GAAL,CAASL,WAAT,EAAsBE,KAAtB,EAA6BC,GAA7B;AACAX,EAAAA,IAAI,CAACc,SAAL,CAAeN,WAAf,EAA4BA,WAA5B;AACAC,EAAAA,KAAK,GAAGT,IAAI,CAACe,UAAL,CAAgB,CAACP,WAAW,CAAC,CAAD,CAA5B,EAAiCA,WAAW,CAAC,CAAD,CAA5C,CAAR;AACA,MAAMQ,MAAM,GAAGhB,IAAI,CAACe,UAAL,CAAgB,CAACL,KAAK,CAAC,CAAD,CAAtB,EAA2BA,KAAK,CAAC,CAAD,CAAhC,CAAf;AACA,SAAO,CAACE,SAAS,GAAGZ,IAAI,CAACiB,GAAL,CAASR,KAAT,EAAgBO,MAAhB,CAAb,EAAsCP,KAAtC,CAAP;AACD;AACD,OAAO,SAASS,aAAT,CAAuBC,GAAvB,EAAkCC,GAAlC,EAA6C;AAClD,SAAOpB,IAAI,CAACqB,GAAL,CAASF,GAAT,EAAc,CAACC,GAAG,CAAC,CAAD,CAAlB,EAAuBA,GAAG,CAAC,CAAD,CAA1B,CAAP;AACD;AAED,OAAO,SAASE,SAAT,CAAmBH,GAAnB,EAA8BI,CAA9B,EAAuCC,CAAvC,EAAgD;AACrDxB,EAAAA,IAAI,CAACyB,GAAL,CAASN,GAAT,EAAcI,CAAd,EAAiBC,CAAjB;AACAxB,EAAAA,IAAI,CAACc,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;AAkBnB,6BAAoD;AAAA,QAAxCC,IAAwC,uEAAJ,EAAI;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,sCANzB,CAAC,CAMwB;;AAAA,mCAL9BtC,IAAI,CAACe,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,CAK8B;;AAAA,qCAJzB,KAIyB;;AAAA,kCAH5B,KAG4B;;AAAA,2CAFpB,CAEoB;;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;AAJC,KAAf;AAMD;;;;WAED,wBAAsBC,MAAtB,EAA0CC,YAA1C,EAAoE;AAClE,UAAMN,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIK,MAAM,CAACjB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKO,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAACjB,MAArB;AACA,UAAIwB,KAAK,GAAGZ,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwB,KAApB,EAA2BxB,CAAC,EAA5B,EAAgC;AAC9B,YAAM0B,IAAI,GAAGR,MAAM,CAAClB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM2B,UAAU,GAAGR,YAAY,CAACnB,CAAC,GAAG,CAAL,CAA/B;AAEA,YAAM4B,GAAG,GAAGV,MAAM,CAAClB,CAAD,CAAlB;AACA,YAAM6B,SAAS,GAAGV,YAAY,CAACnB,CAAD,CAA9B;AAEA,YAAM8B,IAAI,GAAG9B,CAAC,GAAGkB,MAAM,CAACjB,MAAP,GAAgB,CAApB,GAAwBiB,MAAM,CAAClB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAM+B,UAAU,GACd/B,CAAC,GAAGmB,YAAY,CAAClB,MAAb,GAAsB,CAA1B,GAA8BkB,YAAY,CAACnB,CAAC,GAAG,CAAL,CAA1C,GAAoD,IADtD;AAGA,YAAMgC,GAAG,GAAG,KAAKC,cAAL,CACVpB,OADU,EAEVY,KAFU,EAGVC,IAHU,EAIVE,GAJU,EAKVE,IALU,EAMVH,UANU,EAOVE,SAPU,EAQVE,UARU,CAAZ;AAUAN,QAAAA,KAAK,IAAIO,GAAT;AACD;;AACD,UAAI,KAAKpB,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,KAAKuB,aAApC;AACD;AACF;;AACDV,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,iBAAeK,MAAf,EAAmC;AACjC,UAAML,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIK,MAAM,CAACjB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKO,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAACjB,MAArB;AACA,UAAIwB,KAAK,GAAGZ,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwB,KAApB,EAA2BxB,CAAC,EAA5B,EAAgC;AAC9B,YAAM0B,IAAI,GAAGR,MAAM,CAAClB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM4B,GAAG,GAAGV,MAAM,CAAClB,CAAD,CAAlB;AACA,YAAM8B,IAAI,GAAG9B,CAAC,GAAGkB,MAAM,CAACjB,MAAP,GAAgB,CAApB,GAAwBiB,MAAM,CAAClB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAMgC,GAAG,GAAG,KAAKE,OAAL,CAAarB,OAAb,EAAsBY,KAAtB,EAA6BC,IAA7B,EAAmCE,GAAnC,EAAwCE,IAAxC,CAAZ;AACAL,QAAAA,KAAK,IAAIO,GAAT;AACD;;AACD,UAAI,KAAKpB,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,KAAKuB,aAApC;AACD;AACF;;AACDV,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,wBACEA,OADF,EAEEsB,KAFF,EAGET,IAHF,EAIEE,GAJF,EAKEE,IALF,EAMEH,UANF,EAOEE,SAPF,EAQEE,UARF,EASE;AACA,UAAIN,KAAK,GAAG,CAAZ;AACA,UAAMV,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMoB,SAAS,GAAG,KAAK3B,GAAL,KAAa,QAA/B;AACA,UAAM4B,SAAS,GAAG,KAAK7B,IAAL,KAAc,OAAhC;AACA,UAAM8B,OAAO,GAAGtE,YAAY,CAAC,CAAC6D,SAAS,CAAC,CAAD,CAAV,EAAeA,SAAS,CAAC,CAAD,CAAxB,CAAD,CAA5B;AAIA,UAAMU,QAAQ,GAAGvE,YAAY,CAAC,CAAC2D,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAD,CAA7B;AAIApC,MAAAA,SAAS,CAAClB,KAAD,EAAQuD,GAAR,EAAqBF,IAArB,CAAT;AACA,UAAIc,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK5B,IAAT,EAAe;AACb4B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKhB,aAAL,IAAsBiB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKlB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcrD,IAAI,CAACE,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKgD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIe,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAGzE,IAAI,CAACE,MAAL,EAAb;AACA,cAAMwE,IAAI,GAAG1E,IAAI,CAACE,MAAL,EAAb;AACAF,UAAAA,IAAI,CAACa,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;AACAJ,UAAAA,IAAI,CAACa,GAAL,CAAS6D,IAAT,EAAe,KAAKrB,MAApB,EAA4BjD,KAA5B;AACA2C,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAMEe,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQAZ,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAMEe,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQD,SAxBD,MAwBO;AACL,eAAKmB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEU,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aAAL,GAAqBiB,eANvB;AAQD;AACF;;AAEDzB,MAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACL,IAAL,EAAW;AACT3C,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;;AACA,YAAI+D,SAAJ,EAAe;AACb,cAAMM,IAAI,GAAGzE,IAAI,CAACE,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAG1E,IAAI,CAACE,MAAL,EAAb;;AACAF,UAAAA,IAAI,CAACyB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;AACArD,UAAAA,IAAI,CAACa,GAAL,CAAS4D,IAAT,EAAerE,KAAf,EAAsB,KAAKiD,MAA3B;AAEAN,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AAEA5B,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAMEiB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAd,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAMEiB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQD,SAzBD,MAyBO;AACL,eAAKiB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIE,KAAKN,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aANP;AAQD;;AACDR,QAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,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;AAKAV,QAAAA,KAAK,IAAI,CAAT;AACD,OA3CD,MA2CO;AACL,YAAI9B,YAAY,CAACiC,GAAD,EAAcE,IAAd,CAAhB,EAA6C;AAC3C7D,UAAAA,IAAI,CAACa,GAAL,CACEgD,IADF,EAEEF,GAFF,EAGE3D,IAAI,CAACc,SAAL,CACE+C,IADF,EAEE7D,IAAI,CAAC6E,QAAL,CAAchB,IAAd,EAA4BF,GAA5B,EAAyCF,IAAzC,CAFF,CAHF;AAQD;;AACDnC,QAAAA,SAAS,CAACjB,KAAD,EAAQwD,IAAR,EAAsBF,GAAtB,CAAT;;AAGA,4BAA0BpD,YAAY,CACpCD,OADoC,EAEpCN,IAAI,CAACE,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG/E,IAAI,CAACiB,GAAL,CAASX,OAAT,EAAkB,KAAK+C,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI2B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAKzC,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM0C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAKxC,UAAjB,EAA6B;AAC3BuC,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTjC,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAN,UAAAA,OAAO,CAAC4B,IAAR,CAAalE,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AAEAoC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAd,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAb,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAC4B,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;AAOApB,UAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAhD,UAAAA,aAAa,CAACjB,GAAD,EAAMI,KAAN,CAAb;AACAL,UAAAA,IAAI,CAACkF,IAAL,CAAU,KAAK7B,MAAf,EAAuBpD,GAAvB;AACA8C,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAR,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAH,UAAAA,KAAK,IAAI,CAAT;AACD,SAzCD,MAyCO;AACL,eAAKoB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIElD,KAJF,EAKEqE,QALF,EAME,KAAKxB,aANP;AAQAR,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,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;AAGA/E,UAAAA,IAAI,CAACkF,IAAL,CAAU,KAAK7B,MAAf,EAAuB5C,KAAvB;AACA+C,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB4B,IAAhB;AACD;;AACD,aAAOvB,KAAP;AACD;;;WACD,iBACEZ,OADF,EAEEsB,KAFF,EAGET,IAHF,EAIEE,GAJF,EAKEE,IALF,EAME;AACA,UAAIL,KAAK,GAAG,CAAZ;AACA,UAAMV,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMoB,SAAS,GAAG,KAAK3B,GAAL,KAAa,QAA/B;AACA,UAAM4B,SAAS,GAAG,KAAK7B,IAAL,KAAc,OAAhC;AACA,UAAM8B,OAAO,GAAGtE,YAAY,CAAC,CAAC4D,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAD,CAA5B;AACA,UAAMW,QAAQ,GAAGvE,YAAY,CAAC,CAAC0D,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAD,CAA7B;AACAnC,MAAAA,SAAS,CAAClB,KAAD,EAAQiE,OAAR,EAAiBC,QAAjB,CAAT;AACA,UAAIC,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK5B,IAAT,EAAe;AACb4B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKhB,aAAL,IAAsBiB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKlB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcrD,IAAI,CAACE,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKgD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIe,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAGzE,IAAI,CAACE,MAAL,EAAb;AACA,cAAMwE,IAAI,GAAG1E,IAAI,CAACE,MAAL,EAAb;AACAF,UAAAA,IAAI,CAACa,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;AACAJ,UAAAA,IAAI,CAACa,GAAL,CAAS6D,IAAT,EAAe,KAAKrB,MAApB,EAA4BjD,KAA5B;AACA2C,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAMEe,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAQAZ,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGEA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAHZ,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAMEe,IAAI,CAAC,CAAD,CAAJ,GAAU,CANZ;AAWD,SA3BD,MA2BO;AACL,eAAKmB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEU,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aAAL,GAAqBiB,eANvB;AAQD;AACF;;AAEDzB,MAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACL,IAAL,EAAW;AACT3C,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;;AACA,YAAI+D,SAAJ,EAAe;AAGb,cAAMM,KAAI,GAAGzE,IAAI,CAACE,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAG1E,IAAI,CAACE,MAAL,EAAb;;AACAF,UAAAA,IAAI,CAACyB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;AACArD,UAAAA,IAAI,CAACa,GAAL,CAAS4D,KAAT,EAAerE,KAAf,EAAsB,KAAKiD,MAA3B;AAEAN,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAMEiB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAd,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAMEiB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQD,SA1BD,MA0BO;AACL,eAAKiB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIE,KAAKN,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aANP;AAQD;;AAGDR,QAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,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;AAKAV,QAAAA,KAAK,IAAI,CAAT;AACD,OA9CD,MA8CO;AACL,YAAM2B,QAAQ,GAAGpF,YAAY,CAAC,CAAC8D,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAD,CAA7B;;AACA,YAAInC,YAAY,CAAC2C,OAAD,EAAUc,QAAV,CAAhB,EAAqC;AACnCnF,UAAAA,IAAI,CAACa,GAAL,CACEsE,QADF,EAEEd,OAFF,EAGErE,IAAI,CAACc,SAAL,CAAeqE,QAAf,EAAyBnF,IAAI,CAAC6E,QAAL,CAAcM,QAAd,EAAwBd,OAAxB,EAAiCC,QAAjC,CAAzB,CAHF;AAKD;;AACDhD,QAAAA,SAAS,CAACjB,KAAD,EAAQ8E,QAAR,EAAkBd,OAAlB,CAAT;;AAIA,6BAA0B9D,YAAY,CACpCD,OADoC,EAEpCN,IAAI,CAACE,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG/E,IAAI,CAACiB,GAAL,CAASX,OAAT,EAAkB,KAAK+C,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI2B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAKzC,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM0C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAKxC,UAAjB,EAA6B;AAC3BuC,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTjC,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAN,UAAAA,OAAO,CAAC4B,IAAR,CAAalE,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AACAoC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAd,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAb,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAC4B,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;AAOApB,UAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAhD,UAAAA,aAAa,CAACjB,GAAD,EAAMI,KAAN,CAAb;AACAL,UAAAA,IAAI,CAACkF,IAAL,CAAU,KAAK7B,MAAf,EAAuBpD,GAAvB;AACA8C,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAR,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGEA,GAAG,CAAC,CAAD,CAAH,GAAS,CAHX,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAMEpB,GAAG,CAAC,CAAD,CAAH,GAAS,CANX;AAQAH,UAAAA,KAAK,IAAI,CAAT;AACD,SAxCD,MAwCO;AACL,eAAKoB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIElD,KAJF,EAKEqE,QALF,EAME,KAAKxB,aANP;AAQAR,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,qBACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,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;AAGA/E,UAAAA,IAAI,CAACkF,IAAL,CAAU,KAAK7B,MAAf,EAAuB5C,KAAvB;AACA+C,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB4B,IAAhB;AACD;;AACD,aAAOvB,KAAP;AACD;;;WACD,oBACEX,SADF,EAEEE,OAFF,EAGEqC,KAHF,EAIE/B,MAJF,EAKEX,SALF,EAME2C,aANF,EAOE;AACAtC,MAAAA,OAAO,CAAC4B,IAAR,CAAatB,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAN,MAAAA,OAAO,CAAC4B,IAAR,CAAatB,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAR,MAAAA,SAAS,CAAC8B,IAAV,CACES,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE,CAAC3C,SALH,EAME0C,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQAvC,MAAAA,SAAS,CAAC8B,IAAV,CACES,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE3C,SALF,EAME0C,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQD;;;WACD,6BAA4BE,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;;;;;;SAxjBkBpD,e","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 };\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\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 };\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] as vec3;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec3;\n const originCur = originPoints[i] as vec2;\n\n const next = i < points.length - 1 ? points[i + 1] : 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 last,\n cur,\n next as vec3,\n originLast,\n originCur,\n originNext as vec2,\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: vec2,\n originCur: vec2,\n originNext: vec2,\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 direction(lineA, cur as vec2, last as vec2);\n let segmentDistance = 0;\n if (this.dash) {\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 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 } 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 positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\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 if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n next as vec2,\n cur as vec2,\n vec2.normalize(\n next as vec2,\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\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 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 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 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 direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\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 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\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 positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\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 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 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 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 positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n }\n private lineSegmentDistance(b1: vec2, a1: vec2) {\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":["aProjectFlat","vec2","tmp","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","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","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 };\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\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 };\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 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 } 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 positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\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 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 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 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 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\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 positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\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 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 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 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 positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\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"}
@@ -17,6 +17,7 @@ exports.PointFillTriangulation = PointFillTriangulation;
17
17
  exports.PointImageTriangulation = PointImageTriangulation;
18
18
  exports.PolygonExtrudeTriangulation = PolygonExtrudeTriangulation;
19
19
  exports.RasterImageTriangulation = RasterImageTriangulation;
20
+ exports.SimpleLineTriangulation = SimpleLineTriangulation;
20
21
  exports.earthOuterTriangulation = earthOuterTriangulation;
21
22
  exports.earthTriangulation = earthTriangulation;
22
23
  exports.polygonTriangulation = polygonTriangulation;
@@ -140,6 +141,54 @@ function LineTriangulation(feature) {
140
141
  };
141
142
  }
142
143
 
144
+ function SimpleLineTriangulation(feature) {
145
+ var coordinates = feature.coordinates,
146
+ originCoordinates = feature.originCoordinates,
147
+ version = feature.version;
148
+ var line = new _extrude_polyline.default({
149
+ dash: true,
150
+ join: 'bevel'
151
+ });
152
+
153
+ if (version === 'GAODE2.x') {
154
+ var path1 = coordinates;
155
+
156
+ if (!Array.isArray(path1[0][0])) {
157
+ path1 = [coordinates];
158
+ }
159
+
160
+ var path2 = originCoordinates;
161
+
162
+ if (!Array.isArray(path2[0][0])) {
163
+ path2 = [originCoordinates];
164
+ }
165
+
166
+ for (var i = 0; i < path1.length; i++) {
167
+ var item1 = path1[i];
168
+ var item2 = path2[i];
169
+ line.simpleExtrude_gaode2(item1, item2);
170
+ }
171
+ } else {
172
+ var path = coordinates;
173
+
174
+ if (!Array.isArray(path[0][0])) {
175
+ path = [coordinates];
176
+ }
177
+
178
+ path.forEach(function (item) {
179
+ line.simpleExtrude(item);
180
+ });
181
+ }
182
+
183
+ var linebuffer = line.complex;
184
+ return {
185
+ vertices: linebuffer.positions,
186
+ indices: linebuffer.indices,
187
+ normals: linebuffer.normals,
188
+ size: 6
189
+ };
190
+ }
191
+
143
192
  function polygonTriangulation(feature) {
144
193
  var coordinates = feature.coordinates;
145
194