forked from 1b-agent/opencadstudio-upstream
Merge pull request #867 from ramox81/codex/complete-donut-workflow
Complete donut diameter workflow
This commit is contained in:
7 files changed
+244
-63
No files matched your search
@@ -935,6 +935,8 @@ impl OpenCADStudio {
|
||||
| "SKETCHINC"
|
||||
| "SKPOLY"
|
||||
| "SKTOLERANCE"
|
||||
| "DONUTID"
|
||||
| "DONUTOD"
|
||||
| "CENTEREXE"
|
||||
| "CENTERLAYER"
|
||||
| "CENTERLTYPE"
|
||||
@@ -965,7 +967,7 @@ impl OpenCADStudio {
|
||||
let value = it.next().map(|s| s.trim().to_string());
|
||||
if name.is_empty() || name == "?" {
|
||||
self.command_line.push_info(
|
||||
"SETVAR: LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR CURSORSIZE PICKBOX CURSORTYPE SNAPANG ATTREQ ATTDIA DIMASSOC ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE | CLAYER CELTYPE TEXTSTYLE (read-only)",
|
||||
"SETVAR: LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR CURSORSIZE PICKBOX CURSORTYPE SNAPANG ATTREQ ATTDIA DIMASSOC ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE DONUTID DONUTOD CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE | CLAYER CELTYPE TEXTSTYLE (read-only)",
|
||||
);
|
||||
} else {
|
||||
let frame_kind = crate::scene::frame::kind_for_name(&name);
|
||||
@@ -1081,6 +1083,49 @@ impl OpenCADStudio {
|
||||
}
|
||||
return Some(self.finish_dispatch(cmd));
|
||||
}
|
||||
if matches!(name.as_str(), "DONUTID" | "DONUTOD") {
|
||||
let current = if name == "DONUTID" {
|
||||
crate::modules::draw::defaults::get_donut_inner_diameter()
|
||||
} else {
|
||||
crate::modules::draw::defaults::get_donut_outer_diameter()
|
||||
};
|
||||
if let Some(value) = &value {
|
||||
let parsed = value
|
||||
.trim()
|
||||
.replace(',', ".")
|
||||
.parse::<f64>()
|
||||
.ok()
|
||||
.filter(|number| number.is_finite());
|
||||
let valid = parsed.filter(|number| {
|
||||
if name == "DONUTID" {
|
||||
*number >= 0.0
|
||||
} else {
|
||||
*number > 0.0
|
||||
}
|
||||
});
|
||||
if let Some(number) = valid {
|
||||
if name == "DONUTID" {
|
||||
crate::modules::draw::defaults::set_donut_inner_diameter(number);
|
||||
} else {
|
||||
crate::modules::draw::defaults::set_donut_outer_diameter(number);
|
||||
}
|
||||
self.command_line
|
||||
.push_output(&format!("{name} = {number}"));
|
||||
} else {
|
||||
self.command_line.push_error(if name == "DONUTID" {
|
||||
"SETVAR: DONUTID requires a finite value greater than or equal to zero."
|
||||
} else {
|
||||
"SETVAR: DONUTOD requires a finite value greater than zero."
|
||||
});
|
||||
}
|
||||
} else {
|
||||
self.command_line.push_output(crate::tf!(
|
||||
"Enter new value for {name} <{current}>:"
|
||||
).as_ref());
|
||||
self.pending_setvar = Some(name.clone());
|
||||
}
|
||||
return Some(self.finish_dispatch(cmd));
|
||||
}
|
||||
// Parse a boolean given as 0/1 or ON/OFF.
|
||||
let parse_bool = |s: &str| match s.to_uppercase().as_str() {
|
||||
"1" | "ON" | "TRUE" => Some(true),
|
||||
|
||||
Reference in new issue
Block a user