-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
-----------------------------------------------------------------------------
module THREE.Box3
  ( -- * Types
    Box3 (..)
    -- * Methods
  , THREE.Box3.new
    -- * Properties
  , isBox3
  , THREE.Box3.min
  , THREE.Box3.max
    -- * Methods
  , THREE.Box3.applyMatrix4
  , clampPoint
  , THREE.Box3.clone
  , containsBox
  , containsPoint
  , THREE.Box3.copy
  , distanceToPoint
  , equals
  , expandByObject
  , expandByPoint
  , expandByScalar
  , expandByVector
  , getBoundingSphere
  , getCenter
  , getParameter
  , getSize
  , intersect
  , intersectsBox
  , intersectsPlane
  , intersectsSphere
  , intersectsTriangle
  , isEmpty
  , makeEmpty
  , set
  , setFromArray
  , setFromBufferAttribute
  , setFromCenterAndSize
  , setFromObject
  , setFromPoints
  , translate
  , union
  ) where
-----------------------------------------------------------------------------
import           Miso hiding (set)
-----------------------------------------------------------------------------
import           THREE.BufferAttribute
import           THREE.Internal as THREE
import           THREE.Matrix4
import           THREE.Object3D
import           THREE.Plane
import           THREE.Sphere
import           THREE.Triangle
import           THREE.Vector3
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/#api/en/math/Box3
newtype Box3
  = Box3
  { Box3 -> JSVal
unBox3 :: JSVal
  } deriving newtype (Box3 -> IO [JSVal]
(Box3 -> IO [JSVal]) -> ToArgs Box3
forall args. (args -> IO [JSVal]) -> ToArgs args
$ctoArgs :: Box3 -> IO [JSVal]
toArgs :: Box3 -> IO [JSVal]
ToArgs, Box3 -> IO Object
(Box3 -> IO Object) -> ToObject Box3
forall a. (a -> IO Object) -> ToObject a
$ctoObject :: Box3 -> IO Object
toObject :: Box3 -> IO Object
ToObject, Box3 -> IO JSVal
(Box3 -> IO JSVal) -> ToJSVal Box3
forall a. (a -> IO JSVal) -> ToJSVal a
$ctoJSVal :: Box3 -> IO JSVal
toJSVal :: Box3 -> IO JSVal
ToJSVal)
-----------------------------------------------------------------------------
instance FromJSVal Box3 where
  fromJSVal :: JSVal -> IO (Maybe Box3)
fromJSVal = Maybe Box3 -> IO (Maybe Box3)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Box3 -> IO (Maybe Box3))
-> (JSVal -> Maybe Box3) -> JSVal -> IO (Maybe Box3)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Box3 -> Maybe Box3
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Box3 -> Maybe Box3) -> (JSVal -> Box3) -> JSVal -> Maybe Box3
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> Box3
Box3
-----------------------------------------------------------------------------
class Box3NewParams a
instance Box3NewParams ()
instance Box3NewParams Vector3
instance Box3NewParams (Vector3, Vector3)
new :: (Box3NewParams a, ToArgs a) => a -> THREE.Three Box3
new :: forall a. (Box3NewParams a, ToArgs a) => a -> IO Box3
new = (JSVal -> Box3) -> MisoString -> a -> IO Box3
forall args con.
ToArgs args =>
(JSVal -> con) -> MisoString -> args -> Three con
THREE.new JSVal -> Box3
Box3 MisoString
"Box3"
-----------------------------------------------------------------------------

isBox3 :: ReadOnly Box3 Bool
isBox3 :: ReadOnly Box3 Bool
isBox3 = MisoString -> ReadOnly Box3 Bool
forall object return.
(FromJSVal return, ToObject object) =>
MisoString -> ReadOnly object return
readonly MisoString
"isBox3" 

min :: Property Box3 Vector3
min :: Property Box3 Vector3
min = MisoString -> Property Box3 Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"min" 

max :: Property Box3 Vector3
max :: Property Box3 Vector3
max = MisoString -> Property Box3 Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"max" 

-----------------------------------------------------------------------------

applyMatrix4 :: Method Box3 Matrix4 Box3
applyMatrix4 :: Method Box3 Matrix4 Box3
applyMatrix4 = MisoString -> Method Box3 Matrix4 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"appluMatrix4"

clampPoint :: Method Box3 (Vector3, Vector3) Vector3
clampPoint :: Method Box3 (Vector3, Vector3) Vector3
clampPoint = MisoString -> Method Box3 (Vector3, Vector3) Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"clampPoint"

clone :: Method Box3 () Box3
clone :: Method Box3 () Box3
clone = MisoString -> Method Box3 () Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"clone"

containsBox :: Method Box3 Box3 Bool
containsBox :: Method Box3 Box3 Bool
containsBox = MisoString -> Method Box3 Box3 Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"containsBox"

containsPoint :: Method Box3 Vector3 Bool
containsPoint :: Method Box3 Vector3 Bool
containsPoint = MisoString -> Method Box3 Vector3 Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"containsPoint"

copy :: Method Box3 Box3 Box3
copy :: Method Box3 Box3 Box3
copy = MisoString -> Method Box3 Box3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"copy"

distanceToPoint :: Method Box3 Vector3 Double
distanceToPoint :: Method Box3 Vector3 Double
distanceToPoint = MisoString -> Method Box3 Vector3 Double
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"distanceToPoint"

