Index: release/scripts/startup/bl_ui/space_view3d.py =================================================================== --- release/scripts/startup/bl_ui/space_view3d.py (revision 42707) +++ release/scripts/startup/bl_ui/space_view3d.py (working copy) @@ -993,6 +993,7 @@ layout = self.layout layout.operator("object.logic_bricks_copy", text="Copy Logic Bricks") + layout.operator("object.physics_copy", text="Copy All Physics Attributes") layout.separator() Index: source/blender/editors/object/object_edit.c =================================================================== --- source/blender/editors/object/object_edit.c (revision 42707) +++ source/blender/editors/object/object_edit.c (working copy) @@ -2178,3 +2178,54 @@ /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +static int physics_copy_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Object *ob=ED_object_active_context(C); + + CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) { + if(ob != ob_iter) { + ob_iter->gameflag = ob->gameflag; + ob_iter->gameflag2 = ob->gameflag2; + ob_iter->inertia = ob->inertia; + ob_iter->formfactor = ob->formfactor;; + ob_iter->damping = ob->damping; + ob_iter->rdamping = ob->rdamping; + ob_iter->min_vel = ob->min_vel; + ob_iter->max_vel = ob->max_vel; + ob_iter->obstacleRad = ob->obstacleRad; + ob_iter->mass = ob->mass; + + if(ob_iter->gameflag & OB_ANISOTROPIC_FRICTION) { + ob_iter->anisotropicFriction[0] = ob->anisotropicFriction[0]; + ob_iter->anisotropicFriction[1] = ob->anisotropicFriction[1]; + ob_iter->anisotropicFriction[2] = ob->anisotropicFriction[2]; + } + + if (ob_iter->gameflag & OB_BOUNDS) { + ob_iter->collision_boundtype = ob->collision_boundtype; + } + + ob_iter->margin = ob->margin; + ob_iter->bsoft = copy_bulletsoftbody(ob->bsoft); + } + } + CTX_DATA_END; + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_physics_copy(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Copy All Physics Attributes to Selected"; + ot->description = "Copy all physics attributes to other selected objects"; + ot->idname= "OBJECT_OT_physics_copy"; + + /* api callbacks */ + ot->exec= physics_copy_exec; + ot->poll= ED_operator_object_active_editable; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} Index: source/blender/editors/object/object_ops.c =================================================================== --- source/blender/editors/object/object_ops.c (revision 42707) +++ source/blender/editors/object/object_ops.c (working copy) @@ -189,6 +189,7 @@ WM_operatortype_append(OBJECT_OT_game_property_copy); WM_operatortype_append(OBJECT_OT_game_property_clear); WM_operatortype_append(OBJECT_OT_logic_bricks_copy); + WM_operatortype_append(OBJECT_OT_physics_copy); WM_operatortype_append(OBJECT_OT_shape_key_add); WM_operatortype_append(OBJECT_OT_shape_key_remove); Index: source/blender/editors/object/object_intern.h =================================================================== --- source/blender/editors/object/object_intern.h (revision 42707) +++ source/blender/editors/object/object_intern.h (working copy) @@ -92,6 +92,7 @@ void OBJECT_OT_game_property_copy(struct wmOperatorType *ot); void OBJECT_OT_game_property_clear(struct wmOperatorType *ot); void OBJECT_OT_logic_bricks_copy(struct wmOperatorType *ot); +void OBJECT_OT_physics_copy(struct wmOperatorType *ot); /* object_select.c */ void OBJECT_OT_select_all(struct wmOperatorType *ot);