From 8012fc7b452b40c66f5df624c3bcf6f6b69e3722 Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:35:57 +0300 Subject: [PATCH] Interpret spline elevation input as order rather than degree --- src/modules/draw/modify/splinedit.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/draw/modify/splinedit.rs b/src/modules/draw/modify/splinedit.rs index 379620e27..6f378250f 100644 --- a/src/modules/draw/modify/splinedit.rs +++ b/src/modules/draw/modify/splinedit.rs @@ -92,7 +92,7 @@ impl SplineditCommand { curve.insert_knot(parameter); } if let Some(degree) = degree { - if degree <= curve.degree() || degree > 26 { return None; } + if degree <= curve.degree() || degree > 25 { return None; } curve = curve.elevated(degree - curve.degree())?; } let mut result = crate::modules::draw::modify::spline_ops::nurbs_to_spline(&curve, source); @@ -181,7 +181,13 @@ impl CadCommand for SplineditCommand { _ => {} }, Step::Elevate => { - if let Some(spline) = upper.parse::().ok().and_then(|degree| self.refined(None, Some(degree))) { + let current_order = self.spline.as_ref()?.degree.max(1) as usize + 1; + let order = upper.parse::().ok().filter(|order| *order >= current_order && *order <= 26)?; + if order == current_order { + self.step = Step::Refine; + return Some(CmdResult::NeedPoint); + } + if let Some(spline) = self.refined(None, Some(order - 1)) { self.step = Step::Refine; return Some(self.replace(spline)); } @@ -264,8 +270,8 @@ impl CadCommand for SplineditCommand { Step::Refine => { self.step = Step::Options; CmdResult::NeedPoint } Step::Add | Step::Delete | Step::SelectVertex { .. } => { self.step = Step::Refine; CmdResult::NeedPoint } Step::Elevate => { - let degree = self.spline.as_ref().map_or(4, |s| s.degree as usize + 1); - self.on_text_input(°ree.to_string()).unwrap_or(CmdResult::NeedPoint) + let order = self.spline.as_ref().map_or(4, |s| s.degree as usize + 1); + self.on_text_input(&order.to_string()).unwrap_or(CmdResult::NeedPoint) } Step::Move { .. } | Step::Weight { .. } => self.on_text_input("N").unwrap_or(CmdResult::NeedPoint), }