use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SpatialRepresentationInfo {
Grid(GridSpatialRepresentation),
Vector(VectorSpatialRepresentation),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GridSpatialRepresentation {
pub number_of_dimensions: usize,
pub axis_dimension_properties: Vec<Dimension>,
pub cell_geometry: CellGeometry,
pub transformation_parameter_availability: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dimension {
pub dimension_name: DimensionName,
pub dimension_size: usize,
pub resolution: Option<f64>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum DimensionName {
Row,
Column,
Vertical,
Track,
CrossTrack,
Line,
Sample,
Time,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum CellGeometry {
Point,
Area,
Voxel,
Stratum,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VectorSpatialRepresentation {
pub topology_level: TopologyLevel,
pub geometric_objects: Vec<GeometricObjects>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum TopologyLevel {
GeometryOnly,
Topology1D,
PlanarGraph,
FullPlanarGraph,
SurfaceGraph,
FullSurfaceGraph,
Topology3D,
FullTopology3D,
Abstract,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeometricObjects {
pub geometric_object_type: GeometricObjectType,
pub geometric_object_count: Option<usize>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum GeometricObjectType {
Complex,
Composite,
Curve,
Point,
Solid,
Surface,
}