Coursework Summer 2015/2016
You can also view previous assignments, just for inspiration.
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:
bilekon1 001 002 003 burkoric 004 005 006 busfyadr 007 008 009 cernyda7 010 011 012 chovamar 013 014 015 drhovkla 016 017 018 fedortom 019 020 021 grankdan 022 023 024 hongsewo 025 026 027 hsiehhs2 028 029 030 kabelja5 031 032 033 karpeale 034 035 036 karpoale 037 038 039 kimkyun2 040 041 042 klempjan 043 044 045 klingdav 046 047 048 kolesmat 049 050 051 kopecmi8 052 053 054 kostema3 055 056 057 krakovoj 058 059 060 kubeljit 061 062 063 leahulum 064 065 066 moravm15 067 068 069 motykvac 070 071 072 moudrmi1 073 074 075 niklmate 076 077 078 ocenamic 079 080 081 parkjaej 082 083 084 roustoma 085 086 087 rymeskar 088 089 090 sandgjon 091 092 093 slademi2 094 095 096 smidfil3 097 098 099 sochapet 100 101 102 solankar 103 104 105 strammar 106 107 108 sultatog 109 110 111 svecvac1 112 113 114 svobot19 115 116 117 veselj43 118 119 120 vigriali 121 122 123 zorinand 124 125 126 zoudujir 127 128 129
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.