diff --git a/modeling-cmds/src/convert_client_crate.rs b/modeling-cmds/src/convert_client_crate.rs index 54c12778..7709ad66 100644 --- a/modeling-cmds/src/convert_client_crate.rs +++ b/modeling-cmds/src/convert_client_crate.rs @@ -141,9 +141,13 @@ mod format { InputFormat::Sldprt(sldprt::import::Options { split_closed_faces }) => { kt::InputFormat::Sldprt { split_closed_faces } } - InputFormat::Step(step::import::Options { split_closed_faces }) => { - kt::InputFormat::Step { split_closed_faces } - } + InputFormat::Step(step::import::Options { + coords, + split_closed_faces, + }) => kt::InputFormat::Step { + coords, + split_closed_faces, + }, InputFormat::Stl(stl::import::Options { coords, units }) => kt::InputFormat::Stl { coords: coords.into(), units: units.into(), @@ -168,9 +172,13 @@ mod format { kt::InputFormat::Sldprt { split_closed_faces } => { Self::Sldprt(crate::format::sldprt::import::Options { split_closed_faces }) } - kt::InputFormat::Step { split_closed_faces } => { - Self::Step(crate::format::step::import::Options { split_closed_faces }) - } + kt::InputFormat::Step { + coords, + split_closed_faces, + } => Self::Step(crate::format::step::import::Options { + coords, + split_closed_faces, + }), kt::InputFormat::Stl { coords, units } => Self::Stl(crate::format::stl::import::Options { coords: coords.into(), units: units.into(), diff --git a/modeling-cmds/src/coord.rs b/modeling-cmds/src/coord.rs index d9781873..9ee4e80a 100644 --- a/modeling-cmds/src/coord.rs +++ b/modeling-cmds/src/coord.rs @@ -168,10 +168,13 @@ pub const VULKAN: &System = &System { /// assert_eq!(b, [1.0, -2.0, 3.0]); /// ``` #[inline] -pub fn transform(a: [f32; 3], from: &System, to: &System) -> [f32; 3] { +pub fn transform(a: [T; 3], from: &System, to: &System) -> [T; 3] +where + T: Copy + From + std::ops::Mul, +{ let mut b = a; b[to.forward.axis as usize] = - (from.forward.direction * to.forward.direction) as i32 as f32 * a[from.forward.axis as usize]; - b[to.up.axis as usize] = (from.up.direction * to.up.direction) as i32 as f32 * a[from.up.axis as usize]; + T::from((from.forward.direction * to.forward.direction) as i32) * a[from.forward.axis as usize]; + b[to.up.axis as usize] = T::from((from.up.direction * to.up.direction) as i32) * a[from.up.axis as usize]; b } diff --git a/modeling-cmds/src/format/step.rs b/modeling-cmds/src/format/step.rs index 1f6d61dc..ee7284c0 100644 --- a/modeling-cmds/src/format/step.rs +++ b/modeling-cmds/src/format/step.rs @@ -9,17 +9,33 @@ pub mod import { use super::*; /// Options for importing STEP format. - #[derive(Clone, Debug, Default, Eq, Hash, PartialEq, Serialize, Deserialize, JsonSchema, Display, FromStr)] - #[display("split_closed_faces: {split_closed_faces}")] + #[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, JsonSchema, Display, FromStr)] + #[display("coords: {coords}, split_closed_faces: {split_closed_faces}")] #[serde(default, rename = "StepImportOptions")] #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))] pub struct Options { + /// Co-ordinate system of input data. + /// + /// Defaults to the [KittyCAD co-ordinate system]. + /// + /// [KittyCAD co-ordinate system]: ../coord/constant.KITTYCAD.html + pub coords: coord::System, + /// Splits all closed faces into two open faces. /// /// Defaults to `false` but is implicitly `true` when importing into the engine. pub split_closed_faces: bool, } + + impl Default for Options { + fn default() -> Self { + Self { + coords: *coord::KITTYCAD, + split_closed_faces: false, + } + } + } } /// Export models in STEP format.