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 ,
2010-02-12 13:34:04 +00:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2008-12-29 04:14:27 +00:00
*
* 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 "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
2009-11-10 20:43:45 +00:00
# include "BLI_math.h"
2011-01-07 18:36:47 +00:00
# include "BLI_utildefines.h"
2008-12-29 04:14:27 +00:00
# include "BKE_context.h"
2009-07-19 17:42:01 +00:00
# include "BKE_global.h"
2011-02-23 04:58:08 +00:00
# include "BKE_armature.h"
2008-12-29 04:14:27 +00:00
# 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 ;
2009-12-21 17:23:44 +00:00
void ( * opfunc ) ( wmOperatorType * ) ;
2009-03-06 15:50:15 +00:00
} TransformModeItem ;
static float VecOne [ 3 ] = { 1 , 1 , 1 } ;
2011-02-14 17:55:27 +00:00
static char OP_TRANSLATION [ ] = " TRANSFORM_OT_translate " ;
static char OP_ROTATION [ ] = " TRANSFORM_OT_rotate " ;
static char OP_TOSPHERE [ ] = " TRANSFORM_OT_tosphere " ;
static char OP_RESIZE [ ] = " TRANSFORM_OT_resize " ;
static char OP_SHEAR [ ] = " TRANSFORM_OT_shear " ;
static char OP_WARP [ ] = " TRANSFORM_OT_warp " ;
static char OP_SHRINK_FATTEN [ ] = " TRANSFORM_OT_shrink_fatten " ;
static char OP_PUSH_PULL [ ] = " TRANSFORM_OT_push_pull " ;
static char OP_TILT [ ] = " TRANSFORM_OT_tilt " ;
static char OP_TRACKBALL [ ] = " TRANSFORM_OT_trackball " ;
static char OP_MIRROR [ ] = " TRANSFORM_OT_mirror " ;
static char OP_EDGE_SLIDE [ ] = " TRANSFORM_OT_edge_slide " ;
static char OP_EDGE_CREASE [ ] = " TRANSFORM_OT_edge_crease " ;
static char OP_SEQ_SLIDE [ ] = " TRANSFORM_OT_seq_slide " ;
2009-12-21 17:23:44 +00:00
void TRANSFORM_OT_translate ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_rotate ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_tosphere ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_resize ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_shear ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_warp ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_shrink_fatten ( struct wmOperatorType * ot ) ;
2010-04-11 16:04:11 +00:00
void TRANSFORM_OT_push_pull ( struct wmOperatorType * ot ) ;
2009-12-21 17:23:44 +00:00
void TRANSFORM_OT_tilt ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_trackball ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_mirror ( struct wmOperatorType * ot ) ;
void TRANSFORM_OT_edge_slide ( struct wmOperatorType * ot ) ;
2010-01-09 20:42:35 +00:00
void TRANSFORM_OT_edge_crease ( struct wmOperatorType * ot ) ;
2009-12-21 17:23:44 +00:00
void TRANSFORM_OT_seq_slide ( struct wmOperatorType * ot ) ;
2009-03-06 15:50:15 +00:00
2011-02-14 17:55:27 +00:00
static TransformModeItem transform_modes [ ] =
2009-03-06 15:50:15 +00:00
{
2009-12-21 17:23:44 +00:00
{ OP_TRANSLATION , TFM_TRANSLATION , TRANSFORM_OT_translate } ,
{ OP_ROTATION , TFM_ROTATION , TRANSFORM_OT_rotate } ,
{ OP_TOSPHERE , TFM_TOSPHERE , TRANSFORM_OT_tosphere } ,
{ OP_RESIZE , TFM_RESIZE , TRANSFORM_OT_resize } ,
{ OP_SHEAR , TFM_SHEAR , TRANSFORM_OT_shear } ,
{ OP_WARP , TFM_WARP , TRANSFORM_OT_warp } ,
{ OP_SHRINK_FATTEN , TFM_SHRINKFATTEN , TRANSFORM_OT_shrink_fatten } ,
2010-04-11 16:04:11 +00:00
{ OP_PUSH_PULL , TFM_PUSHPULL , TRANSFORM_OT_push_pull } ,
2009-12-21 17:23:44 +00:00
{ OP_TILT , TFM_TILT , TRANSFORM_OT_tilt } ,
{ OP_TRACKBALL , TFM_TRACKBALL , TRANSFORM_OT_trackball } ,
{ OP_MIRROR , TFM_MIRROR , TRANSFORM_OT_mirror } ,
{ OP_EDGE_SLIDE , TFM_EDGE_SLIDE , TRANSFORM_OT_edge_slide } ,
2010-01-09 20:42:35 +00:00
{ OP_EDGE_CREASE , TFM_CREASE , TRANSFORM_OT_edge_crease } ,
2009-12-21 17:23:44 +00:00
{ OP_SEQ_SLIDE , TFM_SEQ_SLIDE , TRANSFORM_OT_seq_slide } ,
2009-03-06 15:50:15 +00:00
{ NULL , 0 }
} ;
2009-11-26 19:47:55 +00:00
static int snap_type_exec ( bContext * C , wmOperator * op )
{
ToolSettings * ts = CTX_data_tool_settings ( C ) ;
ts - > snap_mode = RNA_enum_get ( op - > ptr , " type " ) ;
2010-01-14 02:06:08 +00:00
WM_event_add_notifier ( C , NC_SCENE | ND_TOOLSETTINGS , NULL ) ; /* header redraw */
2009-11-26 19:47:55 +00:00
return OPERATOR_FINISHED ;
}
2011-02-14 17:55:27 +00:00
static void TRANSFORM_OT_snap_type ( wmOperatorType * ot )
2009-11-26 19:47:55 +00:00
{
/* identifiers */
ot - > name = " Snap Type " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Set the snap element type " ;
2009-12-10 10:36:32 +00:00
ot - > idname = " TRANSFORM_OT_snap_type " ;
2009-11-26 19:47:55 +00:00
/* api callbacks */
ot - > invoke = WM_menu_invoke ;
ot - > exec = snap_type_exec ;
ot - > poll = ED_operator_areaactive ;
/* flags */
ot - > flag = OPTYPE_UNDO ;
/* props */
2010-01-15 22:40:33 +00:00
ot - > prop = RNA_def_enum ( ot - > srna , " type " , snap_element_items , 0 , " Type " , " Set the snap element type " ) ;
2009-11-26 19:47:55 +00:00
}
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 " ) ;
2009-07-09 02:45:48 +00:00
2009-02-04 11:52:16 +00:00
BIF_selectTransformOrientationValue ( C , orientation ) ;
2009-10-10 17:40:56 +00:00
WM_event_add_notifier ( C , NC_SPACE | ND_SPACE_VIEW3D , CTX_wm_view3d ( C ) ) ;
2009-02-04 11:52:16 +00:00
return OPERATOR_FINISHED ;
2009-01-18 21:36:38 +00:00
}
2010-10-15 01:36:14 +00:00
static int select_orientation_invoke ( bContext * C , wmOperator * UNUSED ( op ) , wmEvent * UNUSED ( event ) )
2009-01-18 21:36:38 +00:00
{
2009-04-22 18:39:44 +00:00
uiPopupMenu * pup ;
uiLayout * layout ;
2009-07-09 02:45:48 +00:00
use ICON_NULL define rather then 0, makes UI calls less confusing. (no functional change)
eg: uiItemR(row, &dvar_ptr, "type", 0, "", 0); -> uiItemR(row, &dvar_ptr, "type", 0, "", ICON_NULL);
2010-12-23 02:43:40 +00:00
pup = uiPupMenuBegin ( C , " Orientation " , ICON_NULL ) ;
2009-04-22 18:39:44 +00:00
layout = uiPupMenuLayout ( pup ) ;
2009-12-10 10:36:32 +00:00
uiItemsEnumO ( layout , " TRANSFORM_OT_select_orientation " , " orientation " ) ;
2009-04-22 18:39:44 +00:00
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
2011-02-14 17:55:27 +00:00
static void TRANSFORM_OT_select_orientation ( struct wmOperatorType * ot )
2009-01-18 21:36:38 +00:00
{
RNA
* Enums can now be dynamically created in the _itemf callback,
using RNA_enum_item(s)_add, RNA_enum_item_end. All places asking
for enum items now need to potentially free the items.
* This callback now also gets context, this was added specifically
for operators. This doesn't fit design well at all, needed to do
some ugly hacks, but can't find a good solution at the moment.
* All enums must have a default list of items too, even with an
_itemf callback, for docs and fallback in case there is no context.
* Used by MESH_OT_merge, MESH_OT_select_similar, TFM_OT_select_orientation.
* Also changes some operator properties that were enums to booleas
(unselected, deselect), to make them consistent with other ops.
2009-07-10 19:56:13 +00:00
PropertyRNA * prop ;
2009-02-04 11:52:16 +00:00
2009-01-18 21:36:38 +00:00
/* identifiers */
ot - > name = " Select Orientation " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Select transformation orientation " ;
2009-12-10 10:36:32 +00:00
ot - > idname = " TRANSFORM_OT_select_orientation " ;
2009-09-28 19:49:36 +00:00
ot - > flag = OPTYPE_UNDO ;
2009-01-18 21:36:38 +00:00
/* api callbacks */
ot - > invoke = select_orientation_invoke ;
ot - > exec = select_orientation_exec ;
2010-11-14 18:27:25 +00:00
ot - > poll = ED_operator_view3d_active ;
2009-01-18 21:36:38 +00:00
2009-10-12 22:33:32 +00:00
prop = RNA_def_property ( ot - > srna , " orientation " , PROP_ENUM , PROP_NONE ) ;
2010-02-10 21:15:44 +00:00
RNA_def_property_ui_text ( prop , " Orientation " , " Transformation orientation " ) ;
2009-10-10 17:40:56 +00:00
RNA_def_enum_funcs ( prop , rna_TransformOrientation_itemf ) ;
2009-01-18 21:36:38 +00:00
}
2009-09-28 19:49:36 +00:00
2010-10-15 01:36:14 +00:00
static int delete_orientation_exec ( bContext * C , wmOperator * UNUSED ( op ) )
2009-09-28 19:49:36 +00:00
{
View3D * v3d = CTX_wm_view3d ( C ) ;
int selected_index = ( v3d - > twmode - V3D_MANIP_CUSTOM ) ;
BIF_removeTransformOrientationIndex ( C , selected_index ) ;
2009-10-10 17:40:56 +00:00
WM_event_add_notifier ( C , NC_SPACE | ND_SPACE_VIEW3D , CTX_wm_view3d ( C ) ) ;
2010-01-14 02:06:08 +00:00
WM_event_add_notifier ( C , NC_SCENE | NA_EDITED , CTX_data_scene ( C ) ) ;
2009-09-28 19:49:36 +00:00
return OPERATOR_FINISHED ;
}
2010-10-15 01:36:14 +00:00
static int delete_orientation_invoke ( bContext * C , wmOperator * op , wmEvent * UNUSED ( event ) )
2009-09-28 19:49:36 +00:00
{
return delete_orientation_exec ( C , op ) ;
}
static int delete_orientation_poll ( bContext * C )
{
int selected_index = - 1 ;
View3D * v3d = CTX_wm_view3d ( C ) ;
if ( ED_operator_areaactive ( C ) = = 0 )
return 0 ;
if ( v3d ) {
selected_index = ( v3d - > twmode - V3D_MANIP_CUSTOM ) ;
}
return selected_index > = 0 ;
}
2011-02-14 17:55:27 +00:00
static void TRANSFORM_OT_delete_orientation ( struct wmOperatorType * ot )
2009-09-28 19:49:36 +00:00
{
/* identifiers */
ot - > name = " Delete Orientation " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Delete transformation orientation " ;
2009-12-10 10:36:32 +00:00
ot - > idname = " TRANSFORM_OT_delete_orientation " ;
2009-09-28 19:49:36 +00:00
ot - > flag = OPTYPE_UNDO ;
/* api callbacks */
ot - > invoke = delete_orientation_invoke ;
ot - > exec = delete_orientation_exec ;
ot - > poll = delete_orientation_poll ;
}
static int create_orientation_exec ( bContext * C , wmOperator * op )
{
char name [ 36 ] ;
int use = RNA_boolean_get ( op - > ptr , " use " ) ;
int overwrite = RNA_boolean_get ( op - > ptr , " overwrite " ) ;
RNA_string_get ( op - > ptr , " name " , name ) ;
BIF_createTransformOrientation ( C , op - > reports , name , use , overwrite ) ;
2009-10-10 17:40:56 +00:00
WM_event_add_notifier ( C , NC_SPACE | ND_SPACE_VIEW3D , CTX_wm_view3d ( C ) ) ;
2010-01-14 02:06:08 +00:00
WM_event_add_notifier ( C , NC_SCENE | NA_EDITED , CTX_data_scene ( C ) ) ;
2009-09-28 19:49:36 +00:00
return OPERATOR_FINISHED ;
}
2010-10-15 01:36:14 +00:00
static int create_orientation_invoke ( bContext * C , wmOperator * op , wmEvent * UNUSED ( event ) )
2009-09-28 19:49:36 +00:00
{
return create_orientation_exec ( C , op ) ;
}
2011-02-14 17:55:27 +00:00
static void TRANSFORM_OT_create_orientation ( struct wmOperatorType * ot )
2009-09-28 19:49:36 +00:00
{
/* identifiers */
ot - > name = " Create Orientation " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Create transformation orientation from selection " ;
2009-12-10 10:36:32 +00:00
ot - > idname = " TRANSFORM_OT_create_orientation " ;
2009-09-28 19:49:36 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO ;
/* api callbacks */
ot - > invoke = create_orientation_invoke ;
ot - > exec = create_orientation_exec ;
ot - > poll = ED_operator_areaactive ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO ;
RNA_def_string ( ot - > srna , " name " , " " , 35 , " Name " , " Text to insert at the cursor position. " ) ;
RNA_def_boolean ( ot - > srna , " use " , 0 , " Use after creation " , " Select orientation after its creation " ) ;
RNA_def_boolean ( ot - > srna , " overwrite " , 0 , " Overwrite previous " , " Overwrite previously created orientation with same name " ) ;
}
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-07-19 17:42:01 +00:00
G . moving = 0 ;
2008-12-29 04:14:27 +00:00
}
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 )
{
2010-08-03 22:36:59 +00:00
TransInfo * t = MEM_callocN ( sizeof ( TransInfo ) , " TransInfo data2 " ) ;
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 ;
2009-12-02 00:53:33 +00:00
break ;
2009-03-06 15:50:15 +00:00
}
}
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-19 17:42:01 +00:00
G . moving = 1 ;
2009-07-09 02:45:48 +00:00
2009-01-03 22:15:59 +00:00
/* store data */
2010-08-03 22:36:59 +00:00
if ( retval ) {
op - > customdata = t ;
}
else {
MEM_freeN ( t ) ;
}
2009-01-03 22:15:59 +00:00
}
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
2011-01-09 12:08:29 +00:00
/* XXX insert keys are called here, and require context */
t - > context = C ;
2009-11-29 16:49:26 +00:00
exit_code = transformEvent ( t , event ) ;
2011-01-09 12:08:29 +00:00
t - > context = NULL ;
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-11-29 16:49:26 +00:00
exit_code | = transformEnd ( C , t ) ;
2009-07-09 02:45:48 +00:00
2009-11-29 16:49:26 +00:00
if ( ( exit_code & OPERATOR_RUNNING_MODAL ) = = 0 )
2008-12-29 04:14:27 +00:00
{
transformops_exit ( C , op ) ;
2009-11-29 16:49:26 +00:00
exit_code & = ~ OPERATOR_PASS_THROUGH ; /* preventively remove passthrough */
2008-12-29 04:14:27 +00:00
}
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 ) )
{
2009-11-21 17:21:46 +00:00
G . moving = 0 ;
2009-03-28 20:46:38 +00:00
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 ) )
{
2009-11-21 17:21:46 +00:00
G . moving = 0 ;
2009-03-28 20:46:38 +00:00
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 {
/* add temp handler */
2009-09-18 12:43:36 +00:00
WM_event_add_modal_handler ( C , op ) ;
2008-12-29 04:14:27 +00:00
2009-10-17 15:25:19 +00:00
op - > flag | = OP_GRAB_POINTER ; // XXX maybe we want this with the manipulator only?
2008-12-29 04:14:27 +00:00
return OPERATOR_RUNNING_MODAL ;
}
}
2010-04-02 19:40:51 +00:00
void Transform_Properties ( struct wmOperatorType * ot , int flags )
2010-01-04 20:49:42 +00:00
{
PropertyRNA * prop ;
2010-04-02 19:40:51 +00:00
if ( flags & P_AXIS )
{
prop = RNA_def_property ( ot - > srna , " axis " , PROP_FLOAT , PROP_DIRECTION ) ;
RNA_def_property_array ( prop , 3 ) ;
2010-06-19 20:18:43 +00:00
/* Make this not hidden when there's a nice axis selection widget */
2010-06-06 15:38:50 +00:00
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
2010-04-02 19:40:51 +00:00
RNA_def_property_ui_text ( prop , " Axis " , " The axis around which the transformation occurs " ) ;
2010-06-06 15:38:50 +00:00
2010-04-02 19:40:51 +00:00
}
2009-07-09 02:45:48 +00:00
2010-04-02 19:40:51 +00:00
if ( flags & P_CONSTRAINT )
{
2011-01-13 04:53:55 +00:00
RNA_def_boolean_vector ( ot - > srna , " constraint_axis " , 3 , NULL , " Constraint Axis " , " " ) ;
2010-04-02 19:40:51 +00:00
prop = RNA_def_property ( ot - > srna , " constraint_orientation " , PROP_ENUM , PROP_NONE ) ;
RNA_def_property_ui_text ( prop , " Orientation " , " Transformation orientation " ) ;
RNA_def_enum_funcs ( prop , rna_TransformOrientation_itemf ) ;
2010-06-06 15:38:50 +00:00
2010-04-02 19:40:51 +00:00
}
2009-11-27 16:15:34 +00:00
2010-04-02 19:40:51 +00:00
if ( flags & P_MIRROR )
{
RNA_def_boolean ( ot - > srna , " mirror " , 0 , " Mirror Editing " , " " ) ;
2009-03-29 19:52:53 +00:00
}
2009-03-06 15:50:15 +00:00
2009-07-16 03:16:03 +00:00
2010-04-02 19:40:51 +00:00
if ( flags & P_PROPORTIONAL )
{
RNA_def_enum ( ot - > srna , " proportional " , proportional_editing_items , 0 , " Proportional Editing " , " " ) ;
2010-08-18 03:24:52 +00:00
RNA_def_enum ( ot - > srna , " proportional_edit_falloff " , proportional_falloff_items , 0 , " Proportional Editing Falloff " , " Falloff type for proportional editing mode. " ) ;
2010-11-27 19:18:13 +00:00
RNA_def_float ( ot - > srna , " proportional_size " , 1 , 0.00001f , FLT_MAX , " Proportional Size " , " " , 0.001 , 100 ) ;
2010-04-02 19:40:51 +00:00
}
if ( flags & P_SNAP )
{
2010-06-06 15:38:50 +00:00
prop = RNA_def_boolean ( ot - > srna , " snap " , 0 , " Use Snapping Options " , " " ) ;
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
2010-04-02 19:40:51 +00:00
if ( flags & P_GEO_SNAP ) {
2010-06-06 15:38:50 +00:00
prop = RNA_def_enum ( ot - > srna , " snap_target " , snap_target_items , 0 , " Target " , " " ) ;
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
prop = RNA_def_float_vector ( ot - > srna , " snap_point " , 3 , NULL , - FLT_MAX , FLT_MAX , " Point " , " " , - FLT_MAX , FLT_MAX ) ;
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
2010-04-02 19:40:51 +00:00
if ( flags & P_ALIGN_SNAP ) {
2010-06-06 15:38:50 +00:00
prop = RNA_def_boolean ( ot - > srna , " snap_align " , 0 , " Align with Point Normal " , " " ) ;
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
prop = RNA_def_float_vector ( ot - > srna , " snap_normal " , 3 , NULL , - FLT_MAX , FLT_MAX , " Normal " , " " , - FLT_MAX , FLT_MAX ) ;
RNA_def_property_flag ( prop , PROP_HIDDEN ) ;
2010-04-02 19:40:51 +00:00
}
}
}
2011-01-05 17:27:26 +00:00
if ( flags & P_OPTIONS )
{
RNA_def_boolean ( ot - > srna , " texture_space " , 0 , " Edit Object data texture space " , " " ) ;
}
2010-04-03 17:38:43 +00:00
2010-10-05 22:32:29 +00:00
// Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit
2011-01-13 04:53:55 +00:00
/*prop =*/ RNA_def_boolean ( ot - > srna , " release_confirm " , 0 , " Confirm on Release " , " Always confirm operation when releasing button " ) ;
2010-10-05 22:32:29 +00:00
//RNA_def_property_flag(prop, PROP_HIDDEN);
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_translate ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
2009-07-18 14:55:03 +00:00
ot - > name = " Translate " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Translate selected items " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_TRANSLATION ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_areaactive ;
2010-08-26 00:06:10 +00:00
RNA_def_float_vector_xyz ( ot - > srna , " value " , 3 , NULL , - FLT_MAX , FLT_MAX , " Vector " , " " , - FLT_MAX , FLT_MAX ) ;
2009-03-06 15:50:15 +00:00
2011-01-05 17:27:26 +00:00
Transform_Properties ( ot , P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_OPTIONS ) ;
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_resize ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " Resize " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Resize selected items " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_RESIZE ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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 ) ;
2011-01-05 17:27:26 +00:00
Transform_Properties ( ot , P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP | P_OPTIONS ) ;
2009-03-06 15:50:15 +00:00
}
2009-07-09 02:45:48 +00:00
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_trackball ( struct wmOperatorType * ot )
2009-07-09 02:45:48 +00:00
{
/* identifiers */
ot - > name = " Trackball " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Trackball style rotation of selected items " ;
2009-07-09 02:45:48 +00:00
ot - > idname = OP_TRACKBALL ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-07-09 02:45:48 +00:00
/* 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 ) ;
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-07-09 02:45:48 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_rotate ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
2009-07-18 14:55:03 +00:00
ot - > name = " Rotate " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Rotate selected items " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_ROTATION ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_GEO_SNAP ) ;
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_tilt ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " Tilt " ;
2010-03-22 09:30:00 +00:00
/*optionals -
" Tilt selected vertices. "
" Specify an extra axis rotation for selected vertices of 3d curve. " */
2010-02-10 21:15:44 +00:00
ot - > description = " Tilt selected control vertices of 3d curve " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_TILT ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_warp ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " Warp " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Warp selected items around the cursor " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_WARP ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-11-27 16:15:34 +00:00
// XXX Warp axis?
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_shear ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " Shear " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Shear selected items along the horizontal screen axis " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_SHEAR ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-03-06 15:50:15 +00:00
// XXX Shear axis?
}
2010-04-11 16:04:11 +00:00
void TRANSFORM_OT_push_pull ( struct wmOperatorType * ot )
{
/* identifiers */
ot - > name = " Push/Pull " ;
ot - > description = " Push/Pull selected items " ;
ot - > idname = OP_PUSH_PULL ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
/* 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 ( ot - > srna , " value " , 0 , - FLT_MAX , FLT_MAX , " Distance " , " " , - FLT_MAX , FLT_MAX ) ;
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_shrink_fatten ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " Shrink/Fatten " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Shrink/fatten selected vertices along normals " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_SHRINK_FATTEN ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* 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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_tosphere ( struct wmOperatorType * ot )
2009-03-06 15:50:15 +00:00
{
/* identifiers */
ot - > name = " To Sphere " ;
2010-03-22 09:30:00 +00:00
//added "around mesh center" to differentiate between "MESH_OT_vertices_to_sphere()"
2010-02-10 21:15:44 +00:00
ot - > description = " Move selected vertices outward in a spherical shape around mesh center " ;
2009-03-06 15:50:15 +00:00
ot - > idname = OP_TOSPHERE ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
2009-03-06 15:50:15 +00:00
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_areaactive ;
2009-09-21 21:19:58 +00:00
RNA_def_float_factor ( ot - > srna , " value " , 0 , 0 , 1 , " Factor " , " " , 0 , 1 ) ;
2009-03-06 15:50:15 +00:00
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_PROPORTIONAL | P_MIRROR | P_SNAP ) ;
2009-03-06 15:50:15 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_mirror ( struct wmOperatorType * ot )
2009-09-10 11:04:53 +00:00
{
/* identifiers */
ot - > name = " Mirror " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Mirror selected vertices around one or more axes " ;
2009-09-10 11:04:53 +00:00
ot - > idname = OP_MIRROR ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_areaactive ;
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_CONSTRAINT | P_PROPORTIONAL ) ;
2009-09-10 11:04:53 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_edge_slide ( struct wmOperatorType * ot )
2009-09-22 20:16:56 +00:00
{
/* identifiers */
2009-09-28 03:28:28 +00:00
ot - > name = " Edge Slide " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Slide an edge loop along a mesh " ;
2009-09-22 20:16:56 +00:00
ot - > idname = OP_EDGE_SLIDE ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_editmesh ;
2009-09-28 03:28:28 +00:00
RNA_def_float_factor ( ot - > srna , " value " , 0 , - 1.0f , 1.0f , " Factor " , " " , - 1.0f , 1.0f ) ;
2009-09-22 20:16:56 +00:00
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_MIRROR | P_SNAP ) ;
2009-09-22 20:16:56 +00:00
}
2010-01-09 20:42:35 +00:00
void TRANSFORM_OT_edge_crease ( struct wmOperatorType * ot )
{
/* identifiers */
ot - > name = " Edge Crease " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Change the crease of edges " ;
2010-01-09 20:42:35 +00:00
ot - > idname = OP_EDGE_CREASE ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_editmesh ;
RNA_def_float_factor ( ot - > srna , " value " , 0 , - 1.0f , 1.0f , " Factor " , " " , - 1.0f , 1.0f ) ;
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_SNAP ) ;
2010-01-09 20:42:35 +00:00
}
2009-12-21 17:23:44 +00:00
void TRANSFORM_OT_seq_slide ( struct wmOperatorType * ot )
{
/* identifiers */
ot - > name = " Sequence Slide " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Slide a sequence strip in time " ;
2009-12-21 17:23:44 +00:00
ot - > idname = OP_SEQ_SLIDE ;
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
/* api callbacks */
ot - > invoke = transform_invoke ;
ot - > exec = transform_exec ;
ot - > modal = transform_modal ;
ot - > cancel = transform_cancel ;
ot - > poll = ED_operator_sequencer_active ;
RNA_def_float_vector ( ot - > srna , " value " , 2 , VecOne , - FLT_MAX , FLT_MAX , " angle " , " " , - FLT_MAX , FLT_MAX ) ;
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_SNAP ) ;
2009-12-21 17:23:44 +00:00
}
2009-12-10 10:36:32 +00:00
void TRANSFORM_OT_transform ( struct wmOperatorType * ot )
2008-12-29 04:14:27 +00:00
{
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 " , " " } ,
2010-09-16 07:14:48 +00:00
{ TFM_BONESIZE , " BONE_SIZE " , 0 , " Bonesize " , " " } ,
2009-06-16 00:52:21 +00:00
{ 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 " , " " } ,
2009-09-22 08:41:03 +00:00
{ TFM_EDGE_SLIDE , " EDGESLIDE " , 0 , " Edge Slide " , " " } ,
2009-12-21 17:23:44 +00:00
{ TFM_SEQ_SLIDE , " SEQSLIDE " , 0 , " Sequence Slide " , " " } ,
2009-06-16 00:52:21 +00:00
{ 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 " ;
2010-02-10 21:15:44 +00:00
ot - > description = " Transform selected items by mode type " ;
2009-12-10 10:36:32 +00:00
ot - > idname = " TRANSFORM_OT_transform " ;
2009-07-11 14:51:13 +00:00
ot - > flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_BLOCKING ;
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
2010-04-02 19:40:51 +00:00
Transform_Properties ( ot , P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP ) ;
2008-12-29 04:14:27 +00:00
}
void transform_operatortypes ( void )
{
2009-12-21 17:23:44 +00:00
TransformModeItem * tmode ;
for ( tmode = transform_modes ; tmode - > idname ; tmode + + )
{
WM_operatortype_append ( tmode - > opfunc ) ;
}
2009-12-10 10:36:32 +00:00
WM_operatortype_append ( TRANSFORM_OT_transform ) ;
2009-03-06 15:50:15 +00:00
2009-12-10 10:36:32 +00:00
WM_operatortype_append ( TRANSFORM_OT_select_orientation ) ;
WM_operatortype_append ( TRANSFORM_OT_create_orientation ) ;
WM_operatortype_append ( TRANSFORM_OT_delete_orientation ) ;
2009-11-26 19:47:55 +00:00
2009-12-10 10:36:32 +00:00
WM_operatortype_append ( TRANSFORM_OT_snap_type ) ;
2008-12-29 04:14:27 +00:00
}
2009-07-09 02:45:48 +00:00
2009-12-21 17:23:44 +00:00
void transform_keymap_for_space ( wmKeyConfig * keyconf , wmKeyMap * keymap , int spaceid )
2008-12-29 04:14:27 +00:00
{
Key Configuration
Keymaps are now saveable and configurable from the user preferences, note
that editing one item in a keymap means the whole keymap is now defined by
the user and will not be updated by Blender, an option for syncing might be
added later. The outliner interface is still there, but I will probably
remove it.
There's actually 3 levels now:
* Default builtin key configuration.
* Key configuration loaded from .py file, for configs like Blender 2.4x
or other 3D applications.
* Keymaps edited by the user and saved in .B.blend. These can be saved
to .py files as well to make creating distributable configurations
easier.
Also, user preferences sections were reorganized a bit, now there is:
Interface, Editing, Input, Files and System.
Implementation notes:
* wmKeyConfig was added which represents a key configuration containing
keymaps.
* wmKeymapItem was renamed to wmKeyMapItem for consistency with wmKeyMap.
* Modal maps are not wrapped yet.
* User preferences DNA file reading did not support newdataadr() yet,
added this now for reading keymaps.
* Key configuration related settings are now RNA wrapped.
* is_property_set and is_property_hidden python methods were added.
2009-10-08 18:40:03 +00:00
wmKeyMapItem * km ;
2009-12-21 17:23:44 +00:00
wmKeyMap * modalmap ;
2.5
Modal keymaps.
I've tried to make it as simple as possible, yet still using sufficient facilities to enable self-documenting UIs, saving/reading in files, and proper Python support.
The simplicity is: the 'modal keymap' just checks an event, uses event matching similarly to other keymap matching, and if there's a match it changes the event type, and sets the event value to what the modal keymap has defined. The event values are being defined using EnumPropertyItem structs, so the UI will be able to show all options in self-documenting way.
This system also allows to still handle hardcoded own events.
Tech doc:
1) define keymap
- Create map with unique name, WM_modalkeymap_add()
- Give map property definitions (EnumPropertyItem *)
This only for UI, so user can get information on available options
2) items
- WM_modalkeymap_add_item(): give it an enum value for events
3) activate
- In keymap definition code, assign the modal keymap to operatortype
WM_modalkeymap_assign()
4) event manager
- The event handler will check for modal keymap, if so:
- If the modal map has a match:
- Sets event->type to EVT_MODAL_MAP
- Sets event->val to the enum value
5) modal handler
- If event type is EVT_MODAL_MAP:
- Check event->val, handle it
- Other events can just be handled still
Two examples added in the code:
editors/transform/transform.c: transform_modal_keymap()
editors/screen/screen_ops.c: keymap_modal_set()
Also: to support 'key release' the define KM_RELEASE now is officially
used in event manager, this is not '0', so don't check key events with
the old convention if(event->val) but use if(event->val==KM_PRESS)
2009-07-21 11:03:07 +00:00
/* transform.c, only adds modal map once, checks if it's there */
2009-12-21 17:23:44 +00:00
modalmap = transform_modal_keymap ( keyconf ) ;
/* assign map to operators only the first time */
if ( modalmap ) {
TransformModeItem * tmode ;
for ( tmode = transform_modes ; tmode - > idname ; tmode + + )
{
WM_modalkeymap_assign ( modalmap , tmode - > idname ) ;
}
WM_modalkeymap_assign ( modalmap , " TRANSFORM_OT_transform " ) ;
}
2.5
Modal keymaps.
I've tried to make it as simple as possible, yet still using sufficient facilities to enable self-documenting UIs, saving/reading in files, and proper Python support.
The simplicity is: the 'modal keymap' just checks an event, uses event matching similarly to other keymap matching, and if there's a match it changes the event type, and sets the event value to what the modal keymap has defined. The event values are being defined using EnumPropertyItem structs, so the UI will be able to show all options in self-documenting way.
This system also allows to still handle hardcoded own events.
Tech doc:
1) define keymap
- Create map with unique name, WM_modalkeymap_add()
- Give map property definitions (EnumPropertyItem *)
This only for UI, so user can get information on available options
2) items
- WM_modalkeymap_add_item(): give it an enum value for events
3) activate
- In keymap definition code, assign the modal keymap to operatortype
WM_modalkeymap_assign()
4) event manager
- The event handler will check for modal keymap, if so:
- If the modal map has a match:
- Sets event->type to EVT_MODAL_MAP
- Sets event->val to the enum value
5) modal handler
- If event type is EVT_MODAL_MAP:
- Check event->val, handle it
- Other events can just be handled still
Two examples added in the code:
editors/transform/transform.c: transform_modal_keymap()
editors/screen/screen_ops.c: keymap_modal_set()
Also: to support 'key release' the define KM_RELEASE now is officially
used in event manager, this is not '0', so don't check key events with
the old convention if(event->val) but use if(event->val==KM_PRESS)
2009-07-21 11:03:07 +00:00
2008-12-29 04:14:27 +00:00
switch ( spaceid )
{
case SPACE_VIEW3D :
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , GKEY , KM_PRESS , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_ROTATION , RKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 04:14:27 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_RESIZE , SKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 04:14:27 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_WARP , WKEY , KM_PRESS , KM_SHIFT , 0 ) ;
2008-12-29 04:14:27 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TOSPHERE , SKEY , KM_PRESS , KM_ALT | KM_SHIFT , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_SHEAR , SKEY , KM_PRESS , KM_ALT | KM_CTRL | KM_SHIFT , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , " TRANSFORM_OT_select_orientation " , SPACEKEY , KM_PRESS , KM_ALT , 0 ) ;
2009-01-18 21:36:38 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_create_orientation " , SPACEKEY , KM_PRESS , KM_CTRL | KM_ALT , 0 ) ;
2009-09-28 19:49:36 +00:00
RNA_boolean_set ( km - > ptr , " use " , 1 ) ;
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_MIRROR , MKEY , KM_PRESS , KM_CTRL , 0 ) ;
2009-10-07 16:10:06 +00:00
2009-12-03 19:18:00 +00:00
km = WM_keymap_add_item ( keymap , " WM_OT_context_toggle " , TABKEY , KM_PRESS , KM_SHIFT , 0 ) ;
2010-08-30 13:50:59 +00:00
RNA_string_set ( km - > ptr , " data_path " , " tool_settings.use_snap " ) ;
2009-11-26 19:47:55 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , " TRANSFORM_OT_snap_type " , TABKEY , KM_PRESS , KM_SHIFT | KM_CTRL , 0 ) ;
2011-01-05 17:27:26 +00:00
km = WM_keymap_add_item ( keymap , OP_TRANSLATION , TKEY , KM_PRESS , KM_SHIFT , 0 ) ;
RNA_boolean_set ( km - > ptr , " texture_space " , 1 ) ;
2011-01-12 03:41:12 +00:00
2011-01-05 17:27:26 +00:00
km = WM_keymap_add_item ( keymap , OP_RESIZE , TKEY , KM_PRESS , KM_SHIFT | KM_ALT , 0 ) ;
RNA_boolean_set ( km - > ptr , " texture_space " , 1 ) ;
2008-12-29 04:14:27 +00:00
break ;
2008-12-29 06:06:59 +00:00
case SPACE_ACTION :
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , GKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 06:06:59 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_TRANSLATE ) ;
2010-03-26 00:25:14 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2009-01-28 15:39:39 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_TRANSLATE ) ;
2010-03-26 00:25:14 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 06:06:59 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_EXTEND ) ;
2010-03-26 00:25:14 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , SKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 06:06:59 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_SCALE ) ;
2010-03-26 00:25:14 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , TKEY , KM_PRESS , 0 , 0 ) ;
2008-12-29 06:06:59 +00:00
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 :
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , GKEY , KM_PRESS , 0 , 0 ) ;
2010-03-26 00:25:14 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2010-03-26 00:25:14 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EKEY , KM_PRESS , 0 , 0 ) ;
2009-01-28 02:56:58 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_EXTEND ) ;
2010-03-26 00:25:14 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_ROTATION , RKEY , KM_PRESS , 0 , 0 ) ;
2010-03-26 00:25:14 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_RESIZE , SKEY , KM_PRESS , 0 , 0 ) ;
2009-01-28 00:50:56 +00:00
break ;
2009-06-09 11:26:45 +00:00
case SPACE_NLA :
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , GKEY , KM_PRESS , 0 , 0 ) ;
2009-07-07 05:41:59 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TRANSLATION ) ;
2009-06-09 11:26:45 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2009-07-07 05:41:59 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TRANSLATION ) ;
2009-06-09 11:26:45 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EKEY , KM_PRESS , 0 , 0 ) ;
2009-06-09 11:26:45 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_EXTEND ) ;
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , SKEY , KM_PRESS , 0 , 0 ) ;
2009-06-09 11:26:45 +00:00
RNA_int_set ( km - > ptr , " mode " , TFM_TIME_SCALE ) ;
break ;
2009-01-02 23:58:03 +00:00
case SPACE_NODE :
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , GKEY , KM_PRESS , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2009-12-21 17:23:44 +00:00
km = WM_keymap_add_item ( keymap , OP_TRANSLATION , EVT_TWEAK_A , KM_ANY , 0 , 0 ) ;
2010-04-05 00:06:06 +00:00
RNA_enum_set ( km - > ptr , " release_confirm " , 1 ) ;
2009-12-21 17:23:44 +00:00
km = WM_keymap_add_item ( keymap , OP_TRANSLATION , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2010-04-02 19:40:51 +00:00
RNA_enum_set ( km - > ptr , " release_confirm " , 1 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_ROTATION , RKEY , KM_PRESS , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_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 :
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_SEQ_SLIDE , GKEY , KM_PRESS , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_SEQ_SLIDE , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2009-12-10 10:36:32 +00:00
km = WM_keymap_add_item ( keymap , " TRANSFORM_OT_transform " , EKEY , KM_PRESS , 0 , 0 ) ;
2009-01-24 05:38:25 +00:00
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 :
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , GKEY , KM_PRESS , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_TRANSLATION , EVT_TWEAK_S , KM_ANY , 0 , 0 ) ;
2009-07-09 02:45:48 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_ROTATION , RKEY , KM_PRESS , 0 , 0 ) ;
2009-01-28 21:43:43 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , OP_RESIZE , SKEY , KM_PRESS , 0 , 0 ) ;
2009-01-28 21:43:43 +00:00
2011-01-12 03:41:12 +00:00
WM_keymap_add_item ( keymap , " TRANSFORM_OT_mirror " , MKEY , KM_PRESS , KM_CTRL , 0 ) ;
2009-11-26 19:47:55 +00:00
2009-12-03 19:18:00 +00:00
km = WM_keymap_add_item ( keymap , " WM_OT_context_toggle " , TABKEY , KM_PRESS , KM_SHIFT , 0 ) ;
2010-08-30 13:50:59 +00:00
RNA_string_set ( km - > ptr , " data_path " , " tool_settings.use_snap " ) ;
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