add hand hull to keep spool from falling off end of holder
[ozzloy@gmail.com/3d-printables] / mk2-haribo-spool-holder.scad
index b7ca78b7392e9d9883a21e0d4fd0029b70d60aaf..0b8c55fcbd9a7d2ded5ce6ce72750c963376ec13 100644 (file)
@@ -11,33 +11,145 @@ diagonal = sqrt(pow(30/2, 2) + pow(30/2, 2));
 opening_width = 8;
 inner_block = 12;
 
-major_block_corner_diameter = 4;
-major_block_corner_radius = major_block_corner_diameter / 2;
-
-corner_block_inner = (30 - 16.5) / 2;
+outer_block = (30 - 16.5) / 2;
 wall = 2;
 
-$fn = 40;
+$fn = 100;
+
+module 3030_arm_half(){
+  // inner block
+  square(inner_block / 2);
+
+  // diagonal arms connecting inner block to outer blocks
+  rotate(45) {
+    square([diagonal - wall, wall / 2]); }
+
+  // outer block, without the wall part since wall has rounded corner
+  translate([x / 2 - outer_block, y / 2 - outer_block]) {
+    square(outer_block - wall); }
+
+  // outer arms covering the opening
+  translate([(opening_width + wall) / 2, y / 2 - wall]) {
+    square([(x - opening_width - wall) / 2 - wall, wall]); }
+  // rounded part at entrace to inside
+  translate([(opening_width + wall) / 2, (y - wall) / 2]){
+    circle(d = wall); }
+  // rounded part around outside of extrusion
+  corner_squish = 0.1;
+  translate([x / 2 - wall + corner_squish, y / 2 - wall + corner_squish]) {
+    circle(wall - corner_squish); } }
+
+module 3030_profile(){
+  arms = 4;
+  for(arm = [0:arms - 1]) {
+    rotate(arm * 360 / arms) {
+      3030_arm_half();
+      mirror(){ 3030_arm_half(); } } } }
+
+module 3030_sleeve_profile(){
+  difference() {
+    square(40, true);
+    minkowski() {
+      3030_profile();
+      circle(0.2);} } }
+
+module fillet(r) {
+   offset(-r) {
+     offset(r) {
+       children(); } } }
+
+module upper_arm_profile(){
+  square(40, true);
+
+  a = [20, -20];
+  b = [34.1, 0];
+  c = [6.25, 20];
+  points = [a, b, c];
+
+  arm_radius = 11.35;
+  arm_center = [61.8, 140.4];
+  hull() {
+    polygon(points);
+    translate(arm_center) {
+      circle(arm_radius); } } }
 
-intersection(){
+module forearm_profile() {
+  fillet(-5) {
+    difference() {
+      upper_arm_profile();
+      translate([-20, -20]) {
+        square(151); } } } }
+
+module shoulder_hull() {
+  hull() {
+    translate([-20, -20, 0]) {
+      cube([40, 40, 35]); }
+    difference() {
+      upper_arm_hull();
+      translate([-30, 30, -10]) {
+        cube(300); } } } }
+
+module upper_arm_hull() {
+  linear_extrude(height = 15) {
+    upper_arm_profile(); } }
+
+module elbow_hull() {
+  hull(){
+    difference() {
+      upper_arm_hull();
+      translate([-50, -300 + 120, -1]) {
+        cube(300); } }
+    difference() {
+      forearm_hull();
+      translate([0, 0, 30]) {
+        cube(300); } } } }
+
+module forearm_hull() {
+  linear_extrude(height = 120.5) {
+    forearm_profile(); } }
+
+module hand_profile() {
   minkowski() {
-    square(x - major_block_corner_diameter, center=true);
-    circle(major_block_corner_radius); }
-
-  union(){
-    arms = 4;
-    for(arm = [0:arms - 1]) {
-      rotate(arm * 360 / arms) {
-        square(inner_block / 2);
-        rotate(45) {
-          translate([diagonal/2, 0]) {
-            square([diagonal, wall], center=true); } }
-        translate([x / 2-corner_block_inner, y / 2 - corner_block_inner]) {
-          square([corner_block_inner, corner_block_inner]); }
-        translate([opening_width / 2, y/2 - wall]) {
-          square([(x - opening_width) / 2, wall]); }
-        translate([x / 2 - wall, opening_width / 2]) {
-          square([wall, (y - opening_width) / 2]); } } } } }
+    polygon([[0, 0],
+             [14, 0],
+             [19.5, 20],
+             [7, 20]]);
+    circle(5); } }
+
+module hand_hull() {
+  hull() {
+    difference() {
+      forearm_hull();
+      translate([-30, -30, -300 + 106]) {
+        cube(300); } }
+    translate([53, 135, 115.6]) {
+      linear_extrude(height = 5) {
+        hand_profile(); } } } }
+
+shoulder_hull();
+upper_arm_hull();
+elbow_hull();
+forearm_hull();
+hand_hull();
+
+module original_forearm_profile() {
+  %projection(true) {
+    translate([-315, 0, -80]) {
+      import("Spool-holder.stl"); } } }
+
+module original_upper_arm_profile() {
+  %projection(true) {
+    translate([-315, 0, -2]) {
+      import("Spool-holder.stl"); } } }
+
+module original_spool_holder() {
+  %translate([-315, 0, 0]) {
+    import("Spool-holder.stl"); } }
+
+module original_hand_profile() {
+  %projection(true) {
+    translate([-368, -135, -117]) {
+      import("Spool-holder.stl"); } } }
 
 /*
   This file is part of 3d-printables.