From 391f40e8c9647c2c436ef8681061d57300d2f287 Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Wed, 16 Nov 2011 12:43:12 +0000 Subject: [PATCH] Default cache file paths for ocean and fluidsim modifiers are now "/ocean_cache/" and "/fluid_cache/" when the file is not saved yet at the time the modifiers are created. If it has been saved, the file paths are relative to the .blend: "//ocean_cache/" and "//fluid_cache/". This should at least partially fix bug #29273. Particle external point caches are not changed. http://projects.blender.org/tracker/?func=detail&atid=498&aid=29273&group_id=9 --- .../modifiers/intern/MOD_fluidsim_util.c | 18 ++++++++++++++++- source/blender/modifiers/intern/MOD_ocean.c | 20 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c index 1baa03d2063..15e1cdfcb62 100644 --- a/source/blender/modifiers/intern/MOD_fluidsim_util.c +++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c @@ -69,6 +69,7 @@ void fluidsim_init(FluidsimModifierData *fluidmd) if(fluidmd) { FluidsimSettings *fss = MEM_callocN(sizeof(FluidsimSettings), "fluidsimsettings"); + int surfdataPathMax = FILE_MAX; fluidmd->fss = fss; @@ -104,7 +105,22 @@ void fluidsim_init(FluidsimModifierData *fluidmd) /* elubie: changed this to default to the same dir as the render output to prevent saving to C:\ on Windows */ - BLI_strncpy(fss->surfdataPath, BLI_temporary_dir(), FILE_MAX); + if (G.relbase_valid) { /* is the .blend saved? */ + /* subfolder next to saved file */ + BLI_strncpy(fss->surfdataPath, "//fluid_cache", surfdataPathMax); + BLI_add_slash(fss->surfdataPath); + } + else { + /* subfolder in temp. directory */ + BLI_strncpy(fss->surfdataPath, BLI_temporary_dir(), surfdataPathMax); + surfdataPathMax -= strlen(fss->surfdataPath); + if (surfdataPathMax > 1) { + BLI_strncpy(fss->surfdataPath+strlen(fss->surfdataPath), "fluid_cache", surfdataPathMax); + surfdataPathMax -= strlen("fluid_cache"); + if (surfdataPathMax > 1) + BLI_add_slash(fss->surfdataPath); + } + } // first init of bounding box // no bounding box needed diff --git a/source/blender/modifiers/intern/MOD_ocean.c b/source/blender/modifiers/intern/MOD_ocean.c index a61cc856662..55d121737c1 100644 --- a/source/blender/modifiers/intern/MOD_ocean.c +++ b/source/blender/modifiers/intern/MOD_ocean.c @@ -34,10 +34,12 @@ #include "DNA_scene_types.h" #include "BKE_cdderivedmesh.h" +#include "BKE_global.h" #include "BKE_modifier.h" #include "BKE_ocean.h" #include "BKE_utildefines.h" +#include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_math_inline.h" #include "BLI_utildefines.h" @@ -95,6 +97,7 @@ static void initData(ModifierData *md) { #ifdef WITH_OCEANSIM OceanModifierData *omd = (OceanModifierData*) md; + int cachepathmax = sizeof(omd->cachepath); omd->resolution = 7; omd->spatial_size = 50; @@ -122,7 +125,22 @@ static void initData(ModifierData *md) omd->repeat_x = 1; omd->repeat_y = 1; - BLI_strncpy(omd->cachepath, "//ocean_cache", sizeof(omd->cachepath)); + if (G.relbase_valid) { /* is the .blend saved? */ + /* subfolder next to saved file */ + BLI_strncpy(omd->cachepath, "//ocean_cache", cachepathmax); + BLI_add_slash(omd->cachepath); + } + else { + /* subfolder in temp. directory */ + BLI_strncpy(omd->cachepath, BLI_temporary_dir(), cachepathmax); + cachepathmax -= strlen(omd->cachepath); + if (cachepathmax > 1) { + BLI_strncpy(omd->cachepath+strlen(omd->cachepath), "ocean_cache", cachepathmax); + cachepathmax -= strlen("ocean_cache"); + if (cachepathmax > 1) + BLI_add_slash(omd->cachepath); + } + } omd->cached = 0; omd->bakestart = 1;