Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-11-01 10:26:55 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-11-01 10:26:55 +0400
commite3f03d72b6e0a24a2c87e94c68c5f6452ad91e94 (patch)
tree4afd7238aee332f7198d6ef9c4059bf7f103db48 /source/blender/blenkernel
parentf3f3a42566810185f22752428931c4d7584a67be (diff)
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.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_library.h1
-rw-r--r--source/blender/blenkernel/intern/action.c5
-rw-r--r--source/blender/blenkernel/intern/armature.c3
-rw-r--r--source/blender/blenkernel/intern/blender.c2
-rw-r--r--source/blender/blenkernel/intern/brush.c3
-rw-r--r--source/blender/blenkernel/intern/curve.c5
-rw-r--r--source/blender/blenkernel/intern/image.c3
-rw-r--r--source/blender/blenkernel/intern/lattice.c3
-rw-r--r--source/blender/blenkernel/intern/library.c19
-rw-r--r--source/blender/blenkernel/intern/material.c3
-rw-r--r--source/blender/blenkernel/intern/mball.c3
-rw-r--r--source/blender/blenkernel/intern/mesh.c3
-rw-r--r--source/blender/blenkernel/intern/object.c10
-rw-r--r--source/blender/blenkernel/intern/particle.c3
-rw-r--r--source/blender/blenkernel/intern/speaker.c3
-rw-r--r--source/blender/blenkernel/intern/texture.c3
-rw-r--r--source/blender/blenkernel/intern/world.c3
17 files changed, 35 insertions, 40 deletions
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index e2033915caa..9130cac6cd6 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -49,6 +49,7 @@ void *alloc_libblock(struct ListBase *lb, short type, const char *name);
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);
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 2a1794fe2fc..944f7c6a0b6 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -146,13 +146,10 @@ void make_local_action(bAction *act)
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);
}
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 9fba18dd7cf..e9a19b50a81 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -157,12 +157,11 @@ void make_local_armature(bArmature *arm)
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) {
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 6e343e874f1..d68b0b361d1 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -172,7 +172,7 @@ static void clean_paths(Main *main)
{
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);
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 10f056e9b78..e78b89441c9 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -224,13 +224,12 @@ void make_local_brush(Brush *brush)
}
}
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) {
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 13b1da22449..5d2180fe702 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -273,13 +273,10 @@ void make_local_curve(Curve *cu)
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;
-
- /* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &cun->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &cun->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data==cu) {
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 9aeacb9d7fa..08440849a4e 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -385,13 +385,12 @@ void make_local_image(struct Image *ima)
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) {
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 9a528b54143..47878242604 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -271,12 +271,11 @@ void make_local_lattice(Lattice *lt)
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) {
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 9d8acc44e88..35b50730a31 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -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 @@ int new_id(ListBase *lb, ID *id, const char *tname)
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);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 2ad3da9f3a0..7be3514e0f2 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -364,13 +364,12 @@ void make_local_material(Material *ma)
}
/* 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;
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 98646bd2faa..327306b32ee 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -174,12 +174,11 @@ void make_local_mball(MetaBall *mb)
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) {
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 6f66e189dcf..4a8bc34cdf7 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -298,13 +298,12 @@ void make_local_mesh(Mesh *me)
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) {
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 0d0552cf3b3..635e0744aa1 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -772,13 +772,12 @@ void make_local_camera(Camera *cam)
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;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &camn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &camn->id);
for(ob= bmain->object.first; ob; ob= ob->id.next) {
if(ob->data == cam) {
@@ -939,13 +938,11 @@ void make_local_lamp(Lamp *la)
id_clear_lib_data(bmain, &la->id);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, la->id.lib->filepath};
Lamp *lan= copy_lamp(la);
lan->id.us= 0;
-
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &lan->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &lan->id);
ob= bmain->object.first;
while(ob) {
@@ -1486,13 +1483,12 @@ void make_local_object(Object *ob)
extern_local_object(ob);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, ob->id.lib->filepath};
Object *obn= copy_object(ob);
obn->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &obn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &obn->id);
sce= bmain->scene.first;
while(sce) {
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index a1ed0862336..7678da1c7c4 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -3632,13 +3632,12 @@ void make_local_particlesettings(ParticleSettings *part)
expand_local_particlesettings(part);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, part->id.lib->filepath};
ParticleSettings *partn= psys_copy_settings(part);
partn->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &partn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &partn->id);
/* do objects */
for(ob= bmain->object.first; ob; ob= ob->id.next) {
diff --git a/source/blender/blenkernel/intern/speaker.c b/source/blender/blenkernel/intern/speaker.c
index d5788d7a748..018c7a197ff 100644
--- a/source/blender/blenkernel/intern/speaker.c
+++ b/source/blender/blenkernel/intern/speaker.c
@@ -106,12 +106,11 @@ void make_local_speaker(Speaker *spk)
id_clear_lib_data(bmain, &spk->id);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, spk->id.lib->filepath};
Speaker *spkn= copy_speaker(spk);
spkn->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &spkn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &spkn->id);
ob= bmain->object.first;
while(ob) {
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index e3713b1e177..d3bd7d7b766 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -897,13 +897,12 @@ void make_local_texture(Tex *tex)
extern_local_texture(tex);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, tex->id.lib->filepath};
Tex *texn= copy_texture(tex);
texn->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &texn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &texn->id);
ma= bmain->mat.first;
while(ma) {
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 4d7a7c9a262..5797c6c3f15 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -176,12 +176,11 @@ void make_local_world(World *wrld)
id_clear_lib_data(bmain, &wrld->id);
}
else if(is_local && is_lib) {
- char *bpath_user_data[2]= {bmain->name, wrld->id.lib->filepath};
World *wrldn= copy_world(wrld);
wrldn->id.us= 0;
/* Remap paths of new ID using old library as base. */
- bpath_traverse_id(bmain, &wrldn->id, bpath_relocate_visitor, 0, bpath_user_data);
+ BKE_id_lib_local_paths(bmain, &wrldn->id);
for(sce= bmain->scene.first; sce; sce= sce->id.next) {
if(sce->world == wrld) {