@webviz/subsurface-viewer 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SubsurfaceViewer.js.map +1 -1
- package/dist/components/DistanceScale.js.map +1 -1
- package/dist/components/InfoCard.js.map +1 -1
- package/dist/components/Map.js +2 -2
- package/dist/components/Map.js.map +1 -1
- package/dist/components/StatusIndicator.js.map +1 -1
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -1
- package/dist/layers/axes/axesLayer.js.map +1 -1
- package/dist/layers/axes2d/axes2DLayer.js +4 -4
- package/dist/layers/axes2d/axes2DLayer.js.map +1 -1
- package/dist/layers/colormap/colormapLayer.js.map +1 -1
- package/dist/layers/drawing/drawingLayer.js.map +1 -1
- package/dist/layers/grid3d/grid3dLayer.js.map +1 -1
- package/dist/layers/grid3d/privateGrid3dLayer.js.map +1 -1
- package/dist/layers/grid3d/webworker.js +2 -2
- package/dist/layers/grid3d/webworker.js.map +1 -1
- package/dist/layers/hillshading2d/hillshading2dLayer.js.map +1 -1
- package/dist/layers/intersection/unfoldedGeoJsonLayer.js.map +1 -1
- package/dist/layers/map/mapLayer.js.map +1 -1
- package/dist/layers/map/privateMapLayer.js.map +1 -1
- package/dist/layers/map/webworker.js.map +1 -1
- package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -1
- package/dist/layers/piechart/pieChartLayer.js +1 -1
- package/dist/layers/piechart/pieChartLayer.js.map +1 -1
- package/dist/layers/points/pointsLayer.js.map +1 -1
- package/dist/layers/points/privatePointsLayer.js.map +1 -1
- package/dist/layers/polylines/path-layer-fragment.glsl.d.ts +2 -0
- package/dist/layers/polylines/path-layer-fragment.glsl.js +60 -0
- package/dist/layers/polylines/path-layer-fragment.glsl.js.map +1 -0
- package/dist/layers/polylines/path-layer-vertex.glsl.d.ts +2 -0
- package/dist/layers/polylines/path-layer-vertex.glsl.js +256 -0
- package/dist/layers/polylines/path-layer-vertex.glsl.js.map +1 -0
- package/dist/layers/polylines/polylinesLayer.d.ts +9 -5
- package/dist/layers/polylines/polylinesLayer.js +45 -26
- package/dist/layers/polylines/polylinesLayer.js.map +1 -1
- package/dist/layers/polylines/privatePolylinesLayer.d.ts +28 -0
- package/dist/layers/polylines/privatePolylinesLayer.js +28 -0
- package/dist/layers/polylines/privatePolylinesLayer.js.map +1 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js.map +1 -1
- package/dist/layers/shader_modules/decoder.js.map +1 -1
- package/dist/layers/triangle/privateTriangleLayer.js.map +1 -1
- package/dist/layers/triangle/triangleLayer.js.map +1 -1
- package/dist/layers/triangle/webworker.js +2 -2
- package/dist/layers/triangle/webworker.js.map +1 -1
- package/dist/layers/utils/layerTools.js.map +1 -1
- package/dist/layers/utils/propertyMapTools.js.map +1 -1
- package/dist/layers/well_markers/wellMarkersLayer.js.map +1 -1
- package/dist/layers/wells/utils/spline.js.map +1 -1
- package/dist/layers/wells/wellsLayer.js +1 -1
- package/dist/layers/wells/wellsLayer.js.map +1 -1
- package/dist/storybook/examples/__image_snapshots__/subsurfaceviewer-examples--mixed-layer-definitions.png +0 -0
- package/dist/storybook/layers/__image_snapshots__/subsurfaceviewer-points-layer--small-points-layer-typed-array-input.png +0 -0
- package/dist/storybook/layers/__image_snapshots__/subsurfaceviewer-points-layer--small-points-layer.png +0 -0
- package/dist/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--small-polylines-layer.png +0 -0
- package/dist/utils/BoundingBox3D.js.map +1 -1
- package/dist/utils/camera.js.map +1 -1
- package/dist/utils/configTools.js.map +1 -1
- package/dist/utils/fit-bounds.js.map +1 -1
- package/dist/utils/measurement.js.map +1 -1
- package/dist/viewports/intersectionViewport.js.map +1 -1
- package/dist/views/intersectionView.js +2 -1
- package/dist/views/intersectionView.js.map +1 -1
- package/package.json +1 -1
- package/dist/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--huge-polylines-layer.png +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Copyright (c) 2015 - 2017 Uber Technologies, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
// furnished to do so, subject to the following conditions:
|
|
9
|
+
//
|
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
|
11
|
+
// all copies or substantial portions of the Software.
|
|
12
|
+
//
|
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
// THE SOFTWARE.
|
|
20
|
+
export default `\
|
|
21
|
+
#version 300 es
|
|
22
|
+
#define SHADER_NAME path-layer-fragment-shader
|
|
23
|
+
|
|
24
|
+
precision highp float;
|
|
25
|
+
|
|
26
|
+
uniform float miterLimit;
|
|
27
|
+
|
|
28
|
+
in vec4 vColor;
|
|
29
|
+
in vec2 vCornerOffset;
|
|
30
|
+
in float vMiterLength;
|
|
31
|
+
/*
|
|
32
|
+
* vPathPosition represents the relative coordinates of the current fragment on the path segment.
|
|
33
|
+
* vPathPosition.x - position along the width of the path, between [-1, 1]. 0 is the center line.
|
|
34
|
+
* vPathPosition.y - position along the length of the path, between [0, L / width].
|
|
35
|
+
*/
|
|
36
|
+
in vec2 vPathPosition;
|
|
37
|
+
in float vPathLength;
|
|
38
|
+
in float vJointType;
|
|
39
|
+
|
|
40
|
+
out vec4 fragColor;
|
|
41
|
+
|
|
42
|
+
void main(void) {
|
|
43
|
+
geometry.uv = vPathPosition;
|
|
44
|
+
|
|
45
|
+
if (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {
|
|
46
|
+
// if joint is rounded, test distance from the corner
|
|
47
|
+
if (vJointType > 0.5 && length(vCornerOffset) > 1.0) {
|
|
48
|
+
discard;
|
|
49
|
+
}
|
|
50
|
+
// trim miter
|
|
51
|
+
if (vJointType < 0.5 && vMiterLength > miterLimit + 1.0) {
|
|
52
|
+
discard;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
fragColor = vColor;
|
|
56
|
+
|
|
57
|
+
DECKGL_FILTER_COLOR(fragColor, geometry);
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
//# sourceMappingURL=path-layer-fragment.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-layer-fragment.glsl.js","sourceRoot":"","sources":["../../../src/layers/polylines/path-layer-fragment.glsl.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,6EAA6E;AAC7E,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,gBAAgB;AAEhB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCd,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: "#version 300 es\n#define SHADER_NAME path-layer-vertex-shader\n\nin vec2 positions;\n\nin float instanceTypes;\nin vec3 instanceStartPositions;\nin vec3 instanceEndPositions;\nin vec3 instanceLeftPositions;\nin vec3 instanceRightPositions;\nin vec3 instanceLeftPositions64Low;\nin vec3 instanceStartPositions64Low;\nin vec3 instanceEndPositions64Low;\nin vec3 instanceRightPositions64Low;\nin float instanceStrokeWidths;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\n\nuniform float widthScale;\nuniform float widthMinPixels;\nuniform float widthMaxPixels;\nuniform float jointType;\nuniform float capType;\nuniform float miterLimit;\nuniform bool billboard;\nuniform int widthUnits;\n\nuniform float opacity;\nuniform bool ZIncreasingDownwards;\n\nout vec4 vColor;\nout vec2 vCornerOffset;\nout float vMiterLength;\nout vec2 vPathPosition;\nout float vPathLength;\nout float vJointType;\n\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\n\nfloat flipIfTrue(bool flag) {\n return -(float(flag) * 2. - 1.);\n}\n\n// calculate line join positions\nvec3 getLineJoinOffset(\n vec3 prevPoint, vec3 currPoint, vec3 nextPoint,\n vec2 width\n) {\n bool isEnd = positions.x > 0.0;\n // side of the segment - -1: left, 0: center, 1: right\n float sideOfPath = positions.y;\n float isJoint = float(sideOfPath == 0.0);\n\n vec3 deltaA3 = (currPoint - prevPoint);\n vec3 deltaB3 = (nextPoint - currPoint);\n\n mat3 rotationMatrix;\n bool needsRotation = !billboard && project_needs_rotation(currPoint, rotationMatrix);\n if (needsRotation) {\n deltaA3 = deltaA3 * rotationMatrix;\n deltaB3 = deltaB3 * rotationMatrix;\n }\n vec2 deltaA = deltaA3.xy / width;\n vec2 deltaB = deltaB3.xy / width;\n\n float lenA = length(deltaA);\n float lenB = length(deltaB);\n\n vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\n vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\n\n vec2 perpA = vec2(-dirA.y, dirA.x);\n vec2 perpB = vec2(-dirB.y, dirB.x);\n\n // tangent of the corner\n vec2 tangent = dirA + dirB;\n tangent = length(tangent) > 0. ? normalize(tangent) : perpA;\n // direction of the corner\n vec2 miterVec = vec2(-tangent.y, tangent.x);\n // direction of the segment\n vec2 dir = isEnd ? dirA : dirB;\n // direction of the extrusion\n vec2 perp = isEnd ? perpA : perpB;\n // length of the segment\n float L = isEnd ? lenA : lenB;\n\n // A = angle of the corner\n float sinHalfA = abs(dot(miterVec, perp));\n float cosHalfA = abs(dot(dirA, miterVec));\n\n // -1: right, 1: left\n float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\n\n // relative position to the corner:\n // -1: inside (smaller side of the angle)\n // 0: center\n // 1: outside (bigger side of the angle)\n float cornerPosition = sideOfPath * turnDirection;\n\n float miterSize = 1.0 / max(sinHalfA, EPSILON);\n // trim if inside corner extends further than the line segment\n miterSize = mix(\n min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\n miterSize,\n step(0.0, cornerPosition)\n );\n\n vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n * (sideOfPath + isJoint * turnDirection);\n\n // special treatment for start cap and end cap\n bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\n bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\n bool isCap = isStartCap || isEndCap;\n\n // extend out a triangle to envelope the round cap\n if (isCap) {\n offsetVec = mix(perp * sideOfPath, dir * capType * 4.0 * flipIfTrue(isStartCap), isJoint);\n vJointType = capType;\n } else {\n vJointType = jointType;\n }\n\n // Generate variables for fragment shader\n vPathLength = L;\n vCornerOffset = offsetVec;\n vMiterLength = dot(vCornerOffset, miterVec * turnDirection);\n vMiterLength = isCap ? isJoint : vMiterLength;\n\n vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\n vPathPosition = vec2(\n dot(offsetFromStartOfPath, perp),\n dot(offsetFromStartOfPath, dir)\n );\n geometry.uv = vPathPosition;\n\n float isValid = step(instanceTypes, 3.5);\n vec3 offset = vec3(offsetVec * width * isValid, 0.0);\n\n if (needsRotation) {\n offset = rotationMatrix * offset;\n }\n return offset;\n}\n\n// In clipspace extrusion, if a line extends behind the camera, clip it to avoid visual artifacts\nvoid clipLine(inout vec4 position, vec4 refPosition) {\n if (position.w < EPSILON) {\n float r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\n position = refPosition + (position - refPosition) * r;\n }\n}\n\nvoid main() {\n geometry.pickingColor = instancePickingColors;\n\n vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);\n vec3 leftPosition = instanceLeftPositions;\n vec3 startPosition = instanceStartPositions;\n vec3 leftPos64Low = instanceLeftPositions64Low;\n vec3 startPos64Low = instanceStartPositions64Low;\n\n vec3 rightposition = instanceRightPositions;\n vec3 endPosition = instanceEndPositions;\n vec3 rightPos64Low = instanceRightPositions64Low;\n vec3 endPos64Low = instanceEndPositions64Low;\n\n if(ZIncreasingDownwards) {\n leftPosition.z *= -1.0;\n startPosition.z *= -1.0;\n leftPos64Low.z *= -1.0;\n startPos64Low.z *= -1.0;\n rightposition.z *= -1.0;\n endPosition.z *= -1.0;\n rightPos64Low.z *= -1.0;\n endPos64Low.z *= -1.0; \n }\n\n float isEnd = positions.x;\n\n vec3 prevPosition = mix(leftPosition, startPosition, isEnd);\n vec3 prevPosition64Low = mix(leftPos64Low, startPos64Low, isEnd);\n\n vec3 currPosition = mix(startPosition, endPosition, isEnd);\n vec3 currPosition64Low = mix(startPos64Low, endPos64Low, isEnd);\n\n vec3 nextPosition = mix(endPosition, rightposition, isEnd);\n vec3 nextPosition64Low = mix(endPos64Low, rightPos64Low, isEnd);\n\n geometry.worldPosition = currPosition;\n vec2 widthPixels = vec2(clamp(\n project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),\n widthMinPixels, widthMaxPixels) / 2.0);\n vec3 width;\n\n if (billboard) {\n // Extrude in clipspace\n vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\n vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\n vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\n\n clipLine(prevPositionScreen, currPositionScreen);\n clipLine(nextPositionScreen, currPositionScreen);\n clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\n\n width = vec3(widthPixels, 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec3 offset = getLineJoinOffset(\n prevPositionScreen.xyz / prevPositionScreen.w,\n currPositionScreen.xyz / currPositionScreen.w,\n nextPositionScreen.xyz / nextPositionScreen.w,\n project_pixel_size_to_clipspace(width.xy)\n );\n\n DECKGL_FILTER_GL_POSITION(currPositionScreen, geometry);\n gl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w);\n } else {\n // Extrude in commonspace\n prevPosition = project_position(prevPosition, prevPosition64Low);\n currPosition = project_position(currPosition, currPosition64Low);\n nextPosition = project_position(nextPosition, nextPosition64Low);\n\n width = vec3(project_pixel_size(widthPixels), 0.0);\n DECKGL_FILTER_SIZE(width, geometry);\n\n vec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy);\n geometry.position = vec4(currPosition + offset, 1.0);\n gl_Position = project_common_position_to_clipspace(geometry.position);\n DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n }\n DECKGL_FILTER_COLOR(vColor, geometry);\n}\n";
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
// Copyright (c) 2015 - 2017 Uber Technologies, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
// furnished to do so, subject to the following conditions:
|
|
9
|
+
//
|
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
|
11
|
+
// all copies or substantial portions of the Software.
|
|
12
|
+
//
|
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
// THE SOFTWARE.
|
|
20
|
+
export default `\
|
|
21
|
+
#version 300 es
|
|
22
|
+
#define SHADER_NAME path-layer-vertex-shader
|
|
23
|
+
|
|
24
|
+
in vec2 positions;
|
|
25
|
+
|
|
26
|
+
in float instanceTypes;
|
|
27
|
+
in vec3 instanceStartPositions;
|
|
28
|
+
in vec3 instanceEndPositions;
|
|
29
|
+
in vec3 instanceLeftPositions;
|
|
30
|
+
in vec3 instanceRightPositions;
|
|
31
|
+
in vec3 instanceLeftPositions64Low;
|
|
32
|
+
in vec3 instanceStartPositions64Low;
|
|
33
|
+
in vec3 instanceEndPositions64Low;
|
|
34
|
+
in vec3 instanceRightPositions64Low;
|
|
35
|
+
in float instanceStrokeWidths;
|
|
36
|
+
in vec4 instanceColors;
|
|
37
|
+
in vec3 instancePickingColors;
|
|
38
|
+
|
|
39
|
+
uniform float widthScale;
|
|
40
|
+
uniform float widthMinPixels;
|
|
41
|
+
uniform float widthMaxPixels;
|
|
42
|
+
uniform float jointType;
|
|
43
|
+
uniform float capType;
|
|
44
|
+
uniform float miterLimit;
|
|
45
|
+
uniform bool billboard;
|
|
46
|
+
uniform int widthUnits;
|
|
47
|
+
|
|
48
|
+
uniform float opacity;
|
|
49
|
+
uniform bool ZIncreasingDownwards;
|
|
50
|
+
|
|
51
|
+
out vec4 vColor;
|
|
52
|
+
out vec2 vCornerOffset;
|
|
53
|
+
out float vMiterLength;
|
|
54
|
+
out vec2 vPathPosition;
|
|
55
|
+
out float vPathLength;
|
|
56
|
+
out float vJointType;
|
|
57
|
+
|
|
58
|
+
const float EPSILON = 0.001;
|
|
59
|
+
const vec3 ZERO_OFFSET = vec3(0.0);
|
|
60
|
+
|
|
61
|
+
float flipIfTrue(bool flag) {
|
|
62
|
+
return -(float(flag) * 2. - 1.);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// calculate line join positions
|
|
66
|
+
vec3 getLineJoinOffset(
|
|
67
|
+
vec3 prevPoint, vec3 currPoint, vec3 nextPoint,
|
|
68
|
+
vec2 width
|
|
69
|
+
) {
|
|
70
|
+
bool isEnd = positions.x > 0.0;
|
|
71
|
+
// side of the segment - -1: left, 0: center, 1: right
|
|
72
|
+
float sideOfPath = positions.y;
|
|
73
|
+
float isJoint = float(sideOfPath == 0.0);
|
|
74
|
+
|
|
75
|
+
vec3 deltaA3 = (currPoint - prevPoint);
|
|
76
|
+
vec3 deltaB3 = (nextPoint - currPoint);
|
|
77
|
+
|
|
78
|
+
mat3 rotationMatrix;
|
|
79
|
+
bool needsRotation = !billboard && project_needs_rotation(currPoint, rotationMatrix);
|
|
80
|
+
if (needsRotation) {
|
|
81
|
+
deltaA3 = deltaA3 * rotationMatrix;
|
|
82
|
+
deltaB3 = deltaB3 * rotationMatrix;
|
|
83
|
+
}
|
|
84
|
+
vec2 deltaA = deltaA3.xy / width;
|
|
85
|
+
vec2 deltaB = deltaB3.xy / width;
|
|
86
|
+
|
|
87
|
+
float lenA = length(deltaA);
|
|
88
|
+
float lenB = length(deltaB);
|
|
89
|
+
|
|
90
|
+
vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);
|
|
91
|
+
vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);
|
|
92
|
+
|
|
93
|
+
vec2 perpA = vec2(-dirA.y, dirA.x);
|
|
94
|
+
vec2 perpB = vec2(-dirB.y, dirB.x);
|
|
95
|
+
|
|
96
|
+
// tangent of the corner
|
|
97
|
+
vec2 tangent = dirA + dirB;
|
|
98
|
+
tangent = length(tangent) > 0. ? normalize(tangent) : perpA;
|
|
99
|
+
// direction of the corner
|
|
100
|
+
vec2 miterVec = vec2(-tangent.y, tangent.x);
|
|
101
|
+
// direction of the segment
|
|
102
|
+
vec2 dir = isEnd ? dirA : dirB;
|
|
103
|
+
// direction of the extrusion
|
|
104
|
+
vec2 perp = isEnd ? perpA : perpB;
|
|
105
|
+
// length of the segment
|
|
106
|
+
float L = isEnd ? lenA : lenB;
|
|
107
|
+
|
|
108
|
+
// A = angle of the corner
|
|
109
|
+
float sinHalfA = abs(dot(miterVec, perp));
|
|
110
|
+
float cosHalfA = abs(dot(dirA, miterVec));
|
|
111
|
+
|
|
112
|
+
// -1: right, 1: left
|
|
113
|
+
float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);
|
|
114
|
+
|
|
115
|
+
// relative position to the corner:
|
|
116
|
+
// -1: inside (smaller side of the angle)
|
|
117
|
+
// 0: center
|
|
118
|
+
// 1: outside (bigger side of the angle)
|
|
119
|
+
float cornerPosition = sideOfPath * turnDirection;
|
|
120
|
+
|
|
121
|
+
float miterSize = 1.0 / max(sinHalfA, EPSILON);
|
|
122
|
+
// trim if inside corner extends further than the line segment
|
|
123
|
+
miterSize = mix(
|
|
124
|
+
min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),
|
|
125
|
+
miterSize,
|
|
126
|
+
step(0.0, cornerPosition)
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))
|
|
130
|
+
* (sideOfPath + isJoint * turnDirection);
|
|
131
|
+
|
|
132
|
+
// special treatment for start cap and end cap
|
|
133
|
+
bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));
|
|
134
|
+
bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));
|
|
135
|
+
bool isCap = isStartCap || isEndCap;
|
|
136
|
+
|
|
137
|
+
// extend out a triangle to envelope the round cap
|
|
138
|
+
if (isCap) {
|
|
139
|
+
offsetVec = mix(perp * sideOfPath, dir * capType * 4.0 * flipIfTrue(isStartCap), isJoint);
|
|
140
|
+
vJointType = capType;
|
|
141
|
+
} else {
|
|
142
|
+
vJointType = jointType;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Generate variables for fragment shader
|
|
146
|
+
vPathLength = L;
|
|
147
|
+
vCornerOffset = offsetVec;
|
|
148
|
+
vMiterLength = dot(vCornerOffset, miterVec * turnDirection);
|
|
149
|
+
vMiterLength = isCap ? isJoint : vMiterLength;
|
|
150
|
+
|
|
151
|
+
vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);
|
|
152
|
+
vPathPosition = vec2(
|
|
153
|
+
dot(offsetFromStartOfPath, perp),
|
|
154
|
+
dot(offsetFromStartOfPath, dir)
|
|
155
|
+
);
|
|
156
|
+
geometry.uv = vPathPosition;
|
|
157
|
+
|
|
158
|
+
float isValid = step(instanceTypes, 3.5);
|
|
159
|
+
vec3 offset = vec3(offsetVec * width * isValid, 0.0);
|
|
160
|
+
|
|
161
|
+
if (needsRotation) {
|
|
162
|
+
offset = rotationMatrix * offset;
|
|
163
|
+
}
|
|
164
|
+
return offset;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// In clipspace extrusion, if a line extends behind the camera, clip it to avoid visual artifacts
|
|
168
|
+
void clipLine(inout vec4 position, vec4 refPosition) {
|
|
169
|
+
if (position.w < EPSILON) {
|
|
170
|
+
float r = (EPSILON - refPosition.w) / (position.w - refPosition.w);
|
|
171
|
+
position = refPosition + (position - refPosition) * r;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
void main() {
|
|
176
|
+
geometry.pickingColor = instancePickingColors;
|
|
177
|
+
|
|
178
|
+
vColor = vec4(instanceColors.rgb, instanceColors.a * opacity);
|
|
179
|
+
vec3 leftPosition = instanceLeftPositions;
|
|
180
|
+
vec3 startPosition = instanceStartPositions;
|
|
181
|
+
vec3 leftPos64Low = instanceLeftPositions64Low;
|
|
182
|
+
vec3 startPos64Low = instanceStartPositions64Low;
|
|
183
|
+
|
|
184
|
+
vec3 rightposition = instanceRightPositions;
|
|
185
|
+
vec3 endPosition = instanceEndPositions;
|
|
186
|
+
vec3 rightPos64Low = instanceRightPositions64Low;
|
|
187
|
+
vec3 endPos64Low = instanceEndPositions64Low;
|
|
188
|
+
|
|
189
|
+
if(ZIncreasingDownwards) {
|
|
190
|
+
leftPosition.z *= -1.0;
|
|
191
|
+
startPosition.z *= -1.0;
|
|
192
|
+
leftPos64Low.z *= -1.0;
|
|
193
|
+
startPos64Low.z *= -1.0;
|
|
194
|
+
rightposition.z *= -1.0;
|
|
195
|
+
endPosition.z *= -1.0;
|
|
196
|
+
rightPos64Low.z *= -1.0;
|
|
197
|
+
endPos64Low.z *= -1.0;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
float isEnd = positions.x;
|
|
201
|
+
|
|
202
|
+
vec3 prevPosition = mix(leftPosition, startPosition, isEnd);
|
|
203
|
+
vec3 prevPosition64Low = mix(leftPos64Low, startPos64Low, isEnd);
|
|
204
|
+
|
|
205
|
+
vec3 currPosition = mix(startPosition, endPosition, isEnd);
|
|
206
|
+
vec3 currPosition64Low = mix(startPos64Low, endPos64Low, isEnd);
|
|
207
|
+
|
|
208
|
+
vec3 nextPosition = mix(endPosition, rightposition, isEnd);
|
|
209
|
+
vec3 nextPosition64Low = mix(endPos64Low, rightPos64Low, isEnd);
|
|
210
|
+
|
|
211
|
+
geometry.worldPosition = currPosition;
|
|
212
|
+
vec2 widthPixels = vec2(clamp(
|
|
213
|
+
project_size_to_pixel(instanceStrokeWidths * widthScale, widthUnits),
|
|
214
|
+
widthMinPixels, widthMaxPixels) / 2.0);
|
|
215
|
+
vec3 width;
|
|
216
|
+
|
|
217
|
+
if (billboard) {
|
|
218
|
+
// Extrude in clipspace
|
|
219
|
+
vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);
|
|
220
|
+
vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);
|
|
221
|
+
vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);
|
|
222
|
+
|
|
223
|
+
clipLine(prevPositionScreen, currPositionScreen);
|
|
224
|
+
clipLine(nextPositionScreen, currPositionScreen);
|
|
225
|
+
clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));
|
|
226
|
+
|
|
227
|
+
width = vec3(widthPixels, 0.0);
|
|
228
|
+
DECKGL_FILTER_SIZE(width, geometry);
|
|
229
|
+
|
|
230
|
+
vec3 offset = getLineJoinOffset(
|
|
231
|
+
prevPositionScreen.xyz / prevPositionScreen.w,
|
|
232
|
+
currPositionScreen.xyz / currPositionScreen.w,
|
|
233
|
+
nextPositionScreen.xyz / nextPositionScreen.w,
|
|
234
|
+
project_pixel_size_to_clipspace(width.xy)
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
DECKGL_FILTER_GL_POSITION(currPositionScreen, geometry);
|
|
238
|
+
gl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w);
|
|
239
|
+
} else {
|
|
240
|
+
// Extrude in commonspace
|
|
241
|
+
prevPosition = project_position(prevPosition, prevPosition64Low);
|
|
242
|
+
currPosition = project_position(currPosition, currPosition64Low);
|
|
243
|
+
nextPosition = project_position(nextPosition, nextPosition64Low);
|
|
244
|
+
|
|
245
|
+
width = vec3(project_pixel_size(widthPixels), 0.0);
|
|
246
|
+
DECKGL_FILTER_SIZE(width, geometry);
|
|
247
|
+
|
|
248
|
+
vec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy);
|
|
249
|
+
geometry.position = vec4(currPosition + offset, 1.0);
|
|
250
|
+
gl_Position = project_common_position_to_clipspace(geometry.position);
|
|
251
|
+
DECKGL_FILTER_GL_POSITION(gl_Position, geometry);
|
|
252
|
+
}
|
|
253
|
+
DECKGL_FILTER_COLOR(vColor, geometry);
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
//# sourceMappingURL=path-layer-vertex.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-layer-vertex.glsl.js","sourceRoot":"","sources":["../../../src/layers/polylines/path-layer-vertex.glsl.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,wEAAwE;AACxE,2DAA2D;AAC3D,EAAE;AACF,6EAA6E;AAC7E,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,4EAA4E;AAC5E,gBAAgB;AAEhB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Od,CAAC"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { PickingInfo, UpdateParameters } from "@deck.gl/core/typed";
|
|
3
3
|
import { CompositeLayer } from "@deck.gl/core/typed";
|
|
4
|
-
import { PathLayer } from "@deck.gl/layers/typed";
|
|
5
4
|
import type { ExtendedLayerProps, LayerPickInfo } from "../utils/layerTools";
|
|
6
5
|
import type { ReportBoundingBoxAction } from "../../components/Map";
|
|
6
|
+
import { PrivatePolylinesLayer } from "./privatePolylinesLayer";
|
|
7
7
|
export interface PolylinesLayerProps extends ExtendedLayerProps {
|
|
8
8
|
/**
|
|
9
9
|
* Polyline vertices as [x, y, z, x, y, z....].
|
|
10
10
|
*/
|
|
11
|
-
polylinePoints: number[];
|
|
11
|
+
polylinePoints: number[] | Float32Array;
|
|
12
12
|
/**
|
|
13
13
|
Start indices of the polylines counted in vertex indices.
|
|
14
|
-
For example, if there are 3
|
|
14
|
+
For example, if there are 3 polulines of 2, 3, and 4 vertices each, startIndices should be [0, 2, 5].
|
|
15
15
|
*/
|
|
16
|
-
startIndices: number[];
|
|
16
|
+
startIndices: number[] | Uint32Array;
|
|
17
17
|
/** Array of boolean flags or a single value indicating whether the polylines are closed.
|
|
18
18
|
* The polylines are considered to be open if not set.
|
|
19
19
|
*/
|
|
@@ -30,6 +30,9 @@ export interface PolylinesLayerProps extends ExtendedLayerProps {
|
|
|
30
30
|
* Line width defined in width units.
|
|
31
31
|
*/
|
|
32
32
|
linesWidth: number;
|
|
33
|
+
/** Enable/disable depth testing when rendering layer. Default true.
|
|
34
|
+
*/
|
|
35
|
+
depthTest?: boolean;
|
|
33
36
|
/**
|
|
34
37
|
* If true means that input z values are interpreted as depths.
|
|
35
38
|
* For example depth of z = 1000 corresponds to -1000 on the z axis. Default true.
|
|
@@ -38,7 +41,7 @@ export interface PolylinesLayerProps extends ExtendedLayerProps {
|
|
|
38
41
|
reportBoundingBox?: React.Dispatch<ReportBoundingBoxAction>;
|
|
39
42
|
}
|
|
40
43
|
export default class PolylinesLayer extends CompositeLayer<PolylinesLayerProps> {
|
|
41
|
-
renderLayers(): [
|
|
44
|
+
renderLayers(): [PrivatePolylinesLayer?];
|
|
42
45
|
initializeState(): void;
|
|
43
46
|
updateState({ props, oldProps }: UpdateParameters<PolylinesLayer>): void;
|
|
44
47
|
private rebuildDataAttributes;
|
|
@@ -46,6 +49,7 @@ export default class PolylinesLayer extends CompositeLayer<PolylinesLayerProps>
|
|
|
46
49
|
info: PickingInfo;
|
|
47
50
|
}): LayerPickInfo;
|
|
48
51
|
private loadData;
|
|
52
|
+
private toArray;
|
|
49
53
|
private closePolylines;
|
|
50
54
|
private normalizeStartIndices;
|
|
51
55
|
private copyPolyline;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CompositeLayer } from "@deck.gl/core/typed";
|
|
2
|
-
import { PathLayer } from "@deck.gl/layers/typed";
|
|
3
2
|
import { isEqual } from "lodash";
|
|
4
|
-
import { createPropertyData,
|
|
3
|
+
import { createPropertyData, defineBoundingBox } from "../utils/layerTools";
|
|
4
|
+
import { PrivatePolylinesLayer } from "./privatePolylinesLayer";
|
|
5
5
|
const defaultProps = {
|
|
6
6
|
"@@type": "PolylinesLayer",
|
|
7
7
|
name: "PolylinesLayer",
|
|
@@ -11,11 +11,12 @@ const defaultProps = {
|
|
|
11
11
|
color: [0, 0, 200, 255],
|
|
12
12
|
pickable: true,
|
|
13
13
|
visible: true,
|
|
14
|
+
depthTest: true,
|
|
14
15
|
ZIncreasingDownwards: true,
|
|
15
16
|
};
|
|
16
17
|
export default class PolylinesLayer extends CompositeLayer {
|
|
17
18
|
renderLayers() {
|
|
18
|
-
const layer = new
|
|
19
|
+
const layer = new PrivatePolylinesLayer(this.getSubLayerProps({
|
|
19
20
|
id: "polylines-layer",
|
|
20
21
|
widthUnits: this.props.widthUnits,
|
|
21
22
|
pickable: this.props.pickable,
|
|
@@ -30,6 +31,8 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
30
31
|
getColor: [this.props.color],
|
|
31
32
|
getWidth: [this.props.linesWidth],
|
|
32
33
|
},
|
|
34
|
+
depthTest: this.props.depthTest,
|
|
35
|
+
ZIncreasingDownwards: this.props.ZIncreasingDownwards,
|
|
33
36
|
}));
|
|
34
37
|
return [layer];
|
|
35
38
|
}
|
|
@@ -49,9 +52,6 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
49
52
|
}
|
|
50
53
|
rebuildDataAttributes(reportBoundingBox) {
|
|
51
54
|
const dataArrays = this.loadData();
|
|
52
|
-
if (this.props.ZIncreasingDownwards) {
|
|
53
|
-
invertZCoordinate(dataArrays.positions);
|
|
54
|
-
}
|
|
55
55
|
if (typeof this.props.reportBoundingBox === "function" &&
|
|
56
56
|
reportBoundingBox) {
|
|
57
57
|
const boundingBox = defineBoundingBox(dataArrays.positions);
|
|
@@ -84,7 +84,18 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
84
84
|
return Object.assign(Object.assign({}, info), { properties: layer_properties });
|
|
85
85
|
}
|
|
86
86
|
loadData() {
|
|
87
|
-
|
|
87
|
+
// The input arrays can be used as deck.gl binary inputs.
|
|
88
|
+
// Explicit pathType prevents deck.gl from addtional computations.
|
|
89
|
+
if (this.props.polylinePoints instanceof Float32Array &&
|
|
90
|
+
this.props.startIndices instanceof Uint32Array &&
|
|
91
|
+
!this.props.polylinesClosed) {
|
|
92
|
+
return {
|
|
93
|
+
linesCount: this.props.startIndices.length - 1,
|
|
94
|
+
positions: this.props.polylinePoints,
|
|
95
|
+
startIndices: this.props.startIndices,
|
|
96
|
+
pathType: "open",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
88
99
|
const data = this.closePolylines();
|
|
89
100
|
return {
|
|
90
101
|
linesCount: data.startIndices.length,
|
|
@@ -93,12 +104,21 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
93
104
|
pathType: data.pathType,
|
|
94
105
|
};
|
|
95
106
|
}
|
|
107
|
+
toArray(data) {
|
|
108
|
+
if (Array.isArray(data)) {
|
|
109
|
+
return data;
|
|
110
|
+
}
|
|
111
|
+
return Array.from(data);
|
|
112
|
+
}
|
|
96
113
|
closePolylines() {
|
|
114
|
+
const points = this.toArray(this.props.polylinePoints);
|
|
115
|
+
const startIndices = this.toArray(this.props.startIndices);
|
|
116
|
+
this.normalizeStartIndices(startIndices, points.length / 3);
|
|
97
117
|
const isClosedFunc = this.createIsClosedFunc();
|
|
98
118
|
if (!isClosedFunc.func) {
|
|
99
119
|
return {
|
|
100
|
-
polylinePoints:
|
|
101
|
-
startIndices:
|
|
120
|
+
polylinePoints: points,
|
|
121
|
+
startIndices: startIndices,
|
|
102
122
|
pathType: isClosedFunc.pathType,
|
|
103
123
|
};
|
|
104
124
|
}
|
|
@@ -110,11 +130,11 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
110
130
|
const isClosed = isClosedFunc.func(i);
|
|
111
131
|
closedStartIndices.push(this.props.startIndices[i] + startIndexShift);
|
|
112
132
|
if (isClosed) {
|
|
113
|
-
this.closePolyline(i, closedPoints);
|
|
133
|
+
this.closePolyline(points, startIndices, i, closedPoints);
|
|
114
134
|
++startIndexShift;
|
|
115
135
|
}
|
|
116
136
|
else {
|
|
117
|
-
this.copyPolyline(i, closedPoints);
|
|
137
|
+
this.copyPolyline(points, startIndices, i, closedPoints);
|
|
118
138
|
}
|
|
119
139
|
}
|
|
120
140
|
return {
|
|
@@ -123,27 +143,26 @@ export default class PolylinesLayer extends CompositeLayer {
|
|
|
123
143
|
pathType: isClosedFunc.pathType,
|
|
124
144
|
};
|
|
125
145
|
}
|
|
126
|
-
normalizeStartIndices() {
|
|
127
|
-
const lastIndex =
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
this.props.startIndices.push(totalPointsCount);
|
|
146
|
+
normalizeStartIndices(startIndices, pointsCount) {
|
|
147
|
+
const lastIndex = startIndices.slice(-1)[0];
|
|
148
|
+
if (lastIndex < pointsCount) {
|
|
149
|
+
startIndices.push(pointsCount);
|
|
131
150
|
}
|
|
132
151
|
}
|
|
133
|
-
copyPolyline(lineIndex, outPoints) {
|
|
134
|
-
const startPoint =
|
|
135
|
-
const endPoint =
|
|
152
|
+
copyPolyline(points, startIndices, lineIndex, outPoints) {
|
|
153
|
+
const startPoint = startIndices[lineIndex];
|
|
154
|
+
const endPoint = startIndices[lineIndex + 1];
|
|
136
155
|
for (let idx = startPoint; idx < endPoint; ++idx) {
|
|
137
|
-
outPoints.push(...this.getPolylinePoint(idx));
|
|
156
|
+
outPoints.push(...this.getPolylinePoint(points, idx));
|
|
138
157
|
}
|
|
139
158
|
}
|
|
140
|
-
closePolyline(lineIndex, outPoints) {
|
|
141
|
-
this.copyPolyline(lineIndex, outPoints);
|
|
142
|
-
const startPoint =
|
|
143
|
-
outPoints.push(...this.getPolylinePoint(startPoint));
|
|
159
|
+
closePolyline(points, startIndices, lineIndex, outPoints) {
|
|
160
|
+
this.copyPolyline(points, startIndices, lineIndex, outPoints);
|
|
161
|
+
const startPoint = startIndices[lineIndex];
|
|
162
|
+
outPoints.push(...this.getPolylinePoint(points, startPoint));
|
|
144
163
|
}
|
|
145
|
-
getPolylinePoint(index) {
|
|
146
|
-
return
|
|
164
|
+
getPolylinePoint(points, index) {
|
|
165
|
+
return points.slice(3 * index, 3 * (index + 1));
|
|
147
166
|
}
|
|
148
167
|
createIsClosedFunc() {
|
|
149
168
|
if (this.props.polylinesClosed === true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polylinesLayer.js","sourceRoot":"","sources":["../../../src/layers/polylines/polylinesLayer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"polylinesLayer.js","sourceRoot":"","sources":["../../../src/layers/polylines/polylinesLayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PathLayer } from "@deck.gl/layers/typed";
|
|
2
|
+
import type { PathLayerProps } from "@deck.gl/layers/typed";
|
|
3
|
+
import type { NumericArray } from "@math.gl/types";
|
|
4
|
+
import type { LayerContext } from "@deck.gl/core/typed";
|
|
5
|
+
type UniformValue = number | boolean | Readonly<NumericArray>;
|
|
6
|
+
export interface ExtendedPathLayerProps {
|
|
7
|
+
depthTest?: boolean;
|
|
8
|
+
ZIncreasingDownwards: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class PrivatePolylinesLayer extends PathLayer<unknown, ExtendedPathLayerProps> {
|
|
11
|
+
constructor(props: PathLayerProps);
|
|
12
|
+
getShaders(): {
|
|
13
|
+
vs: string;
|
|
14
|
+
fs: string;
|
|
15
|
+
modules: import("@deck.gl/core/typed")._ShaderModule<{
|
|
16
|
+
pickingSelectedColor?: [number, number, number] | null | undefined;
|
|
17
|
+
pickingHighlightColor?: [number, number, number, number] | undefined;
|
|
18
|
+
pickingActive?: boolean | undefined;
|
|
19
|
+
pickingAttribute?: boolean | undefined;
|
|
20
|
+
}>[];
|
|
21
|
+
};
|
|
22
|
+
draw(args: {
|
|
23
|
+
moduleParameters?: unknown;
|
|
24
|
+
uniforms: Record<string, UniformValue>;
|
|
25
|
+
context: LayerContext;
|
|
26
|
+
}): void;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PathLayer } from "@deck.gl/layers/typed";
|
|
2
|
+
import GL from "@luma.gl/constants";
|
|
3
|
+
import { project32, picking } from "@deck.gl/core/typed";
|
|
4
|
+
import vs from "./path-layer-vertex.glsl";
|
|
5
|
+
import fs from "./path-layer-fragment.glsl";
|
|
6
|
+
export class PrivatePolylinesLayer extends PathLayer {
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props);
|
|
9
|
+
}
|
|
10
|
+
getShaders() {
|
|
11
|
+
return { vs, fs, modules: [project32, picking] };
|
|
12
|
+
}
|
|
13
|
+
draw(args) {
|
|
14
|
+
args.uniforms["ZIncreasingDownwards"] = this.props.ZIncreasingDownwards;
|
|
15
|
+
let restoreDepthTest = false;
|
|
16
|
+
if (typeof this.props.depthTest === "boolean" &&
|
|
17
|
+
!this.props.depthTest) {
|
|
18
|
+
restoreDepthTest = true;
|
|
19
|
+
this.context.gl.disable(GL.DEPTH_TEST);
|
|
20
|
+
}
|
|
21
|
+
super.draw({ uniforms: args.uniforms });
|
|
22
|
+
if (restoreDepthTest) {
|
|
23
|
+
this.context.gl.enable(GL.DEPTH_TEST);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
PrivatePolylinesLayer.layerName = "PrivatePolylinesLayer";
|
|
28
|
+
//# sourceMappingURL=privatePolylinesLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privatePolylinesLayer.js","sourceRoot":"","sources":["../../../src/layers/polylines/privatePolylinesLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGpC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC1C,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAS5C,MAAM,OAAO,qBAAsB,SAAQ,SAG1C;IACG,YAAY,KAAqB;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,UAAU;QACN,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,IAIJ;QACG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAExE,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IACI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YACzC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EACvB,CAAC;YACC,gBAAgB,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxC,IAAI,gBAAgB,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;CACJ;AAED,qBAAqB,CAAC,SAAS,GAAG,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectableGeoJsonLayer.js","sourceRoot":"","sources":["../../../src/layers/selectable_geojson/selectableGeoJsonLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,YAAqB;IACrE,OAAO,CAAC,IAAiB;QACrB,+CAA+C;QAC/C,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"selectableGeoJsonLayer.js","sourceRoot":"","sources":["../../../src/layers/selectable_geojson/selectableGeoJsonLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,YAAqB;IACrE,OAAO,CAAC,IAAiB;QACrB,+CAA+C;QAC/C,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,CAAC;YACH,IAAI,CAAC,OAA8B,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACxD,sBAAsB,EAAE,IAAI,CAAC,MAAM;aACtC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AAED,sBAAsB,CAAC,SAAS,GAAG,wBAAwB,CAAC;AAC5D,sBAAsB,CAAC,YAAY,GAAG;IAClC,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;CACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../../src/layers/shader_modules/decoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEnC,oDAAoD;AACpD,0DAA0D;AAE1D,MAAM,eAAe,GAAiB;IAClC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;CACV,CAAC;AASF,gCAAgC;AAChC,2BAA2B;AAC3B,SAAS,WAAW,CAAC,IAAS;IAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../../src/layers/shader_modules/decoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEnC,oDAAoD;AACpD,0DAA0D;AAE1D,MAAM,eAAe,GAAiB;IAClC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpB,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;CACV,CAAC;AASF,gCAAgC;AAChC,2BAA2B;AAC3B,SAAS,WAAW,CAAC,IAAS;IAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,EACF,SAAS,GAAG,eAAe,CAAC,SAAS,EACrC,WAAW,GAAG,eAAe,CAAC,WAAW,EACzC,MAAM,GAAG,eAAe,CAAC,MAAM,EAC/B,IAAI,GAAG,eAAe,CAAC,IAAI,GAC9B,GAAG,IAAI,CAAC,YAAY,CAAC;QACtB,OAAO;YACH,mBAAmB,EAAE,SAAS;YAC9B,qBAAqB,EAAE,WAAW;YAClC,gBAAgB,EAAE,MAAM;YACxB,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,mBAAmB;SACjE,CAAC;IACN,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,IAAI,EAAE,SAAS;IACf,EAAE;IACF,WAAW;CACd,CAAC"}
|