Under the Hood
How the Solar Proa CAD system works.
Parametric Design
All vessel designs are created using parametric CAD modeling - the geometry is defined by parameters (dimensions, angles, positions) rather than fixed shapes. This means:
- Change one parameter, update the entire model - Adjusting the hull length automatically scales masts, crossbeams, and rigging
- Multiple configurations from one source - The same base model generates beaching, close-haul, broad reach, and other sailing configurations
- Design transparency - Every dimension is traceable to a parameter value
The system uses FreeCAD (open-source CAD) with Python scripts that read parameter files, build the 3D geometry, and export renders and CAD files.
Build Pipeline
The build process transforms parameter files into website-ready outputs through a series of stages:
Dependency graph auto-generated from Makefile
Stage descriptions:
| Stage | Input | Output | Description |
|---|---|---|---|
| parameter | Boat JSON + Configuration JSON | Merged parameters | Combines boat dimensions with sail configuration (shipshape + project plugin) |
| design | Parameters | FreeCAD model (.FCStd) | Builds the 3D geometry from parameters |
| mass | Design (FreeCAD) | Mass properties JSON | Calculates volumes, masses, and buoyancy (shipshape) |
| color | Design (FreeCAD) | Colored design | Applies materials and colors for rendering |
| buoyancy | Design (FreeCAD), Mass properties | Buoyancy properties | Finds equilibrium pose using Newton-Raphson iteration (shipshape) |
| gz | Design (FreeCAD), Buoyancy | GZ curve JSON + PNG | Computes righting-arm curve over heel angles (shipshape) |
| render | Colored design (FreeCAD) | PNG images | Generates isometric, top, front, right views |
| step | FreeCAD model | STEP file | Exports universal CAD format |
| validate | Parameters, Mass, GZ | Validation JSON | Structural validation: aka, mast, spine, capsize analysis |
Configurations
Each sailing configuration is defined by a JSON file that specifies sail angles, rig rotations, and other dynamic parameters:
constant/configuration/
├── beaching.json # Sails down, on shore
├── beamreach.json # Cross-wind sailing
├── broadreach.json # Downwind sailing
├── closehaul.json # Upwind sailing
├── closehaulreefed.json # Heavy weather
└── goosewing.json # Running downwind
The build system generates all combinations of boats × configurations automatically.
Current configurations:
Beaching configuration - boat on shore with sails down and rudders lifted
Cross-wind sailing
Downwind sailing
Upwind sailing
Reefed for heavy weather
Running downwind
Automation
Every push to the main branch triggers a GitHub Actions workflow that:
- Builds all FreeCAD models for each boat × configuration combination
- Generates renders (PNG images from multiple camera angles)
- Exports STEP files for CAD interchange
- Calculates mass properties and validates buoyancy
- Builds the Jekyll site with all generated assets
- Deploys to GitHub Pages at solarproa.org
This ensures the website always reflects the current state of the CAD models - renders, specifications, and downloads are never out of sync.
Repository Structure
Design-specific code lives in this repo. Boat-independent analysis (parameter merging, mass, buoyancy, GZ curves) is provided by the shipshape library. Structural validation lives in src/structural/.
solar-proa/
├── constant/
│ ├── boat/ # Boat parameter files (rp1.json, rp2.json, rp3.json)
│ ├── configuration/ # Sailing configurations
│ └── material/ # Material properties (density, color)
├── src/
│ ├── parameter/ # SolarProa-specific derived parameter calculations
│ ├── design/ # FreeCAD model builders (central, mirror, rotation)
│ ├── color/ # Material and color application
│ ├── render/ # Render generation
│ ├── step/ # STEP export
│ ├── lines/ # Lines plan generation
│ ├── structural/ # Structural validation (aka, mast, spine, capsize)
│ └── buoyancy_design/ # Equilibrium positioning in FreeCAD
├── artifact/ # Generated outputs (models, renders, data)
├── docs/ # Jekyll website source
└── Makefile # Build orchestration
Tools & Technologies
- FreeCAD 1.0 - Open-source parametric CAD
- Python 3 - Scripting and automation
- shipshape - Boat-independent naval engineering library (parameter, mass, buoyancy, GZ)
- GNU Make - Build orchestration and dependency tracking
- Jekyll - Static site generation
- GitHub Actions - CI/CD pipeline
- Graphviz - Dependency graph visualization
Open Source
The entire project is open source under the Apache License 2.0.
GitHub Repository: github.com/shipshape-marine/solar-proa
Contributions, feedback, and forks are welcome.
| ← Back to Home | View RP1 → | View RP2 → | View RP3 → |