There is currently no single turnkey open-source application that automatically generates marine-grade truss structures, foil-shaped floats, and outputs detailed bills of materials with weight breakdowns. However, you can build a highly capable, parametric design pipeline using open-source Python/CAD libraries that run locally or on a web server.
| Component | Tool | Role | License |
|---|---|---|---|
| Parametric CAD & Weight Calculation | CadQuery / Build123d | Generate truss, foils, living space, calculate volume/mass per part, export STEP/GLB | BSD-3 / Apache-2 |
| GUI Alternative | FreeCAD | Visual editing, FEM analysis, Arch/Ship workbenches, BOM export | LGPL-2.1 |
| Hydrostatics & Stability | NEMOH + Python wrappers | Small-waterplane-area hydrostatics, wave response, stability metrics | GPL-3 |
| Data & Reporting | Pandas, Matplotlib, Jupyter | Weight tables, sensitivity analysis, design iteration tracking | BSD / PSF |
| Web Visualization | Three.js + gltf_viewer | Browser-based 3D preview, lightweight interaction | MIT |
2700 kg/mΒ³ (0.0975 lb/inΒ³).import cadquery as cq
import pandas as pd
# === PARAMETERS ===
TRI_FRONT_BACK = 80 * 12 # inches
TRI_WIDTH = 40 * 12
TRUSS_SPACING = 24 # inches
WALL_THK = 0.25 # inches (marine 5083 plate)
FOIL_LEN = 19 * 12
FOIL_WIDTH = 3 * 12
FOIL_CHORD = 10 * 12
AL_DENSITY = 0.0975 # lb/inΒ³
JOINT_EFF = 0.88
# Helper: hollow rectangular truss member
def truss_member(length, width, height, thk):
outer = cq.Workplane("XY").box(width, length, height)
inner = cq.Workplane("XY").box(width-2*thk, length-2*thk, height-2*thk)
return outer.cut(inner)
# Generate example: single truss edge + foil leg
bottom_edge = truss_member(TRI_WIDTH, TRI_WIDTH*0.05, 84, WALL_THK).translate((0, 0, 0))
foil_leg = (cq.Workplane("XY")
.sketch()
.parametricCurve(lambda t: (FOIL_CHORD*(1-cq.NACA4(0, 10, 20, 0).evaluate(t)[0]),
FOIL_CHORD*cq.NACA4(0, 10, 20, 0).evaluate(t)[1]))
.extrude(FOIL_WIDTH)
.translate((0, 0, -FOIL_LEN/2)))
# Combine assembly
assy = cq.Assembly()
assy.add(bottom_edge, name="Truss_Edge", loc=cq.Location((0,0,0)))
assy.add(foil_leg, name="Foil_Leg", loc=cq.Location((0, -TRI_WIDTH/2, -FOIL_LEN/2)))
# Weight Calculation
parts_data = []
for obj in assassy.solids():
vol = obj.val().Volume()
mass = vol * AL_DENSITY * JOINT_EFF
parts_data.append({"Part": obj.name, "Volume_in3": round(vol,1), "Mass_lb": round(mass,1)})
df = pd.DataFrame(parts_data).sort_values("Mass_lb", ascending=False)
print(df)
print(f"\nTotal Estimated Mass: {df['Mass_lb'].sum():.1f} lb")
Solid.Volume() returns exact geometric volume. For realistic marine fabrication, add 5β10% for weld beads, brackets, gussets, and corrosion allowance.
.exportGLTF() + Three.js.https://modelviewer.dev/ or https://threejs.org/examples/#webgl_loader_gltf for interactive rotation/slicing.NEMOH or OpenFOAM before construction.pip install cadqueryWith this stack, you can rapidly iterate seastead configurations, compare structural mass across foil/truss variants, and export fabrication-ready data entirely with open-source tools.