- UI refinement, button position ui file as source no dirty drafting anymore

This commit is contained in:
bklronin
2026-07-04 16:16:04 +02:00
parent 6ba742ddf5
commit 9f10a5c5e5
6 changed files with 1847 additions and 935 deletions
+9 -10
View File
@@ -1013,7 +1013,7 @@ class OCCRenderer(Renderer):
# • Left button drag → orbit (rotate around target)
# • Middle button drag → pan
# • Right button → (reserved for future use)
# • Wheel → zoom toward cursor
# • Wheel → zoom centered on viewport
# • Double-click left → fit all (handled by the widget)
def _qt_buttons(self, event) -> Any:
@@ -1079,20 +1079,19 @@ class OCCRenderer(Renderer):
self._nav_mode = None
def handle_wheel(self, event) -> None:
"""Zoom toward the cursor on scroll."""
"""Zoom centered on the viewport (body midpoint) on scroll.
Uses the view's scale factor so the zoom is always centered
on the viewport centre — the body never drifts to an edge.
"""
if self._view is None:
return
# Qt6: QWheelEvent has no .x()/.y(); use position().toPoint().
pos = event.position().toPoint() if hasattr(event, "position") else event.pos()
x, y = pos.x(), pos.y()
delta = event.angleDelta().y()
if delta == 0:
return
# ZoomAtPoint(startX, startY, endX, endY): move the cursor anchor
# by a few pixels to drive a smooth zoom centered on the pointer.
step = 30 if delta > 0 else -30
self._view.ZoomAtPoint(x, y, x, y - step)
self._view.ZFitAll()
factor = 1.15 if delta > 0 else 1.0 / 1.15
self._view.SetScale(self._view.Scale() * factor)
def handle_resize(self, w: int, h: int) -> None:
"""Resize the OCC view when the widget is resized."""