[Bf-blender-cvs] [2d1218a] multiview: Expose Image Stereo 3d format in the Properties Panel

Dalai Felinto noreply at git.blender.org
Thu Sep 11 01:05:41 CEST 2014


Commit: 2d1218a76e74e055d1de28da7a20113170aefaf8
Author: Dalai Felinto
Date:   Thu Sep 11 01:04:42 2014 +0200
Branches: multiview
https://developer.blender.org/rB2d1218a76e74e055d1de28da7a20113170aefaf8

Expose Image Stereo 3d format in the Properties Panel

This allow the users to change the stereo type after loading the image (in case the wrong encoding was wrongly pick)

Note: we do not let the user change between stereo and views after loading

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

M	release/scripts/startup/bl_ui/space_image.py
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/makesrna/intern/rna_image.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_ui_api.c

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

diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 7f2e317..47dca2f 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -665,6 +665,28 @@ class IMAGE_PT_view_properties(Panel):
             sub.row().prop(uvedit, "draw_stretch_type", expand=True)
 
 
+class IMAGE_PT_stereo_3d_properties(Panel):
+    bl_space_type = 'IMAGE_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Stereoscopy"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    @classmethod
+    def poll(cls, context):
+        sima = context.space_data
+        image = sima.image if sima else None
+        return (sima and image and image.type == 'IMAGE' and image.is_multiview and image.views_format == 'STEREO_3D')
+
+    def draw(self, context):
+        layout = self.layout
+
+        sima = context.space_data
+        ima = sima.image
+
+        box = layout.box()
+        box.template_image_stereo_3d(ima.stereo_3d_format)
+
+
 class IMAGE_PT_tools_transform_uvs(Panel, UVToolsPanel):
     bl_label = "Transform"
 
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 9952dfa..7994906 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -876,6 +876,7 @@ void uiTemplateGameStates(uiLayout *layout, struct PointerRNA *ptr, const char *
                       PointerRNA *used_ptr, const char *used_propname, int active_state);
 void uiTemplateImage(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, struct PointerRNA *userptr, int compact);
 void uiTemplateImageSettings(uiLayout *layout, struct PointerRNA *imfptr, int color_management);
+void uiTemplateImageStereo3d(uiLayout *layout, struct PointerRNA *stereo3d_format_ptr);
 void uiTemplateImageViews(uiLayout *layout, struct PointerRNA *imfptr);
 void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser);
 void uiTemplateRunningJobs(uiLayout *layout, struct bContext *C);
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 9094c61..676c3d7 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -1027,58 +1027,64 @@ void uiTemplateImageSettings(uiLayout *layout, PointerRNA *imfptr, int color_man
 	}
 }
 
