-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A math-inspired programmatic 2D & 3D CAD system.
--
-- An OpenSCAD execution engine and haskell library for generating models
-- in STL and many other formats.
@package implicit
@version 0.3.0.1
module Graphics.Implicit.Definitions
newtype Fastℕ
Fastℕ :: Int -> Fastℕ
fromFastℕ :: FastN n => Fastℕ -> n
toFastℕ :: FastN n => n -> Fastℕ
data ℕ
fromℕ :: N n => ℕ -> n
toℕ :: N n => n -> ℕ
type ℝ = Double
type ℝ2 = (ℝ, ℝ)
-- | apply a function to both items in the provided tuple.
both :: (t -> b) -> (t, t) -> (b, b)
type ℝ3 = (ℝ, ℝ, ℝ)
-- | apply a function to all three items in the provided tuple.
allthree :: (t -> b) -> (t, t, t) -> (b, b, b)
-- | A give up point for dividing ℝs, and for the maximum difference
-- between abs(n) and abs(-n).
minℝ :: ℝ
-- | TODO: Find a better place for this
(⋅) :: InnerSpace a => a -> a -> Scalar a
(⋯*) :: ComponentWiseMultable a => a -> a -> a
(⋯/) :: ComponentWiseMultable a => a -> a -> a
-- | A chain of line segments, as in SVG or DXF. eg. [(0,0), (0.5,1),
-- (1,0)] ---> /\
newtype Polyline
Polyline :: [ℝ2] -> Polyline
-- | A triangle in 2D space (a,b,c).
newtype Polytri
Polytri :: (ℝ2, ℝ2, ℝ2) -> Polytri
-- | A triangle in 3D space (a,b,c) = a triangle with vertices a, b and c
newtype Triangle
Triangle :: (ℝ3, ℝ3, ℝ3) -> Triangle
-- | A triangle ((v1,n1),(v2,n2),(v3,n3)) has vertices v1, v2, v3 with
-- corresponding normals n1, n2, and n3
newtype NormedTriangle
NormedTriangle :: ((ℝ3, ℝ3), (ℝ3, ℝ3), (ℝ3, ℝ3)) -> NormedTriangle
-- | A triangle mesh is a bunch of triangles, attempting to be a surface.
newtype TriangleMesh
TriangleMesh :: [Triangle] -> TriangleMesh
-- | A normed triangle mesh is a mesh of normed triangles.
newtype NormedTriangleMesh
NormedTriangleMesh :: [NormedTriangle] -> NormedTriangleMesh
-- | A 2D object.
type Obj2 = (ℝ2 -> ℝ)
-- | A 3D object.
type Obj3 = (ℝ3 -> ℝ)
-- | A 2D box.
type Box2 = (ℝ2, ℝ2)
-- | A 3D box.
type Box3 = (ℝ3, ℝ3)
-- | A Box containing a 2D object.
type Boxed2 a = (a, Box2)
-- | A Box containing a 3D object.
type Boxed3 a = (a, Box3)
-- | A Boxed 2D object
type BoxedObj2 = Boxed2 Obj2
-- | A Boxed 3D object
type BoxedObj3 = Boxed3 Obj3
-- | A symbolic 2D object format. We want to have symbolic objects so that
-- we can accelerate rendering & give ideal meshes for simple cases.
data SymbolicObj2
RectR :: ℝ -> ℝ2 -> ℝ2 -> SymbolicObj2
Circle :: ℝ -> SymbolicObj2
PolygonR :: ℝ -> [ℝ2] -> SymbolicObj2
Complement2 :: SymbolicObj2 -> SymbolicObj2
UnionR2 :: ℝ -> [SymbolicObj2] -> SymbolicObj2
DifferenceR2 :: ℝ -> [SymbolicObj2] -> SymbolicObj2
IntersectR2 :: ℝ -> [SymbolicObj2] -> SymbolicObj2
Translate2 :: ℝ2 -> SymbolicObj2 -> SymbolicObj2
Scale2 :: ℝ2 -> SymbolicObj2 -> SymbolicObj2
Rotate2 :: ℝ -> SymbolicObj2 -> SymbolicObj2
Outset2 :: ℝ -> SymbolicObj2 -> SymbolicObj2
Shell2 :: ℝ -> SymbolicObj2 -> SymbolicObj2
EmbedBoxedObj2 :: BoxedObj2 -> SymbolicObj2
-- | A symbolic 3D format!
data SymbolicObj3
Rect3R :: ℝ -> ℝ3 -> ℝ3 -> SymbolicObj3
Sphere :: ℝ -> SymbolicObj3
Cylinder :: ℝ -> ℝ -> ℝ -> SymbolicObj3
Complement3 :: SymbolicObj3 -> SymbolicObj3
UnionR3 :: ℝ -> [SymbolicObj3] -> SymbolicObj3
DifferenceR3 :: ℝ -> [SymbolicObj3] -> SymbolicObj3
IntersectR3 :: ℝ -> [SymbolicObj3] -> SymbolicObj3
Translate3 :: ℝ3 -> SymbolicObj3 -> SymbolicObj3
Scale3 :: ℝ3 -> SymbolicObj3 -> SymbolicObj3
Rotate3 :: ℝ3 -> SymbolicObj3 -> SymbolicObj3
Rotate3V :: ℝ -> ℝ3 -> SymbolicObj3 -> SymbolicObj3
Outset3 :: ℝ -> SymbolicObj3 -> SymbolicObj3
Shell3 :: ℝ -> SymbolicObj3 -> SymbolicObj3
EmbedBoxedObj3 :: BoxedObj3 -> SymbolicObj3
ExtrudeR :: ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
ExtrudeRotateR :: ℝ -> ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
ExtrudeRM :: ℝ -> Either ℝ (ℝ -> ℝ) -> Either ℝ (ℝ -> ℝ) -> Either ℝ2 (ℝ -> ℝ2) -> SymbolicObj2 -> Either ℝ (ℝ2 -> ℝ) -> SymbolicObj3
RotateExtrude :: ℝ -> Maybe ℝ -> Either ℝ2 (ℝ -> ℝ2) -> Either ℝ (ℝ -> ℝ) -> SymbolicObj2 -> SymbolicObj3
ExtrudeOnEdgeOf :: SymbolicObj2 -> SymbolicObj2 -> SymbolicObj3
-- | Convert from our Integral to our Rational.
fromℕtoℝ :: ℕ -> ℝ
-- | Convert from our Fast Integer (int32) to ℝ.
fromFastℕtoℝ :: Fastℕ -> ℝ
-- | Convert from our rational to a float, for output to a file.
fromℝtoFloat :: ℝ -> Float
instance GHC.Show.Show Graphics.Implicit.Definitions.SymbolicObj3
instance GHC.Show.Show Graphics.Implicit.Definitions.SymbolicObj2
instance Control.DeepSeq.NFData Graphics.Implicit.Definitions.TriangleMesh
instance Control.DeepSeq.NFData Graphics.Implicit.Definitions.Triangle
instance Control.DeepSeq.NFData Graphics.Implicit.Definitions.Polytri
instance Control.DeepSeq.NFData Graphics.Implicit.Definitions.Polyline
instance Graphics.Implicit.Definitions.ComponentWiseMultable Graphics.Implicit.Definitions.ℝ2
instance Graphics.Implicit.Definitions.ComponentWiseMultable Graphics.Implicit.Definitions.ℝ3
instance GHC.Show.Show (Graphics.Implicit.Definitions.ℝ3 -> Graphics.Implicit.Definitions.ℝ)
instance GHC.Show.Show (Graphics.Implicit.Definitions.ℝ -> Graphics.Implicit.Definitions.ℝ2)
instance GHC.Show.Show (Graphics.Implicit.Definitions.ℝ2 -> Graphics.Implicit.Definitions.ℝ)
instance GHC.Show.Show (Graphics.Implicit.Definitions.ℝ -> Graphics.Implicit.Definitions.ℝ)
module Graphics.Implicit.ExtOpenScad.Definitions
-- | Handles parsing arguments to built-in modules
data ArgParser a
-- | For actual argument entries: ArgParser (argument name) (default) (doc)
-- (next Argparser...)
AP :: Symbol -> Maybe OVal -> String -> (OVal -> ArgParser a) -> ArgParser a
-- | For returns: ArgParserTerminator (return value)
APTerminator :: a -> ArgParser a
-- | For failure: ArgParserFailIf (test) (error message) (child for if
-- true)
APFailIf :: Bool -> String -> ArgParser a -> ArgParser a
APExample :: String -> ArgParser a -> ArgParser a
APTest :: String -> [TestInvariant] -> ArgParser a -> ArgParser a
APBranch :: [ArgParser a] -> ArgParser a
newtype Symbol
Symbol :: String -> Symbol
data Pattern
Name :: Symbol -> Pattern
ListP :: [Pattern] -> Pattern
Wild :: Pattern
-- | An expression.
data Expr
Var :: Symbol -> Expr
LitE :: OVal -> Expr
ListE :: [Expr] -> Expr
LamE :: [Pattern] -> Expr -> Expr
(:$) :: Expr -> [Expr] -> Expr
-- | A statement, along with the line, column number, and file it is found
-- at.
data StatementI
StatementI :: SourcePosition -> Statement StatementI -> StatementI
data Statement st
Include :: String -> Bool -> Statement st
(:=) :: Pattern -> Expr -> Statement st
If :: Expr -> [st] -> [st] -> Statement st
NewModule :: Symbol -> [(Symbol, Maybe Expr)] -> [st] -> Statement st
ModuleCall :: Symbol -> [(Maybe Symbol, Expr)] -> [st] -> Statement st
DoNothing :: Statement st
-- | Objects for our OpenSCAD-like language
data OVal
OUndefined :: OVal
OError :: [String] -> OVal
OBool :: Bool -> OVal
ONum :: ℝ -> OVal
OList :: [OVal] -> OVal
OString :: String -> OVal
OFunc :: (OVal -> OVal) -> OVal
OUModule :: Symbol -> Maybe [(Symbol, Bool)] -> ([OVal] -> ArgParser (StateC [OVal])) -> OVal
ONModule :: Symbol -> (SourcePosition -> [OVal] -> ArgParser (StateC [OVal])) -> [([(Symbol, Bool)], Maybe Bool)] -> OVal
OVargsModule :: String -> (String -> SourcePosition -> [(Maybe Symbol, OVal)] -> [StatementI] -> ([StatementI] -> StateC ()) -> StateC ()) -> OVal
OObj3 :: SymbolicObj3 -> OVal
OObj2 :: SymbolicObj2 -> OVal
newtype TestInvariant
EulerCharacteristic :: ℕ -> TestInvariant
-- | In order to not propagate Parsec or other modules around, create our
-- own source position type for the AST.
data SourcePosition
SourcePosition :: Fastℕ -> Fastℕ -> FilePath -> SourcePosition
type StateC = StateT CompState IO
-- | This is the state of a computation. It contains a hash of
-- variables/functions, an array of OVals, a path, messages, and options
-- controlling code execution.
data CompState
CompState :: VarLookup -> [OVal] -> FilePath -> [Message] -> ScadOpts -> CompState
[scadVars] :: CompState -> VarLookup
[oVals] :: CompState -> [OVal]
[sourceDir] :: CompState -> FilePath
[messages] :: CompState -> [Message]
[scadOpts] :: CompState -> ScadOpts
newtype VarLookup
VarLookup :: Map Symbol OVal -> VarLookup
-- | An individual message.
data Message
Message :: MessageType -> SourcePosition -> String -> Message
-- | The types of messages the execution engine can send back to the
-- application.
data MessageType
TextOut :: MessageType
Warning :: MessageType
Error :: MessageType
SyntaxError :: MessageType
Compatibility :: MessageType
Unimplemented :: MessageType
-- | Options changing the behavior of the extended OpenScad engine.
data ScadOpts
ScadOpts :: Bool -> Bool -> ScadOpts
[openScadCompatibility] :: ScadOpts -> Bool
[importsAllowed] :: ScadOpts -> Bool
-- | For programs using this API to perform variable lookups, after
-- execution of an escad has completed.
lookupVarIn :: String -> VarLookup -> Maybe OVal
varUnion :: VarLookup -> VarLookup -> VarLookup
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.Expr
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.Expr
instance GHC.Classes.Eq st => GHC.Classes.Eq (Graphics.Implicit.ExtOpenScad.Definitions.Statement st)
instance GHC.Show.Show st => GHC.Show.Show (Graphics.Implicit.ExtOpenScad.Definitions.Statement st)
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.StatementI
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.StatementI
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.TestInvariant
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.Message
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.MessageType
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.MessageType
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.SourcePosition
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.Pattern
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.Pattern
instance GHC.Classes.Ord Graphics.Implicit.ExtOpenScad.Definitions.Symbol
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.Symbol
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.Symbol
instance GHC.Base.Functor Graphics.Implicit.ExtOpenScad.Definitions.ArgParser
instance GHC.Base.Applicative Graphics.Implicit.ExtOpenScad.Definitions.ArgParser
instance GHC.Base.Monad Graphics.Implicit.ExtOpenScad.Definitions.ArgParser
instance GHC.Base.MonadPlus Graphics.Implicit.ExtOpenScad.Definitions.ArgParser
instance GHC.Base.Alternative Graphics.Implicit.ExtOpenScad.Definitions.ArgParser
instance GHC.Classes.Eq Graphics.Implicit.ExtOpenScad.Definitions.OVal
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.OVal
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.Message
instance GHC.Show.Show Graphics.Implicit.ExtOpenScad.Definitions.SourcePosition
module Graphics.Implicit.ExtOpenScad.Parser.Expr
expr0 :: GenParser Char st Expr
module Graphics.Implicit.ExtOpenScad.Parser.Statement
-- | all of the token parsers are lexemes which consume all trailing spaces
-- nicely. | This leaves us to deal only with the first spaces in the
-- file.
parseProgram :: SourceName -> String -> Either ParseError [StatementI]
module Graphics.Implicit.Export.TriangleMeshFormats
-- | Generate an STL file is ASCII format.
stl :: TriangleMesh -> Text
-- | Generate an STL file in it's binary format.
binaryStl :: TriangleMesh -> ByteString
jsTHREE :: TriangleMesh -> Text
module Graphics.Implicit.Export.PolylineFormats
svg :: [Polyline] -> Text
-- | Gcode generation for the laser cutter in HackLab. Complies with
-- https://ws680.nist.gov/publication/get_pdf.cfm?pub_id=823374
-- FIXME: parameters would be nice.
hacklabLaserGCode :: [Polyline] -> Text
-- | DXF2 export in 2D. conforming to AutoCAD R12/13.
dxf2 :: [Polyline] -> Text
module Graphics.Implicit.Export.NormedTriangleMeshFormats
-- | Generate a .obj format file from a NormedTriangleMesh see:
-- https://en.wikipedia.org/wiki/Wavefront_.obj_file
obj :: NormedTriangleMesh -> Text
module Graphics.Implicit.MathUtil
-- | Rounded Maximum Consider max(x,y) = 0, the generated curve has a
-- square-like corner. We replace it with a quarter of a circle
rmax :: ℝ -> ℝ -> ℝ -> ℝ
-- | Like rmax, but on a list instead of two. Just as maximum is. The
-- implementation is to take the maximum two and rmax those.
rmaximum :: ℝ -> [ℝ] -> ℝ
-- | Like rmin but on a list.
rminimum :: ℝ -> [ℝ] -> ℝ
-- | The distance a point p is from a line segment (a,b)
distFromLineSeg :: ℝ2 -> (ℝ2, ℝ2) -> ℝ
-- | Pack the given objects in a box the given size.
pack :: Box2 -> ℝ -> [(Box2, a)] -> ([(ℝ2, a)], [(Box2, a)])
box3sWithin :: ℝ -> (ℝ3, ℝ3) -> (ℝ3, ℝ3) -> Bool
module Graphics.Implicit.ObjectUtil
getImplicit3 :: SymbolicObj3 -> Obj3
getImplicit2 :: SymbolicObj2 -> Obj2
getBox3 :: SymbolicObj3 -> Box3
getBox2 :: SymbolicObj2 -> Box2
module Graphics.Implicit.Export.SymbolicObj3
symbolicGetMesh :: ℝ -> SymbolicObj3 -> TriangleMesh
module Graphics.Implicit.Export.SymbolicObj2
symbolicGetOrientedContour :: ℝ -> SymbolicObj2 -> [Polyline]
symbolicGetContour :: ℝ -> SymbolicObj2 -> [Polyline]
symbolicGetContourMesh :: ℝ -> SymbolicObj2 -> [Polytri]
-- | A module for retrieving approximate represententations of objects.
module Graphics.Implicit.Export.DiscreteAproxable
-- | There is a discrete way to aproximate this object. eg. Aproximating a
-- 3D object with a triangle mesh would be DiscreteApproxable Obj3
-- TriangleMesh
class DiscreteAproxable obj aprox
discreteAprox :: DiscreteAproxable obj aprox => ℝ -> obj -> aprox
instance Graphics.Implicit.Export.DiscreteAproxable.DiscreteAproxable Graphics.Implicit.Definitions.SymbolicObj3 Graphics.Implicit.Definitions.TriangleMesh
instance Graphics.Implicit.Export.DiscreteAproxable.DiscreteAproxable Graphics.Implicit.Definitions.SymbolicObj3 Graphics.Implicit.Definitions.NormedTriangleMesh
instance Graphics.Implicit.Export.DiscreteAproxable.DiscreteAproxable Graphics.Implicit.Definitions.SymbolicObj3 Codec.Picture.Types.DynamicImage
instance Graphics.Implicit.Export.DiscreteAproxable.DiscreteAproxable Graphics.Implicit.Definitions.SymbolicObj2 [Graphics.Implicit.Definitions.Polyline]
instance Graphics.Implicit.Export.DiscreteAproxable.DiscreteAproxable Graphics.Implicit.Definitions.SymbolicObj2 Codec.Picture.Types.DynamicImage
module Graphics.Implicit.Export
-- | Write an object to a file with LazyText IO, using the given format
-- writer function.
writeObject :: DiscreteAproxable obj aprox => ℝ -> (aprox -> Text) -> FilePath -> obj -> IO ()
-- | Serialize an object using the given format writer. No file target is
-- implied.
formatObject :: DiscreteAproxable obj aprox => ℝ -> (aprox -> Text) -> obj -> Text
writeSVG :: DiscreteAproxable obj [Polyline] => ℝ -> FilePath -> obj -> IO ()
writeSTL :: DiscreteAproxable obj TriangleMesh => ℝ -> FilePath -> obj -> IO ()
writeBinSTL :: DiscreteAproxable obj TriangleMesh => ℝ -> FilePath -> obj -> IO ()
writeOBJ :: DiscreteAproxable obj NormedTriangleMesh => ℝ -> FilePath -> obj -> IO ()
writeTHREEJS :: DiscreteAproxable obj TriangleMesh => ℝ -> FilePath -> obj -> IO ()
writeGCodeHacklabLaser :: DiscreteAproxable obj [Polyline] => ℝ -> FilePath -> obj -> IO ()
writeDXF2 :: DiscreteAproxable obj [Polyline] => ℝ -> FilePath -> obj -> IO ()
writeSCAD2 :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writeSCAD3 :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writePNG :: DiscreteAproxable obj DynamicImage => ℝ -> FilePath -> obj -> IO ()
module Graphics.Implicit.Primitives
-- | Translate an object by a vector of appropriate dimension.
translate :: Object obj vec => vec -> obj -> obj
-- | Scale an object
scale :: Object obj vec => vec -> obj -> obj
-- | Outset of an object.
outset :: Object obj vec => ℝ -> obj -> obj
-- | Complement an Object
complement :: Object obj vec => obj -> obj
union :: Object obj vec => [obj] -> obj
intersect :: Object obj vec => [obj] -> obj
difference :: Object obj vec => [obj] -> obj
-- | Rounded union
unionR :: Object obj vec => ℝ -> [obj] -> obj
-- | Rounded minimum
intersectR :: Object obj vec => ℝ -> [obj] -> obj
-- | Rounded difference
differenceR :: Object obj vec => ℝ -> [obj] -> obj
-- | Make a shell of an object.
shell :: Object obj vec => ℝ -> obj -> obj
-- | Get the bounding box an object
getBox :: Object obj vec => obj -> (vec, vec)
-- | Get the implicit function for an object
getImplicit :: Object obj vec => obj -> vec -> ℝ
extrudeR :: ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
extrudeRM :: ℝ -> Either ℝ (ℝ -> ℝ) -> Either ℝ (ℝ -> ℝ) -> Either ℝ2 (ℝ -> ℝ2) -> SymbolicObj2 -> Either ℝ (ℝ2 -> ℝ) -> SymbolicObj3
extrudeRotateR :: ℝ -> ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
extrudeOnEdgeOf :: SymbolicObj2 -> SymbolicObj2 -> SymbolicObj3
sphere :: ℝ -> SymbolicObj3
rect3R :: ℝ -> ℝ3 -> ℝ3 -> SymbolicObj3
circle :: ℝ -> SymbolicObj2
cylinder :: ℝ -> ℝ -> SymbolicObj3
cylinder2 :: ℝ -> ℝ -> ℝ -> SymbolicObj3
rectR :: ℝ -> ℝ2 -> ℝ2 -> SymbolicObj2
polygonR :: ℝ -> [ℝ2] -> SymbolicObj2
rotateExtrude :: ℝ -> Maybe ℝ -> Either ℝ2 (ℝ -> ℝ2) -> Either ℝ (ℝ -> ℝ) -> SymbolicObj2 -> SymbolicObj3
rotate3 :: ℝ3 -> SymbolicObj3 -> SymbolicObj3
rotate3V :: ℝ -> ℝ3 -> SymbolicObj3 -> SymbolicObj3
pack3 :: ℝ2 -> ℝ -> [SymbolicObj3] -> Maybe SymbolicObj3
rotate :: ℝ -> SymbolicObj2 -> SymbolicObj2
pack2 :: ℝ2 -> ℝ -> [SymbolicObj2] -> Maybe SymbolicObj2
implicit :: Object obj vec => (vec -> ℝ) -> (vec, vec) -> obj
instance Graphics.Implicit.Primitives.Object Graphics.Implicit.Definitions.SymbolicObj2 Graphics.Implicit.Definitions.ℝ2
instance Graphics.Implicit.Primitives.Object Graphics.Implicit.Definitions.SymbolicObj3 Graphics.Implicit.Definitions.ℝ3
module Graphics.Implicit.ExtOpenScad.Primitives
-- | The only thing exported here. basically, a list of modules.
primitiveModules :: [(Symbol, OVal)]
module Graphics.Implicit.ExtOpenScad.Eval.Constant
-- | Define variables used during the extOpenScad run.
addConstants :: [String] -> IO (VarLookup, [Message])
-- | Evaluate an expression.
runExpr :: String -> (OVal, [Message])
module Graphics.Implicit.ExtOpenScad
-- | Small wrapper of our parser to handle parse errors, etc.
runOpenscad :: ScadOpts -> [String] -> String -> IO (VarLookup, [SymbolicObj2], [SymbolicObj3], [Message])
module Graphics.Implicit
-- | Scale an object
scale :: Object obj vec => vec -> obj -> obj
-- | Complement an Object
complement :: Object obj vec => obj -> obj
-- | Translate an object by a vector of appropriate dimension.
translate :: Object obj vec => vec -> obj -> obj
-- | Rounded union
unionR :: Object obj vec => ℝ -> [obj] -> obj
-- | Rounded minimum
intersectR :: Object obj vec => ℝ -> [obj] -> obj
-- | Rounded difference
differenceR :: Object obj vec => ℝ -> [obj] -> obj
-- | Make a shell of an object.
shell :: Object obj vec => ℝ -> obj -> obj
implicit :: Object obj vec => (vec -> ℝ) -> (vec, vec) -> obj
sphere :: ℝ -> SymbolicObj3
rect3R :: ℝ -> ℝ3 -> ℝ3 -> SymbolicObj3
cylinder2 :: ℝ -> ℝ -> ℝ -> SymbolicObj3
cylinder :: ℝ -> ℝ -> SymbolicObj3
circle :: ℝ -> SymbolicObj2
rectR :: ℝ -> ℝ2 -> ℝ2 -> SymbolicObj2
polygonR :: ℝ -> [ℝ2] -> SymbolicObj2
union :: Object obj vec => [obj] -> obj
difference :: Object obj vec => [obj] -> obj
intersect :: Object obj vec => [obj] -> obj
extrudeR :: ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
extrudeRotateR :: ℝ -> ℝ -> SymbolicObj2 -> ℝ -> SymbolicObj3
extrudeRM :: ℝ -> Either ℝ (ℝ -> ℝ) -> Either ℝ (ℝ -> ℝ) -> Either ℝ2 (ℝ -> ℝ2) -> SymbolicObj2 -> Either ℝ (ℝ2 -> ℝ) -> SymbolicObj3
rotateExtrude :: ℝ -> Maybe ℝ -> Either ℝ2 (ℝ -> ℝ2) -> Either ℝ (ℝ -> ℝ) -> SymbolicObj2 -> SymbolicObj3
extrudeOnEdgeOf :: SymbolicObj2 -> SymbolicObj2 -> SymbolicObj3
rotate3 :: ℝ3 -> SymbolicObj3 -> SymbolicObj3
rotate3V :: ℝ -> ℝ3 -> SymbolicObj3 -> SymbolicObj3
pack3 :: ℝ2 -> ℝ -> [SymbolicObj3] -> Maybe SymbolicObj3
rotate :: ℝ -> SymbolicObj2 -> SymbolicObj2
pack2 :: ℝ2 -> ℝ -> [SymbolicObj2] -> Maybe SymbolicObj2
-- | Small wrapper of our parser to handle parse errors, etc.
runOpenscad :: ScadOpts -> [String] -> String -> IO (VarLookup, [SymbolicObj2], [SymbolicObj3], [Message])
-- | A symbolic 3D format!
data SymbolicObj3
-- | A symbolic 2D object format. We want to have symbolic objects so that
-- we can accelerate rendering & give ideal meshes for simple cases.
data SymbolicObj2
type ℝ = Double
writeSVG :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writeDXF2 :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writeSTL :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writeBinSTL :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writeOBJ :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writeTHREEJS :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writeSCAD2 :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writeSCAD3 :: ℝ -> FilePath -> SymbolicObj3 -> IO ()
writeGCodeHacklabLaser :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writePNG2 :: ℝ -> FilePath -> SymbolicObj2 -> IO ()
writePNG3 :: ℝ -> FilePath -> SymbolicObj3 -> IO ()