Revision: 23881
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23881
Author:   campbellbarton
Date:     2009-10-16 12:00:45 +0200 (Fri, 16 Oct 2009)

Log Message:
-----------
new operator - OBJECT_OT_make_single_user

Added keybindings and menu items
- Make Single User, Ukey
- Make Local, Lkey
- Make Duplis real, Ctrl+Shift+A

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d.py
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/object/object_relations.c

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py    2009-10-16 09:27:21 UTC 
(rev 23880)
+++ trunk/blender/release/scripts/ui/space_view3d.py    2009-10-16 10:00:45 UTC 
(rev 23881)
@@ -409,6 +409,8 @@
                layout.item_booleanO("object.duplicate", "linked", True, 
text="Duplicate Linked")
                layout.itemO("object.delete", text="Delete...")
                layout.itemO("object.proxy_make", text="Make Proxy...")
+               layout.item_menu_enumO("object.make_local", "type", text="Make 
Local...")
+               layout.itemM("VIEW3D_MT_make_single_user")
                
                layout.itemS()
                
@@ -449,6 +451,8 @@
                layout.itemO("object.scale_apply", text="Scale")
                layout.itemS()
                layout.itemO("object.visual_transform_apply", text="Visual 
Transform")
+               layout.itemO("object.duplicates_make_real")
+               
 
 class VIEW3D_MT_object_parent(bpy.types.Menu):
        __label__ = "Parent"
@@ -501,6 +505,27 @@
                layout.itemO("object.restrictview_set", text="Hide Selected")
                layout.item_booleanO("object.restrictview_set", "unselected", 
True, text="Hide Unselected")
 
+class VIEW3D_MT_make_single_user(bpy.types.Menu):
+       __label__ = "Make Single User"
+
+       def draw(self, context):
+               layout = self.layout
+               
+               props = layout.itemO("object.make_single_user", 
properties=True, text="Object")
+               props.object = True
+               
+               props = layout.itemO("object.make_single_user", 
properties=True, text="Object & ObData")
+               props.object = props.obdata = True
+               
+               props = layout.itemO("object.make_single_user", 
properties=True, text="Object & ObData & Materials+Tex")
+               props.object = props.obdata = props.material = props.texture = 
True
+               
+               props = layout.itemO("object.make_single_user", 
properties=True, text="Materials+Tex")
+               props.material = props.texture = True
+               
+               props = layout.itemO("object.make_single_user", 
properties=True, text="Animation")
+               props.animation = True
+
 # ********** Vertex paint menu **********      
        
 class VIEW3D_MT_paint_vertex(bpy.types.Menu):
@@ -1416,7 +1441,9 @@
 bpy.types.register(VIEW3D_MT_object_group)
 bpy.types.register(VIEW3D_MT_object_constraints)
 bpy.types.register(VIEW3D_MT_object_showhide)
+bpy.types.register(VIEW3D_MT_make_single_user)
 
+
 bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
 
 bpy.types.register(VIEW3D_MT_paint_vertex)

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-10-16 
09:27:21 UTC (rev 23880)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-10-16 
10:00:45 UTC (rev 23881)
@@ -6430,7 +6430,7 @@
                }
        }
        if(main->versionfile <= 140) {
-               /* r-g-b-fac in texure */
+               /* r-g-b-fac in texture */
                Tex *tex = main->tex.first;
                while (tex) {
                        if ((tex->rfac == 0.0) &&

Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h 2009-10-16 
09:27:21 UTC (rev 23880)
+++ trunk/blender/source/blender/editors/object/object_intern.h 2009-10-16 
10:00:45 UTC (rev 23881)
@@ -58,6 +58,7 @@
 void OBJECT_OT_slow_parent_set(struct wmOperatorType *ot);
 void OBJECT_OT_slow_parent_clear(struct wmOperatorType *ot);
 void OBJECT_OT_make_local(struct wmOperatorType *ot);
+void OBJECT_OT_make_single_user(struct wmOperatorType *ot);
 void OBJECT_OT_move_to_layer(struct wmOperatorType *ot);
 
 /* object_edit.c */

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c    2009-10-16 
09:27:21 UTC (rev 23880)
+++ trunk/blender/source/blender/editors/object/object_ops.c    2009-10-16 
10:00:45 UTC (rev 23881)
@@ -90,6 +90,7 @@
        WM_operatortype_append(OBJECT_OT_slow_parent_set);
        WM_operatortype_append(OBJECT_OT_slow_parent_clear);
        WM_operatortype_append(OBJECT_OT_make_local);
+       WM_operatortype_append(OBJECT_OT_make_single_user);
        WM_operatortype_append(OBJECT_OT_move_to_layer);
 
        WM_operatortype_append(OBJECT_OT_select_inverse);
@@ -249,15 +250,21 @@
        kmi= WM_keymap_add_item(keymap, "WM_OT_call_menu", AKEY, KM_PRESS, 
KM_SHIFT, 0);
        RNA_string_set(kmi->ptr, "name", "INFO_MT_add");
 
+       WM_keymap_add_item(keymap, "OBJECT_OT_duplicates_make_real", AKEY, 
KM_PRESS, KM_SHIFT|KM_CTRL, 0);
+
        kmi= WM_keymap_add_item(keymap, "WM_OT_call_menu", AKEY, KM_PRESS, 
KM_CTRL, 0);
        RNA_string_set(kmi->ptr, "name", "VIEW3D_MT_object_apply");
 
+       kmi= WM_keymap_add_item(keymap, "WM_OT_call_menu", UKEY, KM_PRESS, 0, 
0);
+       RNA_string_set(kmi->ptr, "name", "VIEW3D_MT_make_single_user");
+
        WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move", DKEY, KM_PRESS, 
KM_SHIFT, 0);
        RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, 
KM_PRESS, KM_ALT, 0)->ptr, "linked", 1);
        WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 
