Created
March 17, 2022 22:37
-
-
Save joe-warren/8818aa41c3895a4119dd73013d11a220 to your computer and use it in GitHub Desktop.
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
| {-# LANGUAGE TypeSynonymInstances #-} | |
| {-# LANGUAGE FlexibleInstances #-} | |
| module Object where | |
| import qualified Csg | |
| import qualified Csg.STL | |
| import Data.List | |
| import Data.Serialize | |
| import Data.Semigroup | |
| import Data.Vec3 as V3 | |
| import qualified Data.Text.IO as T | |
| t = 20 | |
| holeR' = 10 | |
| holeR =7 | |
| pictureRail :: Csg.BspTree | |
| pictureRail = Csg.unionConcat | |
| [ Csg.translate (-10, 10, 0) $ Csg.scale (10, 10, 1) $ Csg.unitCylinder 32 | |
| , Csg.translate (-10, 10, 0) $ Csg.scale (13, 10, 1) $ | |
| (Csg.unitCylinder 32 `Csg.subtract` | |
| (Csg.uniformScale 100 $ Csg.translate (0.5, 0, 0) Csg.unitCube)) | |
| , (Csg.scale (40, 10, 1) $ Csg.translate (-0.5, 0.5, 0) Csg.unitCube) `Csg.subtract` | |
| (Csg.translate (-40, 10, 0) $ Csg.scale (12, 5, 2) $ Csg.unitCylinder 32) | |
| ] | |
| screw :: Csg.BspTree | |
| screw = (Csg.uniformScale (-7.5/2) $ Csg.translate (0, 0, 0.5) $ Csg.unitCone 16) `Csg.union` | |
| (Csg.scale (1.5, 1.5, 20) $ Csg.translate (0, 0, -0.5) $ Csg.unitCylinder 16) | |
| object :: Csg.BspTree | |
| object = (Csg.scale (1, 1, 20) $ Csg.unionConcat | |
| [ (Csg.scale (50, 60, 1) $ Csg.translate (0, 0.5, 0) $ Csg.unitCube) | |
| `Csg.subtract` | |
| (Csg.translate (-25, 10, 0) $ Csg.rotate (0,0,-1) (atan2 (50-holeR'*2) (60-10)) $ Csg.uniformScale 300 $ Csg.translate (-0.5, 0, 0) Csg.unitCube) | |
| , Csg.translate (25-holeR', 60, 0) $ Csg.scale (holeR', holeR', 1) $ Csg.unitCylinder 32 | |
| ] `Csg.subtract` | |
| Csg.unionConcat | |
| [ Csg.translate (20, -0.01,0) $ pictureRail | |
| , Csg.translate (25-holeR', 60, 0) $ Csg.uniformScale holeR $ Csg.unitCylinder 32 | |
| , Csg.translate (5, 26.5, 0) $ Csg.rotate (0, 0, 1) (pi*0.1) $ Csg.scale (30, 5, 2) Csg.unitCube | |
| , Csg.translate (7.5, 36, 0) $ Csg.rotate (0, 0, 1) (pi*0.1) $ Csg.scale (25, 4.5, 2) Csg.unitCube | |
| , Csg.translate (10, 45, 0) $ Csg.rotate (0, 0, 1) (pi*0.1) $ Csg.scale (20, 4, 2) Csg.unitCube | |
| ] | |
| ) `Csg.subtract` ( Csg.translate (25.01, 5, 0) $ Csg.rotate (0, 1, 0) (pi/2) screw) | |
| path= "picture-rail-mount.stl" | |
| main :: IO () | |
| main = T.writeFile path $ Csg.STL.toSTL object |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment