[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42009] trunk/blender/source/blender: share code for fluidsim, ocean & dynamic paint file paths.

Campbell Barton ideasman42 at gmail.com
Sun Nov 20 15:38:12 CET 2011


Revision: 42009
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42009
Author:   campbellbarton
Date:     2011-11-20 14:38:11 +0000 (Sun, 20 Nov 2011)
Log Message:
-----------
share code for fluidsim, ocean & dynamic paint file paths.
- use BLI_join_dirfile for joining all paths (no need to ensure slash is appended).
- paths from linked library files now supported.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/BKE_ocean.h
    trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenkernel/intern/ocean.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
    trunk/blender/source/blender/editors/physics/physics_fluid.c
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/makesdna/DNA_object_fluidsim.h
    trunk/blender/source/blender/makesrna/intern/rna_fluidsim.c
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/modifiers/intern/MOD_fluidsim_util.c
    trunk/blender/source/blender/modifiers/intern/MOD_ocean.c
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_outputFile.c
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2011-11-20 14:38:11 UTC (rev 42009)
@@ -52,7 +52,7 @@
 int		BKE_alphatest_ibuf(struct ImBuf *ibuf);
 int		BKE_write_ibuf_stamp(struct Scene *scene, struct Object *camera, struct ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality);
 int		BKE_write_ibuf(struct ImBuf *ibuf, const char *name, int imtype, int subimtype, int quality);
-void	BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames);
+void	BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, int imtype, const short use_ext, const short use_frames);
 int		BKE_add_image_extension(char *string, int imtype);
 int		BKE_ftype_to_imtype(int ftype);
 int		BKE_imtype_to_ftype(int imtype);

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2011-11-20 14:38:11 UTC (rev 42009)
@@ -364,5 +364,8 @@
 /* here for do_versions */
 void modifier_mdef_compact_influences(struct ModifierData *md);
 
+void        modifier_path_init(char *path, int path_maxlen, const char *name);
+const char *modifier_path_relbase(struct Object *ob);
+
 #endif
 

Modified: trunk/blender/source/blender/blenkernel/BKE_ocean.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_ocean.h	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/BKE_ocean.h	2011-11-20 14:38:11 UTC (rev 42009)
@@ -48,7 +48,8 @@
 	struct ImBuf **ibufs_foam;
 	struct ImBuf **ibufs_norm;
 	
-	char *bakepath;
+	const char *bakepath;
+	const char *relbase;
 	
 	/* precalculated for time range */
 	float *time;
@@ -92,8 +93,9 @@
 
 
 /* ocean cache handling */
-struct OceanCache *BKE_init_ocean_cache(char *bakepath, int start, int end, float wave_scale, 
-						  float chop_amount, float foam_coverage, float foam_fade, int resolution);
+struct OceanCache *BKE_init_ocean_cache(const char *bakepath, const char *relbase,
+                                        int start, int end, float wave_scale,
+                                        float chop_amount, float foam_coverage, float foam_fade, int resolution);
 void BKE_simulate_ocean_cache(struct OceanCache *och, int frame);
 	
 void BKE_bake_ocean(struct Ocean *o, struct OceanCache *och, void (*update_cb)(void *, float progress, int *cancel), void *update_cb_data);

Modified: trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c	2011-11-20 14:38:11 UTC (rev 42009)
@@ -976,8 +976,8 @@
 	surface->wave_timescale = 1.0f;
 	surface->wave_spring = 0.20f;
 
-	BLI_snprintf(surface->image_output_path, sizeof(surface->image_output_path), "%sdynamicpaint", U.textudir);
-	BLI_cleanup_dir(NULL, surface->image_output_path);
+	modifier_path_init(surface->image_output_path, sizeof(surface->image_output_path), "dynamicpaint");
+
 	dynamicPaintSurface_setUniqueName(surface, "Surface");
 
 	surface->effector_weights = BKE_add_effector_weights(NULL);

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2011-11-20 14:38:11 UTC (rev 42009)
@@ -1484,11 +1484,11 @@
 }
 
 
-void BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames)
+void BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, int imtype, const short use_ext, const short use_frames)
 {
 	if (string==NULL) return;
 	BLI_strncpy(string, base, FILE_MAX - 10);	/* weak assumption */
-	BLI_path_abs(string, G.main->name);
+	BLI_path_abs(string, relbase);
 
 	if(use_frames)
 		BLI_path_frame(string, frame, 4);

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2011-11-20 14:38:11 UTC (rev 42009)
@@ -60,6 +60,11 @@
 #include "BKE_key.h"
 #include "BKE_multires.h"
 
+/* may move these, only for modifier_path_relbase */
+#include "BKE_global.h" /* ugh, G.main->name only */
+#include "BKE_main.h"
+/* end */
+
 #include "MOD_modifiertypes.h"
 
 ModifierTypeInfo *modifierType_getInfo(ModifierType type)
@@ -573,3 +578,36 @@
 		}
 	}
 }
+
+/* where should this go?, it doesnt fit well anywhere :S - campbell */
+
+/* elubie: changed this to default to the same dir as the render output
+ * to prevent saving to C:\ on Windows */
+
+/* campbell: logic behind this...
+ *
+ * - if the ID is from a library, return library path
+ * - else if the file has been saved return the blend file path.
+ * - else if the file isn't saved and the ID isnt from a library, return the temp dir.
+ */
+const char *modifier_path_relbase(Object *ob)
+{
+	if (G.relbase_valid || ob->id.lib) {
+		return ID_BLEND_PATH(G.main, &ob->id);
+	}
+	else {
+		/* last resort, better then using "" which resolves to the current
+		 * working directory */
+		return BLI_temporary_dir();
+	}
+}
+
+/* initializes the path with either */
+void modifier_path_init(char *path, int path_maxlen, const char *name)
+{
+	/* elubie: changed this to default to the same dir as the render output
+	 * to prevent saving to C:\ on Windows */
+	BLI_join_dirfile(path, path_maxlen,
+	                 G.relbase_valid ? "//" : BLI_temporary_dir(),
+	                 name);
+}

