GranOO  3.0
A robust and versatile workbench to build 3D dynamic simulations based on the Discrete Element Method
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Friends | List of all members
GranOO3::Physic::Body Class Referenceabstract

a class that represents a body More...

#include <Body.hpp>

Inheritance diagram for GranOO3::Physic::Body:
Inheritance graph
[legend]

Public Member Functions

 Body (Shape::Volume &shape, const Geom::Point &p, const Geom::Quaternion &q, double mass, const Geom::Tensor &inertia)
 constructor More...
 
 Body (Shape::Volume &shape, const Geom::Point &p)
 constructor More...
 
 Body (Shape::Volume &shape)
 constructor More...
 
virtual ~Body ()=0
 destructor More...
 
void set_inertia_tensor (const Geom::Tensor &inertia)
 set the inertia tensor value More...
 
void set_density (double density)
 set the density value More...
 
Geom::Vector compute_torque_at (const Geom::Point &A) const
 
double get_kinetic_energy () const
 
double get_mass () const
 get the current mass value of the body More...
 
void apply_force_at (const Geom::Vector &, const Geom::Point &)
 
const Shape::Volumeto_volume_shape () const
 cast the current object to Shape::Volume More...
 
Shape::Volumeto_volume_shape ()
 cast the current object to Shape::Volume More...
 
double get_volume () const
 get the current volume of the body More...
 
double get_bounding_radius () const
 get the current bounding radius of the body More...
 
AABB aabb () const
 get the aabb tree the body More...
 
bool collide (const Body &other, Collision::Data &col)
 collision detection with another body More...
 
bool collide (const Body &other)
 collision detection with another body More...
 
void make_equal_to (const Body &other)
 for equalizing two bodies More...
 
std::string info () const
 Display some useful info in the terminal
More...
 
virtual std::ostream & write_ascii (std::ostream &out) const
 dump the current state of the bodyt in a ascii file (standard *.lgdd format) More...
 
virtual std::istream & read_ascii (std::istream &in)
 update the current state of the body from an ascii file format *.lgdd More...
 
virtual std::ostream & export_to_povray (std::ostream &out) const
 exporting to povray format More...
 
- Public Member Functions inherited from GranOO3::Physic::Node
 Node (const Geom::Vector &position)
 
 Node (const Geom::Point &position)
 
 Node ()
 
virtual ~Node ()
 
void clear_force ()
 
void clear_torque ()
 
const Geom::Framelocal_frame () const
 
void incremental_move (const Geom::Vector &vec)
 
void incremental_unmove (const Geom::Vector &vec)
 
void update_position_from_displacement ()
 
void update_displacement_from_position ()
 
void set_displacement (const Geom::Vector &)
 
void clear_displacement ()
 
void set_displacement_x (const double &)
 
void set_displacement_y (const double &)
 
void set_displacement_z (const double &)
 
void set_position (const Geom::Vector &)
 
void set_position_x (const double &)
 
void set_position_y (const double &)
 
void set_position_z (const double &)
 
void set_center (const Geom::Point &)
 
void update_initial_parameter_to_current_parameter ()
 
void update_from_fem ()
 
void update_from_dem ()
 
void add_interaction (Node &)
 
void erase_interaction (Node &)
 
bool interact_with (const Node &) const
 
bool interact_with (const Ground &) const
 
bool interact_with (const FEM::Surface &) const
 
void apply_force (const Geom::Vector &)
 
void apply_torque (const Geom::Vector &)
 
void set_quaternion_velocity_from_angular_velocity (const Geom::Vector &angularVelocity)
 
void set_quaternion_acceleration_from_angular_acceleration (const Geom::Vector &angularAcceleration, const Geom::Vector &angularVelocity)
 
void update_angular_velocity ()
 
virtual void clear_kinematic ()
 
Geom::Vector get_linear_velocity_at (const Geom::Point &) const
 
void make_equal_to (const Node &)
 
virtual void draw ()
 
- Public Member Functions inherited from GranOO3::Core::Base
virtual ~Base ()
 
size_t numID () const
 
size_t uID () const
 
void set_numID (size_t val)
 
void clear_numID ()
 
Physic::Materialget_mat () const
 
void set_mat (Physic::Material *)
 
Baseitem ()
 
const Baseitem () const
 
bool is_same (const Base &) const
 
template<class T >
T & cast_to ()
 
template<class T >
const T & cast_to () const
 
template<class T >
bool is () const
 
virtual bool is (size_t) const
 
virtual const std::string & get_ID () const
 
virtual Baseclone ()
 
template<class T >
T & clone_to ()
 
