Skip to main content

runmat_meshing_core/contracts/
cad.rs

1use serde::{Deserialize, Serialize};
2
3use super::{StageEvidence, TopologyEntityId};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6pub struct CadModel {
7    pub model_id: String,
8    pub unit_scale_to_m: f64,
9    #[serde(default)]
10    pub vertices: Vec<CadVertexContract>,
11    #[serde(default)]
12    pub edges: Vec<CadEdgeContract>,
13    #[serde(default)]
14    pub faces: Vec<CadFaceContract>,
15    #[serde(default)]
16    pub shells: Vec<CadShellContract>,
17    #[serde(default)]
18    pub volumes: Vec<CadVolumeContract>,
19    pub evidence: StageEvidence,
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23pub struct CadVertexContract {
24    pub id: TopologyEntityId,
25    pub coordinates_m: [f64; 3],
26}
27
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
29pub struct CadEdgeContract {
30    pub id: TopologyEntityId,
31    pub vertex_ids: [TopologyEntityId; 2],
32    #[serde(default)]
33    pub adjacent_face_ids: Vec<TopologyEntityId>,
34    #[serde(default)]
35    pub imported_handle: Option<String>,
36    pub length_m: f64,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40pub struct CadFaceContract {
41    pub id: TopologyEntityId,
42    #[serde(default)]
43    pub outer_loop_edge_ids: Vec<TopologyEntityId>,
44    #[serde(default)]
45    pub hole_loop_edge_ids: Vec<Vec<TopologyEntityId>>,
46    #[serde(default)]
47    pub region_ids: Vec<String>,
48    #[serde(default)]
49    pub imported_handle: Option<String>,
50    pub evaluator: CadEvaluatorCapabilities,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54pub struct CadShellContract {
55    pub id: TopologyEntityId,
56    #[serde(default)]
57    pub face_ids: Vec<TopologyEntityId>,
58    pub closed: bool,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
62pub struct CadVolumeContract {
63    pub id: TopologyEntityId,
64    #[serde(default)]
65    pub shell_ids: Vec<TopologyEntityId>,
66    #[serde(default)]
67    pub material_region_ids: Vec<String>,
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
71pub struct CadEvaluatorCapabilities {
72    pub point_evaluation: bool,
73    pub projection: bool,
74    pub normal: bool,
75    pub first_derivatives: bool,
76    pub second_derivatives: bool,
77    pub curvature: bool,
78}