[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12954] trunk/blender/source/blender: Render-farm and file utils for dealing with external data.
Campbell Barton
ideasman42 at gmail.com
Thu Dec 20 11:27:13 CET 2007
Revision: 12954
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12954
Author: campbellbarton
Date: 2007-12-20 11:27:13 +0100 (Thu, 20 Dec 2007)
Log Message:
-----------
Render-farm and file utils for dealing with external data.
Useful to use before sending blend files to the renderfarm.
* Make all Paths Relative - makes any absolute paths relative.
* Report Missing Files - creates a textblock listing all missing files.
* Find Missing Files - searches a directory recursively for filenames that dont exist at their current path.
Added a path looper type and functions that currently loop on image, sound, font and external library paths.
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/BLI_boxpack2d.h
trunk/blender/source/blender/src/header_info.c
Added Paths:
-----------
trunk/blender/source/blender/blenlib/BLI_bpath.h
trunk/blender/source/blender/blenlib/intern/bpath.c
Modified: trunk/blender/source/blender/blenlib/BLI_boxpack2d.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_boxpack2d.h 2007-12-20 09:15:43 UTC (rev 12953)
+++ trunk/blender/source/blender/blenlib/BLI_boxpack2d.h 2007-12-20 10:27:13 UTC (rev 12954)
@@ -28,10 +28,7 @@
* Contributor(s): Campbell Barton
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
- *
- * The old math stuff from Ton. These will slowly phase out in favour
- * of MTC calls. (or even MoTO :) )
- * */
+ */
/* Box Packer */
Added: trunk/blender/source/blender/blenlib/BLI_bpath.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_bpath.h (rev 0)
+++ trunk/blender/source/blender/blenlib/BLI_bpath.h 2007-12-20 10:27:13 UTC (rev 12954)
@@ -0,0 +1,59 @@
+/**
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+/* Based on ghash, difference is ghash is not a fixed size,
+ * so for BPath we dont need to malloc */
+
+struct BPathIterator {
+ char* path;
+ char* lib;
+ char* name;
+ void* data;
+ int len;
+ int type;
+};
+
+void BLI_bpathIterator_init (struct BPathIterator *bpi);
+char* BLI_bpathIterator_getPath (struct BPathIterator *bpi);
+char* BLI_bpathIterator_getLib (struct BPathIterator *bpi);
+char* BLI_bpathIterator_getName (struct BPathIterator *bpi);
+int BLI_bpathIterator_getType (struct BPathIterator *bpi);
+int BLI_bpathIterator_getPathMaxLen(struct BPathIterator *bpi);
+void BLI_bpathIterator_step (struct BPathIterator *bpi);
+int BLI_bpathIterator_isDone (struct BPathIterator *bpi);
+void BLI_bpathIterator_copyPathExpanded( struct BPathIterator *bpi, char *path_expanded);
+
+/* high level funcs */
+
+/* creates a text file with missing files if there are any */
+struct Text * checkMissingFiles(void);
+void makeFilesRelative(int *tot, int *changed, int *failed, int *linked);
+void findMissingFiles(char *str);
Added: trunk/blender/source/blender/blenlib/intern/bpath.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/bpath.c (rev 0)
+++ trunk/blender/source/blender/blenlib/intern/bpath.c 2007-12-20 10:27:13 UTC (rev 12954)
@@ -0,0 +1,485 @@
+/**
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell barton
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+#include "BLI_bpath.h"
+#include "BKE_global.h"
+#include "DNA_ID.h" /* Library */
+#include "DNA_vfont_types.h"
+#include "DNA_image_types.h"
+#include "DNA_sound_types.h"
+#include "DNA_scene_types.h" /* to get the current frame */
+#include <stdlib.h>
+#include <string.h>
+
+#include "BKE_main.h" /* so we can access G.main->*.first */
+#include "BKE_image.h" /* so we can check the image's type */
+
+#include "blendef.h"
+#include "BKE_utildefines.h"
+
+/* for writing to a textblock */
+#include "BKE_text.h"
+#include "BLI_blenlib.h"
+#include "DNA_text_types.h"
+
+/* path/file handeling stuff */
+#ifndef WIN32
+ #include <dirent.h>
+#else
+ #include "BLI_winstuff.h"
+#endif
+
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <math.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define FILE_MAX 240
+
+
+/* TODO - BPATH_PLUGIN, BPATH_SEQ */
+enum BPathTypes {
+ BPATH_IMAGE = 0,
+ BPATH_SOUND,
+ BPATH_FONT,
+ BPATH_LIB,
+
+ BPATH_DONE
+};
+
+
+void BLI_bpathIterator_init( struct BPathIterator *bpi ) {
+ bpi->type = BPATH_IMAGE;
+ bpi->data = NULL;
+ BLI_bpathIterator_step(bpi);
+}
+
+char* BLI_bpathIterator_getPath( struct BPathIterator *bpi) {
+ return bpi->path;
+}
+void BLI_bpathIterator_copyPathExpanded( struct BPathIterator *bpi, char *path_expanded) {
+ char *filepath, *libpath;
+
+ filepath = BLI_bpathIterator_getPath(bpi);
+ libpath = BLI_bpathIterator_getLib(bpi);
+
+ BLI_strncpy(path_expanded, filepath, FILE_MAXDIR*2);
+
+ if (libpath) { /* check the files location relative to its library path */
+ BLI_convertstringcode(path_expanded, libpath, G.scene->r.cfra);
+ } else { /* local data, use the blend files path */
+ BLI_convertstringcode(path_expanded, G.sce, G.scene->r.cfra);
+ }
+}
+char* BLI_bpathIterator_getLib( struct BPathIterator *bpi) {
+ return bpi->lib;
+}
+char* BLI_bpathIterator_getName( struct BPathIterator *bpi) {
+ return bpi->name;
+}
+int BLI_bpathIterator_getType( struct BPathIterator *bpi) {
+ return bpi->type;
+}
+int BLI_bpathIterator_getPathMaxLen( struct BPathIterator *bpi) {
+ return bpi->len;
+}
+
+/* gets the first or the next image that has a path - not a viewer node or generated image */
+static struct Image *ima_getpath__internal(struct Image *ima, int step_next) {
+ if (ima==NULL)
+ return NULL;
+
+ if (step_next)
+ ima = ima->id.next;
+
+ while (ima) {
+ if (ima->packedfile==NULL && ELEM3(ima->source, IMA_SRC_FILE, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE))
+ break;
+ /* image is not a image with a path, skip it */
+ ima = ima->id.next;
+ }
+ return ima;
+}
+
+static struct VFont *vf_getpath__internal(struct VFont *vf, int step_next) {
+ if (vf==NULL)
+ return NULL;
+
+ if (step_next)
+ vf = vf->id.next;
+
+ while (vf) {
+ if (vf->packedfile==NULL && BLI_streq(vf->name, "<builtin>")==0) {
+ break;
+ }
+
+ /* font with no path, skip it */
+ vf = vf->id.next;
+ }
+ return vf;
+}
+
+static struct bSound *snd_getpath__internal(struct bSound *snd, int step_next) {
+ if (snd==NULL)
+ return NULL;
+
+ if (step_next)
+ snd = snd->id.next;
+
+ while (snd) {
+ if (snd->packedfile==NULL) {
+ break;
+ }
+
+ /* font with no path, skip it */
+ snd = snd->id.next;
+ }
+ return snd;
+}
+
+void BLI_bpathIterator_step( struct BPathIterator *bpi) {
+ while (bpi->type != BPATH_DONE) {
+
+ if ((bpi->type) == BPATH_IMAGE) {
+ /*if (bpi->data) bpi->data = ((ID *)bpi->data)->next;*/
+ if (bpi->data) bpi->data = ima_getpath__internal( (Image *)bpi->data, 1 ); /* must skip images that have no path */
+ else bpi->data = ima_getpath__internal(G.main->image.first, 0);
+
+ if (bpi->data) {
+ /* get the path info from this datatype */
+ Image *ima = (Image *)bpi->data;
+
+ bpi->lib = ima->id.lib ? ima->id.lib->filename : NULL;
+ bpi->path = ima->name;
+ bpi->name = ima->id.name+2;
+ bpi->len = sizeof(ima->name);
+
+ /* we are done, advancing to the next item, this type worked fine */
+ break;
+
+ } else {
+ bpi->type+=1; /* advance to the next type */
+ }
+
+
+ } else if ((bpi->type) == BPATH_SOUND) {
+ if (bpi->data) bpi->data = snd_getpath__internal( (bSound *)bpi->data, 1 ); /* must skip images that have no path */
+ else bpi->data = snd_getpath__internal(G.main->sound.first, 0);
+
+ if (bpi->data) {
+ /* get the path info from this datatype */
+ bSound *snd = (bSound *)bpi->data;
+
+ bpi->lib = snd->id.lib ? snd->id.lib->filename : NULL;
+ bpi->path = snd->sample->name;
+ bpi->name = snd->id.name+2;
+ bpi->len = sizeof(snd->sample->name);
+
+ /* we are done, advancing to the next item, this type worked fine */
+ break;
+ } else {
+ bpi->type+=1; /* advance to the next type */
+ }
+
+
+ } else if ((bpi->type) == BPATH_FONT) {
+
+ if (bpi->data) bpi->data = vf_getpath__internal( (VFont *)bpi->data, 1 );
+ else bpi->data = vf_getpath__internal( G.main->vfont.first, 0 );
+
+ if (bpi->data) {
+ /* get the path info from this datatype */
+ VFont *vf = (VFont *)bpi->data;
+
+ bpi->lib = vf->id.lib ? vf->id.lib->filename : NULL;
+ bpi->path = vf->name;
+ bpi->name = vf->id.name+2;
+ bpi->len = sizeof(vf->name);
+
+ /* we are done, advancing to the next item, this type worked fine */
+ break;
+ } else {
+ bpi->type+=1; /* advance to the next type */
+ }
+
+
+ } else if ((bpi->type) == BPATH_LIB) {
+
+ if (bpi->data) bpi->data = ((ID *)bpi->data)->next;
+ else bpi->data = G.main->library.first;
+
+ if (bpi->data) {
+ /* get the path info from this datatype */
+ Library *lib = (Library *)bpi->data;
+
+ bpi->lib = NULL;
+ bpi->path = lib->name;
+ bpi->name = NULL;
+ bpi->len = sizeof(lib->name);
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list