@antv/l7-layers 2.8.24 → 2.8.28

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 (71) hide show
  1. package/es/Geometry/index.d.ts +1 -1
  2. package/es/Geometry/index.js +14 -2
  3. package/es/Geometry/index.js.map +1 -1
  4. package/es/Geometry/models/index.d.ts +1 -1
  5. package/es/Geometry/models/index.js +3 -1
  6. package/es/Geometry/models/index.js.map +1 -1
  7. package/es/Geometry/models/sprite.d.ts +47 -0
  8. package/es/Geometry/models/sprite.js +305 -0
  9. package/es/Geometry/models/sprite.js.map +1 -0
  10. package/es/core/BaseLayer.d.ts +5 -0
  11. package/es/core/BaseLayer.js +49 -0
  12. package/es/core/BaseLayer.js.map +1 -1
  13. package/es/core/LayerGroup.d.ts +8 -0
  14. package/es/core/LayerGroup.js +66 -0
  15. package/es/core/LayerGroup.js.map +1 -0
  16. package/es/core/interface.d.ts +16 -1
  17. package/es/core/interface.js.map +1 -1
  18. package/es/core/triangulation.d.ts +1 -0
  19. package/es/core/triangulation.js +1 -0
  20. package/es/core/triangulation.js.map +1 -1
  21. package/es/imagetile/index.d.ts +2 -2
  22. package/es/imagetile/index.js +4 -4
  23. package/es/imagetile/index.js.map +1 -1
  24. package/es/imagetile/models/imagetile.d.ts +2 -2
  25. package/es/imagetile/models/imagetile.js +1 -15
  26. package/es/imagetile/models/imagetile.js.map +1 -1
  27. package/es/imagetile/utils/Tile.d.ts +2 -2
  28. package/es/imagetile/utils/Tile.js +3 -12
  29. package/es/imagetile/utils/Tile.js.map +1 -1
  30. package/es/line/models/line.js +15 -6
  31. package/es/line/models/line.js.map +1 -1
  32. package/es/mask/models/fill.js +1 -1
  33. package/es/mask/models/fill.js.map +1 -1
  34. package/es/plugins/DataMappingPlugin.d.ts +1 -0
  35. package/es/plugins/DataMappingPlugin.js +30 -7
  36. package/es/plugins/DataMappingPlugin.js.map +1 -1
  37. package/es/polygon/models/ocean.js +4 -4
  38. package/es/polygon/models/ocean.js.map +1 -1
  39. package/es/utils/extrude_polyline.d.ts +6 -0
  40. package/es/utils/extrude_polyline.js +29 -1
  41. package/es/utils/extrude_polyline.js.map +1 -1
  42. package/lib/Geometry/index.js +14 -2
  43. package/lib/Geometry/index.js.map +1 -1
  44. package/lib/Geometry/models/index.js +4 -1
  45. package/lib/Geometry/models/index.js.map +1 -1
  46. package/lib/Geometry/models/sprite.js +312 -0
  47. package/lib/Geometry/models/sprite.js.map +1 -0
  48. package/lib/core/BaseLayer.js +46 -0
  49. package/lib/core/BaseLayer.js.map +1 -1
  50. package/lib/core/LayerGroup.js +78 -0
  51. package/lib/core/LayerGroup.js.map +1 -0
  52. package/lib/core/interface.js.map +1 -1
  53. package/lib/core/triangulation.js +1 -0
  54. package/lib/core/triangulation.js.map +1 -1
  55. package/lib/imagetile/index.js +4 -4
  56. package/lib/imagetile/index.js.map +1 -1
  57. package/lib/imagetile/models/imagetile.js +1 -18
  58. package/lib/imagetile/models/imagetile.js.map +1 -1
  59. package/lib/imagetile/utils/Tile.js +3 -12
  60. package/lib/imagetile/utils/Tile.js.map +1 -1
  61. package/lib/line/models/line.js +15 -6
  62. package/lib/line/models/line.js.map +1 -1
  63. package/lib/mask/models/fill.js +1 -1
  64. package/lib/mask/models/fill.js.map +1 -1
  65. package/lib/plugins/DataMappingPlugin.js +29 -6
  66. package/lib/plugins/DataMappingPlugin.js.map +1 -1
  67. package/lib/polygon/models/ocean.js +4 -4
  68. package/lib/polygon/models/ocean.js.map +1 -1
  69. package/lib/utils/extrude_polyline.js +28 -1
  70. package/lib/utils/extrude_polyline.js.map +1 -1
  71. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["aProjectFlat","vec2","tmp","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","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"}