-void uiTemplateImageViews(uiLayout *layout, PointerRNA *imfptr)
+void uiTemplateImageStereo3d(uiLayout *layout, PointerRNA *stereo3d_format_ptr)
 {
-	ImageFormatData *imf = imfptr->data;
-	PropertyRNA *prop;
-	PointerRNA stereo3d_format_ptr;
-	Stereo3dFormat *stereo3d_format = &imf->stereo3d_format;
-
-	uiLayout *col, *box;
-
-	/* OpenEXR multiview is only to save multiview exr */
-	if (imf->imtype == R_IMF_IMTYPE_MULTIVIEW)
-		return;
+	Stereo3dFormat *stereo3d_format = stereo3d_format_ptr->data;
+	uiLayout *col;
 
 	col = uiLayoutColumn(layout, false);
-
-	uiItemL(col, IFACE_("Views Format:"), ICON_NONE);
-	uiItemR(uiLayoutRow(col, false), imfptr, "views_format", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
-
-	prop = RNA_struct_find_property(imfptr, "stereo_3d_format");
-	stereo3d_format_ptr = RNA_property_pointer_get(imfptr, prop);
-
-	box = uiLayoutBox(col);
-	uiLayoutSetActive(box, imf->views_format == R_IMF_VIEWS_STEREO_3D);
-	col = uiLayoutColumn(box, false);
-
-	uiItemR(col, &stereo3d_format_ptr, "display_mode", 0, NULL, ICON_NONE);
+	uiItemR(col, stereo3d_format_ptr, "display_mode", 0, NULL, ICON_NONE);
 
 	switch (stereo3d_format->display_mode) {
 		case S3D_DISPLAY_ANAGLYPH:
 		{
-			uiItemR(col, &stereo3d_format_ptr, "anaglyph_type", 0, NULL, ICON_NONE);
+			uiItemR(col, stereo3d_format_ptr, "anaglyph_type", 0, NULL, ICON_NONE);
 			break;
 		}
 		case S3D_DISPLAY_INTERLACE:
 		{
-			uiItemR(col, &stereo3d_format_ptr, "interlace_type", 0, NULL, ICON_NONE);
-			uiItemR(col, &stereo3d_format_ptr, "use_interlace_swap", 0, NULL, ICON_NONE);
+			uiItemR(col, stereo3d_format_ptr, "interlace_type", 0, NULL, ICON_NONE);
+			uiItemR(col, stereo3d_format_ptr, "use_interlace_swap", 0, NULL, ICON_NONE);
 			break;
 		}
 		case S3D_DISPLAY_SIDEBYSIDE:
 		{
-			uiItemR(col, &stereo3d_format_ptr, "use_sidebyside_crosseyed", 0, NULL, ICON_NONE);
+			uiItemR(col, stereo3d_format_ptr, "use_sidebyside_crosseyed", 0, NULL, ICON_NONE);
 			/* fall-through */
 		}
 		case S3D_DISPLAY_TOPBOTTOM:
 		{
-			uiItemR(col, &stereo3d_format_ptr, "use_squeezed_frame", 0, NULL, ICON_NONE);
+			uiItemR(col, stereo3d_format_ptr, "use_squeezed_frame", 0, NULL, ICON_NONE);
 			break;
 		}
 	}
 }
 
+void uiTemplateImageViews(uiLayout *layout, PointerRNA *imfptr)
+{
+	ImageFormatData *imf = imfptr->data;
+	PropertyRNA *prop;
+	PointerRNA stereo3d_format_ptr;
+
+	uiLayout *col, *box;
+
+	/* OpenEXR multiview is only to save multiview exr */
+	if (imf->imtype == R_IMF_IMTYPE_MULTIVIEW)
+		return;
+
+	col = uiLayoutColumn(layout, false);
+
+	uiItemL(col, IFACE_("Views Format:"), ICON_NONE);
+	uiItemR(uiLayoutRow(col, false), imfptr, "views_format", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
+
+	prop = RNA_struct_find_property(imfptr, "stereo_3d_format");
+	stereo3d_format_ptr = RNA_property_pointer_get(imfptr, prop);
+
+	box = uiLayoutBox(col);
+	uiLayoutSetActive(box, imf->views_format == R_IMF_VIEWS_STEREO_3D);
+	uiTemplateImageStereo3d(box, &stereo3d_format_ptr);
+}
+
 void uiTemplateImageLayers(uiLayout *layout, bContext *C, Image *ima, ImageUser *iuser)
 {
 	Scene *scene = CTX_data_scene(C);
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index cda7047..821adeb 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -564,6 +564,11 @@ static void rna_def_image(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Stereo 3D", "Image has left and right views");
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
+	prop = RNA_def_property(srna, "is_multiview", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_IS_MULTIVIEW);
+	RNA_def_property_ui_text(prop, "Multiple Views", "Image has more than one view");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
 	prop = RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -740,7 +745,7 @@ static void rna_def_image(BlenderRNA *brna)
 	RNA_def_property_enum_sdna(prop, NULL, "views_format");
 	RNA_def_property_enum_items(prop, views_format_items);
 	RNA_def_property_ui_text(prop, "Views Format", "Mode to save scene views");
-	RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
 	prop = RNA_def_property(srna, "stereo_3d_format", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "stereo3d_format");
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 2eea27d..cbd8975 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -36,6 +36,8 @@
 #include "DNA_userdef_types.h"
 #include "DNA_world_types.h"
 
+#include "IMB_imbuf_types.h"
+
 #include "BLI_math.h"
 
 #include "BLF_translation.h"
@@ -1825,6 +1827,27 @@ static void rna_FreestyleSettings_module_remove(ID *id, FreestyleSettings *confi
 	WM_main_add_notifier(NC_SCENE | ND_RENDER_OPTIONS, NULL);
 }
 
+static void rna_Stereo3dFormat_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+	ID *id = ptr->id.data;
+
+	if (GS(id->name) == ID_IM) {
+		Image *ima = (Image *)id;
+		ImBuf *ibuf;
+		void *lock;
+
+		if ((ima->flag & IMA_IS_STEREO) == 0)
+			return;
+
+		ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+		if (ibuf) {
+			BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
+		}
+		BKE_image_release_ibuf(ima, ibuf, lock);
+	}
+}
+
 #else
 
 static void rna_def_transform_orientation(BlenderRNA *brna)
@@ -4104,26 +4127,32 @@ static void rna_def_image_format_stereo3d_format(BlenderRNA *brna)
 	RNA_def_property_enum_sdna(prop, NULL, "display_mode");
 	RNA_def_property_enum_items(prop, stereo3d_display_items);
 	RNA_def_property_ui_text(prop, "Stereo Mode", "");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 
 	prop = RNA_def_property(srna, "anaglyph_type", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_items(prop, stereo3d_anaglyph_type_items);
 	RNA_def_property_ui_text(prop, "Anaglyph Type", "");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 
 	prop = RNA_def_property(srna, "interlace_type", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_items(prop, stereo3d_interlace_type_items);
 	RNA_def_property_ui_text(prop, "Interlace Type", "");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 
 	prop = RNA_def_property(srna, "use_interlace_swap", PROP_BOOLEAN, PROP_BOOLEAN);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", S3D_INTERLACE_SWAP);
 	RNA_def_property_ui_text(prop, "Swap Left/Right", "Swap left and right stereo channels");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 
 	prop = RNA_def_property(srna, "use_sidebyside_crosseyed", PROP_BOOLEAN, PROP_BOOLEAN);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", S3D_SIDEBYSIDE_CROSSEYED);
 	RNA_def_property_ui_text(prop, "Cross-Eyed", "Right eye should see left image and vice-versa");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 
 	prop = RNA_def_property(srna, "use_squeezed_frame", PROP_BOOLEAN, PROP_BOOLEAN);
 	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", S3D_UNSQUEEZED_FRAME);
 	RNA_def_property_ui_text(prop, "Squeezed Frame", "Combine both views in a squeezed image");
+	RNA_def_property_update(prop, NC_IMAGE | ND_DISPLAY, "rna_Stereo3dFormat_update");
 }
 
 /* use for render output and image save operator,
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index ff

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list