@antv/l7-layers 2.8.18 → 2.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/line/models/line.js +5 -2
- package/es/line/models/line.js.map +1 -1
- package/es/point/models/fillmage.js +20 -2
- package/es/point/models/fillmage.js.map +1 -1
- package/es/utils/symbol-layout.js +1 -1
- package/es/utils/symbol-layout.js.map +1 -1
- package/es/utils/updateShape.js +6 -0
- package/es/utils/updateShape.js.map +1 -1
- package/lib/line/models/line.js +5 -2
- package/lib/line/models/line.js.map +1 -1
- package/lib/point/models/fillmage.js +20 -2
- package/lib/point/models/fillmage.js.map +1 -1
- package/lib/utils/symbol-layout.js +1 -1
- package/lib/utils/symbol-layout.js.map +1 -1
- package/lib/utils/updateShape.js +6 -0
- package/lib/utils/updateShape.js.map +1 -1
- package/package.json +5 -5
package/es/line/models/line.js
CHANGED
|
@@ -18,7 +18,7 @@ import { LineTriangulation } from '../../core/triangulation';
|
|
|
18
18
|
var line_dash_frag = "#define LineTypeSolid 0.0\nuniform float u_opacity : 1.0;\n\nvarying vec4 v_color;\n\n// dash\nvarying vec4 v_dash_array;\n\n#pragma include \"picking\"\n\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ]; // \u63A7\u5236\u8FD0\u52A8\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n gl_FragColor = v_color;\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n // dash line\n \n float flag = 0.;\n float dashLength = mod(d_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\n if(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z)) {\n flag = 1.;\n }\n gl_FragColor.a *=flag;\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
19
19
|
var line_dash_vert = "#define LineTypeSolid 0.0\n#define LineTypeDash 1.0\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\n\nuniform float u_vertexScale: 1.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\nvarying vec4 v_dash_array;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n vec2 offset = project_pixel(size.xy);\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, project_pixel(a_Size.y), 1.0));\n } else {\n float lineHeight = a_Size.y;\n \n // #define COORDINATE_SYSTEM_P20 5.0\n // #define COORDINATE_SYSTEM_P20_OFFSET 6.0\n // amap1.x\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20 || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {\n // \u4FDD\u6301\u9AD8\u5EA6\u76F8\u5BF9\u4E0D\u53D8\n lineHeight *= pow(2.0, 20.0 - u_Zoom);\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, lineHeight, 1.0));\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
20
20
|
var line_frag = "#define Animate 0.0\n#define LineTexture 1.0\nuniform float u_blur : 0.99;\nuniform float u_opacity : 1.0;\nuniform float u_textureBlend;\n\nuniform float u_borderWidth: 0.0;\nuniform vec4 u_borderColor;\nvarying vec4 v_color;\n\n// line texture\nuniform float u_line_texture;\nuniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\nvarying vec2 v_iconMapUV;\n\n#pragma include \"picking\"\n\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ]; // \u63A7\u5236\u8FD0\u52A8\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float animateSpeed = 0.0; // \u8FD0\u52A8\u901F\u5EA6\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n gl_FragColor = v_color;\n // anti-alias\n // float blur = 1.0 - smoothstep(u_blur, 1., length(v_normal.xy));\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n if(u_aimate.x == Animate) {\n animateSpeed = u_time / u_aimate.y;\n float alpha =1.0 - fract( mod(1.0- d_distance_ratio, u_aimate.z)* (1.0/ u_aimate.z) + animateSpeed);\n alpha = (alpha + u_aimate.w -1.0) / u_aimate.w;\n alpha = smoothstep(0., 1., alpha);\n gl_FragColor.a *= alpha;\n }\n\n if(u_line_texture == LineTexture) { // while load texture\n float aDistance = styleMappingMat[3].g; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n float d_texPixelLen = styleMappingMat[3].b; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n float u = fract(mod(aDistance, d_texPixelLen)/d_texPixelLen - animateSpeed);\n float v = styleMappingMat[3].a; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // v = max(smoothstep(0.95, 1.0, v), v);\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\n \n // gl_FragColor = filterColor(gl_FragColor + texture2D(u_texture, vec2(u, v)));\n // gl_FragColor = filterColor(gl_FragColor + texture2D(u_texture, uv));\n vec4 pattern = texture2D(u_texture, uv);\n\n if(u_textureBlend == 0.0) { // normal\n pattern.a = 0.0;\n gl_FragColor += pattern;\n } else { // replace\n pattern.a *= opacity;\n if(gl_FragColor.a <= 0.0) {\n pattern.a = 0.0;\n }\n gl_FragColor = pattern;\n }\n } \n\n float v = styleMappingMat[3].a;\n float borderWidth = min(0.5, u_borderWidth);\n // \u7ED8\u5236 border\n if(borderWidth > 0.01) {\n float borderOuterWidth = borderWidth/2.0;\n\n if(v >= 1.0 - borderWidth || v <= borderWidth) {\n if(v > borderWidth) {\n float linear = smoothstep(0.0, 1.0, (v - (1.0 - borderWidth))/borderWidth);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, u_borderColor.rgb, linear);\n } else if(v <= borderWidth) {\n float linear = smoothstep(0.0, 1.0, v/borderWidth);\n gl_FragColor.rgb = mix(u_borderColor.rgb, gl_FragColor.rgb, linear);\n }\n }\n\n if(v < borderOuterWidth) {\n gl_FragColor.a = mix(0.0, gl_FragColor.a, v/borderOuterWidth);\n } else if(v > 1.0 - borderOuterWidth) {\n gl_FragColor.a = mix(gl_FragColor.a, 0.0, (v - (1.0 - borderOuterWidth))/borderOuterWidth);\n }\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
21
|
-
var line_vert = "\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\nuniform float u_vertexScale: 1.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\n\n// texV \u7EBF\u56FE\u5C42 - \u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\uFF08\u7EBF\u7684\u5BBD\u5EA6\u65B9\u5411\uFF09\nvarying vec2 v_iconMapUV;\n\n\nuniform float u_linearColor: 0;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n float d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n\n v_iconMapUV = a_iconMapUV;\n d_texPixelLen = project_float_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n\n vec2 offset = project_pixel(size.xy);\n\n float lineOffsetWidth = length(offset + offset * sign(a_Miter)); // \u7EBF\u6A2A\u5411\u504F\u79FB\u7684\u8DDD\u79BB\uFF08\u5411\u4E24\u4FA7\u504F\u79FB\u7684\u548C\uFF09\n float linePixelSize = project_pixel(a_Size.x) * 2.0; // \u5B9A\u70B9\u4F4D\u7F6E\u504F\u79FB\uFF0C\u6309\u5730\u56FE\u7B49\u7EA7\u7F29\u653E\u540E\u7684\u8DDD\u79BB \u5355\u4FA7 * 2\n float texV = lineOffsetWidth/linePixelSize; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance;; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n styleMappingMat[3][2] = d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n styleMappingMat[3][3] = texV; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n float h = float(a_Position.z) * u_vertexScale; // \u7EBF\u9876\u70B9\u7684\u9AD8\u5EA6 - \u517C\u5BB9\u4E0D\u5B58\u5728\u7B2C\u4E09\u4E2A\u6570\u503C\u7684\u60C5\u51B5\n
|
|
21
|
+
var line_vert = "\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\nuniform float u_heightfixed: 0.0;\nuniform float u_vertexScale: 1.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\n\n// texV \u7EBF\u56FE\u5C42 - \u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\uFF08\u7EBF\u7684\u5BBD\u5EA6\u65B9\u5411\uFF09\nvarying vec2 v_iconMapUV;\n\n\nuniform float u_linearColor: 0;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n float d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n\n v_iconMapUV = a_iconMapUV;\n d_texPixelLen = project_float_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n\n vec2 offset = project_pixel(size.xy);\n\n float lineOffsetWidth = length(offset + offset * sign(a_Miter)); // \u7EBF\u6A2A\u5411\u504F\u79FB\u7684\u8DDD\u79BB\uFF08\u5411\u4E24\u4FA7\u504F\u79FB\u7684\u548C\uFF09\n float linePixelSize = project_pixel(a_Size.x) * 2.0; // \u5B9A\u70B9\u4F4D\u7F6E\u504F\u79FB\uFF0C\u6309\u5730\u56FE\u7B49\u7EA7\u7F29\u653E\u540E\u7684\u8DDD\u79BB \u5355\u4FA7 * 2\n float texV = lineOffsetWidth/linePixelSize; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance;; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n styleMappingMat[3][2] = d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n styleMappingMat[3][3] = texV; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n float h = float(a_Position.z) * u_vertexScale; // \u7EBF\u9876\u70B9\u7684\u9AD8\u5EA6 - \u517C\u5BB9\u4E0D\u5B58\u5728\u7B2C\u4E09\u4E2A\u6570\u503C\u7684\u60C5\u51B5 vertex height\n float lineHeight = a_Size.y; // size \u7B2C\u4E8C\u4E2A\u53C2\u6570\u4EE3\u8868\u7684\u9AD8\u5EA6 [linewidth, lineheight]\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n lineHeight *= 0.2; // \u4FDD\u6301\u548C amap/mapbox \u4E00\u81F4\u7684\u6548\u679C\n h *= 0.2;\n if(u_heightfixed < 1.0) {\n lineHeight = project_pixel(a_Size.y);\n }\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, lineHeight + h + u_raisingHeight, 1.0));\n } else {\n // mapbox - amap\n \n // \u517C\u5BB9 mapbox \u5728\u7EBF\u9AD8\u5EA6\u4E0A\u7684\u6548\u679C\u8868\u73B0\u57FA\u672C\u4E00\u81F4\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n // mapbox\n // \u4FDD\u6301\u9AD8\u5EA6\u76F8\u5BF9\u4E0D\u53D8\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n h *= mapboxZoomScale;\n h += u_raisingHeight * mapboxZoomScale;\n if(u_heightfixed > 0.0) {\n lineHeight *= mapboxZoomScale;\n }\n \n } else {\n // amap\n h += u_raisingHeight;\n // lineHeight \u9876\u70B9\u504F\u79FB\u9AD8\u5EA6\n if(u_heightfixed < 1.0) {\n lineHeight *= pow(2.0, 20.0 - u_Zoom);\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, lineHeight + h, 1.0));\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
22
22
|
var linear_line_frag = "#define LineTypeSolid 0.0\n#define LineTypeDash 1.0\n#define Animate 0.0\n#define LineTexture 1.0\nuniform float u_blur : 0.99;\nuniform float u_line_type: 0.0;\nuniform float u_opacity : 1.0;\n\nvarying vec4 v_color;\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\n\n#pragma include \"picking\"\n\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n gl_FragColor = mix(u_sourceColor, u_targetColor, d_distance_ratio);\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n gl_FragColor = v_color;\n }\n\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
23
23
|
var lineStyleObj = {
|
|
24
24
|
solid: 0.0,
|
|
@@ -93,7 +93,9 @@ var LineModel = function (_BaseModel) {
|
|
|
93
93
|
_ref$borderColor = _ref.borderColor,
|
|
94
94
|
borderColor = _ref$borderColor === void 0 ? '#ccc' : _ref$borderColor,
|
|
95
95
|
_ref$raisingHeight = _ref.raisingHeight,
|
|
96
|
-
raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight
|
|
96
|
+
raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight,
|
|
97
|
+
_ref$heightfixed = _ref.heightfixed,
|
|
98
|
+
heightfixed = _ref$heightfixed === void 0 ? false : _ref$heightfixed;
|
|
97
99
|
|
|
98
100
|
if (dashArray.length === 2) {
|
|
99
101
|
dashArray.push(0, 0);
|
|
@@ -160,6 +162,7 @@ var LineModel = function (_BaseModel) {
|
|
|
160
162
|
u_linearColor: useLinearColor,
|
|
161
163
|
u_sourceColor: sourceColorArr,
|
|
162
164
|
u_targetColor: targetColorArr,
|
|
165
|
+
u_heightfixed: Number(heightfixed),
|
|
163
166
|
u_vertexScale: vertexHeightScale,
|
|
164
167
|
u_raisingHeight: Number(raisingHeight)
|
|
165
168
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/line/models/line.ts"],"names":["AttributeType","gl","getMask","rgb2arr","BaseModel","LineTriangulation","lineStyleObj","solid","dash","LineModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","layer","render","mag","NEAREST","min","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","sourceColor","targetColor","textureBlend","lineType","dashArray","lineTexture","iconStep","vertexHeightScale","borderWidth","borderColor","raisingHeight","length","push","getDirty","bind","useLinearColor","sourceColorArr","targetColorArr","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_textureBlend","u_line_type","u_dash_array","u_texture","u_line_texture","u_icon_step","u_textSize","u_borderWidth","u_borderColor","u_linearColor","u_sourceColor","u_targetColor","u_vertexScale","u_raisingHeight","Number","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","mask","maskInside","depth","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","primitive","TRIANGLES","blend","getBlend","enable","stencil","line_dash_frag","line_dash_vert","linear_line_frag","line_vert","line_frag","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IEncodeFeature,\n IImage,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\n\nimport { getMask, rgb2arr } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { ILineLayerStyleOptions, lineStyleType } from '../../core/interface';\nimport { LineTriangulation } from '../../core/triangulation';\n// dash line shader\nimport line_dash_frag from '../shaders/dash/line_dash_frag.glsl';\nimport line_dash_vert from '../shaders/dash/line_dash_vert.glsl';\n// basic line shader\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\n// other function shaders\nimport linear_line_frag from '../shaders/linear/line_linear_frag.glsl';\n\nconst lineStyleObj: { [key: string]: number } = {\n solid: 0.0,\n dash: 1.0,\n};\nexport default class LineModel extends BaseModel {\n protected texture: ITexture2D;\n public getUninforms(): IModelUniform {\n const {\n opacity,\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n lineTexture = false,\n iconStep = 100,\n vertexHeightScale = 20.0,\n borderWidth = 0.0,\n borderColor = '#ccc',\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n\n if (this.dataTextureTest && this.dataTextureNeedUpdate({ opacity })) {\n this.judgeStyleAttributes({ opacity });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n // u_opacity: opacity === undefined ? 1 : opacity,\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_line_type: lineStyleObj[lineType],\n u_dash_array: dashArray,\n\n // 纹理支持参数\n u_texture: this.texture, // 贴图\n u_line_texture: lineTexture ? 1.0 : 0.0, // 传入线的标识\n u_icon_step: iconStep,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n // line border 参数\n u_borderWidth: borderWidth,\n u_borderColor: rgb2arr(borderColor),\n\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n u_raisingHeight: Number(raisingHeight),\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n depth = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'line_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: depth },\n // depth: { enable: true },\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据参数获取不同的 shader 代码\n * @returns\n */\n public getShaders(): { frag: string; vert: string; type: string } {\n const {\n sourceColor,\n targetColor,\n lineType,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n\n if (lineType === 'dash') {\n return {\n frag: line_dash_frag,\n vert: line_dash_vert,\n type: 'dash',\n };\n }\n\n if (sourceColor && targetColor) {\n // 分离 linear 功能\n return {\n frag: linear_line_frag,\n vert: line_vert,\n type: 'linear',\n };\n } else {\n return {\n frag: line_frag,\n vert: line_vert,\n type: 'normal',\n };\n }\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3]];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'total_distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Total_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[5]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size as number, 0];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // @ts-ignore\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n normal: number[],\n ) => {\n return normal;\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'miter',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Miter',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[4]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { texture } = feature;\n const { x, y } = iconMap[texture as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n });\n };\n}\n"],"file":"line.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/line/models/line.ts"],"names":["AttributeType","gl","getMask","rgb2arr","BaseModel","LineTriangulation","lineStyleObj","solid","dash","LineModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","layer","render","mag","NEAREST","min","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","sourceColor","targetColor","textureBlend","lineType","dashArray","lineTexture","iconStep","vertexHeightScale","borderWidth","borderColor","raisingHeight","heightfixed","length","push","getDirty","bind","useLinearColor","sourceColorArr","targetColorArr","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_textureBlend","u_line_type","u_dash_array","u_texture","u_line_texture","u_icon_step","u_textSize","u_borderWidth","u_borderColor","u_linearColor","u_sourceColor","u_targetColor","u_heightfixed","Number","u_vertexScale","u_raisingHeight","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","mask","maskInside","depth","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","primitive","TRIANGLES","blend","getBlend","enable","stencil","line_dash_frag","line_dash_vert","linear_line_frag","line_vert","line_frag","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y"],"mappings":";;;;;;;;;;;;;AAAA,SACEA,aADF,EAEEC,EAFF,QAUO,eAVP;AAYA,SAASC,OAAT,EAAkBC,OAAlB,QAAiC,gBAAjC;AAEA,OAAOC,SAAP,MAAsB,sBAAtB;AAEA,SAASC,iBAAT,QAAkC,0BAAlC;;;;;;AAUA,IAAMC,YAAuC,GAAG;AAC9CC,EAAAA,KAAK,EAAE,GADuC;AAE9CC,EAAAA,IAAI,EAAE;AAFwC,CAAhD;;IAIqBC,S;;;;;;;;;;;;;;;;;;oEAkUK,YAAM;AAC5B,UAAQC,eAAR,GAA4B,MAAKC,eAAjC,CAAQD,eAAR;;AACA,UAAI,MAAKE,OAAT,EAAkB;AAChB,cAAKA,OAAL,CAAaC,MAAb,CAAoB;AAClBC,UAAAA,IAAI,EAAE,MAAKC,WAAL,CAAiBC,SAAjB;AADY,SAApB;;AAGA,cAAKC,KAAL,CAAWC,MAAX;;AACA;AACD;;AACD,YAAKN,OAAL,GAAeF,eAAe,CAAC;AAC7BI,QAAAA,IAAI,EAAE,MAAKC,WAAL,CAAiBC,SAAjB,EADuB;AAE7BG,QAAAA,GAAG,EAAElB,EAAE,CAACmB,OAFqB;AAG7BC,QAAAA,GAAG,EAAEpB,EAAE,CAACmB,OAHqB;AAI7BE,QAAAA,gBAAgB,EAAE,KAJW;AAK7BC,QAAAA,KAAK,EAAE,IALsB;AAM7BC,QAAAA,MAAM,EAAE,MAAKT,WAAL,CAAiBU,YAAjB,IAAiC;AANZ,OAAD,CAA9B;AAQD,K;;;;;;;WAjVD,wBAAqC;AACnC,iBAcI,KAAKR,KAAL,CAAWS,cAAX,EAdJ;AAAA,UACEC,OADF,QACEA,OADF;AAAA,UAEEC,WAFF,QAEEA,WAFF;AAAA,UAGEC,WAHF,QAGEA,WAHF;AAAA,mCAIEC,YAJF;AAAA,UAIEA,YAJF,kCAIiB,QAJjB;AAAA,+BAKEC,QALF;AAAA,UAKEA,QALF,8BAKa,OALb;AAAA,gCAMEC,SANF;AAAA,UAMEA,SANF,+BAMc,CAAC,EAAD,EAAK,CAAL,EAAQ,CAAR,EAAW,CAAX,CANd;AAAA,kCAOEC,WAPF;AAAA,UAOEA,WAPF,iCAOgB,KAPhB;AAAA,+BAQEC,QARF;AAAA,UAQEA,QARF,8BAQa,GARb;AAAA,uCASEC,iBATF;AAAA,UASEA,iBATF,sCASsB,IATtB;AAAA,kCAUEC,WAVF;AAAA,UAUEA,WAVF,iCAUgB,GAVhB;AAAA,kCAWEC,WAXF;AAAA,UAWEA,WAXF,iCAWgB,MAXhB;AAAA,oCAYEC,aAZF;AAAA,UAYEA,aAZF,mCAYkB,CAZlB;AAAA,kCAaEC,WAbF;AAAA,UAaEA,WAbF,iCAagB,KAbhB;;AAeA,UAAIP,SAAS,CAACQ,MAAV,KAAqB,CAAzB,EAA4B;AAC1BR,QAAAA,SAAS,CAACS,IAAV,CAAe,CAAf,EAAkB,CAAlB;AACD;;AAED,UAAI,KAAK9B,eAAL,CAAqB+B,QAArB,EAAJ,EAAqC;AACnC,aAAK9B,OAAL,CAAa+B,IAAb;AACD;;AAGD,UAAIC,cAAc,GAAG,CAArB;AACA,UAAIC,cAAc,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAArB;AACA,UAAIC,cAAc,GAAG,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAArB;;AACA,UAAIlB,WAAW,IAAIC,WAAnB,EAAgC;AAC9BgB,QAAAA,cAAc,GAAG1C,OAAO,CAACyB,WAAD,CAAxB;AACAkB,QAAAA,cAAc,GAAG3C,OAAO,CAAC0B,WAAD,CAAxB;AACAe,QAAAA,cAAc,GAAG,CAAjB;AACD;;AAED,UAAI,KAAKG,eAAL,IAAwB,KAAKC,qBAAL,CAA2B;AAAErB,QAAAA,OAAO,EAAPA;AAAF,OAA3B,CAA5B,EAAqE;AACnE,aAAKsB,oBAAL,CAA0B;AAAEtB,UAAAA,OAAO,EAAPA;AAAF,SAA1B;AACA,YAAMuB,UAAU,GAAG,KAAKjC,KAAL,CAAWkC,cAAX,EAAnB;;AACA,iCAAgC,KAAKC,YAAL,CAC9B,KAAKC,UADyB,EAE9BH,UAF8B,EAG9B,KAAKI,cAHyB,CAAhC;AAAA,YAAQxC,IAAR,sBAAQA,IAAR;AAAA,YAAcS,KAAd,sBAAcA,KAAd;AAAA,YAAqBC,MAArB,sBAAqBA,MAArB;;AAKA,aAAK+B,QAAL,GAAgB/B,MAAhB;AAEA,aAAKgC,WAAL,GACE,KAAKH,UAAL,GAAkB,CAAlB,IAAuBvC,IAAI,CAAC0B,MAAL,GAAc,CAArC,GACI,KAAK9B,eAAL,CAAqB;AACnB+C,UAAAA,KAAK,EAAE,IADY;AAEnB3C,UAAAA,IAAI,EAAJA,IAFmB;AAGnB4C,UAAAA,MAAM,EAAEzD,EAAE,CAAC0D,SAHQ;AAInBC,UAAAA,IAAI,EAAE3D,EAAE,CAAC4D,KAJU;AAKnBtC,UAAAA,KAAK,EAALA,KALmB;AAMnBC,UAAAA,MAAM,EAANA;AANmB,SAArB,CADJ,GASI,KAAKd,eAAL,CAAqB;AACnB+C,UAAAA,KAAK,EAAE,IADY;AAEnB3C,UAAAA,IAAI,EAAE,CAAC,CAAD,CAFa;AAGnB4C,UAAAA,MAAM,EAAEzD,EAAE,CAAC0D,SAHQ;AAInBC,UAAAA,IAAI,EAAE3D,EAAE,CAAC4D,KAJU;AAKnBtC,UAAAA,KAAK,EAAE,CALY;AAMnBC,UAAAA,MAAM,EAAE;AANW,SAArB,CAVN;AAkBD;;AAED,aAAO;AACLsC,QAAAA,aAAa,EAAE,KAAKN,WADf;AAELO,QAAAA,gBAAgB,EAAE,KAAKC,iBAAL,EAFb;AAILC,QAAAA,SAAS,EAAE,UAAStC,OAAT,IAAoBA,OAApB,GAA8B,GAJpC;AAKLuC,QAAAA,cAAc,EAAEpC,YAAY,KAAK,QAAjB,GAA4B,GAA5B,GAAkC,GAL7C;AAMLqC,QAAAA,WAAW,EAAE7D,YAAY,CAACyB,QAAD,CANpB;AAOLqC,QAAAA,YAAY,EAAEpC,SAPT;AAULqC,QAAAA,SAAS,EAAE,KAAKzD,OAVX;AAWL0D,QAAAA,cAAc,EAAErC,WAAW,GAAG,GAAH,GAAS,GAX/B;AAYLsC,QAAAA,WAAW,EAAErC,QAZR;AAaLsC,QAAAA,UAAU,EAAE,CAAC,IAAD,EAAO,KAAKzD,WAAL,CAAiBU,YAAjB,IAAiC,GAAxC,CAbP;AAgBLgD,QAAAA,aAAa,EAAErC,WAhBV;AAiBLsC,QAAAA,aAAa,EAAEvE,OAAO,CAACkC,WAAD,CAjBjB;AAoBLsC,QAAAA,aAAa,EAAE/B,cApBV;AAqBLgC,QAAAA,aAAa,EAAE/B,cArBV;AAsBLgC,QAAAA,aAAa,EAAE/B,cAtBV;AAyBLgC,QAAAA,aAAa,EAAEC,MAAM,CAACxC,WAAD,CAzBhB;AA4BLyC,QAAAA,aAAa,EAAE7C,iBA5BV;AA6BL8C,QAAAA,eAAe,EAAEF,MAAM,CAACzC,aAAD;AA7BlB,OAAP;AA+BD;;;WACD,8BAA2C;AACzC,kBAA0B,KAAKrB,KAAL,CAAWS,cAAX,EAA1B;AAAA,UAAQwD,aAAR,SAAQA,aAAR;;AACA,aAAO;AACLC,QAAAA,QAAQ,EAAE,KAAKC,mBAAL,CAAyBF,aAAzB,CADL;AAELG,QAAAA,MAAM,EAAE,KAAKpE,KAAL,CAAWqE,mBAAX;AAFH,OAAP;AAID;;;WAED,sBAA8B;AAC5B,WAAKC,aAAL;AACA,WAAKxE,WAAL,CAAiByE,EAAjB,CAAoB,aAApB,EAAmC,KAAKD,aAAxC;AAEA,aAAO,KAAKE,WAAL,EAAP;AACD;;;WAED,uBAAqB;AAAA;;AACnB,4BAAK7E,OAAL,gEAAc8E,OAAd;AACA,gCAAKlC,WAAL,wEAAkBkC,OAAlB;AACA,WAAK3E,WAAL,CAAiB4E,GAAjB,CAAqB,aAArB,EAAoC,KAAKJ,aAAzC;AACD;;;WAED,uBAA+B;AAC7B,kBAII,KAAKtE,KAAL,CAAWS,cAAX,EAJJ;AAAA,6BACEkE,IADF;AAAA,UACEA,IADF,2BACS,KADT;AAAA,mCAEEC,UAFF;AAAA,UAEEA,UAFF,iCAEe,IAFf;AAAA,8BAGEC,KAHF;AAAA,UAGEA,KAHF,4BAGU,KAHV;;AAKA,6BAA6B,KAAKC,UAAL,EAA7B;AAAA,UAAQC,IAAR,oBAAQA,IAAR;AAAA,UAAcC,IAAd,oBAAcA,IAAd;AAAA,UAAoBrC,IAApB,oBAAoBA,IAApB;;AACA,aAAO,CACL,KAAK3C,KAAL,CAAWiF,eAAX,CAA2B;AACzBC,QAAAA,UAAU,EAAE,UAAUvC,IADG;AAEzBwC,QAAAA,YAAY,EAAEH,IAFW;AAGzBI,QAAAA,cAAc,EAAEL,IAHS;AAIzBM,QAAAA,aAAa,EAAEjG,iBAJU;AAKzBkG,QAAAA,SAAS,EAAEtG,EAAE,CAACuG,SALW;AAMzBC,QAAAA,KAAK,EAAE,KAAKC,QAAL,EANkB;AAOzBZ,QAAAA,KAAK,EAAE;AAAEa,UAAAA,MAAM,EAAEb;AAAV,SAPkB;AASzBc,QAAAA,OAAO,EAAE1G,OAAO,CAAC0F,IAAD,EAAOC,UAAP;AATS,OAA3B,CADK,CAAP;AAaD;;;WAMD,sBAAkE;AAChE,kBAII,KAAK5E,KAAL,CAAWS,cAAX,EAJJ;AAAA,UACEE,WADF,SACEA,WADF;AAAA,UAEEC,WAFF,SAEEA,WAFF;AAAA,UAGEE,QAHF,SAGEA,QAHF;;AAMA,UAAIA,QAAQ,KAAK,MAAjB,EAAyB;AACvB,eAAO;AACLiE,UAAAA,IAAI,EAAEa,cADD;AAELZ,UAAAA,IAAI,EAAEa,cAFD;AAGLlD,UAAAA,IAAI,EAAE;AAHD,SAAP;AAKD;;AAED,UAAIhC,WAAW,IAAIC,WAAnB,EAAgC;AAE9B,eAAO;AACLmE,UAAAA,IAAI,EAAEe,gBADD;AAELd,UAAAA,IAAI,EAAEe,SAFD;AAGLpD,UAAAA,IAAI,EAAE;AAHD,SAAP;AAKD,OAPD,MAOO;AACL,eAAO;AACLoC,UAAAA,IAAI,EAAEiB,SADD;AAELhB,UAAAA,IAAI,EAAEe,SAFD;AAGLpD,UAAAA,IAAI,EAAE;AAHD,SAAP;AAKD;AACF;;;WAED,qCAAsC;AAAA;;AACpC,WAAKsD,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,UAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,YADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAACwH,WAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AASV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,mBAAO,CAACD,MAAM,CAAC,CAAD,CAAP,CAAP;AACD;AAhBS;AAHoC,OAAlD;AAsBA,WAAKX,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,gBAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,kBADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAACwH,WAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AASV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,mBAAO,CAACD,MAAM,CAAC,CAAD,CAAP,CAAP;AACD;AAhBS;AAHoC,OAAlD;AAuBA,WAAKX,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,MAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,QADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAAC8H,YAFJ;AAGNjH,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AASV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gCAAqBH,OAArB,CAAQD,IAAR;AAAA,gBAAQA,IAAR,8BAAe,CAAf;AACA,mBAAOM,KAAK,CAACC,OAAN,CAAcP,IAAd,IAAsB,CAACA,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAtB,GAA2C,CAACA,IAAD,EAAiB,CAAjB,CAAlD;AACD;AAjBS;AAHoC,OAAlD;AAyBA,WAAKR,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,QAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,UADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAACwH,WAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AAUV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKNI,MALM,EAMH;AACH,mBAAOA,MAAP;AACD;AAlBS;AAHoC,OAAlD;AAyBA,WAAKhB,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,OAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,SADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAACwH,WAFJ;AAGN3G,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AASV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,mBAAO,CAACD,MAAM,CAAC,CAAD,CAAP,CAAP;AACD;AAhBS;AAHoC,OAAlD;AAuBA,WAAKX,qBAAL,CAA2BC,sBAA3B,CAAkD;AAChDC,QAAAA,IAAI,EAAE,IAD0C;AAEhDxD,QAAAA,IAAI,EAAE5D,aAAa,CAACqH,SAF4B;AAGhDC,QAAAA,UAAU,EAAE;AACVF,UAAAA,IAAI,EAAE,aADI;AAEVG,UAAAA,MAAM,EAAE;AAENC,YAAAA,KAAK,EAAEvH,EAAE,CAAC8H,YAFJ;AAGNjH,YAAAA,IAAI,EAAE,EAHA;AAIN8C,YAAAA,IAAI,EAAE3D,EAAE,CAAC4D;AAJH,WAFE;AAQV6D,UAAAA,IAAI,EAAE,CARI;AASV7G,UAAAA,MAAM,EAAE,gBACN8G,OADM,EAENC,UAFM,EAGNC,MAHM,EAINC,YAJM,EAKH;AACH,gBAAMK,OAAO,GAAG,MAAI,CAACpH,WAAL,CAAiBqH,UAAjB,EAAhB;;AACA,gBAAQxH,OAAR,GAAoB+G,OAApB,CAAQ/G,OAAR;;AACA,wBAAiBuH,OAAO,CAACvH,OAAD,CAAP,IAA8B;AAAEyH,cAAAA,CAAC,EAAE,CAAL;AAAQC,cAAAA,CAAC,EAAE;AAAX,aAA/C;AAAA,gBAAQD,CAAR,SAAQA,CAAR;AAAA,gBAAWC,CAAX,SAAWA,CAAX;;AACA,mBAAO,CAACD,CAAD,EAAIC,CAAJ,CAAP;AACD;AAnBS;AAHoC,OAAlD;AAyBD;;;;EAhUoClI,S;;SAAlBK,S","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IEncodeFeature,\n IImage,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\n\nimport { getMask, rgb2arr } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { ILineLayerStyleOptions, lineStyleType } from '../../core/interface';\nimport { LineTriangulation } from '../../core/triangulation';\n// dash line shader\nimport line_dash_frag from '../shaders/dash/line_dash_frag.glsl';\nimport line_dash_vert from '../shaders/dash/line_dash_vert.glsl';\n// basic line shader\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\n// other function shaders\nimport linear_line_frag from '../shaders/linear/line_linear_frag.glsl';\n\nconst lineStyleObj: { [key: string]: number } = {\n solid: 0.0,\n dash: 1.0,\n};\nexport default class LineModel extends BaseModel {\n protected texture: ITexture2D;\n public getUninforms(): IModelUniform {\n const {\n opacity,\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n lineTexture = false,\n iconStep = 100,\n vertexHeightScale = 20.0,\n borderWidth = 0.0,\n borderColor = '#ccc',\n raisingHeight = 0,\n heightfixed = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n\n if (this.dataTextureTest && this.dataTextureNeedUpdate({ opacity })) {\n this.judgeStyleAttributes({ opacity });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n // u_opacity: opacity === undefined ? 1 : opacity,\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_line_type: lineStyleObj[lineType],\n u_dash_array: dashArray,\n\n // 纹理支持参数\n u_texture: this.texture, // 贴图\n u_line_texture: lineTexture ? 1.0 : 0.0, // 传入线的标识\n u_icon_step: iconStep,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n // line border 参数\n u_borderWidth: borderWidth,\n u_borderColor: rgb2arr(borderColor),\n\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 是否固定高度\n u_heightfixed: Number(heightfixed),\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n u_raisingHeight: Number(raisingHeight),\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n depth = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'line_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: depth },\n // depth: { enable: true },\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据参数获取不同的 shader 代码\n * @returns\n */\n public getShaders(): { frag: string; vert: string; type: string } {\n const {\n sourceColor,\n targetColor,\n lineType,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n\n if (lineType === 'dash') {\n return {\n frag: line_dash_frag,\n vert: line_dash_vert,\n type: 'dash',\n };\n }\n\n if (sourceColor && targetColor) {\n // 分离 linear 功能\n return {\n frag: linear_line_frag,\n vert: line_vert,\n type: 'linear',\n };\n } else {\n return {\n frag: line_frag,\n vert: line_vert,\n type: 'normal',\n };\n }\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3]];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'total_distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Total_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[5]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size as number, 0];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // @ts-ignore\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n normal: number[],\n ) => {\n return normal;\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'miter',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Miter',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[4]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { texture } = feature;\n const { x, y } = iconMap[texture as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n });\n };\n}\n"],"file":"line.js"}
|
|
@@ -17,7 +17,7 @@ import { getCullFace, getMask } from '@antv/l7-utils';
|
|
|
17
17
|
import BaseModel from '../../core/BaseModel';
|
|
18
18
|
import { PointFillTriangulation } from '../../core/triangulation';
|
|
19
19
|
var pointFillFrag = "uniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv;\n\nvoid main() {\n\n float opacity = styleMappingMat[0][0];\n\n vec2 pos = v_Iconuv / u_textSize + v_uv / u_textSize * 64.;\n gl_FragColor = texture2D(u_texture, pos);\n gl_FragColor.a *= opacity;\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
20
|
-
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute vec2 a_Uv;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform mat2 u_RotateMatrix;\nuniform float u_isMeter;\n\nvarying float v_radius;\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv; // icon \u8D34\u56FE\u7684 uv \u5750\u6807\n\nuniform float u_opacity : 1;\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n\n v_uv = (a_Extrude.xy + 1.0)/2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // empty - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // radius(16-bit)\n v_radius = a_Size;\n\n // TODO: billboard\n // anti-alias\n \n\n vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
20
|
+
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute vec2 a_Uv;\nattribute float a_Rotate;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform mat2 u_RotateMatrix;\nuniform float u_isMeter;\n\nvarying float v_radius;\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv; // icon \u8D34\u56FE\u7684 uv \u5750\u6807\n\nuniform float u_opacity : 1;\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n\n v_uv = (a_Extrude.xy + 1.0)/2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // empty - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // radius(16-bit)\n v_radius = a_Size;\n\n // TODO: billboard\n // anti-alias\n \n\n highp float angle_sin = sin(a_Rotate);\n highp float angle_cos = cos(a_Rotate);\n mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos);\n\n // vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec2 offset = (rotation_matrix * u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
21
21
|
import { Version } from '@antv/l7-maps';
|
|
22
22
|
|
|
23
23
|
var FillImageModel = function (_BaseModel) {
|
|
@@ -101,7 +101,7 @@ var FillImageModel = function (_BaseModel) {
|
|
|
101
101
|
rotateFlag = -1;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
this.radian = rotation ? rotateFlag * Math.PI * rotation / 180 : rotateFlag * Math.PI * (this.mapService.getRotation() % 360) / 180;
|
|
104
|
+
this.radian = rotation !== undefined ? rotateFlag * Math.PI * rotation / 180 : rotateFlag * Math.PI * (this.mapService.getRotation() % 360) / 180;
|
|
105
105
|
|
|
106
106
|
if (this.dataTextureTest && this.dataTextureNeedUpdate({
|
|
107
107
|
opacity: opacity,
|
|
@@ -264,6 +264,24 @@ var FillImageModel = function (_BaseModel) {
|
|
|
264
264
|
value: function registerBuiltinAttributes() {
|
|
265
265
|
var _this2 = this;
|
|
266
266
|
|
|
267
|
+
this.styleAttributeService.registerStyleAttribute({
|
|
268
|
+
name: 'rotate',
|
|
269
|
+
type: AttributeType.Attribute,
|
|
270
|
+
descriptor: {
|
|
271
|
+
name: 'a_Rotate',
|
|
272
|
+
buffer: {
|
|
273
|
+
usage: gl.DYNAMIC_DRAW,
|
|
274
|
+
data: [],
|
|
275
|
+
type: gl.FLOAT
|
|
276
|
+
},
|
|
277
|
+
size: 1,
|
|
278
|
+
update: function update(feature, featureIdx, vertex, attributeIdx) {
|
|
279
|
+
var _feature$rotate = feature.rotate,
|
|
280
|
+
rotate = _feature$rotate === void 0 ? 0 : _feature$rotate;
|
|
281
|
+
return Array.isArray(rotate) ? [rotate[0]] : [rotate];
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
});
|
|
267
285
|
this.styleAttributeService.registerStyleAttribute({
|
|
268
286
|
name: 'uv',
|
|
269
287
|
type: AttributeType.Attribute,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/point/models/fillmage.ts"],"names":["AttributeType","gl","getCullFace","getMask","BaseModel","PointFillTriangulation","Version","FillImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","mag","min","mipmap","layer","renderLayers","LINEAR","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","rotation","getDirty","bind","rotateFlag","mapService","version","radian","Math","PI","getRotation","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_RotateMatrix","Float32Array","cos","sin","u_additive","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","styleAttributeService","createAttributesAndIndices","updateTexture","on","unit","L7MAP","GLOBEL","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","depth","enable","getBlend","stencil","cull","face","pointFillFrag","pointFillVert","off","destroy","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","iconMap","getIconMap","shape","extrude","extrudeIndex","Array","isArray"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttribute,\n IElements,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport { PointFillTriangulation } from '../../core/triangulation';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/image/fillImage_frag.glsl';\nimport pointFillVert from '../shaders/image/fillImage_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\n\nexport default class FillImageModel extends BaseModel {\n public meter2coord: number = 1;\n private texture: ITexture2D;\n private isMeter: boolean = false;\n private radian: number = 0; // 旋转的弧度\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n rotation,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian = rotation\n ? (rotateFlag * Math.PI * rotation) / 180\n : (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_isMeter: Number(this.isMeter),\n u_RotateMatrix: new Float32Array([\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: PointFillTriangulation,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n public getShaders(): { frag: string; vert: string; type: string } {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n\n public clearModels() {\n this.iconService.off('imageUpdate', this.updateTexture);\n this.texture?.destroy();\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true,\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"fillmage.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/point/models/fillmage.ts"],"names":["AttributeType","gl","getCullFace","getMask","BaseModel","PointFillTriangulation","Version","FillImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","mag","min","mipmap","layer","renderLayers","LINEAR","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","rotation","getDirty","bind","rotateFlag","mapService","version","radian","undefined","Math","PI","getRotation","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_RotateMatrix","Float32Array","cos","sin","u_additive","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","styleAttributeService","createAttributesAndIndices","updateTexture","on","unit","L7MAP","GLOBEL","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","depth","enable","getBlend","stencil","cull","face","pointFillFrag","pointFillVert","off","destroy","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","rotate","Array","isArray","iconMap","getIconMap","shape","extrude","extrudeIndex"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttribute,\n IElements,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport { PointFillTriangulation } from '../../core/triangulation';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/image/fillImage_frag.glsl';\nimport pointFillVert from '../shaders/image/fillImage_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\n\nexport default class FillImageModel extends BaseModel {\n public meter2coord: number = 1;\n private texture: ITexture2D;\n private isMeter: boolean = false;\n private radian: number = 0; // 旋转的弧度\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n rotation,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian =\n rotation !== undefined\n ? (rotateFlag * Math.PI * rotation) / 180\n : (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_isMeter: Number(this.isMeter),\n u_RotateMatrix: new Float32Array([\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: PointFillTriangulation,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n public getShaders(): { frag: string; vert: string; type: string } {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n\n public clearModels() {\n this.iconService.off('imageUpdate', this.updateTexture);\n this.texture?.destroy();\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'rotate',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Rotate',\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { rotate = 0 } = feature;\n return Array.isArray(rotate) ? [rotate[0]] : [rotate as number];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true,\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"fillmage.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n // x,\n /**\n * iconfont\n * 在计算大小的时候计算的是 unicode 字符 如 \n * 在布局计算 icon 位置的时候应该始终保持居中(且 icon 只占一个字符的位置)\n */\n x: glyph.advance / 2,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
package/es/utils/updateShape.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
var shapeUpdateList = [['circle', 'cylinder'], ['square', 'cylinder'], ['triangle', 'cylinder'], ['pentagon', 'cylinder'], ['hexagon', 'cylinder'], ['octogon', 'cylinder'], ['hexagram', 'cylinder'], ['rhombus', 'cylinder'], ['vesica', 'cylinder']];
|
|
2
2
|
export function updateShape(layer, lastShape, currentShape) {
|
|
3
3
|
if (typeof lastShape === 'string' && typeof currentShape === 'string' && lastShape !== currentShape) {
|
|
4
|
+
if (layer.type === 'PointLayer') {
|
|
5
|
+
layer.dataState.dataSourceNeedUpdate = true;
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
shapeUpdateList.map(function (shapes) {
|
|
5
10
|
if (shapes.includes(lastShape) && shapes.includes(currentShape)) {
|
|
6
11
|
layer.dataState.dataSourceNeedUpdate = true;
|
|
12
|
+
return;
|
|
7
13
|
}
|
|
8
14
|
});
|
|
9
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/updateShape.ts"],"names":["shapeUpdateList","updateShape","layer","lastShape","currentShape","
|
|
1
|
+
{"version":3,"sources":["../../src/utils/updateShape.ts"],"names":["shapeUpdateList","updateShape","layer","lastShape","currentShape","type","dataState","dataSourceNeedUpdate","map","shapes","includes"],"mappings":"AAGA,IAAMA,eAAe,GAAG,CAEtB,CAAC,QAAD,EAAW,UAAX,CAFsB,EAGtB,CAAC,QAAD,EAAW,UAAX,CAHsB,EAItB,CAAC,UAAD,EAAa,UAAb,CAJsB,EAKtB,CAAC,UAAD,EAAa,UAAb,CALsB,EAMtB,CAAC,SAAD,EAAY,UAAZ,CANsB,EAOtB,CAAC,SAAD,EAAY,UAAZ,CAPsB,EAQtB,CAAC,UAAD,EAAa,UAAb,CARsB,EAStB,CAAC,SAAD,EAAY,UAAZ,CATsB,EAUtB,CAAC,QAAD,EAAW,UAAX,CAVsB,CAAxB;AAYA,OAAO,SAASC,WAAT,CACLC,KADK,EAELC,SAFK,EAGLC,YAHK,EAIC;AACN,MACE,OAAOD,SAAP,KAAqB,QAArB,IACA,OAAOC,YAAP,KAAwB,QADxB,IAEAD,SAAS,KAAKC,YAHhB,EAIE;AACA,QAAIF,KAAK,CAACG,IAAN,KAAe,YAAnB,EAAiC;AAC/BH,MAAAA,KAAK,CAACI,SAAN,CAAgBC,oBAAhB,GAAuC,IAAvC;AACA;AACD;;AAEDP,IAAAA,eAAe,CAACQ,GAAhB,CAAoB,UAACC,MAAD,EAAY;AAC9B,UAAIA,MAAM,CAACC,QAAP,CAAgBP,SAAhB,KAA8BM,MAAM,CAACC,QAAP,CAAgBN,YAAhB,CAAlC,EAAiE;AAE/DF,QAAAA,KAAK,CAACI,SAAN,CAAgBC,oBAAhB,GAAuC,IAAvC;AACA;AACD;AACF,KAND;AAOD;AACF","sourcesContent":["import { ILayer, StyleAttributeField } from '@antv/l7-core';\n// TODO: shapeUpdateList 存储一系列的 shape 类型\n// 当这一系列的 shape 相互切换的时候需要重构 layer 的 model (顶点数据集)\nconst shapeUpdateList = [\n // PointLayer\n ['circle', 'cylinder'],\n ['square', 'cylinder'],\n ['triangle', 'cylinder'],\n ['pentagon', 'cylinder'],\n ['hexagon', 'cylinder'],\n ['octogon', 'cylinder'],\n ['hexagram', 'cylinder'],\n ['rhombus', 'cylinder'],\n ['vesica', 'cylinder'],\n];\nexport function updateShape(\n layer: ILayer,\n lastShape: StyleAttributeField | undefined,\n currentShape: StyleAttributeField | undefined,\n): void {\n if (\n typeof lastShape === 'string' &&\n typeof currentShape === 'string' &&\n lastShape !== currentShape\n ) {\n if (layer.type === 'PointLayer') {\n layer.dataState.dataSourceNeedUpdate = true;\n return;\n }\n\n shapeUpdateList.map((shapes) => {\n if (shapes.includes(lastShape) && shapes.includes(currentShape)) {\n // TODO: dataSourceNeedUpdate 借用数据更新时更新 layer model 的工作流\n layer.dataState.dataSourceNeedUpdate = true;\n return;\n }\n });\n }\n}\n"],"file":"updateShape.js"}
|
package/lib/line/models/line.js
CHANGED
|
@@ -38,7 +38,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
38
38
|
var line_dash_frag = "#define LineTypeSolid 0.0\nuniform float u_opacity : 1.0;\n\nvarying vec4 v_color;\n\n// dash\nvarying vec4 v_dash_array;\n\n#pragma include \"picking\"\n\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ]; // \u63A7\u5236\u8FD0\u52A8\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n gl_FragColor = v_color;\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n // dash line\n \n float flag = 0.;\n float dashLength = mod(d_distance_ratio, v_dash_array.x + v_dash_array.y + v_dash_array.z + v_dash_array.w);\n if(dashLength < v_dash_array.x || (dashLength > (v_dash_array.x + v_dash_array.y) && dashLength < v_dash_array.x + v_dash_array.y + v_dash_array.z)) {\n flag = 1.;\n }\n gl_FragColor.a *=flag;\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
39
39
|
var line_dash_vert = "#define LineTypeSolid 0.0\n#define LineTypeDash 1.0\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\n\nuniform float u_vertexScale: 1.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\nvarying vec4 v_dash_array;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n vec2 offset = project_pixel(size.xy);\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, project_pixel(a_Size.y), 1.0));\n } else {\n float lineHeight = a_Size.y;\n \n // #define COORDINATE_SYSTEM_P20 5.0\n // #define COORDINATE_SYSTEM_P20_OFFSET 6.0\n // amap1.x\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20 || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {\n // \u4FDD\u6301\u9AD8\u5EA6\u76F8\u5BF9\u4E0D\u53D8\n lineHeight *= pow(2.0, 20.0 - u_Zoom);\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, lineHeight, 1.0));\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
40
40
|
var line_frag = "#define Animate 0.0\n#define LineTexture 1.0\nuniform float u_blur : 0.99;\nuniform float u_opacity : 1.0;\nuniform float u_textureBlend;\n\nuniform float u_borderWidth: 0.0;\nuniform vec4 u_borderColor;\nvarying vec4 v_color;\n\n// line texture\nuniform float u_line_texture;\nuniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\nvarying vec2 v_iconMapUV;\n\n#pragma include \"picking\"\n\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ]; // \u63A7\u5236\u8FD0\u52A8\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float animateSpeed = 0.0; // \u8FD0\u52A8\u901F\u5EA6\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n gl_FragColor = v_color;\n // anti-alias\n // float blur = 1.0 - smoothstep(u_blur, 1., length(v_normal.xy));\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n if(u_aimate.x == Animate) {\n animateSpeed = u_time / u_aimate.y;\n float alpha =1.0 - fract( mod(1.0- d_distance_ratio, u_aimate.z)* (1.0/ u_aimate.z) + animateSpeed);\n alpha = (alpha + u_aimate.w -1.0) / u_aimate.w;\n alpha = smoothstep(0., 1., alpha);\n gl_FragColor.a *= alpha;\n }\n\n if(u_line_texture == LineTexture) { // while load texture\n float aDistance = styleMappingMat[3].g; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n float d_texPixelLen = styleMappingMat[3].b; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n float u = fract(mod(aDistance, d_texPixelLen)/d_texPixelLen - animateSpeed);\n float v = styleMappingMat[3].a; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // v = max(smoothstep(0.95, 1.0, v), v);\n vec2 uv= v_iconMapUV / u_textSize + vec2(u, v) / u_textSize * 64.;\n \n // gl_FragColor = filterColor(gl_FragColor + texture2D(u_texture, vec2(u, v)));\n // gl_FragColor = filterColor(gl_FragColor + texture2D(u_texture, uv));\n vec4 pattern = texture2D(u_texture, uv);\n\n if(u_textureBlend == 0.0) { // normal\n pattern.a = 0.0;\n gl_FragColor += pattern;\n } else { // replace\n pattern.a *= opacity;\n if(gl_FragColor.a <= 0.0) {\n pattern.a = 0.0;\n }\n gl_FragColor = pattern;\n }\n } \n\n float v = styleMappingMat[3].a;\n float borderWidth = min(0.5, u_borderWidth);\n // \u7ED8\u5236 border\n if(borderWidth > 0.01) {\n float borderOuterWidth = borderWidth/2.0;\n\n if(v >= 1.0 - borderWidth || v <= borderWidth) {\n if(v > borderWidth) {\n float linear = smoothstep(0.0, 1.0, (v - (1.0 - borderWidth))/borderWidth);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, u_borderColor.rgb, linear);\n } else if(v <= borderWidth) {\n float linear = smoothstep(0.0, 1.0, v/borderWidth);\n gl_FragColor.rgb = mix(u_borderColor.rgb, gl_FragColor.rgb, linear);\n }\n }\n\n if(v < borderOuterWidth) {\n gl_FragColor.a = mix(0.0, gl_FragColor.a, v/borderOuterWidth);\n } else if(v > 1.0 - borderOuterWidth) {\n gl_FragColor.a = mix(gl_FragColor.a, 0.0, (v - (1.0 - borderOuterWidth))/borderOuterWidth);\n }\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
41
|
-
var line_vert = "\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\nuniform float u_vertexScale: 1.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\n\n// texV \u7EBF\u56FE\u5C42 - \u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\uFF08\u7EBF\u7684\u5BBD\u5EA6\u65B9\u5411\uFF09\nvarying vec2 v_iconMapUV;\n\n\nuniform float u_linearColor: 0;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n float d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n\n v_iconMapUV = a_iconMapUV;\n d_texPixelLen = project_float_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n\n vec2 offset = project_pixel(size.xy);\n\n float lineOffsetWidth = length(offset + offset * sign(a_Miter)); // \u7EBF\u6A2A\u5411\u504F\u79FB\u7684\u8DDD\u79BB\uFF08\u5411\u4E24\u4FA7\u504F\u79FB\u7684\u548C\uFF09\n float linePixelSize = project_pixel(a_Size.x) * 2.0; // \u5B9A\u70B9\u4F4D\u7F6E\u504F\u79FB\uFF0C\u6309\u5730\u56FE\u7B49\u7EA7\u7F29\u653E\u540E\u7684\u8DDD\u79BB \u5355\u4FA7 * 2\n float texV = lineOffsetWidth/linePixelSize; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance;; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n styleMappingMat[3][2] = d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n styleMappingMat[3][3] = texV; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n float h = float(a_Position.z) * u_vertexScale; // \u7EBF\u9876\u70B9\u7684\u9AD8\u5EA6 - \u517C\u5BB9\u4E0D\u5B58\u5728\u7B2C\u4E09\u4E2A\u6570\u503C\u7684\u60C5\u51B5\n
|
|
41
|
+
var line_vert = "\n#define Animate 0.0\n\nattribute float a_Miter;\nattribute vec4 a_Color;\nattribute vec2 a_Size;\nattribute vec3 a_Normal;\nattribute vec3 a_Position;\n\nattribute vec2 a_iconMapUV;\n\n// dash line\nattribute float a_Total_Distance;\nattribute float a_Distance;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\nuniform float u_heightfixed: 0.0;\nuniform float u_vertexScale: 1.0;\nuniform float u_raisingHeight: 0.0;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\n\n// texV \u7EBF\u56FE\u5C42 - \u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\uFF08\u7EBF\u7684\u5BBD\u5EA6\u65B9\u5411\uFF09\nvarying vec2 v_iconMapUV;\n\n\nuniform float u_linearColor: 0;\n\nuniform float u_opacity: 1.0;\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\nvoid main() {\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0 // distance_ratio/distance/pixelLen/texV\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n\n float d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n\n v_iconMapUV = a_iconMapUV;\n d_texPixelLen = project_float_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n v_color = a_Color;\n\n vec3 size = a_Miter * setPickingSize(a_Size.x) * reverse_offset_normal(a_Normal);\n\n vec2 offset = project_pixel(size.xy);\n\n float lineOffsetWidth = length(offset + offset * sign(a_Miter)); // \u7EBF\u6A2A\u5411\u504F\u79FB\u7684\u8DDD\u79BB\uFF08\u5411\u4E24\u4FA7\u504F\u79FB\u7684\u548C\uFF09\n float linePixelSize = project_pixel(a_Size.x) * 2.0; // \u5B9A\u70B9\u4F4D\u7F6E\u504F\u79FB\uFF0C\u6309\u5730\u56FE\u7B49\u7EA7\u7F29\u653E\u540E\u7684\u8DDD\u79BB \u5355\u4FA7 * 2\n float texV = lineOffsetWidth/linePixelSize; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n // \u8BBE\u7F6E\u6570\u636E\u96C6\u7684\u53C2\u6570\n styleMappingMat[3][0] = a_Distance / a_Total_Distance;; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n styleMappingMat[3][1] = a_Distance; // \u5F53\u524D\u9876\u70B9\u7684\u8DDD\u79BB\n styleMappingMat[3][2] = d_texPixelLen; // \u8D34\u56FE\u7684\u50CF\u7D20\u957F\u5EA6\uFF0C\u6839\u636E\u5730\u56FE\u5C42\u7EA7\u7F29\u653E\n styleMappingMat[3][3] = texV; // \u7EBF\u56FE\u5C42\u8D34\u56FE\u90E8\u5206\u7684 v \u5750\u6807\u503C\n\n vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));\n\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));\n\n float h = float(a_Position.z) * u_vertexScale; // \u7EBF\u9876\u70B9\u7684\u9AD8\u5EA6 - \u517C\u5BB9\u4E0D\u5B58\u5728\u7B2C\u4E09\u4E2A\u6570\u503C\u7684\u60C5\u51B5 vertex height\n float lineHeight = a_Size.y; // size \u7B2C\u4E8C\u4E2A\u53C2\u6570\u4EE3\u8868\u7684\u9AD8\u5EA6 [linewidth, lineheight]\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n lineHeight *= 0.2; // \u4FDD\u6301\u548C amap/mapbox \u4E00\u81F4\u7684\u6548\u679C\n h *= 0.2;\n if(u_heightfixed < 1.0) {\n lineHeight = project_pixel(a_Size.y);\n }\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, lineHeight + h + u_raisingHeight, 1.0));\n } else {\n // mapbox - amap\n \n // \u517C\u5BB9 mapbox \u5728\u7EBF\u9AD8\u5EA6\u4E0A\u7684\u6548\u679C\u8868\u73B0\u57FA\u672C\u4E00\u81F4\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n // mapbox\n // \u4FDD\u6301\u9AD8\u5EA6\u76F8\u5BF9\u4E0D\u53D8\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n h *= mapboxZoomScale;\n h += u_raisingHeight * mapboxZoomScale;\n if(u_heightfixed > 0.0) {\n lineHeight *= mapboxZoomScale;\n }\n \n } else {\n // amap\n h += u_raisingHeight;\n // lineHeight \u9876\u70B9\u504F\u79FB\u9AD8\u5EA6\n if(u_heightfixed < 1.0) {\n lineHeight *= pow(2.0, 20.0 - u_Zoom);\n }\n }\n\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, lineHeight + h, 1.0));\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
42
42
|
var linear_line_frag = "#define LineTypeSolid 0.0\n#define LineTypeDash 1.0\n#define Animate 0.0\n#define LineTexture 1.0\nuniform float u_blur : 0.99;\nuniform float u_line_type: 0.0;\nuniform float u_opacity : 1.0;\n\nvarying vec4 v_color;\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\n\n#pragma include \"picking\"\n\n\nvarying mat4 styleMappingMat;\n// [animate, duration, interval, trailLength],\nvoid main() {\n float opacity = styleMappingMat[0][0];\n float d_distance_ratio = styleMappingMat[3].r; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\n\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n gl_FragColor = mix(u_sourceColor, u_targetColor, d_distance_ratio);\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n gl_FragColor = v_color;\n }\n\n gl_FragColor.a *= opacity; // \u5168\u5C40\u900F\u660E\u5EA6\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
43
43
|
var lineStyleObj = {
|
|
44
44
|
solid: 0.0,
|
|
@@ -110,7 +110,9 @@ var LineModel = function (_BaseModel) {
|
|
|
110
110
|
_ref$borderColor = _ref.borderColor,
|
|
111
111
|
borderColor = _ref$borderColor === void 0 ? '#ccc' : _ref$borderColor,
|
|
112
112
|
_ref$raisingHeight = _ref.raisingHeight,
|
|
113
|
-
raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight
|
|
113
|
+
raisingHeight = _ref$raisingHeight === void 0 ? 0 : _ref$raisingHeight,
|
|
114
|
+
_ref$heightfixed = _ref.heightfixed,
|
|
115
|
+
heightfixed = _ref$heightfixed === void 0 ? false : _ref$heightfixed;
|
|
114
116
|
|
|
115
117
|
if (dashArray.length === 2) {
|
|
116
118
|
dashArray.push(0, 0);
|
|
@@ -177,6 +179,7 @@ var LineModel = function (_BaseModel) {
|
|
|
177
179
|
u_linearColor: useLinearColor,
|
|
178
180
|
u_sourceColor: sourceColorArr,
|
|
179
181
|
u_targetColor: targetColorArr,
|
|
182
|
+
u_heightfixed: Number(heightfixed),
|
|
180
183
|
u_vertexScale: vertexHeightScale,
|
|
181
184
|
u_raisingHeight: Number(raisingHeight)
|
|
182
185
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/line/models/line.ts"],"names":["lineStyleObj","solid","dash","LineModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","layer","render","mag","gl","NEAREST","min","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","sourceColor","targetColor","textureBlend","lineType","dashArray","lineTexture","iconStep","vertexHeightScale","borderWidth","borderColor","raisingHeight","length","push","getDirty","bind","useLinearColor","sourceColorArr","targetColorArr","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_textureBlend","u_line_type","u_dash_array","u_texture","u_line_texture","u_icon_step","u_textSize","u_borderWidth","u_borderColor","u_linearColor","u_sourceColor","u_targetColor","u_vertexScale","u_raisingHeight","Number","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","mask","maskInside","depth","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","LineTriangulation","primitive","TRIANGLES","blend","getBlend","enable","stencil","line_dash_frag","line_dash_vert","linear_line_frag","line_vert","line_frag","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IEncodeFeature,\n IImage,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\n\nimport { getMask, rgb2arr } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { ILineLayerStyleOptions, lineStyleType } from '../../core/interface';\nimport { LineTriangulation } from '../../core/triangulation';\n// dash line shader\nimport line_dash_frag from '../shaders/dash/line_dash_frag.glsl';\nimport line_dash_vert from '../shaders/dash/line_dash_vert.glsl';\n// basic line shader\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\n// other function shaders\nimport linear_line_frag from '../shaders/linear/line_linear_frag.glsl';\n\nconst lineStyleObj: { [key: string]: number } = {\n solid: 0.0,\n dash: 1.0,\n};\nexport default class LineModel extends BaseModel {\n protected texture: ITexture2D;\n public getUninforms(): IModelUniform {\n const {\n opacity,\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n lineTexture = false,\n iconStep = 100,\n vertexHeightScale = 20.0,\n borderWidth = 0.0,\n borderColor = '#ccc',\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n\n if (this.dataTextureTest && this.dataTextureNeedUpdate({ opacity })) {\n this.judgeStyleAttributes({ opacity });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n // u_opacity: opacity === undefined ? 1 : opacity,\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_line_type: lineStyleObj[lineType],\n u_dash_array: dashArray,\n\n // 纹理支持参数\n u_texture: this.texture, // 贴图\n u_line_texture: lineTexture ? 1.0 : 0.0, // 传入线的标识\n u_icon_step: iconStep,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n // line border 参数\n u_borderWidth: borderWidth,\n u_borderColor: rgb2arr(borderColor),\n\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n u_raisingHeight: Number(raisingHeight),\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n depth = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'line_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: depth },\n // depth: { enable: true },\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据参数获取不同的 shader 代码\n * @returns\n */\n public getShaders(): { frag: string; vert: string; type: string } {\n const {\n sourceColor,\n targetColor,\n lineType,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n\n if (lineType === 'dash') {\n return {\n frag: line_dash_frag,\n vert: line_dash_vert,\n type: 'dash',\n };\n }\n\n if (sourceColor && targetColor) {\n // 分离 linear 功能\n return {\n frag: linear_line_frag,\n vert: line_vert,\n type: 'linear',\n };\n } else {\n return {\n frag: line_frag,\n vert: line_vert,\n type: 'normal',\n };\n }\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3]];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'total_distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Total_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[5]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size as number, 0];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // @ts-ignore\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n normal: number[],\n ) => {\n return normal;\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'miter',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Miter',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[4]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { texture } = feature;\n const { x, y } = iconMap[texture as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n });\n };\n}\n"],"file":"line.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/line/models/line.ts"],"names":["lineStyleObj","solid","dash","LineModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","layer","render","mag","gl","NEAREST","min","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","sourceColor","targetColor","textureBlend","lineType","dashArray","lineTexture","iconStep","vertexHeightScale","borderWidth","borderColor","raisingHeight","heightfixed","length","push","getDirty","bind","useLinearColor","sourceColorArr","targetColorArr","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","flipY","format","LUMINANCE","type","FLOAT","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_opacity","u_textureBlend","u_line_type","u_dash_array","u_texture","u_line_texture","u_icon_step","u_textSize","u_borderWidth","u_borderColor","u_linearColor","u_sourceColor","u_targetColor","u_heightfixed","Number","u_vertexScale","u_raisingHeight","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","mask","maskInside","depth","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","LineTriangulation","primitive","TRIANGLES","blend","getBlend","enable","stencil","line_dash_frag","line_dash_vert","linear_line_frag","line_vert","line_frag","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAnimateOption,\n IEncodeFeature,\n IImage,\n ILayerConfig,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\n\nimport { getMask, rgb2arr } from '@antv/l7-utils';\nimport { isNumber } from 'lodash';\nimport BaseModel from '../../core/BaseModel';\nimport { ILineLayerStyleOptions, lineStyleType } from '../../core/interface';\nimport { LineTriangulation } from '../../core/triangulation';\n// dash line shader\nimport line_dash_frag from '../shaders/dash/line_dash_frag.glsl';\nimport line_dash_vert from '../shaders/dash/line_dash_vert.glsl';\n// basic line shader\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\n// other function shaders\nimport linear_line_frag from '../shaders/linear/line_linear_frag.glsl';\n\nconst lineStyleObj: { [key: string]: number } = {\n solid: 0.0,\n dash: 1.0,\n};\nexport default class LineModel extends BaseModel {\n protected texture: ITexture2D;\n public getUninforms(): IModelUniform {\n const {\n opacity,\n sourceColor,\n targetColor,\n textureBlend = 'normal',\n lineType = 'solid',\n dashArray = [10, 5, 0, 0],\n lineTexture = false,\n iconStep = 100,\n vertexHeightScale = 20.0,\n borderWidth = 0.0,\n borderColor = '#ccc',\n raisingHeight = 0,\n heightfixed = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n if (dashArray.length === 2) {\n dashArray.push(0, 0);\n }\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n // 转化渐变色\n let useLinearColor = 0; // 默认不生效\n let sourceColorArr = [0, 0, 0, 0];\n let targetColorArr = [0, 0, 0, 0];\n if (sourceColor && targetColor) {\n sourceColorArr = rgb2arr(sourceColor);\n targetColorArr = rgb2arr(targetColor);\n useLinearColor = 1;\n }\n\n if (this.dataTextureTest && this.dataTextureNeedUpdate({ opacity })) {\n this.judgeStyleAttributes({ opacity });\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n\n return {\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n // u_opacity: opacity === undefined ? 1 : opacity,\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_textureBlend: textureBlend === 'normal' ? 0.0 : 1.0,\n u_line_type: lineStyleObj[lineType],\n u_dash_array: dashArray,\n\n // 纹理支持参数\n u_texture: this.texture, // 贴图\n u_line_texture: lineTexture ? 1.0 : 0.0, // 传入线的标识\n u_icon_step: iconStep,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n // line border 参数\n u_borderWidth: borderWidth,\n u_borderColor: rgb2arr(borderColor),\n\n // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 是否固定高度\n u_heightfixed: Number(heightfixed),\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\n u_raisingHeight: Number(raisingHeight),\n };\n }\n public getAnimateUniforms(): IModelUniform {\n const { animateOption } = this.layer.getLayerConfig() as ILayerConfig;\n return {\n u_aimate: this.animateOption2Array(animateOption as IAnimateOption),\n u_time: this.layer.getLayerAnimateTime(),\n };\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n return this.buildModels();\n }\n\n public clearModels() {\n this.texture?.destroy();\n this.dataTexture?.destroy();\n this.iconService.off('imageUpdate', this.updateTexture);\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n depth = false,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'line_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: depth },\n // depth: { enable: true },\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n /**\n * 根据参数获取不同的 shader 代码\n * @returns\n */\n public getShaders(): { frag: string; vert: string; type: string } {\n const {\n sourceColor,\n targetColor,\n lineType,\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n\n if (lineType === 'dash') {\n return {\n frag: line_dash_frag,\n vert: line_dash_vert,\n type: 'dash',\n };\n }\n\n if (sourceColor && targetColor) {\n // 分离 linear 功能\n return {\n frag: linear_line_frag,\n vert: line_vert,\n type: 'linear',\n };\n } else {\n return {\n frag: line_frag,\n vert: line_vert,\n type: 'normal',\n };\n }\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3]];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'total_distance',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Total_Distance',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[5]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 1 } = feature;\n return Array.isArray(size) ? [size[0], size[1]] : [size as number, 0];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'normal',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Normal',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n // @ts-ignore\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n normal: number[],\n ) => {\n return normal;\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'miter',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Miter',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.STATIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[4]];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_iconMapUV',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { texture } = feature;\n const { x, y } = iconMap[texture as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n });\n this.layer.render();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.NEAREST,\n min: gl.NEAREST,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n });\n };\n}\n"],"file":"line.js"}
|
|
@@ -40,7 +40,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
40
40
|
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; } }
|
|
41
41
|
|
|
42
42
|
var pointFillFrag = "uniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv;\n\nvoid main() {\n\n float opacity = styleMappingMat[0][0];\n\n vec2 pos = v_Iconuv / u_textSize + v_uv / u_textSize * 64.;\n gl_FragColor = texture2D(u_texture, pos);\n gl_FragColor.a *= opacity;\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
43
|
-
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute vec2 a_Uv;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform mat2 u_RotateMatrix;\nuniform float u_isMeter;\n\nvarying float v_radius;\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv; // icon \u8D34\u56FE\u7684 uv \u5750\u6807\n\nuniform float u_opacity : 1;\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n\n v_uv = (a_Extrude.xy + 1.0)/2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // empty - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // radius(16-bit)\n v_radius = a_Size;\n\n // TODO: billboard\n // anti-alias\n \n\n vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
43
|
+
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute vec2 a_Uv;\nattribute float a_Rotate;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform mat2 u_RotateMatrix;\nuniform float u_isMeter;\n\nvarying float v_radius;\nvarying vec2 v_uv; // \u672C\u8EAB\u7684 uv \u5750\u6807\nvarying vec2 v_Iconuv; // icon \u8D34\u56FE\u7684 uv \u5750\u6807\n\nuniform float u_opacity : 1;\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n\n v_uv = (a_Extrude.xy + 1.0)/2.0;\n v_uv.y = 1.0 - v_uv.y;\n v_Iconuv = a_Uv;\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // empty - empty - empty - empty\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // radius(16-bit)\n v_radius = a_Size;\n\n // TODO: billboard\n // anti-alias\n \n\n highp float angle_sin = sin(a_Rotate);\n highp float angle_cos = cos(a_Rotate);\n mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos);\n\n // vec2 offset = (u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec2 offset = (rotation_matrix * u_RotateMatrix * extrude.xy * (a_Size) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
44
44
|
|
|
45
45
|
var FillImageModel = function (_BaseModel) {
|
|
46
46
|
(0, _inherits2.default)(FillImageModel, _BaseModel);
|
|
@@ -117,7 +117,7 @@ var FillImageModel = function (_BaseModel) {
|
|
|
117
117
|
rotateFlag = -1;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
this.radian = rotation ? rotateFlag * Math.PI * rotation / 180 : rotateFlag * Math.PI * (this.mapService.getRotation() % 360) / 180;
|
|
120
|
+
this.radian = rotation !== undefined ? rotateFlag * Math.PI * rotation / 180 : rotateFlag * Math.PI * (this.mapService.getRotation() % 360) / 180;
|
|
121
121
|
|
|
122
122
|
if (this.dataTextureTest && this.dataTextureNeedUpdate({
|
|
123
123
|
opacity: opacity,
|
|
@@ -280,6 +280,24 @@ var FillImageModel = function (_BaseModel) {
|
|
|
280
280
|
value: function registerBuiltinAttributes() {
|
|
281
281
|
var _this2 = this;
|
|
282
282
|
|
|
283
|
+
this.styleAttributeService.registerStyleAttribute({
|
|
284
|
+
name: 'rotate',
|
|
285
|
+
type: _l7Core.AttributeType.Attribute,
|
|
286
|
+
descriptor: {
|
|
287
|
+
name: 'a_Rotate',
|
|
288
|
+
buffer: {
|
|
289
|
+
usage: _l7Core.gl.DYNAMIC_DRAW,
|
|
290
|
+
data: [],
|
|
291
|
+
type: _l7Core.gl.FLOAT
|
|
292
|
+
},
|
|
293
|
+
size: 1,
|
|
294
|
+
update: function update(feature, featureIdx, vertex, attributeIdx) {
|
|
295
|
+
var _feature$rotate = feature.rotate,
|
|
296
|
+
rotate = _feature$rotate === void 0 ? 0 : _feature$rotate;
|
|
297
|
+
return Array.isArray(rotate) ? [rotate[0]] : [rotate];
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
283
301
|
this.styleAttributeService.registerStyleAttribute({
|
|
284
302
|
name: 'uv',
|
|
285
303
|
type: _l7Core.AttributeType.Attribute,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/point/models/fillmage.ts"],"names":["FillImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","mag","min","mipmap","layer","renderLayers","gl","LINEAR","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","rotation","getDirty","bind","rotateFlag","mapService","version","radian","Math","PI","getRotation","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_RotateMatrix","Float32Array","cos","sin","u_additive","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","updateTexture","on","unit","Version","L7MAP","GLOBEL","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","depth","enable","getBlend","stencil","cull","face","pointFillFrag","pointFillVert","off","destroy","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","iconMap","getIconMap","shape","extrude","extrudeIndex","Array","isArray","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttribute,\n IElements,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport { PointFillTriangulation } from '../../core/triangulation';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/image/fillImage_frag.glsl';\nimport pointFillVert from '../shaders/image/fillImage_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\n\nexport default class FillImageModel extends BaseModel {\n public meter2coord: number = 1;\n private texture: ITexture2D;\n private isMeter: boolean = false;\n private radian: number = 0; // 旋转的弧度\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n rotation,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian = rotation\n ? (rotateFlag * Math.PI * rotation) / 180\n : (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_isMeter: Number(this.isMeter),\n u_RotateMatrix: new Float32Array([\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: PointFillTriangulation,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n public getShaders(): { frag: string; vert: string; type: string } {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n\n public clearModels() {\n this.iconService.off('imageUpdate', this.updateTexture);\n this.texture?.destroy();\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true,\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"fillmage.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/point/models/fillmage.ts"],"names":["FillImageModel","createTexture2D","rendererService","texture","update","data","iconService","getCanvas","mag","min","mipmap","layer","renderLayers","gl","LINEAR","LINEAR_MIPMAP_LINEAR","premultiplyAlpha","width","height","canvasHeight","getLayerConfig","opacity","strokeOpacity","strokeWidth","stroke","offsets","blend","rotation","getDirty","bind","rotateFlag","mapService","version","radian","undefined","Math","PI","getRotation","dataTextureTest","dataTextureNeedUpdate","judgeStyleAttributes","encodeData","getEncodedData","calDataFrame","cellLength","cellProperties","rowCount","dataTexture","length","flipY","format","LUMINANCE","type","FLOAT","u_isMeter","Number","isMeter","u_RotateMatrix","Float32Array","cos","sin","u_additive","u_dataTexture","u_cellTypeLayout","getCellTypeLayout","u_texture","u_textSize","u_opacity","u_offsets","isOffsetStatic","styleAttributeService","createAttributesAndIndices","PointFillTriangulation","updateTexture","on","unit","Version","L7MAP","GLOBEL","calMeter2Coord","buildModels","getSource","extent","minLng","minLat","maxLng","maxLat","center","MAPBOX","window","mapboxgl","MercatorCoordinate","coord","fromLngLat","lng","lat","offsetInMeters","offsetInMercatorCoordinateUnits","meterInMercatorCoordinateUnits","westCoord","x","y","z","westLnglat","toLngLat","meter2coord","m1","meterToCoord","m2","Boolean","mask","maskInside","getShaders","frag","vert","buildLayerModel","moduleName","vertexShader","fragmentShader","triangulation","depth","enable","getBlend","stencil","cull","face","pointFillFrag","pointFillVert","off","destroy","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","rotate","Array","isArray","iconMap","getIconMap","shape","extrude","extrudeIndex","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttribute,\n IElements,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getCullFace, getMask } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IPointLayerStyleOptions } from '../../core/interface';\nimport { PointFillTriangulation } from '../../core/triangulation';\n// static pointLayer shader - not support animate\nimport pointFillFrag from '../shaders/image/fillImage_frag.glsl';\nimport pointFillVert from '../shaders/image/fillImage_vert.glsl';\n\nimport { isNumber } from 'lodash';\n\nimport { Version } from '@antv/l7-maps';\n\nexport default class FillImageModel extends BaseModel {\n public meter2coord: number = 1;\n private texture: ITexture2D;\n private isMeter: boolean = false;\n private radian: number = 0; // 旋转的弧度\n public getUninforms(): IModelUniform {\n const {\n opacity = 1,\n strokeOpacity = 1,\n strokeWidth = 0,\n stroke = 'rgba(0,0,0,0)',\n offsets = [0, 0],\n blend,\n rotation,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n\n if (this.rendererService.getDirty()) {\n this.texture.bind();\n }\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian =\n rotation !== undefined\n ? (rotateFlag * Math.PI * rotation) / 180\n : (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n if (\n this.dataTextureTest &&\n this.dataTextureNeedUpdate({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n })\n ) {\n // 判断当前的样式中哪些是需要进行数据映射的,哪些是常量,同时计算用于构建数据纹理的一些中间变量\n this.judgeStyleAttributes({\n opacity,\n strokeOpacity,\n strokeWidth,\n stroke,\n offsets,\n });\n\n const encodeData = this.layer.getEncodedData();\n const { data, width, height } = this.calDataFrame(\n this.cellLength,\n encodeData,\n this.cellProperties,\n );\n this.rowCount = height; // 当前数据纹理有多少行\n\n this.dataTexture =\n this.cellLength > 0 && data.length > 0\n ? this.createTexture2D({\n flipY: true,\n data,\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width,\n height,\n })\n : this.createTexture2D({\n flipY: true,\n data: [1],\n format: gl.LUMINANCE,\n type: gl.FLOAT,\n width: 1,\n height: 1,\n });\n }\n return {\n u_isMeter: Number(this.isMeter),\n u_RotateMatrix: new Float32Array([\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_additive: blend === 'additive' ? 1.0 : 0.0,\n\n u_dataTexture: this.dataTexture, // 数据纹理 - 有数据映射的时候纹理中带数据,若没有任何数据映射时纹理是 [1]\n u_cellTypeLayout: this.getCellTypeLayout(),\n\n u_texture: this.texture,\n u_textSize: [1024, this.iconService.canvasHeight || 128],\n\n u_opacity: isNumber(opacity) ? opacity : 1.0,\n u_offsets: this.isOffsetStatic(offsets)\n ? (offsets as [number, number])\n : [0, 0],\n };\n }\n\n public getAttribute(): {\n attributes: {\n [attributeName: string]: IAttribute;\n };\n elements: IElements;\n } {\n return this.styleAttributeService.createAttributesAndIndices(\n this.layer.getEncodedData(),\n PointFillTriangulation,\n );\n }\n\n public initModels(): IModel[] {\n this.updateTexture();\n this.iconService.on('imageUpdate', this.updateTexture);\n\n const {\n unit = 'l7size',\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { version } = this.mapService;\n if (\n unit === 'meter' &&\n version !== Version.L7MAP &&\n version !== Version.GLOBEL\n ) {\n this.isMeter = true;\n this.calMeter2Coord();\n }\n\n return this.buildModels();\n }\n\n /**\n * 计算等面积点图层(unit meter)笛卡尔坐标标度与世界坐标标度的比例\n * @returns\n */\n public calMeter2Coord() {\n // @ts-ignore\n const [minLng, minLat, maxLng, maxLat] = this.layer.getSource().extent;\n const center = [(minLng + maxLng) / 2, (minLat + maxLat) / 2];\n\n const { version } = this.mapService;\n if (version === Version.MAPBOX && window.mapboxgl.MercatorCoordinate) {\n const coord = window.mapboxgl.MercatorCoordinate.fromLngLat(\n { lng: center[0], lat: center[1] },\n 0,\n );\n const offsetInMeters = 1;\n const offsetInMercatorCoordinateUnits =\n offsetInMeters * coord.meterInMercatorCoordinateUnits();\n const westCoord = new window.mapboxgl.MercatorCoordinate(\n coord.x - offsetInMercatorCoordinateUnits,\n coord.y,\n coord.z,\n );\n const westLnglat = westCoord.toLngLat();\n\n this.meter2coord = center[0] - westLnglat.lng;\n return;\n }\n\n // @ts-ignore\n const m1 = this.mapService.meterToCoord(center, [minLng, minLat]);\n // @ts-ignore\n const m2 = this.mapService.meterToCoord(center, [\n maxLng === minLng ? maxLng + 0.1 : maxLng,\n maxLat === minLat ? minLat + 0.1 : maxLat,\n ]);\n this.meter2coord = (m1 + m2) / 2;\n if (!Boolean(this.meter2coord)) {\n // Tip: 兼容单个数据导致的 m1、m2 为 NaN\n this.meter2coord = 7.70681090738883;\n }\n }\n\n public buildModels(): IModel[] {\n const {\n mask = false,\n maskInside = true,\n } = this.layer.getLayerConfig() as IPointLayerStyleOptions;\n const { frag, vert, type } = this.getShaders();\n return [\n this.layer.buildLayerModel({\n moduleName: 'pointfill_' + type,\n vertexShader: vert,\n fragmentShader: frag,\n triangulation: PointFillTriangulation,\n depth: { enable: false },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: getCullFace(this.mapService.version),\n },\n }),\n ];\n }\n\n public getShaders(): { frag: string; vert: string; type: string } {\n return {\n frag: pointFillFrag,\n vert: pointFillVert,\n type: 'normal',\n };\n }\n\n public clearModels() {\n this.iconService.off('imageUpdate', this.updateTexture);\n this.texture?.destroy();\n this.dataTexture?.destroy();\n }\n\n // overwrite baseModel func\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'rotate',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Rotate',\n buffer: {\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { rotate = 0 } = feature;\n return Array.isArray(rotate) ? [rotate[0]] : [rotate as number];\n },\n },\n });\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const iconMap = this.iconService.getIconMap();\n const { shape } = feature;\n const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };\n return [x, y];\n },\n },\n });\n\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'size',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Size',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 1,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const { size = 5 } = feature;\n // console.log('featureIdx', featureIdx, feature)\n return Array.isArray(size)\n ? [size[0] * this.meter2coord]\n : [(size as number) * this.meter2coord];\n },\n },\n });\n }\n\n private updateTexture = () => {\n const { createTexture2D } = this.rendererService;\n if (this.texture) {\n this.texture.update({\n data: this.iconService.getCanvas(),\n mag: 'linear',\n min: 'linear mipmap nearest',\n mipmap: true,\n });\n // this.layer.render();\n // TODO: 更新完纹理后在更新的图层的时候需要更新所有的图层\n this.layer.renderLayers();\n return;\n }\n this.texture = createTexture2D({\n data: this.iconService.getCanvas(),\n mag: gl.LINEAR,\n // min: gl.LINEAR,\n min: gl.LINEAR_MIPMAP_LINEAR,\n premultiplyAlpha: false,\n width: 1024,\n height: this.iconService.canvasHeight || 128,\n mipmap: true,\n });\n };\n}\n"],"file":"fillmage.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/symbol-layout.ts"],"names":["getAnchorAlignment","anchor","horizontalAlign","verticalAlign","justifyLine","positionedGlyphs","glyphMap","start","end","justify","lastPositionedGlyph","glyph","lastAdvance","advance","scale","lineIndent","x","j","align","maxLineLength","lineHeight","lineCount","shiftX","shiftY","glyphs","y","shapeLines","shaping","lines","textAnchor","textJustify","spacing","yOffset","lineStartIndex","length","forEach","line","split","char","baselineOffset","push","vertical","metrics","lineLength","Math","max","height","top","bottom","left","right","shapeIconFont","iconfonts","iconfont","shapeText","text","translate","isIconFont","getGlyphQuads","textOffset","alongLine","quads","positionedGlyph","rect","rectBuffer","halfAdvance","glyphOffset","builtInOffset","x1","y1","x2","width","y2","tl","tr","bl","br","tex"],"mappings":"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","sourcesContent":["import { type } from 'os';\n\ninterface IPoint {\n x: number;\n y: number;\n}\nexport type anchorType =\n | 'right'\n | 'top-right'\n | 'left'\n | 'bottom-right'\n | 'left'\n | 'top-left'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'bottom-left'\n | 'top'\n | 'top-right'\n | 'top-left'\n | 'center';\nexport interface IGlyphQuad {\n tr: IPoint;\n tl: IPoint;\n bl: IPoint;\n br: IPoint;\n tex: {\n x: number;\n y: number;\n height: number;\n width: number;\n advance: number;\n };\n glyphOffset: [number, number];\n}\n\n/**\n * 返回文本相对锚点位置\n * @param {string} anchor 锚点位置\n * @return {alignment} alignment\n */\nfunction getAnchorAlignment(anchor: anchorType) {\n let horizontalAlign = 0.5;\n let verticalAlign = 0.5;\n switch (anchor) {\n case 'right':\n case 'top-right':\n case 'bottom-right':\n horizontalAlign = 1;\n break;\n case 'left':\n case 'top-left':\n case 'bottom-left':\n horizontalAlign = 0;\n break;\n default:\n horizontalAlign = 0.5;\n }\n\n switch (anchor) {\n case 'bottom':\n case 'bottom-right':\n case 'bottom-left':\n verticalAlign = 1;\n break;\n case 'top':\n case 'top-right':\n case 'top-left':\n verticalAlign = 0;\n break;\n default:\n verticalAlign = 0.5;\n }\n\n return { horizontalAlign, verticalAlign };\n}\n\n// justify right = 1, left = 0, center = 0.5\nfunction justifyLine(\n positionedGlyphs: any,\n glyphMap: any,\n start: number,\n end: number,\n justify: number,\n) {\n if (!justify) {\n return;\n }\n\n const lastPositionedGlyph = positionedGlyphs[end];\n const glyph = lastPositionedGlyph.glyph;\n if (glyph) {\n const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;\n const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;\n\n for (let j = start; j <= end; j++) {\n positionedGlyphs[j].x -= lineIndent;\n }\n }\n}\n\n// justify right=1 left=0 center=0.5\n// horizontalAlign right=1 left=0 center=0.5\n// verticalAlign right=1 left=0 center=0.5\nfunction align(\n positionedGlyphs: any[],\n justify: number,\n horizontalAlign: number,\n verticalAlign: number,\n maxLineLength: number,\n lineHeight: number,\n lineCount: number,\n) {\n const shiftX = (justify - horizontalAlign) * maxLineLength;\n const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;\n\n for (const glyphs of positionedGlyphs) {\n glyphs.x += shiftX;\n glyphs.y += shiftY;\n }\n}\n\nfunction shapeLines(\n shaping: any,\n glyphMap: any,\n lines: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n lines.forEach((line) => {\n line.split('').forEach((char: string) => {\n const glyph = glyphMap[char];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: char,\n x,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n });\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n lines.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\nfunction shapeIconFont(\n shaping: any,\n glyphMap: any,\n iconfonts: any[],\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n) {\n // buffer 为 4\n const yOffset = -8;\n\n let x = 0;\n let y = yOffset;\n\n let maxLineLength = 0;\n const positionedGlyphs = shaping.positionedGlyphs;\n\n const justify =\n textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;\n\n const lineStartIndex = positionedGlyphs.length;\n iconfonts.forEach((iconfont) => {\n const glyph = glyphMap[iconfont];\n const baselineOffset = 0;\n\n if (glyph) {\n positionedGlyphs.push({\n glyph: iconfont,\n // x,\n /**\n * iconfont\n * 在计算大小的时候计算的是 unicode 字符 如 \n * 在布局计算 icon 位置的时候应该始终保持居中(且 icon 只占一个字符的位置)\n */\n x: glyph.advance / 2,\n y: y + baselineOffset,\n vertical: false, // TODO:目前只支持水平方向\n scale: 1,\n metrics: glyph,\n });\n x += glyph.advance + spacing;\n }\n\n // 左右对齐\n if (positionedGlyphs.length !== lineStartIndex) {\n const lineLength = x - spacing;\n maxLineLength = Math.max(lineLength, maxLineLength);\n justifyLine(\n positionedGlyphs,\n glyphMap,\n lineStartIndex,\n positionedGlyphs.length - 1,\n justify,\n );\n }\n\n x = 0;\n y -= lineHeight + 5;\n });\n\n const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);\n align(\n positionedGlyphs,\n justify,\n horizontalAlign,\n verticalAlign,\n maxLineLength,\n lineHeight,\n iconfonts.length,\n );\n\n // 计算包围盒\n const height = y - yOffset;\n\n shaping.top += -verticalAlign * height;\n shaping.bottom = shaping.top - height;\n shaping.left += -horizontalAlign * maxLineLength;\n shaping.right = shaping.left + maxLineLength;\n}\n\n/**\n * 计算文本中每个独立字符相对锚点的位置\n *\n * @param {string} text 原始文本\n * @param {*} glyphs mapping\n * @param {number} lineHeight 行高\n * @param {string} textAnchor 文本相对于锚点的位置\n * @param {string} textJustify 左右对齐\n * @param {number} spacing 字符间距\n * @param {[number, number]} translate 文本水平 & 垂直偏移量\n * @param {[boolean]} isIconFont 是否是 iconfont\n * @return {boolean|shaping} 每个字符相对于锚点的位置\n */\nexport function shapeText(\n text: string,\n glyphs: any,\n lineHeight: number,\n textAnchor: anchorType,\n textJustify: string,\n spacing: number,\n translate: [number, number] = [0, 0],\n isIconFont: boolean,\n) {\n // TODO:处理换行\n const lines = text.split('\\n');\n\n const positionedGlyphs: any[] = [];\n const shaping = {\n positionedGlyphs,\n top: translate[1],\n bottom: translate[1],\n left: translate[0],\n right: translate[0],\n lineCount: lines.length,\n text,\n };\n isIconFont\n ? shapeIconFont(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n )\n : shapeLines(\n shaping,\n glyphs,\n lines,\n lineHeight,\n textAnchor,\n textJustify,\n spacing,\n );\n if (!positionedGlyphs.length) {\n return false;\n }\n\n return shaping;\n}\n\nexport function getGlyphQuads(\n shaping: any,\n textOffset: [number, number] = [0, 0],\n alongLine: boolean,\n): IGlyphQuad[] {\n const { positionedGlyphs = [] } = shaping;\n const quads: IGlyphQuad[] = [];\n\n for (const positionedGlyph of positionedGlyphs) {\n const rect = positionedGlyph.metrics;\n\n // The rects have an addditional buffer that is not included in their size.\n const rectBuffer = 4;\n\n const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;\n\n const glyphOffset: [number, number] = alongLine\n ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]\n : [0, 0];\n\n const builtInOffset = alongLine\n ? [0, 0]\n : [\n positionedGlyph.x + halfAdvance + textOffset[0],\n positionedGlyph.y + textOffset[1],\n ];\n\n const x1 =\n (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];\n const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];\n const x2 = x1 + rect.width * positionedGlyph.scale;\n const y2 = y1 + rect.height * positionedGlyph.scale;\n\n const tl = { x: x1, y: y1 };\n const tr = { x: x2, y: y1 };\n const bl = { x: x1, y: y2 };\n const br = { x: x2, y: y2 };\n\n // TODO:处理字符旋转的情况\n\n quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });\n }\n\n return quads;\n}\n"],"file":"symbol-layout.js"}
|
package/lib/utils/updateShape.js
CHANGED
|
@@ -8,9 +8,15 @@ var shapeUpdateList = [['circle', 'cylinder'], ['square', 'cylinder'], ['triangl
|
|
|
8
8
|
|
|
9
9
|
function updateShape(layer, lastShape, currentShape) {
|
|
10
10
|
if (typeof lastShape === 'string' && typeof currentShape === 'string' && lastShape !== currentShape) {
|
|
11
|
+
if (layer.type === 'PointLayer') {
|
|
12
|
+
layer.dataState.dataSourceNeedUpdate = true;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
11
16
|
shapeUpdateList.map(function (shapes) {
|
|
12
17
|
if (shapes.includes(lastShape) && shapes.includes(currentShape)) {
|
|
13
18
|
layer.dataState.dataSourceNeedUpdate = true;
|
|
19
|
+
return;
|
|
14
20
|
}
|
|
15
21
|
});
|
|
16
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/updateShape.ts"],"names":["shapeUpdateList","updateShape","layer","lastShape","currentShape","
|
|
1
|
+
{"version":3,"sources":["../../src/utils/updateShape.ts"],"names":["shapeUpdateList","updateShape","layer","lastShape","currentShape","type","dataState","dataSourceNeedUpdate","map","shapes","includes"],"mappings":";;;;;;AAGA,IAAMA,eAAe,GAAG,CAEtB,CAAC,QAAD,EAAW,UAAX,CAFsB,EAGtB,CAAC,QAAD,EAAW,UAAX,CAHsB,EAItB,CAAC,UAAD,EAAa,UAAb,CAJsB,EAKtB,CAAC,UAAD,EAAa,UAAb,CALsB,EAMtB,CAAC,SAAD,EAAY,UAAZ,CANsB,EAOtB,CAAC,SAAD,EAAY,UAAZ,CAPsB,EAQtB,CAAC,UAAD,EAAa,UAAb,CARsB,EAStB,CAAC,SAAD,EAAY,UAAZ,CATsB,EAUtB,CAAC,QAAD,EAAW,UAAX,CAVsB,CAAxB;;AAYO,SAASC,WAAT,CACLC,KADK,EAELC,SAFK,EAGLC,YAHK,EAIC;AACN,MACE,OAAOD,SAAP,KAAqB,QAArB,IACA,OAAOC,YAAP,KAAwB,QADxB,IAEAD,SAAS,KAAKC,YAHhB,EAIE;AACA,QAAIF,KAAK,CAACG,IAAN,KAAe,YAAnB,EAAiC;AAC/BH,MAAAA,KAAK,CAACI,SAAN,CAAgBC,oBAAhB,GAAuC,IAAvC;AACA;AACD;;AAEDP,IAAAA,eAAe,CAACQ,GAAhB,CAAoB,UAACC,MAAD,EAAY;AAC9B,UAAIA,MAAM,CAACC,QAAP,CAAgBP,SAAhB,KAA8BM,MAAM,CAACC,QAAP,CAAgBN,YAAhB,CAAlC,EAAiE;AAE/DF,QAAAA,KAAK,CAACI,SAAN,CAAgBC,oBAAhB,GAAuC,IAAvC;AACA;AACD;AACF,KAND;AAOD;AACF","sourcesContent":["import { ILayer, StyleAttributeField } from '@antv/l7-core';\n// TODO: shapeUpdateList 存储一系列的 shape 类型\n// 当这一系列的 shape 相互切换的时候需要重构 layer 的 model (顶点数据集)\nconst shapeUpdateList = [\n // PointLayer\n ['circle', 'cylinder'],\n ['square', 'cylinder'],\n ['triangle', 'cylinder'],\n ['pentagon', 'cylinder'],\n ['hexagon', 'cylinder'],\n ['octogon', 'cylinder'],\n ['hexagram', 'cylinder'],\n ['rhombus', 'cylinder'],\n ['vesica', 'cylinder'],\n];\nexport function updateShape(\n layer: ILayer,\n lastShape: StyleAttributeField | undefined,\n currentShape: StyleAttributeField | undefined,\n): void {\n if (\n typeof lastShape === 'string' &&\n typeof currentShape === 'string' &&\n lastShape !== currentShape\n ) {\n if (layer.type === 'PointLayer') {\n layer.dataState.dataSourceNeedUpdate = true;\n return;\n }\n\n shapeUpdateList.map((shapes) => {\n if (shapes.includes(lastShape) && shapes.includes(currentShape)) {\n // TODO: dataSourceNeedUpdate 借用数据更新时更新 layer model 的工作流\n layer.dataState.dataSourceNeedUpdate = true;\n return;\n }\n });\n }\n}\n"],"file":"updateShape.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antv/l7-layers",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.21",
|
|
4
4
|
"description": "L7's collection of built-in layers",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@antv/geo-coord": "^1.0.8",
|
|
27
|
-
"@antv/l7-core": "^2.8.
|
|
28
|
-
"@antv/l7-source": "^2.8.
|
|
29
|
-
"@antv/l7-utils": "^2.8.
|
|
27
|
+
"@antv/l7-core": "^2.8.21",
|
|
28
|
+
"@antv/l7-source": "^2.8.21",
|
|
29
|
+
"@antv/l7-utils": "^2.8.21",
|
|
30
30
|
"@babel/runtime": "^7.7.7",
|
|
31
31
|
"@mapbox/martini": "^0.2.0",
|
|
32
32
|
"@turf/meta": "^6.0.2",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@types/gl-matrix": "^2.4.5",
|
|
53
53
|
"@types/lodash": "^4.14.138"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "3d71d65fa170a14b2d69217a397691d049804a9f",
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
}
|