== LimitLoc Transform - Tweaks ==
* Made 'cob' be a stack var instead of allocating memory (as suggested by Martin) * Adjusted the position of "Trans" button in panel, and changed its name/tooltip to better describe its function * 'Active' constraint now draws brighter than other constraints... this is still not clear enough though.
This commit is contained in:
@@ -527,7 +527,7 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s
|
||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||
|
||||
/* rounded header */
|
||||
rb_col= (con->flag & CONSTRAINT_ACTIVE)?40:20;
|
||||
rb_col= (con->flag & CONSTRAINT_ACTIVE)?50:20;
|
||||
uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-1, width+40, 22, NULL, 5.0, 0.0,
|
||||
(con->flag & CONSTRAINT_EXPAND)?3:15 , rb_col-20, "");
|
||||
|
||||
@@ -1249,7 +1249,7 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s
|
||||
int togButWidth = 50;
|
||||
int textButWidth = ((width/2)-togButWidth);
|
||||
|
||||
height = 106;
|
||||
height = 136;
|
||||
uiDefBut(block, ROUNDBOX, B_DIFF, "", *xco-10, *yco-height, width+40,height-1, NULL, 5.0, 0.0, 12, rb_col, "");
|
||||
|
||||
/* Draw Pairs of LimitToggle+LimitValue */
|
||||
@@ -1283,11 +1283,11 @@ static void draw_constraint (uiBlock *block, ListBase *list, bConstraint *con, s
|
||||
uiDefButF(block, NUM, B_CONSTRAINT_TEST, "", *xco+(width-textButWidth-5), *yco-72, (textButWidth-5), 18, &(data->zmax), -1000, 1000, 0.1,0.5,"Highest z value to allow");
|
||||
uiBlockEndAlign(block);
|
||||
|
||||
// temp placement!!!
|
||||
uiDefButBitS(block, TOG, LIMIT_TRANSFORM, B_CONSTRAINT_TEST, "Trans", *xco+245, *yco-100, 50, 18, &data->flag2, 0, 24, 0, 0, "Only use during transform");
|
||||
/* special option(s) */
|
||||
uiDefButBitS(block, TOG, LIMIT_TRANSFORM, B_CONSTRAINT_TEST, "For Transform", *xco+(width/4), *yco-100, (width/2), 18, &data->flag2, 0, 24, 0, 0, "Transforms are affected by this constraint as well");
|
||||
|
||||
/* constraint space settings */
|
||||
draw_constraint_spaceselect(block, con, *xco, *yco-100, is_armature_owner(ob), -1);
|
||||
draw_constraint_spaceselect(block, con, *xco, *yco-130, is_armature_owner(ob), -1);
|
||||
}
|
||||
break;
|
||||
case CONSTRAINT_TYPE_ROTLIMIT:
|
||||
|
||||
@@ -1318,23 +1318,23 @@ static void constraintTransLim(TransInfo *t, TransData *td)
|
||||
{
|
||||
if (td->con) {
|
||||
bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT);
|
||||
bConstraintOb *cob;
|
||||
bConstraintOb cob;
|
||||
bConstraint *con;
|
||||
|
||||
/* Make a temporary bConstraintOb for using these limit constraints
|
||||
* - they only care that cob->matrix is correctly set ;-)
|
||||
* - current space should be local
|
||||
*/
|
||||
cob= MEM_callocN(sizeof(bConstraintOb), "bConstraintOb-Transform");
|
||||
Mat4One(cob->matrix);
|
||||
memset(&cob, 0, sizeof(bConstraintOb));
|
||||
Mat4One(cob.matrix);
|
||||
if (td->tdi) {
|
||||
TransDataIpokey *tdi= td->tdi;
|
||||
cob->matrix[3][0]= tdi->locx[0];
|
||||
cob->matrix[3][1]= tdi->locy[0];
|
||||
cob->matrix[3][2]= tdi->locz[0];
|
||||
cob.matrix[3][0]= tdi->locx[0];
|
||||
cob.matrix[3][1]= tdi->locy[0];
|
||||
cob.matrix[3][2]= tdi->locz[0];
|
||||
}
|
||||
else {
|
||||
VECCOPY(cob->matrix[3], td->loc);
|
||||
VECCOPY(cob.matrix[3], td->loc);
|
||||
}
|
||||
|
||||
/* Evaluate valid constraints */
|
||||
@@ -1351,8 +1351,8 @@ static void constraintTransLim(TransInfo *t, TransData *td)
|
||||
/* do space conversions */
|
||||
if (con->ownspace == CONSTRAINT_SPACE_WORLD) {
|
||||
/* just multiply by td->mtx (this should be ok) */
|
||||
Mat4CpyMat4(tmat, cob->matrix);
|
||||
Mat4MulMat34(cob->matrix, td->mtx, tmat); // checkme
|
||||
Mat4CpyMat4(tmat, cob.matrix);
|
||||
Mat4MulMat34(cob.matrix, td->mtx, tmat); // checkme
|
||||
}
|
||||
else if (con->ownspace != CONSTRAINT_SPACE_LOCAL) {
|
||||
/* skip... incompatable spacetype */
|
||||
@@ -1360,28 +1360,27 @@ static void constraintTransLim(TransInfo *t, TransData *td)
|
||||
}
|
||||
|
||||
/* do constraint */
|
||||
cti->evaluate_constraint(con, cob, NULL);
|
||||
cti->evaluate_constraint(con, &cob, NULL);
|
||||
|
||||
/* convert spaces again */
|
||||
if (con->ownspace == CONSTRAINT_SPACE_WORLD) {
|
||||
/* just multiply by td->mtx (this should be ok) */
|
||||
Mat4CpyMat4(tmat, cob->matrix);
|
||||
Mat4MulMat34(cob->matrix, td->smtx, tmat); // checkme
|
||||
Mat4CpyMat4(tmat, cob.matrix);
|
||||
Mat4MulMat34(cob.matrix, td->smtx, tmat); // checkme
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* copy results from cob->matrix, and free */
|
||||
/* copy results from cob->matrix */
|
||||
if (td->tdi) {
|
||||
TransDataIpokey *tdi= td->tdi;
|
||||
tdi->locx[0]= cob->matrix[3][0];
|
||||
tdi->locy[0]= cob->matrix[3][1];
|
||||
tdi->locz[0]= cob->matrix[3][2];
|
||||
tdi->locx[0]= cob.matrix[3][0];
|
||||
tdi->locy[0]= cob.matrix[3][1];
|
||||
tdi->locz[0]= cob.matrix[3][2];
|
||||
}
|
||||
else {
|
||||
VECCOPY(td->loc, cob->matrix[3]);
|
||||
VECCOPY(td->loc, cob.matrix[3]);
|
||||
}
|
||||
MEM_freeN(cob);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user