fix(dimension): complete ordinate workflow

This commit is contained in:
Hakan Seven committed 2026-08-25 21:36:04 +03:00
commit 968ee3fda4
29 files changed
+504 -112

No files matched your search

+13 -2
View File
@@ -1279,6 +1279,12 @@ impl OpenCADStudio {
.document
.header
.dimension_associativity;
let single_source_dimension = matches!(
&entity,
acadrust::EntityType::Dimension(
acadrust::entities::Dimension::Ordinate(_)
)
);
let pending = if association_mode == 0 {
let layer = self.tabs[i].active_layer.clone();
if layer != "0" || entity.as_entity().layer().is_empty() {
@@ -1339,7 +1345,13 @@ impl OpenCADStudio {
.into_iter()
.collect()
},
|source| vec![Some(source), Some(source)],
|source| {
if single_source_dimension {
vec![Some(source)]
} else {
vec![Some(source), Some(source)]
}
},
);
self.tabs[i]
.scene
@@ -3117,7 +3129,6 @@ impl OpenCADStudio {
stretched |= mv(&mut d.definition_point);
}
Dimension::Ordinate(d) => {
stretched |= mv(&mut d.definition_point);
stretched |= mv(&mut d.feature_location);
stretched |= mv(&mut d.leader_endpoint);
}
+6 -3
View File
@@ -1179,11 +1179,14 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
.zip(self.tabs[i].selected_grips.iter())
.find(|(owner, g)| **owner == popup.handle && g.id == popup.grip_id)
{
// "Move with Leader" drags the whole multileader; the
// others move just the picked grip.
// Only multileaders use the whole-object grip.
let is_multileader = matches!(
self.tabs[i].scene.document.get_entity(popup.handle),
Some(acadrust::EntityType::MultiLeader(_))
);
let (grip_id, is_translate) =
if matches!(item.action, GripMenuAction::MoveWithLeader)
&& !is_dimension
&& is_multileader
{
(crate::entities::multileader::MOVE_ALL_GRIP, true)
} else {