[Bf-blender-cvs] [345eb6f7cc] render-layers: RNA: object.select_get/set(action={'SELECT', 'DESELECT', 'TOGGLE'})

Dalai Felinto noreply at git.blender.org
Wed Jan 11 12:48:42 CET 2017


Commit: 345eb6f7cc8157eec7859d7a9f875015ef7528ed
Author: Dalai Felinto
Date:   Wed Jan 11 12:48:36 2017 +0100
Branches: render-layers
https://developer.blender.org/rB345eb6f7cc8157eec7859d7a9f875015ef7528ed

RNA: object.select_get/set(action={'SELECT', 'DESELECT', 'TOGGLE'})

===================================================================

M	source/blender/makesrna/intern/rna_object.c
M	source/blender/makesrna/intern/rna_object_api.c
M	source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index e1c1da3cc9..f1ee226fae 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -297,15 +297,6 @@ static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), Poin
 }
 
 /* when changing the selection flag the scene needs updating */
-static void rna_Object_select_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
-{
-	if (scene) {
-		Object *ob = (Object *)ptr->id.data;
-		short mode = (ob->flag & SELECT) ? BA_SELECT : BA_DESELECT;
-		ED_base_object_select(BKE_scene_base_find(scene, ob), mode);
-	}
-}
-
 static void rna_Base_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	Base *base = (Base *)ptr->data;
@@ -2246,11 +2237,6 @@ static void rna_def_object(BlenderRNA *brna)
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Local View Layers", "3D local view layers the object is on");
 
-	prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
-	RNA_def_property_ui_text(prop, "Select", "Object selection state");
-	RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_select_update");
-
 	/* for data access */
 	prop = RNA_def_property(srna, "bound_box", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_multi_array(prop, 2, boundbox_dimsize);
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index b995f4341f..484820759c 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -40,10 +40,12 @@
 #include "RNA_define.h"
 
 #include "DNA_constraint_types.h"
+#include "DNA_layer_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_object_types.h"
 
 #include "BKE_depsgraph.h"
+#include "BKE_layer.h"
 
 #include "rna_internal.h"  /* own include */
 
@@ -90,6 +92,49 @@ static EnumPropertyItem space_items[] = {
 
 #include "DEG_depsgraph.h"
 
+static void rna_Object_select_set(Object *ob, bContext *C, ReportList *reports, int action)
+{
+	SceneLayer *sl = CTX_data_scene_layer(C);
+	ObjectBase *base = BKE_scene_layer_base_find(sl, ob);
+
+	if (!base) {
+		BKE_reportf(reports, RPT_ERROR, "Object '%s' not in Render Layer '%s'!", ob->id.name + 2, sl->name);
+		return;
+	}
+
+	if (action == 2) { /* TOGGLE */
+		if ((base->flag & BASE_SELECTED) != 0) {
+			action = 1; /* DESELECT */
+		}
+		else {
+			action = 0; /* SELECT */
+		}
+	}
+
+	switch (action) {
+	    case 1: /* DESELECT */
+		    base->flag &= ~BASE_SELECTED;
+		    break;
+	    case 0: /* SELECT */
+	    default:
+		    BKE_scene_layer_base_select(sl, base);
+		    break;
+	}
+}
+
+static int rna_Object_select_get(Object *ob, bContext *C, ReportList *reports)
+{
+	SceneLayer *sl = CTX_data_scene_layer(C);
+	ObjectBase *base = BKE_scene_layer_base_find(sl, ob);
+
+	if (!base) {
+		BKE_reportf(reports, RPT_ERROR, "Object '%s' not in Render Layer '%s'!", ob->id.name + 2, sl->name);
+		return -1;
+	}
+
+	return ((base->flag & BASE_SELECTED) != 0) ? 1 : 0;
+}
+
 /* Convert a given matrix from a space to another (using the object and/or a bone as reference). */
 static void rna_Scene_mat_convert_space(Object *ob, ReportList *reports, bPoseChannel *pchan,
                                         float *mat, float *mat_ret, int from, int to)
@@ -504,6 +549,26 @@ void RNA_api_object(StructRNA *srna)
 	};
 #endif
 
+	static EnumPropertyItem object_select_items[] = {
+	    {0, "SELECT", 0, "Select", "Select object from the active render layer"},
+	    {1, "DESELECT", 0, "Deselect", "Deselect object from the active render layer"},
+	    {2, "TOGGLE", 0, "Toggle", "Toggle object selection from the active render layer"},
+	    {0, NULL, 0, NULL, NULL}
+	};
+
+	/* Special wrapper to access the base selection value */
+	func = RNA_def_function(srna, "select_set", "rna_Object_select_set");
+	RNA_def_function_ui_description(func, "Select the object (for the active render layer)");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+	parm = RNA_def_enum(func, "action", object_select_items, 0, "Action", "Select mode");
+	RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+	func = RNA_def_function(srna, "select_get", "rna_Object_select_get");
+	RNA_def_function_ui_description(func, "Get the object selection for the active render layer");
+	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+	parm = RNA_def_boolean(func, "result", 0, "", "Object selected");
+	RNA_def_function_return(func, parm);
+
 	/* Matrix space conversion */
 	func = RNA_def_function(srna, "convert_space", "rna_Scene_mat_convert_space");
 	RNA_def_function_ui_description(func, "Convert (transform) the given matrix from one space to another");
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index dd6b3d8532..cb3c313790 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -5578,7 +5578,7 @@ static void rna_def_object_base(BlenderRNA *brna)
 
 	srna = RNA_def_struct(brna, "ObjectBase", NULL);
 	RNA_def_struct_sdna(srna, "ObjectBase");
-	RNA_def_struct_ui_text(srna, "Object Base", "An object instance in a scene layer");
+	RNA_def_struct_ui_text(srna, "Object Base", "An object instance in a render layer");
 	RNA_def_struct_ui_icon(srna, ICON_OBJECT_DATA);
 
 	prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);




More information about the Bf-blender-cvs mailing list