@antv/l7-layers 2.6.33 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/es/core/triangulation.d.ts +6 -0
  2. package/es/core/triangulation.js +47 -0
  3. package/es/core/triangulation.js.map +1 -1
  4. package/es/line/index.d.ts +1 -1
  5. package/es/line/index.js +1 -0
  6. package/es/line/index.js.map +1 -1
  7. package/es/line/models/index.d.ts +1 -1
  8. package/es/line/models/index.js +3 -1
  9. package/es/line/models/index.js.map +1 -1
  10. package/es/line/models/line.d.ts +0 -1
  11. package/es/line/models/line.js +5 -32
  12. package/es/line/models/line.js.map +1 -1
  13. package/es/line/models/simpleLine.d.ts +10 -0
  14. package/es/line/models/simpleLine.js +221 -0
  15. package/es/line/models/simpleLine.js.map +1 -0
  16. package/es/line/models/wall.js +1 -1
  17. package/es/plugins/PixelPickingPlugin.js +24 -7
  18. package/es/plugins/PixelPickingPlugin.js.map +1 -1
  19. package/es/point/models/fill.js +4 -0
  20. package/es/point/models/fill.js.map +1 -1
  21. package/es/point/models/icon-font.js +1 -1
  22. package/es/point/models/image.js +1 -1
  23. package/es/utils/extrude_polyline.d.ts +13 -0
  24. package/es/utils/extrude_polyline.js +143 -7
  25. package/es/utils/extrude_polyline.js.map +1 -1
  26. package/lib/core/triangulation.js +49 -0
  27. package/lib/core/triangulation.js.map +1 -1
  28. package/lib/line/index.js +1 -0
  29. package/lib/line/index.js.map +1 -1
  30. package/lib/line/models/index.js +4 -1
  31. package/lib/line/models/index.js.map +1 -1
  32. package/lib/line/models/line.js +5 -32
  33. package/lib/line/models/line.js.map +1 -1
  34. package/lib/line/models/simpleLine.js +237 -0
  35. package/lib/line/models/simpleLine.js.map +1 -0
  36. package/lib/line/models/wall.js +1 -1
  37. package/lib/plugins/PixelPickingPlugin.js +24 -7
  38. package/lib/plugins/PixelPickingPlugin.js.map +1 -1
  39. package/lib/point/models/fill.js +4 -0
  40. package/lib/point/models/fill.js.map +1 -1
  41. package/lib/point/models/icon-font.js +1 -1
  42. package/lib/point/models/image.js +1 -1
  43. package/lib/utils/extrude_polyline.js +145 -7
  44. package/lib/utils/extrude_polyline.js.map +1 -1
  45. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/PixelPickingPlugin.ts"],"names":["PickingStage","NONE","ENCODE","HIGHLIGHT","PixelPickingPlugin","layer","rendererService","styleAttributeService","hooks","init","tap","getLayerConfig","enablePicking","registerStyleAttribute","name","type","AttributeType","Attribute","descriptor","buffer","data","gl","FLOAT","size","update","feature","featureIdx","id","beforePickingEncode","isVisible","models","forEach","model","addUniforms","u_PickingStage","afterPickingEncode","beforeHighlight","pickedColor","highlightColor","activeMix","highlightColorInArray","updateLayerConfig","pickedFeatureID","Uint8Array","u_PickingColor","u_HighlightColor","map","c","u_activeMix","beforeSelect","selectColor","selectMix"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ILayer,\n ILayerPlugin,\n IRendererService,\n IStyleAttributeService,\n} from '@antv/l7-core';\nimport {\n decodePickingColor,\n encodePickingColor,\n rgb2arr,\n} from '@antv/l7-utils';\nimport { injectable } from 'inversify';\nimport 'reflect-metadata';\n\nconst PickingStage = {\n NONE: 0.0,\n ENCODE: 1.0,\n HIGHLIGHT: 2.0,\n};\n\n@injectable()\nexport default class PixelPickingPlugin implements ILayerPlugin {\n public apply(\n layer: ILayer,\n {\n rendererService,\n styleAttributeService,\n }: {\n rendererService: IRendererService;\n styleAttributeService: IStyleAttributeService;\n },\n ) {\n // TODO: 由于 Shader 目前无法根据是否开启拾取进行内容修改,因此即使不开启也需要生成 a_PickingColor\n layer.hooks.init.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n styleAttributeService.registerStyleAttribute({\n name: 'pickingColor',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_PickingColor',\n buffer: {\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // TODO: 固定 feature range 范围内的 pickingColor 都是固定的,可以生成 cache\n update: (feature: IEncodeFeature, featureIdx: number) => {\n // 只有开启拾取才需要 encode\n const { id } = feature;\n return enablePicking ? encodePickingColor(id as number) : [0, 0, 0];\n },\n },\n });\n });\n // 必须要与 PixelPickingPass 结合使用,因此必须开启 multiPassRenderer\n // if (layer.multiPassRenderer) {\n layer.hooks.beforePickingEncode.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n if (enablePicking && layer.isVisible()) {\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.ENCODE,\n }),\n );\n }\n });\n\n layer.hooks.afterPickingEncode.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n // 区分选中高亮 和滑过高亮\n if (enablePicking && layer.isVisible()) {\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n }),\n );\n }\n });\n\n layer.hooks.beforeHighlight.tap(\n 'PixelPickingPlugin',\n (pickedColor: number[]) => {\n const { highlightColor, activeMix = 0 } = layer.getLayerConfig();\n const highlightColorInArray =\n typeof highlightColor === 'string'\n ? rgb2arr(highlightColor)\n : highlightColor || [1, 0, 0, 1];\n layer.updateLayerConfig({\n pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor)),\n });\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n u_PickingColor: pickedColor,\n u_HighlightColor: highlightColorInArray.map((c) => c * 255),\n u_activeMix: activeMix,\n }),\n );\n },\n );\n\n layer.hooks.beforeSelect.tap(\n 'PixelPickingPlugin',\n (pickedColor: number[]) => {\n const { selectColor, selectMix = 0 } = layer.getLayerConfig();\n const highlightColorInArray =\n typeof selectColor === 'string'\n ? rgb2arr(selectColor)\n : selectColor || [1, 0, 0, 1];\n layer.updateLayerConfig({\n pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor)),\n });\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n u_PickingColor: pickedColor,\n u_HighlightColor: highlightColorInArray.map((c) => c * 255),\n u_activeMix: selectMix,\n }),\n );\n },\n );\n // }\n }\n}\n"],"file":"PixelPickingPlugin.js"}
