Another Transform todo: correct Undo names for using Transform.
Martin; I've added calls like: BIF_TransformSetUndo("Add Duplicate"); In advance of calling transform itself, to indicate that this is the string name to be used for Undo, and also has to be done on ESC. To make that possible I had to add a memset() to zero the global struct TransInfo. Nicely done with if(Trans.mode==TRANS_INIT) Not sure how this relates to setting constraints in advance... I always found it tricky to work a non-initalized global struct. :)
This commit is contained in:
parent
744bb6f19a
commit
eec4e32714
@ -36,6 +36,7 @@
|
||||
/* ******************** Macros & Prototypes *********************** */
|
||||
|
||||
/* MODE AND NUMINPUT FLAGS */
|
||||
#define TFM_INIT -1
|
||||
#define TFM_REPEAT 0
|
||||
#define TFM_TRANSLATION 1
|
||||
#define TFM_ROTATION 2
|
||||
@ -74,6 +75,8 @@ void BIF_setLocalLockConstraint(char axis, char *text);
|
||||
void BIF_drawConstraint(void);
|
||||
void BIF_drawPropCircle(void);
|
||||
|
||||
void BIF_TransformSetUndo(char *str);
|
||||
|
||||
/* view3d manipulators */
|
||||
void ManipulatorTransform(int mode);
|
||||
|
||||
|
@ -152,6 +152,8 @@ typedef struct TransInfo {
|
||||
|
||||
float vec[3]; /* translation, to show for widget */
|
||||
float mat[3][3]; /* rot/rescale, to show for widget */
|
||||
|
||||
char *undostr; /* if set, uses this string for undo */
|
||||
} TransInfo;
|
||||
|
||||
|
||||
|
@ -1996,6 +1996,7 @@ void extrude_armature(void)
|
||||
|
||||
/* Transform the endpoints */
|
||||
countall();
|
||||
BIF_TransformSetUndo("Extrude");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
allqueue(REDRAWBUTSOBJECT, 0);
|
||||
@ -2159,7 +2160,7 @@ void adduplicate_armature(void)
|
||||
curBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
|
||||
}
|
||||
|
||||
|
||||
BIF_TransformSetUndo("Add Duplicate");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
allqueue(REDRAWBUTSOBJECT, 0);
|
||||
|
@ -2793,7 +2793,10 @@ void addvert_Nurb(int mode)
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
|
||||
if(mode=='e') Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
if(mode=='e') {
|
||||
BIF_TransformSetUndo("Extrude");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
}
|
||||
else while(get_mbut()&R_MOUSE) BIF_wait_for_statechange();
|
||||
|
||||
if(mode!='e') {
|
||||
@ -2828,8 +2831,8 @@ void extrude_nurb()
|
||||
|
||||
if(ok) {
|
||||
makeDispList(G.obedit);
|
||||
BIF_undo_push("Extrude");
|
||||
countall();
|
||||
BIF_TransformSetUndo("Extrude");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
}
|
||||
}
|
||||
@ -3058,6 +3061,7 @@ void adduplicate_nurb()
|
||||
adduplicateflagNurb(1);
|
||||
|
||||
countall();
|
||||
BIF_TransformSetUndo("Add Duplicate");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
}
|
||||
|
||||
|
@ -312,6 +312,7 @@ void adduplicate_mball()
|
||||
ml= ml->prev;
|
||||
}
|
||||
|
||||
BIF_TransformSetUndo("Add Duplicate");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
allqueue(REDRAWBUTSEDIT, 0);
|
||||
}
|
||||
|
@ -437,6 +437,7 @@ void adduplicate_mesh(void)
|
||||
|
||||
waitcursor(0);
|
||||
countall();
|
||||
BIF_TransformSetUndo("Add Duplicate");
|
||||
Transform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
}
|
||||
|
||||
|
@ -580,6 +580,7 @@ void extrude_mesh(void)
|
||||
countall();
|
||||
|
||||
/* individual faces? */
|
||||
BIF_TransformSetUndo("Extrude");
|
||||
if(nr==2) {
|
||||
Transform(TFM_SHRINKFATTEN, CTX_NO_PET|CTX_NO_NOR_RECALC);
|
||||
}
|
||||
|
@ -4132,8 +4132,10 @@ void adduplicate(float *dtrans)
|
||||
clear_id_newpoins();
|
||||
|
||||
countall();
|
||||
if(dtrans==0) Transform(TFM_TRANSLATION, CTX_NONE);
|
||||
|
||||
if(dtrans==0) {
|
||||
BIF_TransformSetUndo("Add Duplicate");
|
||||
Transform(TFM_TRANSLATION, CTX_NONE);
|
||||
}
|
||||
set_active_base(BASACT);
|
||||
|
||||
allqueue(REDRAWNLA, 0);
|
||||
|
@ -121,7 +121,7 @@ extern void helpline(float *vec);
|
||||
#include "transform.h"
|
||||
|
||||
/* GLOBAL VARIABLE THAT SHOULD MOVED TO SCREEN MEMBER OR SOMETHING */
|
||||
TransInfo Trans;
|
||||
TransInfo Trans = {TFM_INIT, 0}; // enforce init on first usage
|
||||
int LastMode = TFM_TRANSLATION;
|
||||
|
||||
#define TRANS_CANCEL 2
|
||||
@ -188,6 +188,37 @@ static void view_editmove(unsigned short event)
|
||||
}
|
||||
}
|
||||
|
||||
static char *transform_to_undostr(TransInfo *t)
|
||||
{
|
||||
switch (t->mode) {
|
||||
case TFM_TRANSLATION:
|
||||
return "Translate";
|
||||
case TFM_ROTATION:
|
||||
return "Rotate";
|
||||
case TFM_RESIZE:
|
||||
return "Scale";
|
||||
case TFM_TOSPHERE:
|
||||
return "To Sphere";
|
||||
case TFM_SHEAR:
|
||||
return "Shear";
|
||||
case TFM_WARP:
|
||||
return "Warp";
|
||||
case TFM_SHRINKFATTEN:
|
||||
return "Shrink/Fatten";
|
||||
case TFM_TILT:
|
||||
return "Tilt";
|
||||
case TFM_TRACKBALL:
|
||||
return "Trackball";
|
||||
case TFM_PUSHPULL:
|
||||
return "Push/Pull";
|
||||
case TFM_CREASE:
|
||||
return "Crease";
|
||||
}
|
||||
return "Transform";
|
||||
}
|
||||
|
||||
/* ************************************************* */
|
||||
|
||||
void Transform(int mode, int context)
|
||||
{
|
||||
int ret_val = 0;
|
||||
@ -199,10 +230,8 @@ void Transform(int mode, int context)
|
||||
/* If MMB is pressed or not */
|
||||
char mmb_press = 0;
|
||||
|
||||
/*joeedh -> hopefully may be what makes the old transform() constant*/
|
||||
/* ton: I doubt, but it doesnt harm for now. shouldnt be needed though */
|
||||
areawinset(curarea->win);
|
||||
|
||||
/* added initialize, for external calls to set stuff in TransInfo, like undo string */
|
||||
if(Trans.mode==TFM_INIT) memset(&Trans, 0, sizeof(TransInfo));
|
||||
Mat3One(mati);
|
||||
|
||||
/* stupid PET initialisation code */
|
||||
@ -540,12 +569,16 @@ void Transform(int mode, int context)
|
||||
}
|
||||
|
||||
|
||||
/* handle restoring objects and Undo */
|
||||
if(ret_val == TRANS_CANCEL) {
|
||||
restoreTransObjects(&Trans);
|
||||
if(Trans.undostr) BIF_undo_push(Trans.undostr);
|
||||
}
|
||||
else {
|
||||
BIF_undo_push("Transform");
|
||||
if(Trans.undostr) BIF_undo_push(Trans.undostr);
|
||||
else BIF_undo_push(transform_to_undostr(&Trans));
|
||||
}
|
||||
Trans.undostr= NULL;
|
||||
|
||||
/* free data, reset vars */
|
||||
postTrans(&Trans);
|
||||
@ -576,7 +609,9 @@ void ManipulatorTransform(int mode)
|
||||
short pmval[2] = {0, 0}, mval[2], val;
|
||||
unsigned short event;
|
||||
|
||||
|
||||
/* added initialize, for external calls to set stuff in TransInfo, like undo string */
|
||||
if(Trans.mode==TFM_INIT) memset(&Trans, 0, sizeof(TransInfo));
|
||||
|
||||
/* stupid PET initialisation code */
|
||||
/* START */
|
||||
if (Trans.propsize == 0.0f) {
|
||||
@ -708,7 +743,7 @@ void ManipulatorTransform(int mode)
|
||||
restoreTransObjects(&Trans);
|
||||
}
|
||||
else {
|
||||
BIF_undo_push("Transform");
|
||||
BIF_undo_push(transform_to_undostr(&Trans));
|
||||
}
|
||||
|
||||
/* free data, reset vars */
|
||||
@ -2161,3 +2196,11 @@ void Mirror(short mode)
|
||||
allqueue(REDRAWBUTSOBJECT, 0);
|
||||
scrarea_queue_headredraw(curarea);
|
||||
}
|
||||
|
||||
|
||||
void BIF_TransformSetUndo(char *str)
|
||||
{
|
||||
Trans.undostr= str;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user