Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 41 additions & 22 deletions src/cmd_kcl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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:?}");
}
Expand All @@ -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<BoundingBoxRow> {
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.
Expand Down
4 changes: 2 additions & 2 deletions src/iostreams.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ impl IoStreams {

pub fn write_output_table_for_vec<T: tabled::Tabled>(&mut self, value: impl IntoIterator<Item = T>) -> Result<()> {
let table = tabled::Table::new(value)
.with(tabled::settings::Style::psql())
.with(tabled::settings::Style::sharp())
.to_string();

writeln!(self.out, "{table}")?;
Expand All @@ -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}")?;
Expand Down
Loading