Blender V5.0
BKE_rigidbody.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9
10#pragma once
11
12#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag enum. */
13
14struct RigidBodyOb;
15struct RigidBodyWorld;
16struct rbDynamicsWorld;
17
18struct Collection;
19struct Depsgraph;
20struct Main;
21struct Object;
22struct ReportList;
23struct Scene;
24
25/* -------------------------------------------------------------------- */
28
32void BKE_rigidbody_free_world(struct Scene *scene);
36void BKE_rigidbody_free_object(struct Object *ob, struct RigidBodyWorld *rbw);
41
42/* ...... */
43
45 struct Object *ob_dst,
46 const struct Object *ob_src,
47 int flag);
48
50
51/* -------------------------------------------------------------------- */
54
58typedef void (*RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw,
59 struct ID **idpoin,
60 void *userdata,
62
65 void *userdata);
66
68
69/* -------------------------------------------------------------------- */
72
83 struct Object *ob,
84 short type);
89 struct Object *ob,
90 short type);
91
96 struct Scene *scene,
97 struct RigidBodyWorld *rbw);
99 struct RigidBodyWorld *rbw);
100
105 struct Collection *collection,
106 struct Object *object);
107
113
119
129void BKE_rigidbody_validate_sim_world(struct Scene *scene,
130 struct RigidBodyWorld *rbw,
131 bool rebuild);
132
138void BKE_rigidbody_calc_volume(struct Object *ob, float *r_vol);
139void BKE_rigidbody_calc_center_of_mass(struct Object *ob, float r_center[3]);
140
142
143/* -------------------------------------------------------------------- */
146
152struct RigidBodyWorld *BKE_rigidbody_get_world(struct Scene *scene);
153bool BKE_rigidbody_add_object(struct Main *bmain,
154 struct Scene *scene,
155 struct Object *ob,
156 int type,
157 struct ReportList *reports);
158void BKE_rigidbody_ensure_local_object(struct Main *bmain, struct Object *ob);
159void BKE_rigidbody_remove_object(struct Main *bmain,
160 struct Scene *scene,
161 struct Object *ob,
162 bool free_us);
163void BKE_rigidbody_remove_constraint(struct Main *bmain,
164 struct Scene *scene,
165 struct Object *ob,
166 bool free_us);
167
169
170/* -------------------------------------------------------------------- */
173
177#define RBO_GET_MASS(rbo) \
178 (((rbo) && (((rbo)->type == RBO_TYPE_PASSIVE) || ((rbo)->flag & RBO_FLAG_KINEMATIC) || \
179 ((rbo)->flag & RBO_FLAG_DISABLED))) ? \
180 (0.0f) : \
181 ((rbo)->mass))
182
186#define RBO_GET_MARGIN(rbo) \
187 (((rbo)->flag & RBO_FLAG_USE_MARGIN || (rbo)->shape == RB_SHAPE_CONVEXH || \
188 (rbo)->shape == RB_SHAPE_TRIMESH || (rbo)->shape == RB_SHAPE_CONE) ? \
189 ((rbo)->margin) : \
190 (0.04f))
191
193
194/* -------------------------------------------------------------------- */
197
202 float loc[3],
203 float rot[3],
204 float quat[4],
205 float rotAxis[3],
206 float rotAngle);
210void BKE_rigidbody_sync_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
211bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime);
219void BKE_rigidbody_rebuild_world(struct Depsgraph *depsgraph, struct Scene *scene, float ctime);
223void BKE_rigidbody_do_simulation(struct Depsgraph *depsgraph, struct Scene *scene, float ctime);
224
226
227/* -------------------------------------------------------------------- */
230
231void BKE_rigidbody_rebuild_sim(struct Depsgraph *depsgraph, struct Scene *scene);
232
233void BKE_rigidbody_eval_simulation(struct Depsgraph *depsgraph, struct Scene *scene);
234
236 struct Scene *scene,
237 struct Object *ob);
238
LibraryForeachIDCallbackFlag
void BKE_rigidbody_remove_constraint(struct Main *bmain, struct Scene *scene, struct Object *ob, bool free_us)
bool BKE_rigidbody_is_affected_by_simulation(struct Object *ob)
Definition rigidbody.cc:235
void BKE_rigidbody_rebuild_world(struct Depsgraph *depsgraph, struct Scene *scene, float ctime)
struct RigidBodyCon * BKE_rigidbody_create_constraint(struct Scene *scene, struct Object *ob, short type)
void BKE_rigidbody_free_constraint(struct Object *ob)
Definition rigidbody.cc:215
void BKE_rigidbody_cache_reset(struct RigidBodyWorld *rbw)
struct rbDynamicsWorld * BKE_rigidbody_world_physics(struct RigidBodyWorld *rbw)
Definition rigidbody.cc:103
void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
void BKE_rigidbody_calc_center_of_mass(struct Object *ob, float r_center[3])
void BKE_rigidbody_remove_object(struct Main *bmain, struct Scene *scene, struct Object *ob, bool free_us)
void BKE_rigidbody_do_simulation(struct Depsgraph *depsgraph, struct Scene *scene, float ctime)
void BKE_rigidbody_free_world(struct Scene *scene)
Definition rigidbody.cc:108
void BKE_rigidbody_eval_simulation(struct Depsgraph *depsgraph, struct Scene *scene)
void BKE_rigidbody_constraints_collection_validate(struct Scene *scene, struct RigidBodyWorld *rbw)
bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime)
void BKE_rigidbody_world_id_loop(struct RigidBodyWorld *rbw, RigidbodyWorldIDFunc func, void *userdata)
void BKE_rigidbody_calc_volume(struct Object *ob, float *r_vol)
struct RigidBodyOb * BKE_rigidbody_create_object(struct Scene *scene, struct Object *ob, short type)
void BKE_rigidbody_ensure_local_object(struct Main *bmain, struct Object *ob)
struct RigidBodyWorld * BKE_rigidbody_world_copy(struct RigidBodyWorld *rbw, int flag)
void BKE_rigidbody_world_init_runtime(struct RigidBodyWorld *rbw)
Definition rigidbody.cc:96
void BKE_rigidbody_free_object(struct Object *ob, struct RigidBodyWorld *rbw)
Definition rigidbody.cc:164
void(* RigidbodyWorldIDFunc)(struct RigidBodyWorld *rbw, struct ID **idpoin, void *userdata, LibraryForeachIDCallbackFlag cb_flag)
void BKE_rigidbody_rebuild_sim(struct Depsgraph *depsgraph, struct Scene *scene)
void BKE_rigidbody_object_copy(struct Main *bmain, struct Object *ob_dst, const struct Object *ob_src, int flag)
struct RigidBodyWorld * BKE_rigidbody_create_world(struct Scene *scene)
void BKE_rigidbody_world_groups_relink(struct RigidBodyWorld *rbw)
struct RigidBodyWorld * BKE_rigidbody_get_world(struct Scene *scene)
void BKE_rigidbody_sync_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime)
void BKE_rigidbody_validate_sim_world(struct Scene *scene, struct RigidBodyWorld *rbw, bool rebuild)
void BKE_rigidbody_object_sync_transforms(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
bool BKE_rigidbody_add_object(struct Main *bmain, struct Scene *scene, struct Object *ob, int type, struct ReportList *reports)
void BKE_rigidbody_main_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *object)
void BKE_rigidbody_objects_collection_validate(struct Main *bmain, struct Scene *scene, struct RigidBodyWorld *rbw)
BPy_StructRNA * depsgraph
#define rot(x, k)
Definition DNA_ID.h:414
uint8_t flag
Definition wm_window.cc:145