Designed to have an f-f audio adaptor wired into it, then be screwed onto the side of a desk
Last active
May 4, 2026 15:52
-
-
Save joe-warren/151b220f8dd8fd1c4754a287a24f04d9 to your computer and use it in GitHub Desktop.
Desk Mounted Audio Adaptor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import qualified Waterfall | |
| import Linear | |
| import Control.Lens | |
| import Data.Function ((&)) | |
| w :: Double | |
| w = 30 | |
| innerL :: Double | |
| innerL = 50 | |
| outerL = (innerL + wallT * 2) | |
| wallT = 1.6 | |
| portHeight :: Double | |
| portHeight = -16 | |
| deskT = 18 | |
| deskHookT = 4 | |
| deskHookL = 20 | |
| rearTabL = 20 | |
| holeR = 6/2 | |
| holeBR = 8.5/2 | |
| doodad :: Waterfall.Solid | |
| doodad = | |
| let outerBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w outerL (abs portHeight) ) | |
| outerBaseCyl = Waterfall.unitCylinder | |
| & Waterfall.scale (V3 (w/2) (w/2) outerL) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z) | |
| upperBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w deskHookL (deskT + deskHookT)) | |
| upperBaseCubeGap = Waterfall.unitCube | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 (2*w) deskHookL deskT) | |
| & Waterfall.translate (deskHookT *^ unit _y) | |
| rearTab = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w (outerL + rearTabL) (deskHookT)) | |
| -- & Waterfall.translate (0.5 *^ unit _y) | |
| innerBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 (w - 2*wallT) (outerL- 2*wallT) (abs portHeight) ) | |
| & Waterfall.translate (wallT *^ unit _y) | |
| innerBaseCyl = Waterfall.unitCylinder | |
| & Waterfall.scale (V3 (w/2 - wallT) (w/2 - wallT) (outerL - 2*wallT)) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z + wallT *^ unit _y) | |
| jackHoleA = Waterfall.centeredCylinder | |
| & Waterfall.scale (V3 holeR holeR (outerL * 3)) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z) | |
| jackHoleB = Waterfall.unitCylinder | |
| & Waterfall.scale (V3 holeBR holeBR (outerL * 3)) | |
| & Waterfall.rotate (unit _x) (pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z) | |
| & Waterfall.translate (10 *^ unit _y) | |
| screwR = 1.5 | |
| screwHole = Waterfall.centeredCylinder | |
| & Waterfall.scale (V3 screwR screwR 100) | |
| & (<> (Waterfall.unitCone & Waterfall.uScale 100 & Waterfall.rotate (unit _x) pi)) | |
| & (`Waterfall.intersection` (Waterfall.centeredCylinder & Waterfall.scale (V3 10 10 100))) | |
| & Waterfall.translate ((outerL + rearTabL/2) *^ unit _y) | |
| positives = (outerBaseCube <> outerBaseCyl <> upperBaseCube <> rearTab) | |
| & Waterfall.roundConditionalFillet filletF | |
| filletF (s, e) | |
| | nearZero (s ^. _y) && nearZero (e ^. _y) = Just 1.4 | |
| | (s ^. _z > 0) && (e ^. _z > 0) = Just 1.4 | |
| | otherwise = Nothing | |
| negatives = | |
| upperBaseCubeGap <> innerBaseCube <> innerBaseCyl <> jackHoleA <> jackHoleB <> screwHole | |
| in positives `Waterfall.difference` negatives | |
| main :: IO () | |
| main = Waterfall.writeSTL 0.01 "audio-desk-big-f.stl" doodad |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import qualified Waterfall | |
| import Linear | |
| import Control.Lens | |
| import Data.Function ((&)) | |
| w :: Double | |
| w = 20 | |
| innerL :: Double | |
| innerL = 35 | |
| outerL = (innerL + wallT * 2) | |
| wallT = 1.6 | |
| portHeight :: Double | |
| portHeight = -10 | |
| deskT = 18 | |
| deskHookT = 4 | |
| deskHookL = 20 | |
| rearTabL = 20 | |
| holeR = 6/2 | |
| doodad :: Waterfall.Solid | |
| doodad = | |
| let outerBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w outerL (abs portHeight) ) | |
| outerBaseCyl = Waterfall.unitCylinder | |
| & Waterfall.scale (V3 (w/2) (w/2) outerL) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z) | |
| upperBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w deskHookL (deskT + deskHookT)) | |
| upperBaseCubeGap = Waterfall.unitCube | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 (2*w) deskHookL deskT) | |
| & Waterfall.translate (deskHookT *^ unit _y) | |
| rearTab = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 w (outerL + rearTabL) (deskHookT)) | |
| innerBaseCube = Waterfall.unitCube | |
| & Waterfall.translate (negate $ unit _z) | |
| & Waterfall.translate (negate 0.5 *^ unit _x) | |
| & Waterfall.scale (V3 (w - 2*wallT) (outerL- 2*wallT) (abs portHeight) ) | |
| & Waterfall.translate (wallT *^ unit _y) | |
| innerBaseCyl = Waterfall.unitCylinder | |
| & Waterfall.scale (V3 (w/2 - wallT) (w/2 - wallT) (outerL - 2*wallT)) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z + wallT *^ unit _y) | |
| jackHoles = Waterfall.centeredCylinder | |
| & Waterfall.scale (V3 holeR holeR (outerL * 3)) | |
| & Waterfall.rotate (unit _x) (-pi/2) | |
| & Waterfall.translate (portHeight *^ unit _z) | |
| screwR = 1.5 | |
| screwHole = Waterfall.centeredCylinder | |
| & Waterfall.scale (V3 screwR screwR 100) | |
| & (<> (Waterfall.unitCone & Waterfall.uScale 100 & Waterfall.rotate (unit _x) pi)) | |
| & (`Waterfall.intersection` (Waterfall.centeredCylinder & Waterfall.scale (V3 10 10 100))) | |
| & Waterfall.translate ((outerL + rearTabL/2) *^ unit _y) | |
| positives = (outerBaseCube <> outerBaseCyl <> upperBaseCube <> rearTab) | |
| & Waterfall.roundConditionalFillet filletF | |
| filletF (s, e) | |
| | nearZero (s ^. _y) && nearZero (e ^. _y) = Just 1.4 | |
| | (s ^. _z > 0) && (e ^. _z > 0) = Just 1.4 | |
| | otherwise = Nothing | |
| negatives = | |
| upperBaseCubeGap <> innerBaseCube <> innerBaseCyl <> jackHoles <> screwHole | |
| in positives `Waterfall.difference` negatives | |
| main :: IO () | |
| main = Waterfall.writeSTL 0.01 "audio-desk-f-f.stl" doodad |
View raw
(Sorry about that, but we can’t show files that are this big right now.)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment