chiark / gitweb /
nook-case: a comment
[reprap-play.git] / nook-case.scad
index cf15950c32dc6addc9644aeeb43c83d862c1cd0c..fadf7b40e0ac26b4ff3bca98b26ed2b0df865e6d 100644 (file)
@@ -6,6 +6,12 @@ nook_th = 12.41 + 0.50;
 nook_w = 127.12 + 0.75;
 nook_h = 123.44 + 21.88 + 21.05 + 0.75;
 
+usb_w = 12.5;
+usb_below = 2.5;
+
+open_recess_w = 12.5;
+open_recess_h = 2.5;
+
 nook_cnr_rad = 10;
 
 case_th = 2.5;
@@ -29,6 +35,9 @@ tooth_w = 15;
 
 $test = false;
 
+$fa = $test ? 10 : 3;
+$fs = $test ? 0.1 : 1;
+
 // calculated
 
 tooth_height = nook_th;
@@ -71,10 +80,17 @@ etxa = nom_cnr[0] - engage_l2;
 etxb = etxa - engage_l1;
 etxc = -(nom_cnr[0] - engage_l2);
 
+tapa = nom_cnr[1] - engage_l2;
+tapb = tapa - tape_w;
+
+opra = nom_cnr[1] - engage_l2;
+oprb = opra - open_recess_w;
+
 tppS = tppB + [-gap[0], 0];
 tppP = [ tppS[0] - tooth_th, tppC[1] ];
 tppQ = tppP + tooth_height * [0,-1] + tooth_inward * [1,0];
 tppR = [ tppS[0] + tooth_inward, tppQ[1] ];
+tppM = (tppQ + tppR) * 0.5 + tooth_th * 0.5 * [0,1];
 
 module RightSideMainProfile() {
   rectfromto(spp7, spp0);
@@ -114,12 +130,22 @@ module SideTapeCutout() {
   SideTapeCutout1(spp6y, spp5y);
   SideTapeCutout1(spp3y, spp2y);
   SideTapeCutout1(spp3y, spp2y);
-  SideTapeCutout1(spp11y, spp1[1] + 1);
+  SideTapeCutout1(spp11y, spp1[1] + 1); // obsolete I think
 }
 
 module ToothProfile(){
-  l = [ tppA, tppB, tppS, tppR, tppQ, tppP, tppC ];
-  polygon(l);
+  polygon([tppA,
+          tppB,
+          tppS + [-0.1,0],
+          tppP,
+          tppC]);
+  hull(){
+    polygon([tppP,
+            tppM,
+            tppS]);
+    translate(tppM)
+      circle(r= tooth_th/2);
+  }
 }
 
 module Demo(){ ////toplevel
@@ -142,18 +168,26 @@ module Demo(){ ////toplevel
 }
 
 module FaceCore(z0,z1, extra_left, extra_right){
-  for (mx=[0,1]) mirror([mx,0,0]) {
-      for (my=[0,1]) mirror([0,my,0]) {
-         translate(-nom_cnr) {
-           rotate_extrude(angle=90, convexity=10)
-             translate(-[1,0,0] * nook_cnr_rad)
-             children(mx);
+  difference(){
+    for (mx=[0,1]) mirror([mx,0,0]) {
+       for (my=[0,1]) mirror([0,my,0]) {
+           translate(-nom_cnr) {
+             rotate_extrude(angle=90, convexity=10)
+               translate(-[1,0,0] * nook_cnr_rad)
+               children(mx);
+           }
          }
-       }
-      translate([nook_w/2, 0,0])
-       linextr_y_xz(-nom_cnr[1]-0.1, nom_cnr[1]+0.1)
-       children(1-mx);
-    }
+       translate([nook_w/2, 0,0])
+         linextr_y_xz(-nom_cnr[1]-0.1, nom_cnr[1]+0.1)
+         children(1-mx);
+      }
+    for (my=[0,1]) mirror([0,my,0]) {
+       translate([-nook_w/2, 0,0])
+         mirror([1,0,0])
+         linextr_y_xz(tapb, tapa)
+         children(2);
+      }
+  }
   for (my=[0,1]) mirror([0,my,0]) {
       translate([0, -nook_h/2, 0]) {
        linextr_x_yz(-nom_cnr[0]-0.1,    etxc + extra_left)  children(0);
@@ -169,16 +203,28 @@ module FaceCore(z0,z1, extra_left, extra_right){
 }
 
 module Base(){ ////toplevel
-  FaceCore(0,0, 0.3, 0) {
-    LeftSideMainProfile();
-    RightSideMainProfile();
+  difference(){
+    FaceCore(spp7[1],spp8[1], 0.3, 0) {
+      LeftSideMainProfile();
+      RightSideMainProfile();
+      SideTapeCutout();
+    }
+    translate([0, -nook_h/2, 0])
+      mirror([0,1,0])
+      linextr_x_yz(-usb_w/2, usb_w/2)
+      rectfromto(spp8 + [-40, usb_below], [40, 40]);
+    translate([nook_w/2, 0, 0])
+      linextr_y_xz(oprb, opra)
+      translate(spp0)
+      rectfromto([-40, -open_recess_h], [40, 1]);
   }
 }
 
 module Top(){ ////toplevel
-  FaceCore(0,0, -gap[0], gap[0] + 0.3) {
+  FaceCore(tppE[1],tppD[1], -gap[0], gap[0] + 0.3) {
     LeftTopMainProfile();
     RightTopMainProfile();
+    TopTapeCutout();
   }
   translate([tooth_x, nook_h/2, 0])
     linextr_x_yz(-tooth_w/2, +tooth_w/2)
@@ -193,6 +239,11 @@ module TestExtrude(){
   }
 }
 
+module Demo3(){ ////toplevel
+  color("purple") Top();
+  color("red") Base();
+}
+
 module TestSide(){ ////toplevel
   TestExtrude() { LeftSideMainProfile(); SideTapeCutout(); }
 }