[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