[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48537] trunk/blender/source/blender: dont display image sequences outside the frame range in the 3D viewport.

Campbell Barton ideasman42 at gmail.com
Tue Jul 3 16:04:40 CEST 2012


Revision: 48537
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48537
Author:   campbellbarton
Date:     2012-07-03 14:04:39 +0000 (Tue, 03 Jul 2012)
Log Message:
-----------
dont display image sequences outside the frame range in the 3D viewport.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/space_image/image_buttons.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/makesdna/DNA_image_types.h

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2012-07-03 14:04:39 UTC (rev 48537)
@@ -157,7 +157,7 @@
 /* called on frame change or before render */
 void BKE_image_user_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
 void BKE_image_user_check_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
-int  BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, int fieldnr);
+int  BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, int fieldnr, short *r_is_in_range);
 void BKE_image_user_file_path(struct ImageUser *iuser, struct Image *ima, char *path); 
 
 /* sets index offset for multilayer files */

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2012-07-03 14:04:39 UTC (rev 48537)
@@ -2784,10 +2784,14 @@
 	return BKE_image_acquire_ibuf(ima, iuser, NULL);
 }
 
-int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr)
+int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr, short *r_is_in_range)
 {
 	const int len = (iuser->fie_ima * iuser->frames) / 2;
 
+	if (r_is_in_range) {
+		*r_is_in_range = FALSE;
+	}
+
 	if (len == 0) {
 		return 0;
 	}
@@ -2800,10 +2804,23 @@
 			cfra = ((cfra) % len);
 			if (cfra < 0) cfra += len;
 			if (cfra == 0) cfra = len;
+
+			if (r_is_in_range) {
+				*r_is_in_range = TRUE;
+			}
 		}
 
-		if (cfra < 0) cfra = 0;
-		else if (cfra > len) cfra = len;
+		if (cfra < 0) {
+			cfra = 0;
+		}
+		else if (cfra > len) {
+			cfra = len;
+		}
+		else {
+			if (r_is_in_range) {
+				*r_is_in_range = TRUE;
+			}
+		}
 
 		/* convert current frame to current field */
 		cfra = 2 * (cfra);
@@ -2827,8 +2844,16 @@
 void BKE_image_user_frame_calc(ImageUser *iuser, int cfra, int fieldnr)
 {
 	if (iuser) {
-		const int framenr = BKE_image_user_frame_get(iuser, cfra, fieldnr);
+		short is_in_range;
+		const int framenr = BKE_image_user_frame_get(iuser, cfra, fieldnr, &is_in_range);
 
+		if (is_in_range) {
+			iuser->flag |= IMA_USER_FRAME_IN_RANGE;
+		}
+		else {
+			iuser->flag &= ~IMA_USER_FRAME_IN_RANGE;
+		}
+
 		/* allows image users to handle redraws */
 		if (iuser->flag & IMA_ANIM_ALWAYS)
 			if (framenr != iuser->framenr)

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-07-03 14:04:39 UTC (rev 48537)
@@ -2892,11 +2892,9 @@
 static int mesh_separate_loose(Main *bmain, Scene *scene, Base *editbase, wmOperator *wmop)
 {
 	int i;
-	BMVert *v;
 	BMEdge *e;
 	BMVert *v_seed;
 	BMWalker walker;
-	BMIter iter;
 	int result = FALSE;
 	Object *obedit = editbase->object;
 	BMEditMesh *em = BMEdit_FromObject(obedit);
@@ -2913,11 +2911,7 @@
 	 * original mesh.*/
 	for (i = 0; i < max_iter; i++) {
 		/* Get a seed vertex to start the walk */
-		v_seed = NULL;
-		BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
-			v_seed = v;
-			break;
-		}
+		v_seed = BM_iter_at_index(bm, BM_VERTS_OF_MESH, NULL, 0);
 
 		/* No vertices available, can't do anything */
 		if (v_seed == NULL) {

Modified: trunk/blender/source/blender/editors/space_image/image_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_buttons.c	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/editors/space_image/image_buttons.c	2012-07-03 14:04:39 UTC (rev 48537)
@@ -148,7 +148,7 @@
 	/* the frame number, even if we cant */
 	if (ima->source == IMA_SRC_SEQUENCE) {
 		/* don't use iuser->framenr directly because it may not be updated if auto-refresh is off */
-		const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0);
+		const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0, NULL);
 		ofs += sprintf(str + ofs, IFACE_(", Frame: %d"), framenr);
 	}
 

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2012-07-03 14:04:39 UTC (rev 48537)
@@ -1213,7 +1213,7 @@
 		Scene *scene = CTX_data_scene(C);
 		ImageUser *iuser = iuserptr->data;
 		char numstr[32];
-		const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0);
+		const int framenr = BKE_image_user_frame_get(iuser, CFRA, 0, NULL);
 		BLI_snprintf(numstr, sizeof(numstr), IFACE_("Frame: %d"), framenr);
 		uiItemL(layout, numstr, ICON_NONE);
 	}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-07-03 14:04:39 UTC (rev 48537)
@@ -1561,7 +1561,12 @@
 				if (ima == NULL)
 					continue;
 				BKE_image_user_frame_calc(&bgpic->iuser, CFRA, 0);
-				ibuf = BKE_image_get_ibuf(ima, &bgpic->iuser);
+				if (ima->source == IMA_SRC_SEQUENCE && !(bgpic->iuser.flag & IMA_USER_FRAME_IN_RANGE)) {
+					ibuf = NULL; /* frame is out of range, dont show */
+				}
+				else {
+					ibuf = BKE_image_get_ibuf(ima, &bgpic->iuser);
+				}
 
 				image_aspect[0] = ima->aspx;
 				image_aspect[1] = ima->aspx;

Modified: trunk/blender/source/blender/makesdna/DNA_image_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_image_types.h	2012-07-03 13:47:13 UTC (rev 48536)
+++ trunk/blender/source/blender/makesdna/DNA_image_types.h	2012-07-03 14:04:39 UTC (rev 48537)
@@ -122,6 +122,7 @@
 #define IMA_OLD_PREMUL		128
 #define IMA_CM_PREDIVIDE	256
 #define IMA_USED_FOR_RENDER	512
+#define IMA_USER_FRAME_IN_RANGE	1024 /* for image user, but these flags are mixed */
 
 /* Image.tpageflag */
 #define IMA_TILES			1




More information about the Bf-blender-cvs mailing list