Shared, renderer-agnostic data layer for Immersive Data Analytics: mesh vertices (GeometryVertex), paths, FITS/CSV readers, and a canonical plotting model used by the server and client.
PlottableEntity:x,y,z;scaleX/Y/Z; optionalmeshPath(empty ⇒ app uses a default primitive such as a cube);PlotColor(RGBA);PlotRotationquaternionw, x, y, z(identity1,0,0,0); velocityvx,vy,vz; optionalnameandattributes(KEY=VALstrings for metadata / network).PlotIngestResult:entities[]+PlotVariableDisplayState(column names, axis indices, etc.) for client axis remapping.
Quaternion layout matches JSON / EntityData.rotation in ida-network-protocol: four floats in w, x, y, z order.
Prefer adding strategies here, not new per-dataset modules in the server:
| Function | Role |
|---|---|
ingestGenericTabular |
CSV/TSV via CSVReader, X/Y/Z columns by name or random numeric columns |
ingestOnlineRetail, ingestStarCatalogueCsv, ingestTycho2Dat, ingestCovtype |
Presets kept for backward-compatible paths |
ingestFitsMiddleSlice |
One 2D slice of a FITS cube as point markers |
ingestHorizonsEphemerisText |
JPL Horizons vector dump → plottables |
Apps map PlotIngestResult.entities to ECS/rendering (see server plot_spawn.d: quaternion → euler for RotationComponent at the boundary).
- New file format: add a loader under
source/ida/data/, returnGeometryVertex[]/indices or pushPlottableEntitybuilders; export fromida/data/package.d. - New tabular preset: add a function in
ingest.d(or a small submodule) that constructsPlottableEntity[]; avoid duplicatingCSVReaderlogic. - Math:
ida.data.quat_mathprovides euler ↔ quaternion helpers for apps that still store euler in ECS.
dub buildDdoc: see module comments in source/ida/data/package.d and public symbols in each submodule.