runmat-meshing-core 0.6.0

Deterministic meshing preparation contracts for RunMat
Documentation
use serde::{Deserialize, Serialize};

use super::{StageEvidence, TopologyEntityId};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadModel {
    pub model_id: String,
    pub unit_scale_to_m: f64,
    #[serde(default)]
    pub vertices: Vec<CadVertexContract>,
    #[serde(default)]
    pub edges: Vec<CadEdgeContract>,
    #[serde(default)]
    pub faces: Vec<CadFaceContract>,
    #[serde(default)]
    pub shells: Vec<CadShellContract>,
    #[serde(default)]
    pub volumes: Vec<CadVolumeContract>,
    pub evidence: StageEvidence,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadVertexContract {
    pub id: TopologyEntityId,
    pub coordinates_m: [f64; 3],
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadEdgeContract {
    pub id: TopologyEntityId,
    pub vertex_ids: [TopologyEntityId; 2],
    #[serde(default)]
    pub adjacent_face_ids: Vec<TopologyEntityId>,
    #[serde(default)]
    pub imported_handle: Option<String>,
    pub length_m: f64,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadFaceContract {
    pub id: TopologyEntityId,
    #[serde(default)]
    pub outer_loop_edge_ids: Vec<TopologyEntityId>,
    #[serde(default)]
    pub hole_loop_edge_ids: Vec<Vec<TopologyEntityId>>,
    #[serde(default)]
    pub region_ids: Vec<String>,
    #[serde(default)]
    pub imported_handle: Option<String>,
    pub evaluator: CadEvaluatorCapabilities,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadShellContract {
    pub id: TopologyEntityId,
    #[serde(default)]
    pub face_ids: Vec<TopologyEntityId>,
    pub closed: bool,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CadVolumeContract {
    pub id: TopologyEntityId,
    #[serde(default)]
    pub shell_ids: Vec<TopologyEntityId>,
    #[serde(default)]
    pub material_region_ids: Vec<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct CadEvaluatorCapabilities {
    pub point_evaluation: bool,
    pub projection: bool,
    pub normal: bool,
    pub first_derivatives: bool,
    pub second_derivatives: bool,
    pub curvature: bool,
}