diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2022-04-25 11:11:55 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2022-04-25 11:11:55 +0300 |
commit | d3b5ab37772aafd6892466a61eb75741f70189de (patch) | |
tree | fd5a4c1b0a76313ddee5b2a1fa93a7b6f618cd85 /source/blender/blenkernel/intern/volume.cc | |
parent | 99dfc769f32a53c118692451d38d534bed697e88 (diff) | |
parent | 416ef3b6b2d21a2eb7a24183ab67c8a540f79d57 (diff) |
Merge branch 'master' into temp-gp-overlay-refactortemp-gp-overlay-refactor
Diffstat (limited to 'source/blender/blenkernel/intern/volume.cc')
-rw-r--r-- | source/blender/blenkernel/intern/volume.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/volume.cc b/source/blender/blenkernel/intern/volume.cc index 0c131863edd..307466d7dc9 100644 --- a/source/blender/blenkernel/intern/volume.cc +++ b/source/blender/blenkernel/intern/volume.cc @@ -60,6 +60,7 @@ using blender::float3; using blender::float4x4; using blender::IndexRange; using blender::StringRef; +using blender::StringRefNull; #ifdef WITH_OPENVDB # include <atomic> @@ -517,6 +518,8 @@ static void volume_init_data(ID *id) MEMCPY_STRUCT_AFTER(volume, DNA_struct_default_get(Volume), id); BKE_volume_init_grids(volume); + + BLI_strncpy(volume->velocity_grid, "velocity", sizeof(volume->velocity_grid)); } static void volume_copy_data(Main *UNUSED(bmain), @@ -794,6 +797,57 @@ bool BKE_volume_is_loaded(const Volume *volume) #endif } +bool BKE_volume_set_velocity_grid_by_name(Volume *volume, const char *base_name) +{ + const StringRefNull ref_base_name = base_name; + + if (BKE_volume_grid_find_for_read(volume, base_name)) { + BLI_strncpy(volume->velocity_grid, base_name, sizeof(volume->velocity_grid)); + volume->runtime.velocity_x_grid[0] = '\0'; + volume->runtime.velocity_y_grid[0] = '\0'; + volume->runtime.velocity_z_grid[0] = '\0'; + return true; + } + + /* It could be that the velocity grid is split in multiple grids, try with known postfixes. */ + const StringRefNull postfixes[][3] = {{"x", "y", "z"}, {".x", ".y", ".z"}, {"_x", "_y", "_z"}}; + + for (const StringRefNull *postfix : postfixes) { + bool found = true; + for (int i = 0; i < 3; i++) { + std::string post_fixed_name = ref_base_name + postfix[i]; + if (!BKE_volume_grid_find_for_read(volume, post_fixed_name.c_str())) { + found = false; + break; + } + } + + if (!found) { + continue; + } + + /* Save the base name as well. */ + BLI_strncpy(volume->velocity_grid, base_name, sizeof(volume->velocity_grid)); + BLI_strncpy(volume->runtime.velocity_x_grid, + (ref_base_name + postfix[0]).c_str(), + sizeof(volume->runtime.velocity_x_grid)); + BLI_strncpy(volume->runtime.velocity_y_grid, + (ref_base_name + postfix[1]).c_str(), + sizeof(volume->runtime.velocity_y_grid)); + BLI_strncpy(volume->runtime.velocity_z_grid, + (ref_base_name + postfix[2]).c_str(), + sizeof(volume->runtime.velocity_z_grid)); + return true; + } + + /* Reset to avoid potential issues. */ + volume->velocity_grid[0] = '\0'; + volume->runtime.velocity_x_grid[0] = '\0'; + volume->runtime.velocity_y_grid[0] = '\0'; + volume->runtime.velocity_z_grid[0] = '\0'; + return false; +} + bool BKE_volume_load(const Volume *volume, const Main *bmain) { #ifdef WITH_OPENVDB @@ -857,6 +911,14 @@ bool BKE_volume_load(const Volume *volume, const Main *bmain) } } + /* Try to detect the velocity grid. */ + const char *common_velocity_names[] = {"velocity", "vel", "v"}; + for (const char *common_velocity_name : common_velocity_names) { + if (BKE_volume_set_velocity_grid_by_name(const_cast<Volume *>(volume), common_velocity_name)) { + break; + } + } + BLI_strncpy(grids.filepath, filepath, FILE_MAX); return grids.error_msg.empty(); |