@antv/l7-layers 2.9.17-alpha.0 → 2.9.19

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 (81) hide show
  1. package/es/core/BaseLayer.js +10 -6
  2. package/es/core/BaseLayer.js.map +1 -1
  3. package/es/core/interface.d.ts +13 -0
  4. package/es/core/interface.js.map +1 -1
  5. package/es/core/triangulation.d.ts +0 -1
  6. package/es/core/triangulation.js +9 -36
  7. package/es/core/triangulation.js.map +1 -1
  8. package/es/image/index.d.ts +1 -1
  9. package/es/image/index.js +14 -2
  10. package/es/image/index.js.map +1 -1
  11. package/es/image/models/dataImage.d.ts +22 -0
  12. package/es/image/models/dataImage.js +235 -0
  13. package/es/image/models/dataImage.js.map +1 -0
  14. package/es/image/models/image.d.ts +1 -0
  15. package/es/image/models/image.js +8 -1
  16. package/es/image/models/image.js.map +1 -1
  17. package/es/image/models/index.d.ts +1 -1
  18. package/es/image/models/index.js +3 -1
  19. package/es/image/models/index.js.map +1 -1
  20. package/es/line/models/arc.js +2 -2
  21. package/es/line/models/arc.js.map +1 -1
  22. package/es/line/models/great_circle.js +2 -2
  23. package/es/line/models/line.js +1 -1
  24. package/es/line/models/simpleLine.d.ts +0 -1
  25. package/es/line/models/simpleLine.js +10 -53
  26. package/es/line/models/simpleLine.js.map +1 -1
  27. package/es/plugins/LayerModelPlugin.js +2 -0
  28. package/es/plugins/LayerModelPlugin.js.map +1 -1
  29. package/es/point/index.js +11 -7
  30. package/es/point/index.js.map +1 -1
  31. package/es/point/models/text.js +2 -0
  32. package/es/point/models/text.js.map +1 -1
  33. package/es/tile/manager/tileLayerManager.js +22 -2
  34. package/es/tile/manager/tileLayerManager.js.map +1 -1
  35. package/es/utils/extrude_polyline.d.ts +0 -15
  36. package/es/utils/extrude_polyline.js +6 -138
  37. package/es/utils/extrude_polyline.js.map +1 -1
  38. package/es/utils/simpleLine.d.ts +23 -0
  39. package/es/utils/simpleLine.js +105 -0
  40. package/es/utils/simpleLine.js.map +1 -0
  41. package/es/wind/models/wind.d.ts +2 -0
  42. package/es/wind/models/wind.js +62 -33
  43. package/es/wind/models/wind.js.map +1 -1
  44. package/es/wind/models/windRender.js +1 -1
  45. package/es/wind/models/windRender.js.map +1 -1
  46. package/lib/core/BaseLayer.js +10 -6
  47. package/lib/core/BaseLayer.js.map +1 -1
  48. package/lib/core/interface.js.map +1 -1
  49. package/lib/core/triangulation.js +10 -36
  50. package/lib/core/triangulation.js.map +1 -1
  51. package/lib/image/index.js +14 -2
  52. package/lib/image/index.js.map +1 -1
  53. package/lib/image/models/dataImage.js +250 -0
  54. package/lib/image/models/dataImage.js.map +1 -0
  55. package/lib/image/models/image.js +8 -1
  56. package/lib/image/models/image.js.map +1 -1
  57. package/lib/image/models/index.js +4 -1
  58. package/lib/image/models/index.js.map +1 -1
  59. package/lib/line/models/arc.js +2 -2
  60. package/lib/line/models/arc.js.map +1 -1
  61. package/lib/line/models/great_circle.js +2 -2
  62. package/lib/line/models/line.js +1 -1
  63. package/lib/line/models/simpleLine.js +10 -53
  64. package/lib/line/models/simpleLine.js.map +1 -1
  65. package/lib/plugins/LayerModelPlugin.js +2 -0
  66. package/lib/plugins/LayerModelPlugin.js.map +1 -1
  67. package/lib/point/index.js +11 -7
  68. package/lib/point/index.js.map +1 -1
  69. package/lib/point/models/text.js +2 -0
  70. package/lib/point/models/text.js.map +1 -1
  71. package/lib/tile/manager/tileLayerManager.js +22 -2
  72. package/lib/tile/manager/tileLayerManager.js.map +1 -1
  73. package/lib/utils/extrude_polyline.js +6 -140
  74. package/lib/utils/extrude_polyline.js.map +1 -1
  75. package/lib/utils/simpleLine.js +117 -0
  76. package/lib/utils/simpleLine.js.map +1 -0
  77. package/lib/wind/models/wind.js +61 -33
  78. package/lib/wind/models/wind.js.map +1 -1
  79. package/lib/wind/models/windRender.js +1 -1
  80. package/lib/wind/models/windRender.js.map +1 -1
  81. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","indexes","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","push","originLast","cur","originCur","next","originNext","amt","segment_gaode2","simpleSegment","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","currentIndex","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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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"}