1
+ {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["aProjectFlat","vec2","tmp","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","indexes","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","push","originLast","cur","originCur","next","originNext","amt","segment_gaode2","simpleSegment","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","currentIndex","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n indexes: number[];\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n indexes: [],\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public simpleExtrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.simpleSegment(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public simpleExtrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.simpleSegment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec3,\n originCur: vec3,\n originNext: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n // @ts-ignore\n direction(lineA, cur as vec3, last as vec3);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n // @ts-ignore\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n cur as vec2,\n vec2.normalize(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n // @ts-ignore\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private simpleSegment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: vec3, a1: vec3) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
@@ -78,14 +78,26 @@ var GeometryLayer = function (_BaseLayer) {
78
78
  value: function getDefaultConfig() {
79
79
  var type = this.getModelType();
80
80
  var defaultConfig = {
81
- plane: {}
81
+ plane: {},
82
+ sprite: {}
82
83
  };
83
84
  return defaultConfig[type];
84
85
  }
85
86
  }, {
86
87
  key: "getModelType",
87
88
  value: function getModelType() {
88
- return 'plane';
89
+ var _shapeAttribute$scale;
90
+
91
+ var shapeAttribute = this.styleAttributeService.getLayerStyleAttribute('shape');
92
+ var shape = shapeAttribute === null || shapeAttribute === void 0 ? void 0 : (_shapeAttribute$scale = shapeAttribute.scale) === null || _shapeAttribute$scale === void 0 ? void 0 : _shapeAttribute$scale.field;
93
+
94
+ if (shape === 'plane') {
95
+ return 'plane';
96
+ } else if (shape === 'sprite') {
97
+ return 'sprite';
98
+ } else {
99
+ return 'plane';
100
+ }
89
101
  }
90
102
  }]);
