Revision: 31163
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31163
Author:   aligorith
Date:     2010-08-08 13:47:56 +0200 (Sun, 08 Aug 2010)

Log Message:
-----------
Bullet SoC - Bugfix: Deleting an object with Rigid Body settings without first 
removing it from the Rigid Body sims would result in a crash. Now delete 
objects accounts for this by doing this automatically

Modified Paths:
--------------
    branches/soc-2010-aligorith-2/source/blender/editors/include/ED_physics.h
    branches/soc-2010-aligorith-2/source/blender/editors/object/object_add.c
    
branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c

Modified: 
branches/soc-2010-aligorith-2/source/blender/editors/include/ED_physics.h
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/editors/include/ED_physics.h   
2010-08-08 08:33:47 UTC (rev 31162)
+++ branches/soc-2010-aligorith-2/source/blender/editors/include/ED_physics.h   
2010-08-08 11:47:56 UTC (rev 31163)
@@ -30,13 +30,23 @@
 #ifndef ED_PHYSICS_H
 #define ED_PHYSICS_H
 
+struct bContext;
+struct wmOperator;
 struct wmKeyConfig;
 
+struct Scene;
+struct Object;
+struct RigidBodyWorld;
+
 /* particle_edit.c */
 int PE_poll(struct bContext *C);
 int PE_hair_poll(struct bContext *C);
 int PE_poll_view3d(struct bContext *C);
 
+/* rigidbody_object.c */
+void ED_rigidbody_ob_add(struct bContext *C, struct wmOperator *op, struct 
RigidBodyWorld *rbw, struct Object *ob, int type);
+void ED_rigidbody_ob_remove(struct bContext *C, struct wmOperator *op, struct 
Scene *scene, struct Object *ob);
+
 /* operators */
 void ED_operatortypes_physics(void);
 void ED_keymap_physics(struct wmKeyConfig *keyconf);

Modified: 
branches/soc-2010-aligorith-2/source/blender/editors/object/object_add.c
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/editors/object/object_add.c    
2010-08-08 08:33:47 UTC (rev 31162)
+++ branches/soc-2010-aligorith-2/source/blender/editors/object/object_add.c    
2010-08-08 11:47:56 UTC (rev 31163)
@@ -83,6 +83,7 @@
 #include "ED_mball.h"
 #include "ED_mesh.h"
 #include "ED_object.h"
+#include "ED_physics.h"
 #include "ED_render.h"
 #include "ED_screen.h"
 #include "ED_transform.h"
@@ -862,8 +863,12 @@
                return OPERATOR_CANCELLED;
        
        CTX_DATA_BEGIN(C, Base*, base, selected_bases) {
-
                if(base->object->type==OB_LAMP) islamp= 1;
+               
+               /* remove from RigidBody worlds */
+               if(base->object->rigidbodySettings)
+                       ED_rigidbody_ob_remove(C, op, scene, base->object);
+               
                /* remove from current scene only */
                ED_base_object_free_and_unlink(scene, base);
        }

Modified: 
branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c
===================================================================
--- 
branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c 
    2010-08-08 08:33:47 UTC (rev 31162)
+++ 
branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c 
    2010-08-08 11:47:56 UTC (rev 31163)
@@ -79,7 +79,7 @@
 
 /* ----------------- */
 
-static void ed_rigidbody_ob_add (bContext *C, wmOperator *op, RigidBodyWorld 
*rbw, Object *ob, int type)
+void ED_rigidbody_ob_add (bContext *C, wmOperator *op, RigidBodyWorld *rbw, 
Object *ob, int type)
 {
        Scene *scene = CTX_data_scene(C);
        RigidBodyOb *rbo;
@@ -138,7 +138,7 @@
        BKE_rigidbody_validate_sim_object(rbw, ob, 0);
 }
 
-static void ed_rigidbody_ob_remove (bContext *C, wmOperator *op, Scene *scene, 
Object *ob)
+void ED_rigidbody_ob_remove (bContext *C, wmOperator *op, Scene *scene, Object 
*ob)
 {
        RigidBodyWorld *rbw;
        
@@ -191,7 +191,7 @@
        }
        
        /* apply to active object */
-       ed_rigidbody_ob_add(C, op, rbw, ob, type);
+       ED_rigidbody_ob_add(C, op, rbw, ob, type);
        
        /* send updates */
        DAG_ids_flush_update(0);
@@ -237,7 +237,7 @@
                return OPERATOR_CANCELLED;
        }
        else
-               ed_rigidbody_ob_remove(C, op, scene, ob);
+               ED_rigidbody_ob_remove(C, op, scene, ob);
        
        /* send updates */
        DAG_ids_flush_update(0);
@@ -283,7 +283,7 @@
        /* apply this to all selected objects... */
        CTX_DATA_BEGIN(C, Object*, ob, selected_objects) 
        {
-               ed_rigidbody_ob_add(C, op, rbw, ob, type);
+               ED_rigidbody_ob_add(C, op, rbw, ob, type);
        }
        CTX_DATA_END;
        
@@ -328,7 +328,7 @@
        CTX_DATA_BEGIN(C, Object*, ob, selected_objects) 
        {
                if (ob->rigidbodySettings)
-                       ed_rigidbody_ob_remove(C, op, scene, ob);
+                       ED_rigidbody_ob_remove(C, op, scene, ob);
        }
        CTX_DATA_END;
        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to