[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40853] trunk/blender/source/blender: fix [#28846] Relative paths on linked scene fails

Campbell Barton ideasman42 at gmail.com
Sat Oct 8 13:02:59 CEST 2011


Revision: 40853
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40853
Author:   campbellbarton
Date:     2011-10-08 11:02:58 +0000 (Sat, 08 Oct 2011)
Log Message:
-----------
fix [#28846] Relative paths on linked scene fails

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_font.h
    trunk/blender/source/blender/blenkernel/BKE_packedFile.h
    trunk/blender/source/blender/blenkernel/intern/anim.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/font.c
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/packedFile.c
    trunk/blender/source/blender/editors/curve/editfont.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/sound/sound_ops.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/makesdna/DNA_ID.h
    trunk/blender/source/blender/makesrna/intern/rna_image_api.c
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c

Modified: trunk/blender/source/blender/blenkernel/BKE_font.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_font.h	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/BKE_font.h	2011-10-08 11:02:58 UTC (rev 40853)
@@ -46,6 +46,7 @@
 struct objfnt;
 struct TmpFont;
 struct CharInfo;
+struct Main;
 
 struct chartrans {
 	float xof, yof;
@@ -77,10 +78,10 @@
 void free_vfont(struct VFont *sc); 
 void free_ttfont(void);
 struct VFont *get_builtin_font(void);
-struct VFont *load_vfont(const char *name);
+struct VFont *load_vfont(struct Main *bmain, const char *name);
 struct TmpFont *vfont_find_tmpfont(struct VFont *vfont);
 
-struct chartrans *BKE_text_to_curve(struct Scene *scene, struct Object *ob, int mode);
+struct chartrans *BKE_text_to_curve(struct Main *bmain, struct Scene *scene, struct Object *ob, int mode);
 
 int BKE_font_getselection(struct Object *ob, int *start, int *end);
 

Modified: trunk/blender/source/blender/blenkernel/BKE_packedFile.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_packedFile.h	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/BKE_packedFile.h	2011-10-08 11:02:58 UTC (rev 40853)
@@ -45,7 +45,7 @@
 struct VFont;
 
 /* pack */
-struct PackedFile *newPackedFile(struct ReportList *reports, const char *filename);
+struct PackedFile *newPackedFile(struct ReportList *reports, const char *filename, const char *relabase);
 struct PackedFile *newPackedFileMemory(void *mem, int memlen);
 
 void packAll(struct Main *bmain, struct ReportList *reports);

Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -1514,7 +1514,7 @@
 	
 	/* in par the family name is stored, use this to find the other objects */
 	
-	chartransdata= BKE_text_to_curve(scene, par, FO_DUPLI);
+	chartransdata= BKE_text_to_curve(G.main, scene, par, FO_DUPLI);
 	if(chartransdata==NULL) return;
 
 	cu= par->data;

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -1207,7 +1207,7 @@
 		if(cu->path) free_path(cu->path);
 		cu->path= NULL;
 
-		if(ob->type==OB_FONT) BKE_text_to_curve(scene, ob, 0);
+		if(ob->type==OB_FONT) BKE_text_to_curve(G.main, scene, ob, 0);
 
 		if(!forOrco) curve_calc_modifiers_pre(scene, ob, forRender, &originalVerts, &deformedVerts, &numVerts);
 

Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/intern/font.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -284,7 +284,7 @@
 	return tmpfnt;
 }
 
-static VFontData *vfont_get_data(VFont *vfont)
+static VFontData *vfont_get_data(Main *bmain, VFont *vfont)
 {
 	struct TmpFont *tmpfnt = NULL;
 	PackedFile *tpf;
@@ -319,11 +319,11 @@
 					BLI_addtail(&ttfdata, tmpfnt);
 				}
 			} else {
-				pf= newPackedFile(NULL, vfont->name);
+				pf= newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id));
 				
 				if(!tmpfnt)
 				{
-					tpf= newPackedFile(NULL, vfont->name);
+					tpf= newPackedFile(NULL, vfont->name, ID_BLEND_PATH(bmain, &vfont->id));
 					
 					// Add temporary packed file to globals
 					tmpfnt= (struct TmpFont *) MEM_callocN(sizeof(struct TmpFont), "temp_font");
@@ -351,7 +351,7 @@
 	return vfont->data;	
 }
 