91
103
  return GeometryLayer;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Geometry/index.ts"],"names":["GeometryLayer","modelType","getModelType","layerModel","GeometryModels","models","initModels","buildModels","properties","opacity","type","minimum","maximum","defaultConfig","plane","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;;;uFAGG,e;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAeH,SAAf,CAAJ,CAA8B,IAA9B,CAAlB;AACA,WAAKI,MAAL,GAAc,KAAKF,UAAL,CAAgBG,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKF,UAAL,CAAgBI,WAAhB,EAAd;AACD;;;WAED,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,KAAK,EAAE;AADa,OAAtB;AAGA,aAAOD,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAA4C;AAC1C,aAAO,OAAP;AACD;;;EAlCwCK,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IGeometryLayerStyleOptions } from '../core/interface';\nimport GeometryModels, { GeometryModelType } from './models';\n\nexport default class GeometryLayer extends BaseLayer<\n IGeometryLayerStyleOptions\n> {\n public type: string = 'GeometryLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new GeometryModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n plane: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): GeometryModelType {\n return 'plane';\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/Geometry/index.ts"],"names":["GeometryLayer","modelType","getModelType","layerModel","GeometryModels","models","initModels","buildModels","properties","opacity","type","minimum","maximum","defaultConfig","plane","sprite","shapeAttribute","styleAttributeService","getLayerStyleAttribute","shape","scale","field","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;;;uFAGG,e;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAeH,SAAf,CAAJ,CAA8B,IAA9B,CAAlB;AACA,WAAKI,MAAL,GAAc,KAAKF,UAAL,CAAgBG,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKF,UAAL,CAAgBI,WAAhB,EAAd;AACD;;;WAED,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,KAAK,EAAE,EADa;AAEpBC,QAAAA,MAAM,EAAE;AAFY,OAAtB;AAIA,aAAOF,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAA4C;AAAA;;AAC1C,UAAMM,cAAc,GAAG,KAAKC,qBAAL,CAA2BC,sBAA3B,CACrB,OADqB,CAAvB;AAGA,UAAMC,KAAK,GAAGH,cAAH,aAAGA,cAAH,gDAAGA,cAAc,CAAEI,KAAnB,0DAAG,sBAAuBC,KAArC;;AACA,UAAIF,KAAK,KAAK,OAAd,EAAuB;AACrB,eAAO,OAAP;AACD,OAFD,MAEO,IAAIA,KAAK,KAAK,QAAd,EAAwB;AAC7B,eAAO,QAAP;AACD,OAFM,MAEA;AACL,eAAO,OAAP;AACD;AACF;;;EA7CwCG,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IGeometryLayerStyleOptions } from '../core/interface';\nimport GeometryModels, { GeometryModelType } from './models';\n\nexport default class GeometryLayer extends BaseLayer<\n IGeometryLayerStyleOptions\n> {\n public type: string = 'GeometryLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new GeometryModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n plane: {},\n sprite: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): GeometryModelType {\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(\n 'shape',\n );\n const shape = shapeAttribute?.scale?.field as GeometryModelType;\n if (shape === 'plane') {\n return 'plane';\n } else if (shape === 'sprite') {\n return 'sprite';\n } else {\n return 'plane';\n }\n }\n}\n"],"file":"index.js"}
@@ -9,8 +9,11 @@ exports.default = void 0;
9
9
 
10
10
  var _plane = _interopRequireDefault(require("./plane"));
11
11
 
12
+ var _sprite = _interopRequireDefault(require("./sprite"));
13
+
12
14
  var GeometryModels = {
13
- plane: _plane.default
15
+ plane: _plane.default,
16
+ sprite: _sprite.default
14
17
  };
15
18
  var _default = GeometryModels;
