Skip to content

Class: MultiLayerNeuroSurface ​

Defined in: MultiLayerNeuroSurface.ts:187

Multi-layer brain surface with flexible layer compositing

Extends ​

Extended by ​

Constructors ​

Constructor ​

ts
new MultiLayerNeuroSurface(geometry, config?): MultiLayerNeuroSurface;

Defined in: MultiLayerNeuroSurface.ts:214

Parameters ​

geometry ​

SurfaceGeometry

config? ​

MultiLayerSurfaceConfig = {}

Returns ​

MultiLayerNeuroSurface

Overrides ​

NeuroSurface.constructor

Properties ​

layerStack ​

ts
layerStack: LayerStack;

Defined in: MultiLayerNeuroSurface.ts:188


compositeBuffer ​

ts
compositeBuffer: Float32Array;

Defined in: MultiLayerNeuroSurface.ts:189


vertexCount ​

ts
vertexCount: number;

Defined in: MultiLayerNeuroSurface.ts:190


clipPlanes ​

ts
readonly clipPlanes: ClipPlaneSet;

Defined in: MultiLayerNeuroSurface.ts:212

Clip plane set for surface clipping


geometry ​

ts
geometry: SurfaceGeometry;

Defined in: classes.ts:458

Inherited from ​

NeuroSurface.geometry


indices ​

ts
indices: Uint32Array;

Defined in: classes.ts:459

Inherited from ​

NeuroSurface.indices


data ​

ts
data: Float32Array;

Defined in: classes.ts:460

Inherited from ​

NeuroSurface.data


vertexCurv ​

ts
vertexCurv: Float32Array<ArrayBufferLike> | null;

Defined in: classes.ts:461

Inherited from ​

NeuroSurface.vertexCurv


mesh ​

ts
mesh: 
  | Mesh<BufferGeometry<NormalBufferAttributes, BufferGeometryEventMap>, 
  | Material<MaterialEventMap>
  | Material<MaterialEventMap>[], Object3DEventMap>
  | null;

Defined in: classes.ts:462

Inherited from ​

NeuroSurface.mesh


threshold ​

ts
threshold: [number, number];

Defined in: classes.ts:463

Inherited from ​

NeuroSurface.threshold


irange ​

ts
irange: [number, number];

Defined in: classes.ts:464

Inherited from ​

NeuroSurface.irange


hemisphere ​

ts
hemisphere: string;

Defined in: classes.ts:465

Inherited from ​

NeuroSurface.hemisphere


config ​

ts
config: ResolvedSurfaceConfig;

Defined in: classes.ts:466

Inherited from ​

NeuroSurface.config


viewer? ​

ts
viewer?: any;

Defined in: classes.ts:467

Inherited from ​

NeuroSurface.viewer

Methods ​

on() ​

ts
on<K>(event, listener): UnsubscribeFn;

Defined in: EventEmitter.ts:18

Type Parameters ​

K ​

K extends keyof SurfaceEventMap

Parameters ​

event ​

K

listener ​

TypedEventListener<SurfaceEventMap[K]>

Returns ​

UnsubscribeFn

Inherited from ​

NeuroSurface.on


once() ​

ts
once<K>(event, listener): UnsubscribeFn;

Defined in: EventEmitter.ts:30

Type Parameters ​

K ​

K extends keyof SurfaceEventMap

Parameters ​

event ​

K

listener ​

TypedEventListener<SurfaceEventMap[K]>

Returns ​

UnsubscribeFn

Inherited from ​

NeuroSurface.once


emit() ​

ts
emit<K>(event, ...args): void;

Defined in: EventEmitter.ts:41

Type Parameters ​

K ​

K extends keyof SurfaceEventMap

Parameters ​

event ​

K

args ​

...EventPayloadArgs<SurfaceEventMap[K]>

Returns ​

void

Inherited from ​

NeuroSurface.emit


removeListener() ​

ts
removeListener<K>(event, listenerToRemove): void;

Defined in: EventEmitter.ts:60

Type Parameters ​

K ​

K extends keyof SurfaceEventMap

Parameters ​

event ​

K

listenerToRemove ​

TypedEventListener<SurfaceEventMap[K]>

Returns ​

void

Inherited from ​

NeuroSurface.removeListener


removeAllListeners() ​

ts
removeAllListeners(event?): void;

Defined in: EventEmitter.ts:75

Parameters ​

event? ​

keyof SurfaceEventMap

Returns ​

void

Inherited from ​

NeuroSurface.removeAllListeners


off() ​

ts
off<K>(event, listener): void;

Defined in: EventEmitter.ts:84

Type Parameters ​

K ​

K extends keyof SurfaceEventMap

Parameters ​

event ​

K

listener ​

TypedEventListener<SurfaceEventMap[K]>

Returns ​

void

Inherited from ​

NeuroSurface.off


toggleWireframe() ​

ts
toggleWireframe(enabled): void;

Defined in: MultiLayerNeuroSurface.ts:274

Toggle a simple edge wireframe for debugging/presentation. Creates if missing.

Parameters ​

enabled ​

boolean

Returns ​

void


updateSurfaceAttachments() ​

ts
updateSurfaceAttachments(): void;

Defined in: MultiLayerNeuroSurface.ts:562

Refresh only attachment positions affected by morph/variant changes.

Returns ​

void


updateOutlineResolution() ​

ts
updateOutlineResolution(
   width, 
   height, 
   dpr?
): void;

Defined in: MultiLayerNeuroSurface.ts:566

Parameters ​

width ​

number

height ​

number

dpr? ​

number = 1

Returns ​

void


requestColorUpdate() ​

ts
requestColorUpdate(): void;

Defined in: MultiLayerNeuroSurface.ts:586

Request a color update (throttled)

Returns ​

void


flushPendingColorUpdate() ​

ts
flushPendingColorUpdate(): boolean;

Defined in: MultiLayerNeuroSurface.ts:597

Composite a queued layer change immediately before a viewer paint.

The viewer calls this at the start of render() so its already-scheduled animation frame cannot paint stale vertex colors ahead of this surface's independently queued compositing callback.

Returns ​

boolean


addLayer() ​

ts
addLayer(layer): void;

Defined in: MultiLayerNeuroSurface.ts:617

Add a layer to the surface

Parameters ​

layer ​

Layer

Returns ​

void


addTwoDataLayer() ​

ts
addTwoDataLayer(
   id, 
   dataX, 
   dataY, 
   colorMap?, 
   config?
): TwoDataLayer;

Defined in: MultiLayerNeuroSurface.ts:679

Add a 2D data layer that maps two scalar fields to a 2D colormap.

This is a convenience method for creating TwoDataLayer instances.

Parameters ​

id ​

string

Layer identifier

dataX ​

Float32Array<ArrayBufferLike> | number[]

First scalar field (X axis of colormap)

dataY ​

Float32Array<ArrayBufferLike> | number[]

Second scalar field (Y axis of colormap)

colorMap? ​

| ColorMap2DPreset | ColorMap2D = 'confidence'

2D colormap preset name or ColorMap2D instance

config? ​

TwoDataLayerConfig = {}

Layer configuration options

Returns ​

TwoDataLayer

Example ​

typescript
// Visualize effect size vs. confidence
surface.addTwoDataLayer(
  'effect-confidence',
  effectSizeData,
  confidenceData,
  'confidence',
  {
    rangeX: [-2, 2],
    rangeY: [0, 1],
    thresholdY: [0, 0.05]  // Hide low-confidence values
  }
);

addParcelValueLayer() ​

ts
addParcelValueLayer(
   id, 
   parcelData, 
   vertexLabels, 
   colorMap?, 
   config?
): ParcelValueLayer;

Defined in: MultiLayerNeuroSurface.ts:697

Add a parcel-native value layer.

Parcel values are expanded to vertices using the provided per-vertex parcel labels.

Parameters ​

id ​

string

parcelData ​

ParcelData

vertexLabels ​

| number[] | Int32Array<ArrayBufferLike> | Uint32Array<ArrayBufferLike>

colorMap? ​

string = 'viridis'

config? ​

ParcelValueLayerConfig = {}

Returns ​

ParcelValueLayer


getTwoDataLayer() ​

ts
getTwoDataLayer(id): TwoDataLayer | undefined;

Defined in: MultiLayerNeuroSurface.ts:712

Get a TwoDataLayer by ID (type-safe convenience method)

Parameters ​

id ​

string

Returns ​

TwoDataLayer | undefined


removeLayer() ​

ts
removeLayer(id): boolean;

Defined in: MultiLayerNeuroSurface.ts:720

Remove a layer by ID

Parameters ​

id ​

string

Returns ​

boolean


clearLayers() ​

ts
clearLayers(options?): void;

Defined in: MultiLayerNeuroSurface.ts:749

Remove all non-base layers (optionally including base).

Parameters ​

options? ​

ClearLayersOptions = {}

Returns ​

void


updateLayer() ​

ts
updateLayer(id, updates): void;

Defined in: MultiLayerNeuroSurface.ts:764

Update a layer's properties

Parameters ​

id ​

string

updates ​

Record<string, any>

Returns ​

void


updateLayerData() ​

ts
updateLayerData(
   id, 
   data, 
   indices?
): void;

Defined in: MultiLayerNeuroSurface.ts:775

Parameters ​

id ​

string

data ​

Float32Array<ArrayBufferLike> | number[]

indices? ​

number[] | Uint32Array<ArrayBufferLike> | null

Returns ​

void


updateLayerVisibility() ​

ts
updateLayerVisibility(id, visible): void;

Defined in: MultiLayerNeuroSurface.ts:779

Parameters ​

id ​

string

visible ​

boolean

Returns ​

void


getLayer() ​

ts
getLayer(id): Layer | undefined;

Defined in: MultiLayerNeuroSurface.ts:786

Get a layer by ID

Parameters ​

id ​

string

Returns ​

Layer | undefined


setCurvature() ​

ts
setCurvature(curvature, options?): void;

Defined in: MultiLayerNeuroSurface.ts:797

Set curvature data for display as underlay. Creates curvature layer if it doesn't exist.

Parameters ​

curvature ​

Float32Array<ArrayBufferLike> | number[]

Curvature values per vertex

options? ​

Display options (brightness, contrast, smoothness, invert)

brightness? ​

number

contrast? ​

number

smoothness? ​

number

invert? ​

boolean

Returns ​

void


applyStyleBaseColor() ​

ts
applyStyleBaseColor(color): boolean;

Defined in: MultiLayerNeuroSurface.ts:830

Apply a style preset's base colour. The base is recoloured only while it still shows the colour the default or the previous preset gave it; a colour chosen any other way is kept. (Choosing exactly that colour yourself is indistinguishable from not choosing one.) The preset colour is remembered either way, for resetBaseColor. Returns whether the base colour changed.

Parameters ​

color ​

ColorRepresentation

Returns ​

boolean


resetBaseColor() ​

ts
resetBaseColor(): void;

Defined in: MultiLayerNeuroSurface.ts:842

Return the base layer to the colour of the current style preset (or the library default), so later presets recolour it again.

Returns ​

void


getCurvatureLayer() ​

ts
getCurvatureLayer(): CurvatureLayer | undefined;

Defined in: MultiLayerNeuroSurface.ts:856

Get the curvature layer if it exists

Returns ​

CurvatureLayer | undefined


showCurvature() ​

ts
showCurvature(visible): void;

Defined in: MultiLayerNeuroSurface.ts:866

Toggle curvature visibility. When curvature is shown, the base layer is hidden (curvature acts as the underlay). When curvature is hidden, the base layer is shown.

Parameters ​

visible ​

boolean

Returns ​

void


setClipPlane() ​

ts
setClipPlane(
   axis, 
   distance, 
   enabled?, 
   flip?
): void;

Defined in: MultiLayerNeuroSurface.ts:902

Set a clip plane by axis.

Parameters ​

axis ​

ClipAxis

Which axis to clip ('x', 'y', or 'z')

distance ​

number

Distance from origin along axis

enabled? ​

boolean = true

Whether to enable (default: true)

flip? ​

boolean = false

Flip clipping direction (default: false)

Returns ​

void

Example ​

ts
// Clip at x=0 (midline sagittal cut)
surface.setClipPlane('x', 0);

// Clip right hemisphere only
surface.setClipPlane('x', 0, true, true);

enableClipPlane() ​

ts
enableClipPlane(axis): void;

Defined in: MultiLayerNeuroSurface.ts:917

Enable a clip plane.

Parameters ​

axis ​

ClipAxis

Returns ​

void


disableClipPlane() ​

ts
disableClipPlane(axis): void;

Defined in: MultiLayerNeuroSurface.ts:927

Disable a clip plane.

Parameters ​

axis ​

ClipAxis

Returns ​

void


clearClipPlanes() ​

ts
clearClipPlanes(): void;

Defined in: MultiLayerNeuroSurface.ts:937

Clear all clip planes (disable all).

Returns ​

void


getClipPlane() ​

ts
getClipPlane(axis): ClipPlane;

Defined in: MultiLayerNeuroSurface.ts:947

Get a clip plane by axis.

Parameters ​

axis ​

ClipAxis

Returns ​

ClipPlane


getOrderedLayers() ​

ts
getOrderedLayers(): readonly Layer[];

Defined in: MultiLayerNeuroSurface.ts:992

Return the exact bottom-to-top layer order used by compositing.

Returns ​

readonly Layer[]


getLayerOrderDescriptors() ​

ts
getLayerOrderDescriptors(): readonly LayerOrderDescriptor[];

Defined in: MultiLayerNeuroSurface.ts:996

Returns ​

readonly LayerOrderDescriptor[]


validateLayerOrder() ​

ts
validateLayerOrder(ids): LayerOrderResult;

Defined in: MultiLayerNeuroSurface.ts:1001

Validate a complete bottom-to-top order without mutating the surface.

Parameters ​

ids ​

readonly string[]

Returns ​

LayerOrderResult


setLayerOrder() ​

ts
setLayerOrder(ids): LayerOrderResult;

Defined in: MultiLayerNeuroSurface.ts:1008

Atomically set the complete bottom-to-top layer order.

Parameters ​

ids ​

readonly string[]

Returns ​

LayerOrderResult


moveLayer() ​

ts
moveLayer(layerId, destinationIndex): LayerOrderResult;

Defined in: MultiLayerNeuroSurface.ts:1022

Parameters ​

layerId ​

string

destinationIndex ​

number

Returns ​

LayerOrderResult


updateLayers() ​

ts
updateLayers(updates): void;

Defined in: MultiLayerNeuroSurface.ts:1040

Batch update multiple layers

Parameters ​

updates ​

LayerUpdate[]

Returns ​

void


updateColors() ​

ts
updateColors(): void;

Defined in: MultiLayerNeuroSurface.ts:1227

Composite all layers and update mesh colors

Returns ​

void

Overrides ​

NeuroSurface.updateColors


setShading() ​

ts
setShading(options): void;

Defined in: MultiLayerNeuroSurface.ts:1426

Update fragment-level shading (threshold edges, outline, silhouette).

Parameters ​

options ​

SurfaceShadingOptions

Returns ​

void


updateConfig() ​

ts
updateConfig(newConfig): void;

Defined in: MultiLayerNeuroSurface.ts:1575

Update material settings. On the GPU path the compositor's Phong-based shader receives the same Phong properties a CPU material would.

Parameters ​

newConfig ​

Partial<SurfaceConfig>

Returns ​

void

Overrides ​

NeuroSurface.updateConfig


createMesh() ​

ts
createMesh(): Mesh;

Defined in: MultiLayerNeuroSurface.ts:1600

Create mesh with proper material settings

Returns ​

Mesh

Overrides ​

NeuroSurface.createMesh


setCompositingMode() ​

ts
setCompositingMode(useGPU): void;

Defined in: MultiLayerNeuroSurface.ts:1660

Switch compositing mode between CPU and GPU

Parameters ​

useGPU ​

boolean

Returns ​

void


activateConfiguredCompositor() ​

ts
activateConfiguredCompositor(): void;

Defined in: MultiLayerNeuroSurface.ts:1725

Activate the constructor-requested GPU path once a viewer renderer exists.

Returns ​

void


setWideLines() ​

ts
setWideLines(useWide): void;

Defined in: MultiLayerNeuroSurface.ts:1731

Parameters ​

useWide ​

boolean

Returns ​

void


getCompositingMode() ​

ts
getCompositingMode(): "CPU" | "GPU";

Defined in: MultiLayerNeuroSurface.ts:1749

Get current compositing mode

Returns ​

"CPU" | "GPU"


dispose() ​

ts
dispose(): void;

Defined in: MultiLayerNeuroSurface.ts:1771

Dispose of all resources

Returns ​

void

Overrides ​

NeuroSurface.dispose


update() ​

ts
update(property, value): void;

Defined in: classes.ts:517

Parameters ​

property ​

string

value ​

any

Returns ​

void

Inherited from ​

NeuroSurface.update


getPickMetadata() ​

ts
getPickMetadata(_vertexIndex): Record<string, unknown> | null;

Defined in: classes.ts:647

Parameters ​

_vertexIndex ​

number

Returns ​

Record<string, unknown> | null

Inherited from ​

NeuroSurface.getPickMetadata


setVisible() ​

ts
setVisible(visible): void;

Defined in: classes.ts:654

Parameters ​

visible ​

boolean

Returns ​

void

Inherited from ​

NeuroSurface.setVisible


setOpacity() ​

ts
setOpacity(opacity): void;

Defined in: classes.ts:662

Parameters ​

opacity ​

number

Returns ​

void

Inherited from ​

NeuroSurface.setOpacity


setSmoothShading() ​

ts
setSmoothShading(smooth, smoothingAngle?): void;

Defined in: classes.ts:682

Control surface shading style (visual only, doesn't modify geometry)

Parameters ​

smooth ​

boolean

If true, uses smooth shading (interpolated normals). If false, uses flat shading (face normals)

smoothingAngle? ​

number

Optional angle threshold in degrees (0-180). Edges above this angle remain sharp

Returns ​

void

Example ​

javascript
// Enable smooth shading for organic surfaces
surface.setSmoothShading(true);

// Smooth shading with 30° threshold (sharp edges preserved)
surface.setSmoothShading(true, 30);

// Flat shading for faceted/crystalline look
surface.setSmoothShading(false);

Inherited from ​

NeuroSurface.setSmoothShading


applyLaplacianSmoothing() ​

ts
applyLaplacianSmoothing(
   iterations?, 
   lambda?, 
   method?, 
   preserveBoundaries?
): void;

Defined in: classes.ts:718

Apply Laplacian smoothing to the surface vertices (modifies geometry)

Parameters ​

iterations? ​

number = 1

Number of smoothing iterations (1-10). More iterations = smoother surface

lambda? ​

number = 0.5

Smoothing strength (0-1). 0 = no effect, 1 = maximum smoothing per iteration

method? ​

"laplacian" | "taubin" = 'laplacian'

Smoothing algorithm:

  • 'laplacian': Standard smoothing, may shrink surface
  • 'taubin': Alternates shrink/expand to preserve volume
preserveBoundaries? ​

boolean = true

If true, boundary edges remain fixed

Returns ​

void

Example ​

javascript
// Gentle smoothing to reduce noise
surface.applyLaplacianSmoothing(2, 0.3, 'laplacian', true);

// Aggressive smoothing while preserving volume
surface.applyLaplacianSmoothing(5, 0.5, 'taubin', true);

// Smooth including boundaries (may distort edges)
surface.applyLaplacianSmoothing(3, 0.4, 'laplacian', false);

Inherited from ​

NeuroSurface.applyLaplacianSmoothing


createSmoothedCopy() ​

ts
createSmoothedCopy(
   iterations?, 
   lambda?, 
   method?
): SurfaceGeometry;

Defined in: classes.ts:768

Create a smoothed copy of this surface

Parameters ​

iterations? ​

number = 1

Number of smoothing iterations

lambda? ​

number = 0.5

Smoothing factor 0-1

method? ​

"laplacian" | "taubin" = 'laplacian'

'laplacian' or 'taubin'

Returns ​

SurfaceGeometry

A new smoothed surface geometry

Inherited from ​

NeuroSurface.createSmoothedCopy


updateMesh() ​

ts
updateMesh(): Mesh;

Defined in: classes.ts:793

Returns ​

Mesh

Inherited from ​

NeuroSurface.updateMesh

Released under the MIT License.