use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::{
base64::Base64Data,
id::ModelingCmdId,
shared::{CurveType, EntityType, ExportFile, PathCommand, Point2d, Point3d},
traits::ModelingCmdOutput,
units,
};
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Export {
pub files: Vec<ExportFile>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct SelectWithPoint {
pub entity_id: Option<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct HighlightSetEntity {
pub entity_id: Option<Uuid>,
pub sequence: Option<u32>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct EntityGetChildUuid {
pub entity_id: Uuid,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct EntityGetNumChildren {
pub num: u32,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct EntityGetParentId {
pub entity_id: Uuid,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct EntityGetAllChildUuids {
pub entity_ids: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct SelectGet {
pub entity_ids: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Solid3dGetAllEdgeFaces {
pub faces: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Solid3dGetAllOppositeEdges {
pub edges: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Solid3dGetOppositeEdge {
pub edge: Uuid,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Solid3dGetNextAdjacentEdge {
pub edge: Option<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Solid3dGetPrevAdjacentEdge {
pub edge: Option<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct GetEntityType {
pub entity_type: EntityType,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct CurveGetControlPoints {
pub control_points: Vec<Point3d>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema, Eq, PartialEq)]
pub struct CurveGetType {
pub curve_type: CurveType,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct MouseClick {
pub entities_modified: Vec<Uuid>,
pub entities_selected: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct TakeSnapshot {
pub contents: Base64Data,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PathGetInfo {
pub segments: Vec<PathSegmentInfo>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PathSegmentInfo {
pub command_id: Option<ModelingCmdId>,
pub command: PathCommand,
pub relative: bool,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PathGetCurveUuidsForVertices {
pub curve_ids: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PathGetVertexUuids {
pub vertex_ids: Vec<Uuid>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct CurveGetEndPoints {
pub start: Point3d<f64>,
pub end: Point3d<f64>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PlaneIntersectAndProject {
pub plane_coordinates: Option<Point2d<f64>>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct ImportFiles {
pub object_id: Uuid,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Mass {
pub mass: f64,
pub output_unit: units::UnitMass,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Volume {
pub volume: f64,
pub output_unit: units::UnitVolume,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Density {
pub density: f64,
pub output_unit: units::UnitDensity,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct SurfaceArea {
pub surface_area: f64,
pub output_unit: units::UnitArea,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct CenterOfMass {
pub center_of_mass: Point3d<f64>,
pub output_unit: units::UnitLength,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct GetSketchModePlane {
pub x_axis: Point3d<f64>,
pub y_axis: Point3d<f64>,
pub z_axis: Point3d<f64>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct EntityGetDistance {
pub min_distance: f64,
pub max_distance: f64,
}
impl<'de> ModelingCmdOutput<'de> for Export {}
impl<'de> ModelingCmdOutput<'de> for SelectWithPoint {}
impl<'de> ModelingCmdOutput<'de> for HighlightSetEntity {}
impl<'de> ModelingCmdOutput<'de> for EntityGetChildUuid {}
impl<'de> ModelingCmdOutput<'de> for EntityGetNumChildren {}
impl<'de> ModelingCmdOutput<'de> for EntityGetParentId {}
impl<'de> ModelingCmdOutput<'de> for EntityGetAllChildUuids {}
impl<'de> ModelingCmdOutput<'de> for EntityGetDistance {}
impl<'de> ModelingCmdOutput<'de> for SelectGet {}
impl<'de> ModelingCmdOutput<'de> for GetEntityType {}
impl<'de> ModelingCmdOutput<'de> for Solid3dGetAllEdgeFaces {}
impl<'de> ModelingCmdOutput<'de> for Solid3dGetAllOppositeEdges {}
impl<'de> ModelingCmdOutput<'de> for Solid3dGetOppositeEdge {}
impl<'de> ModelingCmdOutput<'de> for Solid3dGetPrevAdjacentEdge {}
impl<'de> ModelingCmdOutput<'de> for Solid3dGetNextAdjacentEdge {}
impl<'de> ModelingCmdOutput<'de> for MouseClick {}
impl<'de> ModelingCmdOutput<'de> for CurveGetType {}
impl<'de> ModelingCmdOutput<'de> for CurveGetControlPoints {}
impl<'de> ModelingCmdOutput<'de> for TakeSnapshot {}
impl<'de> ModelingCmdOutput<'de> for PathGetInfo {}
impl<'de> ModelingCmdOutput<'de> for PathGetCurveUuidsForVertices {}
impl<'de> ModelingCmdOutput<'de> for PathGetVertexUuids {}
impl<'de> ModelingCmdOutput<'de> for PlaneIntersectAndProject {}
impl<'de> ModelingCmdOutput<'de> for CurveGetEndPoints {}
impl<'de> ModelingCmdOutput<'de> for ImportFiles {}
impl<'de> ModelingCmdOutput<'de> for Mass {}
impl<'de> ModelingCmdOutput<'de> for Volume {}
impl<'de> ModelingCmdOutput<'de> for Density {}
impl<'de> ModelingCmdOutput<'de> for SurfaceArea {}
impl<'de> ModelingCmdOutput<'de> for CenterOfMass {}
impl<'de> ModelingCmdOutput<'de> for GetSketchModePlane {}
impl<'de> ModelingCmdOutput<'de> for () {}