-VFont *load_vfont(const char *name)
+VFont *load_vfont(Main *bmain, const char *name)
 {
 	char filename[FILE_MAXFILE];
 	VFont *vfont= NULL;
@@ -371,8 +371,8 @@
 		BLI_strncpy(dir, name, sizeof(dir));
 		BLI_splitdirstring(dir, filename);
 
-		pf= newPackedFile(NULL, name);
-		tpf= newPackedFile(NULL, name);		
+		pf= newPackedFile(NULL, name, bmain->name);
+		tpf= newPackedFile(NULL, name, bmain->name);
 		
 		is_builtin= 0;
 	}
@@ -382,7 +382,7 @@
 
 		vfd= BLI_vfontdata_from_freetypefont(pf);
 		if (vfd) {
-			vfont = alloc_libblock(&G.main->vfont, ID_VF, filename);
+			vfont = alloc_libblock(&bmain->vfont, ID_VF, filename);
 			vfont->data = vfd;
 
 			/* if there's a font name, use it for the ID name */
@@ -439,7 +439,7 @@
 		if (strcmp(vf->name, FO_BUILTIN_NAME)==0)
 			return vf;
 	
-	return load_vfont(FO_BUILTIN_NAME);
+	return load_vfont(G.main, FO_BUILTIN_NAME);
 }
 
 static VChar *find_vfont_char(VFontData *vfd, intptr_t character)
@@ -500,7 +500,7 @@
 
 }
 
-static void buildchar(Curve *cu, unsigned long character, CharInfo *info, float ofsx, float ofsy, float rot, int charidx)
+static void buildchar(Main *bmain, Curve *cu, unsigned long character, CharInfo *info, float ofsx, float ofsy, float rot, int charidx)
 {
 	BezTriple *bezt1, *bezt2;
 	Nurb *nu1 = NULL, *nu2 = NULL;
@@ -509,7 +509,7 @@
 	VChar *che = NULL;
 	int i;
 
-	vfd= vfont_get_data(which_vfont(cu, info));	
+	vfd= vfont_get_data(bmain, which_vfont(cu, info));
 	if (!vfd) return;
 
 	/*
@@ -662,7 +662,7 @@
 	}
 }
 
-struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) 
+struct chartrans *BKE_text_to_curve(Main *bmain, Scene *scene, Object *ob, int mode)
 {
 	VFont *vfont, *oldvfont;
 	VFontData *vfd= NULL;
@@ -714,7 +714,7 @@
 	if (cu->tb==NULL)
 		cu->tb= MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "TextBox compat");
 
-	vfd= vfont_get_data(vfont);
+	vfd= vfont_get_data(bmain, vfont);
 
 	/* The VFont Data can not be found */
 	if(!vfd) {
@@ -792,7 +792,7 @@
 		}
 
 		if (vfont != oldvfont) {
-			vfd= vfont_get_data(vfont);
+			vfd= vfont_get_data(bmain, vfont);
 			oldvfont = vfont;
 		}
 
@@ -1157,7 +1157,7 @@
 				}
 				// We do not want to see any character for \n or \r
 				if(cha != '\n' && cha != '\r')
-					buildchar(cu, cha, info, ct->xof, ct->yof, ct->rot, i);
+					buildchar(bmain, cu, cha, info, ct->xof, ct->yof, ct->rot, i);
 				
 				if ((info->flag & CU_CHINFO_UNDERLINE) && (cu->textoncurve == NULL) && (cha != '\n') && (cha != '\r')) {
 					float ulwidth, uloverlap= 0.0f;

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -1480,7 +1480,7 @@
 		/* try to repack file */
 		if(ima->packedfile) {
 			PackedFile *pf;
-			pf = newPackedFile(NULL, ima->name);
+			pf = newPackedFile(NULL, ima->name, ID_BLEND_PATH(G.main, &ima->id));
 			if (pf) {
 				freePackedFile(ima->packedfile);
 				ima->packedfile = pf;
@@ -1860,7 +1860,7 @@
 			
 			/* make packed file for autopack */
 			if ((ima->packedfile == NULL) && (G.fileflags & G_AUTOPACK))
-				ima->packedfile = newPackedFile(NULL, str);
+				ima->packedfile = newPackedFile(NULL, str, ID_BLEND_PATH(G.main, &ima->id));
 		}
 	}
 	else

Modified: trunk/blender/source/blender/blenkernel/intern/packedFile.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/packedFile.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/blenkernel/intern/packedFile.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -168,7 +168,7 @@
 	return pf;
 }
 
