Add rectangle width and height grip editing

This commit is contained in:
Marcel committed 2026-09-11 20:15:36 +02:00
1 parent 798379fbe0
commit f30b490831
9 files changed
+260 -5

No files matched your search

+32
View File
@@ -209,6 +209,8 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
GripEditMode::Lengthen
| GripEditMode::Radius
| GripEditMode::ArcLength
| GripEditMode::RectangleWidth
| GripEditMode::RectangleHeight
)
}) {
self.command_line.input.push_str(&s);
@@ -262,6 +264,8 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
GripEditMode::Lengthen
| GripEditMode::Radius
| GripEditMode::ArcLength
| GripEditMode::RectangleWidth
| GripEditMode::RectangleHeight
)
}) {
self.command_line.input.pop();
@@ -316,6 +320,12 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
crate::scene::model::object::GripMenuAction::ArcLength => {
Some(GripEditMode::ArcLength)
}
crate::scene::model::object::GripMenuAction::RectangleWidth => {
Some(GripEditMode::RectangleWidth)
}
crate::scene::model::object::GripMenuAction::RectangleHeight => {
Some(GripEditMode::RectangleHeight)
}
_ => None,
};
expected_mode.is_some_and(|mode| {
@@ -368,6 +378,12 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
) | (
GripEditMode::ArcLength,
crate::scene::model::object::GripMenuAction::ArcLength,
) | (
GripEditMode::RectangleWidth,
crate::scene::model::object::GripMenuAction::RectangleWidth,
) | (
GripEditMode::RectangleHeight,
crate::scene::model::object::GripMenuAction::RectangleHeight,
)
)
&& grip.handle == pending.handle
@@ -1410,6 +1426,8 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
GripMenuAction::Lengthen
| GripMenuAction::Radius
| GripMenuAction::ArcLength
| GripMenuAction::RectangleWidth
| GripMenuAction::RectangleHeight
) {
if let Some((_, grip)) = self.tabs[i]
.selected_grip_handles
@@ -1439,6 +1457,16 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
popup.grip_id,
grip.world,
),
GripMenuAction::RectangleWidth => GripEdit::rectangle_width(
popup.handle,
popup.grip_id,
grip.world,
),
GripMenuAction::RectangleHeight => GripEdit::rectangle_height(
popup.handle,
popup.grip_id,
grip.world,
),
_ => GripEdit::lengthen(
popup.handle,
popup.grip_id,
@@ -1460,6 +1488,10 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
self.command_line.push_info(
crate::t!("Specify point or enter arc length:").as_ref(),
);
} else if matches!(item.action, GripMenuAction::RectangleWidth) {
self.command_line.push_info("Specify point or enter width:");
} else if matches!(item.action, GripMenuAction::RectangleHeight) {
self.command_line.push_info("Specify point or enter height:");
} else {
self.command_line.push_info(
crate::t!("Specify point or enter distance:").as_ref(),
+6
View File
@@ -87,6 +87,12 @@ impl OpenCADStudio {
crate::scene::pick::grip::GripEditMode::ArcLength => {
(grip.origin_world, Some(crate::command::DynRole::Distance))
}
crate::scene::pick::grip::GripEditMode::RectangleWidth => {
(grip.origin_world, Some(crate::command::DynRole::Width))
}
crate::scene::pick::grip::GripEditMode::RectangleHeight => {
(grip.origin_world, Some(crate::command::DynRole::Height))
}
});
if let Some((origin, scalar_role)) = grip_input {
+2
View File
@@ -1591,6 +1591,8 @@ impl OpenCADStudio {
crate::scene::pick::grip::GripEditMode::Lengthen
| crate::scene::pick::grip::GripEditMode::Radius
| crate::scene::pick::grip::GripEditMode::ArcLength
| crate::scene::pick::grip::GripEditMode::RectangleWidth
| crate::scene::pick::grip::GripEditMode::RectangleHeight
)
})
&& !self.tabs[i].dyn_fields.is_empty()
+7
View File
@@ -1590,6 +1590,12 @@ impl OpenCADStudio {
GripEditMode::ArcLength => {
Some(crate::scene::model::object::GripMenuAction::ArcLength)
}
GripEditMode::RectangleWidth => {
Some(crate::scene::model::object::GripMenuAction::RectangleWidth)
}
GripEditMode::RectangleHeight => {
Some(crate::scene::model::object::GripMenuAction::RectangleHeight)
}
GripEditMode::Stretch => None,
};
let actions: Vec<_> = if menu_action.is_some() {
@@ -3268,6 +3274,7 @@ impl OpenCADStudio {
if matches!(
grip.mode,
GripEditMode::Lengthen | GripEditMode::Radius | GripEditMode::ArcLength
| GripEditMode::RectangleWidth | GripEditMode::RectangleHeight
) {
self.grip_pending = None;
self.command_line.input.clear();
+8
View File
@@ -984,6 +984,12 @@ bg={bg_ms:.1}ms n={view_count}"
crate::scene::pick::grip::GripEditMode::ArcLength => {
crate::scene::model::object::GripMenuAction::ArcLength
}
crate::scene::pick::grip::GripEditMode::RectangleWidth => {
crate::scene::model::object::GripMenuAction::RectangleWidth
}
crate::scene::pick::grip::GripEditMode::RectangleHeight => {
crate::scene::model::object::GripMenuAction::RectangleHeight
}
_ => return None,
};
let original = self
@@ -1772,6 +1778,8 @@ bg={bg_ms:.1}ms n={view_count}"
crate::scene::pick::grip::GripEditMode::Lengthen
| crate::scene::pick::grip::GripEditMode::Radius
| crate::scene::pick::grip::GripEditMode::ArcLength
| crate::scene::pick::grip::GripEditMode::RectangleWidth
| crate::scene::pick::grip::GripEditMode::RectangleHeight
)
});
let dyn_capturing =