packages feed

HODE-2008.10.27: src/Physics/ODE/Mass.th

module Physics.ODE.Mass
    ( create
    , destroyMass
    , mass
    , setZero
    , adjust
    ) where

import Foreign

import Physics.ODE.Types
import Physics.ODE.Utilities
import Physics.ODE.Hsc

#ifdef HASTH
import Foreign.HacanonLight.DIS
import Foreign.HacanonLight.Generate
import Physics.ODE.DIS
#endif

create :: IO Mass
create = mallocForeignPtrBytes sizeOfMass

destroyMass :: Mass -> IO ()
destroyMass = forceFinalization

mass :: Mass -> IO ODEreal
mass m
    = withForeignPtr m peekMass

-- void dMassSetZero (dMass *);
$(bind "setZero" "dMassSetZero" [mass,unit])


-- void dMassSetParameters (dMass *, dReal themass,
--                          dReal cgx, dReal cgy, dReal cgz,
--                          dReal I11, dReal I22, dReal I33,
--                          dReal I12, dReal I13, dReal I23);

-- void dMassSetSphere (dMass *, dReal density, dReal radius);
-- void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius);

-- void dMassSetCappedCylinder (dMass *, dReal density, int direction,
--                              dReal radius, dReal length);
-- void dMassSetCappedCylinderTotal (dMass *, dReal total_mass, int direction,
--                                   dReal radius, dReal length);

-- void dMassSetCylinder (dMass *, dReal density, int direction,
--                        dReal radius, dReal length);
-- void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction,
--                             dReal radius, dReal length);

-- void dMassSetBox (dMass *, dReal density,
--                   dReal lx, dReal ly, dReal lz);
-- void dMassSetBoxTotal (dMass *, dReal total_mass,
--                        dReal lx, dReal ly, dReal lz);

-- void dMassAdjust (dMass *, dReal newmass);
$(bind "adjust" "dMassAdjust" [mass,ode,unit])

-- void dMassTranslate (dMass *, dReal x, dReal y, dReal z);

-- void dMassRotate (dMass *, const dMatrix3 R);

-- void dMassAdd (dMass *a, const dMass *b);