rigidbody: Don't cancel add operator if rigid body already exists
authorSergej Reich <sergej.reich@googlemail.com>
Tue, 12 Feb 2013 14:45:57 +0000 (14:45 +0000)
committerSergej Reich <sergej.reich@googlemail.com>
Tue, 12 Feb 2013 14:45:57 +0000 (14:45 +0000)
In some cases objects might have rigid bodies but aren't in the rigid
body group, just add objects to the group then.

Also allow changing the rigid body type by using the add acive/passive
buttons. This avoids having to remove objects just to change type.

source/blender/editors/physics/rigidbody_object.c

index 092c3370dbff65c8fbb9b3027ccc108b2ced7049..2bf962f4f4a2715149c043ad311f9a7ae3be9e4b 100644 (file)
@@ -93,11 +93,6 @@ void ED_rigidbody_ob_add(wmOperator *op, Scene *scene, Object *ob, int type)
 {
        RigidBodyWorld *rbw = BKE_rigidbody_get_world(scene);
 
-       /* check that object doesn't already belong to the current simulation */
-       if (ob->rigidbody_object) {
-               BKE_reportf(op->reports, RPT_INFO, "Object '%s' already has a Rigid Body", ob->id.name + 2);
-               return;
-       }
        if (ob->type != OB_MESH) {
                BKE_report(op->reports, RPT_ERROR, "Can't add Rigid Body to non mesh object");
                return;
@@ -118,11 +113,16 @@ void ED_rigidbody_ob_add(wmOperator *op, Scene *scene, Object *ob, int type)
        }
 
        /* make rigidbody object settings */
-       ob->rigidbody_object = BKE_rigidbody_create_object(scene, ob, type);
+       if (ob->rigidbody_object == NULL) {
+               ob->rigidbody_object = BKE_rigidbody_create_object(scene, ob, type);
+       }
+       ob->rigidbody_object->type = type;
        ob->rigidbody_object->flag |= RBO_FLAG_NEEDS_VALIDATE;
 
        /* add object to rigid body group */
        add_to_group(rbw->group, ob, scene, NULL);
+
+       DAG_id_tag_update(&ob->id, OB_RECALC_OB);
 }
 
 void ED_rigidbody_ob_remove(Scene *scene, Object *ob)