Left wall (#4)

* Add screw insert to hold the teensy

* Allow wider wall spacings for more internal room

* Fix the clunky thumb connections

* Enable the teensy holder for all styles
This commit is contained in:
Tom Short 2017-03-16 22:03:07 -04:00 committed by GitHub
parent a9cbe36abd
commit 29edd64d88
6 changed files with 216426 additions and 189286 deletions

3
.gitignore vendored
View file

@ -5,5 +5,6 @@
.nrepl-* .nrepl-*
.lein-* .lein-*
*.gcode
*.scad
/target /target

View file

@ -22,12 +22,12 @@
(def centercol 3) ; controls left-right tilt / tenting (higher number is more tenting) (def centercol 3) ; controls left-right tilt / tenting (higher number is more tenting)
(def orthographic-x (> nrows 5)) ; for larger number of rows don't curve them in as much (def orthographic-x (> nrows 5)) ; for larger number of rows don't curve them in as much
; (def orthographic-x true) ; controls curvature of rows ; (def orthographic-x true) ; controls curvature of rows
(def maltron-style false) ; use fixed angles for columns (def maltron-style false) ; use fixed angles for columns
(def maltron-angles [(deg2rad 10) (deg2rad 10) 0 0 0 (deg2rad -15) (deg2rad -15)]) ; starting point: http://patentimages.storage.googleapis.com/EP0219944A2/imgf0002.png (def maltron-angles [(deg2rad 10) (deg2rad 10) 0 0 0 (deg2rad -15) (deg2rad -15)]) ; starting point: http://patentimages.storage.googleapis.com/EP0219944A2/imgf0002.png
(defn column-offset [column] (cond (defn column-offset [column] (cond
(= column 2) [0 2.82 -4.5] (= column 2) [0 2.82 -4.5]
(>= column 4) [0 -12 5.64] ; original [0 -5.8 5.64] (>= column 4) [0 -12 5.64] ; original [0 -5.8 5.64]
:else [0 0 0])) :else [0 0 0]))
(def thumb-offsets [6 -3 7]) (def thumb-offsets [6 -3 7])
@ -35,8 +35,11 @@
(def keyboard-z-offset 9) ; controls height; original=24 (def keyboard-z-offset 9) ; controls height; original=24
(def extra-width 2.5) ; extra space between the base of keys; original= 2 (def extra-width 2.5) ; extra space between the base of keys; original= 2
(def extra-height 1.0) ; origin= 1/2 (def extra-height 1.0) ; original= 0.5
(def wall-z-offset -15) ; length of the first downward-sloping part of the wall (negative)
(def wall-xy-offset 5) ; offset in the x and/or y direction for the first downward-sloping part of the wall (negative)
(def wall-thickness 2) ; wall thickness parameter; originally 5
;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;
;; General variables ;; ;; General variables ;;
@ -214,7 +217,7 @@
(map + [0 0 keyboard-z-offset])))) (map + [0 0 keyboard-z-offset]))))
; (pr (rotate-around-y π [10 0 1])) ; (pr (rotate-around-y π [10 0 1]))
(pr (key-position 1 cornerrow [(/ mount-width 2) (- (/ mount-height 2)) 0])) ; (pr (key-position 1 cornerrow [(/ mount-width 2) (- (/ mount-height 2)) 0]))
;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;
;; Web Connectors ;; ;; Web Connectors ;;
@ -452,26 +455,37 @@
(defn bottom-hull [& p] (defn bottom-hull [& p]
(hull p (bottom 0.001 p))) (hull p (bottom 0.001 p)))
(def wall-offset -15) (def left-wall-x-offset 10)
(def wall-thickness 2) ; originally 5 (def left-wall-z-offset 3)
(defn left-key-position [row direction]
(map - (key-position 0 row [(* mount-width -0.5) (* direction mount-height 0.5) 0]) [left-wall-x-offset 0 left-wall-z-offset]) )
(defn left-key-place [row direction shape]
(translate (left-key-position row direction) shape))
(defn wall-locate1 [dx dy] [(* dx wall-thickness) (* dy wall-thickness) -1])
(defn wall-locate2 [dx dy] [(* dx wall-xy-offset) (* dy wall-xy-offset) wall-z-offset])
(defn wall-locate3 [dx dy] [(* dx (+ wall-xy-offset wall-thickness)) (* dy (+ wall-xy-offset wall-thickness)) wall-z-offset])
(defn wall-brace [place1 dx1 dy1 post1 place2 dx2 dy2 post2] (defn wall-brace [place1 dx1 dy1 post1 place2 dx2 dy2 post2]
(union (union
(hull (hull
(place1 post1) (place1 post1)
(place1 (translate [0 0 wall-offset] post1)) (place1 (translate (wall-locate1 dx1 dy1) post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) -4] post1)) (place1 (translate (wall-locate2 dx1 dy1) post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1)) (place1 (translate (wall-locate3 dx1 dy1) post1))
(place2 post2) (place2 post2)
(place2 (translate [0 0 wall-offset] post2)) (place2 (translate (wall-locate1 dx2 dy2) post2))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) -4] post2)) (place2 (translate (wall-locate2 dx2 dy2) post2))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) wall-offset] post2))) (place2 (translate (wall-locate3 dx2 dy2) post2)))
(bottom-hull (bottom-hull
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1)) (place1 (translate (wall-locate2 dx1 dy1) post1))
(place1 (translate [0 0 wall-offset] post1)) (place1 (translate (wall-locate3 dx1 dy1) post1))
(place1 (translate [(* dx1 wall-thickness) (* dy1 wall-thickness) wall-offset] post1)) (place2 (translate (wall-locate2 dx2 dy2) post2))
(place2 (translate [0 0 wall-offset] post2)) (place2 (translate (wall-locate3 dx2 dy2) post2)))
(place2 (translate [(* dx2 wall-thickness) (* dy2 wall-thickness) wall-offset] post2))))) ))
(defn key-wall-brace [x1 y1 dx1 dy1 post1 x2 y2 dx2 dy2 post2] (defn key-wall-brace [x1 y1 dx1 dy1 post1 x2 y2 dx2 dy2 post2]
(wall-brace (partial key-place x1 y1) dx1 dy1 post1 (wall-brace (partial key-place x1 y1) dx1 dy1 post1
@ -482,17 +496,25 @@
; back wall ; back wall
(for [x (range 0 ncols)] (key-wall-brace x 0 0 1 web-post-tl x 0 0 1 web-post-tr)) (for [x (range 0 ncols)] (key-wall-brace x 0 0 1 web-post-tl x 0 0 1 web-post-tr))
(for [x (range 1 ncols)] (key-wall-brace x 0 0 1 web-post-tl (dec x) 0 0 1 web-post-tr)) (for [x (range 1 ncols)] (key-wall-brace x 0 0 1 web-post-tl (dec x) 0 0 1 web-post-tr))
(key-wall-brace 0 0 0 1 web-post-tl 0 0 -1 0 web-post-tl)
(key-wall-brace lastcol 0 0 1 web-post-tr lastcol 0 1 0 web-post-tr) (key-wall-brace lastcol 0 0 1 web-post-tr lastcol 0 1 0 web-post-tr)
; right wall ; right wall
(for [y (range 0 lastrow)] (key-wall-brace lastcol y 1 0 web-post-tr lastcol y 1 0 web-post-br)) (for [y (range 0 lastrow)] (key-wall-brace lastcol y 1 0 web-post-tr lastcol y 1 0 web-post-br))
(for [y (range 1 lastrow)] (key-wall-brace lastcol (dec y) 1 0 web-post-br lastcol y 1 0 web-post-tr)) (for [y (range 1 lastrow)] (key-wall-brace lastcol (dec y) 1 0 web-post-br lastcol y 1 0 web-post-tr))
(key-wall-brace lastcol cornerrow 0 -1 web-post-br lastcol cornerrow 1 0 web-post-br) (key-wall-brace lastcol cornerrow 0 -1 web-post-br lastcol cornerrow 1 0 web-post-br)
; left wall ; left wall
(for [y (range 0 lastrow)] (key-wall-brace 0 y -1 0 web-post-tl 0 y -1 0 web-post-bl)) (for [y (range 0 lastrow)] (union (wall-brace (partial left-key-place y 1) -1 0 web-post (partial left-key-place y -1) -1 0 web-post)
(for [y (range 1 lastrow)] (key-wall-brace 0 (dec y) -1 0 web-post-bl 0 y -1 0 web-post-tl)) (hull (key-place 0 y web-post-tl)
(key-place 0 y web-post-bl)
(left-key-place y 1 web-post)
(left-key-place y -1 web-post))))
(for [y (range 1 lastrow)] (union (wall-brace (partial left-key-place (dec y) -1) -1 0 web-post (partial left-key-place y 1) -1 0 web-post)
(hull (key-place 0 y web-post-tl)
(key-place 0 (dec y) web-post-bl)
(left-key-place y 1 web-post)
(left-key-place (dec y) -1 web-post))))
(wall-brace (partial key-place 0 0) 0 1 web-post-tl (partial left-key-place 0 1) 0 1 web-post)
(wall-brace (partial left-key-place 0 1) 0 1 web-post (partial left-key-place 0 1) -1 0 web-post)
; front wall ; front wall
(key-wall-brace 0 0 0 1 web-post-tl 0 0 -1 0 web-post-tl)
(key-wall-brace lastcol 0 0 1 web-post-tr lastcol 0 1 0 web-post-tr) (key-wall-brace lastcol 0 0 1 web-post-tr lastcol 0 1 0 web-post-tr)
(key-wall-brace 3 lastrow 0 -1 web-post-bl 3 lastrow 0.5 -1 web-post-br) (key-wall-brace 3 lastrow 0 -1 web-post-bl 3 lastrow 0.5 -1 web-post-br)
(key-wall-brace 3 lastrow 0.5 -1 web-post-br 4 cornerrow 1 -1 web-post-bl) (key-wall-brace 3 lastrow 0.5 -1 web-post-br 4 cornerrow 1 -1 web-post-bl)
@ -502,7 +524,7 @@
(wall-brace thumb-mr-place 0 -1 web-post-br thumb-tr-place 0 -1 thumb-post-br) (wall-brace thumb-mr-place 0 -1 web-post-br thumb-tr-place 0 -1 thumb-post-br)
(wall-brace thumb-mr-place 0 -1 web-post-br thumb-mr-place 0 -1 web-post-bl) (wall-brace thumb-mr-place 0 -1 web-post-br thumb-mr-place 0 -1 web-post-bl)
(wall-brace thumb-br-place 0 -1 web-post-br thumb-br-place 0 -1 web-post-bl) (wall-brace thumb-br-place 0 -1 web-post-br thumb-br-place 0 -1 web-post-bl)
(wall-brace thumb-ml-place 0 1 web-post-tr thumb-ml-place 0 1 web-post-tl) (wall-brace thumb-ml-place -0.3 1 web-post-tr thumb-ml-place 0 1 web-post-tl)
(wall-brace thumb-bl-place 0 1 web-post-tr thumb-bl-place 0 1 web-post-tl) (wall-brace thumb-bl-place 0 1 web-post-tr thumb-bl-place 0 1 web-post-tl)
(wall-brace thumb-br-place -1 0 web-post-tl thumb-br-place -1 0 web-post-bl) (wall-brace thumb-br-place -1 0 web-post-tl thumb-br-place -1 0 web-post-bl)
(wall-brace thumb-bl-place -1 0 web-post-tl thumb-bl-place -1 0 web-post-bl) (wall-brace thumb-bl-place -1 0 web-post-tl thumb-bl-place -1 0 web-post-bl)
@ -514,112 +536,147 @@
(wall-brace thumb-ml-place 0 1 web-post-tl thumb-bl-place 0 1 web-post-tr) (wall-brace thumb-ml-place 0 1 web-post-tl thumb-bl-place 0 1 web-post-tr)
(wall-brace thumb-bl-place -1 0 web-post-bl thumb-br-place -1 0 web-post-tl) (wall-brace thumb-bl-place -1 0 web-post-bl thumb-br-place -1 0 web-post-tl)
(wall-brace thumb-tr-place 0 -1 thumb-post-br (partial key-place 3 lastrow) 0 -1 web-post-bl) (wall-brace thumb-tr-place 0 -1 thumb-post-br (partial key-place 3 lastrow) 0 -1 web-post-bl)
; clunky bit on the top left thumb connection ; clunky bit on the top left thumb connection (normal connectors don't work well)
(wall-brace thumb-ml-place 0 1 web-post-tr thumb-tl-place -2.5 0 thumb-post-tl) (bottom-hull
(wall-brace thumb-tl-place -1 0 thumb-post-tl (partial key-place 0 cornerrow) -1 0 web-post-bl) (left-key-place cornerrow -1 (translate (wall-locate2 -1 0) web-post))
;; another incomplete try to fix this (left-key-place cornerrow -1 (translate (wall-locate3 -1 0) web-post))
; (bottom-hull (thumb-tl-place thumb-post-tl) (thumb-ml-place (translate (wall-locate2 -0.3 1) web-post-tr))
; (thumb-tl-place (translate [-7 0 0] thumb-post-tl)) (thumb-ml-place (translate (wall-locate3 -0.3 1) web-post-tr)))
; (thumb-ml-place web-post-tr) (hull
; (thumb-ml-place (translate [0 5 -4] web-post-tr))) (left-key-place cornerrow -1 (translate (wall-locate2 -1 0) web-post))
(left-key-place cornerrow -1 (translate (wall-locate3 -1 0) web-post))
(thumb-ml-place (translate (wall-locate2 -0.3 1) web-post-tr))
(thumb-ml-place (translate (wall-locate3 -0.3 1) web-post-tr))
(thumb-tl-place thumb-post-tl))
(hull
(left-key-place cornerrow -1 web-post)
(left-key-place cornerrow -1 (translate (wall-locate1 -1 0) web-post))
(left-key-place cornerrow -1 (translate (wall-locate2 -1 0) web-post))
(left-key-place cornerrow -1 (translate (wall-locate3 -1 0) web-post))
(thumb-tl-place thumb-post-tl))
(hull
(left-key-place cornerrow -1 web-post)
(left-key-place cornerrow -1 (translate (wall-locate1 -1 0) web-post))
(key-place 0 cornerrow web-post-bl)
(key-place 0 cornerrow (translate (wall-locate1 -1 0) web-post-bl))
(thumb-tl-place thumb-post-tl))
(hull
(thumb-ml-place web-post-tr)
(thumb-ml-place (translate (wall-locate1 -0.3 1) web-post-tr))
(thumb-ml-place (translate (wall-locate2 -0.3 1) web-post-tr))
(thumb-ml-place (translate (wall-locate3 -0.3 1) web-post-tr))
(thumb-tl-place thumb-post-tl))
)) ))
(defn on-wall-place [column depth shape]
(translate [0 0 (- depth)]
(key-place column 0
(->> shape
(rotate (+ (* β (- centercol column)) (/ π 12)) [0 -1 0])
(rotate (* α centerrow) [-1 0 0])
(translate [0 (/ mount-height 2) wall-offset])
))))
(def rj9-vertical-offset (- (last (key-position 0 0 [0 (/ mount-height 2) 0])) 35)) (def rj9-start (map + [0 -3 0] (key-position 1 0 (map + (wall-locate3 0 1) [0 (/ mount-height 2) 0]))))
(def rj9-position [(first rj9-start) (second rj9-start) 11])
(def rj9-cube (cube 14.78 13 22.38)) (def rj9-cube (cube 14.78 13 22.38))
(def rj9-space (on-wall-place 1 rj9-vertical-offset rj9-cube)) (def rj9-space (translate rj9-position rj9-cube))
(def rj9-holder (on-wall-place 1 rj9-vertical-offset (def rj9-holder (translate rj9-position
(difference rj9-cube (difference rj9-cube
(union (translate [0 2 0] (cube 10.78 9 18.38)) (union (translate [0 2 0] (cube 10.78 9 18.38))
(translate [0 0 5] (cube 10.78 13 5)))))) (translate [0 0 5] (cube 10.78 13 5))))))
(def teensy-vertical-offset (+ rj9-vertical-offset 10))
(def teensy-width 20) (def teensy-width 20)
(def teensy-height 12) (def teensy-height 12)
(def teensy-length 33) (def teensy-length 33)
(def teensy2-length 53) (def teensy2-length 53)
(def teensy-pcb-thickness 1.6) (def teensy-pcb-thickness 1.6)
(def teensy-holder-width (+ 7 teensy-pcb-thickness))
(def teensy-holder-height (+ 6 teensy-width))
(def teensy-offset-height 5) (def teensy-offset-height 5)
(def teensy-holder-length 68) (def teensy-holder-length 72)
(def teensy-holder-offset (- 0 (/ teensy-holder-length 2))) (def teensy-holder-offset (/ teensy-holder-length -2))
(def teensy-holder-top-length 14) (def teensy-holder-top-length 18)
(def teensy-holder-top-offset (- 1 (/ teensy-holder-top-length 2))) (def teensy-top-xy (key-position 0 0 (map + (wall-locate3 0 1) [(/ mount-width -2) (/ mount-height 2) 0])))
(def teensy-bot-xy (map + (key-position 0 2 (map + (wall-locate3 -1 0) [(/ mount-width -2) (/ mount-height 2) 0]))
[(* 1 teensy-holder-width) 0 0]))
(def teensy-holder-top-offset (/ teensy-holder-top-length -2))
(def teensy-holder-angle (Math/atan2 (- (first teensy-top-xy) (first teensy-bot-xy)) (- (second teensy-top-xy) (second teensy-bot-xy))))
(def teensy-holder (def teensy-holder
(on-wall-place 0 teensy-vertical-offset (->>
(translate [-5 0 0]
(union (union
(->> (cube 3 teensy-holder-length (+ 6 teensy-width)) (->> (cube 3 teensy-holder-length (+ 6 teensy-width))
(translate [-1.5 teensy-holder-offset 0])) (translate [1.5 teensy-holder-offset 0]))
(->> (cube teensy-pcb-thickness teensy-holder-length 3) (->> (cube teensy-pcb-thickness teensy-holder-length 3)
(translate [(/ teensy-pcb-thickness 2) teensy-holder-offset (- -1.5 (/ teensy-width 2))])) (translate [(+ (/ teensy-pcb-thickness 2) 3) teensy-holder-offset (- -1.5 (/ teensy-width 2))]))
(->> (cube 4 teensy-holder-length 4) (->> (cube 4 teensy-holder-length 4)
(translate [(+ 2 teensy-pcb-thickness) teensy-holder-offset (- -1 (/ teensy-width 2))])) (translate [(+ teensy-pcb-thickness 5) teensy-holder-offset (- -1 (/ teensy-width 2))]))
(->> (cube teensy-pcb-thickness teensy-holder-top-length 3) (->> (cube teensy-pcb-thickness teensy-holder-top-length 3)
(translate [(/ teensy-pcb-thickness 2) teensy-holder-top-offset (+ 1.5 (/ teensy-width 2))])) (translate [(+ (/ teensy-pcb-thickness 2) 3) teensy-holder-top-offset (+ 1.5 (/ teensy-width 2))]))
(->> (cube 4 teensy-holder-top-length 4) (->> (cube 4 teensy-holder-top-length 4)
(translate [(+ 2 teensy-pcb-thickness) teensy-holder-top-offset (+ 1 (/ teensy-width 2))])) (translate [(+ teensy-pcb-thickness 5) teensy-holder-top-offset (+ 1 (/ teensy-width 2))]))
)))) (->> (cube teensy-holder-width 2 teensy-holder-height)
(translate [(+ (/ teensy-holder-width 2)) -1 0])))
(translate [(- teensy-holder-width) 0 0])
(rotate teensy-holder-angle [0 0 -1])
(translate [(first teensy-top-xy)
(- (second teensy-top-xy) 1)
(/ (+ 6 teensy-width) 2)])
))
(def usb-cutout (def usb-cutout
(let [hole-height 7.5 (->> (cube 8 30 12)
side-radius (/ hole-height 2) (translate [-4 -5 0])
hole-width 12 (rotate teensy-holder-angle [0 0 -1])
side-cylinder (->> (cylinder side-radius teensy-length) (translate [(+ (first teensy-top-xy) 3)
(with-fn 20) (+ (second teensy-top-xy) 0)
(translate [(/ (- hole-width hole-height) 2) 0 0]))] (/ teensy-holder-height 2)])
(->> (hull side-cylinder ))
(mirror [-1 0 0] side-cylinder))
(rotate (/ π 2) [1 0 0])
(rotate (/ π 2) [0 1 0])
(on-wall-place 0 teensy-vertical-offset))))
(def usb-cutout (def teensy-holder-hole
(on-wall-place 0 teensy-vertical-offset (->> (cube 9 30 12) (->> (cube teensy-holder-width 30 teensy-holder-height)
(translate [-1 10 0])))) (translate [(/ teensy-holder-width -2) -15 (/ teensy-holder-height 2)])
(rotate teensy-holder-angle [0 0 -1])
(translate [(first teensy-top-xy)
(- (second teensy-top-xy) 1)
0])))
(defn screw-insert-shape [bottom-radius top-radius height]
(union (cylinder [bottom-radius top-radius] height)
(translate [0 0 (/ height 2)] (sphere top-radius))))
(defn screw-insert [column row bottom-radius top-radius height] (defn screw-insert [column row bottom-radius top-radius height]
(let [position (key-position column row [0 0 0]) (let [shift-right (= column lastcol)
column-offset (/ mount-width 2)
row-offset (/ mount-height 2)
shift-right (= column lastcol)
shift-left (= column 0) shift-left (= column 0)
shift-up (and (not (or shift-right shift-left)) (= row 0)) shift-up (and (not (or shift-right shift-left)) (= row 0))
shift-down (and (not (or shift-right shift-left)) (= row lastrow)) shift-down (and (not (or shift-right shift-left)) (= row lastrow))
is-vertical (or shift-left shift-right) position (if shift-up (key-position column row (map + (wall-locate2 0 1) [0 (/ mount-height 2) 0]))
col-angle (+ (* β (- centercol column)) (/ π 12)) (if shift-down (key-position column row (map - (wall-locate2 0 -1) [0 (/ mount-height 2) 0]))
row-angle (* α (- row centerrow))] (if shift-left (map + (left-key-position row 0) (wall-locate3 -1 0))
(->> (union (cylinder [bottom-radius top-radius] height) (key-position column row (map + (wall-locate2 1 0) [(/ mount-width 2) 0 0])))))
(translate [0 0 (/ height 2)] (sphere top-radius))) ]
(->> (screw-insert-shape bottom-radius top-radius height)
(translate [(first position) (second position) (/ height 2)]) (translate [(first position) (second position) (/ height 2)])
(translate [(* (if shift-right 1 (if shift-left -1 0)) column-offset) )))
(* (if shift-up 1 (if shift-down -1 0)) row-offset)
0])
(translate [(* wall-offset (Math/sin col-angle))
(* wall-offset (Math/sin row-angle))
0]))))
(defn screw-insert-shapes [bottom-radius top-radius height] (defn screw-insert-all-shapes [bottom-radius top-radius height]
(union (screw-insert 0 0 bottom-radius top-radius height) (union ; (screw-insert 0 0 bottom-radius top-radius height)
(screw-insert 0 cornerrow bottom-radius top-radius height) (screw-insert 0 1 bottom-radius top-radius height)
(screw-insert 3 lastrow bottom-radius top-radius height) (screw-insert 3 lastrow bottom-radius top-radius height)
(screw-insert 3 0 bottom-radius top-radius height) (screw-insert 3 0 bottom-radius top-radius height)
; (screw-insert lastcol (dec cornerrow) radius height) (screw-insert lastcol 1 bottom-radius top-radius height)
)) ))
(def screw-insert-height 3.8) (def screw-insert-height 3.8)
(def screw-insert-bottom-radius (/ 5.31 2)) (def screw-insert-bottom-radius (/ 5.31 2))
(def screw-insert-top-radius (/ 5.1 2)) (def screw-insert-top-radius (/ 5.1 2))
(def screw-insert-holes (screw-insert-shapes screw-insert-bottom-radius screw-insert-top-radius screw-insert-height)) (def screw-insert-holes (screw-insert-all-shapes screw-insert-bottom-radius screw-insert-top-radius screw-insert-height))
(def screw-insert-outers (screw-insert-shapes (+ screw-insert-bottom-radius 1.6) (+ screw-insert-top-radius 1.6) (+ screw-insert-height 1.6))) (def screw-insert-outers (screw-insert-all-shapes (+ screw-insert-bottom-radius 1.6) (+ screw-insert-top-radius 1.6) (+ screw-insert-height 1.6)))
(defn teensy-screw-insert-place [shape]
(let [position (vec (map - teensy-bot-xy (map (partial * 0.3) (map - teensy-top-xy teensy-bot-xy))))]
(->> shape
(rotate (/ π 2) [0 -1 0])
(translate [(- 3 teensy-holder-width (/ screw-insert-height 2)) (- (+ teensy2-length 4)) 0])
(rotate teensy-holder-angle [0 0 -1])
(translate [(first teensy-top-xy) (second teensy-top-xy) 15])
)))
(def teensy-screw-insert-hole (teensy-screw-insert-place (cylinder [screw-insert-bottom-radius screw-insert-top-radius] (+ screw-insert-height 0.4))))
(def teensy-screw-insert-outer (teensy-screw-insert-place (translate [0 0 1] (cylinder [(+ screw-insert-bottom-radius 1.6) (+ screw-insert-top-radius 1.6)] (+ screw-insert-height 2)))))
(spit "things/right.scad" (spit "things/right.scad"
(write-scad (difference (write-scad (difference
@ -628,26 +685,46 @@
connectors connectors
thumb thumb
thumb-connectors thumb-connectors
(difference (union case-walls (difference (union (difference
screw-insert-outers (union case-walls
(if (= nrows 4) teensy-holder)) screw-insert-outers
teensy-screw-insert-outer)
teensy-holder-hole)
teensy-holder)
rj9-space rj9-space
usb-cutout usb-cutout
teensy-screw-insert-hole
screw-insert-holes) screw-insert-holes)
rj9-holder rj9-holder
; thumbcaps ; thumbcaps
; caps ; caps
) )
(translate [0 0 -20] (cube 350 350 40)) (translate [0 0 -20] (cube 350 350 40))
; (translate [0 0 -50] (cube 5 5 20)) ; (translate [0 0 -150] (cube 5 5 20))
))) )))
(spit "things/right-test.scad"
(write-scad
(union
key-holes
connectors
thumb
thumb-connectors
case-walls
teensy-holder
; teensy-holder-hole
screw-insert-outers
teensy-screw-insert-hole
teensy-screw-insert-outer
usb-cutout
rj9-space
)))
(spit "things/test.scad" ; (spit "things/test.scad"
(write-scad (intersection (translate [29 -5 0] (cube 30 30 30)) ; (write-scad (intersection (translate [29 -5 0] (cube 30 30 30))
(difference (union case-walls screw-insert-outers) ; (difference (union case-walls screw-insert-outers)
screw-insert-holes) ; screw-insert-holes)
))) ; )))
; (spit "things/test.scad" ; (spit "things/test.scad"
; (write-scad screw-insert-holes)) ; (write-scad screw-insert-holes))

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff