Scene3DPick record struct Pro

The answer to one click in a 3D cell, raised by Scene3DView.Picked.

public readonly record struct Scene3DPick
Namespace
ArionUI.Charts3D
Package
ArionUI.Charts3D · dotnet add package ArionUI.Charts3D --prerelease

Constructors

Scene3DPick

public Scene3DPick(Scene3DPickKind Kind, int Index, int Column, long Row, Vector3 Position, ArionModifiers Modifiers, double PassMs, double LatencyMs);

The answer to one click in a 3D cell, raised by Scene3DView.Picked.

Parameters

Kind

What was hit; Scene3DPickKind.None for a miss.

Index

The hit object's number: the point index for a cloud, the lattice index (column + row * columns) for a surface, band + age * bands for a waterfall. -1 for a miss.

Column

Lattice column (surface) or band (waterfall); -1 otherwise.

Row

Lattice row (surface) or absolute line number (waterfall); -1 otherwise. A long, because a waterfall that runs for a year at sixty lines a second has appended more lines than an int can count.

Position

Where the hit object sits in DATA units - the numbers on the axes, not the box's world coordinates.

Modifiers

The keys held at the click, so a consumer can make Ctrl+click ADD to a selection.

PassMs

The id pass alone: the draw and the read of the seven by seven window, GPU-bounded (everything submitted earlier had finished before the clock started, and the read returns only once the pass has).

LatencyMs

From the request to the moment the answer was taken on the UI thread (Scene3DView.Picked is raised right then). It contains three waits: the cell's next frame, which REDRAWS the visible picture before the id pass runs (the release that made the click marks the cell dirty, and a dirty GPU cell is always drawn again - a point cloud serves that redraw from its cached picture, see PointCloudLayer.BaseDraws); the id pass itself (PassMs); and the wait for the next UI tick. 0 on an answer that was not delivered through a view.

Properties

Column

public int Column { get; init; }

Lattice column (surface) or band (waterfall); -1 otherwise.

Index

public int Index { get; init; }

The hit object's number: the point index for a cloud, the lattice index (column + row * columns) for a surface, band + age * bands for a waterfall. -1 for a miss.

IsHit

public bool IsHit { get; }

True when something was hit.

Kind

public Scene3DPickKind Kind { get; init; }

What was hit; Scene3DPickKind.None for a miss.

LatencyMs

public double LatencyMs { get; init; }

From the request to the moment the answer was taken on the UI thread (Scene3DView.Picked is raised right then). It contains three waits: the cell's next frame, which REDRAWS the visible picture before the id pass runs (the release that made the click marks the cell dirty, and a dirty GPU cell is always drawn again - a point cloud serves that redraw from its cached picture, see PointCloudLayer.BaseDraws); the id pass itself (PassMs); and the wait for the next UI tick. 0 on an answer that was not delivered through a view.

Modifiers

public ArionModifiers Modifiers { get; init; }

The keys held at the click, so a consumer can make Ctrl+click ADD to a selection.

PassMs

public double PassMs { get; init; }

The id pass alone: the draw and the read of the seven by seven window, GPU-bounded (everything submitted earlier had finished before the clock started, and the read returns only once the pass has).

Position

public Vector3 Position { get; init; }

Where the hit object sits in DATA units - the numbers on the axes, not the box's world coordinates.

Row

public long Row { get; init; }

Lattice row (surface) or absolute line number (waterfall); -1 otherwise. A long, because a waterfall that runs for a year at sixty lines a second has appended more lines than an int can count.

Methods

Miss

public static Scene3DPick Miss(ArionModifiers modifiers);

A click on nothing.