1
+ {"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","indexes","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","push","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","currentIndex","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n indexes: number[];\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n indexes: [],\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1];\n last.push(originPoints[i - 1][2] ?? 0);\n // @ts-ignore\n const originLast = originPoints[i - 1] as vec3;\n\n const cur = points[i];\n cur.push(originPoints[i][2] ?? 0);\n // @ts-ignore\n const originCur = originPoints[i] as vec3;\n\n const next =\n i < points.length - 1\n ? [...points[i + 1], originPoints[i + 1][2] ?? 0]\n : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n // @ts-ignore\n last as vec3,\n // @ts-ignore\n cur as vec3,\n // @ts-ignore\n next as vec3,\n // @ts-ignore\n originLast,\n originCur,\n // @ts-ignore\n originNext as vec3,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec3,\n originCur: vec3,\n originNext: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n // @ts-ignore\n direction(lineA, cur as vec3, last as vec3);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n // @ts-ignore\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n cur as vec2,\n vec2.normalize(\n // @ts-ignore\n next as vec2,\n // @ts-ignore\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n // @ts-ignore\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n // @ts-ignore\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n // @ts-ignore\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: vec3, a1: vec3) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ exports.direction = direction;
10
+
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ var _l7Utils = require("@antv/l7-utils");
18
+
19
+ var _glMatrix = require("gl-matrix");
20
+
21
+ var lineA = _glMatrix.vec2.create();
22
+
23
+ function direction(out, a, b) {
24
+ _glMatrix.vec2.sub(out, a, b);
25
+
26
+ _glMatrix.vec2.normalize(out, out);
27
+
28
+ return out;
29
+ }
30
+
31
+ var ExtrudePolyline = function () {
32
+ function ExtrudePolyline() {
33
+ (0, _classCallCheck2.default)(this, ExtrudePolyline);
34
+ (0, _defineProperty2.default)(this, "complex", void 0);
35
+ (0, _defineProperty2.default)(this, "started", false);
36
+ (0, _defineProperty2.default)(this, "totalDistance", 0);
37
+ (0, _defineProperty2.default)(this, "currentIndex", 0);
38
+ this.complex = {
39
+ positions: [],
40
+ indices: [],
41
+ startIndex: 0,
42
+ indexes: []
43
+ };
44
+ }
45
+
46
+ (0, _createClass2.default)(ExtrudePolyline, [{
47
+ key: "simpleExtrude",
48
+ value: function simpleExtrude(points) {
49
+ var complex = this.complex;
50
+
51
+ if (points.length <= 1) {
52
+ return complex;
53
+ }
54
+
55
+ this.started = false;
56
+ this.totalDistance = 0;
57
+ var total = points.length;
58
+ var count = complex.startIndex;
59
+
60
+ for (var i = 1; i < total; i++) {
61
+ var last = points[i - 1];
62
+ var cur = points[i];
63
+ var amt = this.simpleSegment(complex, count, last, cur);
64
+ count += amt;
65
+ }
66
+
67
+ for (var _i = 0; _i < complex.positions.length / 6; _i++) {
68
+ complex.positions[_i * 6 + 5] = this.totalDistance;
69
+ }
70
+
71
+ return complex;
72
+ }
73
+ }, {
74
+ key: "simpleSegment",
75
+ value: function simpleSegment(complex, index, last, cur) {
76
+ var count = 0;
77
+ var indices = complex.indices;
78
+ var positions = complex.positions;
79
+ var flatCur = (0, _l7Utils.aProjectFlat)([cur[0], cur[1]]);
80
+ var flatLast = (0, _l7Utils.aProjectFlat)([last[0], last[1]]);
81
+ direction(lineA, flatCur, flatLast);
82
+ var segmentDistance = this.lineSegmentDistance(flatCur, flatLast);
83
+ this.totalDistance += segmentDistance;
84
+
85
+ if (!this.started) {
86
+ this.started = true;
87
+ this.extrusions(positions, last, this.totalDistance - segmentDistance);
88
+ }
89
+
90
+ this.extrusions(positions, cur, this.totalDistance);
91
+ indices.push(index + 0, index + 1, index + 2);
92
+ indices.push(index + 2, index + 1, index + 3);
93
+ count += 2;
94
+ return count;
95
+ }
96
+ }, {
97
+ key: "extrusions",
98
+ value: function extrusions(positions, point, distanceRadio) {
99
+ positions.push(point[0], point[1], point[2] | 0, distanceRadio, 0, point[2] | 0);
100
+ this.complex.indexes.push(this.currentIndex);
101
+ positions.push(point[0], point[1], point[2] | 0, distanceRadio, 0, point[2] | 0);
102
+ this.complex.indexes.push(this.currentIndex);
103
+ this.currentIndex++;
104
+ }
105
+ }, {
106
+ key: "lineSegmentDistance",
107
+ value: function lineSegmentDistance(b1, a1) {
108
+ var dx = a1[0] - b1[0];
109
+ var dy = a1[1] - b1[1];
110
+ return Math.sqrt(dx * dx + dy * dy);
111
+ }
112
+ }]);
113
+ return ExtrudePolyline;
114
+ }();
115
+
116
+ exports.default = ExtrudePolyline;
117
+ //# sourceMappingURL=simpleLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/simpleLine.ts"],"names":["lineA","vec2","create","direction","out","a","b","sub","normalize","ExtrudePolyline","complex","positions","indices","startIndex","indexes","points","length","started","totalDistance","total","count","i","last","cur","amt","simpleSegment","index","flatCur","flatLast","segmentDistance","lineSegmentDistance","extrusions","push","point","distanceRadio","currentIndex","b1","a1","dx","dy","Math","sqrt"],"mappings":";;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA,IAAMA,KAAK,GAAGC,eAAKC,MAAL,EAAd;;AAEO,SAASC,SAAT,CAAmBC,GAAnB,EAA8BC,CAA9B,EAAuCC,CAAvC,EAAgD;AACrDL,iBAAKM,GAAL,CAASH,GAAT,EAAcC,CAAd,EAAiBC,CAAjB;;AACAL,iBAAKO,SAAL,CAAeJ,GAAf,EAAoBA,GAApB;;AACA,SAAOA,GAAP;AACD;;IAEoBK,e;AAanB,6BAAc;AAAA;AAAA;AAAA,mDALa,KAKb;AAAA,yDAHkB,CAGlB;AAAA,wDAFiB,CAEjB;AACZ,SAAKC,OAAL,GAAe;AACbC,MAAAA,SAAS,EAAE,EADE;AAEbC,MAAAA,OAAO,EAAE,EAFI;AAGbC,MAAAA,UAAU,EAAE,CAHC;AAIbC,MAAAA,OAAO,EAAE;AAJI,KAAf;AAMD;;;;WAED,uBAAqBC,MAArB,EAAyC;AACvC,UAAML,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIK,MAAM,CAACC,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAON,OAAP;AACD;;AAED,WAAKO,OAAL,GAAe,KAAf;AAEA,WAAKC,aAAL,GAAqB,CAArB;AAEA,UAAMC,KAAK,GAAGJ,MAAM,CAACC,MAArB;AACA,UAAII,KAAK,GAAGV,OAAO,CAACG,UAApB;;AACA,WAAK,IAAIQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,KAApB,EAA2BE,CAAC,EAA5B,EAAgC;AAC9B,YAAMC,IAAI,GAAGP,MAAM,CAACM,CAAC,GAAG,CAAL,CAAnB;AACA,YAAME,GAAG,GAAGR,MAAM,CAACM,CAAD,CAAlB;AACA,YAAMG,GAAG,GAAG,KAAKC,aAAL,CAAmBf,OAAnB,EAA4BU,KAA5B,EAAmCE,IAAnC,EAAyCC,GAAzC,CAAZ;AACAH,QAAAA,KAAK,IAAII,GAAT;AACD;;AAED,WAAK,IAAIH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGX,OAAO,CAACC,SAAR,CAAkBK,MAAlB,GAA2B,CAA/C,EAAkDK,EAAC,EAAnD,EAAuD;AACrDX,QAAAA,OAAO,CAACC,SAAR,CAAkBU,EAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKH,aAApC;AACD;;AACD,aAAOR,OAAP;AACD;;;WACD,uBAAsBA,OAAtB,EAAoCgB,KAApC,EAAmDJ,IAAnD,EAA+DC,GAA/D,EAA0E;AACxE,UAAIH,KAAK,GAAG,CAAZ;AACA,UAAMR,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAMgB,OAAO,GAAG,2BAAa,CAACJ,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAb,CAAhB;AACA,UAAMK,QAAQ,GAAG,2BAAa,CAACN,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;AAEAnB,MAAAA,SAAS,CAACH,KAAD,EAAQ2B,OAAR,EAAiBC,QAAjB,CAAT;AAEA,UAAMC,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAxB;AACA,WAAKV,aAAL,IAAsBW,eAAtB;;AAEA,UAAI,CAAC,KAAKZ,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;AACA,aAAKc,UAAL,CAAgBpB,SAAhB,EAA2BW,IAA3B,EAAiC,KAAKJ,aAAL,GAAqBW,eAAtD;AACD;;AAED,WAAKE,UAAL,CAAgBpB,SAAhB,EAA2BY,GAA3B,EAAgC,KAAKL,aAArC;AACAN,MAAAA,OAAO,CAACoB,IAAR,CAAaN,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AACAd,MAAAA,OAAO,CAACoB,IAAR,CAAaN,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AACAN,MAAAA,KAAK,IAAI,CAAT;AAEA,aAAOA,KAAP;AACD;;;WACD,oBACET,SADF,EAEEsB,KAFF,EAGEC,aAHF,EAIE;AACAvB,MAAAA,SAAS,CAACqB,IAAV,CACEC,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE,CALF,EAMED,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQA,WAAKvB,OAAL,CAAaI,OAAb,CAAqBkB,IAArB,CAA0B,KAAKG,YAA/B;AACAxB,MAAAA,SAAS,CAACqB,IAAV,CACEC,KAAK,CAAC,CAAD,CADP,EAEEA,KAAK,CAAC,CAAD,CAFP,EAGEA,KAAK,CAAC,CAAD,CAAL,GAAW,CAHb,EAIEC,aAJF,EAKE,CALF,EAMED,KAAK,CAAC,CAAD,CAAL,GAAW,CANb;AAQA,WAAKvB,OAAL,CAAaI,OAAb,CAAqBkB,IAArB,CAA0B,KAAKG,YAA/B;AACA,WAAKA,YAAL;AACD;;;WACD,6BAA4BC,EAA5B,EAAkDC,EAAlD,EAAwE;AACtE,UAAMC,EAAE,GAAGD,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,UAAMG,EAAE,GAAGF,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,aAAOI,IAAI,CAACC,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;AACD","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\n\nconst lineA = vec2.create();\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n startIndex: number;\n indexes: number[];\n };\n\n private started: boolean = false;\n\n private totalDistance: number = 0;\n private currentIndex: number = 0;\n\n constructor() {\n this.complex = {\n positions: [],\n indices: [],\n startIndex: 0,\n indexes: [],\n };\n }\n\n public simpleExtrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n\n this.started = false;\n\n this.totalDistance = 0;\n\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const amt = this.simpleSegment(complex, count, last, cur);\n count += amt;\n }\n\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n return complex;\n }\n private simpleSegment(complex: any, index: number, last: vec3, cur: vec3) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n\n direction(lineA, flatCur, flatLast);\n\n const segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n\n if (!this.started) {\n this.started = true;\n this.extrusions(positions, last, this.totalDistance - segmentDistance);\n }\n\n this.extrusions(positions, cur, this.totalDistance);\n indices.push(index + 0, index + 1, index + 2);\n indices.push(index + 2, index + 1, index + 3);\n count += 2;\n\n return count;\n }\n private extrusions(\n positions: number[],\n point: vec3, // 顶点\n distanceRadio: number,\n ) {\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n 0,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n 0,\n point[2] | 0,\n );\n this.complex.indexes.push(this.currentIndex);\n this.currentIndex++;\n }\n private lineSegmentDistance(b1: [number, number], a1: [number, number]) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"simpleLine.js"}
@@ -69,6 +69,7 @@ var WindModel = function (_BaseModel) {
69
69
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "imageCoords", void 0);
70
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "sizeScale", 0.5);
71
71
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "frequency", new _l7Utils.FrequencyController(7.2));
72
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "cacheZoom", void 0);
72
73
  return _this;
