diff --git a/src/app/update/command.rs b/src/app/update/command.rs index 2affd1888..4d41d3785 100644 --- a/src/app/update/command.rs +++ b/src/app/update/command.rs @@ -1934,6 +1934,14 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task { } else { None }; + if matches!(item.action, GripMenuAction::AboveDimLine) { + crate::entities::dim_override::set_property( + &mut self.tabs[i].scene.document, + popup.handle, + "dim_text_pos_vert", + "Above", + ); + } if let Some(entity) = self.tabs[i].scene.document.get_entity_mut(popup.handle) { entity.apply_grip_menu(popup.grip_id, item.action); } diff --git a/src/entities/dimension.rs b/src/entities/dimension.rs index f20f3506b..a9c5b14c2 100644 --- a/src/entities/dimension.rs +++ b/src/entities/dimension.rs @@ -1111,32 +1111,6 @@ fn dimension_line_grip_position(dim: &Dimension) -> Option { Some((p1 + p2) * 0.5) } -fn above_dimension_text_position(dim: &Dimension) -> Option { - if let Some((vertex, start, end, radius)) = angular_dimension_frame(dim) { - let angle = (start + end) * 0.5; - let direction = DVec3::new(angle.cos() as f64, angle.sin() as f64, 0.0); - return Some( - DVec3::new(vertex.x as f64, vertex.y as f64, vertex.z as f64) - + direction * (radius as f64 + 1.0), - ); - } - let center = dimension_line_grip_position(dim)?; - let (ax, ay) = match dim { - Dimension::Linear(d) => (d.rotation.cos(), d.rotation.sin()), - Dimension::Aligned(d) => { - let dx = d.second_point.x - d.first_point.x; - let dy = d.second_point.y - d.first_point.y; - let length = (dx * dx + dy * dy).sqrt(); - if length <= 1e-12 { - return None; - } - (dx / length, dy / length) - } - _ => return Some(center + DVec3::Y), - }; - Some(center + DVec3::new(-ay, ax, 0.0)) -} - impl Grippable for Dimension { fn grips(&self) -> Vec { // Auto-placed dimensions carry a zero text_middle_point sentinel; put @@ -1489,12 +1463,13 @@ impl Grippable for Dimension { base.flip_arrow1 = !base.flip_arrow1; base.flip_arrow2 = !base.flip_arrow2; } + // The caller sets DIMTAD = Above as an override; the text goes + // back to automatic placement so DIMGAP and the text height set + // how far above the line it sits, at any drawing scale. (#543) A::AboveDimLine if grip_id == text_grip => { - if let Some(point) = above_dimension_text_position(self) { - let base = self.base_mut(); - base.text_middle_point = Vector3::new(point.x, point.y + 1.0, point.z); - base.text_user_positioned = true; - } + let b = self.base_mut(); + b.text_middle_point = Vector3::new(0.0, 0.0, 0.0); + b.text_user_positioned = false; } _ => {} }