[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49222] trunk/blender/source/blender/ editors: Implement operator to select linked data from outliner

Sergey Sharybin sergey.vfx at gmail.com
Wed Jul 25 21:45:34 CEST 2012


Revision: 49222
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49222
Author:   nazgul
Date:     2012-07-25 19:45:34 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
Implement operator to select linked data from outliner

Supports selecting using object data, material and library.

Would be nice to hide this menu item from menus appearing for
datablocks which does not support such a selection, but that
could be done separately.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/object/object_select.c
    trunk/blender/source/blender/editors/space_outliner/outliner_tools.c

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h	2012-07-25 19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/include/ED_object.h	2012-07-25 19:45:34 UTC (rev 49222)
@@ -41,6 +41,7 @@
 struct bPoseChannel;
 struct Curve;
 struct EnumPropertyItem;
+struct ID;
 struct KeyBlock;
 struct Lattice;
 struct Main;
@@ -183,6 +184,9 @@
 
 int ED_object_multires_update_totlevels_cb(struct Object *ob, void *totlevel_v);
 
+/* ibject_select.c */
+void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/editors/object/object_select.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_select.c	2012-07-25 19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/object/object_select.c	2012-07-25 19:45:34 UTC (rev 49222)
@@ -372,6 +372,25 @@
 	return changed;
 }
 
+void ED_object_select_linked_by_id(bContext *C, ID *id)
+{
+	int gs = GS(id->name);
+	int changed = FALSE;
+
+	if (ELEM8(gs, ID_ME, ID_CU, ID_MB, ID_LT, ID_LA, ID_CA, ID_TXT, ID_SPK)) {
+		changed = object_select_all_by_obdata(C, id);
+	}
+	else if (gs == ID_MA) {
+		changed = object_select_all_by_material_texture(C, FALSE, (Material *)id, NULL);
+	}
+	else if (gs == ID_LI) {
+		changed = object_select_all_by_library(C, (Library *) id);
+	}
+
+	if (changed)
+		WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
+}
+
 static int object_select_linked_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene = CTX_data_scene(C);
@@ -1097,5 +1116,3 @@
 	RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of objects to select randomly", 0.f, 100.0f);
 	RNA_def_boolean(ot->srna, "extend", FALSE, "Extend Selection", "Extend selection instead of deselecting everything first");
 }
-
-

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_tools.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_tools.c	2012-07-25 19:45:31 UTC (rev 49221)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_tools.c	2012-07-25 19:45:34 UTC (rev 49222)
@@ -324,6 +324,14 @@
 	}
 }
 
+static void id_select_linked_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te),
+                                TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
+{
+	ID *id = tselem->id;
+
+	ED_object_select_linked_by_id(C, id);
+}
+
 static void singleuser_action_cb(bContext *C, Scene *UNUSED(scene), TreeElement *UNUSED(te),
                                  TreeStoreElem *tsep, TreeStoreElem *tselem)
 {
@@ -728,7 +736,9 @@
 	
 	OUTLINER_IDOP_FAKE_ADD,
 	OUTLINER_IDOP_FAKE_CLEAR,
-	OUTLINER_IDOP_RENAME
+	OUTLINER_IDOP_RENAME,
+
+	OUTLINER_IDOP_SELECT_LINKED
 } eOutlinerIdOpTypes;
 
 // TODO: implement support for changing the ID-block used
@@ -740,6 +750,7 @@
      "Ensure datablock gets saved even if it isn't in use (e.g. for motion and material libraries)"},
 	{OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""},
 	{OUTLINER_IDOP_RENAME, "RENAME", 0, "Rename", ""},
+	{OUTLINER_IDOP_SELECT_LINKED, "SELECT_LINKED", 0, "Select Linked", ""},
 	{0, NULL, 0, NULL, NULL}
 };
 
@@ -855,6 +866,11 @@
 			ED_undo_push(C, "Rename");
 		}
 		break;
+
+		case OUTLINER_IDOP_SELECT_LINKED:
+			outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_select_linked_cb);
+			ED_undo_push(C, "Select");
+			break;
 			
 		default:
 			// invalid - unhandled




More information about the Bf-blender-cvs mailing list