[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23881] trunk/blender: new operator - OBJECT_OT_make_single_user
Campbell Barton
ideasman42 at gmail.com
Fri Oct 16 12:00:45 CEST 2009
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");
+}
More information about the Bf-blender-cvs
mailing list