73
74
  }
74
75
 
@@ -90,7 +91,36 @@ var WindModel = function (_BaseModel) {
90
91
  }, {
91
92
  key: "initModels",
92
93
  value: function initModels(callbackModel) {
93
- var _this3 = this;
94
+ var _source$data,
95
+ _source$data2,
96
+ _source$data2$images,
97
+ _this3 = this;
98
+
99
+ var _ref = this.layer.getLayerConfig(),
100
+ _ref$uMin = _ref.uMin,
101
+ uMin = _ref$uMin === void 0 ? -21.32 : _ref$uMin,
102
+ _ref$uMax = _ref.uMax,
103
+ uMax = _ref$uMax === void 0 ? 26.8 : _ref$uMax,
104
+ _ref$vMin = _ref.vMin,
105
+ vMin = _ref$vMin === void 0 ? -21.57 : _ref$vMin,
106
+ _ref$vMax = _ref.vMax,
107
+ vMax = _ref$vMax === void 0 ? 21.42 : _ref$vMax,
108
+ _ref$fadeOpacity = _ref.fadeOpacity,
109
+ fadeOpacity = _ref$fadeOpacity === void 0 ? 0.996 : _ref$fadeOpacity,
110
+ _ref$speedFactor = _ref.speedFactor,
111
+ speedFactor = _ref$speedFactor === void 0 ? 0.25 : _ref$speedFactor,
112
+ _ref$dropRate = _ref.dropRate,
113
+ dropRate = _ref$dropRate === void 0 ? 0.003 : _ref$dropRate,
114
+ _ref$dropRateBump = _ref.dropRateBump,
115
+ dropRateBump = _ref$dropRateBump === void 0 ? 0.01 : _ref$dropRateBump,
116
+ _ref$rampColors = _ref.rampColors,
117
+ rampColors = _ref$rampColors === void 0 ? defaultRampColors : _ref$rampColors,
118
+ _ref$sizeScale = _ref.sizeScale,
119
+ sizeScale = _ref$sizeScale === void 0 ? 0.5 : _ref$sizeScale,
120
+ _ref$mask = _ref.mask,
121
+ mask = _ref$mask === void 0 ? false : _ref$mask,
122
+ _ref$maskInside = _ref.maskInside,
123
+ maskInside = _ref$maskInside === void 0 ? true : _ref$maskInside;
94
124
 
95
125
  var createTexture2D = this.rendererService.createTexture2D;
96
126
  var source = this.layer.getSource();
@@ -98,32 +128,13 @@ var WindModel = function (_BaseModel) {
98
128
  height: 0,
99
129
  width: 0
100
130
  });
131
+ this.cacheZoom = Math.floor(this.mapService.getZoom());
101
132
  var glContext = this.rendererService.getGLContext();
102
- this.imageCoords = source.data.dataArray[0].coordinates;
103
- source.data.images.then(function (imageData) {
104
- var _ref = _this3.layer.getLayerConfig(),
105
- _ref$uMin = _ref.uMin,
106
- uMin = _ref$uMin === void 0 ? -21.32 : _ref$uMin,
107
- _ref$uMax = _ref.uMax,
108
- uMax = _ref$uMax === void 0 ? 26.8 : _ref$uMax,
109
- _ref$vMin = _ref.vMin,
110
- vMin = _ref$vMin === void 0 ? -21.57 : _ref$vMin,
111
- _ref$vMax = _ref.vMax,
112
- vMax = _ref$vMax === void 0 ? 21.42 : _ref$vMax,
113
- _ref$fadeOpacity = _ref.fadeOpacity,
114
- fadeOpacity = _ref$fadeOpacity === void 0 ? 0.996 : _ref$fadeOpacity,
115
- _ref$speedFactor = _ref.speedFactor,
116
- speedFactor = _ref$speedFactor === void 0 ? 0.25 : _ref$speedFactor,
117
- _ref$dropRate = _ref.dropRate,
118
- dropRate = _ref$dropRate === void 0 ? 0.003 : _ref$dropRate,
119
- _ref$dropRateBump = _ref.dropRateBump,
120
- dropRateBump = _ref$dropRateBump === void 0 ? 0.01 : _ref$dropRateBump,
121
- _ref$rampColors = _ref.rampColors,
122
- rampColors = _ref$rampColors === void 0 ? defaultRampColors : _ref$rampColors,
123
- _ref$sizeScale = _ref.sizeScale,
124
- sizeScale = _ref$sizeScale === void 0 ? 0.5 : _ref$sizeScale;
125
-
126
- _this3.sizeScale = sizeScale;
133
+ this.imageCoords = (_source$data = source.data) === null || _source$data === void 0 ? void 0 : _source$data.dataArray[0].coordinates;
134
+ (_source$data2 = source.data) === null || _source$data2 === void 0 ? void 0 : (_source$data2$images = _source$data2.images) === null || _source$data2$images === void 0 ? void 0 : _source$data2$images.then(function (imageData) {
135
+ var _this3$texture;
136
+
137
+ _this3.sizeScale = sizeScale * _this3.getZoomScale();
127
138
 
128
139
  var _this3$getWindSize = _this3.getWindSize(),
129
140
  imageWidth = _this3$getWindSize.imageWidth,
@@ -149,10 +160,10 @@ var WindModel = function (_BaseModel) {
149
160
  image: imageData[0]
150
161
  });
151
162
 
163
+ (_this3$texture = _this3.texture) === null || _this3$texture === void 0 ? void 0 : _this3$texture.destroy();
152
164
  _this3.texture = createTexture2D({
153
- data: imageData[0],
154
- width: imageData[0].width,
155
- height: imageData[0].height
165
+ width: imageWidth,
166
+ height: imageHeight
156
167
  });
157
168
 
158
169
  _this3.layerService.updateLayerRenderList();
@@ -182,8 +193,8 @@ var WindModel = function (_BaseModel) {
182
193
  value: function getWindSize() {
183
194
  var p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);
184
195
  var p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);
185
- var imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);
186
- var imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);
196
+ var imageWidth = Math.min(Math.floor((p2.x - p1.x) * this.sizeScale), 2048);
197
+ var imageHeight = Math.min(Math.floor((p1.y - p2.y) * this.sizeScale), 2048);
187
198
  return {
188
199
  imageWidth: imageWidth,
189
200
  imageHeight: imageHeight
@@ -235,6 +246,11 @@ var WindModel = function (_BaseModel) {
235
246
  }
236
247
  });
237
248
  }
