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);

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

Reply via email to