16
19
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Geometry/models/index.ts"],"names":["GeometryModels","plane","PlaneModel"],"mappings":";;;;;;;;;AAAA;;AAGA,IAAMA,cAAmD,GAAG;AAC1DC,EAAAA,KAAK,EAAEC;AADmD,CAA5D;eAGeF,c","sourcesContent":["import PlaneModel from './plane';\nexport type GeometryModelType = 'plane';\n\nconst GeometryModels: { [key in GeometryModelType]: any } = {\n plane: PlaneModel,\n};\nexport default GeometryModels;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/Geometry/models/index.ts"],"names":["GeometryModels","plane","PlaneModel","sprite","SpriteModel"],"mappings":";;;;;;;;;AAAA;;AACA;;AAGA,IAAMA,cAAmD,GAAG;AAC1DC,EAAAA,KAAK,EAAEC,cADmD;AAE1DC,EAAAA,MAAM,EAAEC;AAFkD,CAA5D;eAIeJ,c","sourcesContent":["import PlaneModel from './plane';\nimport SpriteModel from './sprite';\nexport type GeometryModelType = 'plane' | 'sprite';\n\nconst GeometryModels: { [key in GeometryModelType]: any } = {\n plane: PlaneModel,\n sprite: SpriteModel,\n};\nexport default GeometryModels;\n"],"file":"index.js"}
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
+
20
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
+
22
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
+
24
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
+
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+
28
+ var _l7Core = require("@antv/l7-core");
29
+
30
+ var _l7Maps = require("@antv/l7-maps");
31
+
32
+ var _BaseModel2 = _interopRequireDefault(require("../../core/BaseModel"));
33
+
34
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
35
+
36
+ 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; } }
37
+
38
+ var spriteFrag = "\nuniform sampler2D u_texture;\nuniform float u_mapFlag;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"picking\"\nvoid main() {\n\n if(v_d < 0.0) {\n discard;\n }\n\n if(u_mapFlag > 0.0) {\n gl_FragColor = texture2D(u_texture, gl_PointCoord);\n gl_FragColor.a *= u_opacity;\n } else {\n gl_FragColor = vec4(v_Color, u_opacity);\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
39
+ var spriteVert = "precision highp float;\n\nattribute vec3 a_Position;\nattribute vec3 a_Color;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform float u_Scale;\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\nvoid main() {\n v_Color = a_Color;\n \n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n v_d = a_Position.z;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, a_Position.z, 1.0));\n }\n\n gl_PointSize = pow((u_Zoom - 1.0), 2.0) * u_Scale;\n\n setPickingColor(a_PickingColor);\n}\n";
40
+ var SPRITE_ANIMATE_DIR;
41
+
42
+ (function (SPRITE_ANIMATE_DIR) {
43
+ SPRITE_ANIMATE_DIR["UP"] = "up";
44
+ SPRITE_ANIMATE_DIR["DOWN"] = "down";
45
+ })(SPRITE_ANIMATE_DIR || (SPRITE_ANIMATE_DIR = {}));
46
+
47
+ var SpriteModel = function (_BaseModel) {
48
+ (0, _inherits2.default)(SpriteModel, _BaseModel);
49
+
50
+ var _super = _createSuper(SpriteModel);
51
+
52
+ function SpriteModel() {
53
+ var _this;
54
+
55
+ (0, _classCallCheck2.default)(this, SpriteModel);
56
+
57
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
58
+ args[_key] = arguments[_key];
59
+ }
60
+
61
+ _this = _super.call.apply(_super, [this].concat(args));
62
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "texture", void 0);
63
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mapTexture", void 0);
64
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "positions", void 0);
65
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "indices", void 0);
66
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "timer", void 0);
67
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "spriteTop", void 0);
68
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "spriteUpdate", void 0);
69
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "spriteAnimate", void 0);
70
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryUpdateTriangulation", function () {
71
+ var updateZ = _this.spriteUpdate;
72
+ var bottomZ = -100000;
73
+ var topZ = _this.spriteTop;
74
+
75
+ for (var i = 0; i < _this.positions.length; i += 5) {
76
+ if (_this.spriteAnimate === SPRITE_ANIMATE_DIR.UP) {
77
+ _this.positions[i + 2] += updateZ;
78
+
79
+ if (_this.positions[i + 2] > topZ) {
80
+ _this.positions[i + 2] = bottomZ;
81
+ }
82
+ } else {
83
+ _this.positions[i + 2] -= updateZ;
84
+
85
+ if (_this.positions[i + 2] < bottomZ) {
86
+ _this.positions[i + 2] = topZ;
87
+ }
88
+ }
89
+ }
90
+
91
+ return {
92
+ vertices: _this.positions,
93
+ indices: _this.indices,
94
+ size: 5
95
+ };
96
+ });
97
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "updateModel", function () {
98
+ var attributes = _this.layer.createAttrubutes({
99
+ triangulation: _this.planeGeometryUpdateTriangulation
100
+ });
101
+
102
+ _this.layer.models.map(function (m) {
103
+ m.updateAttributes(attributes);
104
+ });
105
+
106
+ _this.layer.renderLayers();
107
+
108
+ _this.timer = requestAnimationFrame(_this.updateModel);
109
+ });
110
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryTriangulation", function () {
111
+ var _this2;
112
+
113
+ var _ref = _this.layer.getLayerConfig(),
114
+ _ref$center = _ref.center,
115
+ center = _ref$center === void 0 ? [120, 30] : _ref$center,
116
+ _ref$spriteCount = _ref.spriteCount,
117
+ spriteCount = _ref$spriteCount === void 0 ? 100 : _ref$spriteCount,
118
+ _ref$spriteRadius = _ref.spriteRadius,
119
+ spriteRadius = _ref$spriteRadius === void 0 ? 10 : _ref$spriteRadius;
120
+
121
+ var _this$initSprite = (_this2 = _this).initSprite.apply(_this2, [spriteRadius, spriteCount].concat((0, _toConsumableArray2.default)(center))),
122
+ indices = _this$initSprite.indices,
123
+ positions = _this$initSprite.positions;
124
+
125
+ _this.positions = positions;
126
+ _this.indices = indices;
127
+ return {
128
+ vertices: positions,
129
+ indices: indices,
130
+ size: 5
131
+ };
132
+ });
133
+ return _this;
134
+ }
135
+
136
+ (0, _createClass2.default)(SpriteModel, [{
137
+ key: "initSprite",
138
+ value: function initSprite() {
139
+ var radius = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
140
+ var spriteCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
141
+ var lng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 120;
142
+ var lat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 30;
143
+ var indices = [];
144
+ var positions = [];
145
+ var mapService = this.mapService;
146
+ var heightLimit = this.spriteAnimate === SPRITE_ANIMATE_DIR.UP ? -this.spriteTop : this.spriteTop;
147
+
148
+ for (var i = 0; i < spriteCount; i++) {
149
+ var height = Math.random() * heightLimit;
150
+ positions.push.apply(positions, (0, _toConsumableArray2.default)(getPos(height)));
151
+ }
152
+
153
+ for (var _i = 0; _i < spriteCount; _i++) {
154
+ indices.push(_i);
155
+ }
156
+
157
+ function getPos(z) {
158
+ var randomX = radius * Math.random();
159
+ var randomY = radius * Math.random();
160
+ var x = -radius / 2 + randomX;
161
+ var y = -radius / 2 + randomY;
162
+
163
+ if (mapService.version === _l7Maps.Version['GAODE2.x']) {
164
+ var _ref2 = mapService.lngLatToCoord([x + lng, -y + lat]),
165
+ _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
166
+ a = _ref3[0],
167
+ b = _ref3[1];
168
+
169
+ return [a, b, z, 0, 0];
170
+ } else {
171
+ return [x + lng, -y + lat, z, 0, 0];
172
+ }
173
+ }
174
+
175
+ return {
176
+ indices: indices,
177
+ positions: positions
178
+ };
179
+ }
180
+ }, {
181
+ key: "getUninforms",
182
+ value: function getUninforms() {
183
+ var _ref4 = this.layer.getLayerConfig(),
184
+ opacity = _ref4.opacity,
185
+ mapTexture = _ref4.mapTexture,
186
+ _ref4$spriteScale = _ref4.spriteScale,
187
+ spriteScale = _ref4$spriteScale === void 0 ? 1 : _ref4$spriteScale;
188
+
189
+ if (this.mapTexture !== mapTexture) {
190
+ var _this$texture;
191
+
192
+ this.mapTexture = mapTexture;
193
+ (_this$texture = this.texture) === null || _this$texture === void 0 ? void 0 : _this$texture.destroy();
194
+ this.updateTexture(mapTexture);
195
+ }
196
+
197
+ return {
198
+ u_opacity: opacity || 1,
199
+ u_mapFlag: mapTexture ? 1 : 0,
200
+ u_texture: this.texture,
201
+ u_Scale: spriteScale
202
+ };
203
+ }
204
+ }, {
205
+ key: "clearModels",
206
+ value: function clearModels() {
207
+ var _this$texture2;
208
+
209
+ cancelAnimationFrame(this.timer);
210
+ (_this$texture2 = this.texture) === null || _this$texture2 === void 0 ? void 0 : _this$texture2.destroy();
211
+ }
212
+ }, {
213
+ key: "initModels",
214
+ value: function initModels() {
215
+ var _this3 = this;
216
+
217
+ var _ref5 = this.layer.getLayerConfig(),
218
+ mapTexture = _ref5.mapTexture,
219
+ _ref5$spriteTop = _ref5.spriteTop,
220
+ spriteTop = _ref5$spriteTop === void 0 ? 5000000 : _ref5$spriteTop,
221
+ _ref5$spriteUpdate = _ref5.spriteUpdate,
222
+ spriteUpdate = _ref5$spriteUpdate === void 0 ? 10000 : _ref5$spriteUpdate,
223
+ _ref5$spriteAnimate = _ref5.spriteAnimate,
224
+ spriteAnimate = _ref5$spriteAnimate === void 0 ? SPRITE_ANIMATE_DIR.DOWN : _ref5$spriteAnimate;
225
+
226
+ this.mapTexture = mapTexture;
227
+ this.spriteTop = spriteTop;
228
+ this.spriteUpdate = spriteUpdate;
229
+ spriteAnimate === 'up' ? this.spriteAnimate = SPRITE_ANIMATE_DIR.UP : this.spriteAnimate = SPRITE_ANIMATE_DIR.DOWN;
230
+ var createTexture2D = this.rendererService.createTexture2D;
231
+ this.texture = createTexture2D({
232
+ height: 0,
233
+ width: 0
234
+ });
235
+ this.updateTexture(mapTexture);
236
+ setTimeout(function () {
237
+ _this3.updateModel();
238
+ }, 100);
239
+ return [this.layer.buildLayerModel({
240
+ moduleName: 'geometry_sprite',
241
+ vertexShader: spriteVert,
242
+ fragmentShader: spriteFrag,
243
+ triangulation: this.planeGeometryTriangulation,
244
+ primitive: _l7Core.gl.POINTS,
245
+ depth: {
246
+ enable: false
247
+ },
248
+ blend: this.getBlend()
249
+ })];
250
+ }
251
+ }, {
252
+ key: "buildModels",
253
+ value: function buildModels() {
254
+ return this.initModels();
255
+ }
256
+ }, {
257
+ key: "updateTexture",
258
+ value: function updateTexture(mapTexture) {
259
+ var _this4 = this;
260
+
261
+ var createTexture2D = this.rendererService.createTexture2D;
262
+
263
+ if (mapTexture) {
264
+ var img = new Image();
265
+ img.crossOrigin = 'anonymous';
266
+
267
+ img.onload = function () {
268
+ _this4.texture = createTexture2D({
269
+ data: img,
270
+ width: img.width,
271
+ height: img.height,
272
+ wrapS: _l7Core.gl.CLAMP_TO_EDGE,
273
+ wrapT: _l7Core.gl.CLAMP_TO_EDGE
274
+ });
275
+
276
+ _this4.layerService.updateLayerRenderList();
277
+
278
+ _this4.layerService.renderLayers();
279
+ };
280
+
281
+ img.src = mapTexture;
282
+ } else {
283
+ this.texture = createTexture2D({
284
+ width: 0,
285
+ height: 0
286
+ });
287
+ }
288
+ }
289
+ }, {
290
+ key: "getConfigSchema",
291
+ value: function getConfigSchema() {
292
+ return {
293
+ properties: {
294
+ opacity: {
295
+ type: 'number',
296
+ minimum: 0,
297
+ maximum: 1
298
+ }
299
+ }
300
+ };
301
+ }
302
+ }, {
303
+ key: "registerBuiltinAttributes",
304
+ value: function registerBuiltinAttributes() {
305
+ return '';
306
+ }
307
+ }]);
308
+ return SpriteModel;
309
+ }(_BaseModel2.default);
310
+
311
+ exports.default = SpriteModel;
312
+ //# sourceMappingURL=sprite.js.map