-PackedFile *newPackedFile(ReportList *reports, const char *filename)
+PackedFile *newPackedFile(ReportList *reports, const char *filename, const char *basepath)
 {
 	PackedFile *pf = NULL;
 	int file, filelen;
@@ -185,7 +185,7 @@
 	// convert relative filenames to absolute filenames
 	
 	strcpy(name, filename);
-	BLI_path_abs(name, G.main->name);
+	BLI_path_abs(name, basepath);
 	
 	// open the file
 	// and create a PackedFile structure
@@ -224,7 +224,7 @@
 	for(ima=bmain->image.first; ima; ima=ima->id.next) {
 		if(ima->packedfile == NULL && ima->id.lib==NULL) { 
 			if(ima->source==IMA_SRC_FILE) {
-				ima->packedfile = newPackedFile(reports, ima->name);
+				ima->packedfile = newPackedFile(reports, ima->name, ID_BLEND_PATH(bmain, &ima->id));
 			}
 			else if(ELEM(ima->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) {
 				BKE_reportf(reports, RPT_WARNING, "Image '%s' skipped, movies and image sequences not supported.", ima->id.name+2);
@@ -234,11 +234,11 @@
 
 	for(vf=bmain->vfont.first; vf; vf=vf->id.next)
 		if(vf->packedfile == NULL && vf->id.lib==NULL && strcmp(vf->name, FO_BUILTIN_NAME) != 0)
-			vf->packedfile = newPackedFile(reports, vf->name);
+			vf->packedfile = newPackedFile(reports, vf->name, bmain->name);
 
 	for(sound=bmain->sound.first; sound; sound=sound->id.next)
 		if(sound->packedfile == NULL && sound->id.lib==NULL)
-			sound->packedfile = newPackedFile(reports, sound->name);
+			sound->packedfile = newPackedFile(reports, sound->name, bmain->name);
 }
 
 

Modified: trunk/blender/source/blender/editors/curve/editfont.c
===================================================================
--- trunk/blender/source/blender/editors/curve/editfont.c	2011-10-08 10:48:54 UTC (rev 40852)
+++ trunk/blender/source/blender/editors/curve/editfont.c	2011-10-08 11:02:58 UTC (rev 40853)
@@ -259,6 +259,7 @@
 
 static void text_update_edited(bContext *C, Scene *scene, Object *obedit, int recalc, int mode)
 {
+	struct Main *bmain= CTX_data_main(C);
 	Curve *cu= obedit->data;
 	EditFont *ef= cu->editfont;
 	cu->curinfo = ef->textbufinfo[cu->pos?cu->pos-1:0];
@@ -269,7 +270,7 @@
 	if(mode == FO_EDIT)
 		update_string(cu);
 
-	BKE_text_to_curve(scene, obedit, mode);
+	BKE_text_to_curve(bmain, scene, obedit, mode);
 
 	if(recalc)
 		DAG_id_tag_update(obedit->data, 0);
@@ -928,9 +929,10 @@
 
 	if(select == 0) {
 		if(cu->selstart) {
+			struct Main *bmain= CTX_data_main(C);
 			cu->selstart = cu->selend = 0;
 			update_string(cu);
-			BKE_text_to_curve(scene, obedit, FO_SELCHANGE);
+			BKE_text_to_curve(bmain, scene, obedit, FO_SELCHANGE);
 		}
 	}
 
@@ -1644,13 +1646,14 @@
 
 static int open_exec(bContext *C, wmOperator *op)
 {
+	struct Main *bmain= CTX_data_main(C);
 	VFont *font;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list