[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14182] trunk/blender/source/blender/src: Bugfix #8599b:

Joshua Leung aligorith at gmail.com
Thu Mar 20 12:31:53 CET 2008


Revision: 14182
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14182
Author:   aligorith
Date:     2008-03-20 12:31:52 +0100 (Thu, 20 Mar 2008)

Log Message:
-----------
Bugfix #8599b: 
Insert-Key in Action Editor didn't work correctly for Constraint Channels yet. This was because a pointer to constraint data was not being obtained (it's now hacked to assume that 'Influence' is being keyed all the time).

Modified Paths:
--------------
    trunk/blender/source/blender/src/editaction.c
    trunk/blender/source/blender/src/editipo.c

Modified: trunk/blender/source/blender/src/editaction.c
===================================================================
--- trunk/blender/source/blender/src/editaction.c	2008-03-20 10:50:46 UTC (rev 14181)
+++ trunk/blender/source/blender/src/editaction.c	2008-03-20 11:31:52 UTC (rev 14182)
@@ -1432,6 +1432,7 @@
 	allqueue(REDRAWACTION, 0);
 	allqueue(REDRAWIPO, 0);
 	allqueue(REDRAWNLA, 0);
+	allqueue(REDRAWBUTSOBJ, 0);
 }
 
 /* delete selected keyframes */

Modified: trunk/blender/source/blender/src/editipo.c
===================================================================
--- trunk/blender/source/blender/src/editipo.c	2008-03-20 10:50:46 UTC (rev 14181)
+++ trunk/blender/source/blender/src/editipo.c	2008-03-20 11:31:52 UTC (rev 14182)
@@ -2268,14 +2268,14 @@
 	BIF_undo_push("Add Ipo vertex");
 }
 
-static void *get_context_ipo_poin(ID *id, int blocktype, char *actname, IpoCurve *icu, int *vartype)
+static void *get_context_ipo_poin(ID *id, int blocktype, char *actname, char *constname, IpoCurve *icu, int *vartype)
 {
-	if(blocktype==ID_PO) {
-		if(GS(id->name)==ID_OB) {
+	if (blocktype==ID_PO) {
+		if (GS(id->name)==ID_OB) {
 			Object *ob= (Object *)id;
 			bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
 			
-			if(pchan) {
+			if (pchan) {
 				*vartype= IPO_FLOAT;
 				return get_pchan_ipo_poin(pchan, icu->adrcode);
 			}
@@ -2284,6 +2284,35 @@
 		}
 		return NULL;
 	}
+	else if (blocktype==ID_CO) {
+		if ((GS(id->name)==ID_OB) && (constname && constname[0])) {
+			Object *ob= (Object *)id;
+			bConstraint *con;
+			
+			/* assume that we only want the influence (as only used for Constraint Channels) */
+			if ((ob->ipoflag & OB_ACTION_OB) && !strcmp(actname, "Object")) {
+				for (con= ob->constraints.first; con; con= con->next) {
+					if (strcmp(constname, con->name)==0) {
+						*vartype= IPO_FLOAT;
+						return &con->enforce;
+					}
+				}
+			}
+			else if (ob->pose) {
+				bPoseChannel *pchan= get_pose_channel(ob->pose, actname);
+				
+				if (pchan) {
+					for (con= pchan->constraints.first; con; con= con->next) {
+						if (strcmp(constname, con->name)==0) {
+							*vartype= IPO_FLOAT;
+							return &con->enforce;
+						}
+					}
+				}
+			}
+		}
+		return NULL;
+	}
 	else
 		return get_ipo_poin(id, icu, vartype);
 
@@ -2420,7 +2449,7 @@
 		
 		if(icu) {
 			
-			poin= get_context_ipo_poin(id, blocktype, actname, icu, &vartype);
+			poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
 			
 			if(poin) {
 				curval= read_ipo_poin(poin, vartype);
@@ -2641,7 +2670,7 @@
 		
 		if(icu) {
 			
-			poin= get_context_ipo_poin(id, blocktype, actname, icu, &vartype);
+			poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
 			
 			if(poin) {
 				curval= read_ipo_poin(poin, vartype);
@@ -2683,7 +2712,7 @@
 	
 	if(icu) {
 		
-		poin= get_context_ipo_poin(id, blocktype, actname, icu, &vartype);
+		poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
 		
 		if(poin) {
 			curval= read_ipo_poin(poin, vartype);
@@ -2735,7 +2764,7 @@
 	
 	if(icu) {
 		
-		poin= get_context_ipo_poin(id, blocktype, actname, icu, &vartype);
+		poin= get_context_ipo_poin(id, blocktype, actname, constname, icu, &vartype);
 		
 		if(poin) {
 			





More information about the Bf-blender-cvs mailing list