|
@@ -9,10 +9,12 @@ 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 dialoguer::Confirm;
|
|
|
use diff::Diff;
|
|
|
use env_logger::Target;
|
|
|
use ezcad::{file::EzCadHeader, layer::Layer, objects::Object, pen::Pen, types::PulseWidth};
|
|
|
+use itertools::Itertools;
|
|
|
use log::{info, trace, warn};
|
|
|
use num_enum::TryFromPrimitive;
|
|
|
use num_format::{Locale, ToFormattedString};
|
|
@@ -219,42 +221,89 @@ fn main() {
|
|
|
});
|
|
|
|
|
|
// Process object query
|
|
|
- args.object.map(|obj_range| {
|
|
|
- warn!("Object origin, width, and height values may be incorrect if object is skewed or rotated");
|
|
|
-
|
|
|
- let layer_index: usize = args.object_layer.unwrap_or(0);
|
|
|
- let layer: &Layer = file
|
|
|
- .layers_offset
|
|
|
- .get(layer_index)
|
|
|
- .expect("Invalid layer index");
|
|
|
-
|
|
|
- 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");
|
|
|
+ let layer_idx: usize = args.object_layer.unwrap_or(0);
|
|
|
+ let layer: &Layer = file
|
|
|
+ .layers_offset
|
|
|
+ .get(layer_idx)
|
|
|
+ .expect("Invalid layer index");
|
|
|
+
|
|
|
+ warn!("Object origin, width, and height values may be incorrect if object is skewed or rotated");
|
|
|
+ let objects: Vec<(usize, &Object)> = if let Some(obj_range) = args.object {
|
|
|
+ obj_range
|
|
|
+ .clone()
|
|
|
+ .zip(
|
|
|
+ layer
|
|
|
+ .objects
|
|
|
+ .get(obj_range)
|
|
|
+ .expect("Invalid object query range")
|
|
|
+ .iter(),
|
|
|
+ )
|
|
|
+ .collect_vec()
|
|
|
+ } else {
|
|
|
+ layer.objects.iter().enumerate().collect_vec()
|
|
|
+ };
|
|
|
+
|
|
|
+ for (obj_idx, object) in objects {
|
|
|
+ let pen_idx: u32 = *object.core().pen;
|
|
|
+ let pen: &Pen = pens
|
|
|
+ .get(pen_idx as usize)
|
|
|
+ .expect("Invalid pen index in object");
|
|
|
+ info!(
|
|
|
+ "Layer #{}, Object #{}:\n{}\nPen: #{}: {}",
|
|
|
+ layer_idx, obj_idx, object, pen_idx, 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!(
|
|
|
- "Layer #{}, Object #{}:\n{}\nPen: #{}: {}",
|
|
|
- layer_index,
|
|
|
- object_index,
|
|
|
- object,
|
|
|
- pen_index,
|
|
|
- pen
|
|
|
+ "Hatch object calculated power: {}",
|
|
|
+ calc_power.to_formatted_string(&Locale::en)
|
|
|
);
|
|
|
- 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
|