2008-12-29 04:14:27 +00:00
|
|
|
/**
|
2009-06-23 00:09:26 +00:00
|
|
|
* $Id$
|
2008-12-29 04:14:27 +00:00
|
|
|
*
|
|
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*
|
|
|
|
* Contributor(s): none yet.
|
|
|
|
*
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
#include "DNA_scene_types.h"
|
2008-12-29 04:14:27 +00:00
|
|
|
#include "DNA_space_types.h"
|
2009-01-03 22:15:59 +00:00
|
|
|
#include "DNA_windowmanager_types.h"
|
2008-12-29 04:14:27 +00:00
|
|
|
|
|
|
|
#include "RNA_access.h"
|
|
|
|
#include "RNA_define.h"
|
2009-03-07 10:28:08 +00:00
|
|
|
#include "RNA_enum_types.h"
|
2008-12-29 04:14:27 +00:00
|
|
|
|
|
|
|
#include "BLI_arithb.h"
|
|
|
|
|
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
#include "BKE_context.h"
|
|
|
|
|
|
|
|
#include "WM_api.h"
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
#include "UI_interface.h"
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
#include "ED_screen.h"
|
|
|
|
|
|
|
|
#include "transform.h"
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
typedef struct TransformModeItem
|
|
|
|
{
|
|
|
|
char *idname;
|
|
|
|
int mode;
|
|
|
|
} TransformModeItem;
|
|
|
|
|
|
|
|
static float VecOne[3] = {1, 1, 1};
|
|
|
|
|
|
|
|
/* need constants for this */
|
|
|
|
EnumPropertyItem proportional_mode_types[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{0, "OFF", 0, "Off", ""},
|
|
|
|
{1, "ON", 0, "On", ""},
|
|
|
|
{2, "CONNECTED", 0, "Connected", ""},
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
2009-03-06 15:50:15 +00:00
|
|
|
};
|
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
EnumPropertyItem snap_mode_types[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{SCE_SNAP_TARGET_CLOSEST, "CLOSEST", 0, "Closest", ""},
|
|
|
|
{SCE_SNAP_TARGET_CENTER, "CENTER", 0, "Center", ""},
|
|
|
|
{SCE_SNAP_TARGET_MEDIAN, "MEDIAN", 0, "Median", ""},
|
|
|
|
{SCE_SNAP_TARGET_ACTIVE, "ACTIVE", 0, "Active", ""},
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
2009-03-29 19:52:53 +00:00
|
|
|
};
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
EnumPropertyItem proportional_falloff_types[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{PROP_SMOOTH, "SMOOTH", 0, "Smooth", ""},
|
|
|
|
{PROP_SPHERE, "SPHERE", 0, "Sphere", ""},
|
|
|
|
{PROP_ROOT, "ROOT", 0, "Root", ""},
|
|
|
|
{PROP_SHARP, "SHARP", 0, "Sharp", ""},
|
|
|
|
{PROP_LIN, "LINEAR", 0, "Linear", ""},
|
|
|
|
{PROP_CONST, "CONSTANT", 0, "Constant", ""},
|
|
|
|
{PROP_RANDOM, "RANDOM", 0, "Random", ""},
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
2009-03-06 15:50:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
char OP_TRANSLATION[] = "TFM_OT_translation";
|
|
|
|
char OP_ROTATION[] = "TFM_OT_rotation";
|
|
|
|
char OP_TOSPHERE[] = "TFM_OT_tosphere";
|
|
|
|
char OP_RESIZE[] = "TFM_OT_resize";
|
|
|
|
char OP_SHEAR[] = "TFM_OT_shear";
|
|
|
|
char OP_WARP[] = "TFM_OT_warp";
|
|
|
|
char OP_SHRINK_FATTEN[] = "TFM_OT_shrink_fatten";
|
|
|
|
char OP_TILT[] = "TFM_OT_tilt";
|
2009-07-09 02:45:48 +00:00
|
|
|
char OP_TRACKBALL[] = "TFM_OT_trackball";
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
TransformModeItem transform_modes[] =
|
|
|
|
{
|
|
|
|
{OP_TRANSLATION, TFM_TRANSLATION},
|
|
|
|
{OP_ROTATION, TFM_ROTATION},
|
|
|
|
{OP_TOSPHERE, TFM_TOSPHERE},
|
|
|
|
{OP_RESIZE, TFM_RESIZE},
|
|
|
|
{OP_SHEAR, TFM_SHEAR},
|
|
|
|
{OP_WARP, TFM_WARP},
|
|
|
|
{OP_SHRINK_FATTEN, TFM_SHRINKFATTEN},
|
|
|
|
{OP_TILT, TFM_TILT},
|
2009-07-09 02:45:48 +00:00
|
|
|
{OP_TRACKBALL, TFM_TRACKBALL},
|
2009-03-06 15:50:15 +00:00
|
|
|
{NULL, 0}
|
|
|
|
};
|
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
static int select_orientation_exec(bContext *C, wmOperator *op)
|
|
|
|
{
|
2009-02-04 11:52:16 +00:00
|
|
|
int orientation = RNA_enum_get(op->ptr, "orientation");
|
|
|
|
int custom_index= RNA_int_get(op->ptr, "custom_index");;
|
|
|
|
|
|
|
|
if(orientation == V3D_MANIP_CUSTOM)
|
|
|
|
orientation += custom_index;
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-02-04 11:52:16 +00:00
|
|
|
BIF_selectTransformOrientationValue(C, orientation);
|
|
|
|
|
|
|
|
return OPERATOR_FINISHED;
|
2009-01-18 21:36:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int select_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
|
|
|
{
|
2009-04-22 18:39:44 +00:00
|
|
|
uiPopupMenu *pup;
|
|
|
|
uiLayout *layout;
|
2009-07-09 02:45:48 +00:00
|
|
|
|
UI: Layout Engine
* Buttons are now created first, and after that the layout is computed.
This means the layout engine now works at button level, and makes it
easier to write templates. Otherwise you had to store all info and
create the buttons later.
* Added interface_templates.c as a separate file to put templates in.
These can contain regular buttons, and can be put in a Free layout,
which means you can specify manual coordinates, but still get nested
correct inside other layouts.
* API was changed to allow better nesting. Previously items were added
in the last added layout specifier, i.e. one level up in the layout
hierarchy. This doesn't work well in always, so now when creating things
like rows or columns it always returns a layout which you have to add
the items in. All py scripts were updated to follow this.
* Computing the layout now goes in two passes, first estimating the
required width/height of all nested layouts, and then in the second
pass using the results of that to decide on the actual locations.
* Enum and array buttons now follow the direction of the layout, i.e.
they are vertical or horizontal depending if they are in a column or row.
* Color properties now get a color picker, and only get the additional
RGB sliders with Expand=True.
* File/directory string properties now get a button next to them for
opening the file browse, though this is not implemented yet.
* Layout items can now be aligned, set align=True when creating a column,
row, etc.
* Buttons now get a minimum width of one icon (avoids squashing icon
buttons).
* Moved some more space variables into Style.
2009-05-15 11:19:59 +00:00
|
|
|
pup= uiPupMenuBegin(C, "Orientation", 0);
|
2009-04-22 18:39:44 +00:00
|
|
|
layout= uiPupMenuLayout(pup);
|
|
|
|
BIF_menuTransformOrientation(C, layout, NULL);
|
|
|
|
uiPupMenuEnd(C, pup);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-02-04 11:52:16 +00:00
|
|
|
return OPERATOR_CANCELLED;
|
2009-01-18 21:36:38 +00:00
|
|
|
}
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
void TFM_OT_select_orientation(struct wmOperatorType *ot)
|
|
|
|
{
|
2009-02-04 11:52:16 +00:00
|
|
|
static EnumPropertyItem orientation_items[]= {
|
2009-06-16 00:52:21 +00:00
|
|
|
{V3D_MANIP_GLOBAL, "GLOBAL", 0, "Global", ""},
|
|
|
|
{V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""},
|
|
|
|
{V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""},
|
|
|
|
{V3D_MANIP_VIEW, "VIEW", 0, "View", ""},
|
|
|
|
{V3D_MANIP_CUSTOM, "CUSTOM", 0, "Custom", ""},
|
|
|
|
{0, NULL, 0, NULL, NULL}};
|
2009-02-04 11:52:16 +00:00
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Select Orientation";
|
|
|
|
ot->idname = "TFM_OT_select_orientation";
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = select_orientation_invoke;
|
|
|
|
ot->exec = select_orientation_exec;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-02-04 11:52:16 +00:00
|
|
|
RNA_def_enum(ot->srna, "orientation", orientation_items, V3D_MANIP_CUSTOM, "Orientation", "DOC_BROKEN");
|
|
|
|
RNA_def_int(ot->srna, "custom_index", 0, 0, INT_MAX, "Custom Index", "", 0, INT_MAX);
|
2009-01-18 21:36:38 +00:00
|
|
|
}
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
static void transformops_exit(bContext *C, wmOperator *op)
|
|
|
|
{
|
2009-01-03 22:15:59 +00:00
|
|
|
saveTransform(C, op->customdata, op);
|
2008-12-29 04:14:27 +00:00
|
|
|
MEM_freeN(op->customdata);
|
|
|
|
op->customdata = NULL;
|
|
|
|
}
|
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
static int transformops_data(bContext *C, wmOperator *op, wmEvent *event)
|
2008-12-29 04:14:27 +00:00
|
|
|
{
|
2009-03-28 20:46:38 +00:00
|
|
|
int retval = 1;
|
2009-01-03 22:15:59 +00:00
|
|
|
if (op->customdata == NULL)
|
|
|
|
{
|
|
|
|
TransInfo *t = MEM_callocN(sizeof(TransInfo), "TransInfo data");
|
2009-03-06 15:50:15 +00:00
|
|
|
TransformModeItem *tmode;
|
|
|
|
int mode = -1;
|
|
|
|
|
|
|
|
for (tmode = transform_modes; tmode->idname; tmode++)
|
|
|
|
{
|
|
|
|
if (op->type->idname == tmode->idname)
|
|
|
|
{
|
|
|
|
mode = tmode->mode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode == -1)
|
|
|
|
{
|
|
|
|
mode = RNA_int_get(op->ptr, "mode");
|
|
|
|
}
|
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
retval = initTransform(C, t, op, event, mode);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
/* store data */
|
|
|
|
op->customdata = t;
|
|
|
|
}
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
return retval; /* return 0 on error */
|
2008-12-29 04:14:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int transform_modal(bContext *C, wmOperator *op, wmEvent *event)
|
|
|
|
{
|
2009-01-03 22:15:59 +00:00
|
|
|
int exit_code;
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
TransInfo *t = op->customdata;
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
transformEvent(t, event);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-07 16:52:18 +00:00
|
|
|
transformApply(C, t);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
exit_code = transformEnd(C, t);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
if (exit_code != OPERATOR_RUNNING_MODAL)
|
2008-12-29 04:14:27 +00:00
|
|
|
{
|
|
|
|
transformops_exit(C, op);
|
|
|
|
}
|
2009-01-03 22:15:59 +00:00
|
|
|
|
|
|
|
return exit_code;
|
2008-12-29 04:14:27 +00:00
|
|
|
}
|
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
static int transform_cancel(bContext *C, wmOperator *op)
|
2008-12-29 04:14:27 +00:00
|
|
|
{
|
|
|
|
TransInfo *t = op->customdata;
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-03 22:15:59 +00:00
|
|
|
t->state = TRANS_CANCEL;
|
|
|
|
transformEnd(C, t);
|
|
|
|
transformops_exit(C, op);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
return OPERATOR_CANCELLED;
|
2009-01-03 22:15:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int transform_exec(bContext *C, wmOperator *op)
|
|
|
|
{
|
|
|
|
TransInfo *t;
|
|
|
|
|
2009-03-28 20:46:38 +00:00
|
|
|
if (!transformops_data(C, op, NULL))
|
|
|
|
{
|
|
|
|
return OPERATOR_CANCELLED;
|
|
|
|
}
|
2009-01-03 22:15:59 +00:00
|
|
|
|
|
|
|
t = op->customdata;
|
|
|
|
|
|
|
|
t->options |= CTX_AUTOCONFIRM;
|
|
|
|
|
2009-01-07 16:52:18 +00:00
|
|
|
transformApply(C, t);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-31 17:11:42 +00:00
|
|
|
transformEnd(C, t);
|
2008-12-29 04:14:27 +00:00
|
|
|
|
|
|
|
transformops_exit(C, op);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
return OPERATOR_FINISHED;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
|
|
|
{
|
2009-03-28 20:46:38 +00:00
|
|
|
if (!transformops_data(C, op, event))
|
|
|
|
{
|
|
|
|
return OPERATOR_CANCELLED;
|
|
|
|
}
|
2008-12-29 04:14:27 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
if(RNA_property_is_set(op->ptr, "value")) {
|
2008-12-29 04:14:27 +00:00
|
|
|
return transform_exec(C, op);
|
|
|
|
}
|
|
|
|
else {
|
2009-03-06 15:50:15 +00:00
|
|
|
TransInfo *t = op->customdata;
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
/* add temp handler */
|
|
|
|
WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
t->flag |= T_MODAL; // XXX meh maybe somewhere else
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
return OPERATOR_RUNNING_MODAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
void Properties_Proportional(struct wmOperatorType *ot)
|
|
|
|
{
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_enum(ot->srna, "proportional", proportional_mode_types, 0, "Proportional Editing", "");
|
2009-03-07 10:28:08 +00:00
|
|
|
RNA_def_enum(ot->srna, "proportional_editing_falloff", prop_mode_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
|
2009-03-06 15:50:15 +00:00
|
|
|
RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
|
2009-03-29 19:52:53 +00:00
|
|
|
}
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
void Properties_Snapping(struct wmOperatorType *ot, short align)
|
|
|
|
{
|
|
|
|
RNA_def_boolean(ot->srna, "snap", 0, "Snap to Point", "");
|
|
|
|
RNA_def_enum(ot->srna, "snap_mode", snap_mode_types, 0, "Mode", "");
|
|
|
|
RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
if (align)
|
|
|
|
{
|
|
|
|
RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", "");
|
|
|
|
RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX);
|
|
|
|
}
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Properties_Constraints(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", "");
|
|
|
|
RNA_def_int(ot->srna, "constraint_orientation", 0, 0, INT_MAX, "Constraint Orientation", "", 0, INT_MAX);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_translation(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Translation";
|
|
|
|
ot->idname = OP_TRANSLATION;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
|
|
|
RNA_def_float_vector(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
|
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Constraints(ot);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
Properties_Snapping(ot, 1);
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_resize(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Resize";
|
|
|
|
ot->idname = OP_RESIZE;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
|
|
|
RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
|
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Constraints(ot);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
Properties_Snapping(ot, 0);
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
2009-07-09 02:45:48 +00:00
|
|
|
|
|
|
|
void TFM_OT_trackball(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Trackball";
|
|
|
|
ot->idname = OP_TRACKBALL;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
|
|
|
RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX);
|
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
|
|
|
}
|
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
void TFM_OT_rotation(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Rotation";
|
|
|
|
ot->idname = OP_ROTATION;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Constraints(ot);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-29 19:52:53 +00:00
|
|
|
Properties_Snapping(ot, 0);
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_tilt(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Tilt";
|
|
|
|
ot->idname = OP_TILT;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_editcurve;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Constraints(ot);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_warp(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Warp";
|
|
|
|
ot->idname = OP_WARP;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", 0, 1);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
// XXX Shear axis?
|
|
|
|
// Properties_Constraints(ot);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_shear(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Shear";
|
|
|
|
ot->idname = OP_SHEAR;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
// XXX Shear axis?
|
|
|
|
// Properties_Constraints(ot);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_shrink_fatten(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Shrink/Fatten";
|
|
|
|
ot->idname = OP_SHRINK_FATTEN;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_editmesh;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void TFM_OT_tosphere(struct wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name = "To Sphere";
|
|
|
|
ot->idname = OP_TOSPHERE;
|
|
|
|
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
|
|
|
ot->cancel = transform_cancel;
|
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-03-10 18:10:24 +00:00
|
|
|
RNA_def_float_percentage(ot->srna, "value", 0, 0, 1, "Percentage", "", 0, 1);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
Properties_Proportional(ot);
|
|
|
|
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
}
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
void TFM_OT_transform(struct wmOperatorType *ot)
|
|
|
|
{
|
2009-01-18 21:36:38 +00:00
|
|
|
static EnumPropertyItem transform_mode_types[] = {
|
2009-06-16 00:52:21 +00:00
|
|
|
{TFM_INIT, "INIT", 0, "Init", ""},
|
|
|
|
{TFM_DUMMY, "DUMMY", 0, "Dummy", ""},
|
|
|
|
{TFM_TRANSLATION, "TRANSLATION", 0, "Translation", ""},
|
|
|
|
{TFM_ROTATION, "ROTATION", 0, "Rotation", ""},
|
|
|
|
{TFM_RESIZE, "RESIZE", 0, "Resize", ""},
|
|
|
|
{TFM_TOSPHERE, "TOSPHERE", 0, "Tosphere", ""},
|
|
|
|
{TFM_SHEAR, "SHEAR", 0, "Shear", ""},
|
|
|
|
{TFM_WARP, "WARP", 0, "Warp", ""},
|
|
|
|
{TFM_SHRINKFATTEN, "SHRINKFATTEN", 0, "Shrinkfatten", ""},
|
|
|
|
{TFM_TILT, "TILT", 0, "Tilt", ""},
|
|
|
|
{TFM_TRACKBALL, "TRACKBALL", 0, "Trackball", ""},
|
|
|
|
{TFM_PUSHPULL, "PUSHPULL", 0, "Pushpull", ""},
|
|
|
|
{TFM_CREASE, "CREASE", 0, "Crease", ""},
|
|
|
|
{TFM_MIRROR, "MIRROR", 0, "Mirror", ""},
|
|
|
|
{TFM_BONESIZE, "BONESIZE", 0, "Bonesize", ""},
|
|
|
|
{TFM_BONE_ENVELOPE, "BONE_ENVELOPE", 0, "Bone_Envelope", ""},
|
|
|
|
{TFM_CURVE_SHRINKFATTEN, "CURVE_SHRINKFATTEN", 0, "Curve_Shrinkfatten", ""},
|
|
|
|
{TFM_BONE_ROLL, "BONE_ROLL", 0, "Bone_Roll", ""},
|
|
|
|
{TFM_TIME_TRANSLATE, "TIME_TRANSLATE", 0, "Time_Translate", ""},
|
|
|
|
{TFM_TIME_SLIDE, "TIME_SLIDE", 0, "Time_Slide", ""},
|
|
|
|
{TFM_TIME_SCALE, "TIME_SCALE", 0, "Time_Scale", ""},
|
|
|
|
{TFM_TIME_EXTEND, "TIME_EXTEND", 0, "Time_Extend", ""},
|
|
|
|
{TFM_BAKE_TIME, "BAKE_TIME", 0, "Bake_Time", ""},
|
|
|
|
{TFM_BEVEL, "BEVEL", 0, "Bevel", ""},
|
|
|
|
{TFM_BWEIGHT, "BWEIGHT", 0, "Bweight", ""},
|
|
|
|
{TFM_ALIGN, "ALIGN", 0, "Align", ""},
|
|
|
|
{0, NULL, 0, NULL, NULL}
|
2009-01-18 21:36:38 +00:00
|
|
|
};
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
/* identifiers */
|
|
|
|
ot->name = "Transform";
|
|
|
|
ot->idname = "TFM_OT_transform";
|
2009-02-04 11:52:16 +00:00
|
|
|
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
2008-12-29 04:14:27 +00:00
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->invoke = transform_invoke;
|
|
|
|
ot->exec = transform_exec;
|
|
|
|
ot->modal = transform_modal;
|
2009-01-03 22:15:59 +00:00
|
|
|
ot->cancel = transform_cancel;
|
2008-12-29 04:14:27 +00:00
|
|
|
ot->poll = ED_operator_areaactive;
|
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
RNA_def_enum(ot->srna, "mode", transform_mode_types, 0, "Mode", "");
|
2009-01-10 19:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX);
|
2009-01-10 19:45:48 +00:00
|
|
|
|
2009-03-19 19:03:38 +00:00
|
|
|
Properties_Proportional(ot);
|
2009-03-30 18:26:58 +00:00
|
|
|
RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
|
2009-03-06 15:50:15 +00:00
|
|
|
|
|
|
|
RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", "");
|
|
|
|
RNA_def_int(ot->srna, "constraint_orientation", 0, 0, INT_MAX, "Constraint Orientation", "", 0, INT_MAX);
|
2008-12-29 04:14:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void transform_operatortypes(void)
|
|
|
|
{
|
|
|
|
WM_operatortype_append(TFM_OT_transform);
|
2009-03-06 15:50:15 +00:00
|
|
|
WM_operatortype_append(TFM_OT_translation);
|
|
|
|
WM_operatortype_append(TFM_OT_rotation);
|
|
|
|
WM_operatortype_append(TFM_OT_tosphere);
|
|
|
|
WM_operatortype_append(TFM_OT_resize);
|
|
|
|
WM_operatortype_append(TFM_OT_shear);
|
|
|
|
WM_operatortype_append(TFM_OT_warp);
|
|
|
|
WM_operatortype_append(TFM_OT_shrink_fatten);
|
|
|
|
WM_operatortype_append(TFM_OT_tilt);
|
2009-07-09 02:45:48 +00:00
|
|
|
WM_operatortype_append(TFM_OT_trackball);
|
2009-03-06 15:50:15 +00:00
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
WM_operatortype_append(TFM_OT_select_orientation);
|
2008-12-29 04:14:27 +00:00
|
|
|
}
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid)
|
|
|
|
{
|
|
|
|
wmKeymapItem *km;
|
|
|
|
switch(spaceid)
|
|
|
|
{
|
|
|
|
case SPACE_VIEW3D:
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0);
|
2008-12-29 04:14:27 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0);
|
2008-12-29 04:14:27 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_warp", WKEY, KM_PRESS, KM_SHIFT, 0);
|
2008-12-29 04:14:27 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_tosphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_shear", SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_shrink_fatten", SKEY, KM_PRESS, KM_ALT, 0);
|
|
|
|
|
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_tilt", TKEY, KM_PRESS, 0, 0);
|
|
|
|
|
2009-01-18 21:36:38 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_select_orientation", SPACEKEY, KM_PRESS, KM_ALT, 0);
|
|
|
|
|
2008-12-29 04:14:27 +00:00
|
|
|
break;
|
2008-12-29 06:06:59 +00:00
|
|
|
case SPACE_ACTION:
|
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-28 15:39:39 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 06:06:59 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 06:06:59 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2008-12-29 06:06:59 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_SLIDE);
|
2009-01-04 01:08:01 +00:00
|
|
|
break;
|
2009-01-28 00:50:56 +00:00
|
|
|
case SPACE_IPO:
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-28 02:56:58 +00:00
|
|
|
// XXX the 'mode' identifier here is not quite right
|
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0);
|
2009-01-28 00:50:56 +00:00
|
|
|
break;
|
2009-01-02 23:58:03 +00:00
|
|
|
case SPACE_NODE:
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_A, KM_ANY, 0, 0);
|
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0);
|
2009-01-04 01:08:01 +00:00
|
|
|
break;
|
2009-01-21 07:01:20 +00:00
|
|
|
case SPACE_SEQ:
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-01-24 05:38:25 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND);
|
2009-01-21 07:01:20 +00:00
|
|
|
break;
|
2009-01-28 21:43:43 +00:00
|
|
|
case SPACE_IMAGE:
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0);
|
2009-07-09 02:45:48 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0);
|
2009-01-28 21:43:43 +00:00
|
|
|
|
2009-03-06 15:50:15 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0);
|
2009-01-28 21:43:43 +00:00
|
|
|
|
2009-02-09 20:58:31 +00:00
|
|
|
km = WM_keymap_add_item(keymap, "TFM_OT_transform", MKEY, KM_PRESS, 0, 0);
|
|
|
|
RNA_int_set(km->ptr, "mode", TFM_MIRROR);
|
2009-01-28 21:43:43 +00:00
|
|
|
break;
|
2008-12-29 04:14:27 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2009-02-09 20:58:31 +00:00
|
|
|
|