Modified: trunk/blender/source/blender/blenkernel/intern/ocean.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/ocean.c	2011-11-20 14:36:23 UTC (rev 42008)
+++ trunk/blender/source/blender/blenkernel/intern/ocean.c	2011-11-20 14:38:11 UTC (rev 42009)
@@ -998,7 +998,7 @@
 #define CACHE_TYPE_FOAM		2
 #define CACHE_TYPE_NORMAL	3
 
-static void cache_filename(char *string, const char *path, int frame, int type)
+static void cache_filename(char *string, const char *path, const char *relbase, int frame, int type)
 {
 	char cachepath[FILE_MAX];
 	const char *fname;
@@ -1018,7 +1018,7 @@
 
 	BLI_join_dirfile(cachepath, sizeof(cachepath), path, fname);
 
-	BKE_makepicstring(string, cachepath, frame, R_OPENEXR, 1, TRUE);
+	BKE_makepicstring(string, cachepath, relbase, frame, R_OPENEXR, 1, TRUE);
 }
 
 void BKE_free_ocean_cache(struct OceanCache *och)
@@ -1119,12 +1119,15 @@
 	}
 }
 
-struct OceanCache *BKE_init_ocean_cache(char *bakepath, int start, int end, float wave_scale,
-						  float chop_amount, float foam_coverage, float foam_fade, int resolution)
+struct OceanCache *BKE_init_ocean_cache(const char *bakepath, const char *relbase,
+                                        int start, int end, float wave_scale,
+                                        float chop_amount, float foam_coverage, float foam_fade, int resolution)
 {
 	OceanCache *och = MEM_callocN(sizeof(OceanCache), "ocean cache data");
 
 	och->bakepath = bakepath;
+	och->relbase = relbase;
+
 	och->start = start;
 	och->end = end;
 	och->duration = (end - start) + 1;
@@ -1158,17 +1161,17 @@
 	if (och->ibufs_disp[f] != NULL ) return;
 
 
-	cache_filename(string, och->bakepath, frame, CACHE_TYPE_DISPLACE);
+	cache_filename(string, och->bakepath, och->relbase, frame, CACHE_TYPE_DISPLACE);
 	och->ibufs_disp[f] = IMB_loadiffname(string, 0);
 	//if (och->ibufs_disp[f] == NULL) printf("error loading %s \n", string);
 	//else printf("loaded cache %s \n", string);
 
-	cache_filename(string, och->bakepath, frame, CACHE_TYPE_FOAM);
+	cache_filename(string, och->bakepath, och->relbase, frame, CACHE_TYPE_FOAM);
 	och->ibufs_foam[f] = IMB_loadiffname(string, 0);
 	//if (och->ibufs_foam[f] == NULL) printf("error loading %s \n", string);
 	//else printf("loaded cache %s \n", string);
 
-	cache_filename(string, och->bakepath, frame, CACHE_TYPE_NORMAL);
+	cache_filename(string, och->bakepath, och->relbase, frame, CACHE_TYPE_NORMAL);
 	och->ibufs_norm[f] = IMB_loadiffname(string, 0);
 	//if (och->ibufs_norm[f] == NULL) printf("error loading %s \n", string);
 	//else printf("loaded cache %s \n", string);
@@ -1288,18 +1291,18 @@
 		}
 
 		/* write the images */
-		cache_filename(string, och->bakepath, f, CACHE_TYPE_DISPLACE);
+		cache_filename(string, och->bakepath, och->relbase, f, CACHE_TYPE_DISPLACE);
 		if(0 == BKE_write_ibuf(ibuf_disp, string, R_OPENEXR, R_OPENEXR_HALF, 2))  // 2 == ZIP exr codec
 			printf("Cannot save Displacement File Output to %s\n", string);
 
 		if (o->_do_jacobian) {
-			cache_filename(string, och->bakepath, f, CACHE_TYPE_FOAM);
+			cache_filename(string, och->bakepath, och->relbase,  f, CACHE_TYPE_FOAM);
 			if(0 == BKE_write_ibuf(ibuf_foam, string, R_OPENEXR, R_OPENEXR_HALF, 2))  // 2 == ZIP exr codec
 				printf("Cannot save Foam File Output to %s\n", string);
 		}
 
 		if (o->_do_normals) {
-			cache_filename(string, och->bakepath, f, CACHE_TYPE_NORMAL);
+			cache_filename(string, och->bakepath,  och->relbase, f, CACHE_TYPE_NORMAL);
 			if(0 == BKE_write_ibuf(ibuf_normal, string, R_OPENEXR, R_OPENEXR_HALF, 2))  // 2 == ZIP exr codec
 				printf("Cannot save Normal File Output to %s\n", string);
 		}
@@ -1409,7 +1412,7 @@
 	return och;
 }
 
-void BKE_simulate_ocean_cache(struct OceanCache *UNUSED(och), int UNUSED(frame))
+void BKE_simulate_ocean_cache(struct OceanCache *UNUSED(och), const char *UNUSED(relbase), int UNUSED(frame))
 {
 }
 

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list