Signal< Base & > & deleted_signal ()
 
- Public Member Functions inherited from GranOO3::Core::Null
 Null ()
 
virtual ~Null ()
 
- Public Member Functions inherited from GranOO3::Core::Drawable
 Drawable ()
 
virtual ~Drawable ()
 
virtual void draw_edge ()
 
virtual void init_default_color ()
 
virtual std::ostream & get_info (std::ostream &os) const
 
virtual const Colordefault_color () const
 
Colorget_color ()
 
const Colorget_color () const
 
virtual void set_color (const Color &)
 
virtual void set_alpha (float alpha)
 
void apply_color () const
 
void apply_edge_color () const
 
void apply_default_color ()
 
void apply_selected_color ()
 
void set_line_width (float)
 
float get_line_width () const
 
float & get_line_width ()
 
void apply_line_width () const
 
bool is_visible () const
 
void set_visible (bool)
 
void paint ()
 
void paint_edge ()
 
unsigned int get_item_glkey () const
 
- Public Member Functions inherited from GranOO3::Core::Register< Base >
 Register ()
 
virtual ~Register ()
 
void erase_from_all_setof ()
 
bool belong_to_setof (const std::string &setOfId) const
 
bool belong_to_setof (const SetOf< Base > &set) const
 
std::list< SetOf< Base > * > & get_setof_list ()
 
unsigned long long int get_numeric_ID () const
 
- Public Member Functions inherited from GranOO3::Core::PropClass< Node >
 PropClass ()
 
virtual ~PropClass ()
 
T & new_object ()
 
T & get ()
 
const T & get () const
 
bool prop_exist () const
 
void add_prop (Core::Prop< Node > *)
 
void remove_prop (Core::Prop< Node > *)
 
std::string info () const
 
- Public Member Functions inherited from GranOO3::Core::Register< Node >
 Register ()
 
virtual ~Register ()
 
void erase_from_all_setof ()
 
bool belong_to_setof (const std::string &setOfId) const
 
bool belong_to_setof (const SetOf< Node > &set) const
 
std::list< SetOf< Node > * > & get_setof_list ()
 
unsigned long long int get_numeric_ID () const
 
- Public Member Functions inherited from GranOO3::Core::PropClass< Body >
 PropClass ()
 
virtual ~PropClass ()
 
T & new_object ()
 
T & get ()
 
const T & get () const
 
bool prop_exist () const
 
void add_prop (Core::Prop< Body > *)
 
void remove_prop (Core::Prop< Body > *)
 
std::string info () const
 
- Public Member Functions inherited from GranOO3::Core::Register< Body >
 Register ()
 
virtual ~Register ()
 
void erase_from_all_setof ()
 
bool belong_to_setof (const std::string &setOfId) const
 
bool belong_to_setof (const SetOf< Body > &set) const
 
std::list< SetOf< Body > * > & get_setof_list ()
 
unsigned long long int get_numeric_ID () const
 

Protected Attributes

double _density
 the density value of the body More...
 
double _mass
 the mass value of the body More...
 
Geom::Tensor _inertia_tensor
 the inertia tensor of the body More...
 
Geom::Tensor _inverse_inertia_tensor
 the inverse of the inertia tensor of the body More...
 
- Protected Attributes inherited from GranOO3::Core::PropClass< Node >
std::vector< Core::Prop< Node > * > _prop
 
- Protected Attributes inherited from GranOO3::Core::PropClass< Body >
std::vector< Core::Prop< Body > * > _prop
 

Private Member Functions

void update_inverse_inertia_tensor ()
 update the current value of Body::_inverse_inertia_tensor from the Body::_inertia_tensor value More...
 
 Body (const Body &)=delete
 
Bodyoperator= (const Body &)=delete
 
template<class Archive >
void save (Archive &, const unsigned int) const
 complete serializing of the element in the *.gdd format More...
 
template<class Archive >
void load (Archive &, const unsigned int)
 complete serializing of the element in the *.gdd format More...
 
 BOOST_SERIALIZATION_SPLIT_MEMBER ()
 

Private Attributes

Shape::Volume_volume_shape
 

Friends

class boost::serialization::access
 

Additional Inherited Members

- Static Public Member Functions inherited from GranOO3::Core::Base
static Baseget_by_numID (size_t)
 
static void clear_all_numID ()
 
static unsigned int get_sub_class_number ()
 
- Static Public Member Functions inherited from GranOO3::Core::Drawable
static Drawableget_drawable_item_by_glkey (int)
 
static void set_draw_precision (unsigned int p)
 
static void increase_draw_precision ()
 