0);
        WM_keymap_add_item(keymap, "OBJECT_OT_convert", CKEY, KM_PRESS, KM_ALT, 
0);
        WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, 
KM_CTRL|KM_ALT, 0);
-       
+       WM_keymap_add_item(keymap, "OBJECT_OT_make_local", LKEY, KM_PRESS, 0, 
0);
+
        // XXX this should probably be in screen instead... here for testing 
purposes in the meantime... - Aligorith
        WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, 
KM_PRESS, 0, 0);
        WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_v3d", IKEY, 
KM_PRESS, KM_ALT, 0);

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c      
2009-10-16 09:27:21 UTC (rev 23880)
+++ trunk/blender/source/blender/editors/object/object_relations.c      
2009-10-16 10:00:45 UTC (rev 23881)
@@ -1456,7 +1456,7 @@
 #endif // XXX old animation system
 }
 
-void single_mat_users(Scene *scene, int flag)
+static void single_mat_users(Scene *scene, int flag, int do_textures)
 {
        Object *ob;
        Base *base;
@@ -1486,17 +1486,17 @@
                                                        ipo_idnew(ma->ipo);     
/* drivers */
                                                }
 #endif // XXX old animation system
-                                               
-                                               for(b=0; b<MAX_MTEX; b++) {
-                                                       if(ma->mtex[b] && 
ma->mtex[b]->tex) {
-                                                               tex= 
ma->mtex[b]->tex;
-                                                               
if(tex->id.us>1) {
-                                                                       
ma->mtex[b]->tex= copy_texture(tex);
-                                                                       
tex->id.us--;
+                                               if(do_textures) {
+                                                       for(b=0; b<MAX_MTEX; 
b++) {
+                                                               if(ma->mtex[b] 
&& ma->mtex[b]->tex) {
+                                                                       tex= 
ma->mtex[b]->tex;
+                                                                       
if(tex->id.us>1) {
+                                                                               
ma->mtex[b]->tex= copy_texture(tex);
+                                                                               
tex->id.us--;
+                                                                       }
                                                                }
                                                        }
                                                }
-                                               
                                        }
                                }
                        }
