First OpenSCAD Design
I followed mathcodeprint ‘s tutorial on how to make a box because I was struggling with writing code and understanding it. Their videos have been really helpful so far so go check them out!!! I do have a tip when writing this code: Watch your brackets!!! () [] {} I keep forgetting the bracket system [] with in the ().

Cube Box: Patricia Wright
I started with a 30x30x30 cube. In order to make the corners rounded a minkowski code line has to be written to use both objects to make a rounded object. I took my 30x30x30 cube and wrote a minkowski code that uses a sphere of 1. OpenSCAD takes that sphere of 1 and moves it around the edges of the cube and the edges become rounded with the sphere 1 dimensions.

Cube Box: Patricia Wright

Cube Box: Patricia Wright
The next two pictures are getting the cube ready to be hollowed out. I made a slightly larger cube 35x35x20 and translated it up from the center of the origin. The next step in the third picture would be to subtract that difference from the rounded cube. I used the difference tag to remove the top of the cube.

Cube Box: Patricia Wright

Cube Box: Patricia Wright
Now to hollow out the center. I took the first minkowski cube and copied the code down and modified the dimensions to give me a 3 millimeter thickness and adjusted the height slightly. I needed this cube to be the inside compartment difference. I dragged the end } tag for the difference down and differenced that inside cube from the first to make the compartment.

Cube Box: Patricia Wright

Cube Box: Patricia Wright
The last part is a little more challenging to think about. Instead of a cube (it looks like it) I used a square with a circle of one. The square needs to be where it can take off 1 millimeter around the inner edge of the bottom of the box and following the rounded corners. I wrote another minkowski tag for both the square and the circle so it can be a rounded shape. I extruded the square to an extrude of 5 and transformed it down by -1 on the Z axis. I moved my difference } down to include the difference of the shape to make the inner rim of the box.
My planned changes for this box would be to go back in and do some final adjustments to the inner rim, make a matching lid, and customize the box by adding text or something else to it.
Code for this project and references below.
//Tutorial for code help from mathcodeprint https://www.youtube.com/watch?v=lPgLZgnbREk //Base box set up $fn=50; difference(){ minkowski(){ cube([30,30,30], center = true); sphere(1); } //Deleting top to eventually open box translate([0,0,10])cube([35,35,20], center = true); //Inner compartment minkowski(){ cube([27,27,20], center = true); sphere(1); } translate([0,0,-1]){ linear_extrude(5){ minkowski(){ square([28,28], center = true); circle(1); } } } }
References
OpenSCAD-Project Enclosure-Create round corners with Minkowski Sum by mathcodeprint
Second OpenSCAD Design
I followed another tutorial from mathcodeprint on Youtube. I made my own building brick by following along with their video.

Toy Brick: Patricia Wright
I started off with two cubes. I resized them and used a difference tag to subtract the second one from the first one to make the opening in the brick. Next I made three cylinders (one for the top and two for the bottom). I took the difference for the bottom cylinders to make the round pegs that would help hold the brick together with another. The top cylinders needed more work to them. There’s two “for” tags that go along with the top cylinders to make the pegs. They have the i and j variables to them. Adjusting the third number in the translate adjusts the spacing between the pegs. These two variables were added into the translate tag for the cylinders. Messing with the i variable number increases/decreases pegs. The j variable is set to 1 because I just needed an extra row. More can be added for bigger bricks. There are text tag strings also attached with the cylinders because they need to be inside those tags to appear properly on top of the cylinder pegs.

Toy Brick: Patricia Wright
The same goes for the inside cylinder pegs. They need a for tag to make a row of pegs. For this brick size I needed 5 for the inside of the brick. Their position was translated so they can fit in the center of the brick. This was an easy tutorial to follow along. I did have some hang ups that took some time to look for mistakes in my code when I was trying to get the text to appear right on top of the cylinder pegs. Another thing I learned too with the text string is that the first one needs to be the text near the origin (0,0) because OpenSCAD works from the origin and out. So “BRICKS” needed to be first in that text sequence.
//Tutorial for code help from mathcodeprint https://www.youtube.com/watch?v=ecd_eWPnynk $fn=50; pegtext2=[["B","R","I","C","K","S"],["B","U","I","L","D"]]; difference(){ cube([55.80,16.80,9.60]); translate([1.45,1.45]) cube([52.90,13.90,8.60]); } translate([3.90,3.90]) for (j=[0:1] ){ for (i=[0:5] ){ translate([i*9.5,j*9.5,9.60]){ cylinder(h=1.8,r=2.42); translate([0,0,1.8]) linear_extrude(.4) text(pegtext2[j][i], 1.5,halign= "center", valign= "center"); } } } translate([7.90,7.90]) for (k=[0:4]){ translate([k*9.5,0]) difference(){ cylinder(h=8.6,r=3.25); cylinder(h=8.6,r=2.40); } }
References
OpenSCAD Tutorial for Beginners – Model a Toy Brick by mathcodeprint
Iterate One of My OpenSCAD Projects
I followed the tutorial from mathcodeprint to finish up making a lid for the other half of the box I made.

Cube Box: Patricia Wright
The first part was easy. I took a copy of the box to modify. The next part I couldn’t get to work quite right. I was able to get the differences to finally work on the extruded squares that I would be making the outer lid ring. The main difference tag from the lid did not want to apply from the square ring to subtract the difference of the square object to the lid to make the rim. So I went to plan B. I took the square ring and adjusted the settings of the ring to manually make the outer lid ring. It should still work to slide into fit with the bottom half. I also adjusted the distance of the inner difference with the bottom half of the box and made it a little longer so the box lid has a better fit.

Cube Box: Patricia Wright
Last I added my initials to the box. I couldn’t get the difference tag to play nicely with the text to do an engraving, but that’s okay. It seems like the difference tag is very particular to what order the code needs to be in. I’m still working on trying to understand it. My goals for this was to get a matching lid that can work with it and maybe personalize it. For going with a plan B it still came out great.
//Tutorial for code help from mathcodeprint https://www.youtube.com/watch?v=lPgLZgnbREk //Base box set up $fn=50; difference(){ minkowski(){ cube([30,30,30], center = true); sphere(1); } //Deleting top to eventually open box translate([0,0,10])cube([35,35,20], center = true); //Inner compartment minkowski(){ cube([27,27,20], center = true); sphere(1); } translate([0,0,-1.5]){ linear_extrude(5){ minkowski(){ square([28,28], center = true); circle(1); } } } } //Lid for box. New code for second half of box. Tutorial for code help from mathcodeprint https://www.youtube.com/watch?v=11xHKq7Q-nY translate([40,0,0]) difference(){ minkowski(){ cube([30,30,30], center = true); sphere(1); } //Deleting top to open lid box translate([0,0,10])cube([35,35,20], center = true); //Inner compartment minkowski(){ cube([27,27,20], center = true); sphere(1); } } //Making rim for lid translate([40,0,-0.5]) difference(){ linear_extrude(2){ minkowski(){ square([28,28], center = true); circle(1); } } translate([0,0,-0.001]){ linear_extrude(3){ minkowski(){ square([27,27], center = true); circle(1); } } } } //Text translate([50,0,-16]) rotate([0,180]) linear_extrude(0.5){ text("PW");
References
OpenSCAD – Project Enclosure – Part 2 – The Lid by mathcodeprint
Randomness

Code credit: mathgrrl
I decided to keep it simple for now with randomness. The code is still difficult for me to understand, but I changed it up. Going for a cherry pie object, maybe even a pizza, or meatballs with out the spaghetti. I don’t know if I can adjust each individual object in the cluster yet, but that could be something to do.

Code credit: mathgrrl
I changed the color to red and rotated the group of random objects, and also changed them to spheres. I wanted them to sit on the dish that I made from a cylinder. I changed the amount to the max of 10. I forgot to move the seed number for the first two screenshots.

Code credit: mathgrrl
I really want to learn how to make the row of random objects into another shape. Instead of a line I would want to change it into a circle. I also want to figure out how to increase the number further and have it in additional random rings. I don’t thing each ring will be a complete ring once I figure it out. It’ll be random placing spheres on the plate.

Code credit: mathgrrl
I think I have to fiddle with the object code at the bottom to change the randomness shape. I’m thinking I have to change the i variable too since it’s connected with the spheres. That’s what I’m thinking about changing with improvements. I’d also like to see if it’s possible to make a random pile of spheres. It’d make for an interesting pie.
//Credit for code: mathgrrl https://geekhaus.com/3Dpuzzles/2020/04/20/adding-randomness-to-your-designs/ /////////////////////////////////////////////////////////////////// // CONTROLLING THE RANDOMNESS // controls scaling of elements in random subsequence1 // number from 0 (min allowable) to 10 (max allowable) style1 = 7; // controls likelihood of true/false in random subsequence2 // number from 0 (always false) to 10 (always true) style2 = 10; /////////////////////////////////////////////////////////////////// // RANDOM SEED // LET OPENSCAD CHOOSE A RANDOM SEED random_seed = floor(rands(1,9999999,1)[0]); // OR TYPE IN A SEED MANUALLY // Overrides the slider seed unless set to 0 custom_seed = 0; // set the random seed seed = (custom_seed==0) ? random_seed : custom_seed; // Show random seed? (it won't print even if you say yes) show_seed = "yes"; //[yes:Yes,no:No] // Create a string to output the random seed // thank you laird for showing me how to do this with your code // from http://www.thingiverse.com/thing:188481 labelString=str(floor(seed/1000000)%10, floor(seed/100000)%10, floor(seed/10000)%10, floor(seed/1000)%10, floor(seed/100)%10, floor(seed/10)%10, floor(seed/1)%10); // Display the random seed in the render (F5 only) if(show_seed=="yes"){ translate([0,-50,0]) color("gray") %linear_extrude(height=1) text(labelString,size=4,halign="center"); } // Output the random seed in the log echo(labelString); /////////////////////////////////////////////////////////////////// // RANDOM SEQUENCES // construct the main random sequence // a list of random real numbers in [0,10] based on the chosen seed maxSteps=30*1; random = rands(0,10,maxSteps,seed); echo(random); // subsequence of 10 items from the main sequence // weighted by style1 subrandom1 = [for(i=[0:10-1]) random[i]*style1]; echo(subrandom1); // subsequence of another 10 items from the main sequence // output as true/false verdicts by comparison to style2 subrandom2 = [for(i=[10:10+10-1]) random[i]<=style2]; echo(subrandom2); /////////////////////////////////////////////////////////////////// // EXAMPLE RENDERS // example: flat base based on overall size parameters cylinder(h = 8, r1 = 35, r2 = 45, center = true); // example: cubes // heights based on subrandom1, visibility based on subrandom2 color("red") rotate(a=[90,0,0]) translate([0,5,-20]){ for (i=[0:10-1]){ if (subrandom2[i]==true){ translate([(i-5)*(100/12)+100/24,0,5+subrandom1[i]/2]) sphere(2, $fn=50, subrandom1[i],center=true); } } }
References
Adding randomness to your designs by mathgrrl
Final Randomness OpenSCAD Project
I’m sorry for the long code below, but I wanted to try and make a mandala type of design in OpenSCAD. This design is 20 arms plus the main arm for a total of 21 arms. The angel for rotation is 15 degrees. The randomness of each dot from the start of the arm is from 5 to 13.

Code credit: mathgrrl
I’m happy with the result. The screen shots make it hard to see some circles. Each cylinder has a certain number of randomness attached to the radius. The inner most circle not counting the center dot is radius * randomness of 5. The second dot is radius * randomness of 6.

Code credit: mathgrrl
In this screenshot it looks like the dots ripple out in size which is really interesting. It’s hard to see in the second screen shot the last row is a low number of randomness. I believe it’s a randomness of 1 because if it was zero I think it would disappear.

