|
@@ -12,8 +12,10 @@ use clap_verbosity_flag::{InfoLevel, Verbosity};
|
|
|
use dialoguer::Confirm;
|
|
|
use diff::Diff;
|
|
|
use env_logger::Target;
|
|
|
-use ezcad::{file::EzCadHeader, layer::Layer, objects::Object};
|
|
|
+use ezcad::{file::EzCadHeader, layer::Layer, objects::Object, pen::Pen, types::PulseWidth};
|
|
|
use log::{info, trace, warn};
|
|
|
+use num_enum::TryFromPrimitive;
|
|
|
+use num_format::{Locale, ToFormattedString};
|
|
|
use regex::Regex;
|
|
|
|
|
|
use crate::config::{Config, Operations};
|
|
@@ -186,15 +188,10 @@ fn main() {
|
|
|
);
|
|
|
}
|
|
|
SubCommands::Query(args) => {
|
|
|
+ let pens: &Vec<Pen> = &file.pens_offset.data.pens;
|
|
|
+
|
|
|
// Print info on pens with non-default settings
|
|
|
- for (index, pen) in file
|
|
|
- .pens_offset
|
|
|
- .data
|
|
|
- .pens
|
|
|
- .iter()
|
|
|
- .filter(|x| *x.use_default == 0)
|
|
|
- .enumerate()
|
|
|
- {
|
|
|
+ for (index, pen) in pens.iter().filter(|x| *x.use_default == 0).enumerate() {
|
|
|
trace!("Pen {}: {:#?}", index, pen);
|
|
|
}
|
|
|
|
|
@@ -216,11 +213,7 @@ fn main() {
|
|
|
info!(
|
|
|
"Pen #{}: {}",
|
|
|
pen,
|
|
|
- file.pens_offset
|
|
|
- .data
|
|
|
- .pens
|
|
|
- .get(pen)
|
|
|
- .expect("Invalid pen index")
|
|
|
+ pens.get(pen).expect("Invalid pen index")
|
|
|
);
|
|
|
}
|
|
|
});
|
|
@@ -241,18 +234,25 @@ fn main() {
|
|
|
.get(object_index)
|
|
|
.expect("Invalid object index");
|
|
|
let pen_index: u32 = *object.core().pen;
|
|
|
+ let pen: &Pen = pens.get(pen_index as usize).expect("Invalid pen index in object");
|
|
|
info!(
|
|
|
"Layer #{}, Object #{}:\n{}\nPen: #{}: {}",
|
|
|
layer_index,
|
|
|
object_index,
|
|
|
object,
|
|
|
pen_index,
|
|
|
- file.pens_offset
|
|
|
- .data
|
|
|
- .pens
|
|
|
- .get(pen_index as usize)
|
|
|
- .expect("Invalid pen index in object")
|
|
|
+ pen
|
|
|
);
|
|
|
+ if let Object::Hatch(hatch) = object {
|
|
|
+ let line_spacing: f64 = *hatch.hatch_settings.iter().find(|h| h.enabled.into()).expect("Hatch object does not have enabled settings").line_spacing;
|
|
|
+ let power: f64 = *pen.power;
|
|
|
+ let speed: f64 = *pen.speed;
|
|
|
+ let frequency: f64 = f64::from(*pen.frequency);
|
|
|
+ let pulse: f64 = PulseWidth::try_from_primitive(*pen.pulse_width).expect("Invalid pen pulse width").power_ratio();
|
|
|
+
|
|
|
+ let calc_power: u64 = ((1.0/line_spacing) * power * (1.0/speed) * frequency * pulse) as u64;
|
|
|
+ info!("Hatch object calculated power: {}", calc_power.to_formatted_string(&Locale::en));
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
}
|