Kevin Lee 1 month ago
parent
commit
3680f61a82
1 changed files with 42 additions and 55 deletions
  1. 42 55
      src/main.rs

+ 42 - 55
src/main.rs

@@ -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