-----------------------------------------------------------------------------
-- |
-- Module      :  Diagrams.ThreeD.Vector
-- Copyright   :  (c) 2013 diagrams-lib team (see LICENSE)
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  diagrams-discuss@googlegroups.com
--
-- Three-dimensional vectors.
--
-----------------------------------------------------------------------------
module Diagrams.ThreeD.Vector
       ( -- * Special 3D vectors
         unitX, unitY, unitZ, unit_X, unit_Y, unit_Z
       , xDir, yDir, zDir
       ) where

import           Control.Lens          ((&), (.~))

import           Diagrams.ThreeD.Types
import           Diagrams.TwoD.Vector
import           Diagrams.Direction

import           Linear.Vector

-- | The unit vector in the positive Y direction.
unitZ :: (R3 v, Additive v, Num n) => v n
unitZ = zero & _z .~ 1

-- | The unit vector in the negative X direction.
unit_Z :: (R3 v, Additive v, Num n) => v n
unit_Z = zero & _z .~ (-1)

-- | A 'Direction' pointing in the Z direction.
zDir :: (R3 v, Additive v, Num n) => Direction v n
zDir = dir unitZ