#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cadmpeg_ir::ids::{BodyId, CoedgeId, EdgeId, FaceId, ShellId, SurfaceId, VertexId};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct EdgeContinuity {
pub id: String,
pub edge: EdgeId,
pub record_index: u32,
pub sense: cadmpeg_ir::topology::Sense,
pub continuity: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct EdgeOwnership {
pub id: String,
pub edge: EdgeId,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner_coedge: Option<CoedgeId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct VertexOwnership {
pub id: String,
pub vertex: VertexId,
pub record_index: u32,
pub owning_edge: EdgeId,
pub endpoint_index: u8,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum FaceContainment {
In,
Out,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct FaceSidedness {
pub id: String,
pub face: FaceId,
pub record_index: u32,
pub native_sense: cadmpeg_ir::topology::Sense,
pub normalized_sense: cadmpeg_ir::topology::Sense,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub containment: Option<FaceContainment>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct TolerantVertexTail {
pub id: String,
pub vertex: VertexId,
pub record_index: u32,
pub leading_tolerances: [f64; 2],
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trailing_field: Option<i64>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub evaluated_unset: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct TolerantEdgeTail {
pub id: String,
pub edge: EdgeId,
pub record_index: u32,
pub entity_revision: i64,
pub trailing_field: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct TolerantCoedgeParameters {
pub id: String,
pub coedge: CoedgeId,
pub record_index: u32,
pub parameter_range: [f64; 2],
#[serde(default)]
pub extension: TolerantCoedgeExtension,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case", tag = "layout")]
pub enum TolerantCoedgeExtension {
#[default]
None,
Reference {
target: Option<i64>,
},
Empty {
target: Option<i64>,
},
EmbeddedCurve {
target: Option<i64>,
#[serde(alias = "flag")]
curve_reversed: bool,
payload_token_count: u32,
parameter_range: Option<[f64; 2]>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct MeshSurfaceSentinel {
pub id: String,
pub surface: SurfaceId,
pub record_index: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum WireSide {
In,
Out,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct WireTopology {
pub id: String,
pub shell: ShellId,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub edges: Vec<EdgeId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub free_vertex: Option<VertexId>,
pub side: WireSide,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct BodyNativeKey {
pub id: String,
pub body: BodyId,
pub record_index: u32,
#[serde(default)]
pub body_ordinal: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_brep: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub asm_body_key: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct TransformHints {
pub id: String,
pub body: BodyId,
pub record_index: u32,
pub rotation: bool,
pub reflection: bool,
pub shear: bool,
}