{-# LANGUAGE ConstraintKinds #-}
# LANGUAGE FlexibleContexts #
# LANGUAGE TypeFamilies      #

-----------------------------------------------------------------------------
-- |
-- Module      :  Diagrams.ThreeD.Size
  Copyright    :   ( c ) 2014 diagrams - lib team ( see LICENSE )
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  
--
  Utilities for working with sizes of three - dimensional objects .
--
-----------------------------------------------------------------------------
module Diagrams.ThreeD.Size
       (
         -- ** Computing sizes
         extentX, extentY, extentZ

         -- ** Specifying sizes
       , mkSizeSpec3D
       , dims3D

       ) where

import           Diagrams.Core
import           Diagrams.Core.Envelope
import           Diagrams.Size
import           Diagrams.TwoD.Size
import           Diagrams.ThreeD.Types
import           Diagrams.ThreeD.Vector

------------------------------------------------------------
-- Computing diagram sizes
------------------------------------------------------------

-- | Compute the absolute z-coordinate range of an enveloped object in
--   the form @(lo,hi)@. Return @Nothing@ for objects with an empty
--   envelope.
extentZ :: (InSpace v n a, R3 v, Enveloped a) => a -> Maybe (n, n)
extentZ = extent unitZ

  | Make a ' SizeSpec ' from possibly - specified width and height .
mkSizeSpec3D :: Num n => Maybe n -> Maybe n -> Maybe n -> SizeSpec V3 n
mkSizeSpec3D x y z = mkSizeSpec (V3 x y z)

  | Make a ' SizeSpec ' from a width and height .
dims3D :: n -> n -> n -> SizeSpec V3 n
dims3D x y z = dims (V3 x y z)


# LANGUAGE ConstraintKinds #
---------------------------------------------------------------------------
 |
 Module      :  Diagrams.ThreeD.Size
 License     :  BSD-style (see LICENSE)
 Maintainer  :  


---------------------------------------------------------------------------
 ** Computing sizes
 ** Specifying sizes
----------------------------------------------------------
 Computing diagram sizes
----------------------------------------------------------
 | Compute the absolute z-coordinate range of an enveloped object in
   the form @(lo,hi)@. Return @Nothing@ for objects with an empty
   envelope.
# LANGUAGE FlexibleContexts #
# LANGUAGE TypeFamilies      #

  Copyright    :   ( c ) 2014 diagrams - lib team ( see LICENSE )
  Utilities for working with sizes of three - dimensional objects .
module Diagrams.ThreeD.Size
       (
         extentX, extentY, extentZ

       , mkSizeSpec3D
       , dims3D

       ) where

import           Diagrams.Core
import           Diagrams.Core.Envelope
import           Diagrams.Size
import           Diagrams.TwoD.Size
import           Diagrams.ThreeD.Types
import           Diagrams.ThreeD.Vector


extentZ :: (InSpace v n a, R3 v, Enveloped a) => a -> Maybe (n, n)
extentZ = extent unitZ

  | Make a ' SizeSpec ' from possibly - specified width and height .
mkSizeSpec3D :: Num n => Maybe n -> Maybe n -> Maybe n -> SizeSpec V3 n
mkSizeSpec3D x y z = mkSizeSpec (V3 x y z)

  | Make a ' SizeSpec ' from a width and height .
dims3D :: n -> n -> n -> SizeSpec V3 n
dims3D x y z = dims (V3 x y z)

