-- Implicit CAD. Copyright (C) 2011, Christopher Olah (chris@colah.ca)
-- Released under the GNU GPL, see LICENSE

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, FlexibleContexts, TypeSynonymInstances, UndecidableInstances #-}

{- The sole purpose of this file it to pass on the
   functionality we want to be accessible to the end user. -}

module Graphics.Implicit(
    -- Operations
    translate,
    scale,
    complement,
    union,  intersect,  difference,
    unionR, intersectR, differenceR,
    shell,
    --slice,
    extrudeR,
    extrudeOnEdgeOf,
    -- Primitives
    sphere,
    rect3R,
    circle,
    cylinder,
    cylinder2,
    rectR,
    --regularPolygon,
    --zsurface,
    polygon,
    -- Export
    writeSVG,
    writeSTL,
    writeBinSTL,
    writeOBJ,
    writeTHREEJS,
    writeSCAD2,
    writeSCAD3,
    writeGCodeHacklabLaser,
    writePNG2,
    writePNG3,
    runOpenscad,
    implicit,
    SymbolicObj2,
    SymbolicObj3
) where

-- Let's be explicit about where things come from :)
import Graphics.Implicit.Primitives
import Graphics.Implicit.ExtOpenScad (runOpenscad)
import qualified Graphics.Implicit.Export as Export
import Graphics.Implicit.Definitions

-- We want Export to be a bit less polymorphic
-- (so that types will collapse nicely)

writeSVG    = Export.writeSVG   ::  -> FilePath -> SymbolicObj2 -> IO ()
writeSTL    = Export.writeSTL   ::  -> FilePath -> SymbolicObj3 -> IO ()
writeBinSTL = Export.writeBinSTL   ::  -> FilePath -> SymbolicObj3 -> IO ()
writeOBJ    = Export.writeOBJ   ::  -> FilePath -> SymbolicObj3 -> IO ()
writeSCAD2  = Export.writeSCAD2 ::  -> FilePath -> SymbolicObj2 -> IO ()
writeSCAD3  = Export.writeSCAD3 ::  -> FilePath -> SymbolicObj3 -> IO ()
writeTHREEJS = Export.writeTHREEJS ::  -> FilePath -> SymbolicObj3 -> IO ()
writeGCodeHacklabLaser = Export.writeGCodeHacklabLaser ::  -> FilePath -> SymbolicObj2 -> IO () 
writePNG2 = Export.writePNG ::  -> FilePath -> SymbolicObj2  -> IO ()
writePNG3 = Export.writePNG ::  -> FilePath -> SymbolicObj3  -> IO ()