Blender
V3.3
|
Blender-side interface and methods for dealing with Rigid Body simulations. More...
#include <float.h>
#include <limits.h>
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "DNA_ID.h"
#include "DNA_collection_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_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.h"
#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
#include "BKE_object.h"
#include "BKE_pointcache.h"
#include "BKE_report.h"
#include "BKE_rigidbody.h"
#include "BKE_scene.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
Go to the source code of this file.
Blender-side interface and methods for dealing with Rigid Body simulations.
Definition in file rigidbody.c.
bool BKE_rigidbody_add_object | ( | Main * | bmain, |
Scene * | scene, | ||
Object * | ob, | ||
int | type, | ||
ReportList * | reports | ||
) |
Definition at line 2333 of file rigidbody.c.
References BKE_report(), and RPT_ERROR.
Referenced by ED_rigidbody_object_add().
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 2348 of file rigidbody.c.
Referenced by special_aftertrans_update__object().
void BKE_rigidbody_cache_reset | ( | RigidBodyWorld * | rbw | ) |
Definition at line 2356 of file rigidbody.c.
Definition at line 2296 of file rigidbody.c.
References zero_v3().
Helper function to calculate volume of rigid-body object.
TODO: allow a parameter to specify method used to calculate this?
Definition at line 2290 of file rigidbody.c.
Referenced by rigidbody_objects_calc_mass_exec().
bool BKE_rigidbody_check_sim_running | ( | RigidBodyWorld * | rbw, |
float | ctime | ||
) |
Definition at line 2352 of file rigidbody.c.
Referenced by ObjectToTransData(), and special_aftertrans_update__object().
void BKE_rigidbody_constraints_collection_validate | ( | Scene * | scene, |
RigidBodyWorld * | rbw | ||
) |
Definition at line 2368 of file rigidbody.c.
Referenced by do_versions_after_linking_280().
struct RigidBodyCon* BKE_rigidbody_create_constraint | ( | struct Scene * | scene, |
struct Object * | ob, | ||
short | type | ||
) |
Add rigid body constraint to the specified object.
Definition at line 2320 of file rigidbody.c.
References NULL.
Referenced by ED_rigidbody_constraint_add().
struct RigidBodyOb* BKE_rigidbody_create_object | ( | struct Scene * | scene, |
struct Object * | ob, | ||
short | type | ||
) |
Add rigid body settings to the specified object.
Definition at line 2316 of file rigidbody.c.
References NULL.
struct 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 2300 of file rigidbody.c.
References NULL.
Referenced by rigidbody_world_add_exec().
void BKE_rigidbody_do_simulation | ( | struct Depsgraph * | depsgraph, |
struct Scene * | scene, | ||
float | ctime | ||
) |
Run RigidBody simulation for the specified physics world.
Definition at line 2362 of file rigidbody.c.
Referenced by BKE_rigidbody_eval_simulation().
Definition at line 2329 of file rigidbody.c.
Referenced by BKE_library_make_local(), and loose_data_instantiate_object_rigidbody_postprocess().
Definition at line 2394 of file rigidbody.c.
References BKE_rigidbody_do_simulation(), BKE_scene_check_rigidbody_active(), DEG_debug_print_eval_time(), DEG_get_ctime(), depsgraph, Scene::id, ID::name, and scene.
Free rigid-body constraint and simulation instance.
Definition at line 193 of file rigidbody.c.
References if(), MEM_freeN, NULL, RigidBodyCon::physics_constraint, RB_constraint_delete(), and Object::rigidbody_constraint.
Referenced by object_free_data().
void BKE_rigidbody_free_object | ( | struct Object * | ob, |
struct RigidBodyWorld * | rbw | ||
) |
Free rigid-body settings and simulation instances.
Definition at line 146 of file rigidbody.c.
References G_MAIN, Object::id, Scene::id, LIB_TAG_COPIED_ON_WRITE, MEM_freeN, ID::next, NULL, RigidBodyOb_Shared::physics_object, RigidBodyOb_Shared::physics_shape, RigidBodyWorld_Shared::physics_world, RB_body_delete(), RB_dworld_remove_body(), RB_shape_delete(), Object::rigidbody_object, Scene::rigidbody_world, scene, RigidBodyWorld::shared, RigidBodyOb::shared, and ID::tag.
Referenced by BKE_rigidbody_free_world(), and object_free_data().
Free rigid-body world.
Definition at line 90 of file rigidbody.c.
References BKE_ptcache_free_list(), BKE_rigidbody_free_object(), RigidBodyWorld::constraints, RigidBodyWorld::effector_weights, FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN, FOREACH_COLLECTION_OBJECT_RECURSIVE_END, free(), RigidBodyWorld::group, Scene::id, LIB_TAG_COPIED_ON_WRITE, MEM_freeN, NULL, RigidBodyWorld::objects, RigidBodyCon::physics_constraint, RigidBodyWorld_Shared::physics_world, RigidBodyWorld_Shared::pointcache, RigidBodyWorld_Shared::ptcaches, RB_dworld_delete(), RB_dworld_remove_constraint(), Scene::rigidbody_world, scene, RigidBodyWorld::shared, and ID::tag.
Referenced by rigidbody_world_remove_exec(), and scene_free_data().
struct RigidBodyWorld* BKE_rigidbody_get_world | ( | struct Scene * | scene | ) |
Get RigidBody world for the given scene, creating one if needed
scene | Scene to find active Rigid Body world for. |
Definition at line 2324 of file rigidbody.c.
References NULL.
Referenced by ED_rigidbody_constraint_add(), and rigidbody_con_add_exec().
Definition at line 213 of file rigidbody.c.
References RigidBodyOb::flag, NULL, Object::parent, RB_SHAPE_COMPOUND, RBO_FLAG_KINEMATIC, RBO_TYPE_PASSIVE, Object::rigidbody_object, RigidBodyOb::shape, and RigidBodyOb::type.
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 2371 of file rigidbody.c.
Referenced by collection_object_add().
void BKE_rigidbody_object_copy | ( | Main * | bmain, |
Object * | ob_dst, | ||
const Object * | ob_src, | ||
const int | flag | ||
) |
Definition at line 2283 of file rigidbody.c.
Definition at line 2406 of file rigidbody.c.
References BKE_rigidbody_sync_transforms(), DEG_debug_print_eval_time(), DEG_get_ctime(), depsgraph, Object::id, ID::name, Scene::rigidbody_world, and scene.
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 2365 of file rigidbody.c.
Referenced by do_versions_after_linking_280().
Definition at line 2384 of file rigidbody.c.
References BKE_rigidbody_rebuild_world(), BKE_scene_check_rigidbody_active(), DEG_debug_print_eval_time(), DEG_get_ctime(), depsgraph, Scene::id, ID::name, and scene.
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 2359 of file rigidbody.c.
Referenced by BKE_rigidbody_rebuild_sim().
void BKE_rigidbody_remove_constraint | ( | Main * | bmain, |
Scene * | scene, | ||
Object * | ob, | ||
const bool | free_us | ||
) |
Definition at line 2342 of file rigidbody.c.
Referenced by BKE_scene_remove_rigidbody_object(), and ED_rigidbody_constraint_remove().
void BKE_rigidbody_remove_object | ( | struct Main * | bmain, |
Scene * | scene, | ||
Object * | ob, | ||
const bool | free_us | ||
) |
Definition at line 2339 of file rigidbody.c.
Referenced by BKE_scene_remove_rigidbody_object(), and ED_rigidbody_object_remove().
void BKE_rigidbody_sync_transforms | ( | struct RigidBodyWorld * | rbw, |
struct Object * | ob, | ||
float | ctime | ||
) |
Sync rigid body and object transformations.
Definition at line 2345 of file rigidbody.c.
Referenced by BKE_rigidbody_object_sync_transforms(), and object_where_is_calc_ex().
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
Definition at line 2286 of file rigidbody.c.
struct RigidBodyWorld* BKE_rigidbody_world_copy | ( | struct RigidBodyWorld * | rbw, |
int | flag | ||
) |
Copy.
Definition at line 2304 of file rigidbody.c.
References NULL.
Referenced by scene_copy_data().
void BKE_rigidbody_world_groups_relink | ( | struct RigidBodyWorld * | rbw | ) |
Definition at line 2308 of file rigidbody.c.
Referenced by BKE_scene_groups_relink().
void BKE_rigidbody_world_id_loop | ( | struct RigidBodyWorld * | rbw, |
RigidbodyWorldIDFunc | func, | ||
void * | userdata | ||
) |
Definition at line 2311 of file rigidbody.c.
Referenced by scene_foreach_id().
Definition at line 78 of file rigidbody.c.
Referenced by BKE_rigidbody_free_object().
Definition at line 84 of file rigidbody.c.
Referenced by BKE_rigidbody_free_constraint().
Definition at line 75 of file rigidbody.c.
Referenced by BKE_rigidbody_free_world().
Definition at line 72 of file rigidbody.c.
Referenced by BKE_rigidbody_free_object().
Definition at line 69 of file rigidbody.c.
Referenced by BKE_rigidbody_free_world().
Definition at line 81 of file rigidbody.c.
Referenced by BKE_rigidbody_free_object().