#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#include "RNA_access.h"
#include "RNA_define.h"
BKE_collection_object_add(bmain, rbw->group, ob);
DEG_relations_tag_update(bmain);
- DEG_id_tag_update(&ob->id, OB_RECALC_OB);
- DEG_id_tag_update(&rbw->group->id, DEG_TAG_COPY_ON_WRITE);
+ DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
+ DEG_id_tag_update(&rbw->group->id, ID_RECALC_COPY_ON_WRITE);
return true;
}
BKE_rigidbody_remove_object(bmain, scene, ob);
DEG_relations_tag_update(bmain);
- DEG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
}
/* ********************************************** */
RNA_pointer_create(&ob->id, &RNA_RigidBodyObject, ob->rigidbody_object, &ptr);
RNA_enum_set(&ptr, "collision_shape", shape);
- DEG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
changed = true;
}
static int rigidbody_objects_calc_mass_exec(bContext *C, wmOperator *op)
{
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
int material = RNA_enum_get(op->ptr, "material");
float density;
bool changed = false;
/* mass is calculated from the approximate volume of the object,
* and the density of the material we're simulating
*/
- BKE_rigidbody_calc_volume(ob, &volume);
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
+ BKE_rigidbody_calc_volume(ob_eval, &volume);
mass = volume * density;
/* use RNA-system to change the property and perform all necessary changes */
RNA_pointer_create(&ob->id, &RNA_RigidBodyObject, ob->rigidbody_object, &ptr);
RNA_float_set(&ptr, "mass", mass);
- DEG_id_tag_update(&ob->id, OB_RECALC_OB);
+ DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
changed = true;
}
ot->poll = ED_operator_scene_editable;
/* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_USE_EVAL_DATA;
/* properties */
ot->prop = prop = RNA_def_enum(ot->srna, "material",