Simple, but dynamic column builder library.
Inspired by: Wikipedia Artwork and this preview.
I've uploaded a couple ready-made column design as stl
files, but you probably want to download the .scad
file and open it inside OpenSCAD.
I had a lot of fun making this library, however I'm most likely going to drop this project😭.
The way this works is that every section has a 10x10xZ
area (it may overlap on the X and Y axis as well).
Each section is responsible for scaling its children (the sections on top) in a way that they align with the section itself.
Ideally, the sections would pass around x and y dimensions in mm, however because models cannot be called dynamically, the only way to do this in OpenSCAD is to use children and scale([x,y,1]).
However, this messes with dimensions, and makes it hard/impossible to create squares or proper cylinders.
In the end, this limitation kind of killed the joy for me, however by spending more time tweaking values, you can still manage to design really cool columns.
So have fun 🌸
To use this library, simply download and install OpenSCAD and open the columns.scad
file.
Near the bottom of the file, you will find a section titled // BEGIN COLUMN CONFIGURATION
which ends with // END COLUMN CONFIGURATION
.
In-between, you can place your column definition.
As all sections are OpenSCAD modules, you define your column top down: The base is at the top and the capital at the bottom.
The modules take care of scaling the next layer to fit, so all you have to do is stack the sections you want on top of one another, and configure them to your liking.
A simple column could look like this:
rounded_circle_slab(2)
detailed_circular_section(40, 20, 0.1, round_top=true, round_bottom=false)
rounded_circle_slab(3)
With a 2mm rounded circle slab below the 40mm main shaft and a 3mm rounded circle slab stacked on top.
Once you are done, hit F6
(or Design > Render
) - this might take a while, so grab a cup of tea 🧋.
Afterwards, you can export the .stl
by hitting F7
(or File > Export > Export as STL
)
(Note: You might want to change base_size
)
To achieve more rounded, you might also want to change $fn
to a value ≥30
, or set it to ≤25
for a less rounded look.
Mostly complete list of available column sections. Have a look at the comments in the source file for more information.
Note: the preview in the following models were generated with $fn
set to 10, which is why the circular sections only have 10 subsections.
A simple cuboid section with a specific height. You can optionally pass a scale factor to the module as well.
usage: square_section(height, fact=1.0)
example: square_section(5)
A cuboid with its edges cut using a Bézier area
usage: concave_bezier_square(height, inset, angle1, angle2, attack1, attack2, step=0.1, flipped=false)
example: concave_bezier_square(10,0.3,23,45, 1/3, 1/2)
Cuboid with its edges intersected with a Bézier area
usage: convex_bezier_square(height, inset, angle1, angle2, attack1, attack2, step=0.1, flipped=false)
A cuboid section with details. The inset sections can either be square or circular, and can optionally be rounded on the ends.
usage: detailed_square_section(height, detail_type, padding, segments, round_top=false, round_bottom=false, fact=1.0)
example: detailed_square_section(20, “square”, 0.3, 5, round_bottom=true)
A cuboid with round overhang
usage: rounded_slab(height)
example: rounded_slab(5)
Simple cylinder with the given height. You can optionally pass a scale factor to the module as well.
usage: circular_section(height, fact=1)
example: circular_section(5)
A cylindrical section with details
usage: detailed_circular_section(height, segments, detail_size, round_bottom=false, round_top=false, fact=1.0)
example: detailed_circular_section(20, 8, 0.3, round_bottom=true)
A cylinder with its edges cut using a Bézier area
usage: concave_bezier_circle(height, inset, angle1, angle2, attack1, attack2, step=0.1, flipped=false)
example: concave_bezier_circle(5,0.3,20,40,1/2,1/5)
A cylinder with its edges intersected with a Bézier area
usage: convex_bezier_circle(height, inset, angle1, angle2, attack1, attack2, step=0.1, flipped=false)
Cuboid section with extending sections
usage: inset_square_section(height, margin, outline, inset, extrude)
example: inset_square_section(10, [0.05, 0.5], [0.1, 1], 0.1, 0.1)
Ionic style top column spiral detail
usage: dual_spiral_section(extrude, start_radius=0.1, step_size=0.1, radial_growth=0.0003, start_thickness=0.1, thickness_growth=0.0001)
example: dual_spiral_section(0.05)
Cylinder with round overhang
usage: rounded_circle_slab(height)
example: rounded_circle_slab(5)
Note: The following images are screenshots from the editor preview, which may contain visual artifacts. When properly rendering the models, these will not be visible.
Also, the previews were generated using $fn=10
, if you want the shapes to be more rounded, set it to 30 or larger ✨
square_section(1)
convex_bezier_square(1, 0.1, 0, 90, 1/3, 1/3)
concave_bezier_square(1, 0.1, 0, 90, 1/3, 1/3)
detailed_square_section(5,"round", 0.2, 5, round_bottom=true, round_top=true)
concave_bezier_square(3, 0.2, 20, 90, 1/3, 1/3, flipped=true)
square_section(1)
scale([0.8,0.8,1])
rounded_circle_slab(2)
detailed_circular_section(40, 20, 0.1, round_top=true, round_bottom=false)
rounded_circle_slab(2)
scale([1.2,1.2,1])
dual_spiral_section(0.02, radial_growth=0.0004, thickness_growth=0.00015)
square_section(1)
circular_section(1)
convex_bezier_circle(1, 0.1, 0, 90, 1/3, 1/3)
concave_bezier_circle(1, 0.1, 0, 90, 1/3, 1/3)
circular_section(1)
detailed_circular_section(5, 20, 0.1, round_top=true, round_bottom=true)
circular_section(1)
concave_bezier_circle(1, 0.1, 20, 90, 1/3, 1/3, flipped=true)
convex_bezier_circle(1, 0.1, 0, 90, 1/3, 1/3, flipped=true)
circular_section(1)
square_section(1, fact=0.8)
concave_bezier_square(1, 0.1, 0, 90, 1/3, 1/3)
convex_bezier_square(1, 0.1, 0, 90, 1/3, 1/3)
detailed_square_section(5,"square", 0.1, 5)
rounded_slab(1)
square_section(1)
detailed_square_section(5,"round", 0.2, 5, round_bottom=true, round_top=true)
square_section(1)
concave_bezier_square(1, 0.1, 20, 90, 1/3, 1/3, flipped=true)
convex_bezier_square(1, 0.1, 0, 90, 1/3, 1/3, flipped=true)
square_section(1)
The author marked this model as their own original creation.