From 3cc4183a7f3afb38e8cb4a14bca1e7364ad53fbb Mon Sep 17 00:00:00 2001 From: Nils Christian Bonnevie Date: Sat, 25 Apr 2026 17:30:18 +0200 Subject: [PATCH 1/4] feat: Option to give separate color for each line in PolylinesLayer. --- .../src/layers/polylines/polylinesLayer.ts | 63 ++++++++++++++++++- .../layers/PolylinesLayer.stories.tsx | 17 ++++- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/typescript/packages/subsurface-viewer/src/layers/polylines/polylinesLayer.ts b/typescript/packages/subsurface-viewer/src/layers/polylines/polylinesLayer.ts index d36ef32053..6ba75db4d4 100644 --- a/typescript/packages/subsurface-viewer/src/layers/polylines/polylinesLayer.ts +++ b/typescript/packages/subsurface-viewer/src/layers/polylines/polylinesLayer.ts @@ -41,8 +41,11 @@ export interface PolylinesLayerProps extends ExtendedLayerProps { /** * Line color defined as RGB or RGBA array. Each component is in 0-255 range. + * If color is given as an array of colors, each polyline gets its own color. + * If given as array the number of colors should be at least equal to the number of polylines. + * Otherwise, the first color is applied to all polylines. */ - color: RGBColor | RGBAColor; + color: RGBColor | RGBAColor | RGBColor[] | RGBAColor[]; /** * The units of the line width, one of `'meters'`, `'common'`, and `'pixels'`. @@ -89,6 +92,10 @@ interface IDataAttributes { value: Float32Array; size: number; }; + getColor: { + value: Float32Array; + size: number; + }; }; pathType: PathType; } @@ -107,7 +114,6 @@ export default class PolylinesLayer extends CompositeLayer capRounded: true, data, _pathType, - getColor: () => this.props.color, getWidth: () => this.props.linesWidth, updateTriggers: { @@ -151,6 +157,55 @@ export default class PolylinesLayer extends CompositeLayer this.props.reportBoundingBox({ layerBoundingBox: boundingBox }); } + const nStartIndicies = dataArrays.startIndices.length; + const isRGBArray = + this.props.color.length > 0 && + Array.isArray(this.props.color[0]) && + (this.props.color[0] as RGBColor).length === 3; + const isRGBAArray = + this.props.color.length > 0 && + Array.isArray(this.props.color[0]) && + (this.props.color[0] as RGBAColor).length === 4; + + if ( + (isRGBArray || isRGBAArray) && + this.props.color.length < nStartIndicies + ) { + throw new Error( + "Color array length should be at least equal to the number of polylines" + ); + } + + // Set color for each vertex. If color is given as a single value, all vertices get + // the same color. If color is given as an array of colors, each polyline gets its own color. + const npoints = dataArrays.positions.length / 3; + const colors = new Float32Array(npoints * 4); + + const { startIndices } = dataArrays; + const scale = startIndices.at(-1) === npoints ? 255 : 1; + + for (let i = 0; i < startIndices.length; i++) { + const ii = this.props.color.length < nStartIndicies ? 0 : i; + const color = + isRGBArray || isRGBAArray + ? (this.props.color as RGBColor[] | RGBAColor[])[ii] + : (this.props.color as RGBColor | RGBAColor); + const r = color[0] / scale; + const g = color[1] / scale; + const b = color[2] / scale; + const a = + color.length > 3 ? (color[3] as number) / scale : 255 / scale; + const start = startIndices[i]; + const end = + i < startIndices.length - 1 ? startIndices[i + 1] - 1 : npoints; + for (let j = start; j <= end; j++) { + colors[j * 4 + 0] = r; + colors[j * 4 + 1] = g; + colors[j * 4 + 2] = b; + colors[j * 4 + 3] = a; + } + } + return { length: dataArrays.linesCount, startIndices: dataArrays.startIndices, @@ -159,6 +214,10 @@ export default class PolylinesLayer extends CompositeLayer value: dataArrays.positions, size: 3, }, + getColor: { + value: colors, + size: 4, + }, }, pathType: dataArrays.pathType, }; diff --git a/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx b/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx index 071465b543..b8ed15f4bc 100644 --- a/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx +++ b/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx @@ -45,12 +45,23 @@ const smallPolylinesLayer = { id: "small_polylines_layer", /* eslint-disable */ polylinePoints: [ - 0, 0, 0, 10, 0, 0, 10, 0, 10, -5, -5, 4, 0, -8, 6, 5, 10, 8, + 0, 0, 0, + 10, 0, 0, + 10, 0, 10, + -5, -5, 4, + 0, -8, 6, + 5, 10, 8, + 3, 1, 2, + 15, 8, 10, ], /* eslint-enable */ - startIndices: [0, 3], + startIndices: [0, 3, 6], polylinesClosed: [true, false], - color: [0, 200, 100], + color: [ + [255, 0, 0], + [0, 255, 0], + [0, 0, 255], + ], widthUnits: "pixels", linesWidth: 10, From 483ddbc289c5b4102ae75b8bc8c5cb0957a718ac Mon Sep 17 00:00:00 2001 From: Nils Christian Bonnevie Date: Mon, 27 Apr 2026 12:28:35 +0200 Subject: [PATCH 2/4] smoke --- ...polylines-layer--small-polylines-layer.png | Bin 19561 -> 19889 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/typescript/packages/subsurface-viewer/src/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--small-polylines-layer.png b/typescript/packages/subsurface-viewer/src/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--small-polylines-layer.png index 17753727869beae733efe308050555c821b1a1e4..1497bb90ba5f49d3974d90da54f33929dbc72899 100644 GIT binary patch delta 12265 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 F{{e5VxTXLA delta 11934 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 Date: Mon, 27 Apr 2026 14:21:03 +0200 Subject: [PATCH 3/4] Code comment fix --- .../layers/PolylinesLayer.stories.tsx | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx b/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx index b8ed15f4bc..b652b7f345 100644 --- a/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx +++ b/typescript/packages/subsurface-viewer/src/storybook/layers/PolylinesLayer.stories.tsx @@ -9,6 +9,7 @@ import { createMathWithSeed, replaceNonJsonArgs, } from "../sharedHelperFunctions"; +import { OrbitView } from "@deck.gl/core"; const stories: Meta = { component: SubsurfaceViewer, @@ -68,6 +69,28 @@ const smallPolylinesLayer = { ZIncreasingDownwards: true, }; +const smallPolylinesLayerSingleColor = { + "@@type": "PolylinesLayer", + id: "small_polylines_layer_single_color", + /* eslint-disable */ + polylinePoints: [ + 0, 0, 0, + 10, 0, 0, + 10, 0, 10, + -5, -5, 4, + 0, -8, 6, + 5, 10, 8, + 3, 1, 2, + 15, 8, 10, + ], + startIndices: [0, 3, 6], + polylinesClosed: [true, false], + color: [255, 0, 0], + widthUnits: "pixels", + linesWidth: 10, + ZIncreasingDownwards: true, +}; + const smallAxesLayer = { "@@type": "AxesLayer", id: "small_axes_layer", @@ -77,9 +100,27 @@ const smallAxesLayer = { export const SmallPolylinesLayer: StoryObj = { args: { id: "small-polylines", - layers: [smallAxesLayer, smallPolylinesLayer], + layers: [smallAxesLayer, smallPolylinesLayer, smallPolylinesLayerSingleColor], bounds: [-10, -10, 17, 10], - views: default3DViews, + views: { + layout: [1, 2], + showLabel: true, + viewports: [ + { + id: "view_1", + layerIds: [smallAxesLayer.id, smallPolylinesLayer.id], + viewType: OrbitView, + }, + { + id: "view_2", + layerIds: [ + smallAxesLayer.id, + smallPolylinesLayerSingleColor.id, + ], + viewType: OrbitView, + }, + ], + }, }, parameters: { docs: { From fa00bdbcbb198126c05ab2d098c19d63053e4ff9 Mon Sep 17 00:00:00 2001 From: Nils Christian Bonnevie Date: Mon, 27 Apr 2026 15:57:11 +0200 Subject: [PATCH 4/4] Code comment fix --- ...polylines-layer--small-polylines-layer.png | Bin 19889 -> 22226 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/typescript/packages/subsurface-viewer/src/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--small-polylines-layer.png b/typescript/packages/subsurface-viewer/src/storybook/layers/__image_snapshots__/subsurfaceviewer-polylines-layer--small-polylines-layer.png index 1497bb90ba5f49d3974d90da54f33929dbc72899..54e272945893e4a0bc288c5d0556f68470c1b4bc 100644 GIT binary patch literal 22226 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 WT9aF1PJKdxtfs7WD*J@lt^Wm@JuDdj literal 19889 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