Skip to main content

A modular part family and hardware assembly language for 3D printing.

Project description

Important Warnings

  • WARNING: Steamware is functional but still under development. Some features (marked with a *) are not yet implemented. While the parts themselves are stable, the script is not fully stable and may break if misused. Follow the instructions carefully for the best results.
  • WARNING: Never 3D print with supports!
  • WARNING: All numerical values are unit-less. Millimeters are assumed, but slicers ultimately determine the units.

What is Steamware?

Steamware stands for Science-Technology-Engineering-Art-Mathematics ware. It is an open-source modular part family and hardware assembly language, much like Legos, combined with software utilities to generate them. Steamware aims to become a baseline solution for high-integrity hardware generation for 3D printing and beyond.

Steamware is designed to be:

  • Fun and creative (toys, tools, and utilities all in one).
  • Modular, with infinite permutations that can be imagined, designed, and generated in seconds.
  • A catalyst for decentralized manufacturing, challenging traditional approaches.


How Does Steamware Work?

The steamware.py script generates:

  • OpenSCAD code.
  • STL renderings.
  • Images and metadata.

These resources allow users to modify, showcase, or manufacture Steamware elements.


Why Was Steamware Built?

Steamware was created with several goals in mind:

  • To inspire creativity in kids.
  • To reduce costs and promote open-source solutions.
  • To explore applications in robotics, wind energy, housing, and even space exploration.
  • To replace traditional materials like cardboard with modular, reusable parts.

Key Features

Self-Evident Identity

Steamware parts have a property called self-evident identity, meaning their configurations can be visually discerned, encoded, measured, and calculated without the need for barcodes or labels. Parts can even be designed mentally and on the fly.

Super Binding

Steamware uses a fractal-like, basis-unit-centric approach to physical binding. Shafts often accommodate smaller basis units (1/3 the size). Binding methods include:

  • Joinery-based binding.
  • Bolt or string binding.
  • Design-specific binding.

No Illegal Operations

Steamware is designed to be utility-grade, versatile, and cost-effective. Square holes can act as bolt shafts, accommodate smaller basis units, or serve other purposes. All parts are built from basis unit blocks with fit padding applied.

Material Independence

Steamware is a geometry, not a material. While limited by the capabilities of 3D printers, it provides a starting point for countless applications.


Can I Make Money with Steamware?

Absolutely! Steamware is open-source, and you are free to use it commercially. Adding your own unique touch is encouraged. Steamware is about fostering creativity and innovation, and the possibilities are endless.

Installation

The steamware.py script runs without dependencies, but the generated scripts require an OpenSCAD instance to view, render, or photograph Steamware.

On Linux

Install OpenSCAD using the following command:

$ sudo apt-get install openscad

On Windows or macOS

Download OpenSCAD from https://openscad.org/downloads.html.


bu: Basis Unit

The bu variable defines the initial scale of the part within the track string. It represents the length, width, and height of each block unit in the Steamware coordinate system. Basis units are not physical but serve as a reference frame for defining Steamware elements.

Block units, derived from basis units, are slightly smaller due to fit padding. Coupler meshes are applied for every spatial transition instruction in a track string to ensure padding does not interfere with binding. Note that adjacency of blocks does not guarantee binding unless specified by a track string.

The default basis unit is 10, assumed to be in millimeters. However, slicing software ultimately determines the units, so check your slicer configurations. OpenSCAD operates with unit-less measures, but the default fit padding (~0.139) suggests millimeters were intended.

This is a block unit, roughly the size of the basis unit minus padding.

fp: Fit Padding

The fp variable specifies the distance subtracted from a basis unit per block for the exterior profile and interior shaft. Fit padding ensures proper binding of objects, especially within narrow shafts.

A recommended starting value is fp = 0.139 (mm), which is the default if not specified. Adjust as needed for your requirements. WARNING: Ensure your slicer is set to millimeters for accurate results.


ts: Track String

The ts variable represents the track string, where each character defines a transition from the previous block. The track string begins with an assumed block at the origin, requiring no transition character.

Transition Characters

  • X, Y, Z: Translate in the positive X, Y, Z directions.
  • A, B, C: Translate in the negative X, Y, Z directions.

Scale Modifier Characters

  • S: Shrink (1/3 the size).
  • G: Grow (3 times the size).

Style Modifier Characters

  • T: Fully cropped.
  • U: Fully uncropped.
  • V: Edges cropped, uncropped corners.
  • W: Cropped corners, uncropped edges.

The track string acts as an instruction set to build Steamware elements while ensuring modularity. Due to the discrete cubic nature, all blocks of identical or mathematically related basis units exhibit modular properties.

Track Characters

Track Character Spatial Transition Instructions Scale Transform Instructions Type Modifier Instructions Special Transform Instructions Style Modifier Instruction
A -x translation : 1 bu
B -y translation : 1 bu
C -z translation : 1 bu
D divide*
E
F filled(Currently 'S')
G grow bu x 3
H
I
J
K
L
M multiply*
N
O open
P protected*
Q
R
S shrink bu ÷ 3
T fully cropped*
U fully uncropped*
V (edges cropped / uncropped corners)*
W (cropped corners / uncropped edges)*
X x translation : 1 bu
Y y translation : 1 bu
Z z translation : 1 bu

mt: Mass Type

The mt variable defines the mass type of the part:

  • O: Open (default). Identical to the diagram above.
  • P: Protected. Hollow but covered, acting like a pipe extension.
  • F: Filled. Solid with no hollow sections. WARNING: The slicer may print at the density set by the user.

en: Export Name

The en variable specifies the base name for generated files (excluding extensions). Files are placed in a directory named after this variable. If left blank, en defaults to unnamed_steamware_<n>.

ed: Export Directory

The ed variable defines the path where exports are saved: <export_path>/<export_name>. If left blank, ed defaults to the current directory.

Examples

WARNING: All numerical values are unit-less. OpenSCAD operates without units, so physical units (e.g., millimeters) are applied later using slicers. If working in inches, adjust fit padding accordingly.

Example 1: Basic Part

$ steamware \
    --en example_part \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --mt O \
    --ts XXSXXX

Example 2: Doughnut Shape

$ steamware \
    --en doughnut \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --mt O \
    --ts XXXBBAAAYY

Example 3: Cross Shape

$ steamware \
    --en cross \
    --ed /directory/where/files/are/exported \
    --bu 10 \
    --fp 0.134 \
    --ts XXXXAAYYBBBB

Each command generates an .scad file, an .stl file, and a .png file with the specified filename.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

steamware-0.1.0.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

steamware-0.1.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file steamware-0.1.0.tar.gz.

File metadata

  • Download URL: steamware-0.1.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for steamware-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b7810eb8919bebec11a3d256a1efcda2f01ee77b5b7410d7a3fab0346943dbb9
MD5 aae4df44749d83f0a208570949de2841
BLAKE2b-256 3f7481de1baa21a20cbdeaaaca0c99953b25aa26ed5ee903185aef7f451e3738

See more details on using hashes here.

File details

Details for the file steamware-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: steamware-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for steamware-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b69c3c93ca6eddabeaa4871f2fefe5dc21fa1188d2ecc5ac30b6aca78a394c6c
MD5 adc08e7827e4c55041d39efa44070c8d
BLAKE2b-256 79688ebb31fdf48e858a15b9e0fb36a89ce3ec6c5bf915cacbcecb149f9b7577

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page