Skip to content

Commit 4eee5a3

Browse files
committed
wip
1 parent 15557a5 commit 4eee5a3

File tree

3 files changed

+81
-9
lines changed

3 files changed

+81
-9
lines changed

frontend/src/modules/3DViewerNew/LayerFramework/visualization/makeSeismicFenceMeshLayer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export enum Plane {
7171
export function makeSeismicFenceMeshLayerFunction(plane: Plane) {
7272
return function makeSeismicFenceMeshLayer({
7373
id,
74+
name,
7475
data,
7576
colorScale,
7677
settings,
@@ -119,6 +120,7 @@ export function makeSeismicFenceMeshLayerFunction(plane: Plane) {
119120

120121
return new SeismicFenceMeshLayer({
121122
id,
123+
name,
122124
data: {
123125
vertices,
124126
indices,
@@ -127,6 +129,7 @@ export function makeSeismicFenceMeshLayerFunction(plane: Plane) {
127129
startPosition,
128130
colorMapFunction: makeColorMapFunctionFromColorScale(colorScale, data.value_min, data.value_max, false),
129131
boundingBox,
132+
zIncreaseDownwards: true,
130133
});
131134
};
132135
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { SimpleMeshLayer } from "@deck.gl/mesh-layers";
2+
3+
export class ExtendedSimpleMeshLayer extends SimpleMeshLayer {
4+
getShaders() {
5+
return {
6+
...super.getShaders(),
7+
inject: {
8+
"vs:#decl": `
9+
flat out int vertexIndex;`,
10+
"vs:#main-end": `
11+
vertexIndex = gl_VertexID;`,
12+
"fs:#decl": `
13+
flat in int vertexIndex;
14+
15+
vec4 encodeVertexIndexToRGB (int vertexIndex) {
16+
float r = 0.0;
17+
float g = 0.0;
18+
float b = 0.0;
19+
20+
if (vertexIndex >= (256 * 256) - 1) {
21+
r = floor(float(vertexIndex) / (256.0 * 256.0));
22+
vertexIndex -= int(r * (256.0 * 256.0));
23+
}
24+
25+
if (vertexIndex >= 256 - 1) {
26+
g = floor(float(vertexIndex) / 256.0);
27+
vertexIndex -= int(g * 256.0);
28+
}
29+
30+
b = float(vertexIndex);
31+
32+
return vec4(r / 255.0, g / 255.0, b / 255.0, 1.0);
33+
}
34+
`,
35+
"fs:#main-start": `
36+
if (picking.isActive > 0.5 && !(picking.isAttribute > 0.5)) {
37+
fragColor = encodeVertexIndexToRGB(vertexIndex);
38+
return;
39+
}`,
40+
},
41+
};
42+
}
43+
}

frontend/src/modules/_shared/customDeckGlLayers/SeismicFenceMeshLayer.ts

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ import {
99
import { PathLayer } from "@deck.gl/layers";
1010
import { Geometry } from "@luma.gl/engine";
1111

12-
import { MeshLayer } from "./MeshLayer/MeshLayer";
12+
import { ExtendedSimpleMeshLayer } from "./ExtendedSimpleMeshLayer/ExtendedSimpleMeshLayer";
13+
14+
export type SeismicFenceMeshLayerPickingInfo = {
15+
properties?: { name: string; value: number }[];
16+
} & PickingInfo;
1317

1418
export type SeismicFenceMeshLayerProps = {
19+
name?: string;
1520
startPosition: [number, number, number];
1621
data: {
1722
vertices: Float32Array;
@@ -21,10 +26,7 @@ export type SeismicFenceMeshLayerProps = {
2126
boundingBox: number[][]; // [minX, minY, minZ, maxX, maxY, maxZ]
2227
colorMapFunction: (value: number) => [number, number, number];
2328
hoverable?: boolean;
24-
};
25-
26-
export type SeismicFenceMeshLayerPickingInfo = PickingInfo & {
27-
propertyValue: number;
29+
zIncreaseDownwards?: boolean;
2830
};
2931

3032
export class SeismicFenceMeshLayer extends CompositeLayer<SeismicFenceMeshLayerProps> {
@@ -70,9 +72,33 @@ export class SeismicFenceMeshLayer extends CompositeLayer<SeismicFenceMeshLayerP
7072
});
7173
}
7274

73-
getPickingInfo({ info }: GetPickingInfoParams): PickingInfo {
74-
console.debug(info.color);
75-
return info;
75+
getPickingInfo({ info }: GetPickingInfoParams): SeismicFenceMeshLayerPickingInfo {
76+
const { data, zIncreaseDownwards } = this.props;
77+
if (!info.color) {
78+
return info;
79+
}
80+
81+
const r = info.color[0];
82+
const g = info.color[1];
83+
const b = info.color[2];
84+
85+
const vertexIndex = r * 256 * 256 + g * 256 + b;
86+
const property = this.props.data.properties[vertexIndex];
87+
88+
if (property === undefined) {
89+
return info;
90+
}
91+
92+
const properties: { name: string; value: number }[] = [];
93+
properties.push({ name: "Property", value: property });
94+
if (info.coordinate?.length === 3) {
95+
properties.push({ name: "Depth", value: (zIncreaseDownwards ? -1 : 1) * info.coordinate[2] });
96+
}
97+
98+
return {
99+
...info,
100+
properties,
101+
};
76102
}
77103

78104
onHover(pickingInfo: PickingInfo): boolean {
@@ -92,7 +118,7 @@ export class SeismicFenceMeshLayer extends CompositeLayer<SeismicFenceMeshLayerP
92118
const { geometry, isHovered } = this.state;
93119

94120
const layers: Layer<any>[] = [
95-
new MeshLayer({
121+
new ExtendedSimpleMeshLayer({
96122
id: "seismic-fence-mesh-layer",
97123
data: [0],
98124
mesh: geometry,

0 commit comments

Comments
 (0)