Apply an EXTRUDE taper only when it is chosen

A taper angle given in one EXTRUDE was applied to every later
extrusion. As in the reference, a new extrusion has no taper; the last
angle stays the Taper angle prompt's default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ramox81andClaude Opus 5.5 committed 2026-10-12 09:53:07 +03:00
1 parent cd07141cde
commit f4a0b1d68b
1 file changed
+9 -4
+9 -4
View File
@@ -26,6 +26,9 @@ pub struct ExtrudeCommand {
direction_start: Option<DVec3>, direction_start: Option<DVec3>,
mode: ExtrudeMode, mode: ExtrudeMode,
taper_angle: f64, taper_angle: f64,
/// The taper prompt's default: the last angle given, which a new
/// extrusion does not apply until the Taper angle option is chosen.
taper_default: f64,
last_height: Option<f64>, last_height: Option<f64>,
taper_return: ExtrudeStep, taper_return: ExtrudeStep,
color: [f32; 4], color: [f32; 4],
@@ -80,7 +83,8 @@ impl ExtrudeCommand {
profile_direction: None, profile_direction: None,
direction_start: None, direction_start: None,
mode: defaults.mode, mode: defaults.mode,
taper_angle: defaults.taper_angle, taper_angle: 0.0,
taper_default: defaults.taper_angle,
last_height: defaults.height, last_height: defaults.height,
taper_return: ExtrudeStep::Height, taper_return: ExtrudeStep::Height,
color, color,
@@ -242,7 +246,7 @@ impl CadCommand for ExtrudeCommand {
ExtrudeStep::Taper => format!( ExtrudeStep::Taper => format!(
"{} <{}>:", "{} <{}>:",
t!("EXTRUDE Specify taper angle or [Expression]"), t!("EXTRUDE Specify taper angle or [Expression]"),
crate::entities::common::format_angle(self.taper_angle) crate::entities::common::format_angle(self.taper_default)
), ),
ExtrudeStep::Expression => t!("EXTRUDE Enter height expression:").into_owned(), ExtrudeStep::Expression => t!("EXTRUDE Enter height expression:").into_owned(),
ExtrudeStep::TaperExpression => { ExtrudeStep::TaperExpression => {
@@ -415,7 +419,7 @@ impl CadCommand for ExtrudeCommand {
if !angle.is_finite() || angle.abs() >= std::f64::consts::FRAC_PI_2 { if !angle.is_finite() || angle.abs() >= std::f64::consts::FRAC_PI_2 {
return Some(CmdResult::NeedPoint); return Some(CmdResult::NeedPoint);
} }
self.taper_angle = angle; (self.taper_angle, self.taper_default) = (angle, angle);
extrude_defaults() extrude_defaults()
.lock() .lock()
.unwrap_or_else(|error| error.into_inner()) .unwrap_or_else(|error| error.into_inner())
@@ -432,7 +436,7 @@ impl CadCommand for ExtrudeCommand {
if !angle.is_finite() || angle.abs() >= std::f64::consts::FRAC_PI_2 { if !angle.is_finite() || angle.abs() >= std::f64::consts::FRAC_PI_2 {
return Some(CmdResult::NeedPoint); return Some(CmdResult::NeedPoint);
} }
self.taper_angle = angle; (self.taper_angle, self.taper_default) = (angle, angle);
extrude_defaults() extrude_defaults()
.lock() .lock()
.unwrap_or_else(|error| error.into_inner()) .unwrap_or_else(|error| error.into_inner())
@@ -459,6 +463,7 @@ impl CadCommand for ExtrudeCommand {
.map(|height| self.finish(ExtrudeExtent::Height(height))) .map(|height| self.finish(ExtrudeExtent::Height(height)))
.unwrap_or(CmdResult::Cancel), .unwrap_or(CmdResult::Cancel),
ExtrudeStep::Taper => { ExtrudeStep::Taper => {
self.taper_angle = self.taper_default;
self.step = self.taper_return; self.step = self.taper_return;
CmdResult::NeedPoint CmdResult::NeedPoint
} }