From 189424e3d4e3dc74223b54f05c3cc50ae1507f67 Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:27:59 +0300 Subject: [PATCH] Remove arcs covered by selected circles when overlap cleanup is enabled --- src/app/commands/styleprops.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/app/commands/styleprops.rs b/src/app/commands/styleprops.rs index 0008f925c..318a20d80 100644 --- a/src/app/commands/styleprops.rs +++ b/src/app/commands/styleprops.rs @@ -721,6 +721,25 @@ impl OpenCADStudio { if left==right { removed.insert(candidates[b].0);progress=true;continue; } + if overlap { + let contained = |circle: &acadrust::entities::Circle, arc: &acadrust::entities::Arc| { + circle.common == arc.common && circle.thickness == arc.thickness + && cadkernel::space::arc_union::circle_contains_arc( + [circle.center.x,circle.center.y,circle.center.z], + [circle.normal.x,circle.normal.y,circle.normal.z],circle.radius, + cadkernel::space::arc_union::CircularArc { center:[arc.center.x,arc.center.y,arc.center.z], + normal:[arc.normal.x,arc.normal.y,arc.normal.z],radius:arc.radius,start:arc.start_angle,end:arc.end_angle }) + }; + match (&left,&right) { + (acadrust::EntityType::Circle(circle),acadrust::EntityType::Arc(arc)) if contained(circle,arc) => { + removed.insert(candidates[b].0);progress=true;continue; + } + (acadrust::EntityType::Arc(arc),acadrust::EntityType::Circle(circle)) if contained(circle,arc) => { + removed.insert(candidates[a].0);progress=true;break; + } + _ => {}, + } + } if let (acadrust::EntityType::Arc(l),acadrust::EntityType::Arc(r))=(&left,&right) { use cadkernel::space::arc_union::{CircularArc,ArcUnionKind,circular_arc_union}; if l.common!=r.common || l.thickness!=r.thickness {continue;}