use super::{
AppearanceRaster, AppearanceSourceRaster, PageAppearancePlan, ScanRegistrationRequest,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct TransferFrame {
pub rotation: [[f64; 3]; 3],
pub source_anchor: [f64; 3],
pub target_anchor: [f64; 3],
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct TransferSourceMesh {
pub mesh_ordinal: u32,
pub positions: Vec<[f64; 3]>,
pub triangles: Vec<[u32; 3]>,
pub uvs: Vec<[f64; 2]>,
pub base_color_factor: [f32; 4],
pub repeat_s: bool,
pub repeat_t: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct MeshTransferRequest {
pub schema: String,
pub source_revision: String,
pub next_express_id: u32,
pub product_ids: Vec<u32>,
pub registration: ScanRegistrationRequest,
pub registration_sha256: String,
pub target_from_ifc_world: TransferFrame,
pub source_mesh: TransferSourceMesh,
pub source_image: AppearanceRaster,
pub source_images: Vec<AppearanceSourceRaster>,
pub texels_per_metre: f64,
pub max_distance_metres: f64,
pub min_normal_dot: f64,
pub ambiguity_distance_metres: f64,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TransferCoverage {
pub samples: u64,
pub observed_samples: u64,
pub centroid_samples: u64,
pub observed_centroid_samples: u64,
pub raster_interior_texels: u64,
pub observed_raster_interior_texels: u64,
pub unknown_distance_samples: u64,
pub unknown_normal_samples: u64,
pub unknown_ambiguous_samples: u64,
pub observed_area_estimate_m2: f64,
pub unknown_area_estimate_m2: f64,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TransferItemCoverage {
pub product_id: u32,
pub geometry_item_id: u32,
#[serde(flatten)]
pub coverage: TransferCoverage,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MeshTransferSummary {
pub prepared_sha256: String,
pub registration_sha256: String,
pub registration: super::ScanRegistrationReport,
pub applicable: bool,
pub coverage: TransferCoverage,
pub items: Vec<TransferItemCoverage>,
pub exclusions: Vec<super::Exclusion>,
pub diagnostics: Vec<String>,
}
#[derive(Debug)]
pub struct MeshTransferPlan {
pub output: Option<PageAppearancePlan>,
pub transfer: MeshTransferSummary,
pub texels_per_metre: f64,
}