[Bf-blender-cvs] [d6dcae3] multiview: From review: Add Use Multi-View UI option

Dalai Felinto noreply at git.blender.org
Wed Feb 25 20:48:24 CET 2015


Commit: d6dcae331e52b78e4392433c85c77b8e123a5d77
Author: Dalai Felinto
Date:   Tue Feb 24 02:57:04 2015 -0300
Branches: multiview
https://developer.blender.org/rBd6dcae331e52b78e4392433c85c77b8e123a5d77

>From review: Add Use Multi-View UI option

New flag to determine if the image is or not a potential multiview
The flag is to be used in the UI while IMA_IS_MULTIIEW and IMA_IS_STEREO
are used internally when the image actually is a Multi-View image.

It is working now for Image Editor, Compositor, and even Image textures
(though the latter may be misleading since the rendering always take the
1st ibuf when it comes to textures - not that we can't shouldn't
implement that later).

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

M	release/scripts/startup/bl_ui/space_image.py
M	source/blender/blenkernel/intern/image.c
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/editors/space_image/image_ops.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/editors/space_sequencer/sequencer_add.c
M	source/blender/makesdna/DNA_image_types.h
M	source/blender/makesrna/intern/rna_image.c
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index d09bd9b..0af8b79 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -679,36 +679,6 @@ class IMAGE_PT_view_properties(Panel):
             layout.prop(render_slot, "name", text="Slot Name")
 
 
-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
-        if sima:
-            image = sima.image
-            return (image and image.type == 'IMAGE' and
-                    context.scene.render.use_multiview)
-        return False
-
-    def draw(self, context):
-        layout = self.layout
-
-        sima = context.space_data
-        ima = sima.image
-
-        col = layout
-        col.label(text="Views Format:")
-        col.row().prop(ima, "views_format", expand=True)
-
-        box = col.box()
-        box.active = ima.views_format == 'STEREO_3D'
-        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/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 218084f..01fda3b 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -102,7 +102,7 @@ static SpinLock image_spin;
 /* prototypes */
 static size_t image_num_files(struct Image *ima);
 static ImBuf *image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r);
-static void image_update_views_format(Scene *scene, Image *ima);
+static void image_update_views_format(Image *ima, ImageUser *iuser);
 static void image_add_view(Image *ima, const char *viewname, const char *filepath);
 
 /* max int, to indicate we don't store sequences in ibuf */
@@ -2501,7 +2501,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
 			if (iuser) {
 				iuser->ok = 1;
 				if (iuser->scene) {
-					image_update_views_format(iuser->scene, ima);
+					image_update_views_format(ima, iuser);
 				}
 			}
 			break;
@@ -2587,7 +2587,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
 			if (iuser) {
 				iuser->ok = 1;
 				if (iuser->scene) {
-					image_update_views_format(iuser->scene, ima);
+					image_update_views_format(ima, iuser);
 				}
 			}
 
@@ -4441,11 +4441,13 @@ ImBuf *BKE_image_get_first_ibuf(Image *image)
 	return ibuf;
 }
 
-static void image_update_views_format(Scene *scene, Image *ima)
+static void image_update_views_format(Image *ima, ImageUser *iuser)
 {
 	SceneRenderView *srv;
 	ImageView *iv;
-	const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
+	Scene *scene = iuser->scene;
+	const bool is_multiview = ((scene->r.scemode & R_MULTIVIEW) != 0) &&
+	                          ((ima->flag & IMA_USE_VIEWS) != 0);
 
 	/* reset the image views */
 	BKE_image_free_views(ima);
@@ -4519,8 +4521,5 @@ monoview:
 			ima->flag &= ~IMA_IS_MULTIVIEW;
 			BKE_image_free_views(ima);
 		}
-
-		/* monoview and multiview rely on individual images */
-		ima->views_format = R_IMF_VIEWS_INDIVIDUAL;
 	}
 }
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index a12145e..e601e16 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -897,7 +897,8 @@ void uiTemplateGameStates(uiLayout *layout, struct PointerRNA *ptr, const char *
 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 uiTemplateImageViews(uiLayout *layout, struct PointerRNA *imaptr);
+void uiTemplateImageFormatViews(uiLayout *layout, PointerRNA *imfptr, PointerRNA *ptr);
 void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser);
 void uiTemplateImageInfo(uiLayout *layout, struct bContext *C, Image *ima, 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 67fb5c3..a842406 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -904,6 +904,17 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char
 						uiItemR(row, &imaptr, "alpha_mode", 0, IFACE_("Alpha"), ICON_NONE);
 					}
 
+					if ((scene->r.scemode & R_MULTIVIEW) != 0) {
+						uiItemS(layout);
+
+						col = uiLayoutColumn(layout, false);
+						uiItemR(col, &imaptr, "use_multiview", 0, NULL, ICON_NONE);
+
+						col = uiLayoutColumn(layout, false);
+						uiLayoutSetActive(col, RNA_boolean_get(&imaptr, "use_multiview"));
+						uiTemplateImageViews(col, &imaptr);
+					}
+
 					if (ima->source == IMA_SRC_MOVIE) {
 						col = uiLayoutColumn(layout, false);
 						uiItemR(col, &imaptr, "use_deinterlace", 0, IFACE_("Deinterlace"), ICON_NONE);
@@ -1107,26 +1118,65 @@ void uiTemplateImageStereo3d(uiLayout *layout, PointerRNA *stereo3d_format_ptr)
 	}
 }
 
