[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41429] trunk/blender/source/blender: added path traversal flag - BPATH_TRAVERSE_SKIP_MULTIFILE,

Campbell Barton ideasman42 at gmail.com
Tue Nov 1 07:26:55 CET 2011


Revision: 41429
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41429
Author:   campbellbarton
Date:     2011-11-01 06:26:55 +0000 (Tue, 01 Nov 2011)
Log Message:
-----------
added path traversal flag - BPATH_TRAVERSE_SKIP_MULTIFILE,
so path manipulation functions dont run multiple times on the same path in the case of sequence strips where the one directory is used as the base for many images.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_library.h
    trunk/blender/source/blender/blenkernel/intern/action.c
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/blender.c
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/lattice.c
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/mball.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/speaker.c
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/blenkernel/intern/world.c
    trunk/blender/source/blender/blenlib/BLI_bpath.h
    trunk/blender/source/blender/blenlib/intern/bpath.c

Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h	2011-11-01 06:26:55 UTC (rev 41429)
@@ -49,6 +49,7 @@
 void *copy_libblock(void *rt);
 void copy_libblock_data(struct ID *id, const struct ID *id_from, const short do_action);
 
+void BKE_id_lib_local_paths(struct Main *bmain, struct ID *id);
 void id_lib_extern(struct ID *id);
 void BKE_library_filepath_set(struct Library *lib, const char *filepath);
 void id_us_plus(struct ID *id);

Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/action.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -146,13 +146,10 @@
 		id_clear_lib_data(bmain, &act->id);
 	}
 	else if (mlac.is_local && mlac.is_lib) {
-		char *bpath_user_data[2]= {bmain->name, act->id.lib->filepath};
-
 		mlac.actn= copy_action(act);
 		mlac.actn->id.us= 0;
 
-		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &mlac.actn->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &mlac.actn->id);
 
 		BKE_animdata_main_cb(bmain, make_localact_apply_cb, &mlac);
 	}

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -157,12 +157,11 @@
 		id_clear_lib_data(bmain, &arm->id);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, arm->id.lib->filepath};
 		bArmature *armn= copy_armature(arm);
 		armn->id.us= 0;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &armn->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &armn->id);
 
 		for(ob= bmain->object.first; ob; ob= ob->id.next) {
 			if(ob->data == arm) {

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -172,7 +172,7 @@
 {
 	Scene *scene;
 
-	bpath_traverse_main(main, clean_paths_visit_cb, 0, NULL);
+	bpath_traverse_main(main, clean_paths_visit_cb, BPATH_TRAVERSE_SKIP_MULTIFILE, NULL);
 
 	for(scene= main->scene.first; scene; scene= scene->id.next) {
 		BLI_clean(scene->r.pic);

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -224,13 +224,12 @@
 		}
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, brush->id.lib->filepath};
 		Brush *brushn= copy_brush(brush);
 		brushn->id.us= 1; /* only keep fake user */
 		brushn->id.flag |= LIB_FAKEUSER;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &brushn->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &brush->id);
 		
 		for(scene= bmain->scene.first; scene; scene=scene->id.next) {
 			if(paint_brush(&scene->toolsettings->imapaint.paint)==brush) {

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -273,14 +273,11 @@
 		extern_local_curve(cu);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, cu->id.lib->filepath};
 		Curve *cun= copy_curve(cu);
 		cun->id.us= 0;
 
+		BKE_id_lib_local_paths(bmain, &cun->id);
 
-		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &cun->id, bpath_relocate_visitor, 0, bpath_user_data);
-
 		for(ob= bmain->object.first; ob; ob= ob->id.next) {
 			if(ob->data==cu) {
 				if(ob->id.lib==NULL) {

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -385,13 +385,12 @@
 		extern_local_image(ima);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, ima->id.lib->filepath};
 		Image *iman= copy_image(ima);
 
 		iman->id.us= 0;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &iman->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &iman->id);
 
 		tex= bmain->tex.first;
 		while(tex) {

Modified: trunk/blender/source/blender/blenkernel/intern/lattice.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lattice.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/lattice.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -271,12 +271,11 @@
 		id_clear_lib_data(bmain, &lt->id);
 	}
 	else if(is_local && is_lib) {
-		char *bath_user_data[2]= {bmain->name, lt->id.lib->filepath};
 		Lattice *ltn= copy_lattice(lt);
 		ltn->id.us= 0;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &ltn->id, bpath_relocate_visitor, 0, bath_user_data);
+		BKE_id_lib_local_paths(bmain, &ltn->id);
 
 		for(ob= bmain->object.first; ob; ob= ob->id.next) {
 			if(ob->data==lt) {

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/library.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -127,6 +127,21 @@
 
 /* ************* general ************************ */
 
+
+/* this has to be called from each make_local_* func, we could call
+ * from id_make_local() but then the make local functions would not be self
+ * contained.
+ * also note that the id _must_ have a library - campbell */
+void BKE_id_lib_local_paths(Main *bmain, ID *id)
+{
+	char *bpath_user_data[2]= {bmain->name, (id)->lib->filepath};
+
+	bpath_traverse_id(bmain, id,
+					  bpath_relocate_visitor,
+					  BPATH_TRAVERSE_SKIP_MULTIFILE,
+					  bpath_user_data);
+}
+
 void id_lib_extern(ID *id)
 {
 	if(id) {
@@ -1252,8 +1267,8 @@
    don't have other library users. */
 void id_clear_lib_data(Main *bmain, ID *id)
 {
-	char *bpath_user_data[2]= {bmain->name, id->lib->filepath};
-	bpath_traverse_id(bmain, id, bpath_relocate_visitor, 0, bpath_user_data);
+	BKE_id_lib_local_paths(bmain, id);
+
 	id->lib= NULL;
 	id->flag= LIB_LOCAL;
 	new_id(which_libbase(bmain, GS(id->name)), id, NULL);

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -364,13 +364,12 @@
 	}
 	/* Both user and local, so copy. */
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, ma->id.lib->filepath};
 		Material *man= copy_material(ma);
 
 		man->id.us= 0;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &man->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &man->id);
 
 		/* do objects */
 		ob= bmain->object.first;

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -174,12 +174,11 @@
 		extern_local_mball(mb);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, mb->id.lib->filepath};
 		MetaBall *mbn= copy_mball(mb);
 		mbn->id.us= 0;
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &mbn->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &mbn->id);
 
 		for(ob= G.main->object.first; ob; ob= ob->id.next) {
 			if(ob->data == mb) {

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -298,13 +298,12 @@
 		expand_local_mesh(me);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, me->id.lib->filepath};
 		Mesh *men= copy_mesh(me);
 		men->id.us= 0;
 
 
 		/* Remap paths of new ID using old library as base. */
-		bpath_traverse_id(bmain, &men->id, bpath_relocate_visitor, 0, bpath_user_data);
+		BKE_id_lib_local_paths(bmain, &men->id);
 
 		for(ob= bmain->object.first; ob; ob= ob->id.next) {
 			if(me == ob->data) {

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-01 05:43:35 UTC (rev 41428)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-01 06:26:55 UTC (rev 41429)
@@ -772,13 +772,12 @@
 		id_clear_lib_data(bmain, &cam->id);
 	}
 	else if(is_local && is_lib) {
-		char *bpath_user_data[2]= {bmain->name, cam->id.lib->filepath};
 		Camera *camn= copy_camera(cam);
 
 		camn->id.us= 0;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list