Skip to the content.

Under the Hood

How the Solar Proa CAD system works.

← Back to Home


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:

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:

Build Pipeline Dependency Graph

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

Beaching configuration - boat on shore with sails down and rudders lifted

Beam Reach

Cross-wind sailing

Broad Reach

Downwind sailing

Close Haul

Upwind sailing

Close Haul Reefed

Reefed for heavy weather

Goose Wing

Running downwind


Automation

Every push to the main branch triggers a GitHub Actions workflow that:

  1. Builds all FreeCAD models for each boat × configuration combination
  2. Generates renders (PNG images from multiple camera angles)
  3. Exports STEP files for CAD interchange
  4. Calculates mass properties and validates buoyancy
  5. Builds the Jekyll site with all generated assets
  6. 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


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 →