[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12543] trunk/blender/source/blender/src/ transform_conversions.c: CopyRot Constraint and Transforms:
Joshua Leung
aligorith at gmail.com
Sat Nov 10 03:53:19 CET 2007
Revision: 12543
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12543
Author: aligorith
Date: 2007-11-10 03:53:19 +0100 (Sat, 10 Nov 2007)
Log Message:
-----------
CopyRot Constraint and Transforms:
Now, when rotating along local axes of an object/bone with a copy-rot constraint that has offset on, the results are more predicatable. However, doing so with global axes is still in CrazySpace (TM).
Modified Paths:
--------------
trunk/blender/source/blender/src/transform_conversions.c
Modified: trunk/blender/source/blender/src/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/src/transform_conversions.c 2007-11-09 23:06:31 UTC (rev 12542)
+++ trunk/blender/source/blender/src/transform_conversions.c 2007-11-10 02:53:19 UTC (rev 12543)
@@ -138,7 +138,7 @@
#include "transform.h"
/* local function prototype - for Object/Bone Constraints */
-static short constraints_list_needinv(ListBase *list);
+static short constraints_list_needinv(TransInfo *t, ListBase *list);
/* ************************** Functions *************************** */
@@ -553,7 +553,7 @@
else
Mat3CpyMat4(pmat, pchan->parent->pose_mat);
- if (constraints_list_needinv(&pchan->constraints)) {
+ if (constraints_list_needinv(t, &pchan->constraints)) {
Mat3CpyMat4(tmat, pchan->constinv);
Mat3Inv(cmat, tmat);
Mat3MulSerie(td->mtx, pchan->bone->bone_mat, pmat, cmat, omat, 0,0,0,0); // dang mulserie swaps args
@@ -562,7 +562,7 @@
Mat3MulSerie(td->mtx, pchan->bone->bone_mat, pmat, omat, 0,0,0,0,0); // dang mulserie swaps args
}
else {
- if (constraints_list_needinv(&pchan->constraints)) {
+ if (constraints_list_needinv(t, &pchan->constraints)) {
Mat3CpyMat4(tmat, pchan->constinv);
Mat3Inv(cmat, tmat);
Mat3MulSerie(td->mtx, pchan->bone->bone_mat, cmat, omat, 0, 0,0,0,0); // dang mulserie swaps args
@@ -2500,7 +2500,7 @@
* These particular constraints benefit from this, but others don't, hence
* this semi-hack ;-) - Aligorith
*/
-static short constraints_list_needinv(ListBase *list)
+static short constraints_list_needinv(TransInfo *t, ListBase *list)
{
bConstraint *con;
@@ -2512,9 +2512,19 @@
/* only consider constraint if it is enabled, and has influence on result */
if ((con->flag & CONSTRAINT_DISABLE)==0 && (con->enforce!=0.0)) {
/* (affirmative) returns for specific constraints here... */
+ /* constraints that require this regardless */
if (con->type == CONSTRAINT_TYPE_CHILDOF) return 1;
if (con->type == CONSTRAINT_TYPE_FOLLOWPATH) return 1;
if (con->type == CONSTRAINT_TYPE_CLAMPTO) return 1;
+
+ /* constraints that require this only under special conditions */
+ if (con->type == CONSTRAINT_TYPE_ROTLIKE) {
+ /* CopyRot constraint only does this when rotating, and offset is on */
+ bRotateLikeConstraint *data = (bRotateLikeConstraint *)con->data;
+
+ if ((data->flag & ROTLIKE_OFFSET) && (t->mode == TFM_ROTATION))
+ return 1;
+ }
}
}
}
@@ -2524,7 +2534,7 @@
}
/* transcribe given object into TransData for Transforming */
-static void ObjectToTransData(TransData *td, Object *ob)
+static void ObjectToTransData(TransInfo *t, TransData *td, Object *ob)
{
Object *track;
ListBase fakecons = {NULL, NULL};
@@ -2540,7 +2550,7 @@
* inverse correction to stop it from screwing up space conversion
* matrix later
*/
- constinv= constraints_list_needinv(&ob->constraints);
+ constinv= constraints_list_needinv(t, &ob->constraints);
if (ob->track || constinv==0) {
track= ob->track;
ob->track= NULL;
@@ -3090,7 +3100,7 @@
CFRA= (int)(ik->val/G.scene->r.framelen);
do_ob_ipo(ob);
- ObjectToTransData(td, ob); // does where_is_object()
+ ObjectToTransData(t, td, ob); // does where_is_object()
td->flag= TD_SELECTED;
@@ -3113,7 +3123,7 @@
where_is_object(ob); // restore
}
else {
- ObjectToTransData(td, ob);
+ ObjectToTransData(t, td, ob);
td->tdi = NULL;
td->val = NULL;
td++;
@@ -3121,7 +3131,7 @@
}
}
else {
- ObjectToTransData(td, ob);
+ ObjectToTransData(t, td, ob);
td->tdi = NULL;
td->val = NULL;
td++;
More information about the Bf-blender-cvs
mailing list