struct bConstraint;
struct BezTriple;
struct wmOperatorType;
+struct wmOperator;
struct bContext;
struct wmEvent;
struct ARegion;
typedef struct TransSnap {
short modePoint;
short modeTarget;
+ int mode;
int status;
float snapPoint[3];
float snapTarget[3];
/*#endif*/
} TransData;
+typedef struct MouseInput {
+ void (*apply)(struct TransInfo *, struct MouseInput *, short [2], float [3]);
+
+ short imval[2]; /* initial mouse position */
+ char precision;
+ short precision_mval[2]; /* mouse position when precision key was pressed */
+ int center[2];
+ float factor;
+} MouseInput;
+
typedef struct TransInfo {
int mode; /* current mode */
int flag; /* generic flags for special behaviors */
+ int modifiers; /* special modifiers, by function, not key */
short state; /* current state (running, canceled,...)*/
int options; /* current context/options for transform */
float val; /* init value for some transformations (and rotation angle) */
float fac; /* factor for distance based transform */
int (*transform)(struct TransInfo *, short *);
/* transform function pointer */
- int (*handleEvent)(struct TransInfo *, struct wmEvent *event);
+ int (*handleEvent)(struct TransInfo *, struct wmEvent *);
/* event handler function pointer RETURN 1 if redraw is needed */
int total; /* total number of transformed data */
TransData *data; /* transformed data (array) */
TransSnap tsnap;
NumInput num; /* numerical input */
NDofInput ndof; /* ndof input */
+ MouseInput mouse; /* mouse input */
char redraw; /* redraw flag */
float propsize; /* proportional circle radius */
char proptext[20]; /* proportional falloff text */
float center[3]; /* center of transformation */
int center2d[2]; /* center in screen coordinates */
short imval[2]; /* initial mouse position */
- short shiftmval[2]; /* mouse position when shift was pressed */
short idx_max; /* maximum index on the input vector */
float snap[3]; /* Snapping Gears */
/*************** NEW STUFF *********************/
float values[4];
- struct bContext *context;
void *view;
struct ScrArea *sa;
struct ARegion *ar;
struct Scene *scene;
- struct wmEvent *event; /* last event, reset at the start of each transformApply and nulled at the transformEnd */
- short mval[2]; /* current mouse position */
+ short mval[2]; /* current mouse position */
+ struct Object *obedit;
} TransInfo;
#define T_POSE (1 << 2)
#define T_TEXTURE (1 << 3)
#define T_CAMERA (1 << 4)
- // when shift pressed, higher resolution transform. cannot rely on G.qual, need event!
-#define T_SHIFT_MOD (1 << 5)
// trans on points, having no rotation/scale
#define T_POINTS (1 << 6)
// for manipulator exceptions, like scaling using center point, drawing help lines
#define T_PROP_EDIT (1 << 11)
#define T_PROP_CONNECTED (1 << 12)
- /* if MMB is pressed or not */
-#define T_MMB_PRESSED (1 << 13)
-
#define T_V3D_ALIGN (1 << 14)
/* for 2d views like uv or ipo */
#define T_2D_EDIT (1 << 15)
/* auto-ik is on */
#define T_AUTOIK (1 << 18)
+/* TransInfo->modifiers */
+#define MOD_CONSTRAINT_SELECT 0x01
+#define MOD_PRECISION 0x02
+#define MOD_SNAP_GEARS 0x04
+#define MOD_CONSTRAINT_PLANE 0x08
+
+
/* ******************************************************************************** */
/* transinfo->con->mode */
void TFM_OT_transform(struct wmOperatorType *ot);
-void initTransform(struct bContext *C, struct TransInfo *t, int mode, int context, struct wmEvent *event);
+void initTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op, struct wmEvent *event);
+void saveTransform(struct bContext *C, struct TransInfo *t, struct wmOperator *op);
void transformEvent(TransInfo *t, struct wmEvent *event);
void transformApply(TransInfo *t);
-int transformEnd(TransInfo *t);
+int transformEnd(struct bContext *C, TransInfo *t);
void setTransformViewMatrices(TransInfo *t);
void convertViewVec(TransInfo *t, float *vec, short dx, short dy);
void flushTransUVs(TransInfo *t);
void flushTransParticles(TransInfo *t);
int clipUVTransform(TransInfo *t, float *vec, int resize);
+void flushTransNodes(TransInfo *t);
/*********************** exported from transform_manipulator.c ********** */
void draw_manipulator_ext(struct ScrArea *sa, int type, char axis, int col, float vec[3], float mat[][3]);
int usingSnappingNormal(TransInfo *t);
int validSnappingNormal(TransInfo *t);
+/********************** Mouse Input ******************************/
+
+typedef enum {
+ INPUT_NONE,
+ INPUT_VECTOR,
+ INPUT_SPRING,
+ INPUT_SPRING_FLIP,
+ INPUT_ANGLE,
+ INPUT_TRACKBALL,
+ INPUT_HORIZONTAL_RATIO,
+ INPUT_HORIZONTAL_ABSOLUTE,
+ INPUT_VERTICAL_RATIO,
+ INPUT_VERTICAL_ABSOLUTE
+} MouseInputMode;
+
+void initMouseInput(TransInfo *t, MouseInput *mi, int center[2], short mval[2]);
+void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode);
+int handleMouseInput(struct TransInfo *t, struct MouseInput *mi, struct wmEvent *event);
+void applyMouseInput(struct TransInfo *t, struct MouseInput *mi, short mval[2], float output[3]);
+
/*********************** Generics ********************************/
void initTransInfo(struct bContext *C, TransInfo *t, struct wmEvent *event);
void applyTransObjects(TransInfo *t);
void restoreTransObjects(TransInfo *t);
+void restoreTransNodes(TransInfo *t);
void recalcData(TransInfo *t);
void calculateCenter(TransInfo *t);