diff --git a/src/cmd_kcl.rs b/src/cmd_kcl.rs index 80a25d44..0398f698 100644 --- a/src/cmd_kcl.rs +++ b/src/cmd_kcl.rs @@ -1165,9 +1165,8 @@ impl crate::cmd::Command for CmdKclBoundingBox { // Print the output. let output_unit = self.output_unit; // let UnitLength::Meters.convert_to(UnitLength::Inches, x_meters) - let printable_box = BoundingBox::from_response(data, output_unit); - let format = ctx.format(&self.format)?; - ctx.io.write_output(&format, &printable_box)?; + let printable_box = bounding_box_rows(data, output_unit); + ctx.io.write_output_table_for_vec(&printable_box)?; } else { anyhow::bail!("Unexpected response from engine: {resp:?}"); } @@ -1177,27 +1176,47 @@ impl crate::cmd::Command for CmdKclBoundingBox { } #[derive(Debug, tabled::Tabled, serde::Serialize)] -struct BoundingBox { - center_x: f64, - center_y: f64, - center_z: f64, - distance_x: f64, - distance_y: f64, - distance_z: f64, +#[tabled(rename_all = "PascalCase")] +struct BoundingBoxRow { + property: &'static str, + axis: &'static str, + value: f64, } -impl BoundingBox { - fn from_response(data: &kcmc::output::BoundingBox, output_unit: UnitLength) -> Self { - let mm = UnitLength::Millimeters; - Self { - center_x: mm.convert_to(output_unit, data.center.x), - center_y: mm.convert_to(output_unit, data.center.y), - center_z: mm.convert_to(output_unit, data.center.z), - distance_x: mm.convert_to(output_unit, data.dimensions.x), - distance_y: mm.convert_to(output_unit, data.dimensions.y), - distance_z: mm.convert_to(output_unit, data.dimensions.z), - } - } +fn bounding_box_rows(data: &kcmc::output::BoundingBox, output_unit: UnitLength) -> Vec { + let mm = UnitLength::Millimeters; + vec![ + BoundingBoxRow { + property: "Center", + axis: "x", + value: mm.convert_to(output_unit, data.center.x), + }, + BoundingBoxRow { + property: "Center", + axis: "y", + value: mm.convert_to(output_unit, data.center.y), + }, + BoundingBoxRow { + property: "Center", + axis: "z", + value: mm.convert_to(output_unit, data.center.z), + }, + BoundingBoxRow { + property: "Distance", + axis: "x", + value: mm.convert_to(output_unit, data.dimensions.x), + }, + BoundingBoxRow { + property: "Distance", + axis: "y", + value: mm.convert_to(output_unit, data.dimensions.y), + }, + BoundingBoxRow { + property: "Distance", + axis: "z", + value: mm.convert_to(output_unit, data.dimensions.z), + }, + ] } /// Get the mass of objects in a kcl file. diff --git a/src/iostreams.rs b/src/iostreams.rs index 5b736c39..62e79f0f 100644 --- a/src/iostreams.rs +++ b/src/iostreams.rs @@ -272,7 +272,7 @@ impl IoStreams { pub fn write_output_table_for_vec(&mut self, value: impl IntoIterator) -> Result<()> { let table = tabled::Table::new(value) - .with(tabled::settings::Style::psql()) + .with(tabled::settings::Style::sharp()) .to_string(); writeln!(self.out, "{table}")?; @@ -288,7 +288,7 @@ impl IoStreams { .with(tabled::settings::Alignment::left()) .with(tabled::settings::Alignment::top()), ) - .with(tabled::settings::Style::psql()) + .with(tabled::settings::Style::sharp()) .to_string(); writeln!(self.out, "{table}")?;