|
Blender
V2.59
|
00001 /* 00002 * $Id: object_ops.c 36458 2011-05-03 07:09:02Z 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) 2008 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 #include "DNA_object_types.h" 00038 #include "DNA_scene_types.h" 00039 00040 #include "BLI_math.h" 00041 #include "BLI_blenlib.h" 00042 #include "BLI_utildefines.h" 00043 00044 #include "BKE_context.h" 00045 00046 #include "RNA_access.h" 00047 #include "RNA_define.h" 00048 00049 #include "WM_api.h" 00050 #include "WM_types.h" 00051 00052 #include "ED_screen.h" 00053 #include "ED_object.h" 00054 00055 #include "object_intern.h" 00056 00057 00058 /* ************************** registration **********************************/ 00059 00060 00061 void ED_operatortypes_object(void) 00062 { 00063 WM_operatortype_append(OBJECT_OT_location_clear); 00064 WM_operatortype_append(OBJECT_OT_rotation_clear); 00065 WM_operatortype_append(OBJECT_OT_scale_clear); 00066 WM_operatortype_append(OBJECT_OT_origin_clear); 00067 WM_operatortype_append(OBJECT_OT_visual_transform_apply); 00068 WM_operatortype_append(OBJECT_OT_transform_apply); 00069 WM_operatortype_append(OBJECT_OT_origin_set); 00070 00071 WM_operatortype_append(OBJECT_OT_mode_set); 00072 WM_operatortype_append(OBJECT_OT_editmode_toggle); 00073 WM_operatortype_append(OBJECT_OT_posemode_toggle); 00074 WM_operatortype_append(OBJECT_OT_proxy_make); 00075 WM_operatortype_append(OBJECT_OT_hide_view_clear); 00076 WM_operatortype_append(OBJECT_OT_hide_view_set); 00077 WM_operatortype_append(OBJECT_OT_hide_render_clear); 00078 WM_operatortype_append(OBJECT_OT_hide_render_set); 00079 WM_operatortype_append(OBJECT_OT_shade_smooth); 00080 WM_operatortype_append(OBJECT_OT_shade_flat); 00081 WM_operatortype_append(OBJECT_OT_paths_calculate); 00082 WM_operatortype_append(OBJECT_OT_paths_clear); 00083 WM_operatortype_append(OBJECT_OT_forcefield_toggle); 00084 00085 WM_operatortype_append(OBJECT_OT_parent_set); 00086 WM_operatortype_append(OBJECT_OT_parent_no_inverse_set); 00087 WM_operatortype_append(OBJECT_OT_parent_clear); 00088 WM_operatortype_append(OBJECT_OT_vertex_parent_set); 00089 WM_operatortype_append(OBJECT_OT_track_set); 00090 WM_operatortype_append(OBJECT_OT_track_clear); 00091 WM_operatortype_append(OBJECT_OT_slow_parent_set); 00092 WM_operatortype_append(OBJECT_OT_slow_parent_clear); 00093 WM_operatortype_append(OBJECT_OT_make_local); 00094 WM_operatortype_append(OBJECT_OT_make_single_user); 00095 WM_operatortype_append(OBJECT_OT_make_links_scene); 00096 WM_operatortype_append(OBJECT_OT_make_links_data); 00097 WM_operatortype_append(OBJECT_OT_move_to_layer); 00098 00099 WM_operatortype_append(OBJECT_OT_select_inverse); 00100 WM_operatortype_append(OBJECT_OT_select_random); 00101 WM_operatortype_append(OBJECT_OT_select_all); 00102 WM_operatortype_append(OBJECT_OT_select_same_group); 00103 WM_operatortype_append(OBJECT_OT_select_by_type); 00104 WM_operatortype_append(OBJECT_OT_select_by_layer); 00105 WM_operatortype_append(OBJECT_OT_select_linked); 00106 WM_operatortype_append(OBJECT_OT_select_grouped); 00107 WM_operatortype_append(OBJECT_OT_select_mirror); 00108 WM_operatortype_append(OBJECT_OT_select_name); /* XXX - weak, not compat with linked objects */ 00109 00110 WM_operatortype_append(GROUP_OT_create); 00111 WM_operatortype_append(GROUP_OT_objects_remove); 00112 WM_operatortype_append(GROUP_OT_objects_add_active); 00113 WM_operatortype_append(GROUP_OT_objects_remove_active); 00114 00115 WM_operatortype_append(OBJECT_OT_delete); 00116 WM_operatortype_append(OBJECT_OT_text_add); 00117 WM_operatortype_append(OBJECT_OT_armature_add); 00118 WM_operatortype_append(OBJECT_OT_lamp_add); 00119 WM_operatortype_append(OBJECT_OT_camera_add); 00120 WM_operatortype_append(OBJECT_OT_add); 00121 WM_operatortype_append(OBJECT_OT_add_named); 00122 WM_operatortype_append(OBJECT_OT_effector_add); 00123 WM_operatortype_append(OBJECT_OT_group_instance_add); 00124 WM_operatortype_append(OBJECT_OT_metaball_add); 00125 WM_operatortype_append(OBJECT_OT_duplicates_make_real); 00126 WM_operatortype_append(OBJECT_OT_duplicate); 00127 WM_operatortype_append(OBJECT_OT_join); 00128 WM_operatortype_append(OBJECT_OT_join_shapes); 00129 WM_operatortype_append(OBJECT_OT_convert); 00130 00131 WM_operatortype_append(OBJECT_OT_modifier_add); 00132 WM_operatortype_append(OBJECT_OT_modifier_remove); 00133 WM_operatortype_append(OBJECT_OT_modifier_move_up); 00134 WM_operatortype_append(OBJECT_OT_modifier_move_down); 00135 WM_operatortype_append(OBJECT_OT_modifier_apply); 00136 WM_operatortype_append(OBJECT_OT_modifier_convert); 00137 WM_operatortype_append(OBJECT_OT_modifier_copy); 00138 WM_operatortype_append(OBJECT_OT_multires_subdivide); 00139 WM_operatortype_append(OBJECT_OT_multires_reshape); 00140 WM_operatortype_append(OBJECT_OT_multires_higher_levels_delete); 00141 WM_operatortype_append(OBJECT_OT_multires_base_apply); 00142 WM_operatortype_append(OBJECT_OT_multires_external_save); 00143 WM_operatortype_append(OBJECT_OT_multires_external_pack); 00144 WM_operatortype_append(OBJECT_OT_meshdeform_bind); 00145 WM_operatortype_append(OBJECT_OT_explode_refresh); 00146 00147 WM_operatortype_append(OBJECT_OT_constraint_add); 00148 WM_operatortype_append(OBJECT_OT_constraint_add_with_targets); 00149 WM_operatortype_append(POSE_OT_constraint_add); 00150 WM_operatortype_append(POSE_OT_constraint_add_with_targets); 00151 WM_operatortype_append(OBJECT_OT_constraints_copy); 00152 WM_operatortype_append(POSE_OT_constraints_copy); 00153 WM_operatortype_append(OBJECT_OT_constraints_clear); 00154 WM_operatortype_append(POSE_OT_constraints_clear); 00155 WM_operatortype_append(POSE_OT_ik_add); 00156 WM_operatortype_append(POSE_OT_ik_clear); 00157 WM_operatortype_append(CONSTRAINT_OT_delete); 00158 WM_operatortype_append(CONSTRAINT_OT_move_up); 00159 WM_operatortype_append(CONSTRAINT_OT_move_down); 00160 WM_operatortype_append(CONSTRAINT_OT_stretchto_reset); 00161 WM_operatortype_append(CONSTRAINT_OT_limitdistance_reset); 00162 WM_operatortype_append(CONSTRAINT_OT_childof_set_inverse); 00163 WM_operatortype_append(CONSTRAINT_OT_childof_clear_inverse); 00164 00165 WM_operatortype_append(OBJECT_OT_vertex_group_add); 00166 WM_operatortype_append(OBJECT_OT_vertex_group_remove); 00167 WM_operatortype_append(OBJECT_OT_vertex_group_assign); 00168 WM_operatortype_append(OBJECT_OT_vertex_group_remove_from); 00169 WM_operatortype_append(OBJECT_OT_vertex_group_select); 00170 WM_operatortype_append(OBJECT_OT_vertex_group_deselect); 00171 WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_linked); 00172 WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_selected); 00173 WM_operatortype_append(OBJECT_OT_vertex_group_copy); 00174 WM_operatortype_append(OBJECT_OT_vertex_group_normalize); 00175 WM_operatortype_append(OBJECT_OT_vertex_group_normalize_all); 00176 WM_operatortype_append(OBJECT_OT_vertex_group_invert); 00177 WM_operatortype_append(OBJECT_OT_vertex_group_levels); 00178 WM_operatortype_append(OBJECT_OT_vertex_group_blend); 00179 WM_operatortype_append(OBJECT_OT_vertex_group_clean); 00180 WM_operatortype_append(OBJECT_OT_vertex_group_mirror); 00181 WM_operatortype_append(OBJECT_OT_vertex_group_set_active); 00182 WM_operatortype_append(OBJECT_OT_vertex_group_sort); 00183 WM_operatortype_append(OBJECT_OT_vertex_group_move); 00184 00185 WM_operatortype_append(OBJECT_OT_game_property_new); 00186 WM_operatortype_append(OBJECT_OT_game_property_remove); 00187 WM_operatortype_append(OBJECT_OT_game_property_copy); 00188 WM_operatortype_append(OBJECT_OT_game_property_clear); 00189 WM_operatortype_append(OBJECT_OT_logic_bricks_copy); 00190 00191 WM_operatortype_append(OBJECT_OT_shape_key_add); 00192 WM_operatortype_append(OBJECT_OT_shape_key_remove); 00193 WM_operatortype_append(OBJECT_OT_shape_key_clear); 00194 WM_operatortype_append(OBJECT_OT_shape_key_mirror); 00195 WM_operatortype_append(OBJECT_OT_shape_key_move); 00196 00197 WM_operatortype_append(LATTICE_OT_select_all); 00198 WM_operatortype_append(LATTICE_OT_make_regular); 00199 00200 WM_operatortype_append(OBJECT_OT_group_add); 00201 WM_operatortype_append(OBJECT_OT_group_link); 00202 WM_operatortype_append(OBJECT_OT_group_remove); 00203 00204 WM_operatortype_append(OBJECT_OT_hook_add_selobj); 00205 WM_operatortype_append(OBJECT_OT_hook_add_newobj); 00206 WM_operatortype_append(OBJECT_OT_hook_remove); 00207 WM_operatortype_append(OBJECT_OT_hook_select); 00208 WM_operatortype_append(OBJECT_OT_hook_assign); 00209 WM_operatortype_append(OBJECT_OT_hook_reset); 00210 WM_operatortype_append(OBJECT_OT_hook_recenter); 00211 00212 WM_operatortype_append(OBJECT_OT_bake_image); 00213 WM_operatortype_append(OBJECT_OT_drop_named_material); 00214 } 00215 00216 void ED_operatormacros_object(void) 00217 { 00218 wmOperatorType *ot; 00219 wmOperatorTypeMacro *otmacro; 00220 00221 ot= WM_operatortype_append_macro("OBJECT_OT_duplicate_move", "Duplicate Objects", OPTYPE_UNDO|OPTYPE_REGISTER); 00222 if(ot) { 00223 WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); 00224 otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); 00225 RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF); 00226 } 00227 00228 /* grr, should be able to pass options on... */ 00229 ot= WM_operatortype_append_macro("OBJECT_OT_duplicate_move_linked", "Duplicate Linked", OPTYPE_UNDO|OPTYPE_REGISTER); 00230 if(ot) { 00231 otmacro= WM_operatortype_macro_define(ot, "OBJECT_OT_duplicate"); 00232 RNA_boolean_set(otmacro->ptr, "linked", 1); 00233 otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate"); 00234 RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF); 00235 } 00236 00237 /* XXX */ 00238 ot= WM_operatortype_append_macro("OBJECT_OT_add_named_cursor", "Add named object at cursor", OPTYPE_UNDO|OPTYPE_REGISTER); 00239 if(ot) { 00240 RNA_def_string(ot->srna, "name", "Cube", 24, "Name", "Object name to add."); 00241 00242 WM_operatortype_macro_define(ot, "VIEW3D_OT_cursor3d"); 00243 WM_operatortype_macro_define(ot, "OBJECT_OT_add_named"); 00244 } 00245 } 00246 00247 static int object_mode_poll(bContext *C) 00248 { 00249 Object *ob= CTX_data_active_object(C); 00250 return (!ob || ob->mode == OB_MODE_OBJECT); 00251 } 00252 00253 void ED_keymap_object(wmKeyConfig *keyconf) 00254 { 00255 wmKeyMap *keymap; 00256 wmKeyMapItem *kmi; 00257 int i; 00258 00259 /* Objects, Regardless of Mode -------------------------------------------------- */ 00260 keymap= WM_keymap_find(keyconf, "Object Non-modal", 0, 0); 00261 00262 /* Note: this keymap works disregarding mode */ 00263 kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, 0, 0); 00264 RNA_enum_set(kmi->ptr, "mode", OB_MODE_EDIT); 00265 RNA_boolean_set(kmi->ptr, "toggle", 1); 00266 00267 kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, KM_CTRL, 0); 00268 RNA_enum_set(kmi->ptr, "mode", OB_MODE_POSE); 00269 RNA_boolean_set(kmi->ptr, "toggle", 1); 00270 00271 kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", VKEY, KM_PRESS, 0, 0); 00272 RNA_enum_set(kmi->ptr, "mode", OB_MODE_VERTEX_PAINT); 00273 RNA_boolean_set(kmi->ptr, "toggle", 1); 00274 00275 kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, KM_CTRL, 0); 00276 RNA_enum_set(kmi->ptr, "mode", OB_MODE_WEIGHT_PAINT); 00277 RNA_boolean_set(kmi->ptr, "toggle", 1); 00278 00279 WM_keymap_add_item(keymap, "OBJECT_OT_origin_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0); 00280 00281 /* Object Mode ---------------------------------------------------------------- */ 00282 /* Note: this keymap gets disabled in non-objectmode, */ 00283 keymap= WM_keymap_find(keyconf, "Object Mode", 0, 0); 00284 keymap->poll= object_mode_poll; 00285 00286 /* object mode supports PET now */ 00287 ED_object_generic_keymap(keyconf, keymap, 1); 00288 00289 WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); 00290 00291 WM_keymap_add_item(keymap, "OBJECT_OT_select_all", AKEY, KM_PRESS, 0, 0); 00292 WM_keymap_add_item(keymap, "OBJECT_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); 00293 WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0); 00294 WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0); 00295 WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); 00296 00297 kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0); 00298 RNA_enum_set_identifier(kmi->ptr, "direction", "PARENT"); 00299 kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0); 00300 RNA_enum_set_identifier(kmi->ptr, "direction", "PARENT"); 00301 RNA_boolean_set(kmi->ptr, "extend", 1); 00302 00303 kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0); 00304 RNA_enum_set_identifier(kmi->ptr, "direction", "CHILD"); 00305 kmi= WM_keymap_add_item(keymap, "OBJECT_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0); 00306 RNA_enum_set_identifier(kmi->ptr, "direction", "CHILD"); 00307 RNA_boolean_set(kmi->ptr, "extend", 1); 00308 00309 WM_keymap_verify_item(keymap, "OBJECT_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); 00310 WM_keymap_verify_item(keymap, "OBJECT_OT_parent_no_inverse_set", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); 00311 WM_keymap_verify_item(keymap, "OBJECT_OT_parent_clear", PKEY, KM_PRESS, KM_ALT, 0); 00312 WM_keymap_verify_item(keymap, "OBJECT_OT_track_set", TKEY, KM_PRESS, KM_CTRL, 0); 00313 WM_keymap_verify_item(keymap, "OBJECT_OT_track_clear", TKEY, KM_PRESS, KM_ALT, 0); 00314 00315 WM_keymap_verify_item(keymap, "OBJECT_OT_constraint_add_with_targets", CKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); 00316 WM_keymap_verify_item(keymap, "OBJECT_OT_constraints_clear", CKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); 00317 00318 WM_keymap_verify_item(keymap, "OBJECT_OT_location_clear", GKEY, KM_PRESS, KM_ALT, 0); 00319 WM_keymap_verify_item(keymap, "OBJECT_OT_rotation_clear", RKEY, KM_PRESS, KM_ALT, 0); 00320 WM_keymap_verify_item(keymap, "OBJECT_OT_scale_clear", SKEY, KM_PRESS, KM_ALT, 0); 00321 WM_keymap_verify_item(keymap, "OBJECT_OT_origin_clear", OKEY, KM_PRESS, KM_ALT, 0); 00322 00323 WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_clear", HKEY, KM_PRESS, KM_ALT, 0); 00324 WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, 0, 0); 00325 RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_hide_view_set", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1); 00326 00327 /* same as above but for rendering */ 00328 WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_clear", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); 00329 WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_CTRL, 0); 00330 // RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_hide_render_set", HKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "unselected", 1); // conflicts, removing 00331 00332 WM_keymap_add_item(keymap, "OBJECT_OT_move_to_layer", MKEY, KM_PRESS, 0, 0); 00333 00334 WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0); 00335 WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, 0, 0); 00336 WM_keymap_add_menu(keymap, "INFO_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0); 00337 00338 WM_keymap_add_item(keymap, "OBJECT_OT_duplicates_make_real", AKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); 00339 00340 WM_keymap_add_menu(keymap, "VIEW3D_MT_object_apply", AKEY, KM_PRESS, KM_CTRL, 0); 00341 WM_keymap_add_menu(keymap, "VIEW3D_MT_make_single_user", UKEY, KM_PRESS, 0, 0); 00342 WM_keymap_add_menu(keymap, "VIEW3D_MT_make_links", LKEY, KM_PRESS, KM_CTRL, 0); 00343 00344 WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); 00345 WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move_linked", DKEY, KM_PRESS, KM_ALT, 0); 00346 00347 WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0); 00348 WM_keymap_add_item(keymap, "OBJECT_OT_convert", CKEY, KM_PRESS, KM_ALT, 0); 00349 WM_keymap_add_item(keymap, "OBJECT_OT_proxy_make", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); 00350 WM_keymap_add_item(keymap, "OBJECT_OT_make_local", LKEY, KM_PRESS, 0, 0); 00351 00352 // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith 00353 WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_insert_menu", IKEY, KM_PRESS, 0, 0); 00354 WM_keymap_verify_item(keymap, "ANIM_OT_keyframe_delete_v3d", IKEY, KM_PRESS, KM_ALT, 0); 00355 WM_keymap_verify_item(keymap, "ANIM_OT_keying_set_active_set", IKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0); 00356 00357 WM_keymap_verify_item(keymap, "GROUP_OT_create", GKEY, KM_PRESS, KM_CTRL, 0); 00358 WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove", GKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); 00359 WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0); 00360 WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); 00361 00362 WM_keymap_add_menu(keymap, "VIEW3D_MT_object_specials", WKEY, KM_PRESS, 0, 0); 00363 00364 for(i=0; i<=5; i++) { 00365 kmi = WM_keymap_add_item(keymap, "OBJECT_OT_subdivision_set", ZEROKEY+i, KM_PRESS, KM_CTRL, 0); 00366 RNA_int_set(kmi->ptr, "level", i); 00367 } 00368 00369 /* ############################################################################ */ 00370 /* ################################ LATTICE ################################### */ 00371 /* ############################################################################ */ 00372 00373 keymap= WM_keymap_find(keyconf, "Lattice", 0, 0); 00374 keymap->poll= ED_operator_editlattice; 00375 00376 WM_keymap_add_item(keymap, "LATTICE_OT_select_all", AKEY, KM_PRESS, 0, 0); 00377 00378 WM_keymap_add_item(keymap, "OBJECT_OT_vertex_parent_set", PKEY, KM_PRESS, KM_CTRL, 0); 00379 00380 /* menus */ 00381 WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0); 00382 00383 ED_object_generic_keymap(keyconf, keymap, 2); 00384 } 00385 00386 void ED_object_generic_keymap(struct wmKeyConfig *UNUSED(keyconf), struct wmKeyMap *keymap, int do_pet) 00387 { 00388 wmKeyMapItem *kmi; 00389 00390 /* used by mesh, curve & lattice only */ 00391 if(do_pet) { 00392 /* context ops */ 00393 kmi = WM_keymap_add_item(keymap, "WM_OT_context_cycle_enum", OKEY, KM_PRESS, KM_SHIFT, 0); 00394 RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit_falloff"); 00395 00396 // Object mode 00397 if (do_pet == 1) { 00398 00399 kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0); 00400 RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_objects"); 00401 00402 } else { // Edit mode 00403 00404 kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0); 00405 RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); 00406 RNA_string_set(kmi->ptr, "value_1", "DISABLED"); 00407 RNA_string_set(kmi->ptr, "value_2", "ENABLED"); 00408 00409 /* for modes/object types that allow 'connected' mode, add the Alt O key */ 00410 if (do_pet == 3) { 00411 kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0); 00412 RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit"); 00413 RNA_string_set(kmi->ptr, "value_1", "DISABLED"); 00414 RNA_string_set(kmi->ptr, "value_2", "CONNECTED"); 00415 } 00416 } 00417 } 00418 } 00419