equals :: Method Box3 Box3 Bool
equals :: Method Box3 Box3 Bool
equals = MisoString -> Method Box3 Box3 Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"equals"

class Box3ExpandByObjectParams a
instance Object3D a => Box3ExpandByObjectParams a
instance Object3D a => Box3ExpandByObjectParams (a, Bool)
expandByObject :: (Box3ExpandByObjectParams a, ToArgs a) => Method Box3 a Box3
expandByObject :: forall a.
(Box3ExpandByObjectParams a, ToArgs a) =>
Method Box3 a Box3
expandByObject = MisoString -> Method Box3 a Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"expandByObject"

expandByPoint :: Method Box3 Vector3 Box3
expandByPoint :: Method Box3 Vector3 Box3
expandByPoint = MisoString -> Method Box3 Vector3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"expandByPoint"

expandByScalar :: Method Box3 Double Box3
expandByScalar :: Method Box3 Double Box3
expandByScalar = MisoString -> Method Box3 Double Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"expandByScalar"

expandByVector :: Method Box3 Vector3 Box3
expandByVector :: Method Box3 Vector3 Box3
expandByVector = MisoString -> Method Box3 Vector3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"expandByVector"

getBoundingSphere :: Method Box3 Sphere Sphere
getBoundingSphere :: Method Box3 Sphere Sphere
getBoundingSphere = MisoString -> Method Box3 Sphere Sphere
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getBoundingSphere"

getCenter :: Method Box3 Vector3 Vector3
getCenter :: Method Box3 Vector3 Vector3
getCenter = MisoString -> Method Box3 Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getCenter"

getParameter :: Method Box3 (Vector3, Vector3) Vector3
getParameter :: Method Box3 (Vector3, Vector3) Vector3
getParameter = MisoString -> Method Box3 (Vector3, Vector3) Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getParameter"

getSize :: Method Box3 Vector3 Vector3
getSize :: Method Box3 Vector3 Vector3
getSize = MisoString -> Method Box3 Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getSize"

intersect :: Method Box3 Box3 Box3
intersect :: Method Box3 Box3 Box3
intersect = MisoString -> Method Box3 Box3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"intersect"

intersectsBox :: Method Box3 Box3 Bool
intersectsBox :: Method Box3 Box3 Bool
intersectsBox = MisoString -> Method Box3 Box3 Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"intersectsBox"

intersectsPlane :: Method Box3 Plane Bool
intersectsPlane :: Method Box3 Plane Bool
intersectsPlane = MisoString -> Method Box3 Plane Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"intersectsPlane"

intersectsSphere :: Method Box3 Sphere Bool
intersectsSphere :: Method Box3 Sphere Bool
intersectsSphere = MisoString -> Method Box3 Sphere Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"intersectsSphere"

intersectsTriangle :: Method Box3 Triangle Bool
intersectsTriangle :: Method Box3 Triangle Bool
intersectsTriangle = MisoString -> Method Box3 Triangle Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"intersectsTriangle"

isEmpty :: Method Box3 () Bool
isEmpty :: Method Box3 () Bool
isEmpty = MisoString -> Method Box3 () Bool
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"isEmpty"

makeEmpty :: Method Box3 () Box3
makeEmpty :: Method Box3 () Box3
makeEmpty = MisoString -> Method Box3 () Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"makeEmpty"

set :: Method Box3 (Vector3, Vector3) Box3
set :: Method Box3 (Vector3, Vector3) Box3
set = MisoString -> Method Box3 (Vector3, Vector3) Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"set"

setFromArray :: Method Box3 [Double] Box3
setFromArray :: Method Box3 [Double] Box3
setFromArray = MisoString -> Method Box3 [Double] Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setFromArray"

setFromBufferAttribute :: Method Box3 BufferAttribute Box3
setFromBufferAttribute :: Method Box3 BufferAttribute Box3
setFromBufferAttribute = MisoString -> Method Box3 BufferAttribute Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setFromBufferAttribute"

setFromCenterAndSize :: Method Box3 (Vector3, Vector3) Box3
setFromCenterAndSize :: Method Box3 (Vector3, Vector3) Box3
setFromCenterAndSize = MisoString -> Method Box3 (Vector3, Vector3) Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setFromCenterAndSize"

class Box3SetFromObjectParams a
instance Object3D a => Box3SetFromObjectParams a
instance Object3D a => Box3SetFromObjectParams (a, Bool)
setFromObject :: (Box3SetFromObjectParams a, ToArgs a) => Method Box3 a Box3
setFromObject :: forall a.
(Box3SetFromObjectParams a, ToArgs a) =>
Method Box3 a Box3
setFromObject = MisoString -> Method Box3 a Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setFromObject"

setFromPoints :: Method Box3 [Vector3] Box3
setFromPoints :: Method Box3 [Vector3] Box3
setFromPoints = MisoString -> Method Box3 [Vector3] Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setFromPoints"

translate :: Method Box3 Vector3 Box3
translate :: Method Box3 Vector3 Box3
translate = MisoString -> Method Box3 Vector3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"translate"

union :: Method Box3 Vector3 Box3
union :: Method Box3 Vector3 Box3
union = MisoString -> Method Box3 Vector3 Box3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"union"

-----------------------------------------------------------------------------