static void decrease_draw_precision ()
 
static unsigned int get_draw_precision ()
 
- Static Public Attributes inherited from GranOO3::Core::Null
static Null null = Null()
 
- Protected Member Functions inherited from GranOO3::Core::Base
 Base ()
 
- Static Protected Member Functions inherited from GranOO3::Core::Base
static unsigned int affect_class_rank_ID ()
 

Detailed Description

a class that represents a body

a template class that model a body with a given shape

A Physic::Body class that models a rigid body able to move (translate and rotate) in a 3D space. Note that this class is pure virtual because the Physic::Body does not know its own shape.

Template Parameters
shapethe real shape of the BodyT

This template class BodyT<shape> derives from two classes :

In such way an BodyT<T> object is both an element and a volume shape. So, you can either ask an BodyT<T> for getting its mass and its lengths.

Constructor & Destructor Documentation

◆ Body() [1/4]

GranOO3::Physic::Body::Body ( Shape::Volume shape,
const Geom::Point p,
const Geom::Quaternion q,
double  mass,
const Geom::Tensor inertia 
)
inline

constructor

Parameters
[in]shape: the shape to clone
[in]p: initial position of the body
[in]q: initial orientation of the body
[in]mass: the mass of the body
[in]inertia: the inertia tensor of the body

Construct a new body with the given parameters.

◆ Body() [2/4]

GranOO3::Physic::Body::Body ( Shape::Volume shape,
const Geom::Point p 
)
inline

constructor

Parameters
[in]shape: the shape to clone
[in]p: initial position of the body
[in]q: initial orientation of the body

Construct a new body with the given parameters.

◆ Body() [3/4]

GranOO3::Physic::Body::Body ( Shape::Volume shape)
inline

constructor

Parameters
[in]shape: the shape to clone

Construct a new body with the given parameters.

◆ ~Body()

GranOO3::Physic::Body::~Body ( )
inlinepure virtual

destructor

Note that the destructor is pure virtual.

◆ Body() [4/4]

GranOO3::Physic::Body::Body ( const Body )
privatedelete

Member Function Documentation

◆ aabb()

AABB GranOO3::Physic::Body::aabb ( ) const
inline

get the aabb tree the body

Returns
the AABB object

Useful method for generic collision detection

◆ apply_force_at()

void GranOO3::Physic::Body::apply_force_at ( const Geom::Vector force,
const Geom::Point applicationPoint 
)
inline

◆ BOOST_SERIALIZATION_SPLIT_MEMBER()

GranOO3::Physic::Body::BOOST_SERIALIZATION_SPLIT_MEMBER ( )
private

◆ collide() [1/2]

bool GranOO3::Physic::Body::collide ( const Body other)
inline

collision detection with another body

Parameters
[in]other: the other body for collision detection
Returns
true if the two bodies are colliding false otherwise

This method is able to manage collision detection between two bodies. The updated information about collision (normal, penetration value, etc...) are written into the main static attribute of the GranOO3::Collision::Data class.

◆ collide() [2/2]

bool GranOO3::Physic::Body::collide ( const Body other,
Collision::Data col 
)
inline

collision detection with another body

Parameters
[in]other: the other body for collision detection
[out]col: the collision data information
Returns
true if the two bodies are colliding false otherwise

This method is able to manage collision detection between two bodies. The updated information about collision (normal, penetration value, etc...) are written into the col parameter.

◆ compute_torque_at()

Geom::Vector GranOO3::Physic::Body::compute_torque_at ( const Geom::Point A) const
inline

◆ export_to_povray()

std::ostream & GranOO3::Physic::Body::export_to_povray ( std::ostream &  os) const
virtual

exporting to povray format

Parameters
[in]os: the stream to write
Returns
the stream with the exporting data in the povray format

This method is used in the granoo-viewer for exporting a 3D scene to the povray program

Reimplemented from GranOO3::Physic::Node.

◆ get_bounding_radius()

double GranOO3::Physic::Body::get_bounding_radius ( ) const
inline

get the current bounding radius of the body

Returns
the current bounding radius value

Useful method for generic collision detection

◆ get_kinetic_energy()

double GranOO3::Physic::Body::get_kinetic_energy ( ) const
inline

◆ get_mass()

double GranOO3::Physic::Body::get_mass ( ) const
virtual

get the current mass value of the body

Returns
mass value

Reimplemented from GranOO3::Physic::Node.

◆ get_volume()

double GranOO3::Physic::Body::get_volume ( ) const
inline

get the current volume of the body

Returns
the current volume value

◆ info()

std::string GranOO3::Physic::Body::info ( ) const
virtual

