From 7040c5aa653f11487b1d52e3c7aefc1e41f57136 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 8 Mar 2019 04:36:23 -0500 Subject: lost tracks --- GenSCAD.hs | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 GenSCAD.hs (limited to 'GenSCAD.hs') diff --git a/GenSCAD.hs b/GenSCAD.hs new file mode 100644 index 0000000..90bcd74 --- /dev/null +++ b/GenSCAD.hs @@ -0,0 +1,77 @@ +module GenSCAD +( placecube +) where + +import Linear.V3 +import Control.Lens +import Data.List +import Text.Printf +import System.IO.Temp +import System.Process + +_V32l :: R3 c1 => c1 c -> [c] +_V32l c = [c ^. _x, c ^. _y, c ^. _z] + +_V32s :: (R3 c1, Show a) => c1 a -> [Char] +_V32s c = intercalate "," (map show (_V32l c)) + +-- placecube: OpenSCAD translate cube described by d to place designated by p +-- placecube (V3 1 2 3, V3 10 20 30) -> +-- translate([1, 2, 3]) { cube([10, 20, 30]); } +placecube obj = "translate([ " ++ _V32s(fst obj) ++ " ]) { cube([ " ++ _V32s(snd obj) ++ " ]); }" +--placecube (p,d) = printf "translate([%d, %d, %d]) { cube([%d, %d, %d]); }" (_V32l p ++ _V32l d) + + +-- take a list of tuples containing positions and dimensions for cubes and +-- generate corresponding code for rendering in OpenSCAD +-- genscad [(V3 0 0 0, V3 10 10 10), (V3 20 20 20, V3 10 10 10)] -> +-- placecube (V3 0 0 0, V3 10 10 10) -> translate ([...]) { cube([...]);} +-- placecube (V3 20 20 20, V3 10 10 10) -> ' + +td = [(V3 0 1 2, V3 10 20 30), (V3 50 51 52, V3 11 22 33)] + +--genscad :: [(V3 p, V3 d)] -> [Char] +--genscad objs = concat $ map (++ "\n") $ map placecube objs +genscad objs = concat $ map (++ "\n") $ map (placecube) objs +printscad objs = putStrLn $ genscad objs +--writefilescad objs = withSystemTempFile "genscad" -> fp gsf -> doprintscad objs +writetempscad objs = writeSystemTempFile "genscad" (genscad objs) +opentempscad objs = runCommand ("openscad " ++ "foo.scad") +--opentempscad objs = + +-- savegenscad code file -> save generated code file +-- opensavegenscad code file -> generate scad, save to file, then open in OpenSCAD + +-- readEditor :: IO String +-- readEditor = withSystemTempFile "read-editor" readEditor' + +-- -- | Opens a file, fills it some content and returns it's contents after it's saved. +-- readEditorWith :: String -> IO String +-- readEditorWith contents = withSystemTempFile "read-editor" $ \fp temph -> do +-- hPutStr temph contents +-- hFlush temph +-- readEditor' fp temph + +-- readEditor' :: FilePath -> Handle -> IO String +-- readEditor' fp temph = do +-- openEditor fp +-- hClose temph +-- readFile fp + + + +-- compileRunPrint :: FilePath -> Ident -> IO String +-- compileRunPrint agdap var = +-- withSystemTempFile "module.mlf" $ +-- \mlfp mlfh -> do +-- callProcess "stack" ["exec", "agda-ocaml", "--", "-v0", "--mlf", agdap +-- , "-o", mlfp, "--print-var", var] +-- runModFile' mlfp mlfh + +-- compileRun :: FilePath -> IO String +-- compileRun agdap = +-- withSystemTempFile "module.mlf" $ +-- \mlfp mlfh -> do +-- callProcess "stack" ["exec", "agda-ocaml", "--", "-v0", "--mlf", agdap +-- , "-o", mlfp] +-- runModFile' mlfp mlfh -- cgit v1.2.3