{-# LANGUAGE TemplateHaskell #-}
--{-# LANGUAGE Strict #-}
module Polyhedra.Data
    where
import Geometry.Data

import Control.Lens
import qualified Data.Map as M
--import qualified Data.IntSet as IS
-- | Polyhedra are represented as a list of faces.
-- Each face is a list of points (and colours) that are assumed to lie on a plane, and be
-- ordered to form an anticlockwise convex polygon within that plane.
newtype Polyhedra = Polyhedron
    { _pyFaces :: [[(Point3,Point4)]]
    }
-- | Describe a polygon as a map from vertex indices to a positioning and list of faces.
-- The list of faces is assumed to be ordered in clockwise direction around the vertex.
-- The vertices of the faces are assumed to start with a point adjacent to the
-- key vertex and to be listed anticlockwise around the center of the face.
-- The key vertex is not included in the list.
newtype VF a = VF
    { _vertices :: M.Map a (Point3, [[a]])
    }

makeLenses ''Polyhedra
makeLenses ''VF
