-- 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 ()