[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23729] trunk/blender/source/blender: A few bugfixes:

Joshua Leung aligorith at gmail.com
Fri Oct 9 11:48:04 CEST 2009


Revision: 23729
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23729
Author:   aligorith
Date:     2009-10-09 11:48:04 +0200 (Fri, 09 Oct 2009)

Log Message:
-----------
A few bugfixes:

* #19583: Keying Sets list issues
Deleting a Keying Set (or a Keying Set Path) set the active index to 0, but that would mean that the first item would be selected but not visible.

* #19590: Keyframing properties of a modifier with more than one of it's type the property will highlight in all
- Modifiers now always have a unique name, so renaming a modifier should check that the name is unique. Most of the files changed in this commit were just to make sure that modifiers got unique names when they were created
- Modifiers path getter was wrapped a bit wrong (missing the "s around the name)

* Constraints Bugs
- Constraints renaming now also makes sure the names stay unique
- Fixed (or attempted to fix) compiler warnings about some enum declaration for distance constraint

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/animation/keyingsets.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/object/object_edit.c
    trunk/blender/source/blender/editors/object/object_hook.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_constraint.c
    trunk/blender/source/blender/makesrna/intern/rna_fluidsim.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2009-10-09 09:48:04 UTC (rev 23729)
@@ -274,6 +274,8 @@
 struct ModifierData  *modifier_new(int type);
 void          modifier_free(struct ModifierData *md);
 
+void 		  modifier_unique_name(struct ListBase *modifiers, struct ModifierData *md);
+
 void          modifier_copyData(struct ModifierData *md, struct ModifierData *target);
 int           modifier_dependsOnTime(struct ModifierData *md);
 int           modifier_supportsMapping(struct ModifierData *md);

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -34,6 +34,7 @@
 *
 */
 
+#include "stddef.h"
 #include "string.h"
 #include "stdarg.h"
 #include "math.h"
@@ -8761,7 +8762,8 @@
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(type);
 	ModifierData *md = MEM_callocN(mti->structSize, mti->structName);
-
+	
+	// FIXME: we need to make the name always be unique somehow...
 	strcpy(md->name, mti->name);
 
 	md->type = type;
@@ -8786,6 +8788,15 @@
 	MEM_freeN(md);
 }
 
+void modifier_unique_name(ListBase *modifiers, ModifierData *md)
+{
+	if (modifiers && md) {
+		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+		
+		BLI_uniquename(modifiers, md, mti->name, '.', offsetof(ModifierData, name), sizeof(md->name));
+	}
+}
+
 int modifier_dependsOnTime(ModifierData *md) 
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -142,6 +142,7 @@
 				
 				mmd = (MultiresModifierData*)modifier_new(eModifierType_Multires);
 				BLI_insertlinkbefore(&base->object->modifiers, md, mmd);
+				modifier_unique_name(&base->object->modifiers, mmd);
 			}
 
 			if(mmd)

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -4095,6 +4095,8 @@
 
 		BLI_addhead(&ob->modifiers, hmd);
 		BLI_remlink(&ob->hooks, hook);
+		
+		modifier_unique_name(&ob->modifiers, hmd);
 
 		MEM_freeN(hook);
 	}
@@ -7659,6 +7661,8 @@
 						smd->flags |= eSubsurfModifierFlag_ControlEdges;
 					
 					BLI_addtail(&ob->modifiers, smd);
+					
+					modifier_unique_name(&ob->modifiers, smd);
 				}
 			}
 			

Modified: trunk/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyingsets.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/editors/animation/keyingsets.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -177,10 +177,11 @@
 	
 	/* free KeyingSet's data, then remove it from the scene */
 	BKE_keyingset_free(ks);
-	
 	BLI_freelinkN(&scene->keyingsets, ks);
-	scene->active_keyingset= 0;
 	
+	/* the active one should now be the previously second-to-last one */
+	scene->active_keyingset--;
+	
 	return OPERATOR_FINISHED;
 }
 
@@ -258,8 +259,8 @@
 				BLI_freelinkN(&ks->paths, ksp);
 			}
 			
-			/* fix active path index */
-			ks->active_path= 0;
+			/* the active path should now be the previously second-to-last active one */
+			ks->active_path--;
 		}
 		else {
 			BKE_report(op->reports, RPT_ERROR, "No active Keying Set Path to remove");

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -458,6 +458,8 @@
 	nmd->mode &= ~eModifierMode_Virtual;
 
 	BLI_addhead(&ob->modifiers, nmd);
+	
+	modifier_unique_name(&ob->modifiers, nmd);
 
 	ob->partype = PAROBJECT;
 

Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/editors/object/object_edit.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -848,6 +848,7 @@
 								BooleanModifierData *bmd = NULL;
 								bmd = (BooleanModifierData *)modifier_new(eModifierType_Boolean);
 								BLI_addtail(&ob->modifiers, bmd);
+								modifier_unique_name(&ob->modifiers, bmd);
 								bmd->object = base_select->object;
 								bmd->modifier.mode |= eModifierMode_Realtime;
 								switch(nr){
@@ -978,9 +979,10 @@
 			} 
 			else if(depth == 0 && *set != 0) {
 				SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf);
-
+				
 				BLI_addtail(&ob->modifiers, smd);
-
+				modifier_unique_name(&ob->modifiers, smd);
+				
 				if (level!=-1) {
 					smd->levels = level;
 				}
@@ -1197,6 +1199,7 @@
 							nmd = modifier_new(md->type);
 							modifier_copyData(md, nmd);
 							BLI_addtail(&base->object->modifiers, nmd);
+							modifier_unique_name(&base->object->modifiers, nmd);
 						}
 
 						copy_object_particlesystems(base->object, ob);
