[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29140] trunk/blender/source/blender: Fix #22239: external btx won't load.

Brecht Van Lommel brecht at blender.org
Tue Jun 1 21:26:35 CEST 2010


Revision: 29140
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29140
Author:   blendix
Date:     2010-06-01 21:26:35 +0200 (Tue, 01 Jun 2010)

Log Message:
-----------
Fix #22239: external btx won't load.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_customdata.h
    trunk/blender/source/blender/blenkernel/BKE_multires.h
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_customdata.h	2010-06-01 19:01:54 UTC (rev 29139)
+++ trunk/blender/source/blender/blenkernel/BKE_customdata.h	2010-06-01 19:26:35 UTC (rev 29140)
@@ -292,6 +292,8 @@
 	struct ID *id, CustomDataMask mask, int totelem, int free);
 void CustomData_external_read(struct CustomData *data,
 	struct ID *id, CustomDataMask mask, int totelem);
+void CustomData_external_reload(struct CustomData *data,
+	struct ID *id, CustomDataMask mask, int totelem);
 
 #endif
 

Modified: trunk/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_multires.h	2010-06-01 19:01:54 UTC (rev 29139)
+++ trunk/blender/source/blender/blenkernel/BKE_multires.h	2010-06-01 19:26:35 UTC (rev 29140)
@@ -42,6 +42,7 @@
 
 void multires_force_update(struct Object *ob);
 void multires_force_render_update(struct Object *ob);
+void multires_force_external_reload(struct Object *ob);
 
 struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
 	int local_mmd, struct DerivedMesh*, struct Object *, int, int);

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2010-06-01 19:01:54 UTC (rev 29139)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2010-06-01 19:26:35 UTC (rev 29140)
@@ -2322,6 +2322,25 @@
 	BLI_path_abs(filename, path);
 }
 
+void CustomData_external_reload(CustomData *data, ID *id, CustomDataMask mask, int totelem)
+{
+	CustomDataLayer *layer;
+	const LayerTypeInfo *typeInfo;
+	int i;
+
+	for(i=0; i<data->totlayer; i++) {
+		layer = &data->layers[i];
+		typeInfo = layerType_getInfo(layer->type);
+
+		if(!(mask & (1<<layer->type)));
+		else if((layer->flag & CD_FLAG_EXTERNAL) && (layer->flag & CD_FLAG_IN_MEMORY)) {
+			if(typeInfo->free)
+				typeInfo->free(layer->data, totelem, typeInfo->size);
+			layer->flag &= ~CD_FLAG_IN_MEMORY;
+		}
+	}
+}
+
 void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int totelem)
 {
 	CustomDataExternal *external= data->external;

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2010-06-01 19:01:54 UTC (rev 29139)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2010-06-01 19:26:35 UTC (rev 29140)
@@ -139,6 +139,14 @@
 	}
 }
 
+void multires_force_external_reload(Object *ob)
+{
+	Mesh *me = get_mesh(ob);
+
+	CustomData_external_reload(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+	multires_force_update(ob);
+}
+
 void multires_force_render_update(Object *ob)
 {
 	if(ob && (ob->mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires))

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-06-01 19:01:54 UTC (rev 29139)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2010-06-01 19:26:35 UTC (rev 29140)
@@ -40,6 +40,7 @@
 
 #include "BKE_animsys.h"
 #include "BKE_bmesh.h" /* For BevelModifierData */
+#include "BKE_multires.h"
 #include "BKE_smoke.h" /* For smokeModifier_free & smokeModifier_createType */
 
 #include "WM_api.h"
@@ -382,8 +383,10 @@
 	Object *ob= (Object*)ptr->id.data;
 	CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external;
 
-	if(external)
+	if(external && strcmp(external->filename, value)) {
 		BLI_strncpy(external->filename, value, sizeof(external->filename));
+		multires_force_external_reload(ob);
+	}
 }
 
 static int rna_MultiresModifier_filename_length(PointerRNA *ptr)





More information about the Bf-blender-cvs mailing list