This is yet another generic OpenSCAD library to help with creating meshes/objects/surfaces in OpenSCAD. Currently this library is mainly consumed by myself for some of my work in OpenSCAD. I've put some effort to generalize some of the modules/functions for reuse by anyone. Issues and PR are accepted!
This project is broken down into a few individual files, all of which can be used independently. You can simply download the scad file(s) that you need for your project and include it via use. Below lists each file and the modules/functions it contains.
Most of the functionality in these functions mimics the cloner functionality found in Cinema4D.
Clones children objects in a 3D grid array. When using this module, you can access the $i or $i_xyz global variable which you can use to modify each clone object (see example #3 shown below).
| Parameter name | Description | Default value |
|---|---|---|
count |
Number of clones per axis | [1, 1, 1] |
size |
Distance between each clone | [1, 1, 1] |
clones |
Either "iterate" or "random". Controls how children will be cloned when using multiple children |
"iterate" |
seed |
Seed value used for random child selection (when using "random" clones mode) |
123456 |
use <cloners.scad>
use <random.scad>
// example 1
grid_array_cloner(size = [2, 2, 2], count = [3, 3, 3], clones = "random") {
color("Red") sphere(r = .5, center = true);
color("Yellow") cube([1, 1, 1], center = true);
color("Blue") cylinder(r = .5, h = 1, center = true);
}
translate([0, -2, 0]) linear_extrude(height = .1) text("example 1", size = .8);
// ...View source for other examples
Clones children objects along a circle. When using this module, you can access the $i global variable which you can use to modify each clone object (see example #2 shown below).
| Parameter name | Description | Default value |
|---|---|---|
count |
Number of clones | 1 |
r |
Radius of circle to clone around | 1 |
start |
Angle of circle to begin cloning around | 0 |
end |
Angle of circle to end cloning around | 360 |
align |
Whether or not to rotate the child along the circle | true |
clones |
Either "iterate" or "random". Controls how children will be cloned when using multiple children |
"iterate" |
seed |
Seed value used for random child selection (when using "random" clones mode) |
123456 |
use <../cloners.scad>
use <../random.scad>
// example 1
radial_cloner(count = 6, r = 3, clones = "random") {
color("Red") sphere(r = .5, center = true);
color("Yellow") cube([1, 1, 1], center = true);
color("Blue") cylinder(r = .5, h = 1, center = true);
}
translate([0, -2, 0]) linear_extrude(height = .1) text("example 1", size = .8);
// ...View source for other examples
Similar to the grid array cloner except this only works in one direction. When using this module, you can access the $i global variable which you can use to modify each clone object.
| Parameter name | Description | Default value |
|---|---|---|
count |
Number of clones | 1 |
size |
Distance between each clone | [0, 0, 1] |
clones |
Either "iterate" or "random". Controls how children will be cloned when using multiple children |
"iterate" |
seed |
Seed value used for random child selection (when using "random" clones mode) |
123456 |
TODO
Clone children elements at defined coordinates in 3d space. When using this module, you can access the $i global variable which you can use to modify each clone object.
| Parameter name | Description | Default value |
|---|---|---|
points |
Array of coordinates in space to clone children on to | [] |
clones |
Either "iterate" or "random". Controls how children will be cloned when using multiple children |
"iterate" |
seed |
Seed value used for random child selection (when using "random" clones mode) |
123456 |
TODO
Various functions to generate random numbers, vectors, and matrices.
Returns a double between two numbers (inclusive).
| Parameter name | Description | Default value |
|---|---|---|
low |
Min value | 0 |
high |
Max value | 1 |
seed |
Seed value used for random number generation | 123456 |
use <../random.scad>
translate([rand_double() * 2, rand_double(0, 2), 0]) sphere(size = [2, 2], center = true)Returns an array of RGBA values that can be passed to color(). When defining contraints you will want to stay within [0,1] since values are defined as a floating point number.
| Parameter name | Description | Default value |
|---|---|---|
constrain |
Define min and max values for each color channel. The first element defines min values for RGB respectively. The second element defines max values for RGB respectively. | [[0,0,0], [1,1,1]] |
alpha |
Define the alpha value of the color. This is not randomly defined. | 1 |
seed |
Seed value used for random number generation | 123456 |
use <../random.scad>
color(rand_color()) sphere(size = [2,2], center = true);
color(rand_color(constrain = [[.5, .5, .5], [1, 1, 1]])) sphere(size = [2, 2], center = true);