|
@@ -9,7 +9,7 @@ use std::{
|
|
|
use binrw::{BinRead, BinWrite, BinWriterExt};
|
|
|
use clap::{error::ErrorKind, Args, Error, Parser, Subcommand};
|
|
|
use clap_verbosity_flag::{InfoLevel, Verbosity};
|
|
|
-use config::object;
|
|
|
+use config::{hatch, object};
|
|
|
use dialoguer::Confirm;
|
|
|
use diff::Diff;
|
|
|
use env_logger::Target;
|
|
@@ -221,7 +221,13 @@ fn main() {
|
|
|
});
|
|
|
|
|
|
// Process object query
|
|
|
- let layer_idx: usize = args.object_layer.unwrap_or(0);
|
|
|
+ let layer_idx: usize = args.object_layer.unwrap_or_else(|| {
|
|
|
+ (*file.layers_offset)
|
|
|
+ .iter()
|
|
|
+ .find_position(|x| x.objects.len() != 0)
|
|
|
+ .expect("No objects defined in any layer")
|
|
|
+ .0
|
|
|
+ });
|
|
|
let layer: &Layer = file
|
|
|
.layers_offset
|
|
|
.get(layer_idx)
|
|
@@ -248,62 +254,43 @@ fn main() {
|
|
|
let pen: &Pen = pens
|
|
|
.get(pen_idx as usize)
|
|
|
.expect("Invalid pen index in object");
|
|
|
+
|
|
|
+ // Calculate estimated power density if object is hatched
|
|
|
+ let hatch_power: Option<String> = match object {
|
|
|
+ Object::Hatch(hatch) => {
|
|
|
+ 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 hatch_power: u64 =
|
|
|
+ ((1.0 / line_spacing) * power * (1.0 / speed) * frequency * pulse)
|
|
|
+ as u64;
|
|
|
+ Some(hatch_power.to_formatted_string(&Locale::en))
|
|
|
+ }
|
|
|
+ _ => None,
|
|
|
+ };
|
|
|
+
|
|
|
+ // Print info
|
|
|
info!(
|
|
|
- "Layer #{}, Object #{}:\n{}\nPen: #{}: {}",
|
|
|
- layer_idx, obj_idx, object, pen_idx, pen
|
|
|
+ "Layer #{}, Object #{}:\n{}\nPen: #{}: {}{}",
|
|
|
+ layer_idx,
|
|
|
+ obj_idx,
|
|
|
+ object,
|
|
|
+ pen_idx,
|
|
|
+ pen,
|
|
|
+ hatch_power
|
|
|
+ .map_or(String::new(), |p| format!("\nEstimated power density: {p}"))
|
|
|
);
|
|
|
- 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)
|
|
|
- );
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
- // args.object.map(|obj_range| {
|
|
|
-
|
|
|
- // for object_index in obj_range {
|
|
|
- // let object: &Object = layer
|
|
|
- // .objects
|
|
|
- // .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,
|
|
|
- // 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));
|
|
|
- // }
|
|
|
- // }
|
|
|
- // });
|
|
|
}
|
|
|
SubCommands::Apply(args) => {
|
|
|
// Process config
|