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

Joshua Leung aligorith at gmail.com
Mon Jul 23 13:28:43 CEST 2007


Revision: 11347
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11347
Author:   aligorith
Date:     2007-07-23 13:28:43 +0200 (Mon, 23 Jul 2007)

Log Message:
-----------
== Constraints - Bugfixes ==

Here are some attempts at fixing bugs being encountered with the constraint system after the recode. I've just fixed a few typos (where relevant), and added some extra checks for things.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/src/transform_conversions.c

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2007-07-23 06:16:25 UTC (rev 11346)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2007-07-23 11:28:43 UTC (rev 11347)
@@ -818,7 +818,7 @@
 				cob->type = datatype;
 				
 				/* matrix in world-space */
-				Mat4MulMat4 (cob->matrix, cob->pchan->pose_mat, ob->obmat);
+				Mat4MulMat4(cob->matrix, cob->pchan->pose_mat, ob->obmat);
 				Mat4CpyMat4(cob->startmat, cob->matrix);
 			}
 			else
@@ -2640,6 +2640,8 @@
 	for (con= conlist->first; con; con= con->next) {
 		/* this we can skip completely */
 		if (con->flag & CONSTRAINT_DISABLE) continue;
+		/* influence == 0 should be ignored */
+		if (con->enforce == 0.0f) continue;
 		/* and inverse kinematics is solved seperate */ 
 		if (con->type==CONSTRAINT_TYPE_KINEMATIC) continue;
 		/* rigidbody is really a game-engine thing - and is not solved here */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-07-23 06:16:25 UTC (rev 11346)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-07-23 11:28:43 UTC (rev 11347)
@@ -6555,6 +6555,7 @@
 							{
 								bActionConstraint *data= (bActionConstraint *)curcon->data;
 								
+								/* 'data->local' used to mean that target was in local-space */
 								if (data->local)
 									curcon->tarspace = CONSTRAINT_SPACE_LOCAL;
 							}							
@@ -6563,12 +6564,19 @@
 							{
 								bLocLimitConstraint *data= (bLocLimitConstraint *)curcon->data;
 								
-								if (data->flag2) {
+								/* old limit without parent option for objects */
+								if (data->flag2)
 									curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
-									curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
-								}
 							}
 								break;
+							case CONSTRAINT_TYPE_STRETCHTO:
+							{
+								bStretchToConstraint *data= (bStretchToConstraint *)curcon->data;
+								
+								/* force recalc of rest-length */
+								data->orglength = 0;
+							}
+								break;
 						}	
 					}
 				}
@@ -6595,6 +6603,7 @@
 									{
 										bActionConstraint *data= (bActionConstraint *)curcon->data;
 										
+										/* 'data->local' used to mean that target was in local-space */
 										if (data->local)
 											curcon->tarspace = CONSTRAINT_SPACE_LOCAL;
 									}							
@@ -6603,12 +6612,19 @@
 									{
 										bLocLimitConstraint *data= (bLocLimitConstraint *)curcon->data;
 										
-										if (data->flag2) {
+										/* old limit without parent option for objects */
+										if (data->flag2)
 											curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
-											curcon->ownspace = CONSTRAINT_SPACE_LOCAL;
-										}
 									}
 										break;
+									case CONSTRAINT_TYPE_STRETCHTO:
+									{
+										bStretchToConstraint *data= (bStretchToConstraint *)curcon->data;
+										
+										/* force recalc of rest-length */
+										data->orglength = 0;
+									}
+										break;
 								}
 							}
 							

Modified: trunk/blender/source/blender/src/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/src/transform_conversions.c	2007-07-23 06:16:25 UTC (rev 11346)
+++ trunk/blender/source/blender/src/transform_conversions.c	2007-07-23 11:28:43 UTC (rev 11347)
@@ -540,8 +540,7 @@
 	Mat3Inv(lmat, tmat);
 	Mat3CpyMat4(pmat, pchan->pose_mat);
 	Mat3MulMat3(tmat, lmat, pmat); // argh... order of args is reversed 
-	Mat3MulMat3(td->mtx, omat, pmat);
-		
+	Mat3MulMat3(td->mtx, omat, tmat);
 	Mat3Inv(td->smtx, td->mtx);
 	
 	/* for axismat we use bone's own transform */
@@ -2066,15 +2065,15 @@
 
 	VECCOPY(td->center, ob->obmat[3]);
 
-	if (ob->parent || ob->track || ob->constraints.first)
+	if (ob->parent || ob->constraints.first)
 	{
 		float totmat[3][3], obinv[3][3];
 		
-		/* get the effect of parenting, and/or tracking, and/or constraints */
+		/* get the effect of parenting, and/or constraints */
 		object_to_mat3(ob, obmtx);
 		Mat3CpyMat4(totmat, ob->obmat);
-		Mat3Inv(obinv, totmat);
-		Mat3MulMat3(td->smtx, obmtx, obinv);
+		Mat3Inv(obinv, obmtx);
+		Mat3MulMat3(td->smtx, totmat, obinv);
 		Mat3Inv(td->mtx, td->smtx);
 	}
 	else





More information about the Bf-blender-cvs mailing list