2009-02-01 17:33:10 +00:00
|
|
|
/**
|
|
|
|
* $Id:
|
|
|
|
*
|
|
|
|
* ***** 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.
|
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 2009 Blender Foundation.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Contributor(s): Blender Foundation
|
|
|
|
*
|
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
#include "DNA_object_types.h"
|
|
|
|
#include "DNA_scene_types.h"
|
|
|
|
#include "DNA_screen_types.h"
|
|
|
|
#include "DNA_space_types.h"
|
|
|
|
#include "DNA_userdef_types.h"
|
|
|
|
#include "DNA_view3d_types.h"
|
|
|
|
#include "DNA_windowmanager_types.h"
|
|
|
|
|
|
|
|
#include "BLI_arithb.h"
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
|
|
|
|
#include "BKE_context.h"
|
|
|
|
#include "BKE_global.h"
|
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
|
|
|
|
#include "RNA_access.h"
|
|
|
|
#include "RNA_define.h"
|
|
|
|
|
|
|
|
#include "WM_api.h"
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
|
|
|
#include "ED_armature.h"
|
|
|
|
#include "ED_screen.h"
|
|
|
|
#include "ED_object.h"
|
|
|
|
|
|
|
|
#include "armature_intern.h"
|
|
|
|
|
2009-02-05 03:28:07 +00:00
|
|
|
/* ************************** quick tests **********************************/
|
|
|
|
|
|
|
|
/* XXX This is a quick test operator to print names of all EditBones in context
|
|
|
|
* that should be removed once tool coding starts...
|
|
|
|
*/
|
|
|
|
|
|
|
|
static int armature_test_exec (bContext *C, wmOperator *op)
|
|
|
|
{
|
|
|
|
printf("EditMode Armature Test: \n");
|
|
|
|
|
|
|
|
printf("\tSelected Bones \n");
|
|
|
|
CTX_DATA_BEGIN(C, EditBone*, ebone, selected_bones)
|
|
|
|
{
|
|
|
|
printf("\t\tEditBone '%s' \n", ebone->name);
|
|
|
|
}
|
|
|
|
CTX_DATA_END;
|
|
|
|
|
|
|
|
printf("\tEditable Bones \n");
|
|
|
|
CTX_DATA_BEGIN(C, EditBone*, ebone, selected_editable_bones)
|
|
|
|
{
|
|
|
|
printf("\t\tEditBone '%s' \n", ebone->name);
|
|
|
|
}
|
|
|
|
CTX_DATA_END;
|
|
|
|
|
|
|
|
printf("\tActive Bone \n");
|
|
|
|
{
|
|
|
|
EditBone *ebone= CTX_data_active_bone(C);
|
2009-02-06 10:48:00 +00:00
|
|
|
if (ebone) printf("\t\tEditBone '%s' \n", ebone->name);
|
2009-02-05 03:28:07 +00:00
|
|
|
else printf("\t\t<None> \n");
|
|
|
|
}
|
|
|
|
|
|
|
|
return OPERATOR_FINISHED;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ARMATURE_OT_test(wmOperatorType *ot)
|
|
|
|
{
|
|
|
|
/* identifiers */
|
|
|
|
ot->name= "Test Context";
|
|
|
|
ot->idname= "ARMATURE_OT_test";
|
|
|
|
|
|
|
|
/* api callbacks */
|
|
|
|
ot->exec= armature_test_exec;
|
|
|
|
}
|
2009-02-01 17:33:10 +00:00
|
|
|
|
|
|
|
/* ************************** registration **********************************/
|
|
|
|
|
|
|
|
/* Both operators ARMATURE_OT_xxx and POSE_OT_xxx here */
|
|
|
|
void ED_operatortypes_armature(void)
|
|
|
|
{
|
2009-02-11 03:46:14 +00:00
|
|
|
/* EDIT ARMATURE */
|
2009-02-18 02:13:36 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_bone_primitive_add);
|
2009-02-18 01:50:26 +00:00
|
|
|
|
2009-04-12 22:16:21 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_bones_align);
|
2009-02-06 10:48:00 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_calculate_roll);
|
2009-02-08 23:41:21 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_switch_direction);
|
2009-02-09 01:27:44 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_subdivs);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_subdivide_simple);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_subdivide_multi);
|
2009-02-06 01:39:55 +00:00
|
|
|
|
2009-02-10 06:12:35 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_parent_set);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_parent_clear);
|
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_select_all_toggle);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_select_invert);
|
2009-02-16 17:18:24 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_select_hierarchy);
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_select_linked);
|
2009-02-25 13:48:39 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_delete);
|
2009-02-25 13:48:39 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_duplicate_selected);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_extrude);
|
|
|
|
WM_operatortype_append(ARMATURE_OT_click_extrude);
|
2009-03-22 00:30:18 +00:00
|
|
|
|
|
|
|
/* SKETCH */
|
|
|
|
WM_operatortype_append(SKETCH_OT_gesture);
|
|
|
|
WM_operatortype_append(SKETCH_OT_delete);
|
|
|
|
WM_operatortype_append(SKETCH_OT_draw_stroke);
|
|
|
|
WM_operatortype_append(SKETCH_OT_draw_preview);
|
|
|
|
WM_operatortype_append(SKETCH_OT_finish_stroke);
|
|
|
|
WM_operatortype_append(SKETCH_OT_cancel_stroke);
|
|
|
|
WM_operatortype_append(SKETCH_OT_select);
|
|
|
|
|
2009-02-11 03:46:14 +00:00
|
|
|
/* POSE */
|
2009-02-01 19:53:24 +00:00
|
|
|
WM_operatortype_append(POSE_OT_hide);
|
2009-02-12 03:48:56 +00:00
|
|
|
WM_operatortype_append(POSE_OT_reveal);
|
2009-02-11 03:46:14 +00:00
|
|
|
|
2009-02-05 05:13:08 +00:00
|
|
|
WM_operatortype_append(POSE_OT_rot_clear);
|
|
|
|
WM_operatortype_append(POSE_OT_loc_clear);
|
|
|
|
WM_operatortype_append(POSE_OT_scale_clear);
|
2009-02-05 03:28:07 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_operatortype_append(POSE_OT_select_all_toggle);
|
|
|
|
WM_operatortype_append(POSE_OT_select_invert);
|
2009-02-11 16:17:34 +00:00
|
|
|
|
|
|
|
WM_operatortype_append(POSE_OT_select_parent);
|
2009-02-16 17:18:24 +00:00
|
|
|
WM_operatortype_append(POSE_OT_select_hierarchy);
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_operatortype_append(POSE_OT_select_linked);
|
2009-02-11 03:46:14 +00:00
|
|
|
|
2009-02-05 03:28:07 +00:00
|
|
|
WM_operatortype_append(ARMATURE_OT_test); // XXX temp test for context iterators... to be removed
|
2009-02-01 17:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void ED_keymap_armature(wmWindowManager *wm)
|
|
|
|
{
|
2009-02-05 03:28:07 +00:00
|
|
|
ListBase *keymap;
|
2009-02-01 19:53:24 +00:00
|
|
|
wmKeymapItem *kmi;
|
2009-02-01 17:33:10 +00:00
|
|
|
|
2009-02-05 03:28:07 +00:00
|
|
|
/* Armature ------------------------ */
|
|
|
|
keymap= WM_keymap_listbase(wm, "Armature", 0, 0);
|
|
|
|
|
2009-02-01 17:33:10 +00:00
|
|
|
/* only set in editmode armature, by space_view3d listener */
|
2009-02-01 19:53:24 +00:00
|
|
|
// WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0);
|
2009-04-12 22:16:21 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_bones_align", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
|
2009-02-06 10:48:00 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_calculate_roll", NKEY, KM_PRESS, KM_CTRL, 0);
|
2009-02-09 01:27:44 +00:00
|
|
|
|
2009-02-08 23:41:21 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_switch_direction", FKEY, KM_PRESS, KM_ALT, 0);
|
2009-02-06 10:48:00 +00:00
|
|
|
|
2009-02-18 09:28:04 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_bone_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0);
|
|
|
|
/* only the menu-version of subdivide is registered in keymaps for now */
|
2009-02-09 01:27:44 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_subdivs", SKEY, KM_PRESS, KM_ALT, 0);
|
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);
|
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0);
|
2009-02-10 06:12:35 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_select_invert", IKEY, KM_PRESS, KM_CTRL, 0);
|
2009-02-11 03:46:14 +00:00
|
|
|
|
2009-02-05 03:28:07 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_test", TKEY, KM_PRESS, 0, 0); // XXX temp test for context iterators... to be removed
|
2009-02-16 17:18:24 +00:00
|
|
|
|
|
|
|
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 0);
|
2009-02-16 17:18:24 +00:00
|
|
|
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 1);
|
2009-02-16 17:18:24 +00:00
|
|
|
|
|
|
|
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 0);
|
2009-02-16 17:18:24 +00:00
|
|
|
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 1);
|
2009-02-18 14:13:06 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0);
|
2009-02-25 13:48:39 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate_selected", DKEY, KM_PRESS, KM_SHIFT, 0);
|
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, 0, 0);
|
|
|
|
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_boolean_set(kmi->ptr, "forked", 1);
|
2009-02-25 13:48:39 +00:00
|
|
|
WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
|
2009-02-05 03:28:07 +00:00
|
|
|
|
2009-03-22 00:30:18 +00:00
|
|
|
/* Armature ------------------------ */
|
|
|
|
WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", SELECTMOUSE, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "SKETCH_OT_cancel_stroke", ESCKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "SKETCH_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
|
|
|
|
|
2009-02-05 03:28:07 +00:00
|
|
|
/* Pose ------------------------ */
|
2009-02-01 17:33:10 +00:00
|
|
|
/* only set in posemode, by space_view3d listener */
|
|
|
|
keymap= WM_keymap_listbase(wm, "Pose", 0, 0);
|
|
|
|
|
2009-02-01 19:53:24 +00:00
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, 0, 0);
|
|
|
|
kmi= WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-02-20 20:39:27 +00:00
|
|
|
RNA_boolean_set(kmi->ptr, "unselected", 1);
|
2009-02-12 03:48:56 +00:00
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
|
2009-02-05 05:13:08 +00:00
|
|
|
/*clear pose*/
|
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0);
|
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_loc_clear", GKEY, KM_PRESS, KM_ALT, 0);
|
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0);
|
2009-02-11 03:46:14 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_select_invert", IKEY, KM_PRESS, KM_CTRL, 0);
|
2009-02-11 16:17:34 +00:00
|
|
|
|
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_select_parent", PKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-02-16 17:18:24 +00:00
|
|
|
|
|
|
|
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 0);
|
2009-02-16 17:18:24 +00:00
|
|
|
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 1);
|
2009-02-16 17:18:24 +00:00
|
|
|
|
|
|
|
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 0);
|
2009-02-16 17:18:24 +00:00
|
|
|
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
|
|
|
|
RNA_boolean_set(kmi->ptr, "extend", 1);
|
2009-02-18 14:13:06 +00:00
|
|
|
|
2009-03-29 02:15:13 +00:00
|
|
|
WM_keymap_add_item(keymap, "POSE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
|
2009-04-07 05:01:42 +00:00
|
|
|
|
|
|
|
// XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
|
|
|
|
WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0);
|
|
|
|
WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0);
|
2009-02-01 17:33:10 +00:00
|
|
|
}
|
|
|
|
|