@@ -1599,42 +1599,6 @@
                                        ID_NEW(ma->mtex[a]->object);
 }
 
-void single_user(Scene *scene, View3D *v3d)
-{
-       int nr;
-       
-       if(scene->id.lib) return;
-
-       clear_id_newpoins();
-       
-       nr= pupmenu("Make Single User%t|Object|Object & ObData|Object & ObData 
& Materials+Tex|Materials+Tex|Ipos");
-       if(nr>0) {
-       
-               if(nr==1) single_object_users(scene, v3d, 1);
-       
-               else if(nr==2) {
-                       single_object_users(scene, v3d, 1);
-                       single_obdata_users(scene, 1);
-               }
-               else if(nr==3) {
-                       single_object_users(scene, v3d, 1);
-                       single_obdata_users(scene, 1);
-                       single_mat_users(scene, 1); /* also tex */
-                       
-               }
-               else if(nr==4) {
-                       single_mat_users(scene, 1);
-               }
-               else if(nr==5) {
-                       single_ipo_users(scene, 1);
-               }
-               
-               
-               clear_id_newpoins();
-
-       }
-}
-
 /* used for copying scenes */
 void ED_object_single_users(Scene *scene, int full)
 {
@@ -1676,7 +1640,7 @@
        Material *ma, ***matarar;
        Lamp *la;
        ID *id;
-       int a, b, mode= RNA_boolean_get(op->ptr, "type");
+       int a, b, mode= RNA_enum_get(op->ptr, "type");;
        
        if(mode==3) {
                all_local(NULL, 0);     /* NULL is all libs */
@@ -1777,3 +1741,59 @@
        RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
 }
 
+static int make_single_user_exec(bContext *C, wmOperator *op)
+{
+       Scene *scene= CTX_data_scene(C);
+       View3D *v3d= CTX_wm_view3d(C); /* ok if this is NULL */
+       int flag= RNA_enum_get(op->ptr, "type"); /* 0==ALL, SELECTED==selected 
objecs */
+
+       if(RNA_boolean_get(op->ptr, "object"))
+           single_object_users(scene, v3d, flag);
+
+       if(RNA_boolean_get(op->ptr, "obdata"))
+               single_obdata_users(scene, flag);
+
+       if(RNA_boolean_get(op->ptr, "material"))
+               single_mat_users(scene, flag, FALSE);
+
+       if(RNA_boolean_get(op->ptr, "texture"))
+               single_mat_users(scene, flag, TRUE);
+
+       if(RNA_boolean_get(op->ptr, "animation"))
+               single_ipo_users(scene, flag);
+
+       clear_id_newpoins();
+
+       WM_event_add_notifier(C, NC_WINDOW, NULL);
+       return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_make_single_user(wmOperatorType *ot)
+{
+       static EnumPropertyItem type_items[]= {
+               {SELECT, "SELECTED_OBJECTS", 0, "Selected Objects", ""},
+               {0, "ALL", 0, "All", ""},
+               {0, NULL, 0, NULL, NULL}};
+
+       /* identifiers */
+       ot->name= "Make Single User";
+       ot->description = "Make linked data local to each object.";
+       ot->idname= "OBJECT_OT_make_single_user";
+
+       /* api callbacks */
+       ot->invoke= WM_menu_invoke;
+       ot->exec= make_single_user_exec;
+       ot->poll= ED_operator_scene_editable;
+
+       /* flags */
+       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+       /* properties */
+       RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
+
+       RNA_def_boolean(ot->srna, "object", 0, "Object", "Make single user 
objects");
+       RNA_def_boolean(ot->srna, "obdata", 0, "Object Data", "Make single user 
object data");
+       RNA_def_boolean(ot->srna, "material", 0, "Materials", "Make materials 
local to each datablock");
+       RNA_def_boolean(ot->srna, "texture", 0, "Textures", "Make textures 
local to each material");
+       RNA_def_boolean(ot->srna, "animation", 0, "Animation Data", "Make 
animation data local to each object");
+}


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

Reply via email to