249
+ }, {
250
+ key: "getZoomScale",
251
+ value: function getZoomScale() {
252
+ return Math.min((this.cacheZoom + 4) / 30 * 2, 2);
253
+ }
238
254
  }, {
239
255
  key: "drawWind",
240
256
  value: function drawWind() {
@@ -263,18 +279,24 @@ var WindModel = function (_BaseModel) {
263
279
  _ref2$sizeScale = _ref2.sizeScale,
264
280
  sizeScale = _ref2$sizeScale === void 0 ? 0.5 : _ref2$sizeScale;
265
281
 
266
- if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {
282
+ var newNumParticles = numParticles;
283
+ var currentZoom = Math.floor(this.mapService.getZoom());
284
+
285
+ if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale || currentZoom !== this.cacheZoom) {
286
+ var zoomScale = this.getZoomScale();
267
287
  this.sizeScale = sizeScale;
288
+ newNumParticles *= zoomScale;
268
289
 
269
290
  var _this$getWindSize = this.getWindSize(),
270
291
  imageWidth = _this$getWindSize.imageWidth,
271
292
  imageHeight = _this$getWindSize.imageHeight;
272
293
 
273
294
  this.wind.reSize(imageWidth, imageHeight);
295
+ this.cacheZoom = currentZoom;
274
296
  }
275
297
 
276
298
  this.wind.updateWindDir(uMin, uMax, vMin, vMax);
277
- this.wind.updateParticelNum(numParticles);
299
+ this.wind.updateParticelNum(newNumParticles);
278
300
  this.wind.updateColorRampTexture(rampColors);
279
301
  this.wind.fadeOpacity = fadeOpacity;
280
302
  this.wind.speedFactor = speedFactor;
@@ -302,6 +324,12 @@ var WindModel = function (_BaseModel) {
302
324
  var _ref3 = this.layer.getLayerConfig(),
303
325
  opacity = _ref3.opacity;
304
326
 
327
+ this.layer.masks.map(function (m) {
328
+ m.hooks.beforeRenderData.call();
329
+ m.hooks.beforeRender.call();
330
+ m.render();
331
+ m.hooks.afterRender.call();
332
+ });
305
333
  (_this$colorModel = this.colorModel) === null || _this$colorModel === void 0 ? void 0 : _this$colorModel.draw({
306
334
  uniforms: {
307
335
  u_opacity: opacity || 1.0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["defaultRampColors","WindModel","FrequencyController","frequency","run","drawWind","drawColorMode","Error","callbackModel","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","getWindSize","imageWidth","imageHeight","options","wind","Wind","setWind","image","layerService","updateLayerRenderList","renderLayers","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","RasterImageTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","model","colorModel","catch","err","console","warn","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels(callbackModel: (models: IModel[]) => void) {\n const { createTexture2D } = this.rendererService;\n\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.layer\n .buildLayerModel({\n moduleName: 'wind',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n })\n .then((model) => {\n this.colorModel = model;\n callbackModel([model]);\n })\n .catch((err) => {\n console.warn(err);\n callbackModel([]);\n });\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels(callbackModel: (models: IModel[]) => void) {\n this.initModels(callbackModel);\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel?.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["defaultRampColors","WindModel","FrequencyController","frequency","run","drawWind","drawColorMode","Error","callbackModel","layer","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","mask","maskInside","createTexture2D","rendererService","source","getSource","texture","height","width","cacheZoom","Math","floor","mapService","getZoom","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getZoomScale","getWindSize","imageWidth","imageHeight","options","wind","Wind","setWind","image","destroy","layerService","updateLayerRenderList","renderLayers","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","RasterImageTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","model","colorModel","catch","err","console","warn","p1","lngLatToPixel","p2","min","x","y","initModels","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","newNumParticles","currentZoom","zoomScale","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","masks","map","m","hooks","beforeRenderData","call","beforeRender","render","afterRender","uniforms","u_opacity","u_texture","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n private cacheZoom: number;\n\n public render() {\n // Tip: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels(callbackModel: (models: IModel[]) => void) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n // mask\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n const { createTexture2D } = this.rendererService;\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n this.cacheZoom = Math.floor(this.mapService.getZoom());\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data?.dataArray[0].coordinates as [Point, Point];\n\n source.data?.images?.then((imageData: HTMLImageElement[]) => {\n this.sizeScale = sizeScale * this.getZoomScale();\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n this.texture?.destroy();\n\n this.texture = createTexture2D({\n width: imageWidth,\n height: imageHeight,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.layer\n .buildLayerModel({\n moduleName: 'wind',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n })\n .then((model) => {\n this.colorModel = model;\n callbackModel([model]);\n })\n .catch((err) => {\n console.warn(err);\n callbackModel([]);\n });\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.min(\n Math.floor((p2.x - p1.x) * this.sizeScale),\n 2048,\n );\n const imageHeight = Math.min(\n Math.floor((p1.y - p2.y) * this.sizeScale),\n 2048,\n );\n return { imageWidth, imageHeight };\n }\n\n public buildModels(callbackModel: (models: IModel[]) => void) {\n this.initModels(callbackModel);\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private getZoomScale() {\n return Math.min(((this.cacheZoom + 4) / 30) * 2, 2);\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n let newNumParticles = numParticles;\n const currentZoom = Math.floor(this.mapService.getZoom());\n if (\n (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) ||\n currentZoom !== this.cacheZoom\n ) {\n const zoomScale = this.getZoomScale();\n this.sizeScale = sizeScale;\n newNumParticles *= zoomScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n this.cacheZoom = currentZoom;\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(newNumParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n\n this.layer.masks.map((m) => {\n m.hooks.beforeRenderData.call();\n m.hooks.beforeRender.call();\n m.render();\n m.hooks.afterRender.call();\n });\n\n this.colorModel?.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
@@ -244,9 +244,9 @@ var Wind = function () {
244
244
  var gl = this.gl;
245
245
  bindFramebuffer(gl, this.framebuffer, this.screenTexture);
246
246
  gl.viewport(0, 0, this.width, this.height);
247
+ gl.disable(gl.BLEND);
247
248
  this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);
248
249
  this.drawParticles();
249
- gl.disable(gl.BLEND);
250
250
  this.pixels = new Uint8Array(4 * this.width * this.height);
251
251
  gl.readPixels(0, 0, this.width, this.height, gl.RGBA, gl.UNSIGNED_BYTE, this.pixels);
252
252
  bindFramebuffer(gl, null, null);