From 45e84edae474bb87ac3e821885b8ec4763d0997a Mon Sep 17 00:00:00 2001 From: ramox81 <184937705+ramox81@users.noreply.github.com> Date: Thu, 27 Aug 2026 12:25:33 +0300 Subject: [PATCH] Align baseline dimension geometry data --- src/modules/annotate/dim_baseline.rs | 91 ++++++++++++++++++---------- 1 file changed, 58 insertions(+), 33 deletions(-) diff --git a/src/modules/annotate/dim_baseline.rs b/src/modules/annotate/dim_baseline.rs index a2ae3df3a..1656432d8 100644 --- a/src/modules/annotate/dim_baseline.rs +++ b/src/modules/annotate/dim_baseline.rs @@ -79,7 +79,6 @@ enum BaselineKind { }, Ordinate { source: DimensionOrdinate, - leader_delta: DVec3, }, } @@ -192,7 +191,6 @@ impl DimBaselineCommand { } Dimension::Ordinate(source) => BaselineKind::Ordinate { source: source.clone(), - leader_delta: dv(source.leader_endpoint) - dv(source.feature_location), }, _ => return false, }; @@ -235,12 +233,12 @@ impl DimBaselineCommand { result.second_point = v3(*vertex + normalized_or(*fixed_ray, DVec3::X)); result.angle_vertex = v3(*vertex); result.definition_point = v3(point); - result.dimension_arc = v3( - *vertex + angular_bisector(*fixed_ray, moving) * *next_radius, - ); + let (definition, text) = + angular_definition_and_text(*vertex, *fixed_ray, moving, *next_radius); + result.dimension_arc = v3(definition); result.base.definition_point = result.dimension_arc; - result.base.text_middle_point = result.dimension_arc; - result.base.insertion_point = result.dimension_arc; + result.base.text_middle_point = v3(text); + result.base.insertion_point = result.base.text_middle_point; result.base.actual_measurement = result.measurement_degrees(); Dimension::Angular2Ln(result) } @@ -259,28 +257,31 @@ impl DimBaselineCommand { result.angle_vertex = v3(*vertex); result.first_point = v3(*vertex + normalized_or(*fixed_ray, DVec3::X)); result.second_point = v3(point); - result.definition_point = v3( - *vertex + angular_bisector(*fixed_ray, moving) * *next_radius, - ); + let (definition, text) = + angular_definition_and_text(*vertex, *fixed_ray, moving, *next_radius); + result.definition_point = v3(definition); result.base.definition_point = result.definition_point; - result.base.text_middle_point = result.definition_point; - result.base.insertion_point = result.definition_point; + result.base.text_middle_point = v3(text); + result.base.insertion_point = result.base.text_middle_point; result.base.actual_measurement = result.measurement_degrees(); Dimension::Angular3Pt(result) } - BaselineKind::Ordinate { - source, - leader_delta, - } => { + BaselineKind::Ordinate { source } => { + let source_leader = dv(source.leader_endpoint); + let leader = if source.is_ordinate_type_x { + DVec3::new(point.x, source_leader.y, source_leader.z) + } else { + DVec3::new(source_leader.x, point.y, source_leader.z) + }; let mut result = DimensionOrdinate::new( v3(point), - v3(point + *leader_delta), + v3(leader), source.is_ordinate_type_x, ); result.definition_point = source.definition_point; result.base.definition_point = source.base.definition_point; - result.base.text_middle_point = result.leader_endpoint; - result.base.insertion_point = result.leader_endpoint; + result.base.text_middle_point = v3(leader); + result.base.insertion_point = result.base.text_middle_point; Dimension::Ordinate(result) } }; @@ -331,15 +332,26 @@ impl CadCommand for DimBaselineCommand { fn prompt(&self) -> String { if self.base.is_none() { - "DIMBASELINE Select base dimension (Enter to exit):".to_string() + "DIMBASELINE Select base dimension:".to_string() + } else if self + .base + .as_ref() + .is_some_and(|base| matches!(&base.kind, BaselineKind::Ordinate { .. })) + { + "DIMBASELINE Specify feature location [Undo/Select] :".to_string() + "DIMBASELINE Specify second extension line origin [Select/Undo]