diff --git a/src/app/mod.rs b/src/app/mod.rs index a7d126f2c..e638ec2c7 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -391,6 +391,53 @@ pub(super) struct OpenCADStudio { ds_dimtdec: String, ds_dimtfac: String, ds_annotative: bool, + // Lines (colors / lineweights / fixed-length extension) + ds_dimclrd: String, + ds_dimlwd: String, + ds_dimclre: String, + ds_dimlwe: String, + ds_dimfxl: String, + ds_dimfxlon: bool, + // Symbols & Arrows + ds_dimsah: bool, + ds_dimarcsym: String, + ds_dimjogang: String, + // Text + ds_dimclrt: String, + ds_dimjust: String, + ds_dimtvp: String, + ds_dimtfill: String, + ds_dimtfillclr: String, + ds_dimtxtdirection: bool, + // Fit + ds_dimatfit: String, + ds_dimtix: bool, + ds_dimsoxd: bool, + ds_dimtmove: String, + ds_dimupt: bool, + ds_dimtofl: bool, + ds_dimfit: String, + // Primary units + ds_dimdsep: String, + ds_dimrnd: String, + ds_dimzin: String, + ds_dimfrac: String, + ds_dimaunit: String, + ds_dimadec: String, + ds_dimazin: String, + // Alternate units + ds_dimalt: bool, + ds_dimaltf: String, + ds_dimaltd: String, + ds_dimaltu: String, + ds_dimalttd: String, + ds_dimaltrnd: String, + ds_dimapost: String, + ds_dimaltz: String, + ds_dimalttz: String, + // Tolerances (extra) + ds_dimtolj: String, + ds_dimtzin: String, } /// What triggered the "unsaved changes" dialog. @@ -434,6 +481,46 @@ pub enum DsField { Dimtdec, Dimtfac, Annotative, + Dimclrd, + Dimlwd, + Dimclre, + Dimlwe, + Dimfxl, + Dimfxlon, + Dimsah, + Dimarcsym, + Dimjogang, + Dimclrt, + Dimjust, + Dimtvp, + Dimtfill, + Dimtfillclr, + Dimtxtdirection, + Dimatfit, + Dimtix, + Dimsoxd, + Dimtmove, + Dimupt, + Dimtofl, + Dimfit, + Dimdsep, + Dimrnd, + Dimzin, + Dimfrac, + Dimaunit, + Dimadec, + Dimazin, + Dimalt, + Dimaltf, + Dimaltd, + Dimaltu, + Dimalttd, + Dimaltrnd, + Dimapost, + Dimaltz, + Dimalttz, + Dimtolj, + Dimtzin, } #[derive(Debug, Clone)] @@ -1105,6 +1192,46 @@ impl OpenCADStudio { ds_dimtdec: "2".to_string(), ds_dimtfac: "1".to_string(), ds_annotative: false, + ds_dimclrd: "0".to_string(), + ds_dimlwd: "-2".to_string(), + ds_dimclre: "0".to_string(), + ds_dimlwe: "-2".to_string(), + ds_dimfxl: "1".to_string(), + ds_dimfxlon: false, + ds_dimsah: false, + ds_dimarcsym: "0".to_string(), + ds_dimjogang: "45".to_string(), + ds_dimclrt: "0".to_string(), + ds_dimjust: "0".to_string(), + ds_dimtvp: "0".to_string(), + ds_dimtfill: "0".to_string(), + ds_dimtfillclr: "0".to_string(), + ds_dimtxtdirection: false, + ds_dimatfit: "3".to_string(), + ds_dimtix: false, + ds_dimsoxd: false, + ds_dimtmove: "0".to_string(), + ds_dimupt: false, + ds_dimtofl: false, + ds_dimfit: "3".to_string(), + ds_dimdsep: "46".to_string(), + ds_dimrnd: "0".to_string(), + ds_dimzin: "0".to_string(), + ds_dimfrac: "0".to_string(), + ds_dimaunit: "0".to_string(), + ds_dimadec: "0".to_string(), + ds_dimazin: "0".to_string(), + ds_dimalt: false, + ds_dimaltf: "25.4".to_string(), + ds_dimaltd: "2".to_string(), + ds_dimaltu: "2".to_string(), + ds_dimalttd: "2".to_string(), + ds_dimaltrnd: "0".to_string(), + ds_dimapost: String::new(), + ds_dimaltz: "0".to_string(), + ds_dimalttz: "0".to_string(), + ds_dimtolj: "1".to_string(), + ds_dimtzin: "0".to_string(), }; app.sync_ribbon_layers(); app diff --git a/src/app/update.rs b/src/app/update.rs index 0c2742bc8..3faa74218 100644 --- a/src/app/update.rs +++ b/src/app/update.rs @@ -6517,6 +6517,46 @@ impl OpenCADStudio { self.ds_dimtdec = format!("{}", ds.dimtdec); self.ds_dimtfac = format!("{}", ds.dimtfac); self.ds_annotative = ds.annotative; + self.ds_dimclrd = format!("{}", ds.dimclrd); + self.ds_dimlwd = format!("{}", ds.dimlwd); + self.ds_dimclre = format!("{}", ds.dimclre); + self.ds_dimlwe = format!("{}", ds.dimlwe); + self.ds_dimfxl = format!("{}", ds.dimfxl); + self.ds_dimfxlon = ds.dimfxlon; + self.ds_dimsah = ds.dimsah; + self.ds_dimarcsym = format!("{}", ds.dimarcsym); + self.ds_dimjogang = format!("{}", ds.dimjogang.to_degrees()); + self.ds_dimclrt = format!("{}", ds.dimclrt); + self.ds_dimjust = format!("{}", ds.dimjust); + self.ds_dimtvp = format!("{}", ds.dimtvp); + self.ds_dimtfill = format!("{}", ds.dimtfill); + self.ds_dimtfillclr = format!("{}", ds.dimtfillclr); + self.ds_dimtxtdirection = ds.dimtxtdirection; + self.ds_dimatfit = format!("{}", ds.dimatfit); + self.ds_dimtix = ds.dimtix; + self.ds_dimsoxd = ds.dimsoxd; + self.ds_dimtmove = format!("{}", ds.dimtmove); + self.ds_dimupt = ds.dimupt; + self.ds_dimtofl = ds.dimtofl; + self.ds_dimfit = format!("{}", ds.dimfit); + self.ds_dimdsep = format!("{}", ds.dimdsep); + self.ds_dimrnd = format!("{}", ds.dimrnd); + self.ds_dimzin = format!("{}", ds.dimzin); + self.ds_dimfrac = format!("{}", ds.dimfrac); + self.ds_dimaunit = format!("{}", ds.dimaunit); + self.ds_dimadec = format!("{}", ds.dimadec); + self.ds_dimazin = format!("{}", ds.dimazin); + self.ds_dimalt = ds.dimalt; + self.ds_dimaltf = format!("{}", ds.dimaltf); + self.ds_dimaltd = format!("{}", ds.dimaltd); + self.ds_dimaltu = format!("{}", ds.dimaltu); + self.ds_dimalttd = format!("{}", ds.dimalttd); + self.ds_dimaltrnd = format!("{}", ds.dimaltrnd); + self.ds_dimapost = ds.dimapost.clone(); + self.ds_dimaltz = format!("{}", ds.dimaltz); + self.ds_dimalttz = format!("{}", ds.dimalttz); + self.ds_dimtolj = format!("{}", ds.dimtolj); + self.ds_dimtzin = format!("{}", ds.dimtzin); } /// Write edit buffers back into the selected dim style document entry. @@ -6569,6 +6609,48 @@ impl OpenCADStudio { ds.dimpost = self.ds_dimpost.clone(); ds.dimtxsty = self.ds_dimtxsty.clone(); ds.annotative = self.ds_annotative; + set_i16!(dimclrd, self.ds_dimclrd); + set_i16!(dimlwd, self.ds_dimlwd); + set_i16!(dimclre, self.ds_dimclre); + set_i16!(dimlwe, self.ds_dimlwe); + set_f64!(dimfxl, self.ds_dimfxl); + set_i16!(dimarcsym, self.ds_dimarcsym); + set_i16!(dimclrt, self.ds_dimclrt); + set_i16!(dimjust, self.ds_dimjust); + set_f64!(dimtvp, self.ds_dimtvp); + set_i16!(dimtfill, self.ds_dimtfill); + set_i16!(dimtfillclr, self.ds_dimtfillclr); + set_i16!(dimatfit, self.ds_dimatfit); + set_i16!(dimtmove, self.ds_dimtmove); + set_i16!(dimfit, self.ds_dimfit); + set_i16!(dimdsep, self.ds_dimdsep); + set_f64!(dimrnd, self.ds_dimrnd); + set_i16!(dimzin, self.ds_dimzin); + set_i16!(dimfrac, self.ds_dimfrac); + set_i16!(dimaunit, self.ds_dimaunit); + set_i16!(dimadec, self.ds_dimadec); + set_i16!(dimazin, self.ds_dimazin); + set_f64!(dimaltf, self.ds_dimaltf); + set_i16!(dimaltd, self.ds_dimaltd); + set_i16!(dimaltu, self.ds_dimaltu); + set_i16!(dimalttd, self.ds_dimalttd); + set_f64!(dimaltrnd, self.ds_dimaltrnd); + set_i16!(dimaltz, self.ds_dimaltz); + set_i16!(dimalttz, self.ds_dimalttz); + set_i16!(dimtolj, self.ds_dimtolj); + set_i16!(dimtzin, self.ds_dimtzin); + if let Ok(v) = self.ds_dimjogang.trim().parse::() { + ds.dimjogang = v.to_radians(); + } + ds.dimfxlon = self.ds_dimfxlon; + ds.dimsah = self.ds_dimsah; + ds.dimtxtdirection = self.ds_dimtxtdirection; + ds.dimtix = self.ds_dimtix; + ds.dimsoxd = self.ds_dimsoxd; + ds.dimupt = self.ds_dimupt; + ds.dimtofl = self.ds_dimtofl; + ds.dimalt = self.ds_dimalt; + ds.dimapost = self.ds_dimapost.clone(); self.tabs[tab].dirty = true; self.command_line .push_output(&format!("DimStyle '{}' updated.", self.dimstyle_selected)); @@ -6598,6 +6680,38 @@ impl OpenCADStudio { Dimtm => self.ds_dimtm = val, Dimtdec => self.ds_dimtdec = val, Dimtfac => self.ds_dimtfac = val, + Dimclrd => self.ds_dimclrd = val, + Dimlwd => self.ds_dimlwd = val, + Dimclre => self.ds_dimclre = val, + Dimlwe => self.ds_dimlwe = val, + Dimfxl => self.ds_dimfxl = val, + Dimarcsym => self.ds_dimarcsym = val, + Dimjogang => self.ds_dimjogang = val, + Dimclrt => self.ds_dimclrt = val, + Dimjust => self.ds_dimjust = val, + Dimtvp => self.ds_dimtvp = val, + Dimtfill => self.ds_dimtfill = val, + Dimtfillclr => self.ds_dimtfillclr = val, + Dimatfit => self.ds_dimatfit = val, + Dimtmove => self.ds_dimtmove = val, + Dimfit => self.ds_dimfit = val, + Dimdsep => self.ds_dimdsep = val, + Dimrnd => self.ds_dimrnd = val, + Dimzin => self.ds_dimzin = val, + Dimfrac => self.ds_dimfrac = val, + Dimaunit => self.ds_dimaunit = val, + Dimadec => self.ds_dimadec = val, + Dimazin => self.ds_dimazin = val, + Dimaltf => self.ds_dimaltf = val, + Dimaltd => self.ds_dimaltd = val, + Dimaltu => self.ds_dimaltu = val, + Dimalttd => self.ds_dimalttd = val, + Dimaltrnd => self.ds_dimaltrnd = val, + Dimapost => self.ds_dimapost = val, + Dimaltz => self.ds_dimaltz = val, + Dimalttz => self.ds_dimalttz = val, + Dimtolj => self.ds_dimtolj = val, + Dimtzin => self.ds_dimtzin = val, // Bool fields — no-op for string edit _ => {} } @@ -6616,6 +6730,14 @@ impl OpenCADStudio { Dimtol => self.ds_dimtol = !self.ds_dimtol, Dimlim => self.ds_dimlim = !self.ds_dimlim, Annotative => self.ds_annotative = !self.ds_annotative, + Dimfxlon => self.ds_dimfxlon = !self.ds_dimfxlon, + Dimsah => self.ds_dimsah = !self.ds_dimsah, + Dimtxtdirection => self.ds_dimtxtdirection = !self.ds_dimtxtdirection, + Dimtix => self.ds_dimtix = !self.ds_dimtix, + Dimsoxd => self.ds_dimsoxd = !self.ds_dimsoxd, + Dimupt => self.ds_dimupt = !self.ds_dimupt, + Dimtofl => self.ds_dimtofl = !self.ds_dimtofl, + Dimalt => self.ds_dimalt = !self.ds_dimalt, _ => {} } } diff --git a/src/app/view.rs b/src/app/view.rs index 1fde48cf4..ecbdeeb41 100644 --- a/src/app/view.rs +++ b/src/app/view.rs @@ -216,6 +216,46 @@ impl OpenCADStudio { dimtdec: &self.ds_dimtdec, dimtfac: &self.ds_dimtfac, annotative: self.ds_annotative, + dimclrd: &self.ds_dimclrd, + dimlwd: &self.ds_dimlwd, + dimclre: &self.ds_dimclre, + dimlwe: &self.ds_dimlwe, + dimfxl: &self.ds_dimfxl, + dimfxlon: self.ds_dimfxlon, + dimsah: self.ds_dimsah, + dimarcsym: &self.ds_dimarcsym, + dimjogang: &self.ds_dimjogang, + dimclrt: &self.ds_dimclrt, + dimjust: &self.ds_dimjust, + dimtvp: &self.ds_dimtvp, + dimtfill: &self.ds_dimtfill, + dimtfillclr: &self.ds_dimtfillclr, + dimtxtdirection: self.ds_dimtxtdirection, + dimatfit: &self.ds_dimatfit, + dimtix: self.ds_dimtix, + dimsoxd: self.ds_dimsoxd, + dimtmove: &self.ds_dimtmove, + dimupt: self.ds_dimupt, + dimtofl: self.ds_dimtofl, + dimfit: &self.ds_dimfit, + dimdsep: &self.ds_dimdsep, + dimrnd: &self.ds_dimrnd, + dimzin: &self.ds_dimzin, + dimfrac: &self.ds_dimfrac, + dimaunit: &self.ds_dimaunit, + dimadec: &self.ds_dimadec, + dimazin: &self.ds_dimazin, + dimalt: self.ds_dimalt, + dimaltf: &self.ds_dimaltf, + dimaltd: &self.ds_dimaltd, + dimaltu: &self.ds_dimaltu, + dimalttd: &self.ds_dimalttd, + dimaltrnd: &self.ds_dimaltrnd, + dimapost: &self.ds_dimapost, + dimaltz: &self.ds_dimaltz, + dimalttz: &self.ds_dimalttz, + dimtolj: &self.ds_dimtolj, + dimtzin: &self.ds_dimtzin, }, ); } diff --git a/src/ui/dimstyle.rs b/src/ui/dimstyle.rs index e16baabc5..e915de9da 100644 --- a/src/ui/dimstyle.rs +++ b/src/ui/dimstyle.rs @@ -90,6 +90,46 @@ pub struct DimStyleValues<'a> { pub dimtdec: &'a str, pub dimtfac: &'a str, pub annotative: bool, + pub dimclrd: &'a str, + pub dimlwd: &'a str, + pub dimclre: &'a str, + pub dimlwe: &'a str, + pub dimfxl: &'a str, + pub dimfxlon: bool, + pub dimsah: bool, + pub dimarcsym: &'a str, + pub dimjogang: &'a str, + pub dimclrt: &'a str, + pub dimjust: &'a str, + pub dimtvp: &'a str, + pub dimtfill: &'a str, + pub dimtfillclr: &'a str, + pub dimtxtdirection: bool, + pub dimatfit: &'a str, + pub dimtix: bool, + pub dimsoxd: bool, + pub dimtmove: &'a str, + pub dimupt: bool, + pub dimtofl: bool, + pub dimfit: &'a str, + pub dimdsep: &'a str, + pub dimrnd: &'a str, + pub dimzin: &'a str, + pub dimfrac: &'a str, + pub dimaunit: &'a str, + pub dimadec: &'a str, + pub dimazin: &'a str, + pub dimalt: bool, + pub dimaltf: &'a str, + pub dimaltd: &'a str, + pub dimaltu: &'a str, + pub dimalttd: &'a str, + pub dimaltrnd: &'a str, + pub dimapost: &'a str, + pub dimaltz: &'a str, + pub dimalttz: &'a str, + pub dimtolj: &'a str, + pub dimtzin: &'a str, } fn btn_s(accent: bool) -> impl Fn(&Theme, button::Status) -> button::Style { @@ -309,6 +349,10 @@ pub fn view_window<'a>( .on_press(Message::DimStyleDialogTab(4)) .style(tab_btn_style(tab == 4)) .padding([4, 10]), + button(text("Alternate").size(11)) + .on_press(Message::DimStyleDialogTab(5)) + .style(tab_btn_style(tab == 5)) + .padding([4, 10]), ] .spacing(2); @@ -370,6 +414,12 @@ pub fn view_window<'a>( .align_y(iced::Center), chk("Suppress 1st line (DIMSE1)", vals.dimse1, DsField::Dimse1), chk("Suppress 2nd line (DIMSE2)", vals.dimse2, DsField::Dimse2), + row![lbl("Dim line color ACI (DIMCLRD)"), mk_field(DsField::Dimclrd, vals.dimclrd)].spacing(8).align_y(iced::Center), + row![lbl("Dim line weight (DIMLWD)"), mk_field(DsField::Dimlwd, vals.dimlwd)].spacing(8).align_y(iced::Center), + row![lbl("Ext line color ACI (DIMCLRE)"), mk_field(DsField::Dimclre, vals.dimclre)].spacing(8).align_y(iced::Center), + row![lbl("Ext line weight (DIMLWE)"), mk_field(DsField::Dimlwe, vals.dimlwe)].spacing(8).align_y(iced::Center), + chk("Fixed-length ext lines (DIMFXLON)", vals.dimfxlon, DsField::Dimfxlon), + row![lbl("Fixed length (DIMFXL)"), mk_field(DsField::Dimfxl, vals.dimfxl)].spacing(8).align_y(iced::Center), ] .spacing(7) .into(), @@ -393,6 +443,9 @@ pub fn view_window<'a>( ] .spacing(8) .align_y(iced::Center), + chk("Separate arrow blocks (DIMSAH)", vals.dimsah, DsField::Dimsah), + row![lbl("Arc length symbol (DIMARCSYM)"), mk_field(DsField::Dimarcsym, vals.dimarcsym)].spacing(8).align_y(iced::Center), + row![lbl("Jog angle ° (DIMJOGANG)"), mk_field(DsField::Dimjogang, vals.dimjogang)].spacing(8).align_y(iced::Center), ] .spacing(7) .into(), @@ -418,6 +471,12 @@ pub fn view_window<'a>( .align_y(iced::Center), chk("Horizontal inside (DIMTIH)", vals.dimtih, DsField::Dimtih), chk("Horizontal outside (DIMTOH)", vals.dimtoh, DsField::Dimtoh), + row![lbl("Text color ACI (DIMCLRT)"), mk_field(DsField::Dimclrt, vals.dimclrt)].spacing(8).align_y(iced::Center), + row![lbl("Horizontal just (DIMJUST)"), mk_field(DsField::Dimjust, vals.dimjust)].spacing(8).align_y(iced::Center), + row![lbl("Vertical pos (DIMTVP)"), mk_field(DsField::Dimtvp, vals.dimtvp)].spacing(8).align_y(iced::Center), + row![lbl("Text fill mode (DIMTFILL)"), mk_field(DsField::Dimtfill, vals.dimtfill)].spacing(8).align_y(iced::Center), + row![lbl("Fill color ACI (DIMTFILLCLR)"), mk_field(DsField::Dimtfillclr, vals.dimtfillclr)].spacing(8).align_y(iced::Center), + chk("Left-to-right (DIMTXTDIRECTION)", vals.dimtxtdirection, DsField::Dimtxtdirection), ] .spacing(7) .into(), @@ -455,6 +514,35 @@ pub fn view_window<'a>( ] .spacing(8) .align_y(iced::Center), + row![lbl("Decimal sep ASCII (DIMDSEP)"), mk_field(DsField::Dimdsep, vals.dimdsep)].spacing(8).align_y(iced::Center), + row![lbl("Round off (DIMRND)"), mk_field(DsField::Dimrnd, vals.dimrnd)].spacing(8).align_y(iced::Center), + row![lbl("Zero suppress (DIMZIN)"), mk_field(DsField::Dimzin, vals.dimzin)].spacing(8).align_y(iced::Center), + row![lbl("Fraction format (DIMFRAC)"), mk_field(DsField::Dimfrac, vals.dimfrac)].spacing(8).align_y(iced::Center), + row![lbl("Angular unit (DIMAUNIT)"), mk_field(DsField::Dimaunit, vals.dimaunit)].spacing(8).align_y(iced::Center), + row![lbl("Angular decimals (DIMADEC)"), mk_field(DsField::Dimadec, vals.dimadec)].spacing(8).align_y(iced::Center), + row![lbl("Angular zero supp (DIMAZIN)"), mk_field(DsField::Dimazin, vals.dimazin)].spacing(8).align_y(iced::Center), + text("Fit").size(11).color(ACCENT), + row![lbl("Fit (DIMATFIT)"), mk_field(DsField::Dimatfit, vals.dimatfit)].spacing(8).align_y(iced::Center), + row![lbl("Text movement (DIMTMOVE)"), mk_field(DsField::Dimtmove, vals.dimtmove)].spacing(8).align_y(iced::Center), + row![lbl("Fit (legacy DIMFIT)"), mk_field(DsField::Dimfit, vals.dimfit)].spacing(8).align_y(iced::Center), + chk("Force text inside (DIMTIX)", vals.dimtix, DsField::Dimtix), + chk("Suppress outside arrows (DIMSOXD)", vals.dimsoxd, DsField::Dimsoxd), + chk("Place text manually (DIMUPT)", vals.dimupt, DsField::Dimupt), + chk("Dim line between ext (DIMTOFL)", vals.dimtofl, DsField::Dimtofl), + ] + .spacing(7) + .into(), + 5 => column![ + text("Alternate Units").size(11).color(ACCENT), + chk("Enable alternate units (DIMALT)", vals.dimalt, DsField::Dimalt), + row![lbl("Multiplier (DIMALTF)"), mk_field(DsField::Dimaltf, vals.dimaltf)].spacing(8).align_y(iced::Center), + row![lbl("Decimals (DIMALTD)"), mk_field(DsField::Dimaltd, vals.dimaltd)].spacing(8).align_y(iced::Center), + row![lbl("Unit format (DIMALTU)"), mk_field(DsField::Dimaltu, vals.dimaltu)].spacing(8).align_y(iced::Center), + row![lbl("Tol decimals (DIMALTTD)"), mk_field(DsField::Dimalttd, vals.dimalttd)].spacing(8).align_y(iced::Center), + row![lbl("Round off (DIMALTRND)"), mk_field(DsField::Dimaltrnd, vals.dimaltrnd)].spacing(8).align_y(iced::Center), + row![lbl("Suffix (DIMAPOST)"), mk_field(DsField::Dimapost, vals.dimapost)].spacing(8).align_y(iced::Center), + row![lbl("Zero suppress (DIMALTZ)"), mk_field(DsField::Dimaltz, vals.dimaltz)].spacing(8).align_y(iced::Center), + row![lbl("Tol zero supp (DIMALTTZ)"), mk_field(DsField::Dimalttz, vals.dimalttz)].spacing(8).align_y(iced::Center), ] .spacing(7) .into(), @@ -486,6 +574,8 @@ pub fn view_window<'a>( ] .spacing(8) .align_y(iced::Center), + row![lbl("Tol. vert just (DIMTOLJ)"), mk_field(DsField::Dimtolj, vals.dimtolj)].spacing(8).align_y(iced::Center), + row![lbl("Tol. zero supp (DIMTZIN)"), mk_field(DsField::Dimtzin, vals.dimtzin)].spacing(8).align_y(iced::Center), ] .spacing(7) .into(),