runmat_geometry_core/model/
source_geometry.rs1use serde::{Deserialize, Serialize};
2
3use super::{AssemblyNode, MaterialEvidence};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum SourceGeometryKind {
8 Mesh,
9 Cad,
10}
11
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13pub struct SourceGeometry {
14 pub kind: SourceGeometryKind,
15 pub assembly: Option<AssemblyNode>,
16 pub material_evidence: Vec<MaterialEvidence>,
17 #[serde(default, skip_serializing_if = "Vec::is_empty")]
18 pub cad_evaluators: Vec<CadEvaluatorSet>,
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct CadEvaluatorSet {
24 pub evaluator_id: String,
25 pub backend: String,
26 pub format_name: String,
27 pub requires_source_geometry: bool,
28 #[serde(default, skip_serializing_if = "Vec::is_empty")]
29 pub faces: Vec<CadFaceEvaluator>,
30 #[serde(default, skip_serializing_if = "Vec::is_empty")]
31 pub curves: Vec<CadCurveEvaluator>,
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
35#[serde(rename_all = "camelCase")]
36pub struct CadFaceEvaluator {
37 pub evaluator_id: String,
38 pub imported_face_id: u64,
39 pub name: String,
40 pub supports_point_evaluation: bool,
41 pub supports_projection: bool,
42 pub supports_normal: bool,
43 pub supports_derivatives: bool,
44 pub supports_curvature: bool,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub reference_point_m: Option<[f64; 3]>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub reference_unit_normal: Option<[f64; 3]>,
49 #[serde(default, skip_serializing_if = "Vec::is_empty")]
50 pub evaluation_samples: Vec<CadFaceEvaluationSample>,
51}
52
53#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct CadCurveEvaluator {
56 pub evaluator_id: String,
57 pub imported_curve_id: u64,
58 pub name: String,
59 pub supports_point_evaluation: bool,
60 pub supports_projection: bool,
61 pub supports_tangent: bool,
62 pub supports_curvature: bool,
63 #[serde(default, skip_serializing_if = "Vec::is_empty")]
64 pub evaluation_samples: Vec<CadCurveEvaluationSample>,
65}
66
67#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
68#[serde(rename_all = "snake_case")]
69pub enum CadFaceEvaluationSampleSource {
70 BackendQuery,
71 TessellationEstimate,
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
75#[serde(rename_all = "camelCase")]
76pub struct CadFaceEvaluationSample {
77 pub source: CadFaceEvaluationSampleSource,
78 pub point_m: [f64; 3],
79 #[serde(default, skip_serializing_if = "Option::is_none")]
80 pub uv: Option<[f64; 2]>,
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub projected_point_m: Option<[f64; 3]>,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub unit_normal: Option<[f64; 3]>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub projection_error_m: Option<f64>,
87}
88
89#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
90#[serde(rename_all = "snake_case")]
91pub enum CadCurveEvaluationSampleSource {
92 BackendQuery,
93 TessellationEstimate,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
97#[serde(rename_all = "camelCase")]
98pub struct CadCurveEvaluationSample {
99 pub source: CadCurveEvaluationSampleSource,
100 pub parameter: f64,
101 pub point_m: [f64; 3],
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub projected_point_m: Option<[f64; 3]>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub tangent_m: Option<[f64; 3]>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub curvature_1_per_m: Option<f64>,
108 #[serde(default, skip_serializing_if = "Option::is_none")]
109 pub projection_error_m: Option<f64>,
110}