-void uiTemplateImageViews(uiLayout *layout, PointerRNA *imfptr)
+static void uiTemplateViewsFormat(uiLayout *layout, PointerRNA *ptr, PointerRNA *stereo3d_format_ptr)
 {
-	ImageFormatData *imf = imfptr->data;
-	PropertyRNA *prop;
-	PointerRNA stereo3d_format_ptr;
-
 	uiLayout *col, *box;
 
 	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);
+	uiItemR(uiLayoutRow(col, false), ptr, "views_format", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
+
+	if (stereo3d_format_ptr) {
+		box = uiLayoutBox(col);
+		uiLayoutSetActive(box, RNA_enum_get(ptr, "views_format") == R_IMF_VIEWS_STEREO_3D);
+		uiTemplateImageStereo3d(box, stereo3d_format_ptr);
+	}
+}
+
+void uiTemplateImageViews(uiLayout *layout, PointerRNA *imaptr)
+{
+	Image *ima = imaptr->data;
+
+	if (ima->type != IMA_TYPE_MULTILAYER) {
+		PropertyRNA *prop;
+		PointerRNA stereo3d_format_ptr;
+
+		prop = RNA_struct_find_property(imaptr, "stereo_3d_format");
+		stereo3d_format_ptr = RNA_property_pointer_get(imaptr, prop);
+
+		uiTemplateViewsFormat(layout, imaptr, &stereo3d_format_ptr);
+	}
+	else {
+		uiTemplateViewsFormat(layout, imaptr, NULL);
+	}
+}
 
-	prop = RNA_struct_find_property(imfptr, "stereo_3d_format");
-	stereo3d_format_ptr = RNA_property_pointer_get(imfptr, prop);
+void uiTemplateImageFormatViews(uiLayout *layout, PointerRNA *imfptr, PointerRNA *ptr)
+{
+	ImageFormatData *imf = imfptr->data;
+	uiLayout *col;
+
+	if (ptr){
+		uiItemR(layout, ptr, "use_multiview", 0, NULL, ICON_NONE);
+		col = uiLayoutColumn(layout, false);
+		uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_multiview"));
+	}
+	else {
+		col = uiLayoutColumn(layout, false);
+	}
 
 	if (imf->imtype != R_IMF_IMTYPE_MULTILAYER) {
-		box = uiLayoutBox(col);
-		uiLayoutSetActive(box, imf->views_format == R_IMF_VIEWS_STEREO_3D);
-		uiTemplateImageStereo3d(box, &stereo3d_format_ptr);
+		PropertyRNA *prop;
+		PointerRNA stereo3d_format_ptr;
+
+		prop = RNA_struct_find_property(imfptr, "stereo_3d_format");
+		stereo3d_format_ptr = RNA_property_pointer_get(imfptr, prop);
+
+		uiTemplateViewsFormat(col, imfptr, &stereo3d_format_ptr);
+	}
+	else {
+		uiTemplateViewsFormat(col, imfptr, NULL);
 	}
 }
 
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index c062b6c..f5f11fd 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1098,16 +1098,15 @@ static int image_open_exec(bContext *C, wmOperator *op)
 	if (RNA_boolean_get(op->ptr, "use_multiview")) {
 		ImageFormatData *imf = &iod->im_format;
 
+		ima->flag |= IMA_USE_VIEWS;
 		ima->views_format = imf->views_format;
 		*ima->stereo3d_format = imf->stereo3d_format;
 	}
 	else {
+		ima->flag &= ~IMA_USE_VIEWS;
 		ima->flag &= ~IMA_IS_STEREO;
 		ima->flag &= ~IMA_IS_MULTIVIEW;
 		BKE_image_free_views(ima);
-
-		/* monoview and multiview rely on individual images */
-		ima->views_format = R_IMF_VIEWS_INDIVIDUAL;
 	}
 
 	/* only image path after save, never ibuf */
@@ -1214,7 +1213,7 @@ static int image_open_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
 	image_open_init(C, op);
 
 	/* show multiview save options only if scene has multiviews */
-	prop = RNA_struct_find_property(op->ptr, "use_multiview");
+	prop = RNA_struct_find_property(op->ptr, "show_multiview");
 	RNA_property_boolean_set(op->ptr, prop, (scene->r.scemode & R_MULTIVIEW) != 0);
 
 	image_filesel(C, op, path);
@@ -1238,7 +1237,6 @@ static void image_open_draw(bContext *UNUSED(C), wmOperator *op)
 	ImageOpenData *iod = op->customdata;
 	ImageFormatData *imf = &iod->im_format;
 	PointerRNA imf_ptr, ptr;
-	const bool is_multiview = RNA_boolean_get(op->ptr, "use_multiview");
 
 	/* main draw call */
 	RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr);
@@ -1248,8 +1246,8 @@ static void image_open_draw(bContext *UNUSED(C), wmOperator *op)
 	RNA_pointer_create(NULL, &RNA_ImageFormatSettings, imf, &imf_ptr);
 
 	/* multiview template */
-	if (is_multiview)
-		uiTemplateImageViews(layout, &imf_ptr);
+	if (RNA_boolean_get(op->ptr, "show_multiview"))
+		uiTemplateImageFormatViews(layout, &imf_ptr, op->ptr);
 }
 
 /* called by other space types too */
@@ -1943,6 +1941,8 @@ static int image_save_as_invoke(bContext *C, wmOperator *op, const wmEvent *UNUS
 	memcpy(op->customdata, &simopts.im_format, sizeof(simopts.im_format));
 
 	/* show multiview save options only if image has multiviews */
+	prop = RNA_struct_find_property(op->ptr, "show_multiview");
+	RNA_property_boolean_set(op->ptr, prop,

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list