From 1e255ce0319d6cf45b6951a2a87590d2ca236e9f Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 3 Jul 2020 15:27:02 +0200 Subject: [PATCH] Fix T72214: Fluids: noise does not work with negative frame numbers The issue is duplicated code. There are two functions that zero-fill the frame number. They worked the same for positive frames numbers, but behaved differently for negative ones. On frame `-100`, `BLI_path_frame` outputs `-0100` and `fluid_cache_get_framenr_formatted_$ID$` outputted `-100`. I changed the behavior of the latter, because we depend on the behavior of the former for much longer already. Reviewers: sebbas Differential Revision: https://developer.blender.org/D8107 --- intern/mantaflow/intern/strings/fluid_script.h | 4 +++- tests/gtests/blenlib/BLI_path_util_test.cc | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/intern/mantaflow/intern/strings/fluid_script.h b/intern/mantaflow/intern/strings/fluid_script.h index b166ab585b0..977b99e7759 100644 --- a/intern/mantaflow/intern/strings/fluid_script.h +++ b/intern/mantaflow/intern/strings/fluid_script.h @@ -502,10 +502,12 @@ gc.collect()\n"; // BAKE ////////////////////////////////////////////////////////////////////// +/* This has to match the behavior of BLI_path_frame, + * for positive and negative frame numbers. */ const std::string fluid_cache_helper = "\n\ def fluid_cache_get_framenr_formatted_$ID$(framenr):\n\ - return str(framenr).zfill(4) # framenr with leading zeroes\n"; + return str(framenr).zfill(4) if framenr >= 0 else str(framenr).zfill(5)\n"; const std::string fluid_bake_multiprocessing = "\n\ diff --git a/tests/gtests/blenlib/BLI_path_util_test.cc b/tests/gtests/blenlib/BLI_path_util_test.cc index 480d48d6080..734bbc2b31e 100644 --- a/tests/gtests/blenlib/BLI_path_util_test.cc +++ b/tests/gtests/blenlib/BLI_path_util_test.cc @@ -408,6 +408,20 @@ TEST(path_util, Frame) EXPECT_FALSE(ret); EXPECT_STREQ("test_middle", path); } + + /* negative frame numbers */ + { + char path[FILE_MAX] = "test_####"; + ret = BLI_path_frame(path, -1, 4); + EXPECT_TRUE(ret); + EXPECT_STREQ("test_-0001", path); + } + { + char path[FILE_MAX] = "test_####"; + ret = BLI_path_frame(path, -100, 4); + EXPECT_TRUE(ret); + EXPECT_STREQ("test_-0100", path); + } } /* BLI_split_dirfile */