@@ -1220,6 +1223,7 @@
 								
 								mdn = modifier_new(event);
 								BLI_addtail(&base->object->modifiers, mdn);
+								modifier_unique_name(&base->object->modifiers, mdn);
 
 								modifier_copyData(md, mdn);
 							}

Modified: trunk/blender/source/blender/editors/object/object_hook.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_hook.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/editors/object/object_hook.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -480,6 +480,7 @@
 				hmd = (HookModifierData*) modifier_new(eModifierType_Hook);
 				BLI_insertlinkbefore(&obedit->modifiers, md, hmd);
 				sprintf(hmd->modifier.name, "Hook-%s", ob->id.name+2);
+				modifier_unique_name(&obedit->modifiers, hmd);
 			}
 			else if (hmd->indexar) MEM_freeN(hmd->indexar); /* reassign, hook was set */
 		

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -76,7 +76,7 @@
 
 int ED_object_modifier_add(ReportList *reports, Scene *scene, Object *ob, int type)
 {
-	ModifierData *md;
+	ModifierData *md=NULL, *new_md=NULL;
 	ModifierTypeInfo *mti = modifierType_getInfo(type);
 
 	if(mti->flags&eModifierTypeFlag_Single) {
@@ -87,20 +87,29 @@
 	}
 
 	if(type == eModifierType_ParticleSystem) {
+		/* don't need to worry about the new modifier's name, since that is set to the number
+		 * of particle systems which shouldn't have too many duplicates 
+		 */
 		object_add_particle_system(scene, ob);
 	}
 	else {
+		/* get new modifier data to add */
+		new_md= modifier_new(type);
+		
 		if(mti->flags&eModifierTypeFlag_RequiresOriginalData) {
 			md = ob->modifiers.first;
-
+			
 			while(md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform)
 				md = md->next;
-
-			BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(type));
+			
+			BLI_insertlinkbefore(&ob->modifiers, md, new_md);
 		}
 		else
-			BLI_addtail(&ob->modifiers, modifier_new(type));
+			BLI_addtail(&ob->modifiers, new_md);
 		
+		/* make sure modifier data has unique name */
+		modifier_unique_name(&ob->modifiers, new_md);
+		
 		/* special cases */
 		if(type == eModifierType_Softbody) {
 			if(!ob->soft) {
@@ -111,7 +120,7 @@
 		else if(type == eModifierType_Collision) {
 			if(!ob->pd)
 				ob->pd= object_add_collision_fields(0);
-
+			
 			ob->pd->deflect= 1;
 			DAG_scene_sort(scene);
 		}
@@ -400,6 +409,7 @@
 	nmd = modifier_new(md->type);
 	modifier_copyData(md, nmd);
 	BLI_insertlink(&ob->modifiers, md, nmd);
+	modifier_unique_name(&ob->modifiers, nmd);
 
 	return 1;
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2009-10-09 06:18:52 UTC (rev 23728)
+++ trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2009-10-09 09:48:04 UTC (rev 23729)
@@ -87,13 +87,6 @@
 	{0, NULL, 0, NULL, NULL},
 };
 
-EnumPropertyItem constraint_distance_items[] = {
-	{LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside", ""},
-	{LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside", ""},
-	{LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface", ""},
-	{0, NULL, 0, NULL, NULL}
-};
-
 #ifdef RNA_RUNTIME
 
 #include "BKE_action.h"
@@ -153,6 +146,24 @@
 	}
 }
 
+static void rna_Constraint_name_set(PointerRNA *ptr, const char *value)
+{
+	bConstraint *con= ptr->data;
+	
+	/* copy the new name into the name slot */
+	BLI_strncpy(con->name, value, sizeof(con->name));
+	
+	/* make sure name is unique */
+	if (ptr->id.data) {
+		Object *ob= ptr->id.data;
+		ListBase *list= get_active_constraints(ob);
+		
+		/* if we have the list, check for unique name, otherwise give up */
+		if (list)
+			unique_constraint_name(con, list); 
+	}
+}
+
 static char *rna_Constraint_path(PointerRNA *ptr)
 {
 	Object *ob= ptr->id.data;
@@ -291,6 +302,14 @@
 
 #else
 
+EnumPropertyItem constraint_distance_items[] = {
+	{LIMITDIST_INSIDE, "LIMITDIST_INSIDE", 0, "Inside", ""},
+	{LIMITDIST_OUTSIDE, "LIMITDIST_OUTSIDE", 0, "Outside", ""},
+	{LIMITDIST_ONSURFACE, "LIMITDIST_ONSURFACE", 0, "On Surface", ""},
+	{0, NULL, 0, NULL, NULL}
+};
+
+
 static void rna_def_constrainttarget(BlenderRNA *brna)
 {
 	StructRNA *srna;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list