Blender V5.0
rigidbody.cc File Reference

Blender-side interface and methods for dealing with Rigid Body simulations. More...

#include <algorithm>
#include <cfloat>
#include <cmath>
#include <cstdio>
#include <cstring>
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_mutex.hh"
#include "DNA_ID.h"
#include "DNA_collection_types.h"
#include "DNA_mesh_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_rigidbody_types.h"
#include "DNA_scene_types.h"
#include "BKE_collection.hh"
#include "BKE_effect.h"
#include "BKE_global.hh"
#include "BKE_layer.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_main.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_runtime.hh"
#include "BKE_object.hh"
#include "BKE_pointcache.h"
#include "BKE_report.hh"
#include "BKE_rigidbody.h"
#include "BKE_scene.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"

Go to the source code of this file.

Classes

struct  RigidBodyWorld_Runtime

Functions

static void RB_dworld_remove_constraint (void *, void *)
static void RB_dworld_remove_body (void *, void *)
static void RB_dworld_delete (void *)
static void RB_body_delete (void *)
static void RB_shape_delete (void *)
static void RB_constraint_delete (void *)
void BKE_rigidbody_world_init_runtime (RigidBodyWorld *rbw)
rbDynamicsWorldBKE_rigidbody_world_physics (RigidBodyWorld *rbw)
void BKE_rigidbody_free_world (Scene *scene)
void BKE_rigidbody_free_object (Object *ob, RigidBodyWorld *rbw)
void BKE_rigidbody_free_constraint (Object *ob)
bool BKE_rigidbody_is_affected_by_simulation (Object *ob)
void BKE_rigidbody_validate_sim_world (Scene *scene, RigidBodyWorld *rbw, bool rebuild)
void BKE_rigidbody_calc_volume (Object *ob, float *r_vol)
void BKE_rigidbody_calc_center_of_mass (Object *ob, float r_center[3])
RigidBodyWorldBKE_rigidbody_create_world (Scene *scene)
RigidBodyWorldBKE_rigidbody_world_copy (RigidBodyWorld *rbw, const int flag)
void BKE_rigidbody_world_groups_relink (RigidBodyWorld *rbw)
RigidBodyObBKE_rigidbody_create_object (Scene *scene, Object *ob, short type)
RigidBodyConBKE_rigidbody_create_constraint (Scene *scene, Object *ob, short type)
RigidBodyWorldBKE_rigidbody_get_world (Scene *scene)
void BKE_rigidbody_ensure_local_object (Main *bmain, Object *ob)
bool BKE_rigidbody_add_object (Main *bmain, Scene *scene, Object *ob, int type, ReportList *reports)
void BKE_rigidbody_remove_object (Main *bmain, Scene *scene, Object *ob, const bool free_us)
void BKE_rigidbody_remove_constraint (Main *bmain, Scene *scene, Object *ob, const bool free_us)
void BKE_rigidbody_sync_transforms (RigidBodyWorld *rbw, Object *ob, float ctime)
void BKE_rigidbody_aftertrans_update (Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
bool BKE_rigidbody_check_sim_running (RigidBodyWorld *rbw, float ctime)
void BKE_rigidbody_cache_reset (RigidBodyWorld *rbw)
void BKE_rigidbody_rebuild_world (Depsgraph *depsgraph, Scene *scene, float ctime)
void BKE_rigidbody_do_simulation (Depsgraph *depsgraph, Scene *scene, float ctime)
void BKE_rigidbody_objects_collection_validate (Main *bmain, Scene *scene, RigidBodyWorld *rbw)
void BKE_rigidbody_constraints_collection_validate (Scene *scene, RigidBodyWorld *rbw)
void BKE_rigidbody_main_collection_object_add (Main *bmain, Collection *collection, Object *object)
void BKE_rigidbody_rebuild_sim (Depsgraph *depsgraph, Scene *scene)
void BKE_rigidbody_eval_simulation (Depsgraph *depsgraph, Scene *scene)
void BKE_rigidbody_object_sync_transforms (Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_rigidbody_world_id_loop (RigidBodyWorld *rbw, RigidbodyWorldIDFunc func, void *userdata)
static RigidBodyObrigidbody_copy_object (const Object *ob, const int flag)
static RigidBodyConrigidbody_copy_constraint (const Object *ob, const int)
void BKE_rigidbody_object_copy (Main *bmain, Object *ob_dst, const Object *ob_src, const int flag)

Detailed Description

Blender-side interface and methods for dealing with Rigid Body simulations.

Definition in file rigidbody.cc.

Function Documentation

◆ BKE_rigidbody_add_object()

bool BKE_rigidbody_add_object ( Main * bmain,
Scene * scene,
Object * ob,
int type,
ReportList * reports )

Definition at line 2336 of file rigidbody.cc.

References BKE_report(), and RPT_ERROR.

Referenced by ED_rigidbody_object_add().

◆ BKE_rigidbody_aftertrans_update()

void BKE_rigidbody_aftertrans_update ( struct Object * ob,
float loc[3],
float rot[3],
float quat[4],
float rotAxis[3],
float rotAngle )

Used when canceling transforms - return rigidbody and object to initial states.

Definition at line 2345 of file rigidbody.cc.

References rot.

Referenced by blender::ed::transform::special_aftertrans_update__object().

◆ BKE_rigidbody_cache_reset()

void BKE_rigidbody_cache_reset ( RigidBodyWorld * rbw)

Definition at line 2353 of file rigidbody.cc.

Referenced by BKE_rigidbody_object_copy().

◆ BKE_rigidbody_calc_center_of_mass()

void BKE_rigidbody_calc_center_of_mass ( Object * ob,
float r_center[3] )

Definition at line 2308 of file rigidbody.cc.

References zero_v3().

◆ BKE_rigidbody_calc_volume()

void BKE_rigidbody_calc_volume ( struct Object * ob,
float * r_vol )

Helper function to calculate volume of rigid-body object.

TODO: allow a parameter to specify method used to calculate this?

Definition at line 2302 of file rigidbody.cc.

Referenced by rigidbody_objects_calc_mass_exec().

◆ BKE_rigidbody_check_sim_running()

bool BKE_rigidbody_check_sim_running ( RigidBodyWorld * rbw,
float ctime )

◆ BKE_rigidbody_constraints_collection_validate()

void BKE_rigidbody_constraints_collection_validate ( Scene * scene,
RigidBodyWorld * rbw )

Definition at line 2357 of file rigidbody.cc.

Referenced by do_versions_after_linking_280().

◆ BKE_rigidbody_create_constraint()

RigidBodyCon * BKE_rigidbody_create_constraint ( struct Scene * scene,
struct Object * ob,
short type )

Add rigid body constraint to the specified object.

Definition at line 2325 of file rigidbody.cc.

Referenced by ED_rigidbody_constraint_add().

◆ BKE_rigidbody_create_object()

RigidBodyOb * BKE_rigidbody_create_object ( struct Scene * scene,
struct Object * ob,
short type )

Add rigid body settings to the specified object.

Definition at line 2321 of file rigidbody.cc.

◆ BKE_rigidbody_create_world()

RigidBodyWorld * BKE_rigidbody_create_world ( struct Scene * scene)

Set up RigidBody world.

Create Blender-side settings data - physics objects not initialized yet.

Definition at line 2312 of file rigidbody.cc.

Referenced by rigidbody_world_add_exec().

◆ BKE_rigidbody_do_simulation()

void BKE_rigidbody_do_simulation ( struct Depsgraph * depsgraph,
struct Scene * scene,
float ctime )

Run RigidBody simulation for the specified physics world.

Definition at line 2355 of file rigidbody.cc.

References depsgraph.

Referenced by BKE_rigidbody_eval_simulation().

◆ BKE_rigidbody_ensure_local_object()

void BKE_rigidbody_ensure_local_object ( Main * bmain,
Object * ob )

◆ BKE_rigidbody_eval_simulation()

void BKE_rigidbody_eval_simulation ( Depsgraph * depsgraph,
Scene * scene )

◆ BKE_rigidbody_free_constraint()

void BKE_rigidbody_free_constraint ( struct Object * ob)

Free rigid-body constraint and simulation instance.

Definition at line 215 of file rigidbody.cc.

References MEM_freeN(), RigidBodyCon::physics_constraint, RB_constraint_delete(), and Object::rigidbody_constraint.

Referenced by object_free_data().

◆ BKE_rigidbody_free_object()

◆ BKE_rigidbody_free_world()

◆ BKE_rigidbody_get_world()

RigidBodyWorld * BKE_rigidbody_get_world ( struct Scene * scene)

Get RigidBody world for the given scene, creating one if needed

Parameters
sceneScene to find active Rigid Body world for.

Definition at line 2329 of file rigidbody.cc.

Referenced by ED_rigidbody_constraint_add(), and rigidbody_con_add_exec().

◆ BKE_rigidbody_is_affected_by_simulation()

bool BKE_rigidbody_is_affected_by_simulation ( Object * ob)

◆ BKE_rigidbody_main_collection_object_add()

void BKE_rigidbody_main_collection_object_add ( struct Main * bmain,
struct Collection * collection,
struct Object * object )

Ensure object added to collection gets RB data if that collection is a RB one.

Definition at line 2358 of file rigidbody.cc.

Referenced by collection_object_add().

◆ BKE_rigidbody_object_copy()

◆ BKE_rigidbody_object_sync_transforms()

void BKE_rigidbody_object_sync_transforms ( Depsgraph * depsgraph,
Scene * scene,
Object * ob )

◆ BKE_rigidbody_objects_collection_validate()

void BKE_rigidbody_objects_collection_validate ( struct Main * bmain,
struct Scene * scene,
struct RigidBodyWorld * rbw )

Ensure newly set collections' objects all have required data.

Definition at line 2356 of file rigidbody.cc.

Referenced by do_versions_after_linking_280().

◆ BKE_rigidbody_rebuild_sim()

void BKE_rigidbody_rebuild_sim ( Depsgraph * depsgraph,
Scene * scene )

◆ BKE_rigidbody_rebuild_world()

void BKE_rigidbody_rebuild_world ( struct Depsgraph * depsgraph,
struct Scene * scene,
float ctime )

Rebuild rigid body world.

NOTE: this needs to be called before frame update to work correctly.

Definition at line 2354 of file rigidbody.cc.

References depsgraph.

Referenced by BKE_rigidbody_rebuild_sim().

◆ BKE_rigidbody_remove_constraint()

void BKE_rigidbody_remove_constraint ( Main * bmain,
Scene * scene,
Object * ob,
const bool free_us )

◆ BKE_rigidbody_remove_object()

void BKE_rigidbody_remove_object ( Main * bmain,
Scene * scene,
Object * ob,
const bool free_us )

Definition at line 2342 of file rigidbody.cc.

Referenced by BKE_scene_remove_rigidbody_object(), and ED_rigidbody_object_remove().

◆ BKE_rigidbody_sync_transforms()

void BKE_rigidbody_sync_transforms ( struct RigidBodyWorld * rbw,
struct Object * ob,
float ctime )

Sync rigid body and object transformations.

Definition at line 2344 of file rigidbody.cc.

Referenced by BKE_rigidbody_object_sync_transforms(), and object_where_is_calc_ex().

◆ BKE_rigidbody_validate_sim_world()

void BKE_rigidbody_validate_sim_world ( struct Scene * scene,
struct RigidBodyWorld * rbw,
bool rebuild )

'validate' (i.e. make new or replace old) Physics-Engine objects. Create physics sim world given RigidBody world settings

Note
this does NOT update object references that the scene uses, in case those aren't ready yet!

Definition at line 2300 of file rigidbody.cc.

◆ BKE_rigidbody_world_copy()

RigidBodyWorld * BKE_rigidbody_world_copy ( struct RigidBodyWorld * rbw,
int flag )

Copy.

Definition at line 2316 of file rigidbody.cc.

References flag.

Referenced by scene_copy_data().

◆ BKE_rigidbody_world_groups_relink()

void BKE_rigidbody_world_groups_relink ( RigidBodyWorld * rbw)

Definition at line 2320 of file rigidbody.cc.

Referenced by BKE_scene_groups_relink().

◆ BKE_rigidbody_world_id_loop()

◆ BKE_rigidbody_world_init_runtime()

void BKE_rigidbody_world_init_runtime ( struct RigidBodyWorld * rbw)

Runtime data.

Definition at line 96 of file rigidbody.cc.

References RigidBodyWorld_Shared::runtime, and RigidBodyWorld::shared.

Referenced by blo_do_versions_280(), and scene_blend_read_data().

◆ BKE_rigidbody_world_physics()

rbDynamicsWorld * BKE_rigidbody_world_physics ( RigidBodyWorld * rbw)

◆ RB_body_delete()

void RB_body_delete ( void * )
static

Definition at line 79 of file rigidbody.cc.

Referenced by BKE_rigidbody_free_object().

◆ RB_constraint_delete()

void RB_constraint_delete ( void * )
static

Definition at line 81 of file rigidbody.cc.

Referenced by BKE_rigidbody_free_constraint().

◆ RB_dworld_delete()

void RB_dworld_delete ( void * )
static

Definition at line 78 of file rigidbody.cc.

Referenced by RigidBodyWorld_Runtime::~RigidBodyWorld_Runtime().

◆ RB_dworld_remove_body()

void RB_dworld_remove_body ( void * ,
void *  )
static

Definition at line 77 of file rigidbody.cc.

Referenced by BKE_rigidbody_free_object().

◆ RB_dworld_remove_constraint()

void RB_dworld_remove_constraint ( void * ,
void *  )
static

Definition at line 76 of file rigidbody.cc.

Referenced by BKE_rigidbody_free_world().

◆ RB_shape_delete()

void RB_shape_delete ( void * )
static

Definition at line 80 of file rigidbody.cc.

Referenced by BKE_rigidbody_free_object().

◆ rigidbody_copy_constraint()

RigidBodyCon * rigidbody_copy_constraint ( const Object * ob,
const int  )
static

◆ rigidbody_copy_object()

RigidBodyOb * rigidbody_copy_object ( const Object * ob,
const int flag )
static