Coursework Summer 2015/2016
You can also view previous assignments, just for inspiration.
Varování:
This is not actual course work you are in archive!
Crystals
The topic of this course work are crystals. Your task is to write OpenSCAD modules for generating deterministic and random crystals based on the input; prepare one of the assigned crystals for 3D printings; print it and postprocess it if needed.
Crystal generators
Create OpenSCAD crystal
module that renders crystals, with the following interface:
module crystal(thorns=[]) { ... }
Vector (array) thorns
has definitions of crystal’s thorns. One thorn is defined by it’s rotation, length and number of segments.
thorns_abstract = [[[rotx, roty, rotz], height, circumr, seg], ...]; thorns_example = [[[0,0,0], 30, 3, 4], [[90,0,0], 25.5, 2.65, 7]];
Each thorn has shape similar to the following picture (click to enlarge):

The center of bottom side resides in the origin (point [0, 0, 0]). Before the rotation the thorn points upwards along the positive Z axis. The total length/height of the thorn is height
(in the thorns_abstract
example above), the breakpoint is in cubic root distance of the end (see pic for more mathematics explanation). The thorn has a regular-polygon-shaped profile. Circumscribed circle of such polygon has radius of circumr
in the breakpoint, and circumr/3
at the bottom. The polygon has seg
edges/vertices. Thorn is rotated from it’s original upwards pointing position by the [rotx, roty, rotz]
vector.
A crystal is only bunch of such thorns, nothing else (no central object exist).
For the thorns_example
from above, this is how it should look like:

Your next task is a module that generates a (pseudo)random crystal. It doesn’t get the list of thorns as it’s arguments, but only intervals and number of thorns.
module random_crystal(nthorns=350, rot=[-90,100], height=[20,40], circumr=[2,4.5], seg=[3,10]) { ... }
nthorns
is count of thorns- all other arguments are 2-items vectors with min and max possible values of thorn’s features with the same name (
rot
is interval for allrotx
,roty
androtz
)
Use rands() for random number generating.
Be aware that seg
is always an integer (unlike other values). Make sure that all the integers in given interval (including the min and max provided) have the same chance to be randomly selected (achieve discrete uniform distribution).
This is necessary to get all the points.
For default arguments, this is how a crystal might look like (but it’s random, so it should look different each time):

Your crystals
Each of you has been assigned 3 randomly generated crystals (and data to generate them). You get them in the form of data for your crystal()
module and in STL as well.
It is possible that your crystals will take too much time to generate with F6, that’s all right, that’s why we give you STLs as well.
For testing, just use F5 or subset of the data.
If you want to test your full dataset anyway, you might need to enlarge Turn of rendering at value in OpenSCAD settings.
You can find your crystals at the following URLs:
Where XXX is to be replaced with numbers from this list:
removed
Pre-processing
Choose one of the crystals assigned to you (the one you think will be the easiest) and prepare it for 3D printing. You can do almost anything with it (repair mesh, cut, rotate, add support structure…), but the dimensions and shape of the printed crystal should stay the same as in the STL.
Output of this task is one or many STL files ready for slicing, and a brief description of your actions (and reasons for them) (not necessarily in written form, but you must be able to describe it).
Slicing
Use any slicer tool to slice your STL(s) form previous section. Use proper profiles and adjust the settings as you see fit. For Slic3r strat with slic3r-config-bundle.ini.zip (be sure not to use general -default- profiles and to use Load Config Bundle option). Profiles for other slicers are not provided, but you are free to create your own based on the Slic3r profiles.
Output of this task is exported slicing profile and one or more GCODE file(s). You can print more STLs at once, if they fit into the printing bed, or in sequence if not or if you just simply wan to do it that way. (Combinations possible as well.)
Printing and post-processing
At dates published in KOS, you will print your course work in the lab. The material will be ABS, the printers will be the same as in classrooms. You will use your submitted GCODE file(s). It is necessary to post-process the print (unless you print it in some magical way) - remove support, sandpaper it, glue it together etc.
The output is a physical model of one of your crystals, as similar to the digital original as possible.
You only get 5 hours for printing and post-processing, check your print time before you submit the gcodes.
If you print fails totally, you can get a second attempt. But you can only gain more points for the printing itself. Example: You fail the slicing part, get 0 points for that and the print fails as well (and you get 0 points there as well) =* you can print next time and gain points for the print, but you will not get nay points for your re-sliced model.
If the print fails because of HW error, it’s not your fault and you can always get a new attempt.
Submitting, points and deadlines
Upload a ZIP archive with any suitable name to your Edux namespace and link it form there. All textual notes belongs directly to you Edux namespace, no need to put them in txt files inside the archive.
Submit the following in the archive:
- scad file with
crystal
andrandom_crystal
modules - scad file with
crystal
call downloaded from Edux (the one you selected) - STL with crystal from Eduxu (the one you selected)
- STL file(s) you’ve sliced
- GCODE file(s) for printing
- Exported slicer profile
- any more files you need to make this work (scripts, netfabb projects, scad files with helper modules, etc.)
Deadline is 19.6.2016 including that day (or the start of your “zápočtový termín” (the thing you sign into in KOS to print your course work), if that’s sooner). Late submitting: For each extra started week (even if that’s one second) you loose 10 points. You don’t get negative points in total for your course work (if you should get negative, you get 0 instead). When your “zápočtový termín” starts, the archive has to be already submitted to Edux.
Exams period at FIT ČVUT ends at 1.7.2016, you can submit and/or print later, but you need to get prior approval from us and accept all risks associated with such action.
Points are awarded according to this table:
OpenSCAD modules | 10 | |
---|---|---|
crystal module works as described here | 3 | mandatory in this section |
random_crystal module works as described here | 4 | mandatory in this section |
Source code is readable, commented and follows DRY | 3 | |
Pre-processing | 10 | |
Well prepared STL(s) | 5 | mandatory in this section |
Mesh in all STLs is valid 2-manifold | 5 | |
Slicing | 10 | |
Supports (not needed (5 p.), needed and auto-generated* (2.5 p.), not needed but generated (0 p.)) | 5 | |
Good slicing options (perimeters, infill, layer height…) | 5 | |
Printing and post-processing | 20 | |
It is a physical copy of your crystal, it is post-processed (no supports, glued together, etc.) | 5 | mandatory in this section |
No errors clearly caused by bad STLs or slicing | 7.5 | |
No errors clearly caused by bad printing (Z height, bad temperatures, no juice applied, etc.) | 7.5 |
- Only support generated while slicing is considered bad here. Manually added support on STL level is fine.
Důležité:
You’ll need to bring your own device (preferably laptop) that’s capable to connect to WiFi or LAN and can run OctoPrint. You need to be able to tell us your MAC address if needed.
Points are split into 4 sections. Mandatory in this section means, that without accomplishing this you cannot get any points form that section. In case of second print attempt, you cannot get new points for other sections but Printing and post-processing.