alro65
002c00aff3
feat(sprint2): wizard 'Nuevo Proyecto' + 5 generadores paramétricos de casco
...
Generadores paramétricos (arshipdesign/parametric/):
- wizard_planing.py → V-fondo, chine dura, deadrise variable AP→FP
- wizard_cruiser.py → Carena redonda, plan form Lackenby, Cm ajustable
- wizard_workboat.py → Sección cajón, pantoque duro, fondo plano
- wizard_sailing_mono.py → Velero fin keel, sección fina, LCB a popa
- series60.py → Serie 60 / mercante full, Cm ~ 0.96
- __init__.py → API unificada generate_hull(family, lpp, beam, draft)
+ HullFamily enum con labels, rangos Cb, descripciones
Wizard UI (arshipdesign/ui/dialogs/wizards.py):
- NewShipWizard: QDialog 4 pasos con barra de progreso animada
- _StepDimensions: nombre, Lpp, B, puntal, calado + ratios L/B y B/T en vivo
- _StepFamily: 6 FamilyCard con HullThumbnail QPainter (sección maestra)
- _StepRefine: sliders Cb y LCB, spinboxes discretización
- _StepPreview: tabla hidrostáticos completa (V, D, Cb, LCB, KB, Awp...)
- Al aceptar → Hull cargado en visor 3D del viewport Perspectiva
MainWindow:
- _on_new_project() abre NewShipWizard (antes creaba proyecto vacío)
- Tras accept(): carga hull en Viewer3DWidget si disponible
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-27 07:52:46 -04:00
alro65
503e00bfc9
feat(sprint1): motor NURBS, modelos de casco, visor 3D PyVista
...
Geometría:
- BSplineCurve: interpolación scipy, arc_length, tangente, chord-length
- LoftedSurface: lofting de secciones → RectBivariateSpline bivariate
Core (casco Wigley como caso de prueba):
- Section: área, centroide_z, max_half_breadth, curva B-spline
- OffsetsTable: from_wigley(), to_sections(), interpolación xy
- Hull: volumen, Awp, LCB, VCB, Cb, Cm, Cp, desplazamiento, to_mesh()
UI:
- Viewer3DWidget (pyvistaqt.QtInteractor): casco Wigley por defecto
al arrancar, fondo navy, waterplane semi-transparente, fallback
graceful si PyVista no disponible
- MainWindow: Viewer3DWidget inyectado en viewport Perspectiva 3D
Tests: 39 nuevos tests, fórmulas analíticas Wigley verificadas (±1%)
V = 4BLT/9, Cb = 4/9, Awp = 2BL/3 (derivación correcta)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-27 01:07:35 -04:00
alro65
135f097079
fix(ribbon): calcular ancho mínimo de botones desde métricas de texto
...
Qt dimensiona QToolButton por el ícono (22px), no por el texto, lo que
causaba que etiquetas como 'Nuevo Tq.' se cortaran al renderizar.
Ahora add_button() usa fontMetrics().horizontalAdvance(text)+20 para
establecer setMinimumWidth() correcto en cada botón.
Además: RibbonBar.setFixedHeight(110) (antes 92), padding y font-size
del ribbonButton QSS aumentados ligeramente para mejor legibilidad.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-05-27 00:35:03 -04:00
alro65
0c15b5aeeb
fix(ui): Ocean Slate theme — legibilidad, 4 viewports diferenciados
...
Problema 1 — texto oscuro ilegible
- ribbonButton disabled: #555c6e → #7a8ba8 (contraste ≥3.5:1)
- ribbonGroupTitle: #6b7385 → #9aa3bc (legible)
- placeholderTitle/Desc/Msg: colores más claros y visibles
Problema 2 — 4 viewports indistinguibles (negro monótono)
- Cada viewport tiene objectName propio (viewportTitleBar_perspective etc.)
- 4 barras de título con colores únicos:
perspective → azul profundo #1e2550 / texto #6888d8
profile → teal marino #143040 / texto #40a8b8
bodyplan → índigo #28183c / texto #8868c8
plan → verde oscuro #142814 / texto #48a858
- QFrame viewport: borde 2px solid #2a3060 (claramente visible)
- setHandleWidth(5) en Python (3→5 px) + QSS hover acento
Problema 3 — fondo negro de muertos
- Main bg: #252a38 → #2c3042 (slate medio, claramente gris-azul)
- Paneles: #2e3342 → #343848
- Viewport canvas: #1a1e2c → #1a1d30 (navy, no neutral)
- Línea acento (#4da8ff) bajo ribbon y sobre hidrostáticos
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-27 00:14:20 -04:00
alro65
0dc1050e5a
feat(ui): ribbon bar + 4-viewport layout + layers panel
...
- Replace simple QToolBar with 6-tab functional RibbonBar
(Home / Geometría / Análisis / Tanques / Sistemas / Fabricación)
Each tab shows relevant button groups with icons + text below.
- Replace single 3D placeholder with FourViewport layout
(Perspectiva 3D · Vista Lateral · Body Plan · Vista de Planta)
divided by draggable cyan splitters — standard naval CAD layout.
- Replace ProjectTreePanel with DELFTship-style LayersPanel:
10 preset layers with visibility toggle, lock toggle, and color swatch.
- Add pipe/cable routing modules (MOD_ROUTING_PIPES=21, MOD_ROUTING_CABLES=22)
visible in Sistemas ribbon tab and main menu under Sistemas → Routing 3D.
- Move Units/Language info from toolbar to status bar (cleaner ribbon).
- Update dark.qss: new styles for ribbon tabs, viewports, layers panel,
viewport splitter handles (accent blue), placeholder text.
- All 12 Sprint 0 tests pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-26 23:30:08 -04:00
alro65
0dbc2a4518
v0.1-sprint0: Esqueleto completo AR-ShipDesign
...
- Estructura completa de carpetas (236 módulos stub + implementados)
- pyproject.toml, requirements, .gitignore, LICENSE (propietario)
- core/project.py: serialización .arsd (ZIP con JSON)
- core/units.py: conversiones SI <-> imperial completas
- ui/main_window.py: layout DELFTship-style con todos los paneles
- Árbol de proyecto (dock izquierda)
- Tabs de módulos (centro)
- Panel de propiedades (dock derecha)
- Panel hidrostáticos en vivo (inferior, fijo)
- ui/i18n: español e inglés
- ui/themes: tema claro y oscuro
- utils/logger.py, settings.py, validation.py
- data/liquids.json: 15 líquidos navales
- data/stability_criteria.json: IMO IS Code 2008, A.749(18), USCG
- tests/test_startup.py: 12 tests, todos PASSED
- Módulo scantling/ ISO 12215 (stubs Sprint 2.5)
- Módulo fabrication/molds/ para moldes FRP (stubs Sprint 13B)
- Módulo fabrication/ para CNC plasma/router/laser (stubs Sprint 13)
2026-05-26 22:10:18 -04:00