Code credit: mathgrrl
It’s hard to see the seed number because I had to zoom out but it’s in the code to display it. This is another one of my favorites because it looks like the start of a ripple effect. With additional arms at an angle of 15 degrees it would fill up the circle.
/////////////////////////////////////////////////////////////////// // CHOOSE ONE RANDOM SEED AND THEN A RANDOM LIST // LET OPENSCAD CHOOSE A RANDOM SEED random_seed = floor(rands(1,9999999,1)[0]); // OR TYPE IN A SEED MANUALLY // Overrides the slider seed unless set to 0 custom_seed = 0; // set the random seed seed = (custom_seed==0) ? random_seed : custom_seed; // a list of 30 random real numbers in [0,10] based on the chosen seed // to use these in the code type random[0], random[1], random[2], and so on maxSteps=30; random = rands(0,10,maxSteps,seed); /////////////////////////////////////////////////////////////////// // DISPLAY THE SEED // Show random seed? (it won't print even if you say yes) show_seed = "yes"; //[yes:Yes,no:No] // Create a string to output the random seed // thank you laird for showing me how to do this with your code // from http://www.thingiverse.com/thing:188481 labelString=str(floor(seed/1000000)%10, floor(seed/100000)%10, floor(seed/10000)%10, floor(seed/1000)%10, floor(seed/100)%10, floor(seed/10)%10, floor(seed/1)%10); // Display the random seed in the render (F5 only) if(show_seed=="yes"){ translate([0,-30,0]) color("gray") %linear_extrude(height=1) text(labelString,size=4,halign="center"); } // Also output the random seed and the resulting list of random numbers in the log echo(labelString); echo(random); /////////////////////////////////////////////////////////////////// // OK NOW MAKE SOMETHING! //center of pattern cylinder(h=1*random[0]+10, r=2*random[1]); //arm of pattern translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } //arm 2 rotate([0,0,-15]) translate([-20,-10,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 3 rotate([0,0,-30]) translate([-25,-15,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 4 rotate([0,0,-45]) translate([-30,-20,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 5 rotate([0,0,-60]) translate([-35,-25,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 6 rotate([0,0,-75]) translate([-40,-30,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 7 rotate([0,0,-90]) translate([-45,-35,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 8 rotate([0,0,-105]) translate([-50,-40,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 9 rotate([0,0,-120]) translate([-55,-45,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 10 rotate([0,0,-135]) translate([-60,-50,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 11 rotate([0,0,-150]) translate([-65,-55,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 12 rotate([0,0,-165]) translate([-70,-60,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 13 rotate([0,0,-180]) translate([-75,-65,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 14 rotate([0,0,-195]) translate([-80,-70,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 15 rotate([0,0,-210]) translate([-85,-75,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 16 rotate([0,0,-225]) translate([-90,-80,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 17 rotate([0,0,-240]) translate([-105,-85,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 18 rotate([0,0,-255]) translate([-120,-90,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 19 rotate([0,0,-270]) translate([-135,-95,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } } //arm 20 rotate([0,0,-285]) translate([-150,-110,0]){ translate([15,-25,0]){ cylinder(h=1*random[0]+10, r=2*random[5]); } translate([25,-45,0]){ cylinder(h=1*random[0]+10, r=2*random[6]); } translate([45,-65,0]){ cylinder(h=1*random[0]+10, r=2*random[7]); } translate([75,-85,0]){ cylinder(h=1*random[0]+10, r=2*random[8]); } translate([105,-105,0]){ cylinder(h=1*random[0]+10, r=2*random[9]); } translate([145,-125,0]){ cylinder(h=1*random[0]+10, r=2*random[10]); } translate([185,-145,0]){ cylinder(h=1*random[0]+10, r=2*random[11]); } translate([225,-165,0]){ cylinder(h=1*random[0]+10, r=2*random[12]); } translate([265,-185,0]){ cylinder(h=1*random[0]+10, r=2*random[13]); } }
References
Adding randomness to your designs by mathgrrl