[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18300] branches/blender2.5/blender/source /blender/editors: 2.5
Martin Poirier
theeth at yahoo.com
Sat Jan 3 23:16:00 CET 2009
Revision: 18300
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18300
Author: theeth
Date: 2009-01-03 23:15:59 +0100 (Sat, 03 Jan 2009)
Log Message:
-----------
2.5
Transform operator replay
Basic support working. Only saves mode and values, not constraint setup.
Removed event pointer from TransInfo (it's not available in operator exec). Replaced checks to event->modifiers to a functional modifier bitfield in TransInfo (that is, instead of checking for Shift, it checks for MOD_PRECISION) to make it remappable later.
Misc:
X-Mirror for mesh now working with transform
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
branches/blender2.5/blender/source/blender/editors/transform/transform.c
branches/blender2.5/blender/source/blender/editors/transform/transform.h
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
branches/blender2.5/blender/source/blender/editors/transform/transform_input.c
branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h 2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_mesh.h 2009-01-03 22:15:59 UTC (rev 18300)
@@ -89,6 +89,7 @@
void remake_editMesh(Scene *scene, Object *ob);
void free_editMesh(struct EditMesh *em);
+void recalc_editnormals(struct EditMesh *em);
void EM_init_index_arrays(struct EditMesh *em, int forVert, int forEdge, int forFace);
void EM_free_index_arrays(void);
Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h 2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h 2009-01-03 22:15:59 UTC (rev 18300)
@@ -127,8 +127,6 @@
extern void flipface(EditMesh *em, EditFace *efa); // flips for normal direction
extern int compareface(EditFace *vl1, EditFace *vl2);
-void recalc_editnormals(EditMesh *em);
-
/* flag for selection bits, *nor will be filled with normal for extrusion constraint */
/* return value defines if such normal was set */
extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor);
Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.c 2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.c 2009-01-03 22:15:59 UTC (rev 18300)
@@ -59,7 +59,10 @@
#include "DNA_userdef_types.h"
#include "DNA_view3d_types.h"
#include "DNA_space_types.h"
+#include "DNA_windowmanager_types.h"
+#include "RNA_access.h"
+
//#include "BIF_editview.h" /* arrows_move_cursor */
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -560,8 +563,6 @@
float mati[3][3] = {{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}};
char cmode = constraintModeToChar(t);
- t->event = event;
-
t->redraw |= handleMouseInput(t, &t->mouse, event);
if (event->type == MOUSEMOVE)
@@ -569,6 +570,8 @@
t->mval[0] = event->x - t->ar->winrct.xmin;
t->mval[1] = event->y - t->ar->winrct.ymin;
+ t->redraw = 1;
+
applyMouseInput(t, &t->mouse, t->mval, t->values);
}
@@ -577,9 +580,16 @@
/* enforce redraw of transform when modifiers are used */
case LEFTCTRLKEY:
case RIGHTCTRLKEY:
+ t->modifiers |= MOD_SNAP_GEARS;
t->redraw = 1;
break;
+ case LEFTSHIFTKEY:
+ case RIGHTSHIFTKEY:
+ t->modifiers |= MOD_CONSTRAINT_PLANE;
+ t->redraw = 1;
+ break;
+
case SPACEKEY:
if ((t->spacetype==SPACE_VIEW3D) && event->alt) {
#if 0 // TRANSFORM_FIX_ME
@@ -597,7 +607,6 @@
}
break;
-
case MIDDLEMOUSE:
if ((t->flag & T_NO_CONSTRAINT)==0) {
/* exception for switching to dolly, or trackball, in camera view */
@@ -610,7 +619,7 @@
}
}
else {
- t->flag |= T_MMB_PRESSED;
+ t->modifiers |= MOD_CONSTRAINT_SELECT;
if (t->con.mode & CON_APPLY) {
stopConstraint(t);
}
@@ -867,11 +876,22 @@
}
else {
switch (event->type){
- /* no redraw on release modifier keys! this makes sure you can assign the 'grid' still
- after releasing modifer key */
+ case LEFTSHIFTKEY:
+ case RIGHTSHIFTKEY:
+ t->modifiers &= ~MOD_CONSTRAINT_PLANE;
+ t->redraw = 1;
+ break;
+
+ case LEFTCTRLKEY:
+ case RIGHTCTRLKEY:
+ t->modifiers &= ~MOD_SNAP_GEARS;
+ /* no redraw on release modifier keys! this makes sure you can assign the 'grid' still
+ after releasing modifer key */
+ //t->redraw = 1;
+ break;
case MIDDLEMOUSE:
if ((t->flag & T_NO_CONSTRAINT)==0) {
- t->flag &= ~T_MMB_PRESSED;
+ t->modifiers &= ~MOD_CONSTRAINT_SELECT;
postSelectConstraint(t);
t->redraw = 1;
}
@@ -928,8 +948,19 @@
return success;
}
-void initTransform(bContext *C, TransInfo *t, int mode, int options, wmEvent *event)
+void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
{
+ RNA_int_set(op->ptr, "mode", t->mode);
+ RNA_int_set(op->ptr, "options", t->options);
+ RNA_float_set_array(op->ptr, "values", t->values);
+}
+
+void initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
+{
+ int mode = RNA_int_get(op->ptr, "mode");
+ int options = RNA_int_get(op->ptr, "options");
+ float values[4];
+
/* added initialize, for external calls to set stuff in TransInfo, like undo string */
t->state = TRANS_RUNNING;
@@ -1053,19 +1084,25 @@
initNodeTranslate(t);
break;
}
+
+
+
+ RNA_float_get_array(op->ptr, "values", values);
+
+ /* overwrite initial values if operator supplied a non-null vector */
+ if (!QuatIsNul(values))
+ {
+ QUATCOPY(t->values, values); /* vec-4 */
+ }
+
}
void transformApply(TransInfo *t)
{
- if (1) // MOUSE MOVE
+ if (t->redraw)
{
- if (t->flag & T_MMB_PRESSED)
+ if (t->modifiers & MOD_CONSTRAINT_SELECT)
t->con.mode |= CON_SELECT;
- t->redraw = 1;
- }
- if (t->redraw)
- {
- // RESET MOUSE MOVE
selectConstraint(t);
if (t->transform) {
@@ -1090,15 +1127,25 @@
int transformEnd(bContext *C, TransInfo *t)
{
+ int exit_code = OPERATOR_RUNNING_MODAL;
+
if (t->state != TRANS_RUNNING)
{
/* handle restoring objects */
- if(t->state == TRANS_CANCEL) {
+ if(t->state == TRANS_CANCEL)
+ {
+ exit_code = OPERATOR_CANCELLED;
+
+ /* TRANSFORM_FIX_ME fix jesty's node stuff, shouldn't be exceptional at this level */
if(t->spacetype == SPACE_NODE)
restoreTransNodes(t);
else
restoreTransObjects(t); // calls recalcData()
}
+ else
+ {
+ exit_code = OPERATOR_FINISHED;
+ }
/* free data */
postTrans(t);
@@ -1119,12 +1166,9 @@
else ED_undo_push(C, transform_to_undostr(t));
}
t->undostr= NULL;
-
- return 1;
}
- t->event = NULL;
- return 0;
+ return exit_code;
}
/* ************************** Manipulator init and main **************************** */
@@ -3980,6 +4024,7 @@
/* ---------------- Special Helpers for Various Settings ------------- */
+
/* This function returns the snapping 'mode' for Animation Editors only
* We cannot use the standard snapping due to NLA-strip scaling complexities.
*/
@@ -4008,14 +4053,15 @@
autosnap= snla->autosnap;
}
else {
- // FIXME: this still toggles the modes...
- if (t->event->ctrl)
- autosnap= SACTSNAP_STEP;
- else if (t->event->shift)
- autosnap= SACTSNAP_FRAME;
- else if (t->event->alt)
- autosnap= SACTSNAP_MARKER;
- else
+ // TRANSFORM_FIX_ME This needs to use proper defines for t->modifiers
+// // FIXME: this still toggles the modes...
+// if (ctrl)
+// autosnap= SACTSNAP_STEP;
+// else if (shift)
+// autosnap= SACTSNAP_FRAME;
+// else if (alt)
+// autosnap= SACTSNAP_MARKER;
+// else
autosnap= SACTSNAP_OFF;
}
Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h 2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h 2009-01-03 22:15:59 UTC (rev 18300)
@@ -46,6 +46,7 @@
struct bConstraint;
struct BezTriple;
struct wmOperatorType;
+struct wmOperator;
struct bContext;
struct wmEvent;
struct ARegion;
@@ -187,6 +188,7 @@
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) */
@@ -239,7 +241,6 @@
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 */
struct Object *obedit;
} TransInfo;
@@ -282,9 +283,6 @@
#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)
@@ -294,6 +292,13 @@
/* 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 */
@@ -342,7 +347,8 @@
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(struct bContext *C, TransInfo *t);
Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c 2009-01-03 21:10:48 UTC (rev 18299)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c 2009-01-03 22:15:59 UTC (rev 18300)
@@ -906,7 +906,6 @@
static void setNearestAxis3d(TransInfo *t)
{
- wmEvent *event = t->event;
float zfac;
float mvec[3], axis[3], proj[3];
float len[3];
@@ -950,7 +949,7 @@
}
if (len[0] <= len[1] && len[0] <= len[2]) {
- if (event->shift) {
+ if (t->modifiers & MOD_CONSTRAINT_PLANE) {
t->con.mode |= (CON_AXIS1|CON_AXIS2);
sprintf(t->con.text, " locking %s X axis", t->spacename);
}
@@ -960,7 +959,7 @@
}
}
else if (len[1] <= len[0] && len[1] <= len[2]) {
- if (event->shift) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list