◆ load()

template<class Archive >
void GranOO3::Physic::Body::load ( Archive &  ar,
const unsigned int  v 
)
private

complete serializing of the element in the *.gdd format

See also
the Domain classes to get additional info about I/O

◆ make_equal_to()

void GranOO3::Physic::Body::make_equal_to ( const Body other)

for equalizing two bodies

Parameters
[in]other: the other body which will be used as a model for equalizing

This method can be used for equalizing the current body (this) to another one (other). When you equalize two bodies, they have the same position, velocity, mass, etc. This method can be used used for cloning.

◆ operator=()

Body& GranOO3::Physic::Body::operator= ( const Body )
privatedelete

◆ read_ascii()

std::istream & GranOO3::Physic::Body::read_ascii ( std::istream &  is)
virtual

update the current state of the body from an ascii file format *.lgdd

Parameters
[in]is: the stream where the data are read
Returns
the stream
See also
the Domain classes to get additional info about I/O

Reimplemented from GranOO3::Physic::Node.

Reimplemented in GranOO3::DEM::ElementT< shape >, GranOO3::DEM::ElementT< Shape::Sphere >, GranOO3::DEM::ElementT< GranOO3::Shape::Polyhedron >, GranOO3::DEM::Element, GranOO3::DEM::ToolT< shape >, GranOO3::DEM::Tool, and GranOO3::DEM::DiscreteElement.

◆ save()

template<class Archive >
void GranOO3::Physic::Body::save ( Archive &  ar,
const unsigned int  v 
) const
private

complete serializing of the element in the *.gdd format

See also
the Domain classes to get additional info about I/O

◆ set_density()

void GranOO3::Physic::Body::set_density ( double  density)
inline

set the density value

Parameters
[in]density: the new value of density

Set a new density value. When setting a new density value, the Body::_density Body::_inertia_tensor and Body::_inverse_inertia_tensor are automatically updated.

◆ set_inertia_tensor()

void GranOO3::Physic::Body::set_inertia_tensor ( const Geom::Tensor inertia)
inline

set the inertia tensor value

Parameters
[in]inertia: the inertia tensor of the body

Set a new Body::_inertia_tensor value

◆ to_volume_shape() [1/2]

Shape::Volume & GranOO3::Physic::Body::to_volume_shape ( )
inline

cast the current object to Shape::Volume

Returns
the Shape::Volume object

◆ to_volume_shape() [2/2]

const Shape::Volume & GranOO3::Physic::Body::to_volume_shape ( ) const
inline

cast the current object to Shape::Volume

Returns
the Shape::Volume object

◆ update_inverse_inertia_tensor()

void GranOO3::Physic::Body::update_inverse_inertia_tensor ( )
inlineprivate

update the current value of Body::_inverse_inertia_tensor from the Body::_inertia_tensor value

◆ write_ascii()

std::ostream & GranOO3::Physic::Body::write_ascii ( std::ostream &  os) const
virtual

dump the current state of the bodyt in a ascii file (standard *.lgdd format)

Parameters
[in]os: the stream where the data will be written
Returns
the stream (with the expected additional data)
See also
the Domain classes to get additional info about I/O

Reimplemented from GranOO3::Physic::Node.

Reimplemented in GranOO3::DEM::ToolT< shape >, GranOO3::DEM::Tool, GranOO3::DEM::DiscreteElement, GranOO3::DEM::ElementT< shape >, GranOO3::DEM::ElementT< Shape::Sphere >, GranOO3::DEM::ElementT< GranOO3::Shape::Polyhedron >, and GranOO3::DEM::Element.

Friends And Related Function Documentation

◆ boost::serialization::access

friend class boost::serialization::access
friend

Member Data Documentation

◆ _density

double GranOO3::Physic::Body::_density
protected

the density value of the body

◆ _inertia_tensor

Geom::Tensor GranOO3::Physic::Body::_inertia_tensor
protected

the inertia tensor of the body

◆ _inverse_inertia_tensor

Geom::Tensor GranOO3::Physic::Body::_inverse_inertia_tensor
protected

the inverse of the inertia tensor of the body

This attribute allows to avoid on-the-fly computation of the inverse of the inertia tensor because it is intensively required by the time scheme. So, we use this attribute as a cache for avoiding multiple useless calculation because modifying massic parameters of bodies is a rare event.

◆ _mass

double GranOO3::Physic::Body::_mass
protected

the mass value of the body

◆ _volume_shape

Shape::Volume& GranOO3::Physic::Body::_volume_shape
private

The documentation for this class was generated from the following files: