@antv/l7-layers 2.5.54 → 2.5.58
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/core/interface.d.ts +1 -0
- package/es/core/interface.js.map +1 -1
- package/es/line/models/line.js +6 -3
- package/es/line/models/line.js.map +1 -1
- package/es/point/models/fill.js +1 -1
- package/es/utils/extrude_polyline.js +16 -16
- package/es/utils/extrude_polyline.js.map +1 -1
- package/lib/core/interface.js.map +1 -1
- package/lib/line/models/line.js +6 -3
- package/lib/line/models/line.js.map +1 -1
- package/lib/point/models/fill.js +1 -1
- package/lib/utils/extrude_polyline.js +16 -16
- package/lib/utils/extrude_polyline.js.map +1 -1
- package/package.json +5 -5
package/es/core/interface.d.ts
CHANGED
package/es/core/interface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType"],"mappings":"AACA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import { styleSingle } from '../core/BaseModel';\nexport enum lineStyleType {\n 'solid' = 0.0,\n 'dash' = 1.0,\n}\n\nexport interface ILineLayerStyleOptions {\n opacity: styleSingle;\n lineType?: keyof typeof lineStyleType; // 可选参数、线类型(all - dash/solid)\n dashArray?: [number, number]; // 可选参数、虚线间隔\n segmentNumber?: number;\n\n forward?: boolean; // 可选参数、是否反向(arcLine)\n lineTexture?: boolean; // 可选参数、是否开启纹理贴图功能(all)\n iconStep?: number; // 可选参数、纹理贴图步长(all)\n textureBlend?: string; // 可选参数、供给纹理贴图使用(all)\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n thetaOffset?: number; // 可选参数、设置弧线的偏移量\n\n globalArcHeight?: number; // 可选参数、地球模式下 3D 弧线的高度\n}\n"],"file":"interface.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType"],"mappings":"AACA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import { styleSingle } from '../core/BaseModel';\nexport enum lineStyleType {\n 'solid' = 0.0,\n 'dash' = 1.0,\n}\n\nexport interface ILineLayerStyleOptions {\n opacity: styleSingle;\n lineType?: keyof typeof lineStyleType; // 可选参数、线类型(all - dash/solid)\n dashArray?: [number, number]; // 可选参数、虚线间隔\n segmentNumber?: number;\n\n forward?: boolean; // 可选参数、是否反向(arcLine)\n lineTexture?: boolean; // 可选参数、是否开启纹理贴图功能(all)\n iconStep?: number; // 可选参数、纹理贴图步长(all)\n textureBlend?: string; // 可选参数、供给纹理贴图使用(all)\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n thetaOffset?: number; // 可选参数、设置弧线的偏移量\n\n globalArcHeight?: number; // 可选参数、地球模式下 3D 弧线的高度\n vertexHeightScale?: number; // 可选参数、lineLayer vertex height scale\n}\n"],"file":"interface.js"}
|
package/es/line/models/line.js
CHANGED
|
@@ -16,7 +16,7 @@ import { rgb2arr } from '@antv/l7-utils';
|
|
|
16
16
|
import BaseModel from '../../core/BaseModel';
|
|
17
17
|
import { LineTriangulation } from '../../core/triangulation';
|
|
18
18
|
var 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;\nuniform float u_textureBlend;\nvarying vec4 v_color;\n// varying vec2 v_normal;\n\n// line texture\nuniform float u_line_texture;\nuniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\n// dash\nuniform float u_dash_offset : 0.0;\nuniform float u_dash_ratio : 0.1;\nvarying vec4 v_dash_array;\n\nvarying vec2 v_iconMapUV;\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\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\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 // 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 // dash line\n if(u_line_type == LineTypeDash) {\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\n if(u_line_texture == LineTexture && u_line_type != LineTypeDash) { // 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 = filterColor(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 = filterColor(pattern);\n }\n } else {\n gl_FragColor = filterColor(gl_FragColor);\n }\n\n // gl_FragColor = (vec4(1.0, 0.0, 0.0, 1.0));\n \n // if(rV < r || rV > 1.0 - r) {\n // gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n // } \n // if(v > 0.9) {\n // gl_FragColor = vec4(0.17647, 0.43921568, 0.2, 1.0);\n // } else if(v < 0.1) {\n // gl_FragColor = vec4(0.17647, 0.43921568, 0.2, 1.0);\n // }\n\n // gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
19
|
-
var line_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 float u_line_type: 0.0;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\nvarying vec4 v_dash_array;\nvarying vec2 v_normal;\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_distance_ratio; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\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_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n if(u_line_type == LineTypeDash) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n }\n if(u_aimate.x == Animate || u_linearColor == 1.0) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n }\n v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));\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] = d_distance_ratio; // \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 if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n // gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y, 1.0));\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y / 8.0, 1.0)); // \u989D\u5916\u9664 8.0 \u662F\u4E3A\u4E86\u548Cgaode1.x\u7684\u9AD8\u5EA6\u517C\u5BB9\n } else {\n float lineHeight = a_Size.y;\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 lineHeight = lineHeight*2.0/pow(2.0, 20.0 - u_Zoom);\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";
|
|
19
|
+
var line_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 float u_line_type: 0.0;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\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;\nvarying vec2 v_normal;\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_distance_ratio; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\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_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n if(u_line_type == LineTypeDash) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n }\n if(u_aimate.x == Animate || u_linearColor == 1.0) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n }\n v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));\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] = d_distance_ratio; // \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\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n // gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y, 1.0));\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y / 8.0 + h, 1.0)); // \u989D\u5916\u9664 8.0 \u662F\u4E3A\u4E86\u548Cgaode1.x\u7684\u9AD8\u5EA6\u517C\u5BB9\n } else {\n float lineHeight = a_Size.y;\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 lineHeight = lineHeight*2.0/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";
|
|
20
20
|
var lineStyleObj = {
|
|
21
21
|
solid: 0.0,
|
|
22
22
|
dash: 1.0
|
|
@@ -82,7 +82,9 @@ var LineModel = function (_BaseModel) {
|
|
|
82
82
|
_ref$lineTexture = _ref.lineTexture,
|
|
83
83
|
lineTexture = _ref$lineTexture === void 0 ? false : _ref$lineTexture,
|
|
84
84
|
_ref$iconStep = _ref.iconStep,
|
|
85
|
-
iconStep = _ref$iconStep === void 0 ? 100 : _ref$iconStep
|
|
85
|
+
iconStep = _ref$iconStep === void 0 ? 100 : _ref$iconStep,
|
|
86
|
+
_ref$vertexHeightScal = _ref.vertexHeightScale,
|
|
87
|
+
vertexHeightScale = _ref$vertexHeightScal === void 0 ? 20.0 : _ref$vertexHeightScal;
|
|
86
88
|
|
|
87
89
|
if (dashArray.length === 2) {
|
|
88
90
|
dashArray.push(0, 0);
|
|
@@ -146,7 +148,8 @@ var LineModel = function (_BaseModel) {
|
|
|
146
148
|
u_textSize: [1024, this.iconService.canvasHeight || 128],
|
|
147
149
|
u_linearColor: useLinearColor,
|
|
148
150
|
u_sourceColor: sourceColorArr,
|
|
149
|
-
u_targetColor: targetColorArr
|
|
151
|
+
u_targetColor: targetColorArr,
|
|
152
|
+
u_vertexScale: vertexHeightScale
|
|
150
153
|
};
|
|
151
154
|
}
|
|
152
155
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/line/models/line.ts"],"names":["AttributeType","gl","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","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_linearColor","u_sourceColor","u_targetColor","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","line_vert","fragmentShader","line_frag","triangulation","primitive","TRIANGLES","blend","getBlend","depth","enable","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","url","Promise","resolve","reject","HTMLImageElement","image","Image","crossOrigin","onload","onerror","Error","src","File","URL","createObjectURL"],"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 { 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';\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\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 } = 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 // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\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 // const { createTexture2D } = this.rendererService;\n // this.texture = createTexture2D({\n // height: 0,\n // width: 0,\n // });\n // let url = 'https://gw-office.alipayobjects.com/bmw-prod/e91c3630-b79e-45a3-a2b9-feee4b4ccd41.svg'\n // this.loadImage(url).then((img) => {\n // this.texture = createTexture2D({\n // data: img as HTMLImageElement,\n // width: (img as HTMLImageElement).width,\n // height: (img as HTMLImageElement).height,\n // });\n // this.layerService.renderLayers();\n // })\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 return [\n this.layer.buildLayerModel({\n moduleName: 'line',\n vertexShader: line_vert,\n fragmentShader: line_frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: false },\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // const lineType = this\n // point layer size;\n const {\n lineType = 'solid',\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n // if (lineType === 'dash') {\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 loadImage(url: IImage) {\n return new Promise((resolve, reject) => {\n if (url instanceof HTMLImageElement) {\n resolve(url);\n return;\n }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url instanceof File ? URL.createObjectURL(url) : url;\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","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","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_linearColor","u_sourceColor","u_targetColor","u_vertexScale","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","line_vert","fragmentShader","line_frag","triangulation","primitive","TRIANGLES","blend","getBlend","depth","enable","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","url","Promise","resolve","reject","HTMLImageElement","image","Image","crossOrigin","onload","onerror","Error","src","File","URL","createObjectURL"],"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 { 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';\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\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 } = 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 // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\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 return [\n this.layer.buildLayerModel({\n moduleName: 'line',\n vertexShader: line_vert,\n fragmentShader: line_frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: false },\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // const lineType = this\n // point layer size;\n const {\n lineType = 'solid',\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n // if (lineType === 'dash') {\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 loadImage(url: IImage) {\n return new Promise((resolve, reject) => {\n if (url instanceof HTMLImageElement) {\n resolve(url);\n return;\n }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url instanceof File ? URL.createObjectURL(url) : url;\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"}
|
package/es/point/models/fill.js
CHANGED
|
@@ -14,7 +14,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
14
14
|
import { AttributeType, gl } from '@antv/l7-core';
|
|
15
15
|
import BaseModel from '../../core/BaseModel';
|
|
16
16
|
import { GlobelPointFillTriangulation, PointFillTriangulation } from '../../core/triangulation';
|
|
17
|
-
var pointFillFrag = "#define Animate 0.0\n\nuniform float u_globel;\nuniform float u_blur : 0;\n// uniform float u_stroke_width : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n \n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float antialiased_blur = -max(u_blur, antialiasblur);\n // float r = v_radius / (v_radius + u_stroke_width);\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiased_blur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiased_blur, outer_df);\n \n \n // float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n // antialiased_blur,\n // 0.0,\n // inner_df\n // );\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiased_blur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n\n gl_FragColor.a = gl_FragColor.a * opacity_t;\n if(u_aimate.x == Animate) {\n float d = length(v_data.xy);\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n gl_FragColor = vec4(gl_FragColor.xyz, intensity);\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n
|
|
17
|
+
var pointFillFrag = "#define Animate 0.0\n\nuniform float u_globel;\nuniform float u_blur : 0;\n// uniform float u_stroke_width : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n \n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float antialiased_blur = -max(u_blur, antialiasblur);\n // float r = v_radius / (v_radius + u_stroke_width);\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiased_blur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiased_blur, outer_df);\n \n \n // float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n // antialiased_blur,\n // 0.0,\n // inner_df\n // );\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiased_blur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n\n gl_FragColor.a = gl_FragColor.a * opacity_t;\n if(u_aimate.x == Animate) {\n float d = length(v_data.xy);\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n gl_FragColor = vec4(gl_FragColor.xyz, intensity);\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\uFF08a == 0 \u65F6\u65E0\u6CD5\u62FE\u53D6\uFF09\n if(d < 0.7) {\n gl_FragColor.a = max(gl_FragColor.a, 0.001);\n }\n }\n \n gl_FragColor = filterColor(gl_FragColor);\n \n}\n";
|
|
18
18
|
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\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 float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\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 - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\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 // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n float antialiasblur = 1.0 / u_DevicePixelRatio / (newSize + u_stroke_width);\n\n // construct point coords\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n // vec2 offset = project_pixel(extrude * (newSize + u_stroke_width) + u_offsets);\n vec2 offset = project_pixel(extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec4 project_pos = project_position(vec4(a_Position.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 if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 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";
|
|
19
19
|
import { mat4, vec3 } from 'gl-matrix';
|
|
20
20
|
|
|
@@ -191,8 +191,8 @@ var ExtrudePolyline = function () {
|
|
|
191
191
|
vec2.add(out2, this.normal, lineA);
|
|
192
192
|
normals.push(out2[0], out2[1], 0);
|
|
193
193
|
normals.push(out1[0], out1[1], 0);
|
|
194
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
195
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
194
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
195
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
196
196
|
} else {
|
|
197
197
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
198
198
|
}
|
|
@@ -212,8 +212,8 @@ var ExtrudePolyline = function () {
|
|
|
212
212
|
vec2.add(_out, lineA, this.normal);
|
|
213
213
|
normals.push(_out2[0], _out2[1], 0);
|
|
214
214
|
normals.push(_out[0], _out[1], 0);
|
|
215
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
216
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
215
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
216
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
217
217
|
} else {
|
|
218
218
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
219
219
|
}
|
|
@@ -246,14 +246,14 @@ var ExtrudePolyline = function () {
|
|
|
246
246
|
if (bevel) {
|
|
247
247
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
248
248
|
normals.push(miter[0], miter[1], 0);
|
|
249
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
250
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
249
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
250
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
251
251
|
indices.push.apply(indices, _toConsumableArray(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
252
252
|
indices.push(index + 2, index + 3, index + 4);
|
|
253
253
|
computeNormal(tmp, lineB);
|
|
254
254
|
vec2.copy(this.normal, tmp);
|
|
255
255
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
256
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
256
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
257
257
|
count += 3;
|
|
258
258
|
} else {
|
|
259
259
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -302,8 +302,8 @@ var ExtrudePolyline = function () {
|
|
|
302
302
|
vec2.add(out2, this.normal, lineA);
|
|
303
303
|
normals.push(out2[0], out2[1], 0);
|
|
304
304
|
normals.push(out1[0], out1[1], 0);
|
|
305
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
306
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
305
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
306
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
307
307
|
} else {
|
|
308
308
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
309
309
|
}
|
|
@@ -323,8 +323,8 @@ var ExtrudePolyline = function () {
|
|
|
323
323
|
vec2.add(_out3, lineA, this.normal);
|
|
324
324
|
normals.push(_out4[0], _out4[1], 0);
|
|
325
325
|
normals.push(_out3[0], _out3[1], 0);
|
|
326
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
327
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
326
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
327
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
328
328
|
} else {
|
|
329
329
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
330
330
|
}
|
|
@@ -359,14 +359,14 @@ var ExtrudePolyline = function () {
|
|
|
359
359
|
if (bevel) {
|
|
360
360
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
361
361
|
normals.push(miter[0], miter[1], 0);
|
|
362
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
363
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
362
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
363
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
364
364
|
indices.push.apply(indices, _toConsumableArray(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
365
365
|
indices.push(index + 2, index + 3, index + 4);
|
|
366
366
|
computeNormal(tmp, lineB);
|
|
367
367
|
vec2.copy(this.normal, tmp);
|
|
368
368
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
369
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
369
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
370
370
|
count += 3;
|
|
371
371
|
} else {
|
|
372
372
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -386,8 +386,8 @@ var ExtrudePolyline = function () {
|
|
|
386
386
|
value: function extrusions(positions, normals, point, normal, thickness, distanceRadio) {
|
|
387
387
|
normals.push(normal[0], normal[1], 0);
|
|
388
388
|
normals.push(normal[0], normal[1], 0);
|
|
389
|
-
positions.push(point[0], point[1], 0, distanceRadio, -thickness, 0);
|
|
390
|
-
positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);
|
|
389
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, -thickness, point[2] | 0);
|
|
390
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, thickness, point[2] | 0);
|
|
391
391
|
}
|
|
392
392
|
}, {
|
|
393
393
|
key: "lineSegmentDistance",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["aProjectFlat","vec2","tmp","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","push","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec2;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec2;\n const originCur = originPoints[i] as vec2;\n\n const next = i < points.length - 1 ? points[i + 1] : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n last,\n cur,\n next as vec2,\n originLast,\n originCur,\n originNext as vec2,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec2;\n const cur = points[i] as vec2;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec2);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec2,\n cur: vec2,\n next: vec2,\n originLast: vec2,\n originCur: vec2,\n originNext: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n direction(lineA, cur, last);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n if (isPointEqual(cur, next)) {\n vec2.add(\n next,\n cur,\n vec2.normalize(next, vec2.subtract(next, cur, last)),\n );\n }\n direction(lineB, next, cur);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec2,\n cur: vec2,\n next: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 0,\n );\n\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec2, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(point[0], point[1], 0, distanceRadio, -thickness, 0);\n positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);\n }\n private lineSegmentDistance(b1: vec2, a1: vec2) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["aProjectFlat","vec2","tmp","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","push","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec3;\n const originCur = originPoints[i] as vec2;\n\n const next = i < points.length - 1 ? points[i + 1] : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n last,\n cur,\n next as vec3,\n originLast,\n originCur,\n originNext as vec2,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec2,\n originCur: vec2,\n originNext: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n direction(lineA, cur as vec2, last as vec2);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n next as vec2,\n cur as vec2,\n vec2.normalize(\n next as vec2,\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n }\n private lineSegmentDistance(b1: vec2, a1: vec2) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType"],"mappings":";;;;;;IACYA,a;;;WAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,6BAAAA,a","sourcesContent":["import { styleSingle } from '../core/BaseModel';\nexport enum lineStyleType {\n 'solid' = 0.0,\n 'dash' = 1.0,\n}\n\nexport interface ILineLayerStyleOptions {\n opacity: styleSingle;\n lineType?: keyof typeof lineStyleType; // 可选参数、线类型(all - dash/solid)\n dashArray?: [number, number]; // 可选参数、虚线间隔\n segmentNumber?: number;\n\n forward?: boolean; // 可选参数、是否反向(arcLine)\n lineTexture?: boolean; // 可选参数、是否开启纹理贴图功能(all)\n iconStep?: number; // 可选参数、纹理贴图步长(all)\n textureBlend?: string; // 可选参数、供给纹理贴图使用(all)\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n thetaOffset?: number; // 可选参数、设置弧线的偏移量\n\n globalArcHeight?: number; // 可选参数、地球模式下 3D 弧线的高度\n}\n"],"file":"interface.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/interface.ts"],"names":["lineStyleType"],"mappings":";;;;;;IACYA,a;;;WAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,6BAAAA,a","sourcesContent":["import { styleSingle } from '../core/BaseModel';\nexport enum lineStyleType {\n 'solid' = 0.0,\n 'dash' = 1.0,\n}\n\nexport interface ILineLayerStyleOptions {\n opacity: styleSingle;\n lineType?: keyof typeof lineStyleType; // 可选参数、线类型(all - dash/solid)\n dashArray?: [number, number]; // 可选参数、虚线间隔\n segmentNumber?: number;\n\n forward?: boolean; // 可选参数、是否反向(arcLine)\n lineTexture?: boolean; // 可选参数、是否开启纹理贴图功能(all)\n iconStep?: number; // 可选参数、纹理贴图步长(all)\n textureBlend?: string; // 可选参数、供给纹理贴图使用(all)\n sourceColor?: string; // 可选参数、设置渐变色的起始颜色(all)\n targetColor?: string; // 可选参数、设置渐变色的终点颜色(all)\n thetaOffset?: number; // 可选参数、设置弧线的偏移量\n\n globalArcHeight?: number; // 可选参数、地球模式下 3D 弧线的高度\n vertexHeightScale?: number; // 可选参数、lineLayer vertex height scale\n}\n"],"file":"interface.js"}
|
package/lib/line/models/line.js
CHANGED
|
@@ -36,7 +36,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
36
36
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
37
|
|
|
38
38
|
var 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;\nuniform float u_textureBlend;\nvarying vec4 v_color;\n// varying vec2 v_normal;\n\n// line texture\nuniform float u_line_texture;\nuniform sampler2D u_texture;\nuniform vec2 u_textSize;\n\n// dash\nuniform float u_dash_offset : 0.0;\nuniform float u_dash_ratio : 0.1;\nvarying vec4 v_dash_array;\n\nvarying vec2 v_iconMapUV;\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\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\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 // 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 // dash line\n if(u_line_type == LineTypeDash) {\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\n if(u_line_texture == LineTexture && u_line_type != LineTypeDash) { // 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 = filterColor(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 = filterColor(pattern);\n }\n } else {\n gl_FragColor = filterColor(gl_FragColor);\n }\n\n // gl_FragColor = (vec4(1.0, 0.0, 0.0, 1.0));\n \n // if(rV < r || rV > 1.0 - r) {\n // gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n // } \n // if(v > 0.9) {\n // gl_FragColor = vec4(0.17647, 0.43921568, 0.2, 1.0);\n // } else if(v < 0.1) {\n // gl_FragColor = vec4(0.17647, 0.43921568, 0.2, 1.0);\n // }\n\n // gl_FragColor = filterColor(gl_FragColor);\n}\n";
|
|
39
|
-
var line_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 float u_line_type: 0.0;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\nvarying vec4 v_color;\nvarying vec4 v_dash_array;\nvarying vec2 v_normal;\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_distance_ratio; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\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_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n if(u_line_type == LineTypeDash) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n }\n if(u_aimate.x == Animate || u_linearColor == 1.0) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n }\n v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));\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] = d_distance_ratio; // \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 if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n // gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y, 1.0));\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y / 8.0, 1.0)); // \u989D\u5916\u9664 8.0 \u662F\u4E3A\u4E86\u548Cgaode1.x\u7684\u9AD8\u5EA6\u517C\u5BB9\n } else {\n float lineHeight = a_Size.y;\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 lineHeight = lineHeight*2.0/pow(2.0, 20.0 - u_Zoom);\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";
|
|
39
|
+
var line_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 float u_line_type: 0.0;\nuniform vec4 u_dash_array: [10.0, 5., 0, 0];\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\nuniform float u_icon_step: 100;\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;\nvarying vec2 v_normal;\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_distance_ratio; // \u5F53\u524D\u70B9\u4F4D\u8DDD\u79BB\u5360\u7EBF\u603B\u957F\u7684\u6BD4\u4F8B\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_pixel(u_icon_step);\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n d_texPixelLen *= 10.0;\n }\n\n if(u_line_type == LineTypeDash) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;\n }\n if(u_aimate.x == Animate || u_linearColor == 1.0) {\n d_distance_ratio = a_Distance / a_Total_Distance;\n }\n v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));\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] = d_distance_ratio; // \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\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n // gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y, 1.0));\n gl_Position = u_Mvp * (vec4(project_pos.xy + offset, a_Size.y / 8.0 + h, 1.0)); // \u989D\u5916\u9664 8.0 \u662F\u4E3A\u4E86\u548Cgaode1.x\u7684\u9AD8\u5EA6\u517C\u5BB9\n } else {\n float lineHeight = a_Size.y;\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 lineHeight = lineHeight*2.0/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";
|
|
40
40
|
var lineStyleObj = {
|
|
41
41
|
solid: 0.0,
|
|
42
42
|
dash: 1.0
|
|
@@ -99,7 +99,9 @@ var LineModel = function (_BaseModel) {
|
|
|
99
99
|
_ref$lineTexture = _ref.lineTexture,
|
|
100
100
|
lineTexture = _ref$lineTexture === void 0 ? false : _ref$lineTexture,
|
|
101
101
|
_ref$iconStep = _ref.iconStep,
|
|
102
|
-
iconStep = _ref$iconStep === void 0 ? 100 : _ref$iconStep
|
|
102
|
+
iconStep = _ref$iconStep === void 0 ? 100 : _ref$iconStep,
|
|
103
|
+
_ref$vertexHeightScal = _ref.vertexHeightScale,
|
|
104
|
+
vertexHeightScale = _ref$vertexHeightScal === void 0 ? 20.0 : _ref$vertexHeightScal;
|
|
103
105
|
|
|
104
106
|
if (dashArray.length === 2) {
|
|
105
107
|
dashArray.push(0, 0);
|
|
@@ -163,7 +165,8 @@ var LineModel = function (_BaseModel) {
|
|
|
163
165
|
u_textSize: [1024, this.iconService.canvasHeight || 128],
|
|
164
166
|
u_linearColor: useLinearColor,
|
|
165
167
|
u_sourceColor: sourceColorArr,
|
|
166
|
-
u_targetColor: targetColorArr
|
|
168
|
+
u_targetColor: targetColorArr,
|
|
169
|
+
u_vertexScale: vertexHeightScale
|
|
167
170
|
};
|
|
168
171
|
}
|
|
169
172
|
}, {
|
|
@@ -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","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_linearColor","u_sourceColor","u_targetColor","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","line_vert","fragmentShader","line_frag","triangulation","LineTriangulation","primitive","TRIANGLES","blend","getBlend","depth","enable","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","url","Promise","resolve","reject","HTMLImageElement","image","Image","crossOrigin","onload","onerror","Error","src","File","URL","createObjectURL","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 { 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';\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\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 } = 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 // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\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 // const { createTexture2D } = this.rendererService;\n // this.texture = createTexture2D({\n // height: 0,\n // width: 0,\n // });\n // let url = 'https://gw-office.alipayobjects.com/bmw-prod/e91c3630-b79e-45a3-a2b9-feee4b4ccd41.svg'\n // this.loadImage(url).then((img) => {\n // this.texture = createTexture2D({\n // data: img as HTMLImageElement,\n // width: (img as HTMLImageElement).width,\n // height: (img as HTMLImageElement).height,\n // });\n // this.layerService.renderLayers();\n // })\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 return [\n this.layer.buildLayerModel({\n moduleName: 'line',\n vertexShader: line_vert,\n fragmentShader: line_frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: false },\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // const lineType = this\n // point layer size;\n const {\n lineType = 'solid',\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n // if (lineType === 'dash') {\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 loadImage(url: IImage) {\n return new Promise((resolve, reject) => {\n if (url instanceof HTMLImageElement) {\n resolve(url);\n return;\n }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url instanceof File ? URL.createObjectURL(url) : url;\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","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_linearColor","u_sourceColor","u_targetColor","u_vertexScale","animateOption","u_aimate","animateOption2Array","u_time","getLayerAnimateTime","updateTexture","on","buildModels","destroy","off","buildLayerModel","moduleName","vertexShader","line_vert","fragmentShader","line_frag","triangulation","LineTriangulation","primitive","TRIANGLES","blend","getBlend","depth","enable","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","STATIC_DRAW","size","feature","featureIdx","vertex","attributeIdx","DYNAMIC_DRAW","Array","isArray","normal","iconMap","getIconMap","x","y","url","Promise","resolve","reject","HTMLImageElement","image","Image","crossOrigin","onload","onerror","Error","src","File","URL","createObjectURL","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 { 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';\nimport line_frag from '../shaders/line_frag.glsl';\nimport line_vert from '../shaders/line_vert.glsl';\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 } = 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 // 渐变色支持参数\n u_linearColor: useLinearColor,\n u_sourceColor: sourceColorArr,\n u_targetColor: targetColorArr,\n\n // 顶点高度 scale\n u_vertexScale: vertexHeightScale,\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 return [\n this.layer.buildLayerModel({\n moduleName: 'line',\n vertexShader: line_vert,\n fragmentShader: line_frag,\n triangulation: LineTriangulation,\n primitive: gl.TRIANGLES,\n blend: this.getBlend(),\n depth: { enable: false },\n }),\n ];\n }\n protected registerBuiltinAttributes() {\n // const lineType = this\n // point layer size;\n const {\n lineType = 'solid',\n } = this.layer.getLayerConfig() as ILineLayerStyleOptions;\n // if (lineType === 'dash') {\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 loadImage(url: IImage) {\n return new Promise((resolve, reject) => {\n if (url instanceof HTMLImageElement) {\n resolve(url);\n return;\n }\n const image = new Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => {\n resolve(image);\n };\n image.onerror = () => {\n reject(new Error('Could not load image at ' + url));\n };\n image.src = url instanceof File ? URL.createObjectURL(url) : url;\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"}
|
package/lib/point/models/fill.js
CHANGED
|
@@ -35,7 +35,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
35
35
|
|
|
36
36
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
37
|
|
|
38
|
-
var pointFillFrag = "#define Animate 0.0\n\nuniform float u_globel;\nuniform float u_blur : 0;\n// uniform float u_stroke_width : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n \n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float antialiased_blur = -max(u_blur, antialiasblur);\n // float r = v_radius / (v_radius + u_stroke_width);\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiased_blur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiased_blur, outer_df);\n \n \n // float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n // antialiased_blur,\n // 0.0,\n // inner_df\n // );\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiased_blur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n\n gl_FragColor.a = gl_FragColor.a * opacity_t;\n if(u_aimate.x == Animate) {\n float d = length(v_data.xy);\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n gl_FragColor = vec4(gl_FragColor.xyz, intensity);\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n
|
|
38
|
+
var pointFillFrag = "#define Animate 0.0\n\nuniform float u_globel;\nuniform float u_blur : 0;\n// uniform float u_stroke_width : 1;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n \n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float antialiased_blur = -max(u_blur, antialiasblur);\n // float r = v_radius / (v_radius + u_stroke_width);\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiased_blur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiased_blur, outer_df);\n \n \n // float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(\n // antialiased_blur,\n // 0.0,\n // inner_df\n // );\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiased_blur,\n 0.0,\n inner_df\n );\n float PI = 3.14159;\n float N_RINGS = 3.0;\n float FREQ = 1.0;\n\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n\n gl_FragColor.a = gl_FragColor.a * opacity_t;\n if(u_aimate.x == Animate) {\n float d = length(v_data.xy);\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n gl_FragColor = vec4(gl_FragColor.xyz, intensity);\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\uFF08a == 0 \u65F6\u65E0\u6CD5\u62FE\u53D6\uFF09\n if(d < 0.7) {\n gl_FragColor.a = max(gl_FragColor.a, 0.001);\n }\n }\n \n gl_FragColor = filterColor(gl_FragColor);\n \n}\n";
|
|
39
39
|
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\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 float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\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 - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\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 // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n float antialiasblur = 1.0 / u_DevicePixelRatio / (newSize + u_stroke_width);\n\n // construct point coords\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n // vec2 offset = project_pixel(extrude * (newSize + u_stroke_width) + u_offsets);\n vec2 offset = project_pixel(extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec4 project_pos = project_position(vec4(a_Position.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 if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 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";
|
|
40
40
|
|
|
41
41
|
var FillModel = function (_BaseModel) {
|
|
@@ -214,8 +214,8 @@ var ExtrudePolyline = function () {
|
|
|
214
214
|
|
|
215
215
|
normals.push(out2[0], out2[1], 0);
|
|
216
216
|
normals.push(out1[0], out1[1], 0);
|
|
217
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
218
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
217
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
218
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
219
219
|
} else {
|
|
220
220
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
221
221
|
}
|
|
@@ -237,8 +237,8 @@ var ExtrudePolyline = function () {
|
|
|
237
237
|
|
|
238
238
|
normals.push(_out2[0], _out2[1], 0);
|
|
239
239
|
normals.push(_out[0], _out[1], 0);
|
|
240
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
241
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
240
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
241
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
242
242
|
} else {
|
|
243
243
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
244
244
|
}
|
|
@@ -271,8 +271,8 @@ var ExtrudePolyline = function () {
|
|
|
271
271
|
if (bevel) {
|
|
272
272
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
273
273
|
normals.push(miter[0], miter[1], 0);
|
|
274
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
275
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
274
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
275
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
276
276
|
indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
277
277
|
indices.push(index + 2, index + 3, index + 4);
|
|
278
278
|
computeNormal(tmp, lineB);
|
|
@@ -280,7 +280,7 @@ var ExtrudePolyline = function () {
|
|
|
280
280
|
_glMatrix.vec2.copy(this.normal, tmp);
|
|
281
281
|
|
|
282
282
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
283
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
283
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
284
284
|
count += 3;
|
|
285
285
|
} else {
|
|
286
286
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -335,8 +335,8 @@ var ExtrudePolyline = function () {
|
|
|
335
335
|
|
|
336
336
|
normals.push(out2[0], out2[1], 0);
|
|
337
337
|
normals.push(out1[0], out1[1], 0);
|
|
338
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, -this.thickness, 0);
|
|
339
|
-
positions.push(last[0], last[1], 0, this.totalDistance - segmentDistance, this.thickness, 0);
|
|
338
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, -this.thickness, last[2] | 0);
|
|
339
|
+
positions.push(last[0], last[1], last[2] | 0, this.totalDistance - segmentDistance, this.thickness, last[2] | 0);
|
|
340
340
|
} else {
|
|
341
341
|
this.extrusions(positions, normals, last, this.normal, this.thickness, this.totalDistance - segmentDistance);
|
|
342
342
|
}
|
|
@@ -358,8 +358,8 @@ var ExtrudePolyline = function () {
|
|
|
358
358
|
|
|
359
359
|
normals.push(_out4[0], _out4[1], 0);
|
|
360
360
|
normals.push(_out3[0], _out3[1], 0);
|
|
361
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
362
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness, 0);
|
|
361
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
362
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness, cur[2] | 0);
|
|
363
363
|
} else {
|
|
364
364
|
this.extrusions(positions, normals, cur, this.normal, this.thickness, this.totalDistance);
|
|
365
365
|
}
|
|
@@ -394,8 +394,8 @@ var ExtrudePolyline = function () {
|
|
|
394
394
|
if (bevel) {
|
|
395
395
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
396
396
|
normals.push(miter[0], miter[1], 0);
|
|
397
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
398
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, this.thickness * flip, 0);
|
|
397
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
398
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, this.thickness * flip, cur[2] | 0);
|
|
399
399
|
indices.push.apply(indices, (0, _toConsumableArray2.default)(this.lastFlip !== -flip ? [index, index + 2, index + 3] : [index + 2, index + 1, index + 3]));
|
|
400
400
|
indices.push(index + 2, index + 3, index + 4);
|
|
401
401
|
computeNormal(tmp, lineB);
|
|
@@ -403,7 +403,7 @@ var ExtrudePolyline = function () {
|
|
|
403
403
|
_glMatrix.vec2.copy(this.normal, tmp);
|
|
404
404
|
|
|
405
405
|
normals.push(this.normal[0], this.normal[1], 0);
|
|
406
|
-
positions.push(cur[0], cur[1], 0, this.totalDistance, -this.thickness * flip, 0);
|
|
406
|
+
positions.push(cur[0], cur[1], cur[2] | 0, this.totalDistance, -this.thickness * flip, cur[2] | 0);
|
|
407
407
|
count += 3;
|
|
408
408
|
} else {
|
|
409
409
|
this.extrusions(positions, normals, cur, miter, miterLen, this.totalDistance);
|
|
@@ -425,8 +425,8 @@ var ExtrudePolyline = function () {
|
|
|
425
425
|
value: function extrusions(positions, normals, point, normal, thickness, distanceRadio) {
|
|
426
426
|
normals.push(normal[0], normal[1], 0);
|
|
427
427
|
normals.push(normal[0], normal[1], 0);
|
|
428
|
-
positions.push(point[0], point[1], 0, distanceRadio, -thickness, 0);
|
|
429
|
-
positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);
|
|
428
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, -thickness, point[2] | 0);
|
|
429
|
+
positions.push(point[0], point[1], point[2] | 0, distanceRadio, thickness, point[2] | 0);
|
|
430
430
|
}
|
|
431
431
|
}, {
|
|
432
432
|
key: "lineSegmentDistance",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","push","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA,IAAMA,GAAG,GAAGC,eAAKC,MAAL,EAAZ;;AACA,IAAMC,MAAM,GAAGF,eAAKC,MAAL,EAAf;;AACA,IAAME,KAAK,GAAGH,eAAKC,MAAL,EAAd;;AACA,IAAMG,KAAK,GAAGJ,eAAKC,MAAL,EAAd;;AACA,IAAMI,OAAO,GAAGL,eAAKC,MAAL,EAAhB;;AAEO,SAASK,YAAT,CACLC,WADK,EAELC,KAFK,EAGLC,KAHK,EAILC,GAJK,EAKLC,SALK,EAMW;AAChBX,iBAAKY,GAAL,CAASL,WAAT,EAAsBE,KAAtB,EAA6BC,GAA7B;;AACAV,iBAAKa,SAAL,CAAeN,WAAf,EAA4BA,WAA5B;;AACAC,EAAAA,KAAK,GAAGR,eAAKc,UAAL,CAAgB,CAACP,WAAW,CAAC,CAAD,CAA5B,EAAiCA,WAAW,CAAC,CAAD,CAA5C,CAAR;;AACA,MAAMQ,MAAM,GAAGf,eAAKc,UAAL,CAAgB,CAACL,KAAK,CAAC,CAAD,CAAtB,EAA2BA,KAAK,CAAC,CAAD,CAAhC,CAAf;;AACA,SAAO,CAACE,SAAS,GAAGX,eAAKgB,GAAL,CAASR,KAAT,EAAgBO,MAAhB,CAAb,EAAsCP,KAAtC,CAAP;AACD;;AACM,SAASS,aAAT,CAAuBC,GAAvB,EAAkCC,GAAlC,EAA6C;AAClD,SAAOnB,eAAKoB,GAAL,CAASF,GAAT,EAAc,CAACC,GAAG,CAAC,CAAD,CAAlB,EAAuBA,GAAG,CAAC,CAAD,CAA1B,CAAP;AACD;;AAEM,SAASE,SAAT,CAAmBH,GAAnB,EAA8BI,CAA9B,EAAuCC,CAAvC,EAAgD;AACrDvB,iBAAKwB,GAAL,CAASN,GAAT,EAAcI,CAAd,EAAiBC,CAAjB;;AACAvB,iBAAKa,SAAL,CAAeK,GAAf,EAAoBA,GAApB;;AACA,SAAOA,GAAP;AACD;;AAED,SAASO,YAAT,CAAsBH,CAAtB,EAA+BC,CAA/B,EAAwC;AACtC,SAAOD,CAAC,CAAC,CAAD,CAAD,KAASC,CAAC,CAAC,CAAD,CAAV,IAAiBD,CAAC,CAAC,CAAD,CAAD,KAASC,CAAC,CAAC,CAAD,CAAlC;AACD;;AAED,SAASG,cAAT,CAAwBC,MAAxB,EAA4C;AAC1C,MAAMC,GAAG,GAAG,IAAIC,GAAJ,EAAZ;;AACA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAAM,CAACI,MAA3B,EAAmCD,CAAC,EAApC,EAAwC;AACtC,QAAME,GAAG,GAAGL,MAAM,CAAC,CAAD,CAAN,CAAUM,QAAV,KAAuB,GAAvB,GAA6BN,MAAM,CAAC,CAAD,CAAN,CAAUM,QAAV,EAAzC;;AACA,QAAIL,GAAG,CAACM,GAAJ,CAAQF,GAAR,CAAJ,EAAkB;AAChBL,MAAAA,MAAM,CAACQ,MAAP,CAAcL,CAAd,EAAiB,CAAjB;AACAA,MAAAA,CAAC;AACF,KAHD,MAGO;AACLF,MAAAA,GAAG,CAACR,GAAJ,CAAQY,GAAR,EAAaA,GAAb;AACD;AACF;;AACD,SAAOL,MAAP;AACD;;IAWoBS,e;AAkBnB,6BAAoD;AAAA,QAAxCC,IAAwC,uEAAJ,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDANzB,CAAC,CAMwB;AAAA,iDAL9BrC,eAAKc,UAAL,CAAgB,CAAhB,EAAmB,CAAnB,CAK8B;AAAA,mDAJzB,KAIyB;AAAA,gDAH5B,KAG4B;AAAA,yDAFpB,CAEoB;AAClD,SAAKwB,IAAL,GAAYD,IAAI,CAACC,IAAL,IAAa,OAAzB;AACA,SAAKC,GAAL,GAAWF,IAAI,CAACE,GAAL,IAAY,MAAvB;AACA,SAAKC,UAAL,GAAkBH,IAAI,CAACG,UAAL,IAAmB,EAArC;AACA,SAAKC,SAAL,GAAiBJ,IAAI,CAACI,SAAL,IAAkB,CAAnC;AACA,SAAKC,IAAL,GAAYL,IAAI,CAACK,IAAL,IAAa,KAAzB;AACA,SAAKC,OAAL,GAAe;AACbC,MAAAA,SAAS,EAAE,EADE;AAEbC,MAAAA,OAAO,EAAE,EAFI;AAGbC,MAAAA,OAAO,EAAE,EAHI;AAIbC,MAAAA,UAAU,EAAE;AAJC,KAAf;AAMD;;;;WAED,wBAAsBC,MAAtB,EAA0CC,YAA1C,EAAoE;AAClE,UAAMN,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIK,MAAM,CAACjB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKO,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAACjB,MAArB;AACA,UAAIwB,KAAK,GAAGZ,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwB,KAApB,EAA2BxB,CAAC,EAA5B,EAAgC;AAC9B,YAAM0B,IAAI,GAAGR,MAAM,CAAClB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM2B,UAAU,GAAGR,YAAY,CAACnB,CAAC,GAAG,CAAL,CAA/B;AAEA,YAAM4B,GAAG,GAAGV,MAAM,CAAClB,CAAD,CAAlB;AACA,YAAM6B,SAAS,GAAGV,YAAY,CAACnB,CAAD,CAA9B;AAEA,YAAM8B,IAAI,GAAG9B,CAAC,GAAGkB,MAAM,CAACjB,MAAP,GAAgB,CAApB,GAAwBiB,MAAM,CAAClB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAM+B,UAAU,GACd/B,CAAC,GAAGmB,YAAY,CAAClB,MAAb,GAAsB,CAA1B,GAA8BkB,YAAY,CAACnB,CAAC,GAAG,CAAL,CAA1C,GAAoD,IADtD;AAGA,YAAMgC,GAAG,GAAG,KAAKC,cAAL,CACVpB,OADU,EAEVY,KAFU,EAGVC,IAHU,EAIVE,GAJU,EAKVE,IALU,EAMVH,UANU,EAOVE,SAPU,EAQVE,UARU,CAAZ;AAUAN,QAAAA,KAAK,IAAIO,GAAT;AACD;;AACD,UAAI,KAAKpB,IAAT,EAAe;AACb,aAAK,IAAIZ,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,EAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,EAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKuB,aAApC;AACD;AACF;;AACDV,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,iBAAeK,MAAf,EAAmC;AACjC,UAAML,OAAO,GAAG,KAAKA,OAArB;;AACA,UAAIK,MAAM,CAACjB,MAAP,IAAiB,CAArB,EAAwB;AACtB,eAAOY,OAAP;AACD;;AACD,WAAKO,QAAL,GAAgB,CAAC,CAAjB;AACA,WAAKC,OAAL,GAAe,KAAf;AACA,WAAKC,MAAL,GAAc,IAAd;AACA,WAAKC,aAAL,GAAqB,CAArB;AAGA,UAAMC,KAAK,GAAGN,MAAM,CAACjB,MAArB;AACA,UAAIwB,KAAK,GAAGZ,OAAO,CAACI,UAApB;;AACA,WAAK,IAAIjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwB,KAApB,EAA2BxB,CAAC,EAA5B,EAAgC;AAC9B,YAAM0B,IAAI,GAAGR,MAAM,CAAClB,CAAC,GAAG,CAAL,CAAnB;AACA,YAAM4B,GAAG,GAAGV,MAAM,CAAClB,CAAD,CAAlB;AACA,YAAM8B,IAAI,GAAG9B,CAAC,GAAGkB,MAAM,CAACjB,MAAP,GAAgB,CAApB,GAAwBiB,MAAM,CAAClB,CAAC,GAAG,CAAL,CAA9B,GAAwC,IAArD;AACA,YAAMgC,GAAG,GAAG,KAAKE,OAAL,CAAarB,OAAb,EAAsBY,KAAtB,EAA6BC,IAA7B,EAAmCE,GAAnC,EAAwCE,IAAxC,CAAZ;AACAL,QAAAA,KAAK,IAAIO,GAAT;AACD;;AACD,UAAI,KAAKpB,IAAT,EAAe;AACb,aAAK,IAAIZ,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGa,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAA/C,EAAkDD,GAAC,EAAnD,EAAuD;AACrDa,UAAAA,OAAO,CAACC,SAAR,CAAkBd,GAAC,GAAG,CAAJ,GAAQ,CAA1B,IAA+B,KAAKuB,aAApC;AACD;AACF;;AACDV,MAAAA,OAAO,CAACI,UAAR,GAAqBJ,OAAO,CAACC,SAAR,CAAkBb,MAAlB,GAA2B,CAAhD;AACA,aAAOY,OAAP;AACD;;;WACD,wBACEA,OADF,EAEEsB,KAFF,EAGET,IAHF,EAIEE,GAJF,EAKEE,IALF,EAMEH,UANF,EAOEE,SAPF,EAQEE,UARF,EASE;AACA,UAAIN,KAAK,GAAG,CAAZ;AACA,UAAMV,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMoB,SAAS,GAAG,KAAK3B,GAAL,KAAa,QAA/B;AACA,UAAM4B,SAAS,GAAG,KAAK7B,IAAL,KAAc,OAAhC;AACA,UAAM8B,OAAO,GAAG,2BAAa,CAACT,SAAS,CAAC,CAAD,CAAV,EAAeA,SAAS,CAAC,CAAD,CAAxB,CAAb,CAAhB;AAIA,UAAMU,QAAQ,GAAG,2BAAa,CAACZ,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC,CAAD,CAA1B,CAAb,CAAjB;AAIApC,MAAAA,SAAS,CAAClB,KAAD,EAAQuD,GAAR,EAAaF,IAAb,CAAT;AACA,UAAIc,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK5B,IAAT,EAAe;AACb4B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKhB,aAAL,IAAsBiB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKlB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcpD,eAAKC,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKgD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIe,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,IAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;;AACAH,yBAAKY,GAAL,CAAS6D,IAAT,EAAe,KAAKrB,MAApB,EAA4BjD,KAA5B;;AACA2C,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAME,CANF;AAQD,SAxBD,MAwBO;AACL,eAAKkC,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEU,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aAAL,GAAqBiB,eANvB;AAQD;AACF;;AAEDzB,MAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACL,IAAL,EAAW;AACT3C,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;;AACA,YAAI+D,SAAJ,EAAe;AACb,cAAMM,IAAI,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;;AACApD,yBAAKY,GAAL,CAAS4D,IAAT,EAAerE,KAAf,EAAsB,KAAKiD,MAA3B;;AAEAN,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AAEA5B,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQD,SAzBD,MAyBO;AACL,eAAKkC,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIE,KAAKN,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aANP;AAQD;;AACDR,QAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAKAV,QAAAA,KAAK,IAAI,CAAT;AACD,OA3CD,MA2CO;AACL,YAAI9B,YAAY,CAACiC,GAAD,EAAME,IAAN,CAAhB,EAA6B;AAC3B5D,yBAAKY,GAAL,CACEgD,IADF,EAEEF,GAFF,EAGE1D,eAAKa,SAAL,CAAe+C,IAAf,EAAqB5D,eAAK4E,QAAL,CAAchB,IAAd,EAAoBF,GAApB,EAAyBF,IAAzB,CAArB,CAHF;AAKD;;AACDnC,QAAAA,SAAS,CAACjB,KAAD,EAAQwD,IAAR,EAAcF,GAAd,CAAT;;AAGA,4BAA0BpD,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG9E,eAAKgB,GAAL,CAASX,OAAT,EAAkB,KAAK+C,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI2B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAKzC,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM0C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAKxC,UAAjB,EAA6B;AAC3BuC,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTjC,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAN,UAAAA,OAAO,CAAC4B,IAAR,CAAalE,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AAEAoC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAlC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAME,CANF;AAQAjC,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAC4B,IAAnB,GACA,CAACb,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAOApB,UAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAhD,UAAAA,aAAa,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuBrD,GAAvB;;AACA+C,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAR,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAvB,UAAAA,KAAK,IAAI,CAAT;AACD,SAzCD,MAyCO;AACL,eAAKoB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIElD,KAJF,EAKEqE,QALF,EAME,KAAKxB,aANP;AAQAR,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAMAa,UAAAA,IAAI,GAAG,CAAC,CAAR;;AAGA9E,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuB5C,KAAvB;;AACA+C,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB4B,IAAhB;AACD;;AACD,aAAOvB,KAAP;AACD;;;WACD,iBACEZ,OADF,EAEEsB,KAFF,EAGET,IAHF,EAIEE,GAJF,EAKEE,IALF,EAME;AACA,UAAIL,KAAK,GAAG,CAAZ;AACA,UAAMV,OAAO,GAAGF,OAAO,CAACE,OAAxB;AACA,UAAMD,SAAS,GAAGD,OAAO,CAACC,SAA1B;AACA,UAAME,OAAO,GAAGH,OAAO,CAACG,OAAxB;AACA,UAAMoB,SAAS,GAAG,KAAK3B,GAAL,KAAa,QAA/B;AACA,UAAM4B,SAAS,GAAG,KAAK7B,IAAL,KAAc,OAAhC;AACA,UAAM8B,OAAO,GAAG,2BAAa,CAACV,GAAG,CAAC,CAAD,CAAJ,EAASA,GAAG,CAAC,CAAD,CAAZ,CAAb,CAAhB;AACA,UAAMW,QAAQ,GAAG,2BAAa,CAACb,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;AACAnC,MAAAA,SAAS,CAAClB,KAAD,EAAQiE,OAAR,EAAiBC,QAAjB,CAAT;AACA,UAAIC,eAAe,GAAG,CAAtB;;AACA,UAAI,KAAK5B,IAAT,EAAe;AACb4B,QAAAA,eAAe,GAAG,KAAKC,mBAAL,CAAyBH,OAAzB,EAAkCC,QAAlC,CAAlB;AACA,aAAKhB,aAAL,IAAsBiB,eAAtB;AACD;;AAED,UAAI,CAAC,KAAKlB,MAAV,EAAkB;AAChB,aAAKA,MAAL,GAAcpD,eAAKC,MAAL,EAAd;AACAgB,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;AACD;;AACD,UAAI,CAAC,KAAKgD,OAAV,EAAmB;AACjB,aAAKA,OAAL,GAAe,IAAf;;AAGA,YAAIe,SAAJ,EAAe;AAEb,cAAMM,IAAI,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,IAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKY,GAAL,CAAS4D,IAAT,EAAe,KAAKpB,MAApB,EAA4BjD,KAA5B;;AACAH,yBAAKY,GAAL,CAAS6D,IAAT,EAAe,KAAKrB,MAApB,EAA4BjD,KAA5B;;AACA2C,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,IAAI,CAAC,CAAD,CAAjB,EAAsBA,IAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,CAAC,KAAK7B,SALR,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACElB,IAAI,CAAC,CAAD,CADN,EAEEA,IAAI,CAAC,CAAD,CAFN,EAGE,CAHF,EAIE,KAAKH,aAAL,GAAqBiB,eAJvB,EAKE,KAAK7B,SALP,EAME,CANF;AAWD,SA3BD,MA2BO;AACL,eAAKkC,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEU,IAHF,EAIE,KAAKJ,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aAAL,GAAqBiB,eANvB;AAQD;AACF;;AAEDzB,MAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;;AAEA,UAAI,CAACL,IAAL,EAAW;AACT3C,QAAAA,aAAa,CAAC,KAAKmC,MAAN,EAAcjD,KAAd,CAAb;;AACA,YAAI+D,SAAJ,EAAe;AAGb,cAAMM,KAAI,GAAGxE,eAAKC,MAAL,EAAb;;AACA,cAAMwE,KAAI,GAAGzE,eAAKC,MAAL,EAAb;;AACAD,yBAAKwB,GAAL,CAASiD,KAAT,EAAetE,KAAf,EAAsB,KAAKiD,MAA3B;;AACApD,yBAAKY,GAAL,CAAS4D,KAAT,EAAerE,KAAf,EAAsB,KAAKiD,MAA3B;;AAEAN,UAAAA,OAAO,CAAC4B,IAAR,CAAaD,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA3B,UAAAA,OAAO,CAAC4B,IAAR,CAAaF,KAAI,CAAC,CAAD,CAAjB,EAAsBA,KAAI,CAAC,CAAD,CAA1B,EAA+B,CAA/B;AACA5B,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQAG,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SALP,EAME,CANF;AAQD,SA1BD,MA0BO;AACL,eAAKkC,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIE,KAAKN,MAJP,EAKE,KAAKX,SALP,EAME,KAAKY,aANP;AAQD;;AAGDR,QAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAKAV,QAAAA,KAAK,IAAI,CAAT;AACD,OA9CD,MA8CO;AACL,YAAM2B,QAAQ,GAAG,2BAAa,CAACtB,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAd,CAAb,CAAjB;;AACA,YAAInC,YAAY,CAAC2C,OAAD,EAAUc,QAAV,CAAhB,EAAqC;AACnClF,yBAAKY,GAAL,CACEsE,QADF,EAEEd,OAFF,EAGEpE,eAAKa,SAAL,CAAeqE,QAAf,EAAyBlF,eAAK4E,QAAL,CAAcM,QAAd,EAAwBd,OAAxB,EAAiCC,QAAjC,CAAzB,CAHF;AAKD;;AACDhD,QAAAA,SAAS,CAACjB,KAAD,EAAQ8E,QAAR,EAAkBd,OAAlB,CAAT;;AAIA,6BAA0B9D,YAAY,CACpCD,OADoC,EAEpCL,eAAKC,MAAL,EAFoC,EAGpCE,KAHoC,EAIpCC,KAJoC,EAKpC,KAAKqC,SAL+B,CAAtC;AAAA;AAAA,YAAOoC,QAAP;AAAA,YAAiBrE,KAAjB;;AAUA,YAAIsE,IAAI,GAAG9E,eAAKgB,GAAL,CAASX,OAAT,EAAkB,KAAK+C,MAAvB,IAAiC,CAAjC,GAAqC,CAAC,CAAtC,GAA0C,CAArD;AACA,YAAI2B,KAAK,GAAGZ,SAAZ;;AACA,YAAI,CAACY,KAAD,IAAU,KAAKzC,IAAL,KAAc,OAA5B,EAAqC;AACnC,cAAM0C,KAAK,GAAGH,QAAd;;AACA,cAAIG,KAAK,GAAG,KAAKxC,UAAjB,EAA6B;AAC3BuC,YAAAA,KAAK,GAAG,IAAR;AACD;AACF;;AAED,YAAIA,KAAJ,EAAW;AACTjC,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAN,UAAAA,OAAO,CAAC4B,IAAR,CAAalE,KAAK,CAAC,CAAD,CAAlB,EAAuBA,KAAK,CAAC,CAAD,CAA5B,EAAiC,CAAjC;AACAoC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAlC,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,KAAKZ,SAAL,GAAiBqC,IALnB,EAME,CANF;AAQAjC,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAC4B,IAAnB,GACA,CAACb,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAOApB,UAAAA,OAAO,CAAC6B,IAAR,CAAaT,KAAK,GAAG,CAArB,EAAwBA,KAAK,GAAG,CAAhC,EAAmCA,KAAK,GAAG,CAA3C;AAEAhD,UAAAA,aAAa,CAAClB,GAAD,EAAMK,KAAN,CAAb;;AACAJ,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuBrD,GAAvB;;AACA+C,UAAAA,OAAO,CAAC4B,IAAR,CAAa,KAAKtB,MAAL,CAAY,CAAZ,CAAb,EAA6B,KAAKA,MAAL,CAAY,CAAZ,CAA7B,EAA6C,CAA7C;AACAR,UAAAA,SAAS,CAAC8B,IAAV,CACEhB,GAAG,CAAC,CAAD,CADL,EAEEA,GAAG,CAAC,CAAD,CAFL,EAGE,CAHF,EAIE,KAAKL,aAJP,EAKE,CAAC,KAAKZ,SAAN,GAAkBqC,IALpB,EAME,CANF;AAQAvB,UAAAA,KAAK,IAAI,CAAT;AACD,SAxCD,MAwCO;AACL,eAAKoB,UAAL,CACE/B,SADF,EAEEE,OAFF,EAGEY,GAHF,EAIElD,KAJF,EAKEqE,QALF,EAME,KAAKxB,aANP;AAQAR,UAAAA,OAAO,CAAC6B,IAAR,OAAA7B,OAAO,mCACD,KAAKK,QAAL,KAAkB,CAAlB,GACA,CAACe,KAAD,EAAQA,KAAK,GAAG,CAAhB,EAAmBA,KAAK,GAAG,CAA3B,CADA,GAEA,CAACA,KAAK,GAAG,CAAT,EAAYA,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAHC,EAAP;AAMAa,UAAAA,IAAI,GAAG,CAAC,CAAR;;AAGA9E,yBAAKiF,IAAL,CAAU,KAAK7B,MAAf,EAAuB5C,KAAvB;;AACA+C,UAAAA,KAAK,IAAI,CAAT;AACD;;AACD,aAAKL,QAAL,GAAgB4B,IAAhB;AACD;;AACD,aAAOvB,KAAP;AACD;;;WACD,oBACEX,SADF,EAEEE,OAFF,EAGEqC,KAHF,EAIE/B,MAJF,EAKEX,SALF,EAME2C,aANF,EAOE;AACAtC,MAAAA,OAAO,CAAC4B,IAAR,CAAatB,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAN,MAAAA,OAAO,CAAC4B,IAAR,CAAatB,MAAM,CAAC,CAAD,CAAnB,EAAwBA,MAAM,CAAC,CAAD,CAA9B,EAAmC,CAAnC;AACAR,MAAAA,SAAS,CAAC8B,IAAV,CAAeS,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,EAAmC,CAAnC,EAAsCC,aAAtC,EAAqD,CAAC3C,SAAtD,EAAiE,CAAjE;AACAG,MAAAA,SAAS,CAAC8B,IAAV,CAAeS,KAAK,CAAC,CAAD,CAApB,EAAyBA,KAAK,CAAC,CAAD,CAA9B,EAAmC,CAAnC,EAAsCC,aAAtC,EAAqD3C,SAArD,EAAgE,CAAhE;AACD;;;WACD,6BAA4B4C,EAA5B,EAAsCC,EAAtC,EAAgD;AAC9C,UAAMC,EAAE,GAAGD,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,UAAMG,EAAE,GAAGF,EAAE,CAAC,CAAD,CAAF,GAAQD,EAAE,CAAC,CAAD,CAArB;AACA,aAAOI,IAAI,CAACC,IAAL,CAAUH,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;AACD","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec2;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec2;\n const originCur = originPoints[i] as vec2;\n\n const next = i < points.length - 1 ? points[i + 1] : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n last,\n cur,\n next as vec2,\n originLast,\n originCur,\n originNext as vec2,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec2;\n const cur = points[i] as vec2;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec2);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec2,\n cur: vec2,\n next: vec2,\n originLast: vec2,\n originCur: vec2,\n originNext: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n direction(lineA, cur, last);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n if (isPointEqual(cur, next)) {\n vec2.add(\n next,\n cur,\n vec2.normalize(next, vec2.subtract(next, cur, last)),\n );\n }\n direction(lineB, next, cur);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec2,\n cur: vec2,\n next: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n 0,\n );\n positions.push(\n last[0],\n last[1],\n 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n 0,\n );\n\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness,\n 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n this.thickness * flip,\n 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n 0,\n this.totalDistance,\n -this.thickness * flip,\n 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec2, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(point[0], point[1], 0, distanceRadio, -thickness, 0);\n positions.push(point[0], point[1], 0, distanceRadio, thickness, 0);\n }\n private lineSegmentDistance(b1: vec2, a1: vec2) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/extrude_polyline.ts"],"names":["tmp","vec2","create","capEnd","lineA","lineB","tangent","computeMiter","lineTangent","miter","start","end","halfThick","add","normalize","fromValues","tmpvec","dot","computeNormal","out","dir","set","direction","a","b","sub","isPointEqual","getArrayUnique","matrix","map","Map","i","length","key","toString","get","splice","ExtrudePolyline","opts","join","cap","miterLimit","thickness","dash","complex","positions","indices","normals","startIndex","points","originPoints","lastFlip","started","normal","totalDistance","total","count","last","originLast","cur","originCur","next","originNext","amt","segment_gaode2","segment","index","capSquare","joinBevel","flatCur","flatLast","segmentDistance","lineSegmentDistance","out1","out2","push","extrusions","subtract","miterLen","flip","bevel","limit","copy","flatNext","point","distanceRadio","b1","a1","dx","dy","Math","sqrt"],"mappings":"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","sourcesContent":["import { aProjectFlat } from '@antv/l7-utils';\nimport { vec2, vec3 } from 'gl-matrix';\nconst tmp = vec2.create();\nconst capEnd = vec2.create();\nconst lineA = vec2.create();\nconst lineB = vec2.create();\nconst tangent = vec2.create();\n\nexport function computeMiter(\n lineTangent: vec2,\n miter: vec2,\n start: vec2,\n end: vec2,\n halfThick: number,\n): [number, vec2] {\n vec2.add(lineTangent, start, end);\n vec2.normalize(lineTangent, lineTangent);\n miter = vec2.fromValues(-lineTangent[1], lineTangent[0]);\n const tmpvec = vec2.fromValues(-start[1], start[0]);\n return [halfThick / vec2.dot(miter, tmpvec), miter];\n}\nexport function computeNormal(out: vec2, dir: vec2) {\n return vec2.set(out, -dir[1], dir[0]);\n}\n\nexport function direction(out: vec2, a: vec2, b: vec2) {\n vec2.sub(out, a, b);\n vec2.normalize(out, out);\n return out;\n}\n\nfunction isPointEqual(a: vec2, b: vec2) {\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction getArrayUnique(matrix: number[][]) {\n const map = new Map();\n for (let i = 0; i < matrix.length; i++) {\n const key = matrix[0].toString() + '-' + matrix[1].toString();\n if (map.get(key)) {\n matrix.splice(i, 1);\n i++;\n } else {\n map.set(key, key);\n }\n }\n return matrix;\n}\n\nexport interface IExtrudeLineOption {\n join: string;\n cap: string;\n dash: boolean;\n closed: boolean;\n indexOffset: number;\n miterLimit: number;\n thickness: number;\n}\nexport default class ExtrudePolyline {\n public complex: {\n positions: number[];\n indices: number[];\n normals: number[];\n startIndex: number;\n };\n private join: string;\n private cap: string;\n private miterLimit: number;\n private thickness: number;\n private normal: vec2 | null;\n private lastFlip: number = -1;\n private miter: vec2 = vec2.fromValues(0, 0);\n private started: boolean = false;\n private dash: boolean = false;\n private totalDistance: number = 0;\n\n constructor(opts: Partial<IExtrudeLineOption> = {}) {\n this.join = opts.join || 'miter';\n this.cap = opts.cap || 'butt';\n this.miterLimit = opts.miterLimit || 10;\n this.thickness = opts.thickness || 1;\n this.dash = opts.dash || false;\n this.complex = {\n positions: [],\n indices: [],\n normals: [],\n startIndex: 0,\n };\n }\n\n public extrude_gaode2(points: number[][], originPoints: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const originLast = originPoints[i - 1] as vec2;\n\n const cur = points[i] as vec3;\n const originCur = originPoints[i] as vec2;\n\n const next = i < points.length - 1 ? points[i + 1] : null;\n const originNext =\n i < originPoints.length - 1 ? originPoints[i + 1] : null;\n\n const amt = this.segment_gaode2(\n complex,\n count,\n last,\n cur,\n next as vec3,\n originLast,\n originCur,\n originNext as vec2,\n );\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n public extrude(points: number[][]) {\n const complex = this.complex;\n if (points.length <= 1) {\n return complex;\n }\n this.lastFlip = -1;\n this.started = false;\n this.normal = null;\n this.totalDistance = 0;\n // 去除数组里重复的点\n // points = getArrayUnique(points);\n const total = points.length;\n let count = complex.startIndex;\n for (let i = 1; i < total; i++) {\n const last = points[i - 1] as vec3;\n const cur = points[i] as vec3;\n const next = i < points.length - 1 ? points[i + 1] : null;\n const amt = this.segment(complex, count, last, cur, next as vec3);\n count += amt;\n }\n if (this.dash) {\n for (let i = 0; i < complex.positions.length / 6; i++) {\n complex.positions[i * 6 + 5] = this.totalDistance;\n }\n }\n complex.startIndex = complex.positions.length / 6;\n return complex;\n }\n private segment_gaode2(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n originLast: vec2,\n originCur: vec2,\n originNext: vec2,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([originCur[0], originCur[1]]) as [\n number,\n number,\n ];\n const flatLast = aProjectFlat([originLast[0], originLast[1]]) as [\n number,\n number,\n ];\n direction(lineA, cur as vec2, last as vec2);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n if (isPointEqual(cur as vec2, next as vec2)) {\n vec2.add(\n next as vec2,\n cur as vec2,\n vec2.normalize(\n next as vec2,\n vec2.subtract(next as vec2, cur as vec2, last as vec2),\n ),\n );\n }\n direction(lineB, next as vec2, cur as vec2);\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private segment(\n complex: any,\n index: number,\n last: vec3,\n cur: vec3,\n next: vec3,\n ) {\n let count = 0;\n const indices = complex.indices;\n const positions = complex.positions;\n const normals = complex.normals;\n const capSquare = this.cap === 'square';\n const joinBevel = this.join === 'bevel';\n const flatCur = aProjectFlat([cur[0], cur[1]]) as [number, number];\n const flatLast = aProjectFlat([last[0], last[1]]) as [number, number];\n direction(lineA, flatCur, flatLast);\n let segmentDistance = 0;\n if (this.dash) {\n segmentDistance = this.lineSegmentDistance(flatCur, flatLast);\n this.totalDistance += segmentDistance;\n }\n\n if (!this.normal) {\n this.normal = vec2.create();\n computeNormal(this.normal, lineA);\n }\n if (!this.started) {\n this.started = true;\n\n // if the end cap is type square, we can just push the verts out a bit\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, last, lineA, -this.thickness);\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.add(out1, this.normal, lineA);\n vec2.add(out2, this.normal, lineA);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n -this.thickness,\n last[2] | 0,\n );\n positions.push(\n last[0],\n last[1],\n last[2] | 0,\n this.totalDistance - segmentDistance,\n this.thickness,\n last[2] | 0,\n );\n\n // this.extrusions(positions, normals, last, out, this.thickness);\n // last = capEnd;\n } else {\n this.extrusions(\n positions,\n normals,\n last,\n this.normal,\n this.thickness,\n this.totalDistance - segmentDistance,\n );\n }\n }\n\n indices.push(index + 0, index + 1, index + 2);\n\n if (!next) {\n computeNormal(this.normal, lineA);\n if (capSquare) {\n // vec2.scaleAndAdd(capEnd, cur, lineA, this.thickness);\n // cur = capEnd;\n const out1 = vec2.create();\n const out2 = vec2.create();\n vec2.sub(out2, lineA, this.normal);\n vec2.add(out1, lineA, this.normal);\n // this.extrusions(positions, normals, cur, out, this.thickness);\n normals.push(out2[0], out2[1], 0);\n normals.push(out1[0], out1[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness,\n cur[2] | 0,\n );\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n this.normal,\n this.thickness,\n this.totalDistance,\n );\n }\n\n // this.extrusions(positions, normals, cur, this.normal, this.thickness);\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n count += 2;\n } else {\n const flatNext = aProjectFlat([next[0], next[1]]) as [number, number];\n if (isPointEqual(flatCur, flatNext)) {\n vec2.add(\n flatNext,\n flatCur,\n vec2.normalize(flatNext, vec2.subtract(flatNext, flatCur, flatLast)),\n );\n }\n direction(lineB, flatNext, flatCur);\n\n // stores tangent & miter\n\n const [miterLen, miter] = computeMiter(\n tangent,\n vec2.create(),\n lineA,\n lineB,\n this.thickness,\n );\n // normal(tmp, lineA)\n\n // get orientation\n let flip = vec2.dot(tangent, this.normal) < 0 ? -1 : 1;\n let bevel = joinBevel;\n if (!bevel && this.join === 'miter') {\n const limit = miterLen;\n if (limit > this.miterLimit) {\n bevel = true;\n }\n }\n\n if (bevel) {\n normals.push(this.normal[0], this.normal[1], 0);\n normals.push(miter[0], miter[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n this.thickness * flip,\n cur[2] | 0,\n );\n indices.push(\n ...(this.lastFlip !== -flip\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n // now add the bevel triangle\n indices.push(index + 2, index + 3, index + 4);\n\n computeNormal(tmp, lineB);\n vec2.copy(this.normal, tmp); // store normal for next round\n normals.push(this.normal[0], this.normal[1], 0);\n positions.push(\n cur[0],\n cur[1],\n cur[2] | 0,\n this.totalDistance,\n -this.thickness * flip,\n cur[2] | 0,\n );\n count += 3;\n } else {\n this.extrusions(\n positions,\n normals,\n cur,\n miter,\n miterLen,\n this.totalDistance,\n );\n indices.push(\n ...(this.lastFlip === 1\n ? [index, index + 2, index + 3]\n : [index + 2, index + 1, index + 3]),\n );\n\n flip = -1;\n\n // the miter is now the normal for our next join\n vec2.copy(this.normal, miter);\n count += 2;\n }\n this.lastFlip = flip;\n }\n return count;\n }\n private extrusions(\n positions: number[],\n normals: number[],\n point: vec3, // 顶点\n normal: vec2, // 法向量\n thickness: number, // 高度\n distanceRadio: number,\n ) {\n normals.push(normal[0], normal[1], 0);\n normals.push(normal[0], normal[1], 0);\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n -thickness,\n point[2] | 0,\n );\n positions.push(\n point[0],\n point[1],\n point[2] | 0,\n distanceRadio,\n thickness,\n point[2] | 0,\n );\n }\n private lineSegmentDistance(b1: vec2, a1: vec2) {\n const dx = a1[0] - b1[0];\n const dy = a1[1] - b1[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n}\n"],"file":"extrude_polyline.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antv/l7-layers",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.58",
|
|
4
4
|
"description": "L7's collection of built-in layers",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@antv/geo-coord": "^1.0.8",
|
|
27
|
-
"@antv/l7-core": "^2.5.
|
|
28
|
-
"@antv/l7-source": "^2.5.
|
|
29
|
-
"@antv/l7-utils": "^2.5.
|
|
27
|
+
"@antv/l7-core": "^2.5.58",
|
|
28
|
+
"@antv/l7-source": "^2.5.58",
|
|
29
|
+
"@antv/l7-utils": "^2.5.58",
|
|
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": "3bbe9c10c23d6fafdd03ef0bb6a22fff131d20b1",
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
}
|