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