[Bf-blender-cvs] [d085e62] render-layers: layer.objects.active

Dalai Felinto noreply at git.blender.org
Sat Dec 3 02:44:25 CET 2016


Commit: d085e62693f2f8d9bb1d62cafb7aec53b30c96e6
Author: Dalai Felinto
Date:   Sat Dec 3 01:57:05 2016 +0100
Branches: render-layers
https://developer.blender.org/rBd085e62693f2f8d9bb1d62cafb7aec53b30c96e6

layer.objects.active

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index d3bb2b5..c505a4c 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -34,12 +34,14 @@ extern "C" {
 #define TODO_LAYER_SYNC
 #define TODO_LAYER_OVERRIDE
 
-struct SceneCollection;
 struct LayerCollection;
 struct ID;
 struct Main;
-struct SceneLayer;
+struct Object;
+struct ObjectBase;
 struct Scene;
+struct SceneCollection;
+struct SceneLayer;
 
 struct SceneLayer *BKE_scene_layer_add(struct Scene *scene, const char *name);
 
@@ -47,6 +49,8 @@ bool BKE_scene_layer_remove(struct Main *bmain, struct Scene *scene, struct Scen
 
 void BKE_scene_layer_engine_set(struct SceneLayer *sl, const char *engine);
 
+struct ObjectBase *BKE_scene_layer_base_find(struct SceneLayer *sl, struct Object *ob);
+
 void BKE_layer_collection_free(struct SceneLayer *sl, struct LayerCollection *lc);
 
 struct LayerCollection *BKE_layer_collection_active(struct SceneLayer *sl);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 924a6b2..4d1c73a 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -118,6 +118,11 @@ void BKE_scene_layer_engine_set(SceneLayer *sl, const char *engine)
 
 /* ObjectBase */
 
+ObjectBase *BKE_scene_layer_base_find(SceneLayer *sl, Object *ob)
+{
+	return BLI_findptr(&sl->object_bases, ob, offsetof(ObjectBase, object));
+}
+
 static void scene_layer_object_base_unref(SceneLayer* sl, ObjectBase *base)
 {
 	base->refcount--;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index da0cf40..3bee809 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2289,6 +2289,21 @@ static void rna_LayerCollections_active_collection_set(PointerRNA *ptr, PointerR
 	if (index != -1) sl->active_collection = index;
 }
 
+static PointerRNA rna_LayerObjects_active_object_get(PointerRNA *ptr)
+{
+	SceneLayer *sl = (SceneLayer *)ptr->data;
+	return rna_pointer_inherit_refine(ptr, &RNA_Object, sl->basact ? sl->basact->object : NULL);
+}
+
+static void rna_LayerObjects_active_object_set(PointerRNA *ptr, PointerRNA value)
+{
+	SceneLayer *sl = (SceneLayer *)ptr->data;
+	if (value.data)
+		sl->basact = BKE_scene_layer_base_find(sl, (Object *)value.data);
+	else
+		sl->basact = NULL;
+}
+
 static void rna_SceneLayer_name_set(PointerRNA *ptr, const char *value)
 {
 	Scene *scene = (Scene *)ptr->id.data;
@@ -5305,6 +5320,26 @@ static void rna_def_layer_collections(BlenderRNA *brna, PropertyRNA *cprop)
 	RNA_def_property_update(prop, NC_SCENE | ND_LAYER, NULL);
 }
 
+static void rna_def_layer_objects(BlenderRNA *brna, PropertyRNA *cprop)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	RNA_def_property_srna(cprop, "LayerObjects");
+	srna = RNA_def_struct(brna, "LayerObjects", NULL);
+	RNA_def_struct_sdna(srna, "SceneLayer");
+	RNA_def_struct_ui_text(srna, "Layer Objects", "Collections of objects");
+
+	prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+	RNA_def_property_struct_type(prop, "Object");
+	RNA_def_property_pointer_funcs(prop, "rna_LayerObjects_active_object_get", "rna_LayerObjects_active_object_set", NULL, NULL);
+	RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
+	RNA_def_property_ui_text(prop, "Active Object", "Active object for this layer");
+	/* Could call: ED_base_object_activate(C, rl->basact);
+	 * but would be a bad level call and it seems the notifier is enough */
+	RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL);
+}
+
 static void rna_def_scene_layer(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -5331,6 +5366,7 @@ static void rna_def_scene_layer(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "Object");
 	RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, "rna_SceneLayer_objects_get", NULL, NULL, NULL, NULL);
 	RNA_def_property_ui_text(prop, "Objects", "All the objects in this layer");
+	rna_def_layer_objects(brna, prop);
 
 #if 0
 	/* engine, active_object,  ... */




More information about the Bf-blender-cvs mailing list