[Bf-blender-cvs] [ea9d1a06aa3] temp-udim-images: Don't add image tiles for which no file was found

Lukas Stockner noreply at git.blender.org
Fri Jun 15 21:23:31 CEST 2018


Commit: ea9d1a06aa3a05f584bafa857d3ec12f95319cbf
Author: Lukas Stockner
Date:   Fri Jun 15 21:23:07 2018 +0200
Branches: temp-udim-images
https://developer.blender.org/rBea9d1a06aa3a05f584bafa857d3ec12f95319cbf

Don't add image tiles for which no file was found

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

M	source/blender/editors/space_image/image_ops.c

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

diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 5a7d778a44e..43e2a7132b6 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -47,6 +47,7 @@
 #include "BLI_string_utf8.h"
 #include "BLI_fileops.h"
 #include "BLI_fileops_types.h"
+#include "BLI_linklist.h"
 
 #include "BLT_translation.h"
 
@@ -1153,7 +1154,7 @@ static int image_cmp_frame(const void *a, const void *b)
 	return 0;
 }
 
-static int image_get_udim(const char *filepath)
+static int image_get_udim(const char *filepath, LinkNodePair *udim_tiles)
 {
 	if (strstr(filepath, "1001") == NULL) {
 		return 0;
@@ -1188,6 +1189,8 @@ static int image_get_udim(const char *filepath)
 				is_udim = false;
 				break;
 			}
+
+			BLI_linklist_append(udim_tiles, SET_INT_IN_POINTER(id - 1001));
 			max_udim = max_ii(max_udim, id);
 		}
 
@@ -1204,7 +1207,7 @@ static int image_get_udim(const char *filepath)
  * \param ofs: [out] offset the first frame number in the sequence.
  * \return the number of contiguous frames in the sequence
  */
-static int image_sequence_get_len(ImageFrameRange *frame_range, int *ofs, bool do_udim)
+static int image_sequence_get_len(ImageFrameRange *frame_range, int *ofs, LinkNodePair *udim_tiles)
 {
 	ImageFrame *frame;
 
@@ -1215,8 +1218,8 @@ static int image_sequence_get_len(ImageFrameRange *frame_range, int *ofs, bool d
 		int frame_curr = frame->framenr;
 		(*ofs) = frame_curr;
 
-		if (do_udim && (frame_curr == 1001)) {
-			return 1 + image_get_udim(frame_range->filepath);
+		if (udim_tiles && (frame_curr == 1001)) {
+			return 1 + image_get_udim(frame_range->filepath, udim_tiles);
 		}
 		else {
 			while (frame && (frame->framenr == frame_curr)) {
@@ -1232,7 +1235,8 @@ static int image_sequence_get_len(ImageFrameRange *frame_range, int *ofs, bool d
 
 static Image *image_open_single(
         Main *bmain, wmOperator *op, const char *filepath, const char *relbase,
-        bool is_relative_path, bool use_multiview, int frame_seq_len, int frame_seq_ofs)
+        bool is_relative_path, bool use_multiview, int frame_seq_len,
+        int frame_seq_ofs, LinkNodePair *udim_tiles)
 {
 	bool exists = false;
 	Image *ima = NULL;
@@ -1268,10 +1272,10 @@ static Image *image_open_single(
 		}
 
 		if ((frame_seq_len > 1) && (ima->source == IMA_SRC_FILE)) {
-			if (frame_seq_ofs == 1001) {
+			if (udim_tiles && frame_seq_ofs == 1001) {
 				ima->source = IMA_SRC_TILED;
-				for (int i = 1; i < frame_seq_len; i++) {
-					BKE_image_add_tile(ima, i, NULL);
+				for (LinkNode *node = udim_tiles->list; node; node = node->next) {
+					BKE_image_add_tile(ima, GET_INT_FROM_POINTER(node->link), NULL);
 				}
 			}
 			else {
@@ -1317,7 +1321,9 @@ static int image_open_exec(bContext *C, wmOperator *op)
 		image_sequence_get_frame_ranges(op->ptr, &frame_ranges_all);
 		for (ImageFrameRange *frame_range = frame_ranges_all.first; frame_range; frame_range = frame_range->next) {
 			int frame_range_ofs;
-			int frame_range_seq_len = image_sequence_get_len(frame_range, &frame_range_ofs, use_udim);
+			LinkNodePair udim_tiles = {NULL};
+			int frame_range_seq_len = image_sequence_get_len(frame_range, &frame_range_ofs,
+			                                                 use_udim? &udim_tiles : NULL);
 			BLI_freelistN(&frame_range->frames);
 
 			char filepath_range[FILE_MAX];
@@ -1329,7 +1335,10 @@ static int image_open_exec(bContext *C, wmOperator *op)
 
 			Image *ima_range = image_open_single(
 			         bmain, op, filepath_range, BKE_main_blendfile_path(bmain),
-			         is_relative_path, use_multiview, frame_range_seq_len, frame_range_ofs);
+			         is_relative_path, use_multiview, frame_range_seq_len, frame_range_ofs,
+			         use_udim? &udim_tiles : NULL);
+
+			BLI_linklist_free(udim_tiles.list, NULL);
 
 			/* take the first image */
 			if ((ima == NULL) && ima_range) {
@@ -1342,13 +1351,16 @@ static int image_open_exec(bContext *C, wmOperator *op)
 	}
 	else {
 		int sequence_len = 1;
+		LinkNodePair udim_tiles = {NULL};
 		if (use_udim) {
-			sequence_len = image_get_udim(filepath);
+			sequence_len = image_get_udim(filepath, &udim_tiles);
 		}
 		/* for drag & drop etc. */
 		ima = image_open_single(
 		        bmain, op, filepath, BKE_main_blendfile_path(bmain),
-		        is_relative_path, use_multiview, 1, sequence_len);
+		        is_relative_path, use_multiview, 1, sequence_len, &udim_tiles);
+
+		BLI_linklist_free(udim_tiles.list, NULL);
 	}
 
 	if (ima == NULL) {



More information about the Bf-blender-cvs mailing list