#![deny(clippy::disallowed_methods)]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use std::num::NonZeroU32;
use cadmpeg_ir::attributes::AttributeTarget;
use cadmpeg_ir::ids::{BodyId, CoedgeId, EdgeId, FaceId, ShellId, VertexId};
use cadmpeg_ir::math::{Point2, Point3, Vector3};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchCurveLink {
pub id: String,
pub coedge: CoedgeId,
pub sketch_curve_id: i64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub signed_reference: Option<i64>,
pub role: i64,
pub closure: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct PersistentDesignLink {
pub id: String,
pub target: AttributeTarget,
pub design_id: String,
pub entity_kind: i64,
pub design_reference: i64,
pub ordinal: u32,
pub is_current: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct PersistentSubentityTag {
pub id: String,
pub target: AttributeTarget,
pub selector: i64,
pub token: String,
pub design_references: Vec<i64>,
pub ordinal: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct CreationTimestamp {
pub id: String,
pub target: AttributeTarget,
pub record_index: u32,
pub unix_microseconds: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, 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, 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, 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, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum FaceContainment {
In,
Out,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, 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, JsonSchema)]
pub struct TolerantVertexTail {
pub id: String,
pub vertex: VertexId,
pub record_index: u32,
pub leading_tolerances: [f64; 2],
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct TolerantEdgeTail {
pub id: String,
pub edge: EdgeId,
pub record_index: u32,
pub trailing_integers: [i64; 2],
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, 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, 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, JsonSchema)]
pub struct MeshSurfaceSentinel {
pub id: String,
pub surface: cadmpeg_ir::ids::SurfaceId,
pub record_index: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum WireSide {
In,
Out,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, 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, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ConstructionRecipeKind {
Body,
Face,
BoundedFace,
Edge,
Vertex,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ConstructionRecipe {
pub id: String,
pub byte_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub record_index_offset: Option<u64>,
pub kind: ConstructionRecipeKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub design_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub design_id_offset: Option<u64>,
pub recipe_index: u32,
pub record_index: i32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignParameterKind {
User,
Dimension,
Feature,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignParameter {
pub id: String,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub prefix_value: u64,
pub prefix_value_offset: u64,
pub source_ordinal: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner_record_index: Option<u32>,
pub expression: String,
pub expression_offset: u64,
pub source_kind: String,
pub source_kind_offset: u64,
pub kind: DesignParameterKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unit: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unit_offset: Option<u64>,
pub name: String,
pub name_offset: u64,
pub evaluated_value: f64,
pub evaluated_value_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignParameterOwner {
pub id: String,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub scope_record_index: u32,
pub local_ordinal: u32,
pub evaluated_value: f64,
pub evaluated_value_offset: u64,
pub parameter_record_index: u32,
pub owned_ordinal: u32,
pub variant: u8,
pub companion_record_index: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignParameterCompanion {
pub id: String,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub owner_record_index: u32,
#[serde(alias = "opaque_value")]
pub timestamp_micros: u64,
#[serde(alias = "opaque_value_offset")]
pub timestamp_micros_offset: u64,
#[serde(default)]
pub payload_byte_offset: u64,
#[serde(default)]
pub payload_byte_length: u64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub owned_recipe_ids: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionRecipeRecord {
pub id: String,
pub companion_record_index: u32,
pub recipe_ordinal: u32,
pub recipe_id: String,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub prefix_offset: u64,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub prefix_bytes: Vec<u8>,
pub references: Vec<DesignRecipeReference>,
pub program_offset: u64,
pub program: Vec<i32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub matching_edge_operand_ids: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignRecipeReference {
pub selector: i64,
pub selector_offset: u64,
pub token: String,
pub token_offset: u64,
pub design_reference: i64,
pub design_reference_offset: u64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidate_edges: Vec<EdgeId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub alternate_selector_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub alternate_selector_edges: Vec<EdgeId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionLocusPair {
pub id: String,
pub companion_record_index: u32,
pub governing_companion_record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub opaque_index: u32,
pub opaque_index_offset: u64,
pub first_geometry_record_index: u32,
pub first_geometry_reference_offset: u64,
pub first_role: u32,
pub first_role_offset: u64,
pub second_geometry_record_index: u32,
pub second_geometry_reference_offset: u64,
pub second_role: u32,
pub second_role_offset: u64,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionNullLocusPair {
pub id: String,
pub companion_record_index: u32,
pub governing_companion_record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub null_reference_offset: u64,
pub null_role: u32,
pub null_role_offset: u64,
pub geometry_record_index: u32,
pub geometry_reference_offset: u64,
pub geometry_role: u32,
pub geometry_role_offset: u64,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionAnnotationOperand {
pub geometry_record_index: u32,
pub geometry_reference_offset: u64,
pub role: u32,
pub role_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionAnnotationFrame {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub companion_record_index: Option<u32>,
pub governing_companion_record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub operands: Vec<DesignDimensionAnnotationOperand>,
pub entity_genesis: u64,
pub annotation_bytes: Vec<u8>,
pub annotation_byte_offset: u64,
pub governing_owner_record_index: u32,
pub governing_owner_reference_offset: u64,
pub return_members: Vec<u32>,
pub return_member_offsets: Vec<u64>,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
pub owner_reference: u32,
pub owner_reference_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionLocus {
pub geometry_record_index: u32,
pub geometry_reference_offset: u64,
pub role: u32,
pub role_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignDimensionLocusGroup {
pub id: String,
pub companion_record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub loci: Vec<DesignDimensionLocus>,
pub owner_reference: u32,
pub owner_reference_offset: u64,
pub owner_role: u32,
pub owner_role_offset: u64,
pub state: u32,
pub state_offset: u64,
pub constraint_kinds: Vec<SketchConstraintKind>,
pub unknown_constraint_bits: u32,
pub return_members: Vec<u32>,
pub return_member_offsets: Vec<u64>,
pub next_class_tag: String,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignExtrudeOperation {
Join,
Cut,
Intersect,
NewBody,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignExtrudeExtent {
OneSidedDistance,
OneSidedToFace,
TwoSidedDistance,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignExtrudeStart {
ProfilePlane,
OffsetProfilePlane,
FromFace,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignCoilExtent {
RevolutionsHeight,
RevolutionsPitch,
HeightPitch,
Spiral,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignCoilSection {
Circular,
Square,
ExternalTriangle,
InternalTriangle,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignCoilSectionPlacement {
Inside,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case", tag = "primitive")]
pub enum DesignSolidPrimitive {
Sphere {
transform: [[f64; 4]; 4],
transform_offset: u64,
diameter: f64,
diameter_record_index: u32,
diameter_offset: u64,
operation: DesignExtrudeOperation,
operation_offset: u64,
},
Torus {
transform: [[f64; 4]; 4],
transform_offset: u64,
major_diameter: f64,
major_diameter_record_index: u32,
major_diameter_offset: u64,
minor_diameter: f64,
minor_diameter_record_index: u32,
minor_diameter_offset: u64,
operation: DesignExtrudeOperation,
operation_offset: u64,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case", tag = "operation")]
pub enum DesignDirectFaceOperation {
OffsetFaces {
distance: f64,
distance_record_index: u32,
distance_offset: u64,
},
Shell {
thickness: f64,
thickness_record_index: u32,
thickness_offset: u64,
outward: bool,
outward_offset: u64,
},
Thicken {
signed_thickness: f64,
thickness_record_index: u32,
thickness_offset: u64,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignMoveOperation {
pub transform: [[f64; 4]; 4],
pub transform_offset: u64,
pub transform_record_index: u32,
pub form: u32,
pub form_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFixedExtrudeParameters {
pub along_distance: f64,
pub along_distance_record_index: u32,
pub along_distance_offset: u64,
pub taper_angle: f64,
pub taper_angle_record_index: u32,
pub taper_angle_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFixedFilletParameters {
pub tangency_weight: f64,
pub tangency_weight_record_index: u32,
pub tangency_weight_offset: u64,
pub radii: Vec<f64>,
pub radius_record_indexes: Vec<u32>,
pub radius_offsets: Vec<u64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub intermediate_parameters: Vec<f64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub intermediate_parameter_record_indexes: Vec<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub intermediate_parameter_offsets: Vec<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFixedChamferParameters {
pub distance: f64,
pub distance_record_index: u32,
pub distance_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum DesignPathFeatureConstruction {
Revolve {
operation: DesignExtrudeOperation,
operation_offset: u64,
angle: f64,
angle_record_index: u32,
angle_offset: u64,
opposite_angle_record_index: u32,
opposite_angle_offset: u64,
},
Loft {
operation: DesignExtrudeOperation,
operation_offset: u64,
},
Sweep {
operation: DesignExtrudeOperation,
operation_offset: u64,
values: [f64; 6],
record_indexes: [u32; 6],
value_offsets: [u64; 6],
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignParameterScope {
pub id: String,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub kind: String,
pub kind_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_operation: Option<DesignExtrudeOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_operation_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_extent: Option<DesignExtrudeExtent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_extent_offsets: Option<[u64; 2]>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_direction_reversed: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_direction_reversed_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_start: Option<DesignExtrudeStart>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_start_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_operation: Option<DesignExtrudeOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_operation_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_extent: Option<DesignCoilExtent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_extent_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_section: Option<DesignCoilSection>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_section_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_section_placement: Option<DesignCoilSectionPlacement>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_section_placement_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_clockwise: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub coil_clockwise_offset: Option<u64>,
pub feature_ordinal: u32,
pub feature_ordinal_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub history_state_id: Option<i64>,
pub history_state_id_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub previous_history_state_id: Option<i64>,
pub previous_history_state_id_offset: u64,
pub reference_count_offset: u64,
pub reference_members: Vec<u32>,
pub reference_member_offsets: Vec<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub solid_primitive: Option<DesignSolidPrimitive>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub direct_face_operation: Option<DesignDirectFaceOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub move_operation: Option<DesignMoveOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scale_operation: Option<DesignScaleOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub surface_stitch_operation: Option<DesignSurfaceStitchOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_flange_operation: Option<DesignBaseFlangeOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub edge_flange_operation: Option<DesignEdgeFlangeOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hem_operation: Option<DesignHemOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_extrude_parameters: Option<DesignFixedExtrudeParameters>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_fillet_parameters: Option<DesignFixedFilletParameters>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fixed_chamfer_parameters: Option<DesignFixedChamferParameters>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path_feature_construction: Option<DesignPathFeatureConstruction>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub copy_paste_bodies_operation: Option<DesignCopyPasteBodiesOperation>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_feature_construction: Option<DesignBaseFeatureConstruction>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_plane_transform: Option<[[f64; 4]; 4]>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_plane_transform_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_plane_reference: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_plane_reference_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_point_position: Option<[f64; 3]>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub work_point_position_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_profile: Option<DesignSketchProfileOperand>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_flange_profile: Option<DesignSketchProfileOperand>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_suffix: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_reference_offset: Option<u64>,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignSurfaceStitchOperation {
pub gap_tolerance: f64,
pub gap_tolerance_offset: u64,
pub tolerance_record_index: u32,
pub settings_record_index: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBaseFlangeOperation {
pub thickness: f64,
pub thickness_offset: u64,
pub profile_group_record_index: u32,
pub profile_record_index: u32,
pub thickness_record_index: u32,
pub settings_record_index: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeFlangeOperation {
pub edge_wrapper_record_indices: Vec<u32>,
pub edge_group_record_indices: Vec<u32>,
pub edge_operand_record_indices: Vec<u32>,
pub aggregate_group_record_index: u32,
pub aggregate_operand_record_indices: Vec<u32>,
pub height_owner_record_index: u32,
pub angle_owner_record_index: u32,
pub settings_record_index: u32,
pub bend_radius: f64,
pub bend_radius_offset: u64,
pub extent_code: u32,
pub height_datum_code: u32,
pub bend_position_code: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHemOperation {
pub edge_wrapper_record_index: u32,
pub edge_group_record_index: u32,
pub edge_operand_record_index: u32,
pub aggregate_group_record_index: u32,
pub aggregate_operand_record_index: u32,
pub gap_owner_record_index: u32,
pub length_owner_record_index: u32,
pub settings_record_index: u32,
pub bend_radius: f64,
pub bend_radius_offset: u64,
pub form_code: u32,
pub direction_code: u32,
pub is_flipped: bool,
pub bend_position_code: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignScaleOperation {
pub body_group_record_index: u32,
pub center_record_index: u32,
pub uniform_factor: f64,
pub uniform_factor_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignCopyPasteBodiesOperation {
pub body_group_record_index: u32,
pub body_group_class_tag: String,
pub body_group_byte_offset: u64,
pub body_operand_record_indices: Vec<u32>,
pub body_operand_record_offsets: Vec<u64>,
pub relation_record_index: u32,
pub relation_class_tag: String,
pub relation_byte_offset: u64,
pub source_body_entity_suffixes: Vec<u32>,
pub source_body_entity_suffix_offsets: Vec<u64>,
pub copied_body_entity_suffixes: Vec<u32>,
pub copied_body_entity_suffix_offsets: Vec<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBaseFeatureConstruction {
pub body_entity_suffixes: Vec<u64>,
pub body_entity_suffix_offsets: Vec<u64>,
pub body_entity_fields: Vec<[u8; 6]>,
pub body_reference_records: Vec<u32>,
pub body_reference_record_offsets: Vec<u64>,
pub body_reference_fields: Vec<[u8; 6]>,
pub repeated_reference_fields: Vec<[u8; 6]>,
pub metadata_record: u32,
pub metadata_record_offset: u64,
pub metadata_field: [u8; 6],
pub result_records: Vec<u32>,
pub result_record_offsets: Vec<u64>,
pub result_fields: Vec<[u8; 6]>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignSketchProfileOperand {
pub scope_reference_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub asset_id: String,
pub asset_id_offset: u64,
pub entity_id: String,
pub entity_suffix: u64,
pub entity_reference_offset: u64,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignExtrudeSelectionGroup {
pub id: String,
pub scope_record_index: u32,
pub scope_reference_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub member_count_offset: u64,
pub members: Vec<u32>,
pub member_offsets: Vec<u64>,
pub opaque_index: u32,
pub opaque_index_offset: u64,
pub opaque_scalar: f64,
pub opaque_scalar_offset: u64,
pub variant: bool,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignExtrudeOperandRole {
Bodies,
Profile,
Faces,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignExtrudeFaceRole {
Start,
Termination,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignConstructionOperandGroup {
pub id: String,
pub scope_record_index: u32,
pub scope_reference_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub member_count_offset: u64,
pub members: Vec<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub lost_edge_references: Vec<String>,
pub member_offsets: Vec<u64>,
pub identity_record_index: u32,
pub identity_record_offset: u64,
pub role: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_role: Option<DesignExtrudeOperandRole>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extrude_face_role: Option<DesignExtrudeFaceRole>,
pub role_offset: u64,
pub opaque_index: u32,
pub opaque_index_offset: u64,
pub opaque_scalar: f64,
pub opaque_scalar_offset: u64,
pub variant: bool,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignConstructionOperandIdentity {
pub id: String,
pub group_record_index: u32,
pub wrapper_record_indices: Vec<u32>,
pub wrapper_byte_offsets: Vec<u64>,
pub wrapper_class_tags: Vec<String>,
pub following_record_index: u32,
pub following_byte_offset: u64,
pub following_class_tag: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub persistent_identity: Option<DesignConstructionPersistentIdentity>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignConstructionPersistentIdentity {
pub local_id: u64,
pub local_id_offset: u64,
pub asset_id: String,
pub asset_id_offset: u64,
pub context_id: String,
pub context_id_offset: u64,
#[serde(default)]
pub tail_slot_present: bool,
#[serde(default)]
pub tail_slot_offset: u64,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFilletRadiusGroup {
pub id: String,
pub scope_record_index: u32,
pub group_ordinal: u32,
pub group_record_index: u32,
pub edge_operand_record_indices: Vec<u32>,
pub law: DesignFilletRadiusLaw,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tangency_weight_parameter_record_index: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum DesignFilletRadiusLaw {
Constant {
radius_parameter_record_index: u32,
},
Chordal {
chord_length_parameter_record_index: u32,
},
Variable {
start_radius_parameter_record_index: u32,
end_radius_parameter_record_index: u32,
middle_radius_parameter_record_indices: Vec<u32>,
middle_parameter_record_indices: Vec<u32>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignExtrudeSelectionMember {
pub id: String,
pub group_record_index: u32,
pub group_member_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub local_id: u64,
pub local_id_offset: u64,
pub asset_id: String,
pub asset_id_offset: u64,
pub context_id: String,
pub context_id_offset: u64,
#[serde(default)]
pub tail_slot_present: bool,
#[serde(default)]
pub tail_slot_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_geometry: Option<SketchRelationOperand>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub operand_identity_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub historical_entity_kind: Option<AsmHistoricalEntityKind>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub historical_entity_ref: Option<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub historical_state_ids: Vec<i64>,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEntitySelectionOperand {
pub id: String,
pub scope_record_index: u32,
pub group_record_index: u32,
pub group_member_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub asset_id: String,
pub asset_id_offset: u64,
pub context_id: String,
pub context_id_offset: u64,
pub identity_record_index: u32,
pub identity_record_offset: u64,
pub primary_identity: u64,
pub primary_identity_offset: u64,
pub secondary_identity: u64,
pub secondary_identity_offset: u64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub historical_edge_candidates: Vec<DesignEntitySelectionEdgeCandidate>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_edge_slot: Option<i64>,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEntitySelectionEdgeCandidate {
pub identity_ordinal: u32,
pub local_id: u64,
pub historical_entity_kind: AsmHistoricalEntityKind,
pub historical_entity_ref: i64,
pub edge_slots: Vec<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBodyRecipeOperand {
pub id: String,
pub scope_record_index: u32,
pub group_record_index: u32,
pub group_member_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub asset_id: String,
pub asset_id_offset: u64,
pub context_id: String,
pub context_id_offset: u64,
pub references: Vec<DesignBodyRecipeReference>,
pub nested_record_index: u64,
pub nested_record_index_offset: u64,
pub recipe_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_face_slot: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_body_slot: Option<i64>,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBodyRecipeReference {
pub design_reference: u64,
pub design_reference_offset: u64,
pub form: u32,
pub form_offset: u64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidate_faces: Vec<cadmpeg_ir::ids::FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_candidate_faces: Vec<cadmpeg_ir::ids::FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_body_slots: Vec<i64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum AsmHistoricalEntityKind {
Body,
Region,
Shell,
Face,
Loop,
Coedge,
Edge,
Vertex,
Point,
Surface,
Curve,
Pcurve,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeIdentityOperand {
pub id: String,
pub scope_record_index: u32,
pub group_record_index: u32,
pub group_member_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
#[serde(default)]
pub compact_layout: bool,
pub local_id: u64,
pub local_id_offset: u64,
pub asset_id: String,
pub asset_id_offset: u64,
pub context_id: String,
pub context_id_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub historical_entity_kind: Option<AsmHistoricalEntityKind>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub historical_entity_ref: Option<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub historical_state_ids: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub treatment_radius_candidates: Vec<DesignEdgeTreatmentRadiusCandidate>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub transition_edge_candidates: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub resolved_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_edge_slot: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolution_identity_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeOperand {
pub id: String,
pub scope_record_index: u32,
pub scope_reference_ordinal: u32,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub paired_byte_offset: u64,
pub paired_class_tag: String,
pub recipe_record_index: u32,
pub recipe_record_byte_offset: u64,
pub recipe_id: String,
pub recipe_prefix_offset: u64,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub recipe_prefix_bytes: Vec<u8>,
pub recipe_references: Vec<DesignRecipeReference>,
pub recipe_program_offset: u64,
pub recipe_program: Vec<i32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recipe_structure: Option<DesignEdgeRecipeStructure>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub local_topology_references: Option<Vec<NonZeroU32>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub result_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub result_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub terminal_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub terminal_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub deleted_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub updated_boundary_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub treatment_radius_candidates: Vec<DesignEdgeTreatmentRadiusCandidate>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_boundary_edge_contexts: Vec<DesignHistoricalEdgeContext>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub terminal_boundary_edge_contexts: Vec<DesignHistoricalEdgeContext>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub terminal_reference_edge_slots: Vec<Vec<i64>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub recipe_reference_contexts: Vec<DesignEdgeRecipeReferenceContext>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub recipe_selectors: Vec<DesignEdgeRecipeSelectorContext>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recipe_state_id: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_edge_slot: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_axis_origin: Option<Point3>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolved_axis_direction: Option<Vector3>,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeTreatmentRadiusCandidate {
pub edge_slot: i64,
pub radius: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHistoricalFaceSupportContext {
pub active_face_slot: i64,
pub surface_slot: i64,
pub preceding_face_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_face_boundaries: Vec<DesignHistoricalFaceBoundaryContext>,
pub changed_preceding_face_slots: Vec<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeRecipeReferenceContext {
pub reference_ordinal: u32,
pub result_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub result_face_boundaries: Vec<DesignHistoricalFaceBoundaryContext>,
pub result_shared_edge_slots: Vec<i64>,
pub preceding_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_face_boundaries: Vec<DesignHistoricalFaceBoundaryContext>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_support_face_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_support_face_boundaries: Vec<DesignHistoricalFaceBoundaryContext>,
pub shared_edge_slots: Vec<i64>,
pub changed_shared_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_reference_edge_slots: Vec<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHistoricalFaceBoundaryContext {
pub face_slot: i64,
pub loops: Vec<DesignHistoricalFaceLoopContext>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHistoricalFaceLoopContext {
pub loop_slot: i64,
pub coedge_slots: Vec<i64>,
pub edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub vertex_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub point_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub positions: Vec<cadmpeg_ir::math::Point3>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHistoricalEdgeContext {
pub edge_slot: i64,
pub incident_loops: Vec<DesignHistoricalEdgeLoopContext>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignHistoricalEdgeLoopContext {
pub coedge_slot: i64,
pub loop_slot: i64,
pub face_slot: i64,
pub boundary_edge_count: u32,
pub coedge_ordinal: u32,
pub previous_edge_slot: i64,
pub next_edge_slot: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeRecipeSelectorContext {
pub selector: i32,
pub clause_entries: Vec<Option<DesignTopologyRecipeEntry>>,
pub clause_triplet_edge_slots: Vec<Option<[Vec<i64>; 2]>>,
pub incidence_matching_edge_slots: Vec<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unique_incidence_edge_slot: Option<i64>,
pub boundary_count_matching_edge_slots: Vec<i64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEdgeRecipeStructure {
pub root: i32,
pub sides: Vec<DesignTopologyRecipeSide>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignTopologyRecipeSide {
pub field_count: NonZeroU32,
pub header_value: i32,
pub scalars: Vec<i32>,
pub payload_prefix: Vec<i32>,
pub payload_entry_count: u32,
pub entries: Vec<DesignTopologyRecipeEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignTopologyRecipeEntry {
pub selector: i32,
pub boundary_edge_count: NonZeroU32,
pub topology_triplets: [DesignTopologyRecipeTriplet; 2],
#[serde(default, skip_serializing_if = "Option::is_none")]
pub common_incident_edge_ordinal: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DesignTopologyRecipeTriplet {
pub outer: NonZeroU32,
pub middle: u32,
pub vertex_ordinal: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub incident_edge_ordinal: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub incident_side: Option<DesignTopologyIncidentSide>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignTopologyIncidentSide {
Preceding,
Following,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFaceOperand {
pub id: String,
pub scope_record_index: u32,
pub scope_reference_ordinal: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group_record_index: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group_member_ordinal: Option<u32>,
pub record_index: u32,
pub byte_offset: u64,
pub class_tag: String,
pub paired_byte_offset: u64,
pub paired_class_tag: String,
pub recipe_record_index: u32,
pub recipe_record_byte_offset: u64,
pub recipe_id: String,
pub recipe_prefix_offset: u64,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub recipe_prefix_bytes: Vec<u8>,
pub recipe_references: Vec<DesignRecipeReference>,
pub recipe_kind: ConstructionRecipeKind,
pub recipe_program_offset: u64,
pub recipe_program: Vec<i32>,
pub recipe_node_offsets: Vec<u64>,
pub recipe_nodes: Vec<DesignFaceRecipeNode>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub unreferenced_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub alternate_selector_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub preceding_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub changed_candidate_faces: Vec<FaceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub historical_support_contexts: Vec<DesignHistoricalFaceSupportContext>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub resolved_face_slots: Vec<i64>,
pub next_record_index: u32,
pub next_byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFaceRecipeNode {
pub byte_offset: u64,
pub end_byte_offset: u64,
pub program: Vec<i32>,
pub recipe_structure: Option<DesignFaceRecipeStructure>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignFaceRecipeStructure {
pub root: i32,
pub prelude: [i32; 2],
pub sides: [DesignTopologyRecipeSide; 2],
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignSketchPlacement {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scope_record_index: Option<u32>,
pub entity_id: String,
pub entity_suffix: u64,
pub byte_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub frame_length: u64,
pub transform: [[f64; 4]; 4],
#[serde(default, skip_serializing_if = "Option::is_none")]
pub transform_offset: Option<u64>,
pub paired_class_tag: String,
pub paired_byte_offset: u64,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub member_run_head: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum PersistentReferenceKind {
Point,
CurvePrimary,
CurveSecondary,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct PersistentReference {
pub id: String,
pub byte_offset: u64,
pub value_offset: u32,
pub kind: PersistentReferenceKind,
pub value: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct LostEdgeReference {
pub id: String,
pub record_byte_offset: u64,
pub class_tag_offset: u64,
pub class_tag: String,
pub record_index: u32,
pub record_index_offset: u64,
pub byte_offset: u64,
pub next_byte_offset: u64,
pub next_class_tag: String,
pub next_record_index: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignMaterialAssignment {
pub id: String,
pub asm_body_key: u64,
pub asm_body_key_offset: u64,
pub entity_suffix: u64,
pub entity_suffix_offset: u64,
pub entity_id: String,
pub entity_id_offset: u64,
pub visual_guid: String,
pub visual_guid_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub physical_token: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub physical_token_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visual_preset: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visual_preset_offset: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignObjectKind {
Fusion,
Body,
Component,
Geometry,
Sketch,
Dimension,
Scene,
EntityTracking,
CommonData,
Other(String),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignConfiguration {
pub id: String,
pub entry_name: String,
pub kind: DesignConfigurationKind,
pub payload: serde_json::Value,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DesignConfigurationKind {
Table,
Rule,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignObject {
pub id: String,
pub byte_offset: u64,
pub kind: DesignObjectKind,
pub entity_ids: Vec<u64>,
pub entity_id_offsets: Vec<u64>,
pub self_guid: String,
pub self_guid_offset: u64,
#[serde(default)]
pub zero_run_length: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent_guid: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent_guid_offset: Option<u64>,
pub revision: u32,
pub revision_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignEntityHeader {
pub id: String,
pub byte_offset: u64,
pub entity_suffix: u64,
pub entity_id: String,
pub class_tag: String,
pub optional_slot_present: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub object_kind: Option<DesignObjectKind>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub record_reference: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub record_reference_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub declared_reference_count: Option<u32>,
#[serde(default)]
pub reference_indices: Vec<u32>,
#[serde(default)]
pub reference_offsets: Vec<u64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub member_indices: Vec<u32>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub member_offsets: Vec<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignRecordHeader {
pub id: String,
pub record_index: u32,
pub class_tag: String,
pub byte_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchRelation {
pub id: String,
pub record_index: u32,
pub class_tag: String,
pub byte_offset: u64,
pub state_offset: u32,
pub owner_reference: u32,
#[serde(default)]
pub owner_entity_id: String,
#[serde(default)]
pub auxiliary_references: Vec<u32>,
#[serde(default)]
pub auxiliary_reference_offsets: Vec<u32>,
pub members: Vec<u32>,
#[serde(default)]
pub resolved_members: Vec<SketchRelationOperand>,
#[serde(default)]
pub member_offsets: Vec<u32>,
#[serde(default)]
pub owner_reference_offset: u32,
pub state: u64,
#[serde(default)]
pub constraint_kinds: Vec<SketchConstraintKind>,
pub unknown_constraint_bits: u64,
#[serde(default)]
pub member_roles: Vec<u32>,
#[serde(default)]
pub entity_genesis: Option<u64>,
#[serde(default)]
pub pattern: Option<SketchPatternDefinition>,
pub return_members: Vec<u32>,
#[serde(default)]
pub resolved_return_members: Vec<SketchRelationOperand>,
#[serde(default)]
pub return_member_offsets: Vec<u32>,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub raw_bytes: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum SketchRelationOperand {
Point {
record_index: u32,
persistent_id: u64,
},
Curve {
record_index: u32,
primary_id: u64,
secondary_id: u64,
},
Surface {
record_index: u32,
persistent_id: u64,
},
Record {
record_index: u32,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum SketchConstraintKind {
Coincident,
Colinear,
Concentric,
EqualLength,
Parallel,
Perpendicular,
Horizontal,
Vertical,
Tangent,
Curvature,
Symmetry,
Equal,
Midpoint,
Polygon,
Offset,
SplineGroup,
CircularPattern,
RectangularPattern,
TextFrame,
TextPath,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum SketchPatternDefinition {
Circular {
angle_parameter: u32,
count_parameter: u32,
evaluated_angle: f64,
evaluated_count: u32,
},
Rectangular {
directions: [SketchPatternDirection; 2],
},
TextFrame {
text_reference: u32,
},
TextPath {
text_reference: u32,
glyph_transforms: Vec<[[f64; 4]; 4]>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchPatternDirection {
pub evaluated_count: u32,
pub count_parameter: u32,
pub direction: [f64; 3],
pub evaluated_distance: f64,
pub distance_parameter: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchText {
pub id: String,
pub record_index: u32,
pub owner_reference: u32,
pub class_tag: String,
pub byte_offset: u64,
pub entity_genesis: u64,
pub persistent_id: u64,
pub base_id: u64,
pub text: String,
pub font_family: String,
pub height: f64,
pub width_factor: f64,
pub first_reference: u32,
pub second_reference: u32,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub raw_bytes: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchPoint {
pub id: String,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner_reference: Option<u32>,
pub class_tag: String,
pub byte_offset: u64,
pub coordinate_offset: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_genesis: Option<u64>,
pub persistent_id: u64,
pub paired_reference: u32,
pub coordinates: Point2,
#[serde(with = "cadmpeg_ir::bytes")]
#[schemars(with = "String")]
pub raw_bytes: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchCurveIdentity {
pub id: String,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner_reference: Option<u32>,
pub class_tag: String,
pub byte_offset: u64,
pub geometry_offset: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_genesis: Option<u64>,
pub primary_id: u64,
pub secondary_id: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub geometry: Option<SketchCurveGeometry>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SketchSurface {
pub id: String,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owner_reference: Option<u32>,
pub class_tag: String,
pub byte_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub entity_genesis: Option<u64>,
pub persistent_id: u64,
pub u_degree: u32,
pub v_degree: u32,
pub u_knots: Vec<f64>,
pub v_knots: Vec<f64>,
pub control_points: Vec<Vec<Point3>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum SketchCurveGeometry {
Line {
start: Point3,
end: Point3,
direction: Vector3,
normal: Vector3,
},
Arc {
center: Point3,
normal: Vector3,
reference_direction: Vector3,
radius: f64,
start_angle: f64,
end_angle: f64,
},
Nurbs {
#[serde(default, skip_serializing_if = "Option::is_none")]
carrier_reference: Option<u64>,
subtype_class_tag: String,
subtype_record_index: u32,
degree: u32,
fit_tolerance: f64,
scalar_width: u32,
knots: Vec<f64>,
weights: Vec<f64>,
control_points: Vec<Point3>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBodyMember {
pub id: String,
pub byte_offset: u64,
pub entity_suffix: u64,
pub flags: u16,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBodyBounds {
pub id: String,
pub entity_suffix: u64,
pub entity_byte_offset: u64,
pub record_indices: [u32; 3],
pub record_byte_offsets: [u64; 3],
pub value_byte_offsets: [u64; 3],
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub body_binding_ids: Vec<String>,
pub maximum: Point3,
pub minimum: Point3,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct DesignBodyBinding {
pub id: String,
pub stream: String,
pub pair_count: u32,
pub pair_ordinal: u32,
pub asm_body_key: u64,
pub asm_body_key_offset: u64,
pub entity_suffix: u64,
pub entity_suffix_offset: u64,
pub blob_name: String,
pub blob_name_offset: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub body: Option<BodyId>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct BodyVisibility {
pub id: String,
pub body: BodyId,
pub stream: String,
pub byte_offset: u64,
pub asm_body_key_offset: u64,
pub asm_body_key: u64,
pub entity_suffix: u64,
pub visible: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, 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, JsonSchema)]
pub struct TransformHints {
pub id: String,
pub body: BodyId,
pub record_index: u32,
pub rotation: bool,
pub reflection: bool,
pub shear: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ActEntity {
pub id: String,
pub record_index: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table_record_index_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub channel_record_index_offset: Option<u64>,
pub entity_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub table_entity_id_offset: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub channel_entity_id_offset: Option<u64>,
pub in_table: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub channel_class_tag: Option<String>,
#[serde(default)]
pub channels: BTreeMap<String, String>,
#[serde(default)]
pub channel_guid_offsets: BTreeMap<String, u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ActGuid {
pub id: String,
pub byte_offset: u64,
pub guid_offset: u64,
pub ordinal: u32,
pub guid: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct ActRootComponent {
pub id: String,
pub byte_offset: u64,
pub record_index: u32,
pub record_index_offset: u64,
pub class_tag: String,
pub instance_root_record: u32,
pub instance_root_record_offset: u64,
pub components_root_record: u32,
pub components_root_record_offset: u64,
pub registry_flag: u32,
pub registry_flag_offset: u64,
pub entity_id: String,
pub entity_id_offset: u64,
pub display_name: String,
pub display_name_offset: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct XrefDesign {
pub id: String,
pub ordinal: u32,
pub file_version: i64,
pub target_file_name: String,
pub display_name: String,
pub lineage_urn: String,
pub version_urn: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct XrefReference {
pub id: String,
pub ordinal: u32,
#[serde(default)]
pub occurrence_ordinal: u32,
pub from: String,
pub relative_path: String,
pub neutron_role: String,
pub neutron_data: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub transform: Option<[[f64; 4]; 4]>,
}