fix(ui): 3D stale cache + node/waterline visual hierarchy

hull.py
  - add invalidate() — clears _surface NURBS cache on in-place
    offsets edit; fixes 3D viewer showing old geometry after drag

main_window.py
  - call hull.invalidate() before load_hull() in
    _on_offsets_edited_from_viewer so PyVista always rebuilds mesh
    from the updated offsets

viewer_lines.py
  - 4-layer drawing order: grid → control-net → hull-curves → nodes
  - nodes changed from 4px white-blue circles to 6px orange squares
    (_NODE_NORMAL #FF8000) — unambiguous visual language vs blue/green
    hull curves
  - _draw_cnet_bodyplan / _draw_cnet_planview helpers: thin muted
    control-net mesh (transverse + longitudinal edges) drawn between
    grid and bold hull curves, matching Maxsurf/DelftShip visual style
  - waterline reference lines made more muted (_GRID_WL dotted)
  - all old _GRID / _CPT_* references replaced with new palette

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 14:06:18 -04:00
parent 0f85935fc8
commit a4b8b03a59
3 changed files with 210 additions and 70 deletions
+10
View File
@@ -98,6 +98,16 @@ class Hull:
self._surface = self._build_surface()
return self._surface
def invalidate(self) -> None:
"""Invalida la caché de la superficie NURBS.
Llamar siempre que se modifiquen los offsets in-place
(p.ej. arrastre interactivo en los visores 2D) para que la
próxima llamada a ``surface`` o ``to_mesh`` reconstruya la
geometría desde los datos actualizados.
"""
self._surface = None
def _build_surface(self) -> LoftedSurface:
sections_data = []
u_arr = self.offsets.x_stations / self.lpp # normalizar a [0,1]