namespace EE::UI::Charts

Overview

namespace Charts {

// typedefs

typedef std::variant<TooltipText, TooltipData> TooltipPayload;
typedef std::function<std::optional<TooltipPayload>(const PointTooltipContext&)> PointTooltipProvider;
typedef std::variant<StridedSpan<float>, StridedSpan<double>, LinearSpan> XDataView;
typedef std::variant<StridedSpan<float>, StridedSpan<double>> YDataView;

// enums

enum AxisPosition;
enum DataOrder;
enum LineCap;
enum LineJoin;

// structs

struct ChartPoint;
struct DataDelta;
struct DataRange;
struct IndexRange;
struct LinearSpan;
struct PointTooltipContext;
struct RangeConstraints;
struct ReducedPoint;
struct TooltipData;
struct TooltipField;
struct TooltipText;
struct XYDataChunk;

// classes

class AxisScale;
class AxisViewport;
class ChartAxis;
class ChartModel;
class ImmutableXYDataSource;
class LineSeries;
class LinearScale;
class ModelXYDataSource;
class OwnedXYDataSource;
class RingXYDataSource;

template <typename T>
class StridedSpan;

class UIChart;
class XYDataRead;
class XYDataSource;

// global functions

EE_API SmallVector<double, 16> linearTicks(DataRange range, float pixelLength, float targetSpacing = 80.f);
EE_API String formatNumericTick(double value, double step);
EE_API std::vector<ReducedPoint> reducePixelBuckets(const XYDataRead& read, IndexRange visible, DataRange xRange, size_t pixelWidth);
EE_API void reducePixelBuckets(const XYDataRead& read, IndexRange visible, DataRange xRange, size_t pixelWidth, std::vector<ReducedPoint>& output);

template <typename Object, typename Member>
StridedSpan<Member> memberSpan(std::span<const Object> objects, Member Object::* member);

template <typename X>
DataOrder detectXOrder(StridedSpan<X> xs);

template <typename X, typename Y>
requires(std::is_same_v<X, float>||std::is_same_v<X, double>);

template <typename Object, typename X, typename Y>
requires(std::is_same_v<X, float>||std::is_same_v<X, double>);

EE_API std::optional<DataRange> xExtent(const XYDataRead& read);
EE_API std::optional<DataRange> yExtent(const XYDataRead& read);
EE_API std::optional<DataRange> visibleYExtent(const XYDataRead& read, DataRange xRange);
EE_API size_t lowerBoundX(const XYDataRead& read, double value);
EE_API IndexRange visibleLogicalRange(const XYDataRead& read, double minimum, double maximum);
EE_API ChartPoint pointAt(const XYDataRead& read, size_t logicalIndex);

} // namespace Charts

Detailed Documentation

Global Functions

EE_API SmallVector<double, 16> linearTicks(DataRange range, float pixelLength, float targetSpacing = 80.f)

Nice-number ticks, independent of label formatting and text measurement.

EE_API std::vector<ReducedPoint> reducePixelBuckets(const XYDataRead& read, IndexRange visible, DataRange xRange, size_t pixelWidth)

Reduces an ascending-X visible interval to at most four source samples per pixel bucket. Each point retains its logical index. Invalid values split line connectivity.

EE_API void reducePixelBuckets(const XYDataRead& read, IndexRange visible, DataRange xRange, size_t pixelWidth, std::vector<ReducedPoint>& output)

Writes into a reusable buffer, retaining its capacity across data updates.

template <typename X, typename Y>
requires(std::is_same_v<X, float>||std::is_same_v<X, double>)

Zero-copy shared, separate X/Y arrays. Inputs must be the same length.

template <typename Object, typename X, typename Y>
requires(std::is_same_v<X, float>||std::is_same_v<X, double>)

Zero-copy shared AoS storage with typed member views.

EE_API std::optional<DataRange> xExtent(const XYDataRead& read)

Finite paired values only; NaN and Inf form gaps.

EE_API std::optional<DataRange> visibleYExtent(const XYDataRead& read, DataRange xRange)

Scans only the raw samples in an ascending-X interval.

EE_API size_t lowerBoundX(const XYDataRead& read, double value)

Ascending-X reads only; returns the first index whose X is at least value.

EE_API IndexRange visibleLogicalRange(const XYDataRead& read, double minimum, double maximum)

Ascending-X reads only; includes samples in [minimum, maximum].