Skip to content

Commit

Permalink
UDIM: Fix tile number calculation when adding a range of image tiles
Browse files Browse the repository at this point in the history
When adding a range of tiles, the operator could incorrectly calculate
the end_tile. It would not account for the start_tile itself and the
IMA_UDIM_MAX value was 1 too small. This is most noticeable when
attempting to fill the entire supported range of tiles.

Differential Revision: https://developer.blender.org/D11857
  • Loading branch information
jessey-git committed Aug 17, 2021
1 parent 4dba206 commit eaa1527
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 3 deletions.
2 changes: 1 addition & 1 deletion source/blender/blenkernel/BKE_image.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ struct StampData;
struct anim;

#define IMA_MAX_SPACE 64
#define IMA_UDIM_MAX 1999
#define IMA_UDIM_MAX 2000

void BKE_images_init(void);
void BKE_images_exit(void);
Expand Down
5 changes: 3 additions & 2 deletions source/blender/editors/space_image/image_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -3922,7 +3922,7 @@ static int tile_add_exec(bContext *C, wmOperator *op)
Image *ima = CTX_data_edit_image(C);

int start_tile = RNA_int_get(op->ptr, "number");
int end_tile = start_tile + RNA_int_get(op->ptr, "count");
int end_tile = start_tile + RNA_int_get(op->ptr, "count") - 1;

if (start_tile < 1001 || end_tile > IMA_UDIM_MAX) {
BKE_report(op->reports, RPT_ERROR, "Invalid UDIM index range was specified");
Expand All @@ -3933,7 +3933,7 @@ static int tile_add_exec(bContext *C, wmOperator *op)
char *label = RNA_string_get_alloc(op->ptr, "label", NULL, 0);

bool created_tile = false;
for (int tile_number = start_tile; tile_number < end_tile; tile_number++) {
for (int tile_number = start_tile; tile_number <= end_tile; tile_number++) {
ImageTile *tile = BKE_image_add_tile(ima, tile_number, label);

if (tile != NULL) {
Expand All @@ -3949,6 +3949,7 @@ static int tile_add_exec(bContext *C, wmOperator *op)
MEM_freeN(label);

if (!created_tile) {
BKE_report(op->reports, RPT_WARNING, "No UDIM tiles were created");
return OPERATOR_CANCELLED;
}

Expand Down

0 comments on commit eaa1527

Please sign in to comment.