[Bf-blender-cvs] [ade29c9] fracture_modifier: fix for older blends, so they work as before again

Martin Felke noreply at git.blender.org
Fri Oct 16 21:14:49 CEST 2015


Commit: ade29c971376c707fafbb81cf384cb2ea75d480a
Author: Martin Felke
Date:   Fri Oct 16 21:13:32 2015 +0200
Branches: fracture_modifier
https://developer.blender.org/rBade29c971376c707fafbb81cf384cb2ea75d480a

fix for older blends, so they work as before again

===================================================================

M	source/blender/blenloader/intern/readfile.c
M	source/blender/modifiers/intern/MOD_fracture.c

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ca1cd9e..ed60793 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4934,7 +4934,7 @@ static void load_fracture_modifier(FileData* fd, FractureModifierData *fmd, Obje
 	fmd->vertex_island_map = NULL;
 
 	/*HARDCODING this for now, until we can version it properly, say with 2.75 ? */
-	if (fd->fileversion < 275) {
+	if (fd->fileversion < 276) {
 		fmd->fracture_mode = MOD_FRACTURE_PREFRACTURED;
 		fmd->shard_sequence.first = NULL;
 		fmd->shard_sequence.last = NULL;
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index 8cb62a0..58ecb82 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -3633,7 +3633,7 @@ static FractureSetting* create_default_setting(bDeformGroup *vgroup)
 	return fs;
 }
 
-static void detect_vgroups(FractureModifierData *fmd, Object *ob)
+static bool detect_vgroups(FractureModifierData *fmd, Object *ob)
 {
 	//use silly name prefix... S_, because other vgroups may exist too
 	bDeformGroup *vgroup;
@@ -3682,6 +3682,8 @@ static void detect_vgroups(FractureModifierData *fmd, Object *ob)
 			BLI_addtail(&fmd->fracture_settings, fs);
 		}
 	}
+
+	return vgroups > 0;
 }
 
 static void do_modifier(FractureModifierData *fmd, Object *ob, DerivedMesh *dm)
@@ -3695,7 +3697,7 @@ static void do_modifier(FractureModifierData *fmd, Object *ob, DerivedMesh *dm)
 			free_modifier(fmd, true);
 		}
 
-		if (BLI_listbase_is_empty(&fmd->fracture_settings))
+		if (BLI_listbase_is_empty(&fmd->fracture_settings) && !detect_vgroups(fmd, ob))
 		{
 			if (fmd->dm != NULL) {
 				fmd->dm->needsFree = 1;
@@ -3769,8 +3771,9 @@ static void do_modifier(FractureModifierData *fmd, Object *ob, DerivedMesh *dm)
 		//if vgroups > settings, insert new settings
 		//if vgroups = settings, keep....
 		//if vgroups < settings, delete last settings
-		detect_vgroups(fmd, ob);
-		do_prehalving(fmd, ob, dm);
+		if (detect_vgroups(fmd, ob))
+			//attempt to halve here...
+			do_prehalving(fmd, ob, dm);
 
 		//then check settings
 		if (BLI_listbase_is_empty(&fmd->fracture_settings))
@@ -4012,10 +4015,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 
 	if (fmd->fracture_mode == MOD_FRACTURE_PREFRACTURED)
 	{
-		if (BLI_listbase_is_empty(&fmd->fracture_settings))
+		if (BLI_listbase_is_empty(&fmd->fracture_settings) && detect_vgroups(fmd, ob))
 		{
-			detect_vgroups(fmd, ob);
-
 			//attempt to halve here...
 			do_prehalving(fmd, ob, derivedData);
 		}
@@ -4025,10 +4026,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
 			//rigidbody_object_add(md->scene, ob, RBO_TYPE_ACTIVE);
 		}
 #endif
-		else
-		{
-			final_dm = do_prefractured(fmd, ob, derivedData);
-		}
+		final_dm = do_prefractured(fmd, ob, derivedData);
 	}
 	else if (fmd->fracture_mode == MOD_FRACTURE_DYNAMIC)
 	{




More information about the Bf-blender-cvs mailing list