1
+ {"version":3,"sources":["../../src/plugins/PixelPickingPlugin.ts"],"names":["PickingStage","NONE","ENCODE","HIGHLIGHT","PixelPickingPlugin","layer","rendererService","styleAttributeService","hooks","init","tap","getLayerConfig","enablePicking","registerStyleAttribute","name","type","AttributeType","Attribute","descriptor","buffer","data","gl","FLOAT","size","update","feature","featureIdx","id","beforePickingEncode","isVisible","models","forEach","model","addUniforms","u_PickingStage","afterPickingEncode","beforeHighlight","pickedColor","highlightColor","activeMix","enableSelect","highlightColorInArray","selectColor","selectColorInArray","updateLayerConfig","pickedFeatureID","Uint8Array","currentSelectedId","getCurrentSelectedId","u_PickingColor","u_HighlightColor","map","c","u_activeMix","u_CurrentSelectedId","u_SelectColor","u_EnableSelect","beforeSelect","selectMix"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n ILayer,\n ILayerPlugin,\n IRendererService,\n IStyleAttributeService,\n} from '@antv/l7-core';\nimport {\n decodePickingColor,\n encodePickingColor,\n rgb2arr,\n} from '@antv/l7-utils';\nimport { injectable } from 'inversify';\nimport 'reflect-metadata';\n\nconst PickingStage = {\n NONE: 0.0,\n ENCODE: 1.0,\n HIGHLIGHT: 2.0,\n};\n\n@injectable()\nexport default class PixelPickingPlugin implements ILayerPlugin {\n public apply(\n layer: ILayer,\n {\n rendererService,\n styleAttributeService,\n }: {\n rendererService: IRendererService;\n styleAttributeService: IStyleAttributeService;\n },\n ) {\n // TODO: 由于 Shader 目前无法根据是否开启拾取进行内容修改,因此即使不开启也需要生成 a_PickingColor\n layer.hooks.init.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n styleAttributeService.registerStyleAttribute({\n name: 'pickingColor',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_PickingColor',\n buffer: {\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // TODO: 固定 feature range 范围内的 pickingColor 都是固定的,可以生成 cache\n update: (feature: IEncodeFeature, featureIdx: number) => {\n // 只有开启拾取才需要 encode\n const { id } = feature;\n return enablePicking ? encodePickingColor(id as number) : [0, 0, 0];\n },\n },\n });\n });\n // 必须要与 PixelPickingPass 结合使用,因此必须开启 multiPassRenderer\n // if (layer.multiPassRenderer) {\n layer.hooks.beforePickingEncode.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n if (enablePicking && layer.isVisible()) {\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.ENCODE,\n }),\n );\n }\n });\n\n layer.hooks.afterPickingEncode.tap('PixelPickingPlugin', () => {\n const { enablePicking } = layer.getLayerConfig();\n // 区分选中高亮 和滑过高亮\n if (enablePicking && layer.isVisible()) {\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n }),\n );\n }\n });\n\n layer.hooks.beforeHighlight.tap(\n 'PixelPickingPlugin',\n (pickedColor: number[]) => {\n const {\n highlightColor,\n activeMix = 0,\n enableSelect,\n } = layer.getLayerConfig();\n const highlightColorInArray =\n typeof highlightColor === 'string'\n ? rgb2arr(highlightColor)\n : highlightColor || [1, 0, 0, 1];\n\n const { selectColor } = layer.getLayerConfig();\n const selectColorInArray =\n typeof selectColor === 'string'\n ? rgb2arr(selectColor)\n : selectColor || [1, 0, 0, 1];\n layer.updateLayerConfig({\n pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor)),\n });\n const currentSelectedId = layer.getCurrentSelectedId();\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n u_PickingColor: pickedColor,\n u_HighlightColor: highlightColorInArray.map((c) => c * 255),\n u_activeMix: activeMix,\n u_CurrentSelectedId: currentSelectedId\n ? encodePickingColor(layer.getCurrentSelectedId()!)\n : [0, 0, 0],\n u_SelectColor: selectColorInArray.map((c) => c * 255),\n u_EnableSelect: +(enableSelect || false),\n }),\n );\n },\n );\n\n layer.hooks.beforeSelect.tap(\n 'PixelPickingPlugin',\n (pickedColor: number[]) => {\n const { selectColor, selectMix = 0 } = layer.getLayerConfig();\n const highlightColorInArray =\n typeof selectColor === 'string'\n ? rgb2arr(selectColor)\n : selectColor || [1, 0, 0, 1];\n layer.updateLayerConfig({\n pickedFeatureID: decodePickingColor(new Uint8Array(pickedColor)),\n });\n layer.models.forEach((model) =>\n model.addUniforms({\n u_PickingStage: PickingStage.HIGHLIGHT,\n u_PickingColor: pickedColor,\n u_HighlightColor: highlightColorInArray.map((c) => c * 255),\n u_activeMix: selectMix,\n u_CurrentSelectedId: pickedColor,\n u_SelectColor: highlightColorInArray.map((c) => c * 255),\n u_EnableSelect: 1,\n }),\n );\n },\n );\n // }\n }\n}\n"],"file":"PixelPickingPlugin.js"}
@@ -177,6 +177,10 @@ var FillModel = function (_BaseModel) {
177
177
  var m1 = this.mapService.meterToCoord(center, [minLng, minLat]);
178
178
  var m2 = this.mapService.meterToCoord(center, [maxLng === minLng ? maxLng + 0.1 : maxLng, maxLat === minLat ? minLat + 0.1 : maxLat]);
179
179
  this.meter2coord = (m1 + m2) / 2;
180
+
181
+ if (!Boolean(this.meter2coord)) {
182
+ this.meter2coord = 7.70681090738883;
183
+ }
180
184
  }
181
185
  }, {
182
186
  key: "buildModels",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_additive","u_globel","mapService","version","Version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","unit","L7MAP","MAPBOX","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","m1","meterToCoord","m2","meter2coord","isGlobel","buildLayerModel","moduleName","vertexShader","pointFillVert","fragmentShader","pointFillFrag","triangulation","GlobelPointFillTriangulation","depth","enable","getBlend","destroy","option","speed","rings","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","x","y","z","n1","vec3","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","mat4","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport BaseModel, {\n styleColor,\n styleOffset,\n styleSingle,\n} from '../../core/BaseModel';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\ninterface IPointLayerStyleOptions {\n opacity: styleSingle;\n strokeWidth: styleSingle;\n stroke: styleColor;\n strokeOpacity: styleSingle;\n offsets: styleOffset;\n blend: string;\n unit: string;\n}\n// 判断当前使用的 style 中的变量属性是否需要进行数据映射\nexport default class FillModel extends BaseModel {\n public meter2coord: number = 1;\n private isMeter: boolean = false;\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\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 return {\n u_isMeter: Number(this.isMeter),\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 0.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL &&\n version !== Version.MAPBOX\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n }\n\n public buildModels(): IModel[] {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill',\n vertexShader: pointFillVert,\n fragmentShader: pointFillFrag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n // depth: { enable: false },\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n }),\n ];\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n protected animateOption2Array(option: IAnimateOption): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n}\n"],"file":"fill.js"}
1
+ {"version":3,"sources":["../../../src/point/models/fill.ts"],"names":["FillModel","layer","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","data","width","height","rowCount","dataTexture","length","createTexture2D","flipY","format","gl","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_additive","u_globel","mapService","version","Version","GLOBEL","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_stroke_opacity","u_stroke_width","u_stroke_color","getStrokeColor","u_offsets","isOffsetStatic","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","unit","L7MAP","MAPBOX","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","m1","meterToCoord","m2","meter2coord","Boolean","isGlobel","buildLayerModel","moduleName","vertexShader","pointFillVert","fragmentShader","pointFillFrag","triangulation","GlobelPointFillTriangulation","depth","enable","getBlend","destroy","option","speed","rings","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","update","feature","featureIdx","vertex","attributeIdx","extrude","x","y","z","n1","vec3","fromValues","n2","xzReg","angle","Math","PI","yReg","asin","m","mat4","create","rotateY","rotateX","v1","transformMat4","normalize","v2","v3","v4","extrudeIndex","Array","isArray","shape","shape2d","shapeIndex","indexOf","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IAttribute,\n IElements,\n IEncodeFeature,\n ILayerConfig,\n IModel,\n IModelUniform,\n} from '@antv/l7-core';\nimport BaseModel, {\n styleColor,\n styleOffset,\n styleSingle,\n} from '../../core/BaseModel';\nimport {\n GlobelPointFillTriangulation,\n PointFillTriangulation,\n} from '../../core/triangulation';\nimport pointFillFrag from '../shaders/fill_frag.glsl';\nimport pointFillVert from '../shaders/fill_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\nimport { mat4, vec3 } from 'gl-matrix';\ninterface IPointLayerStyleOptions {\n opacity: styleSingle;\n strokeWidth: styleSingle;\n stroke: styleColor;\n strokeOpacity: styleSingle;\n offsets: styleOffset;\n blend: string;\n unit: string;\n}\n// 判断当前使用的 style 中的变量属性是否需要进行数据映射\nexport default class FillModel extends BaseModel {\n public meter2coord: number = 1;\n private isMeter: boolean = false;\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\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 return {\n u_isMeter: Number(this.isMeter),\n\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n u_globel: this.mapService.version === Version.GLOBEL ? 1 : 0,\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_stroke_opacity: isNumber(strokeOpacity) ? strokeOpacity : 1.0,\n u_stroke_width: isNumber(strokeWidth) ? strokeWidth : 0.0,\n u_stroke_color: this.getStrokeColor(stroke),\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL &&\n version !== Version.MAPBOX\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill',\n vertexShader: pointFillVert,\n fragmentShader: pointFillFrag,\n triangulation: isGlobel\n ? GlobelPointFillTriangulation\n : PointFillTriangulation,\n // depth: { enable: false },\n depth: { enable: isGlobel },\n blend: this.getBlend(),\n }),\n ];\n }\n\n public clearModels() {\n this.dataTexture?.destroy();\n }\n\n protected animateOption2Array(option: IAnimateOption): number[] {\n return [option.enable ? 0 : 1.0, option.speed || 1, option.rings || 3, 0];\n }\n protected registerBuiltinAttributes() {\n // TODO: 判断当前的点图层的模型是普通地图模式还是地球模式\n const isGlobel = this.mapService.version === 'GLOBEL';\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\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: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n let extrude;\n // 地球模式\n if (isGlobel) {\n const [x, y, z] = vertex;\n const n1 = vec3.fromValues(0, 0, 1);\n const n2 = vec3.fromValues(x, 0, z);\n\n const xzReg =\n x >= 0 ? vec3.angle(n1, n2) : Math.PI * 2 - vec3.angle(n1, n2);\n\n const yReg = Math.PI * 2 - Math.asin(y / 100);\n\n const m = mat4.create();\n mat4.rotateY(m, m, xzReg);\n mat4.rotateX(m, m, yReg);\n\n const v1 = vec3.fromValues(1, 1, 0);\n vec3.transformMat4(v1, v1, m);\n vec3.normalize(v1, v1);\n\n const v2 = vec3.fromValues(-1, 1, 0);\n vec3.transformMat4(v2, v2, m);\n vec3.normalize(v2, v2);\n\n const v3 = vec3.fromValues(-1, -1, 0);\n vec3.transformMat4(v3, v3, m);\n vec3.normalize(v3, v3);\n\n const v4 = vec3.fromValues(1, -1, 0);\n vec3.transformMat4(v4, v4, m);\n vec3.normalize(v4, v4);\n\n extrude = [...v1, ...v2, ...v3, ...v4];\n } else {\n // 平面模式\n extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n }\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\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 = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'shape',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Shape',\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 { shape = 2 } = feature;\n const shape2d = this.layer.getLayerConfig().shape2d as string[];\n const shapeIndex = shape2d.indexOf(shape as string);\n return [shapeIndex];\n },\n },\n });\n }\n}\n"],"file":"fill.js"}
@@ -31,7 +31,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
31
31
 
32
32
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
33
33
 
34
- var pointImageFrag = "\nuniform sampler2D u_texture;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform vec2 u_textSize;\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\n#pragma include \"picking\"\n\nvoid main(){\n float opacity = styleMappingMat[0][0];\n float size = max(styleMappingMat[1][0] - 2.0, 0.0);\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n\n \n textureColor = texture2D(u_texture, pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n \n\n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n gl_FragColor= textureColor;\n }else {\n gl_FragColor= step(0.01, textureColor.z) * v_color;\n }\n\n gl_FragColor.a = gl_FragColor.a * opacity;\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
34
+ var pointImageFrag = "\nuniform sampler2D u_texture;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform vec2 u_textSize;\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\n#pragma include \"picking\"\n\nvoid main(){\n float opacity = styleMappingMat[0][0];\n float size = styleMappingMat[1][0];\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n \n textureColor = texture2D(u_texture, pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n \n\n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n gl_FragColor= textureColor;\n }else {\n gl_FragColor= step(0.01, textureColor.z) * v_color;\n }\n\n gl_FragColor.a = gl_FragColor.a * opacity;\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
35
35
  var pointImageVert = "precision highp float;\nattribute vec3 a_Position;\nattribute vec4 a_Color;\nattribute vec2 a_Uv;\nattribute float a_Size;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_stroke_width : 1;\nuniform vec2 u_offsets;\n\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n styleMappingMat[1][0] = a_Size;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n v_color = a_Color;\n v_uv = a_Uv;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n \n // vec2 offset = project_pixel(u_offsets);\n vec2 offset = project_pixel(textrueOffsets);\n\n // gl_Position = project_common_position_to_clipspace(vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0));\n }\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\n\n setPickingColor(a_PickingColor);\n\n}\n";
36
36
 
37
37
  var IconeModel = function (_BaseModel) {
@@ -33,7 +33,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
33
33
 
34
34
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
35
 
36
- var pointImageFrag = "\nuniform sampler2D u_texture;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform vec2 u_textSize;\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\n#pragma include \"picking\"\n\nvoid main(){\n float opacity = styleMappingMat[0][0];\n float size = max(styleMappingMat[1][0] - 2.0, 0.0);\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n\n \n textureColor = texture2D(u_texture, pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n \n\n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n gl_FragColor= textureColor;\n }else {\n gl_FragColor= step(0.01, textureColor.z) * v_color;\n }\n\n gl_FragColor.a = gl_FragColor.a * opacity;\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
36
+ var pointImageFrag = "\nuniform sampler2D u_texture;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform vec2 u_textSize;\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\n#pragma include \"picking\"\n\nvoid main(){\n float opacity = styleMappingMat[0][0];\n float size = styleMappingMat[1][0];\n vec2 pos = v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;\n vec4 textureColor;\n\n // Y = 0.299R + 0.587G + 0.114B // \u4EAE\u5EA6\u63D0\u53D6\n \n textureColor = texture2D(u_texture, pos);\n\n // Tip: \u53BB\u9664\u8FB9\u7F18\u90E8\u5206 mipmap \u5BFC\u81F4\u7684\u6DF7\u5408\u53D8\u6697\n float fragmengTocenter = distance(vec2(0.5), gl_PointCoord);\n if(fragmengTocenter >= 0.5) {\n float luma = 0.299 * textureColor.r + 0.587 * textureColor.g + 0.114 * textureColor.b;\n textureColor.a *= luma;\n }\n \n \n\n if(all(lessThan(v_color, vec4(1.0+0.00001))) && all(greaterThan(v_color, vec4(1.0-0.00001))) || v_color==vec4(1.0)){\n gl_FragColor= textureColor;\n }else {\n gl_FragColor= step(0.01, textureColor.z) * v_color;\n }\n\n gl_FragColor.a = gl_FragColor.a * opacity;\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
37
37
  var pointImageVert = "precision highp float;\nattribute vec3 a_Position;\nattribute vec4 a_Color;\nattribute vec2 a_Uv;\nattribute float a_Size;\nvarying vec4 v_color;\nvarying vec2 v_uv;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_stroke_width : 1;\nuniform vec2 u_offsets;\n\nuniform float u_opacity : 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n styleMappingMat[1][0] = a_Size;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n v_color = a_Color;\n v_uv = a_Uv;\n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n \n // vec2 offset = project_pixel(u_offsets);\n vec2 offset = project_pixel(textrueOffsets);\n\n // gl_Position = project_common_position_to_clipspace(vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(vec2(project_pos.xy + offset),project_pos.z, 1.0));\n }\n gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;\n\n setPickingColor(a_PickingColor);\n\n}\n";
38
38
 
39
39
  var ImageModel = function (_BaseModel) {
@@ -124,11 +124,15 @@ var ExtrudePolyline = function () {
124
124
  var count = complex.startIndex;
125
125
 
126
126
  for (var i = 1; i < total; i++) {
127
+ var _originPoints$, _originPoints$i$, _originPoints$2;
128
+
127
129
  var last = points[i - 1];
130
+ last.push((_originPoints$ = originPoints[i - 1][2]) !== null && _originPoints$ !== void 0 ? _originPoints$ : 0);
128
131
  var originLast = originPoints[i - 1];
129
132
  var cur = points[i];
133
+ cur.push((_originPoints$i$ = originPoints[i][2]) !== null && _originPoints$i$ !== void 0 ? _originPoints$i$ : 0);
130
134
  var originCur = originPoints[i];
131
- var next = i < points.length - 1 ? points[i + 1] : null;
135
+ var next = i < points.length - 1 ? [].concat((0, _toConsumableArray2.default)(points[i + 1]), [(_originPoints$2 = originPoints[i + 1][2]) !== null && _originPoints$2 !== void 0 ? _originPoints$2 : 0]) : null;
132
136
  var originNext = i < originPoints.length - 1 ? originPoints[i + 1] : null;
133
137
  var amt = this.segment_gaode2(complex, count, last, cur, next, originLast, originCur, originNext);
134
138
  count += amt;
@@ -144,6 +148,46 @@ var ExtrudePolyline = function () {
144
148
  return complex;
145
149
  }
146
150
  }, {
151
+ key: "simpleExtrude_gaode2",
152
+ value: function simpleExtrude_gaode2(points, originPoints) {
153
+ var complex = this.complex;
154
+
155
+ if (points.length <= 1) {
156
+ return complex;
157
+ }
158
+
159
+ this.lastFlip = -1;
160
+ this.started = false;
161
+ this.normal = null;
162
+ this.totalDistance = 0;
163
+ var total = points.length;
164
+ var count = complex.startIndex;
165
+
166
+ for (var i = 1; i < total; i++) {
167
+ var _originPoints$3, _originPoints$i$2, _originPoints$4;
168
+
169
+ var last = points[i - 1];
170
+ last.push((_originPoints$3 = originPoints[i - 1][2]) !== null && _originPoints$3 !== void 0 ? _originPoints$3 : 0);
171
+ var originLast = originPoints[i - 1];
172
+ var cur = points[i];
173
+ cur.push((_originPoints$i$2 = originPoints[i][2]) !== null && _originPoints$i$2 !== void 0 ? _originPoints$i$2 : 0);
174
+ var originCur = originPoints[i];
175
+ var next = i < points.length - 1 ? [].concat((0, _toConsumableArray2.default)(points[i + 1]), [(_originPoints$4 = originPoints[i + 1][2]) !== null && _originPoints$4 !== void 0 ? _originPoints$4 : 0]) : null;
176
+ var originNext = i < originPoints.length - 1 ? originPoints[i + 1] : null;
177
+ var amt = this.simpleSegment(complex, count, last, cur, next, originLast, originCur, originNext);
178
+ count += amt;
179
+ }
180
+
181
+ if (this.dash) {
182
+ for (var _i2 = 0; _i2 < complex.positions.length / 6; _i2++) {
183
+ complex.positions[_i2 * 6 + 5] = this.totalDistance;
184
+ }
185
+ }
186
+
187
+ complex.startIndex = complex.positions.length / 6;
188
+ return complex;
189
+ }
190
+ }, {
147
191
  key: "extrude",
148
192
  value: function extrude(points) {
149
193
  var complex = this.complex;
@@ -168,8 +212,41 @@ var ExtrudePolyline = function () {
168
212
  }
169
213
 
170
214
  if (this.dash) {
171
- for (var _i2 = 0; _i2 < complex.positions.length / 6; _i2++) {
172
- complex.positions[_i2 * 6 + 5] = this.totalDistance;
215
+ for (var _i3 = 0; _i3 < complex.positions.length / 6; _i3++) {
216
+ complex.positions[_i3 * 6 + 5] = this.totalDistance;
217
+ }
218
+ }
219
+
220
+ complex.startIndex = complex.positions.length / 6;
221
+ return complex;
222
+ }
223
+ }, {
224
+ key: "simpleExtrude",
225
+ value: function simpleExtrude(points) {
226
+ var complex = this.complex;
227
+
228
+ if (points.length <= 1) {
229
+ return complex;
230
+ }
231
+
232
+ this.lastFlip = -1;
233
+ this.started = false;
234
+ this.normal = null;
235
+ this.totalDistance = 0;
236
+ var total = points.length;
237
+ var count = complex.startIndex;
238
+
239
+ for (var i = 1; i < total; i++) {
240
+ var last = points[i - 1];
241
+ var cur = points[i];
242
+ var next = i < points.length - 1 ? points[i + 1] : null;
243
+ var amt = this.simpleSegment(complex, count, last, cur, next);
244
+ count += amt;
245
+ }
246
+
247
+ if (this.dash) {
248
+ for (var _i4 = 0; _i4 < complex.positions.length / 6; _i4++) {
249
+ complex.positions[_i4 * 6 + 5] = this.totalDistance;
173
250
  }
174
251
  }
175
252
 
@@ -298,6 +375,67 @@ var ExtrudePolyline = function () {
298
375
  return count;
299
376
  }
300
377
  }, {
378
+ key: "simpleSegment",
379
+ value: function simpleSegment(complex, index, last, cur, next) {
380
+ var count = 0;
381
+ var indices = complex.indices;
382
+ var positions = complex.positions;
383
+ var normals = complex.normals;
384
+ var flatCur = (0, _l7Utils.aProjectFlat)([cur[0], cur[1]]);
385
+ var flatLast = (0, _l7Utils.aProjectFlat)([last[0], last[1]]);
386
+ direction(lineA, flatCur, flatLast);
387
+ var segmentDistance = 0;
388
+
389
+ if (this.dash) {
390
+ segmentDistance = this.lineSegmentDistance(flatCur, flatLast);
391
+ this.totalDistance += segmentDistance;
392
+ }
393
+
394
+ if (!this.normal) {
395
+ this.normal = _glMatrix.vec2.create();
396
+ computeNormal(this.normal, lineA);
397
+ }
398
+
399
+ if (!this.started) {
400
+ this.started = true;
401
+ this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
402
+ }
403
+
404
+ indices.push(index + 0, index + 1, index + 2);
405
+
406
+ if (!next) {
407
+ computeNormal(this.normal, lineA);
408
+ this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
409
+ indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
410
+ count += 2;
411
+ } else {
412
+ var flatNext = (0, _l7Utils.aProjectFlat)([next[0], next[1]]);
413
+
414
+ if (isPointEqual(flatCur, flatNext)) {
415
+ _glMatrix.vec2.add(flatNext, flatCur, _glMatrix.vec2.normalize(flatNext, _glMatrix.vec2.subtract(flatNext, flatCur, flatLast)));
416
+ }
417
+
418
+ direction(lineB, flatNext, flatCur);
419
+
420
+ var _computeMiter3 = computeMiter(tangent, _glMatrix.vec2.create(), lineA, lineB, this.thickness),
421
+ _computeMiter4 = (0, _slicedToArray2.default)(_computeMiter3, 2),
422
+ miterLen = _computeMiter4[0],
423
+ miter = _computeMiter4[1];
424
+
425
+ var flip = _glMatrix.vec2.dot(tangent, this.normal) < 0 ? -1 : 1;
426
+ this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
427
+ indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip === 1 ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
428
+ flip = -1;
429
+
430
+ _glMatrix.vec2.copy(this.normal, miter);
431
+
432
+ count += 2;
433
+ this.lastFlip = flip;
434
+ }
435
+
436
+ return count;
437
+ }
438
+ }, {
301
439
  key: "segment",
302
440
  value: function segment(complex, index, last, cur, next) {
303
441
  var count = 0;
@@ -375,10 +513,10 @@ var ExtrudePolyline = function () {
375
513
 
376
514
  direction(lineB, flatNext, flatCur);
377
515
 
378
- var _computeMiter3 = computeMiter(tangent, _glMatrix.vec2.create(), lineA, lineB, this.thickness),
379
- _computeMiter4 = (0, _slicedToArray2.default)(_computeMiter3, 2),
380
- miterLen = _computeMiter4[0],
381
- miter = _computeMiter4[1];
516
+ var _computeMiter5 = computeMiter(tangent, _glMatrix.vec2.create(), lineA, lineB, this.thickness),
517
+ _computeMiter6 = (0, _slicedToArray2.default)(_computeMiter5, 2),
518
+ miterLen = _computeMiter6[0],
519
+ miter = _computeMiter6[1];
382
520
 
383
521
  var flip = _glMatrix.vec2.dot(tangent, this.normal) < 0 ? -1 : 1;
384
522
  var bevel = joinBevel;
@@ -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":"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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"}
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","push","originLast","cur","originCur","next","originNext","amt","segment_gaode2","simpleSegment","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public simpleExtrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.simpleSegment(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public simpleExtrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.simpleSegment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec3,\n originCur: vec3,\n originNext: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n // @ts-ignore\n direction(lineA, cur as vec3, last as vec3);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n // @ts-ignore\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n cur as vec2,\n vec2.normalize(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n // @ts-ignore\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private simpleSegment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n }\n private lineSegmentDistance(b1: vec3, a1: vec3) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}