30#include "RNA_prototypes.hh"
47 (scene->rigidbody_world !=
nullptr && scene->rigidbody_world->group !=
nullptr &&
128 ot->
idname =
"RIGIDBODY_OT_object_add";
129 ot->
name =
"Add Rigid Body";
155 bool changed =
false;
179 ot->
idname =
"RIGIDBODY_OT_object_remove";
180 ot->
name =
"Remove Rigid Body";
201 bool changed =
false;
223 ot->
idname =
"RIGIDBODY_OT_objects_add";
224 ot->
name =
"Add Rigid Bodies";
249 bool changed =
false;
253 if (ob->rigidbody_object) {
274 ot->
idname =
"RIGIDBODY_OT_objects_remove";
275 ot->
name =
"Remove Rigid Bodies";
276 ot->
description =
"Remove selected objects from Rigid Body simulation";
294 bool changed =
false;
298 if (ob->rigidbody_object) {
324 ot->
idname =
"RIGIDBODY_OT_shape_change";
325 ot->
name =
"Change Collision Shape";
326 ot->
description =
"Change collision shapes for selected Rigid Body Objects";
361 {
N_(
"Acrylic"), 1400.0f},
362 {
N_(
"Asphalt (Crushed)"), 721.0f},
363 {
N_(
"Bark"), 240.0f},
364 {
N_(
"Beans (Cocoa)"), 593.0f},
365 {
N_(
"Beans (Soy)"), 721.0f},
366 {
N_(
"Brick (Pressed)"), 2400.0f},
367 {
N_(
"Brick (Common)"), 2000.0f},
368 {
N_(
"Brick (Soft)"), 1600.0f},
369 {
N_(
"Brass"), 8216.0f},
370 {
N_(
"Bronze"), 8860.0f},
371 {
N_(
"Carbon (Solid)"), 2146.0f},
372 {
N_(
"Cardboard"), 689.0f},
373 {
N_(
"Cast Iron"), 7150.0f},
374 {
N_(
"Chalk (Solid)"), 2499.0f},
375 {
N_(
"Concrete"), 2320.0f},
376 {
N_(
"Charcoal"), 208.0f},
377 {
N_(
"Cork"), 240.0f},
378 {
N_(
"Copper"), 8933.0f},
379 {
N_(
"Garbage"), 481.0f},
380 {
N_(
"Glass (Broken)"), 1940.0f},
381 {
N_(
"Glass (Solid)"), 2190.0f},
382 {
N_(
"Gold"), 19282.0f},
383 {
N_(
"Granite (Broken)"), 1650.0f},
384 {
N_(
"Granite (Solid)"), 2691.0f},
385 {
N_(
"Gravel"), 2780.0f},
386 {
N_(
"Ice (Crushed)"), 593.0f},
387 {
N_(
"Ice (Solid)"), 919.0f},
388 {
N_(
"Iron"), 7874.0f},
389 {
N_(
"Lead"), 11342.0f},
390 {
N_(
"Limestone (Broken)"), 1554.0f},
391 {
N_(
"Limestone (Solid)"), 2611.0f},
392 {
N_(
"Marble (Broken)"), 1570.0f},
393 {
N_(
"Marble (Solid)"), 2563.0f},
394 {
N_(
"Paper"), 1201.0f},
395 {
N_(
"Peanuts (Shelled)"), 641.0f},
396 {
N_(
"Peanuts (Not Shelled)"), 272.0f},
397 {
N_(
"Plaster"), 849.0f},
398 {
N_(
"Plastic"), 1200.0f},
399 {
N_(
"Polystyrene"), 1050.0f},
400 {
N_(
"Rubber"), 1522.0f},
401 {
N_(
"Silver"), 10501.0f},
402 {
N_(
"Steel"), 7860.0f},
403 {
N_(
"Stone"), 2515.0f},
404 {
N_(
"Stone (Crushed)"), 1602.0f},
405 {
N_(
"Timber"), 610.0f},
455 bool changed =
false;
474 if (ob->rigidbody_object) {
483 mass = volume * density;
513 if (
STREQ(prop_id,
"density")) {
531 ot->
idname =
"RIGIDBODY_OT_mass_calculate";
532 ot->
name =
"Calculate Mass";
533 ot->
description =
"Automatically calculate mass values for Rigid Body Objects based on volume";
551 "Type of material that objects are made of (determines material density)");
561 "Density value (kg/m^3), allows custom value if the 'Custom' preset is used",
#define CTX_DATA_BEGIN(C, Type, instance, member)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
void BKE_report(ReportList *reports, eReportType type, const char *message)
API for Blender-side Rigid Body stuff.
void BKE_rigidbody_remove_object(struct Main *bmain, struct Scene *scene, struct Object *ob, bool free_us)
void BKE_rigidbody_calc_volume(struct Object *ob, float *r_vol)
bool BKE_rigidbody_add_object(struct Main *bmain, struct Scene *scene, struct Object *ob, int type, struct ReportList *reports)
void DEG_id_tag_update(ID *id, unsigned int flags)
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
#define ID_IS_EDITABLE(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
Object is a sort of wrapper for general info.
Types and defines for representing Rigid Body entities.
bool ED_operator_object_active_editable(bContext *C)
const Depsgraph * depsgraph
Object * context_active_object(const bContext *C)
static int rigidbody_objects_shape_change_exec(bContext *C, wmOperator *op)
void RIGIDBODY_OT_object_remove(wmOperatorType *ot)
static const int NUM_RB_MATERIAL_PRESETS
static const EnumPropertyItem * rigidbody_materials_itemf(bContext *, PointerRNA *, PropertyRNA *, bool *r_free)
void RIGIDBODY_OT_shape_change(wmOperatorType *ot)
static bool operator_rigidbody_editable_poll(Scene *scene)
static bool ED_operator_rigidbody_active_poll(bContext *C)
static int rigidbody_objects_calc_mass_exec(bContext *C, wmOperator *op)
void RIGIDBODY_OT_object_add(wmOperatorType *ot)
void RIGIDBODY_OT_mass_calculate(wmOperatorType *ot)
static int rigidbody_objects_add_exec(bContext *C, wmOperator *op)
void RIGIDBODY_OT_objects_remove(wmOperatorType *ot)
void RIGIDBODY_OT_objects_add(wmOperatorType *ot)
static rbMaterialDensityItem RB_MATERIAL_DENSITY_TABLE[]
static bool ED_operator_rigidbody_add_poll(bContext *C)
static int rigidbody_object_add_exec(bContext *C, wmOperator *op)
static bool mass_calculate_poll_property(const bContext *, wmOperator *op, const PropertyRNA *prop)
void ED_rigidbody_object_remove(Main *bmain, Scene *scene, Object *ob)
static int rigidbody_object_remove_exec(bContext *C, wmOperator *op)
bool ED_rigidbody_object_add(Main *bmain, Scene *scene, Object *ob, int type, ReportList *reports)
static int rigidbody_objects_remove_exec(bContext *C, wmOperator *)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const char * RNA_property_identifier(const PropertyRNA *prop)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
const EnumPropertyItem rna_enum_rigidbody_object_type_items[]
const EnumPropertyItem rna_enum_rigidbody_object_shape_items[]
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
struct RigidBodyOb * rigidbody_object
bool(* poll_property)(const bContext *C, wmOperator *op, const PropertyRNA *prop) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)