[Bf-blender-cvs] [f51c34185e] render-layers: bpy.context.layer_collection

Dalai Felinto noreply at git.blender.org
Mon Jan 30 18:26:30 CET 2017


Commit: f51c34185ed424a5e3ea0a2fa2f34f8ec9d678b2
Author: Dalai Felinto
Date:   Mon Jan 30 18:07:14 2017 +0100
Branches: render-layers
https://developer.blender.org/rBf51c34185ed424a5e3ea0a2fa2f34f8ec9d678b2

bpy.context.layer_collection

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

M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_context.c

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

diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 3f13105069..2fd11746fb 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -40,6 +40,7 @@ extern "C" {
 struct ARegion;
 struct bScreen;
 struct CacheFile;
+struct LayerCollection;
 struct ListBase;
 struct Main;
 struct Object;
@@ -243,6 +244,7 @@ int ctx_data_list_count(const bContext *C, int (*func)(const bContext *, ListBas
 
 struct Main *CTX_data_main(const bContext *C);
 struct Scene *CTX_data_scene(const bContext *C);
+struct LayerCollection *CTX_data_layer_collection(const bContext *C);
 struct SceneCollection *CTX_data_scene_collection(const bContext *C);
 struct SceneLayer *CTX_data_scene_layer(const bContext *C);
 struct ToolSettings *CTX_data_tool_settings(const bContext *C);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 85fa57f788..f079ec8f7b 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -928,20 +928,39 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
  * If the scene_collection is linked to the SceneLayer we use it.
  * Otherwise we fallback to the active one of the SceneLayer.
  */
-SceneCollection *CTX_data_scene_collection(const bContext *C)
+LayerCollection *CTX_data_layer_collection(const bContext *C)
 {
 	SceneLayer *sl = CTX_data_scene_layer(C);
-	SceneCollection *sc;
+	LayerCollection *lc;
+
+	if (ctx_data_pointer_verify(C, "layer_collection", (void *)&lc)) {
+		if (BKE_scene_layer_has_collection(sl, lc->scene_collection)) {
+			return lc;
+		}
+	}
+
+	/* fallback */
+	return BKE_layer_collection_active(sl);
+}
 
+SceneCollection *CTX_data_scene_collection(const bContext *C)
+{
+	SceneCollection *sc;
 	if (ctx_data_pointer_verify(C, "scene_collection", (void *)&sc)) {
-		if (BKE_scene_layer_has_collection(sl, sc)) {
+		if (BKE_scene_layer_has_collection(CTX_data_scene_layer(C), sc)) {
 			return sc;
 		}
 	}
+	else {
+		LayerCollection *lc = CTX_data_layer_collection(C);
+		if (lc) {
+			return lc->scene_collection;
+		}
+	}
 
 	/* fallback */
-	LayerCollection *lc = BKE_layer_collection_active(sl);
-	return lc->scene_collection;
+	Scene *scene = CTX_data_scene(C);
+	return BKE_collection_master(scene);
 }
 
 int CTX_data_mode_enum(const bContext *C)
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 48e20e7252..c07287abd1 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -317,6 +317,7 @@ extern StructRNA RNA_LaplacianSmoothModifier;
 extern StructRNA RNA_Lattice;
 extern StructRNA RNA_LatticeModifier;
 extern StructRNA RNA_LatticePoint;
+extern StructRNA RNA_LayerCollection;
 extern StructRNA RNA_Library;
 extern StructRNA RNA_LimitDistanceConstraint;
 extern StructRNA RNA_LimitLocationConstraint;
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index 9270cda0d2..27e88f592a 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -120,6 +120,13 @@ static PointerRNA rna_Context_scene_collection_get(PointerRNA *ptr)
 	return rna_pointer_inherit_refine(ptr, &RNA_SceneCollection, CTX_data_scene_collection(C));
 }
 
+static PointerRNA rna_Context_layer_collection_get(PointerRNA *ptr)
+{
+	bContext *C = (bContext *)ptr->data;
+	ptr->id.data = CTX_data_scene(C);
+	return rna_pointer_inherit_refine(ptr, &RNA_LayerCollection, CTX_data_layer_collection(C));
+}
+
 static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
 {
 	bContext *C = (bContext *)ptr->data;
@@ -226,6 +233,11 @@ void RNA_def_context(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "SceneCollection");
 	RNA_def_property_pointer_funcs(prop, "rna_Context_scene_collection_get", NULL, NULL, NULL);
 
+	prop = RNA_def_property(srna, "layer_collection", PROP_POINTER, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_struct_type(prop, "LayerCollection");
+	RNA_def_property_pointer_funcs(prop, "rna_Context_layer_collection_get", NULL, NULL, NULL);
+
 	prop = RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_struct_type(prop, "ToolSettings");




More information about the Bf-blender-cvs mailing list