[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17197] trunk/blender/source/blender: Bugfixes:

Joshua Leung aligorith at gmail.com
Sun Oct 26 10:42:09 CET 2008


Revision: 17197
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17197
Author:   aligorith
Date:     2008-10-26 10:41:59 +0100 (Sun, 26 Oct 2008)

Log Message:
-----------
Bugfixes:

* #17900 - IK Constraint was not included regardless of what Visual-Keying method was used
* Deleting a Bone Group now corrects indices of those groups that occurred after the one that was deleted
* No more click-a-mania - Delete all vertex groups from a Mesh (Ctrl-Shift-G menu) 

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_editdeform.h
    trunk/blender/source/blender/src/editdeform.c
    trunk/blender/source/blender/src/keyframing.c
    trunk/blender/source/blender/src/poseobject.c

Modified: trunk/blender/source/blender/include/BIF_editdeform.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editdeform.h	2008-10-26 08:06:48 UTC (rev 17196)
+++ trunk/blender/source/blender/include/BIF_editdeform.h	2008-10-26 09:41:59 UTC (rev 17197)
@@ -42,9 +42,10 @@
 
 struct bDeformGroup *add_defgroup_name (struct Object *ob, char *name);
 void add_defgroup (struct Object *ob);
-void del_defgroup_in_object_mode ( Object *ob );
+void del_defgroup_in_object_mode (struct Object *ob );
 void del_defgroup (struct Object *ob);
-void duplicate_defgroup ( struct Object *ob );
+void del_all_defgroups (struct Object *ob);
+void duplicate_defgroup (struct Object *ob );
 void assign_verts_defgroup (void);
 void remove_verts_defgroup (int allverts);
 void remove_verts_defgroups (int allverts);

Modified: trunk/blender/source/blender/src/editdeform.c
===================================================================
--- trunk/blender/source/blender/src/editdeform.c	2008-10-26 08:06:48 UTC (rev 17196)
+++ trunk/blender/source/blender/src/editdeform.c	2008-10-26 09:41:59 UTC (rev 17197)
@@ -439,6 +439,32 @@
 	}
 }
 
+void del_all_defgroups (Object *ob)
+{
+	/* Sanity check */
+	if (ob == NULL)
+		return;
+	
+	/* Remove all DVerts */
+	if (ob->type==OB_MESH) {
+		Mesh *me= ob->data;
+		CustomData_free_layer_active(&me->vdata, CD_MDEFORMVERT, me->totvert);
+		me->dvert= NULL;
+	}
+	else {
+		if (editLatt->dvert) {
+			MEM_freeN(editLatt->dvert);
+			editLatt->dvert= NULL;
+		}
+	}
+	
+	/* Remove all DefGroups */
+	BLI_freelistN(&ob->defbase);
+	
+	/* Fix counters/indices */
+	ob->actdef= 0;
+}
+
 void create_dverts(ID *id)
 {
 	/* create deform verts
@@ -1008,9 +1034,9 @@
 	
 	/* give user choices of adding to current/new or removing from current */
 	if (ob->actdef)
-		mode = pupmenu("Vertex Groups %t|Change Active Group%x1|Delete Active Group%x2");
+		mode = pupmenu("Vertex Groups %t|Change Active Group%x1|Delete Active Group%x2|Delete All Groups%x3");
 	else
-		mode= pupmenu("Vertex Groups %t|Change Active Group%x1");
+		mode= pupmenu("Vertex Groups %t|Change Active Group%x1|Delete All Groups%x3");
 	
 	/* handle choices */
 	switch (mode) {
@@ -1033,11 +1059,20 @@
 		case 2: /* delete active group  */
 			{
 				del_defgroup(ob);
-				allqueue (REDRAWVIEW3D, 1);
+				allqueue(REDRAWVIEW3D, 1);
 				allqueue(REDRAWOOPS, 0);
 				BIF_undo_push("Delete vertex group");
 			}
 			break;
+		case 3: /* delete all groups */
+			{
+				del_all_defgroups(ob);
+				allqueue(REDRAWVIEW3D, 1);
+				allqueue(REDRAWOOPS, 0);
+				allqueue(REDRAWBUTSEDIT, 1);
+				BIF_undo_push("Delete all vertex groups");
+			}
+			break;
 	}
 }
 

Modified: trunk/blender/source/blender/src/keyframing.c
===================================================================
--- trunk/blender/source/blender/src/keyframing.c	2008-10-26 08:06:48 UTC (rev 17196)
+++ trunk/blender/source/blender/src/keyframing.c	2008-10-26 09:41:59 UTC (rev 17197)
@@ -590,6 +590,8 @@
 					return 1;
 				case CONSTRAINT_TYPE_FOLLOWPATH:
 					return 1;
+				case CONSTRAINT_TYPE_KINEMATIC:
+					return 1;
 					
 				/* single-transform constraits  */
 				case CONSTRAINT_TYPE_TRACKTO:

Modified: trunk/blender/source/blender/src/poseobject.c
===================================================================
--- trunk/blender/source/blender/src/poseobject.c	2008-10-26 08:06:48 UTC (rev 17196)
+++ trunk/blender/source/blender/src/poseobject.c	2008-10-26 09:41:59 UTC (rev 17197)
@@ -1065,10 +1065,15 @@
 	/* get group to remove */
 	grp= BLI_findlink(&pose->agroups, pose->active_group-1);
 	if (grp) {
-		/* firstly, make sure nothing references it */
+		/* adjust group references (the trouble of using indices!):
+		 *	- firstly, make sure nothing references it 
+		 *	- also, make sure that those after this item get corrected
+		 */
 		for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) {
 			if (pchan->agrp_index == pose->active_group)
 				pchan->agrp_index= 0;
+			else if (pchan->agrp_index > pose->active_group)
+				pchan->agrp_index--;
 		}
 		
 		/* now, remove it from the pose */





More information about the Bf-blender-cvs mailing list