test_iacs_rec34.py: 29 tests organizados en 6 clases segun IACS Rec.34:
A. par.4.3 Verificacion analitica (V001-V009):
V, Cb, Awp, Cw, LCB, KB, IT, TPC, KMT vs. solucion analitica Wigley.
B. par.4.4 Convergencia de malla (V010-V012):
Error de V y Awp decrece monotonamente n=11->21->41->81.
C. par.4.5 Simetria (V013-V015):
LCB=L/2, areas de cuadernas simetricas, offsets simetricos.
D. Geometria NURBS (V016-V019):
BSplineCurve (linea recta exacta, semicirculo); superficie Wigley
(semi-manga correcta en midship, cero en AP/FP).
E. Serializacion / trazabilidad par.6 (V020-V023):
V, IT, tabla de offsets identica tras round-trip; JSON legible
por auditor externo (sin base64, floats decimales).
F. Cobertura (meta-test V001-V023 documentados en el modulo).
Tolerancias explicitas por tipo de integral (par.6.3):
integrales directas < 0.5 %, momentos 1er orden < 1 %,
momentos 2do orden < 2 %, coeficientes adim. < 0.005.
Suite total: 141 tests -- 141 passed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- hull.py: Hull.to_dict() serializa a dict JSON con formato hull_v1
(arrays numpy -> listas Python); Hull.from_dict() deserializa con
validacion de claves y forma de array.
- project.py: Project.hull (property lazy) deserializa el Hull desde
ship_data; Project.set_hull() persiste el Hull y marca is_modified.
- main_window.py: _on_new_project guarda el Hull en el proyecto;
_on_project_loaded restaura el Hull en todos los visores al abrir
un archivo .arsd; _on_hull_changed_from_editor mantiene el proyecto
sincronizado con ediciones en el editor de offsets.
- test_serialization.py: 26 tests (round-trip dict, round-trip ZIP,
5 familias parametricas, escritura atomica, proyecto sin Hull).
Suite total: 112 tests -- 112 passed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- viewer_lines.py: BodyPlanViewer, ProfileViewer, PlanViewer (QPainter,
zoom/paneo, tema dark navy); conectados a los tres viewports 2D del
layout 4-viewport (bodyplan / profile / plan).
- hull.py: añadidos waterplane_coefficient (Cw), it_waterplane (IT),
il_waterplane (IL), bm_transverse (BMT), bm_longitudinal (BML),
km_transverse (KMT), tpc, mct1cm — todos verificados analíticamente
contra el casco Wigley (IACS Rec.34 §4.3).
- main_window.py: _load_hull_viewers() conecta los 4 visores y el panel
hidrostáticos al crear un nuevo proyecto; _update_hydrostatics() puebla
los 11 campos de la barra inferior en vivo.
- test_module1_hydrostatics.py: 35 tests nuevos (IT analítico exacto,
consistencia BMT=IT/V, KMT=KB+BMT, TPC=Awp·ρ/1e5, visores headless).
Suite total: 86 tests — 86 passed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>