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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to