Blender  V2.59
curve_ops.c
Go to the documentation of this file.
00001 /*
00002  * $Id: curve_ops.c 35883 2011-03-29 16:52:26Z campbellbarton $
00003  *
00004  * ***** BEGIN GPL LICENSE BLOCK *****
00005  *
00006  * This program is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version. 
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software Foundation,
00018  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019  *
00020  * The Original Code is Copyright (C) 2009 Blender Foundation.
00021  * All rights reserved.
00022  *
00023  * 
00024  * Contributor(s): Blender Foundation
00025  *
00026  * ***** END GPL LICENSE BLOCK *****
00027  */
00028 
00034 #include <stdlib.h>
00035 #include <math.h>
00036 
00037 
00038 #include "DNA_curve_types.h"
00039 
00040 #include "BLI_math.h"
00041 #include "BLI_blenlib.h"
00042 
00043 
00044 #include "RNA_access.h"
00045 
00046 #include "WM_api.h"
00047 #include "WM_types.h"
00048 
00049 #include "ED_curve.h"
00050 #include "ED_object.h"
00051 #include "ED_screen.h"
00052 #include "ED_transform.h"
00053 
00054 #include "curve_intern.h"
00055 
00056 
00057 /************************* registration ****************************/
00058 
00059 void ED_operatortypes_curve(void)
00060 {
00061         WM_operatortype_append(FONT_OT_text_insert);
00062         WM_operatortype_append(FONT_OT_line_break);
00063         WM_operatortype_append(FONT_OT_insert_lorem);
00064 
00065         WM_operatortype_append(FONT_OT_case_toggle);
00066         WM_operatortype_append(FONT_OT_case_set);
00067         WM_operatortype_append(FONT_OT_style_toggle);
00068         WM_operatortype_append(FONT_OT_style_set);
00069 
00070         WM_operatortype_append(FONT_OT_text_copy);
00071         WM_operatortype_append(FONT_OT_text_cut);
00072         WM_operatortype_append(FONT_OT_text_paste);
00073         WM_operatortype_append(FONT_OT_file_paste);
00074         WM_operatortype_append(FONT_OT_buffer_paste);
00075 
00076         WM_operatortype_append(FONT_OT_move);
00077         WM_operatortype_append(FONT_OT_move_select);
00078         WM_operatortype_append(FONT_OT_delete);
00079 
00080         WM_operatortype_append(FONT_OT_change_character);
00081         WM_operatortype_append(FONT_OT_change_spacing);
00082         
00083         WM_operatortype_append(FONT_OT_open);
00084         WM_operatortype_append(FONT_OT_unlink);
00085         
00086         WM_operatortype_append(FONT_OT_textbox_add);
00087         WM_operatortype_append(FONT_OT_textbox_remove);
00088 
00089         WM_operatortype_append(CURVE_OT_hide);
00090         WM_operatortype_append(CURVE_OT_reveal);
00091 
00092         WM_operatortype_append(CURVE_OT_separate);
00093         WM_operatortype_append(CURVE_OT_duplicate);
00094         WM_operatortype_append(CURVE_OT_delete);
00095 
00096         WM_operatortype_append(CURVE_OT_spline_type_set);
00097         WM_operatortype_append(CURVE_OT_radius_set);
00098         WM_operatortype_append(CURVE_OT_spline_weight_set);
00099         WM_operatortype_append(CURVE_OT_handle_type_set);
00100         WM_operatortype_append(CURVE_OT_shade_smooth);
00101         WM_operatortype_append(CURVE_OT_shade_flat);
00102         WM_operatortype_append(CURVE_OT_tilt_clear);
00103         
00104         WM_operatortype_append(CURVE_OT_primitive_bezier_curve_add);
00105         WM_operatortype_append(CURVE_OT_primitive_bezier_circle_add);
00106         WM_operatortype_append(CURVE_OT_primitive_nurbs_curve_add);
00107         WM_operatortype_append(CURVE_OT_primitive_nurbs_circle_add);
00108         WM_operatortype_append(CURVE_OT_primitive_nurbs_path_add);
00109         
00110         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_curve_add);
00111         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_circle_add);
00112         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_surface_add);
00113         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_cylinder_add);
00114         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_sphere_add);
00115         WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_torus_add);
00116         
00117         WM_operatortype_append(CURVE_OT_smooth);
00118         WM_operatortype_append(CURVE_OT_smooth_radius);
00119 
00120         WM_operatortype_append(CURVE_OT_de_select_first);
00121         WM_operatortype_append(CURVE_OT_de_select_last);
00122         WM_operatortype_append(CURVE_OT_select_all);
00123         WM_operatortype_append(CURVE_OT_select_inverse);
00124         WM_operatortype_append(CURVE_OT_select_linked);
00125         WM_operatortype_append(CURVE_OT_select_linked_pick);
00126         WM_operatortype_append(CURVE_OT_select_row);
00127         WM_operatortype_append(CURVE_OT_select_next);
00128         WM_operatortype_append(CURVE_OT_select_previous);
00129         WM_operatortype_append(CURVE_OT_select_more);
00130         WM_operatortype_append(CURVE_OT_select_less);
00131         WM_operatortype_append(CURVE_OT_select_random);
00132         WM_operatortype_append(CURVE_OT_select_nth);
00133 
00134         WM_operatortype_append(CURVE_OT_switch_direction);
00135         WM_operatortype_append(CURVE_OT_subdivide);
00136         WM_operatortype_append(CURVE_OT_make_segment);
00137         WM_operatortype_append(CURVE_OT_spin);
00138         WM_operatortype_append(CURVE_OT_vertex_add);
00139         WM_operatortype_append(CURVE_OT_extrude);
00140         WM_operatortype_append(CURVE_OT_cyclic_toggle);
00141 }
00142 
00143 void ED_keymap_curve(wmKeyConfig *keyconf)
00144 {
00145         wmKeyMap *keymap;
00146 //      wmKeyMapItem *kmi;
00147         
00148         keymap= WM_keymap_find(keyconf, "Font", 0, 0);
00149         keymap->poll= ED_operator_editfont;
00150         
00151         /* only set in editmode font, by space_view3d listener */
00152         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", BKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_CHINFO_BOLD);
00153         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_CHINFO_ITALIC);
00154         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", UKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_CHINFO_UNDERLINE);
00155         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_style_toggle", PKEY, KM_PRESS, KM_CTRL, 0)->ptr, "style", CU_CHINFO_SMALLCAPS);
00156 
00157         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_SEL);
00158         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_SEL);
00159         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_delete", BACKSPACEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", DEL_PREV_SEL); /* same as above [#26623] */
00160         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_delete", BACKSPACEKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", DEL_ALL);
00161 
00162         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", HOMEKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_BEGIN);
00163         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", ENDKEY, KM_PRESS, 0, 0)->ptr, "type", LINE_END);
00164         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_CHAR);
00165         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_CHAR);
00166         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", PREV_WORD);
00167         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "type", NEXT_WORD);
00168         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_LINE);
00169         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_LINE);
00170         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", PAGEUPKEY, KM_PRESS, 0, 0)->ptr, "type", PREV_PAGE);
00171         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move", PAGEDOWNKEY, KM_PRESS, 0, 0)->ptr, "type", NEXT_PAGE);
00172 
00173         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", HOMEKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", LINE_BEGIN);
00174         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", ENDKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", LINE_END);
00175         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", LEFTARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_CHAR);
00176         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", RIGHTARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_CHAR);
00177         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", LEFTARROWKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", PREV_WORD);
00178         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", RIGHTARROWKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", NEXT_WORD);
00179         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", UPARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_LINE);
00180         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", DOWNARROWKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_LINE);
00181         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", PREV_PAGE);
00182         RNA_enum_set(WM_keymap_add_item(keymap, "FONT_OT_move_select", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", NEXT_PAGE);
00183 
00184         RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_spacing", LEFTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", -1);
00185         RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_spacing", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", 1);
00186         RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_character", UPARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", 1);
00187         RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_character", DOWNARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", -1);
00188 
00189         WM_keymap_add_item(keymap, "FONT_OT_text_copy", CKEY, KM_PRESS, KM_CTRL, 0);
00190         WM_keymap_add_item(keymap, "FONT_OT_text_copy", CKEY, KM_PRESS, KM_OSKEY, 0);
00191         WM_keymap_add_item(keymap, "FONT_OT_text_cut", XKEY, KM_PRESS, KM_CTRL, 0);
00192         WM_keymap_add_item(keymap, "FONT_OT_text_cut", XKEY, KM_PRESS, KM_OSKEY, 0);
00193         WM_keymap_add_item(keymap, "FONT_OT_text_paste", VKEY, KM_PRESS, KM_CTRL, 0);
00194         WM_keymap_add_item(keymap, "FONT_OT_text_paste", VKEY, KM_PRESS, KM_OSKEY, 0);
00195 
00196         WM_keymap_add_item(keymap, "FONT_OT_line_break", RETKEY, KM_PRESS, 0, 0);
00197         WM_keymap_add_item(keymap, "FONT_OT_text_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last!
00198         RNA_boolean_set(WM_keymap_add_item(keymap, "FONT_OT_text_insert", BACKSPACEKEY, KM_PRESS, KM_ALT, 0)->ptr, "accent", 1); // accented characters
00199 
00200         /* only set in editmode curve, by space_view3d listener */
00201         keymap= WM_keymap_find(keyconf, "Curve", 0, 0);
00202         keymap->poll= ED_operator_editsurfcurve;
00203 
00204         WM_keymap_add_menu(keymap, "INFO_MT_edit_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0);
00205         
00206         WM_keymap_add_item(keymap, "CURVE_OT_handle_type_set", VKEY, KM_PRESS, 0, 0);
00207 
00208         WM_keymap_add_item(keymap, "CURVE_OT_vertex_add", LEFTMOUSE, KM_CLICK, KM_CTRL, 0);
00209 
00210         WM_keymap_add_item(keymap, "CURVE_OT_select_all", AKEY, KM_PRESS, 0, 0);
00211         WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0);
00212         WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
00213         WM_keymap_add_item(keymap, "CURVE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
00214         WM_keymap_add_item(keymap, "CURVE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
00215         WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
00216         WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
00217         RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
00218 
00219         WM_keymap_add_item(keymap, "CURVE_OT_separate", PKEY, KM_PRESS, 0, 0);
00220         WM_keymap_add_item(keymap, "CURVE_OT_extrude", EKEY, KM_PRESS, 0, 0);
00221         WM_keymap_add_item(keymap, "CURVE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
00222         WM_keymap_add_item(keymap, "CURVE_OT_make_segment", FKEY, KM_PRESS, 0, 0);
00223         WM_keymap_add_item(keymap, "CURVE_OT_cyclic_toggle", CKEY, KM_PRESS, KM_ALT, 0);
00224         WM_keymap_add_item(keymap, "CURVE_OT_delete", XKEY, KM_PRESS, 0, 0);
00225         WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0);
00226 
00227         WM_keymap_add_item(keymap, "CURVE_OT_tilt_clear", TKEY, KM_PRESS, KM_ALT, 0);
00228         WM_keymap_add_item(keymap, "TRANSFORM_OT_tilt", TKEY, KM_PRESS, KM_CTRL, 0);
00229         RNA_enum_set(WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", TKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", TFM_TILT);
00230 
00231         RNA_enum_set(WM_keymap_add_item(keymap, "TRANSFORM_OT_transform", SKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", TFM_CURVE_SHRINKFATTEN);
00232 
00233         WM_keymap_add_item(keymap, "CURVE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
00234         WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, 0, 0);
00235         RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
00236 
00237         WM_keymap_add_item(keymap, "OBJECT_OT_vertex_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);
00238         
00239         WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_curve_specials", WKEY, KM_PRESS, 0, 0);
00240 
00241         /* menus */
00242         WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0);
00243 
00244         ED_object_generic_keymap(keyconf, keymap, 3);
00245 }
00246