@antv/l7-layers 2.5.50 → 2.5.55
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.
- package/es/imagetile/utils/Tile.js +0 -2
- package/es/imagetile/utils/Tile.js.map +1 -1
- package/es/line/models/line.js +1 -1
- package/es/point/models/text.js +1 -1
- package/es/point/models/text.js.map +1 -1
- package/es/utils/extrude_polyline.js +16 -16
- package/es/utils/extrude_polyline.js.map +1 -1
- package/es/utils/symbol-layout.js +4 -4
- package/es/utils/symbol-layout.js.map +1 -1
- package/lib/imagetile/utils/Tile.js +0 -2
- package/lib/imagetile/utils/Tile.js.map +1 -1
- package/lib/line/models/line.js +1 -1
- package/lib/point/models/text.js +1 -1
- package/lib/point/models/text.js.map +1 -1
- package/lib/utils/extrude_polyline.js +16 -16
- package/lib/utils/extrude_polyline.js.map +1 -1
- package/lib/utils/symbol-layout.js +4 -4
- package/lib/utils/symbol-layout.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/point/models/text.ts"],"names":["TextTriangulation","feature","that","id","vertices","indices","glyphInfoMap","size","centroid","coord","length","glyphQuads","forEach","quad","index","push","tex","x","y","height","tl","width","tr","br","bl","TextModel","initGlyph","updateTexture","filterGlyphs","reBuildModel","layer","buildLayerModel","moduleName","vertexShader","textVert","fragmentShader","textFrag","triangulation","bind","depth","enable","blend","getBlend","getLayerConfig","opacity","stroke","strokeWidth","textAnchor","textAllowOverlap","halo","gamma","fontService","canvas","mapping","Object","keys","textCount","preTextStyle","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","rowCount","dataTexture","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_sdf_map","texture","u_halo_blur","u_gamma_scale","u_sdf_map_size","on","buildModels","extent","textExtent","zoom","mapService","getZoom","getBounds","flag","Math","abs","currentZoom","destroy","off","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","update","featureIdx","vertex","attributeIdx","rotate","Array","isArray","STATIC_DRAW","bounds","fontWeight","fontFamily","characterSet","item","shape","toString","char","indexOf","setFontOptions","iconfont","spacing","glyphInfo","map","textOffset","shaping","coordinates","originCentroid","version","originCoordinates","padding","rendererService","getViewportSize","collisionIndex","CollisionIndex","filterData","filter","fontScale","pixels","lngLatToContainer","placeCollisionBox","x1","left","x2","right","y1","top","y2","bottom","anchorPointX","anchorPointY","box","insertCollisionBox","initIconFontTex","initTextFont","generateGlyphLayout","textureHeight","mag","LINEAR","min","models","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n BlendType,\n gl,\n IEncodeFeature,\n ILayer,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { boundsContains, padBounds, rgb2arr } from '@antv/l7-utils';\nimport { isNumber, isString } from 'lodash';\nimport BaseModel, {\n styleColor,\n styleOffset,\n styleSingle,\n} from '../../core/BaseModel';\nimport CollisionIndex from '../../utils/collision-index';\nimport { calculateCentroid } from '../../utils/geo';\nimport {\n anchorType,\n getGlyphQuads,\n IGlyphQuad,\n shapeText,\n} from '../../utils/symbol-layout';\nimport textFrag from '../shaders/text_frag.glsl';\nimport textVert from '../shaders/text_vert.glsl';\ninterface IPointTextLayerStyleOptions {\n opacity: styleSingle;\n strokeWidth: styleSingle;\n stroke: styleColor;\n textOffset: [number, number];\n\n textAnchor: anchorType;\n spacing: number;\n padding: [number, number];\n halo: number;\n gamma: number;\n fontWeight: string;\n fontFamily: string;\n textAllowOverlap: boolean;\n}\nexport function TextTriangulation(feature: IEncodeFeature) {\n // @ts-ignore\n const that = this as TextModel;\n const id = feature.id as number;\n const vertices: number[] = [];\n const indices: number[] = [];\n\n if (!that.glyphInfoMap || !that.glyphInfoMap[id]) {\n return {\n vertices: [], // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices: [],\n size: 7,\n };\n }\n const centroid = that.glyphInfoMap[id].centroid as number[]; // 计算中心点\n const coord =\n centroid.length === 2 ? [centroid[0], centroid[1], 0] : centroid;\n that.glyphInfoMap[id].glyphQuads.forEach(\n (quad: IGlyphQuad, index: number) => {\n vertices.push(\n ...coord,\n quad.tex.x,\n quad.tex.y + quad.tex.height,\n quad.tl.x,\n quad.tl.y,\n ...coord,\n quad.tex.x + quad.tex.width,\n quad.tex.y + quad.tex.height,\n quad.tr.x,\n quad.tr.y,\n ...coord,\n quad.tex.x + quad.tex.width,\n quad.tex.y,\n quad.br.x,\n quad.br.y,\n ...coord,\n quad.tex.x,\n quad.tex.y,\n quad.bl.x,\n quad.bl.y,\n );\n indices.push(\n 0 + index * 4,\n 1 + index * 4,\n 2 + index * 4,\n 2 + index * 4,\n 3 + index * 4,\n 0 + index * 4,\n );\n },\n );\n return {\n vertices, // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices,\n size: 7,\n };\n}\n\nexport default class TextModel extends BaseModel {\n public glyphInfo: IEncodeFeature[];\n public glyphInfoMap: {\n [key: string]: {\n shaping: any;\n glyphQuads: IGlyphQuad[];\n centroid: number[];\n };\n } = {};\n private texture: ITexture2D;\n private currentZoom: number = -1;\n private extent: [[number, number], [number, number]];\n private textureHeight: number = 0;\n private textCount: number = 0;\n private preTextStyle: Partial<IPointTextLayerStyleOptions> = {};\n public getUninforms(): IModelUniform {\n const {\n opacity = 1.0,\n stroke = '#fff',\n strokeWidth = 0,\n textAnchor = 'center',\n textAllowOverlap = false,\n halo = 0.5,\n gamma = 2.0,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const { canvas, mapping } = this.fontService;\n if (Object.keys(mapping).length !== this.textCount) {\n this.updateTexture();\n this.textCount = Object.keys(mapping).length;\n }\n this.preTextStyle = {\n textAnchor,\n textAllowOverlap,\n };\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeWidth,\n stroke,\n })\n ) {\n this.judgeStyleAttributes({\n opacity,\n strokeWidth,\n stroke,\n });\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\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 0.0,\n u_stroke_color: this.getStrokeColor(stroke),\n\n u_sdf_map: this.texture,\n u_halo_blur: halo,\n u_gamma_scale: gamma,\n u_sdf_map_size: [canvas.width, canvas.height],\n };\n }\n\n public initModels(): IModel[] {\n this.layer.on('remapping', this.buildModels);\n this.extent = this.textExtent();\n const {\n textAnchor = 'center',\n textAllowOverlap = true,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n this.preTextStyle = {\n textAnchor,\n textAllowOverlap,\n };\n return this.buildModels();\n }\n\n public buildModels = () => {\n this.initGlyph();\n this.updateTexture();\n this.filterGlyphs();\n this.reBuildModel();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n triangulation: TextTriangulation.bind(this),\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n };\n public needUpdate() {\n const {\n textAllowOverlap = false,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n // textAllowOverlap 发生改变\n const zoom = this.mapService.getZoom();\n const extent = this.mapService.getBounds();\n const flag = boundsContains(this.extent, extent);\n // 文本不能压盖则进行过滤\n if (\n (!textAllowOverlap && (Math.abs(this.currentZoom - zoom) > 1 || !flag)) ||\n textAllowOverlap !== this.preTextStyle.textAllowOverlap\n ) {\n this.reBuildModel();\n return true;\n }\n return false;\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n this.layer.off('remapping', this.buildModels);\n }\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'rotate',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Rotate',\n buffer: {\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 { rotate = 0 } = feature;\n return Array.isArray(rotate) ? [rotate[0]] : [rotate as number];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'textOffsets',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_textOffsets',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_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 // console.log([vertex[5], vertex[6]])\n return [vertex[5], vertex[6]];\n },\n },\n });\n\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 = 12 } = 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: 'textUv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_tex',\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 private textExtent(): [[number, number], [number, number]] {\n const bounds = this.mapService.getBounds();\n return padBounds(bounds, 0.5);\n }\n /**\n * 生成文字纹理(生成文字纹理字典)\n */\n private initTextFont() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif',\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n const characterSet: string[] = [];\n data.forEach((item: IEncodeFeature) => {\n let { shape = '' } = item;\n shape = shape.toString();\n for (const char of shape) {\n // 去重\n if (characterSet.indexOf(char) === -1) {\n characterSet.push(char);\n }\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: false,\n });\n }\n\n /**\n * 生成 iconfont 纹理字典\n */\n private initIconFontTex() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif',\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n const characterSet: string[] = [];\n data.forEach((item: IEncodeFeature) => {\n let { shape = '' } = item;\n shape = `${shape}`;\n if (characterSet.indexOf(shape) === -1) {\n characterSet.push(shape);\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: true,\n });\n }\n\n /**\n * 生成文字布局(对照文字纹理字典提取对应文字的位置很好信息)\n */\n private generateGlyphLayout(iconfont: boolean) {\n // TODO:更新文字布局\n const { mapping } = this.fontService;\n const {\n spacing = 2,\n textAnchor = 'center',\n // textOffset,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n\n this.glyphInfo = data.map((feature: IEncodeFeature) => {\n const { shape = '', id, size = 1, textOffset = [0, 0] } = feature;\n\n const shaping = shapeText(\n shape.toString(),\n mapping,\n // @ts-ignore\n size,\n textAnchor,\n 'center',\n spacing,\n textOffset,\n iconfont,\n );\n const glyphQuads = getGlyphQuads(shaping, textOffset, false);\n feature.shaping = shaping;\n feature.glyphQuads = glyphQuads;\n // feature.centroid = calculteCentroid(coordinates);\n\n feature.centroid = calculateCentroid(feature.coordinates);\n\n // 此时地图高德2.0 originCentroid == centroid\n feature.originCentroid =\n feature.version === 'GAODE2.x'\n ? calculateCentroid(feature.originCoordinates)\n : (feature.originCentroid = feature.centroid);\n\n this.glyphInfoMap[id as number] = {\n shaping,\n glyphQuads,\n centroid: calculateCentroid(feature.coordinates),\n };\n return feature;\n });\n }\n /**\n * 文字避让 depend on originCentorid\n */\n private filterGlyphs() {\n const {\n padding = [4, 4],\n textAllowOverlap = false,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n if (textAllowOverlap) {\n // 如果允许文本覆盖\n // this.layer.setEncodedData(this.glyphInfo);\n return;\n }\n this.glyphInfoMap = {};\n this.currentZoom = this.mapService.getZoom();\n this.extent = this.textExtent();\n const { width, height } = this.rendererService.getViewportSize();\n const collisionIndex = new CollisionIndex(width, height);\n const filterData = this.glyphInfo.filter((feature: IEncodeFeature) => {\n const { shaping, id = 0 } = feature;\n // const centroid = feature.centroid as [number, number];\n // const centroid = feature.originCentroid as [number, number];\n const centroid = (feature.version === 'GAODE2.x'\n ? feature.originCentroid\n : feature.centroid) as [number, number];\n const size = feature.size as number;\n const fontScale: number = size / 24;\n const pixels = this.mapService.lngLatToContainer(centroid);\n const { box } = collisionIndex.placeCollisionBox({\n x1: shaping.left * fontScale - padding[0],\n x2: shaping.right * fontScale + padding[0],\n y1: shaping.top * fontScale - padding[1],\n y2: shaping.bottom * fontScale + padding[1],\n anchorPointX: pixels.x,\n anchorPointY: pixels.y,\n });\n if (box && box.length) {\n // TODO:featureIndex\n collisionIndex.insertCollisionBox(box, id);\n return true;\n } else {\n return false;\n }\n });\n filterData.forEach((item) => {\n // @ts-ignore\n this.glyphInfoMap[item.id as number] = item;\n });\n // this.layer.setEncodedData(filterData);\n }\n /**\n * 初始化文字布局\n */\n private initGlyph() {\n const { iconfont = false } = this.layer.getLayerConfig();\n // 1.生成文字纹理(或是生成 iconfont)\n iconfont ? this.initIconFontTex() : this.initTextFont();\n // this.initTextFont();\n\n // 2.生成文字布局\n this.generateGlyphLayout(iconfont);\n }\n /**\n * 更新文字纹理\n */\n private updateTexture() {\n const { createTexture2D } = this.rendererService;\n const { canvas } = this.fontService;\n this.textureHeight = canvas.height;\n if (this.texture) {\n this.texture.destroy();\n }\n\n this.texture = createTexture2D({\n data: canvas,\n mag: gl.LINEAR,\n min: gl.LINEAR,\n width: canvas.width,\n height: canvas.height,\n });\n }\n\n private reBuildModel() {\n this.filterGlyphs();\n this.layer.models = [\n this.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n triangulation: TextTriangulation.bind(this),\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n }\n}\n"],"file":"text.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/point/models/text.ts"],"names":["TextTriangulation","feature","that","id","vertices","indices","glyphInfoMap","size","centroid","coord","length","glyphQuads","forEach","quad","index","push","tex","x","y","height","tl","width","tr","br","bl","TextModel","initGlyph","updateTexture","filterGlyphs","reBuildModel","layer","buildLayerModel","moduleName","vertexShader","textVert","fragmentShader","textFrag","triangulation","bind","depth","enable","blend","getBlend","getLayerConfig","opacity","stroke","strokeWidth","textAnchor","textAllowOverlap","halo","gamma","fontService","canvas","mapping","Object","keys","textCount","preTextStyle","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","rowCount","dataTexture","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_sdf_map","texture","u_halo_blur","u_gamma_scale","u_sdf_map_size","on","buildModels","extent","textExtent","zoom","mapService","getZoom","getBounds","flag","Math","abs","currentZoom","destroy","off","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","update","featureIdx","vertex","attributeIdx","rotate","Array","isArray","STATIC_DRAW","bounds","fontWeight","fontFamily","characterSet","item","shape","toString","char","indexOf","setFontOptions","iconfont","spacing","glyphInfo","map","textOffset","shaping","coordinates","originCentroid","version","originCoordinates","padding","rendererService","getViewportSize","collisionIndex","CollisionIndex","filterData","filter","fontScale","pixels","lngLatToContainer","placeCollisionBox","x1","left","x2","right","y1","top","y2","bottom","anchorPointX","anchorPointY","box","insertCollisionBox","initIconFontTex","initTextFont","generateGlyphLayout","textureHeight","mag","LINEAR","min","models","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n BlendType,\n gl,\n IEncodeFeature,\n ILayer,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { boundsContains, padBounds, rgb2arr } from '@antv/l7-utils';\nimport { isNumber, isString } from 'lodash';\nimport BaseModel, {\n styleColor,\n styleOffset,\n styleSingle,\n} from '../../core/BaseModel';\nimport CollisionIndex from '../../utils/collision-index';\nimport { calculateCentroid } from '../../utils/geo';\nimport {\n anchorType,\n getGlyphQuads,\n IGlyphQuad,\n shapeText,\n} from '../../utils/symbol-layout';\nimport textFrag from '../shaders/text_frag.glsl';\nimport textVert from '../shaders/text_vert.glsl';\ninterface IPointTextLayerStyleOptions {\n opacity: styleSingle;\n strokeWidth: styleSingle;\n stroke: styleColor;\n textOffset: [number, number];\n\n textAnchor: anchorType;\n spacing: number;\n padding: [number, number];\n halo: number;\n gamma: number;\n fontWeight: string;\n fontFamily: string;\n textAllowOverlap: boolean;\n}\nexport function TextTriangulation(feature: IEncodeFeature) {\n // @ts-ignore\n const that = this as TextModel;\n const id = feature.id as number;\n const vertices: number[] = [];\n const indices: number[] = [];\n\n if (!that.glyphInfoMap || !that.glyphInfoMap[id]) {\n return {\n vertices: [], // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices: [],\n size: 7,\n };\n }\n const centroid = that.glyphInfoMap[id].centroid as number[]; // 计算中心点\n const coord =\n centroid.length === 2 ? [centroid[0], centroid[1], 0] : centroid;\n that.glyphInfoMap[id].glyphQuads.forEach(\n (quad: IGlyphQuad, index: number) => {\n vertices.push(\n ...coord,\n quad.tex.x,\n quad.tex.y + quad.tex.height,\n quad.tl.x,\n quad.tl.y,\n ...coord,\n quad.tex.x + quad.tex.width,\n quad.tex.y + quad.tex.height,\n quad.tr.x,\n quad.tr.y,\n ...coord,\n quad.tex.x + quad.tex.width,\n quad.tex.y,\n quad.br.x,\n quad.br.y,\n ...coord,\n quad.tex.x,\n quad.tex.y,\n quad.bl.x,\n quad.bl.y,\n );\n indices.push(\n 0 + index * 4,\n 1 + index * 4,\n 2 + index * 4,\n 2 + index * 4,\n 3 + index * 4,\n 0 + index * 4,\n );\n },\n );\n return {\n vertices, // [ x, y, z, tex.x,tex.y, offset.x. offset.y]\n indices,\n size: 7,\n };\n}\n\nexport default class TextModel extends BaseModel {\n public glyphInfo: IEncodeFeature[];\n public glyphInfoMap: {\n [key: string]: {\n shaping: any;\n glyphQuads: IGlyphQuad[];\n centroid: number[];\n };\n } = {};\n private texture: ITexture2D;\n private currentZoom: number = -1;\n private extent: [[number, number], [number, number]];\n private textureHeight: number = 0;\n private textCount: number = 0;\n private preTextStyle: Partial<IPointTextLayerStyleOptions> = {};\n public getUninforms(): IModelUniform {\n const {\n opacity = 1.0,\n stroke = '#fff',\n strokeWidth = 0,\n textAnchor = 'center',\n textAllowOverlap = false,\n halo = 0.5,\n gamma = 2.0,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const { canvas, mapping } = this.fontService;\n if (Object.keys(mapping).length !== this.textCount) {\n this.updateTexture();\n this.textCount = Object.keys(mapping).length;\n }\n this.preTextStyle = {\n textAnchor,\n textAllowOverlap,\n };\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeWidth,\n stroke,\n })\n ) {\n this.judgeStyleAttributes({\n opacity,\n strokeWidth,\n stroke,\n });\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\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 0.0,\n u_stroke_color: this.getStrokeColor(stroke),\n\n u_sdf_map: this.texture,\n u_halo_blur: halo,\n u_gamma_scale: gamma,\n u_sdf_map_size: [canvas.width, canvas.height],\n };\n }\n\n public initModels(): IModel[] {\n this.layer.on('remapping', this.buildModels);\n this.extent = this.textExtent();\n const {\n textAnchor = 'center',\n textAllowOverlap = true,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n this.preTextStyle = {\n textAnchor,\n textAllowOverlap,\n };\n return this.buildModels();\n }\n\n public buildModels = () => {\n this.initGlyph();\n this.updateTexture();\n this.filterGlyphs();\n this.reBuildModel();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n triangulation: TextTriangulation.bind(this),\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n };\n public needUpdate() {\n const {\n textAllowOverlap = false,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n // textAllowOverlap 发生改变\n const zoom = this.mapService.getZoom();\n const extent = this.mapService.getBounds();\n const flag = boundsContains(this.extent, extent);\n // 文本不能压盖则进行过滤\n if (\n (!textAllowOverlap && (Math.abs(this.currentZoom - zoom) > 1 || !flag)) ||\n textAllowOverlap !== this.preTextStyle.textAllowOverlap\n ) {\n this.reBuildModel();\n return true;\n }\n return false;\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n this.layer.off('remapping', this.buildModels);\n }\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'rotate',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Rotate',\n buffer: {\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 { rotate = 0 } = feature;\n return Array.isArray(rotate) ? [rotate[0]] : [rotate as number];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'textOffsets',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_textOffsets',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_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 // console.log([vertex[5], vertex[6]])\n return [vertex[5], vertex[6]];\n },\n },\n });\n\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 = 12 } = 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: 'textUv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_tex',\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 private textExtent(): [[number, number], [number, number]] {\n const bounds = this.mapService.getBounds();\n return padBounds(bounds, 0.5);\n }\n /**\n * 生成文字纹理(生成文字纹理字典)\n */\n private initTextFont() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif',\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n const characterSet: string[] = [];\n data.forEach((item: IEncodeFeature) => {\n let { shape = '' } = item;\n shape = shape.toString();\n for (const char of shape) {\n // 去重\n if (characterSet.indexOf(char) === -1) {\n characterSet.push(char);\n }\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: false,\n });\n }\n\n /**\n * 生成 iconfont 纹理字典\n */\n private initIconFontTex() {\n const {\n fontWeight = '400',\n fontFamily = 'sans-serif',\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n const characterSet: string[] = [];\n data.forEach((item: IEncodeFeature) => {\n let { shape = '' } = item;\n shape = `${shape}`;\n if (characterSet.indexOf(shape) === -1) {\n characterSet.push(shape);\n }\n });\n this.fontService.setFontOptions({\n characterSet,\n fontWeight,\n fontFamily,\n iconfont: true,\n });\n }\n\n /**\n * 生成文字布局(对照文字纹理字典提取对应文字的位置很好信息)\n */\n private generateGlyphLayout(iconfont: boolean) {\n // TODO:更新文字布局\n const { mapping } = this.fontService;\n const {\n spacing = 2,\n textAnchor = 'center',\n // textOffset,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n const data = this.layer.getEncodedData();\n\n this.glyphInfo = data.map((feature: IEncodeFeature) => {\n const { shape = '', id, size = 1, textOffset = [0, 0] } = feature;\n\n const shaping = shapeText(\n shape.toString(),\n mapping,\n // @ts-ignore\n size,\n textAnchor,\n 'left',\n spacing,\n textOffset,\n iconfont,\n );\n const glyphQuads = getGlyphQuads(shaping, textOffset, false);\n feature.shaping = shaping;\n feature.glyphQuads = glyphQuads;\n // feature.centroid = calculteCentroid(coordinates);\n\n feature.centroid = calculateCentroid(feature.coordinates);\n\n // 此时地图高德2.0 originCentroid == centroid\n feature.originCentroid =\n feature.version === 'GAODE2.x'\n ? calculateCentroid(feature.originCoordinates)\n : (feature.originCentroid = feature.centroid);\n\n this.glyphInfoMap[id as number] = {\n shaping,\n glyphQuads,\n centroid: calculateCentroid(feature.coordinates),\n };\n return feature;\n });\n }\n /**\n * 文字避让 depend on originCentorid\n */\n private filterGlyphs() {\n const {\n padding = [4, 4],\n textAllowOverlap = false,\n } = this.layer.getLayerConfig() as IPointTextLayerStyleOptions;\n if (textAllowOverlap) {\n // 如果允许文本覆盖\n // this.layer.setEncodedData(this.glyphInfo);\n return;\n }\n this.glyphInfoMap = {};\n this.currentZoom = this.mapService.getZoom();\n this.extent = this.textExtent();\n const { width, height } = this.rendererService.getViewportSize();\n const collisionIndex = new CollisionIndex(width, height);\n const filterData = this.glyphInfo.filter((feature: IEncodeFeature) => {\n const { shaping, id = 0 } = feature;\n // const centroid = feature.centroid as [number, number];\n // const centroid = feature.originCentroid as [number, number];\n const centroid = (feature.version === 'GAODE2.x'\n ? feature.originCentroid\n : feature.centroid) as [number, number];\n const size = feature.size as number;\n const fontScale: number = size / 24;\n const pixels = this.mapService.lngLatToContainer(centroid);\n const { box } = collisionIndex.placeCollisionBox({\n x1: shaping.left * fontScale - padding[0],\n x2: shaping.right * fontScale + padding[0],\n y1: shaping.top * fontScale - padding[1],\n y2: shaping.bottom * fontScale + padding[1],\n anchorPointX: pixels.x,\n anchorPointY: pixels.y,\n });\n if (box && box.length) {\n // TODO:featureIndex\n collisionIndex.insertCollisionBox(box, id);\n return true;\n } else {\n return false;\n }\n });\n filterData.forEach((item) => {\n // @ts-ignore\n this.glyphInfoMap[item.id as number] = item;\n });\n // this.layer.setEncodedData(filterData);\n }\n /**\n * 初始化文字布局\n */\n private initGlyph() {\n const { iconfont = false } = this.layer.getLayerConfig();\n // 1.生成文字纹理(或是生成 iconfont)\n iconfont ? this.initIconFontTex() : this.initTextFont();\n // this.initTextFont();\n\n // 2.生成文字布局\n this.generateGlyphLayout(iconfont);\n }\n /**\n * 更新文字纹理\n */\n private updateTexture() {\n const { createTexture2D } = this.rendererService;\n const { canvas } = this.fontService;\n this.textureHeight = canvas.height;\n if (this.texture) {\n this.texture.destroy();\n }\n\n this.texture = createTexture2D({\n data: canvas,\n mag: gl.LINEAR,\n min: gl.LINEAR,\n width: canvas.width,\n height: canvas.height,\n });\n }\n\n private reBuildModel() {\n this.filterGlyphs();\n this.layer.models = [\n this.layer.buildLayerModel({\n moduleName: 'pointText',\n vertexShader: textVert,\n fragmentShader: textFrag,\n triangulation: TextTriangulation.bind(this),\n depth: { enable: false },\n blend: this.getBlend(),\n }),\n ];\n }\n}\n"],"file":"text.js"}
|
|
@@ -214,8 +214,8 @@ var ExtrudePolyline = function () {
|
|
|
214
214
|
|
|
215
215
|
normals.push(out2[0], out2[1], 0);
|
|
216
216
|
normals.push(out1[0], out1[1], 0);
|
|
217
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
218
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
217
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
218
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
219
219
|
} else {
|
|
220
220
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
221
221
|
}
|
|
@@ -237,8 +237,8 @@ var ExtrudePolyline = function () {
|
|
|
237
237
|
|
|
238
238
|
normals.push(_out2[0], _out2[1], 0);
|
|
239
239
|
normals.push(_out[0], _out[1], 0);
|
|
240
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
241
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
240
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
241
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
242
242
|
} else {
|
|
243
243
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
244
244
|
}
|
|
@@ -271,8 +271,8 @@ var ExtrudePolyline = function () {
|
|
|
271
271
|
if (bevel) {
|
|
272
272
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
273
273
|
normals.push(miter[0], miter[1], 0);
|
|
274
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
275
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
274
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
275
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
276
276
|
indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
277
277
|
indices.push(index + 2, index + 3, index + 4);
|
|
278
278
|
computeNormal(tmp, lineB);
|
|
@@ -280,7 +280,7 @@ var ExtrudePolyline = function () {
|
|
|
280
280
|
_glMatrix.vec2.copy(this.normal, tmp);
|
|
281
281
|
|
|
282
282
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
283
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
283
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
284
284
|
count += 3;
|
|
285
285
|
} else {
|
|
286
286
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -335,8 +335,8 @@ var ExtrudePolyline = function () {
|
|
|
335
335
|
|
|
336
336
|
normals.push(out2[0], out2[1], 0);
|
|
337
337
|
normals.push(out1[0], out1[1], 0);
|
|
338
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
339
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
338
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
339
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
340
340
|
} else {
|
|
341
341
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
342
342
|
}
|
|
@@ -358,8 +358,8 @@ var ExtrudePolyline = function () {
|
|
|
358
358
|
|
|
359
359
|
normals.push(_out4[0], _out4[1], 0);
|
|
360
360
|
normals.push(_out3[0], _out3[1], 0);
|
|
361
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
362
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
361
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
362
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
363
363
|
} else {
|
|
364
364
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
365
365
|
}
|
|
@@ -394,8 +394,8 @@ var ExtrudePolyline = function () {
|
|
|
394
394
|
if (bevel) {
|
|
395
395
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
396
396
|
normals.push(miter[0], miter[1], 0);
|
|
397
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
398
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
397
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
398
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
399
399
|
indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
400
400
|
indices.push(index + 2, index + 3, index + 4);
|
|
401
401
|
computeNormal(tmp, lineB);
|
|
@@ -403,7 +403,7 @@ var ExtrudePolyline = function () {
|
|
|
403
403
|
_glMatrix.vec2.copy(this.normal, tmp);
|
|
404
404
|
|
|
405
405
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
406
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
406
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
407
407
|
count += 3;
|
|
408
408
|
} else {
|
|
409
409
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -425,8 +425,8 @@ var ExtrudePolyline = function () {
|
|
|
425
425
|
value: function extrusions(positions, normals, point, normal, thickness, distanceRadio) {
|
|
426
426
|
normals.push(normal[0], normal[1], 0);
|
|
427
427
|
normals.push(normal[0], normal[1], 0);
|
|
428
|
-
positions.push(point[0], point[1], 0, distanceRadio, -thickness, 0);
|
|
429
|
-
positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);
|
|
428
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, -thickness, point[2] | 0);
|
|
429
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, thickness, point[2] | 0);
|
|
430
430
|
}
|
|
431
431
|
}, {
|
|
432
432
|
key: "lineSegmentDistance",
|
|
@@ -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","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;;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;AAkBnB,6BAAoD;AAAA,QAAxCC,IAAwC,uEAAJ,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDANzB,CAAC,CAMwB;AAAA,iDAL9BrC,eAAKc,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,CAK8B;AAAA,mDAJzB,KAIyB;AAAA,gDAH5B,KAG4B;AAAA,yDAFpB,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,GAAG,2BAAa,CAACT,SAAS,CAAC,CAAD,CAAV,EAAeA,SAAS,CAAC,CAAD,CAAxB,CAAb,CAAhB;AAIA,UAAMU,QAAQ,GAAG,2BAAa,CAACZ,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAb,CAAjB;AAIApC,MAAAA,SAAS,CAAClB,KAAD,EAAQuD,GAAR,EAAaF,IAAb,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,GAAcpD,eAAKC,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,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,IAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;;AACAH,yBAAKY,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,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAME,CANF;AAQD,SAxBD,MAwBO;AACL,eAAKkC,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,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;;AACApD,yBAAKY,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQD,SAzBD,MAyBO;AACL,eAAKkC,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,mCACD,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,EAAME,IAAN,CAAhB,EAA6B;AAC3B5D,yBAAKY,GAAL,CACEgD,IADF,EAEEF,GAFF,EAGE1D,eAAKa,SAAL,CAAe+C,IAAf,EAAqB5D,eAAK4E,QAAL,CAAchB,IAAd,EAAoBF,GAApB,EAAyBF,IAAzB,CAArB,CAHF;AAKD;;AACDnC,QAAAA,SAAS,CAACjB,KAAD,EAAQwD,IAAR,EAAcF,GAAd,CAAT;;AAGA,4BAA0BpD,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG9E,eAAKgB,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAlC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAME,CANF;AAQAjC,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,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,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuBrD,GAAvB;;AACA+C,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAvB,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,mCACD,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;;AAGA9E,yBAAKiF,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,GAAG,2BAAa,CAACV,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAb,CAAhB;AACA,UAAMW,QAAQ,GAAG,2BAAa,CAACb,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;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,GAAcpD,eAAKC,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,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,IAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;;AACAH,yBAAKY,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,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAME,CANF;AAWD,SA3BD,MA2BO;AACL,eAAKkC,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,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;;AACApD,yBAAKY,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQD,SA1BD,MA0BO;AACL,eAAKkC,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,mCACD,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,GAAG,2BAAa,CAACtB,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;;AACA,YAAInC,YAAY,CAAC2C,OAAD,EAAUc,QAAV,CAAhB,EAAqC;AACnClF,yBAAKY,GAAL,CACEsE,QADF,EAEEd,OAFF,EAGEpE,eAAKa,SAAL,CAAeqE,QAAf,EAAyBlF,eAAK4E,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,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG9E,eAAKgB,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAlC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAME,CANF;AAQAjC,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,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,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuBrD,GAAvB;;AACA+C,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,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAvB,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,mCACD,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;;AAGA9E,yBAAKiF,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,CAAeS,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,EAAmC,CAAnC,EAAsCC,aAAtC,EAAqD,CAAC3C,SAAtD,EAAiE,CAAjE;AACAG,MAAAA,SAAS,CAAC8B,IAAV,CAAeS,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,EAAmC,CAAnC,EAAsCC,aAAtC,EAAqD3C,SAArD,EAAgE,CAAhE;AACD;;;WACD,6BAA4B4C,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 } 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 vec2;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec2;\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 vec2,\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 vec2;\n const cur = points[i] as vec2;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec2);\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: vec2,\n cur: vec2,\n next: vec2,\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, last);\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 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 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 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 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, next)) {\n vec2.add(\n next,\n cur,\n vec2.normalize(next, vec2.subtract(next, cur, last)),\n );\n }\n direction(lineB, next, cur);\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 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 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 0,\n this.totalDistance,\n -this.thickness * flip,\n 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: vec2,\n cur: vec2,\n next: 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([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 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 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 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 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 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 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 0,\n this.totalDistance,\n -this.thickness * flip,\n 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: vec2, // 顶点\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(point[0], point[1], 0, distanceRadio, -thickness, 0);\n positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);\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":["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","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":"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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] 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"}
|
|
@@ -127,7 +127,7 @@ function shapeLines(shaping, glyphMap, lines, lineHeight, textAnchor, textJustif
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
x = 0;
|
|
130
|
-
y
|
|
130
|
+
y -= lineHeight + 5;
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
var _getAnchorAlignment = getAnchorAlignment(textAnchor),
|
|
@@ -137,7 +137,7 @@ function shapeLines(shaping, glyphMap, lines, lineHeight, textAnchor, textJustif
|
|
|
137
137
|
align(positionedGlyphs, justify, horizontalAlign, verticalAlign, maxLineLength, lineHeight, lines.length);
|
|
138
138
|
var height = y - yOffset;
|
|
139
139
|
shaping.top += -verticalAlign * height;
|
|
140
|
-
shaping.bottom = shaping.top
|
|
140
|
+
shaping.bottom = shaping.top - height;
|
|
141
141
|
shaping.left += -horizontalAlign * maxLineLength;
|
|
142
142
|
shaping.right = shaping.left + maxLineLength;
|
|
143
143
|
}
|
|
@@ -173,7 +173,7 @@ function shapeIconFont(shaping, glyphMap, iconfonts, lineHeight, textAnchor, tex
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
x = 0;
|
|
176
|
-
y
|
|
176
|
+
y -= lineHeight + 5;
|
|
177
177
|
});
|
|
178
178
|
|
|
179
179
|
var _getAnchorAlignment2 = getAnchorAlignment(textAnchor),
|
|
@@ -183,7 +183,7 @@ function shapeIconFont(shaping, glyphMap, iconfonts, lineHeight, textAnchor, tex
|
|
|
183
183
|
align(positionedGlyphs, justify, horizontalAlign, verticalAlign, maxLineLength, lineHeight, iconfonts.length);
|
|
184
184
|
var height = y - yOffset;
|
|
185
185
|
shaping.top += -verticalAlign * height;
|
|
186
|
-
shaping.bottom = shaping.top
|
|
186
|
+
shaping.bottom = shaping.top - height;
|
|
187
187
|
shaping.left += -horizontalAlign * maxLineLength;
|
|
188
188
|
shaping.right = shaping.left + maxLineLength;
|
|
189
189
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y += lineHeight;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top + height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y += lineHeight;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top + height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antv/l7-layers",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.55",
|
|
4
4
|
"description": "L7's collection of built-in layers",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@antv/geo-coord": "^1.0.8",
|
|
27
|
-
"@antv/l7-core": "^2.5.
|
|
28
|
-
"@antv/l7-source": "^2.5.
|
|
29
|
-
"@antv/l7-utils": "^2.5.
|
|
27
|
+
"@antv/l7-core": "^2.5.55",
|
|
28
|
+
"@antv/l7-source": "^2.5.55",
|
|
29
|
+
"@antv/l7-utils": "^2.5.55",
|
|
30
30
|
"@babel/runtime": "^7.7.7",
|
|
31
31
|
"@mapbox/martini": "^0.2.0",
|
|
32
32
|
"@turf/meta": "^6.0.2",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@types/gl-matrix": "^2.4.5",
|
|
53
53
|
"@types/lodash": "^4.14.138"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "a64556a22fe1b54c1aec969329a183791464a7a3",
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
}
|