ifc_lite_processing/scan_proposals/
report.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
10pub enum ProposalClass {
11 IfcWall,
12 IfcSlab,
13 IfcColumn,
14 IfcPipeSegment,
15 IfcFlowSegment,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub enum ProposalBasis {
22 PairedFaces,
24 SingleFace,
26 FloorCeilingPair,
28 Floor,
30 Ceiling,
32 Cylinder,
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub enum DetectionKind {
39 Plane,
40 Cylinder,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct DetectionRef {
48 pub kind: DetectionKind,
49 pub index: u32,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct ProposalFit {
56 pub rms_metres: f64,
58 pub inlier_points: u64,
59 pub inlier_voxels: u64,
60 pub area_square_metres: f64,
63}
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66#[serde(tag = "kind", rename_all = "camelCase")]
67pub enum ProposalGeometry {
68 #[serde(rename_all = "camelCase")]
70 Wall { start: [f64; 3], end: [f64; 3], thickness_metres: f64, height_metres: f64 },
71 #[serde(rename_all = "camelCase")]
74 Slab { outline: Vec<[f64; 3]>, thickness_metres: f64 },
75 #[serde(rename_all = "camelCase")]
77 Column { base: [f64; 3], height_metres: f64, radius_metres: f64 },
78 #[serde(rename_all = "camelCase")]
80 Pipe { start: [f64; 3], end: [f64; 3], radius_metres: f64 },
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct ScanElementProposal {
86 pub id: String,
88 pub ifc_class: ProposalClass,
89 pub confidence: f64,
91 pub basis: ProposalBasis,
92 pub sources: Vec<DetectionRef>,
93 pub fit: ProposalFit,
94 pub geometry: ProposalGeometry,
95}
96
97#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct ScanProposalStats {
100 pub vertical_planes: u32,
101 pub horizontal_planes: u32,
102 pub sloped_planes: u32,
104 pub paired_walls: u32,
105 pub single_face_walls: u32,
106 pub faces_too_small: u32,
108 pub paired_slabs: u32,
109 pub single_slabs: u32,
110 pub slabs_too_small: u32,
112 pub columns: u32,
113 pub pipes: u32,
114}
115
116#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
117#[serde(rename_all = "camelCase")]
118pub struct ScanProposalReport {
119 pub algorithm: String,
120 pub proposals: Vec<ScanElementProposal>,
122 pub transform_scale: f64,
124 pub stats: ScanProposalStats,
125}