| 1 | // Simple openscad program to split the creepy hand so larger creepy |
| 2 | // hands can be made, or just so the hand can be removed to make it |
| 3 | // easier to put things on the hand. |
| 4 | |
| 5 | // Copyright (c) 2019 Clinton Ebadi <clinton@unknownlamer.org>, GPLv3 |
| 6 | // or at your option any later version. |
| 7 | |
| 8 | // Can be used to split other things: just load whatever geometry you |
| 9 | // want and ensure the spot you want to split it at is centered on the |
| 10 | // origin. |
| 11 | |
| 12 | // TODO: |
| 13 | // - allow setting a z offset percentage to shift holes more into upper |
| 14 | // or lower piece |
| 15 | |
| 16 | // Creepy hand from http://www.thingiverse.com/thing:8174 by whosawhatsis, used with permission (CC BY) |
| 17 | // Modified by centering it on the origin (no actual changes) |
| 18 | // Defaults are for #10 threaded rod (hardware store doesn't sell metric rod here) |
| 19 | split_thing (part_spacing = 100) { |
| 20 | scale ([model_scale, model_scale, model_scale]) translate ([-2, 3, 0]) rotate ([0, 0, 40]) translate ([0, 0, 10]) import ("hand-centered.stl"); |
| 21 | } |
| 22 | |
| 23 | default_rod_d = 5.1; // loose fit on #10 threaded rod |
| 24 | default_depth = 20; |
| 25 | default_spacing = 25; |
| 26 | max_model_dim = 1000; |
| 27 | model_scale = 2; |
| 28 | |
| 29 | // [Hidden] |
| 30 | $fa = 1; |
| 31 | $fs = 1; |
| 32 | |
| 33 | // place child object, will be split on plane at z = 0 |
| 34 | module split_thing (top = true, bottom = true, rod_d = default_rod_d, depth = default_depth, spacing = default_spacing, part_spacing = 50) { |
| 35 | module rod_mount () { |
| 36 | module rod () { |
| 37 | translate ([-spacing/2, 0, 0]) cylinder (d=rod_d, h=depth); |
| 38 | translate ([spacing/2, 0, 0]) cylinder (d=rod_d, h=depth); |
| 39 | translate ([0, -spacing/4, 0]) cylinder (d=rod_d, h=depth); |
| 40 | translate ([0, spacing/4, 0]) cylinder (d=rod_d, h=depth); |
| 41 | } |
| 42 | |
| 43 | rod (); |
| 44 | mirror ([0, 0, 1]) rod(); |
| 45 | } |
| 46 | |
| 47 | module whole () { |
| 48 | difference () { |
| 49 | union () { children (); } |
| 50 | rod_mount (); |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | if (top) { |
| 55 | intersection () { |
| 56 | whole () children (); |
| 57 | translate ([-max_model_dim/2,-max_model_dim/2, 0]) cube (max_model_dim); |
| 58 | } |
| 59 | } |
| 60 | if (bottom) { |
| 61 | translate ([top ? part_spacing : 0, 0, 0]) { |
| 62 | rotate ([180, 0, 0]) { |
| 63 | intersection () { |
| 64 | rotate ([0, 0, 0]) whole () children (); |
| 65 | mirror ([0, 0, 1]) translate ([-max_model_dim/2,-max_model_dim/2, 0]) cube (max_model_dim); |
| 66 | } |
| 67 | } |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | } |