X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=fairphone-case.scad;h=14db4f8705f8747316e7259d12629cc7f1daca44;hb=e74ae676c2f556d01000c7c05f1bbc4bfec2838c;hp=6b76344472d4eddd024b0d5ab4ce01440e9a09ef;hpb=f3d822e9a43e7b83b5cc4b8dc5819ab12665de86;p=reprap-play.git diff --git a/fairphone-case.scad b/fairphone-case.scad index 6b76344..14db4f8 100644 --- a/fairphone-case.scad +++ b/fairphone-case.scad @@ -44,9 +44,9 @@ lid_lip = 1.75; $fa = 5; $fs = 0.1; -// calculated +// ---------- calculated ---------- -// could be changed +// ----- could be changed ----- lid_buttoncover_gap = lid_gap_x; lid_buttoncover_overlap = case_th_lip + keeper_gap_z_top; @@ -75,13 +75,17 @@ lpp11 = [ lpp10[0], epp5[1] + lid_gap_z ]; lpp12 = [ epp4[0] + lid_lip, lpp11[1] ]; lpp13 = [ lpp12[0], lpp12[1] + lid_lip ]; -bppM = epp4 + [0,1] * lid_gap_z; +// button profile +bppM = epp4 + [0,5]; bppN = [ 0.5 * (epp0[0] + epp4[0]), bppM[1] ]; bppR = [ bppN[0] + lid_buttoncover_gap, -button_cutout_depth ]; bppS = [ epp1[0], bppR[1] ]; bppQ = [ bppM[0], bppR[1] - lid_buttoncover_overlap ]; bppP = bppQ + [0,1] * lid_buttoncover_gap; bppO = [ bppN[0], bppP[1] ]; +bppL = lpp10 + [5,0]; +bppK = [ bppL[0], bppN[1] ]; +bppJ = [ bppN[0], bppL[1] ]; module rectfromto(a,b) { ab = b - a; @@ -124,7 +128,48 @@ module LidEdgeProfile(){ } } -module ButtonPlan(){ +module ButtonCoverProfile(){ + intersection(){ + polygon([ bppM, bppP, bppO, bppJ, bppL, bppK ]); + hull(){ + EdgeProfile(); + LidEdgeProfile(); + } + } +} + +module ButtonPlan(l, bigger){ + C = [0,0]; // by definition + T = [ 0, epp4[1] ]; + G = T + [0,10]; + B0 = T + [0,-1] * button_cutout_depth; + r0 = 0.5 * (T[1] - B0[1]); + A = [ -l/2 + r0, 0.5 * (T[1] + B0[1]) ]; + r1 = r0 + bigger; + // | D1 - A | = r1 * 2 + // D1_y = T_y - r1 + // => 4 * r1^2 = (r1-r0)^2 + (D1_x - A_x)^2 + // => D1_x = A_x + v/~ [ 4 * r1^2 - (r1-r0)^2 ] + D1 = [ A[0] + sqrt( 4*r1*r1 - bigger*bigger ), T[1] - r1 ]; + E1 = 0.5 * (D1 + A); + F1 = D1 + [0,10]; + + hull(){ + for (m=[0,1]) mirror([m,0]) + circleat(A, r1); + } + for (m=[0,1]) mirror([m,0]) { + difference(){ + polygon([ E1, + A, + B0, + G, + F1, + D1 + ]); + circleat(D1, r1); + } + } } module CaseBase_rhsflip(yn=[0,1]) { @@ -301,15 +346,37 @@ module Keeper(){ ////toplevel OneKeeper(); } +module ButtonPlanForDemo(colour, z, gap, overlap){ + color(colour) + translate([0,0,z]) + ButtonPlan(8, + lid_buttoncover_gap * gap + + lid_buttoncover_overlap * overlap); +} + module DemoProfiles(){ ////toplevel LidEdgeProfile(); %EdgeProfile(); KeeperProfile(); - color("blue") rectfromto(bppM, bppO); - color("red") { - rectfromto(bppQ, [ bppS[0], bppQ[1] - 0.1]); - rectfromto(bppR, [ bppS[0], bppQ[1] - 0.1]); + translate([20,0]) { + LidEdgeProfile(); + %EdgeProfile(); + + demopoint_QR = [ bppS[0], bppQ[1] - 0.1]; + + color("blue") ButtonCoverProfile(); + color("red") { + rectfromto(bppQ, demopoint_QR); + rectfromto(bppR, demopoint_QR); + } + } + + translate([-40,0]) { + ButtonPlanForDemo("blue", 0, 0,0); + ButtonPlanForDemo("red", -1, 1,0); + ButtonPlanForDemo("yellow", -2, 0,1); + ButtonPlanForDemo("blue", -3, 1,1); } }