4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * The Original Code is Copyright (C) 2004-2008 Blender Foundation.
21 * All rights reserved.
24 * Contributor(s): Blender Foundation
26 * ***** END GPL LICENSE BLOCK *****
33 #include "DNA_armature_types.h"
35 #include "DNA_image_types.h"
36 #include "DNA_meshdata_types.h"
37 #include "DNA_mesh_types.h"
38 #include "DNA_object_types.h"
39 #include "DNA_space_types.h"
40 #include "DNA_scene_types.h"
41 #include "DNA_screen_types.h"
42 #include "DNA_texture_types.h"
43 #include "DNA_userdef_types.h" /* U.smooth_viewtx */
44 #include "DNA_view3d_types.h"
45 #include "DNA_windowmanager_types.h"
47 #include "RNA_access.h"
49 #include "MEM_guardedalloc.h"
51 #include "BKE_action.h"
52 #include "BKE_brush.h"
53 #include "BKE_context.h"
54 #include "BKE_curve.h"
55 #include "BKE_depsgraph.h"
56 #include "BKE_displist.h"
57 #include "BKE_effect.h"
58 #include "BKE_global.h"
59 #include "BKE_image.h"
60 #include "BKE_library.h"
63 #include "BKE_modifier.h"
64 #include "BKE_particle.h"
65 #include "BKE_screen.h"
66 #include "BKE_utildefines.h" /* for VECCOPY */
68 #include "ED_armature.h"
69 #include "ED_editparticle.h"
70 #include "ED_object.h"
73 #include "ED_screen.h"
80 #include "BIF_glutil.h"
81 #include "BIF_transform.h"
83 #include "BLI_arithb.h"
84 #include "BLI_blenlib.h"
85 #include "BLI_editVert.h"
87 #include "UI_interface.h"
88 #include "UI_interface_icons.h"
89 #include "UI_resources.h"
90 #include "UI_view2d.h"
94 #include "view3d_intern.h"
98 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
99 * rather than those buttons.
100 * I know the implementation's not good - it's an experiment to see if this
101 * approach would work well
103 * This can be cleaned when I make some new 'mode' icons.
106 #define V3D_OBJECTMODE_SEL ICON_OBJECT
107 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
108 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
109 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
110 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
111 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
112 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
113 #define V3D_POSEMODE_SEL ICON_POSE_HLT
114 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
116 #define TEST_EDITMESH if(obedit==0) return; \
117 if( (v3d->lay & obedit->lay)==0 ) return;
120 static void handle_view3d_lock(void) {}
121 static void allqueue(int x, int y) {}
122 static void countall(void) {}
123 extern void borderselect();
124 static int retopo_mesh_paint_check() {return 0;}
126 /* view3d handler codes */
127 #define VIEW3D_HANDLER_BACKGROUND 1
128 #define VIEW3D_HANDLER_PROPERTIES 2
129 #define VIEW3D_HANDLER_OBJECT 3
130 #define VIEW3D_HANDLER_PREVIEW 4
131 #define VIEW3D_HANDLER_MULTIRES 5
132 #define VIEW3D_HANDLER_TRANSFORM 6
133 #define VIEW3D_HANDLER_GREASEPENCIL 7
135 /* end XXX ************* */
138 /* well... in this file a lot of view mode manipulation happens, so let's have it defined here */
139 void ED_view3d_exit_paint_modes(bContext *C)
141 if(G.f & G_VERTEXPAINT)
142 WM_operator_name_call(C, "VIEW3D_OT_vpaint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
143 else if(G.f & G_WEIGHTPAINT)
144 WM_operator_name_call(C, "VIEW3D_OT_wpaint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
146 if(G.f & G_SCULPTMODE)
147 WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
149 // if(G.f & G_TEXTUREPAINT) set_texturepaint();
150 if(G.f & G_PARTICLEEDIT) PE_set_particle_edit(CTX_data_scene(C));
152 G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
159 static void do_view3d_buttons(bContext *C, void *arg, int event);
161 #define B_SCENELOCK 101
164 #define B_VIEWBUT 104
166 #define B_VIEWRENDER 106
167 #define B_STARTGAME 107
168 #define B_MODESELECT 108
170 #define B_SEL_VERT 110
171 #define B_SEL_EDGE 111
172 #define B_SEL_FACE 112
173 #define B_SEL_PATH 113
174 #define B_SEL_POINT 114
175 #define B_SEL_END 115
176 #define B_MAN_TRANS 116
177 #define B_MAN_ROT 117
178 #define B_MAN_SCALE 118
180 #define B_MAN_MODE 120
181 #define B_VIEW_BUTSEDIT 121
184 #define B_ACTCOPY 124
185 #define B_ACTPASTE 125
186 #define B_ACTPASTEFLIP 126
191 static RegionView3D *wm_region_view3d(const bContext *C)
193 ScrArea *sa= CTX_wm_area(C);
195 /* XXX handle foursplit? */
196 for(ar= sa->regionbase.first; ar; ar= ar->next)
197 if(ar->regiontype==RGN_TYPE_WINDOW)
198 return ar->regiondata;
202 /* XXX; all this context stuff... should become operator */
203 void do_layer_buttons(bContext *C, short event)
205 wmWindow *win= CTX_wm_window(C);
206 Scene *scene= CTX_data_scene(C);
207 ScrArea *sa= CTX_wm_area(C);
208 View3D *v3d= sa->spacedata.first;
209 static int oldlay= 1;
210 short shift, alt, ctrl;
212 shift= win->eventstate->shift;
213 alt= win->eventstate->alt;
214 ctrl= win->eventstate->ctrl;
217 if(v3d->localview) return;
219 if(event==-1 && ctrl) {
220 v3d->scenelock= !v3d->scenelock;
221 do_view3d_buttons(C, NULL, B_SCENELOCK);
222 } else if (event<0) {
223 if(v3d->lay== (1<<20)-1) {
224 if(event==-2 || shift) v3d->lay= oldlay;
231 if(v3d->scenelock) handle_view3d_lock();
233 /* new layers might need unflushed events events */
234 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
238 if(event<11) event+= 10;
241 if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
242 else v3d->lay += (1<<event);
244 do_view3d_buttons(C, NULL, event+B_LAY);
246 ED_area_tag_redraw(sa);
248 if(sa->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
249 if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene);
250 allqueue(REDRAWNLA, 0);
254 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
256 Scene *scene= CTX_data_scene(C);
261 /* Set Active Object as Active Camera */
262 /* XXX ugly hack alert */
263 // G.qual |= LR_CTRLKEY;
264 // persptoetsen(PAD0);
265 // G.qual &= ~LR_CTRLKEY;
268 for( base = FIRSTBASE; base; base = base->next ) {
269 if (base->object->type == OB_CAMERA) {
273 /* XXX use api call! */
281 allqueue(REDRAWVIEW3D, 0);
285 static uiBlock *view3d_view_camerasmenu(bContext *C, ARegion *ar, void *arg_unused)
287 Scene *scene= CTX_data_scene(C);
290 short yco= 0, menuwidth=120;
294 block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV);
295 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
297 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Active Object as Active Camera|Ctrl NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
299 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
301 for( base = FIRSTBASE; base; base = base->next ) {
302 if (base->object->type == OB_CAMERA) {
305 strcpy(camname, base->object->id.name+2);
306 if (base->object == scene->camera) strcat(camname, " (Active)");
308 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
312 uiBlockSetDirection(block, UI_RIGHT);
313 uiTextBoundsBlock(block, 50);
319 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
322 case 0: /* Orbit Left */
325 case 1: /* Orbit Right */
328 case 2: /* Orbit Up */
331 case 3: /* Orbit Down */
334 case 4: /* Pan left */
335 /* XXX ugly hack alert */
336 // G.qual |= LR_CTRLKEY;
338 // G.qual &= ~LR_CTRLKEY;
340 case 5: /* Pan right */
341 /* XXX ugly hack alert */
342 // G.qual |= LR_CTRLKEY;
344 // G.qual &= ~LR_CTRLKEY;
347 /* ugly hack alert */
348 // G.qual |= LR_CTRLKEY;
350 // G.qual &= ~LR_CTRLKEY;
352 case 7: /* Pan down */
353 /* ugly hack alert */
354 // G.qual |= LR_CTRLKEY;
356 // G.qual &= ~LR_CTRLKEY;
358 case 8: /* Zoom In */
359 persptoetsen(PADPLUSKEY);
361 case 9: /* Zoom Out */
362 persptoetsen(PADMINUS);
364 case 10: /* Reset Zoom */
365 persptoetsen(PADENTER);
367 case 11: /* Camera Fly mode */
371 allqueue(REDRAWVIEW3D, 0);
375 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, ARegion *ar, void *arg_unused)
377 /* static short tog=0; */
379 short yco= 0, menuwidth=120;
381 block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV);
382 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
384 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
386 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
389 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
390 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
391 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
393 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
395 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
396 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
397 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
398 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
400 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
402 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
403 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
404 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
406 uiBlockSetDirection(block, UI_RIGHT);
407 uiTextBoundsBlock(block, 50);
411 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
413 Scene *scene= CTX_data_scene(C);
414 ScrArea *sa= CTX_wm_area(C);
415 View3D *v3d= sa->spacedata.first;
416 Object *obedit = CTX_data_edit_object(C);
421 case 0: /* Align View to Selected (edit/faceselect mode) */
424 if ((obedit) && (obedit->type == OB_MESH)) {
425 editmesh_align_view_to_selected(v3d, event + 1);
427 else if (FACESEL_PAINT_TEST) {
428 Object *obact= OBACT;
429 if (obact && obact->type==OB_MESH) {
430 Mesh *me= obact->data;
433 // XXX faceselect_align_view_to_selected(v3d, me, event + 1);
434 ED_area_tag_redraw(sa);
439 case 3: /* Center View to Cursor */
440 curs= give_cursor(scene, v3d);
441 v3d->ofs[0]= -curs[0];
442 v3d->ofs[1]= -curs[1];
443 v3d->ofs[2]= -curs[2];
444 ED_area_tag_redraw(sa);
446 case 4: /* Align Active Camera to View */
447 /* XXX This ugly hack is a symptom of the nasty persptoetsen function,
448 * but at least it works for now.
450 // G.qual |= LR_CTRLKEY|LR_ALTKEY;
452 // G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
454 case 5: /* Align View to Selected (object mode) */
455 // XXX mainqenter(PADASTERKEY, 1);
457 case 6: /* Center View and Cursor to Origin */
458 WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
459 curs= give_cursor(scene, v3d);
460 curs[0]=curs[1]=curs[2]= 0.0;
463 allqueue(REDRAWVIEW3D, 0);
466 static uiBlock *view3d_view_alignviewmenu(bContext *C, ARegion *ar, void *arg_unused)
468 /* static short tog=0; */
470 Object *obedit = CTX_data_edit_object(C);
471 short yco= 0, menuwidth=120;
473 block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV);
474 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
476 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
477 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor and View All|Shift C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
478 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align Active Camera to View|Ctrl Alt NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
480 if (((obedit) && (obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
481 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Top)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
482 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Front)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Side)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
485 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
488 uiBlockSetDirection(block, UI_RIGHT);
489 uiTextBoundsBlock(block, 50);
495 static uiBlock *view3d_view_spacehandlers(bContext *C, ARegion *ar, void *arg_unused)
502 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
516 case 5: /* Perspective */
518 case 6: /* Orthographic */
520 case 7: /* Local View */
522 case 8: /* Global View */
524 case 9: /* View All (Home) */
525 WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_EXEC_REGION_WIN, NULL);
527 case 11: /* View Selected */
528 WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
530 case 13: /* Play Back Animation */
532 case 15: /* Background Image... */
533 // add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
535 case 16: /* View Panel */
536 // add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
538 case 17: /* Set Clipping Border */
539 WM_operator_name_call(C, "VIEW3D_OT_clipping", WM_OP_INVOKE_REGION_WIN, NULL);
541 case 18: /* render preview */
542 // toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
544 case 19: /* zoom within border */
545 // view3d_border_zoom();
547 case 20: /* Transform Space Panel */
548 // add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
550 case 21: /* Grease Pencil */
551 // add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
553 case 22: /* View all layers */
554 do_layer_buttons(C, -2);
557 allqueue(REDRAWVIEW3D, 1);
561 static void view3d_view_viewnavmenu(bContext *C, uiMenuItem *head, void *arg_unused)
563 // uiMenuItemO(head, 0, "VIEW3D_OT_view_fly_mode");
565 // uiMenuSeparator(head);
567 uiMenuItemsEnumO(head, "VIEW3D_OT_view_orbit", "type");
569 uiMenuSeparator(head);
571 uiMenuItemsEnumO(head, "VIEW3D_OT_view_pan", "type");
573 uiMenuSeparator(head);
575 uiMenuItemFloatO(head, "Zoom in", 0, "VIEW3D_OT_viewzoom", "delta", 1.0f);
576 uiMenuItemFloatO(head, "Zoom out", 0, "VIEW3D_OT_viewzoom", "delta", -1.0f);
579 static void view3d_view_alignviewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
583 static void view3d_view_camerasmenu(bContext *C, uiMenuItem *head, void *arg_unused)
587 static void view3d_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
589 ScrArea *sa= CTX_wm_area(C);
591 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations...
592 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview...
593 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties....
594 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image....
595 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil....
597 // uiMenuSeparator(head);
599 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA);
600 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP);
601 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT);
602 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT);
604 //uiMenuLevel(head, "Cameras", view3d_view_camerasmenu);
606 uiMenuSeparator(head);
608 uiMenuItemO(head, 0, "VIEW3D_OT_view_persportho");
610 uiMenuSeparator(head);
612 // uiMenuItemO(head, 0, "VIEW3D_OT_view_show_all_layers");
614 // uiMenuSeparator(head);
616 // uiMenuItemO(head, 0, "VIEW3D_OT_view_local_view");
617 // uiMenuItemO(head, 0, "VIEW3D_OT_view_global_view");
619 // uiMenuSeparator(head);
621 uiMenuLevel(head, "View Navigation", view3d_view_viewnavmenu);
622 uiMenuLevel(head, "Align View", view3d_view_alignviewmenu);
624 uiMenuSeparator(head);
626 uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
628 uiMenuItemO(head, 0, "VIEW3D_OT_clipping");
629 uiMenuItemO(head, 0, "VIEW3D_OT_border_zoom");
631 uiMenuSeparator(head);
633 uiMenuItemO(head, 0, "VIEW3D_OT_viewcenter");
634 uiMenuItemO(head, 0, "VIEW3D_OT_viewhome");
636 uiMenuSeparator(head);
638 if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
639 else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
642 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
644 ScrArea *sa= CTX_wm_area(C);
645 View3D *v3d= sa->spacedata.first;
646 RegionView3D *rv3d= wm_region_view3d(C);
648 short yco= 0, menuwidth=120;
650 block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP, UI_HELV);
651 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
653 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
654 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
655 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
656 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
657 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
659 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
661 if ((rv3d->viewbut == 0) && !(rv3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
662 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
663 if (rv3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
664 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
665 if (rv3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
666 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
667 if (rv3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
668 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
669 if (rv3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
670 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
672 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
674 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
676 if(rv3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
677 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
678 if(rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
679 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
681 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
683 if(v3d->lay== (1<<20)-1) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Previous Layers|Shift ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
684 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
686 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
688 if(v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
689 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
690 if(!v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
691 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
693 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
695 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
696 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
698 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
700 if(rv3d->rflag & RV3D_CLIPPING)
701 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
703 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
704 if (rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
705 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
706 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
707 if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
708 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
710 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
712 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
714 #ifndef DISABLE_PYTHON
715 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
716 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
719 if(ar->alignment==RGN_ALIGN_TOP) {
720 uiBlockSetDirection(block, UI_DOWN);
723 uiBlockSetDirection(block, UI_TOP);
724 uiBlockFlipOrder(block);
727 uiTextBoundsBlock(block, 50);
734 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
737 extern void selectall_type(short obtype);
741 selectall_type(OB_MESH);
744 selectall_type(OB_CURVE);
746 case 3: /* Surface */
747 selectall_type(OB_SURF);
750 selectall_type(OB_MBALL);
752 case 5: /* Armature */
753 selectall_type(OB_ARMATURE);
755 case 6: /* Lattice */
756 selectall_type(OB_LATTICE);
759 selectall_type(OB_FONT);
762 selectall_type(OB_EMPTY);
765 selectall_type(OB_CAMERA);
768 selectall_type(OB_LAMP);
771 do_layer_buttons(C, -2);
774 allqueue(REDRAWVIEW3D, 0);
777 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
780 short yco = 20, menuwidth = 120;
782 block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV);
783 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
785 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
786 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
787 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
788 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
790 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
792 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
793 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
794 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
795 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
797 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
799 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
800 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
802 uiBlockSetDirection(block, UI_RIGHT);
803 uiTextBoundsBlock(block, 60);
808 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
810 // XXX extern void selectall_layer(unsigned int layernum);
834 // XXX selectall_layer(event);
837 allqueue(REDRAWVIEW3D, 0);
840 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
843 short xco= 0, yco = 20, menuwidth = 22;
845 block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV);
846 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
848 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
849 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
850 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
851 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
852 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
854 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
855 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
856 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
857 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
858 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
860 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
861 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
862 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
863 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
864 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
866 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
867 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
868 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
869 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
870 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
872 uiBlockSetDirection(block, UI_RIGHT);
873 /*uiTextBoundsBlock(block, 100);*/
877 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
880 case 1: /* Object Ipo */
882 case 3: /* Current Material */
883 case 4: /* Current Texture */
888 allqueue(REDRAWVIEW3D, 0);
891 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
894 short yco = 20, menuwidth = 120;
896 block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV);
897 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
899 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
900 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
901 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
902 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
904 uiBlockSetDirection(block, UI_RIGHT);
905 uiTextBoundsBlock(block, 60);
909 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
913 case 1: /* Children */
914 case 2: /* Immediate Children */
916 case 4: /* Siblings */
918 case 6: /* Objects on Shared Layers */
919 case 7: /* Objects in Same Group */
920 case 8: /* Object Hooks*/
921 case 9: /* Object PassIndex*/
922 case 10: /* Object Color*/
923 case 11: /* Game Properties*/
924 select_object_grouped((short)event);
927 allqueue(REDRAWVIEW3D, 0);
931 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
934 short yco = 20, menuwidth = 120;
936 block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV);
937 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
939 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
940 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
941 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
942 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
943 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects of Same Type|Shift G, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
944 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects on Shared Layers|Shift G, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects in Same Group|Shift G, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
946 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
947 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
948 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
949 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
951 uiBlockSetDirection(block, UI_RIGHT);
952 uiTextBoundsBlock(block, 60);
958 static uiBlock *view3d_select_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
961 // short yco= 0, menuwidth=120;
963 block= uiBeginBlock(C, ar, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
966 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
968 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
970 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
972 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
973 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
974 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
976 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
977 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
979 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
981 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
982 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
984 uiDefMenuButO(block, "VIEW3D_OT_borderselect", "Border Select");
988 uiDefMenuButO(block, "OBJECT_OT_de_select_all", "Select/Deselect All");
989 uiDefMenuButO(block, "OBJECT_OT_select_invert", "Inverse");
990 uiDefMenuButO(block, "OBJECT_OT_select_random", "Random");
991 uiDefMenuButO(block, "OBJECT_OT_select_by_layer", "Select All by Layer");
992 uiDefMenuButO(block, "OBJECT_OT_select_by_type", "Select All by Type");
995 if(ar->alignment==RGN_ALIGN_TOP) {
996 uiBlockSetDirection(block, UI_DOWN);
999 uiBlockSetDirection(block, UI_TOP);
1000 uiBlockFlipOrder(block);
1003 uiTextBoundsBlock(block, 50);
1007 void do_view3d_select_meshmenu(bContext *C, void *arg, int event)
1010 /* extern void borderselect(void);*/
1014 case 0: /* border select */
1017 case 2: /* Select/Deselect all */
1020 case 3: /* Inverse */
1023 case 4: /* select linked vertices */
1024 selectconnected_mesh_all();
1026 case 5: /* select random */
1027 selectrandom_mesh();
1029 case 7: /* select more */
1032 case 8: /* select less */
1035 case 9: /* select non-manifold */
1036 select_non_manifold();
1038 case 11: /* select triangles */
1039 select_faces_by_numverts(3);
1041 case 12: /* select quads */
1042 select_faces_by_numverts(4);
1044 case 13: /* select non-triangles/quads */
1045 select_faces_by_numverts(5);
1047 case 14: /* select sharp edges */
1048 select_sharp_edges();
1050 case 15: /* select linked flat faces */
1051 select_linked_flat_faces();
1054 case 16: /* path select */
1056 ED_undo_push(C, "Path Select");
1058 case 17: /* edge loop select */
1059 loop_multiselect(0);
1061 case 18: /* edge ring select */
1062 loop_multiselect(1);
1064 case 19: /* loop to region */
1067 case 20: /* region to loop */
1070 case 21: /* Select grouped */
1071 select_mesh_group_menu();
1074 allqueue(REDRAWVIEW3D, 0);
1079 static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
1082 short yco= 0, menuwidth=120;
1084 block= uiBeginBlock(C, ar, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV);
1085 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1087 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1089 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1091 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1092 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1094 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1095 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1097 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1098 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1099 "Non-Manifold|Ctrl Alt Shift M",
1100 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1101 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1102 "Sharp Edges|Ctrl Alt Shift S",
1103 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1104 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1105 "Linked Flat Faces|Ctrl Alt Shift F",
1106 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1108 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1109 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1112 "Triangles|Ctrl Alt Shift 3",
1113 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1114 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1115 "Quads|Ctrl Alt Shift 4",
1116 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1117 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1118 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1119 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1120 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1121 "Similar to Selection...|Shift G",
1122 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1124 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1125 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1127 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1128 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1129 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1130 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1132 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1133 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1135 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1136 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1137 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1138 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1140 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1141 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1143 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1144 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1146 if(ar->alignment==RGN_ALIGN_TOP) {
1147 uiBlockSetDirection(block, UI_DOWN);
1150 uiBlockSetDirection(block, UI_TOP);
1151 uiBlockFlipOrder(block);
1154 uiTextBoundsBlock(block, 50);
1158 void do_view3d_select_curvemenu(bContext *C, void *arg, int event)
1161 /* extern void borderselect(void);*/
1164 case 0: /* border select */
1167 case 2: /* Select/Deselect all */
1170 case 3: /* Inverse */
1173 /* select connected control points */
1175 G.qual |= LR_CTRLKEY;
1176 select_connected_nurb();
1177 G.qual &= ~LR_CTRLKEY;
1179 case 5: /* select row (nurb) */
1182 case 7: /* select/deselect first */
1183 selectend_nurb(FIRST, 1, DESELECT);
1185 case 8: /* select/deselect last */
1186 selectend_nurb(LAST, 1, DESELECT);
1188 case 9: /* select more */
1191 case 10: /* select less */
1194 case 11: /* select next */
1197 case 12: /* select previous */
1200 case 13: /* select random */
1201 select_random_nurb();
1203 case 14: /* select every nth */
1204 select_every_nth_nurb();
1207 allqueue(REDRAWVIEW3D, 0);
1212 static uiBlock *view3d_select_curvemenu(bContext *C, ARegion *ar, void *arg_unused)
1214 Scene *scene= CTX_data_scene(C);
1216 short yco= 0, menuwidth=120;
1218 block= uiBeginBlock(C, ar, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV);
1219 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1221 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1223 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1225 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1226 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1227 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1228 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1230 if (OBACT->type == OB_SURF) {
1231 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1233 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1236 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1238 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1239 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1240 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1241 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1244 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1245 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1246 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1248 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1249 /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1251 if(ar->alignment==RGN_ALIGN_TOP) {
1252 uiBlockSetDirection(block, UI_DOWN);
1255 uiBlockSetDirection(block, UI_TOP);
1256 uiBlockFlipOrder(block);
1259 uiTextBoundsBlock(block, 50);
1263 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1268 case 0: /* border select */
1271 case 2: /* Select/Deselect all */
1272 deselectall_mball();
1274 case 3: /* Inverse */
1275 selectinverse_mball();
1277 case 4: /* Select Random */
1278 selectrandom_mball();
1281 allqueue(REDRAWVIEW3D, 0);
1286 static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_unused)
1289 short yco= 0, menuwidth=120;
1291 block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV);
1292 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1294 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1296 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1298 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1300 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1302 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1304 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1306 if(ar->alignment==RGN_ALIGN_TOP) {
1307 uiBlockSetDirection(block, UI_DOWN);
1310 uiBlockSetDirection(block, UI_TOP);
1311 uiBlockFlipOrder(block);
1314 uiTextBoundsBlock(block, 50);
1318 static void do_view3d_select_latticemenu(bContext *C, void *arg, int event)
1321 /* extern void borderselect(void);*/
1324 case 0: /* border select */
1327 case 2: /* Select/Deselect all */
1331 allqueue(REDRAWVIEW3D, 0);
1335 static uiBlock *view3d_select_latticemenu(bContext *C, ARegion *ar, void *arg_unused)
1338 short yco= 0, menuwidth=120;
1340 block= uiBeginBlock(C, ar, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV);
1341 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1343 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1345 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1347 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1349 if(ar->alignment==RGN_ALIGN_TOP) {
1350 uiBlockSetDirection(block, UI_DOWN);
1353 uiBlockSetDirection(block, UI_TOP);
1354 uiBlockFlipOrder(block);
1357 uiTextBoundsBlock(block, 50);
1361 static void do_view3d_select_armaturemenu(bContext *C, void *arg, int event)
1364 /* extern void borderselect(void);*/
1367 case 0: /* border select */
1370 case 2: /* Select/Deselect all */
1371 deselectall_armature(1, 1);
1373 case 3: /* Swap Select All */
1374 deselectall_armature(3, 1);
1376 case 4: /* Select parent */
1377 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1379 case 5: /* Select child */
1380 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1382 case 6: /* Extend Select parent */
1383 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1385 case 7: /* Extend Select child */
1386 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1389 allqueue(REDRAWVIEW3D, 0);
1393 static uiBlock *view3d_select_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1396 short yco= 0, menuwidth=120;
1398 block= uiBeginBlock(C, ar, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV);
1399 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1401 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1403 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1405 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1406 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1408 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1410 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1411 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1413 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1415 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1416 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1418 if(ar->alignment==RGN_ALIGN_TOP) {
1419 uiBlockSetDirection(block, UI_DOWN);
1422 uiBlockSetDirection(block, UI_TOP);
1423 uiBlockFlipOrder(block);
1426 uiTextBoundsBlock(block, 50);
1430 static void do_view3d_select_pose_armaturemenu(bContext *C, void *arg, int event)
1433 /* extern void borderselect(void);*/
1436 case 0: /* border select */
1439 case 2: /* Select/Deselect all */
1440 deselectall_posearmature(OBACT, 1, 1);
1442 case 3: /* Select Target(s) of Constraint(s) */
1443 pose_select_constraint_target();
1445 case 5: /* Swap Select All */
1446 deselectall_posearmature(OBACT, 3, 1);
1448 case 6: /* Select parent */
1449 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1451 case 7: /* Select child */
1452 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1454 case 8: /* Extend Select parent */
1455 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1457 case 9: /* Extend Select child */
1458 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1461 allqueue(REDRAWVIEW3D, 0);
1465 static uiBlock *view3d_select_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1468 short yco= 0, menuwidth=120;
1470 block= uiBeginBlock(C, ar, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
1471 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1473 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1475 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1477 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1478 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1479 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1481 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1484 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1486 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1488 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1489 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1491 if(ar->alignment==RGN_ALIGN_TOP) {
1492 uiBlockSetDirection(block, UI_DOWN);
1495 uiBlockSetDirection(block, UI_TOP);
1496 uiBlockFlipOrder(block);
1499 uiTextBoundsBlock(block, 50);
1503 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1506 /* events >= 6 are registered bpython scripts */
1507 #ifndef DISABLE_PYTHON
1508 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1512 case 0: /* border select */
1515 case 2: /* Select/Deselect all */
1516 deselectall_tface();
1518 case 3: /* Select Inverse */
1521 case 4: /* Select Linked */
1522 select_linked_tfaces(2);
1525 allqueue(REDRAWVIEW3D, 0);
1529 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1532 short yco= 0, menuwidth=120;
1533 #ifndef DISABLE_PYTHON
1534 // XXX BPyMenu *pym;
1538 block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV);
1539 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1541 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1543 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1545 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1546 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1548 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1549 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1551 #ifndef DISABLE_PYTHON
1552 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1554 /* note that we account for the 6 previous entries with i+6: */
1555 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1556 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1557 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1558 // pym->tooltip?pym->tooltip:pym->filename);
1562 if(ar->alignment==RGN_ALIGN_TOP) {
1563 uiBlockSetDirection(block, UI_DOWN);
1566 uiBlockSetDirection(block, UI_TOP);
1567 uiBlockFlipOrder(block);
1570 uiTextBoundsBlock(block, 50);
1574 void do_view3d_edit_snapmenu(bContext *C, void *arg, int event)
1578 case 1: /*Selection to grid*/
1580 ED_undo_push(C, "Snap selection to grid");
1582 case 2: /*Selection to cursor*/
1584 ED_undo_push(C, "Snap selection to cursor");
1586 case 3: /*Selection to center of selection*/
1588 ED_undo_push(C, "Snap selection to center");
1590 case 4: /*Cursor to selection*/
1593 case 5: /*Cursor to grid*/
1594 snap_curs_to_grid();
1596 case 6: /*Cursor to Active*/
1597 snap_curs_to_active();
1598 ED_undo_push(C, "Snap selection to center");
1601 allqueue(REDRAWVIEW3D, 0);
1605 static uiBlock *view3d_edit_snapmenu(bContext *C, ARegion *ar, void *arg_unused)
1608 short yco = 20, menuwidth = 120;
1610 block= uiBeginBlock(C, ar, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV);
1611 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1613 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1614 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1615 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1616 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1617 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1618 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1619 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1623 uiBlockSetDirection(block, UI_RIGHT);
1624 uiTextBoundsBlock(block, 60);
1628 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1637 case 0: /* X Global */
1638 initTransform(TFM_TRANSLATION, CTX_NONE);
1639 BIF_setSingleAxisConstraint(mat[0], " X");
1642 case 1: /* Y Global */
1643 initTransform(TFM_TRANSLATION, CTX_NONE);
1644 BIF_setSingleAxisConstraint(mat[1], " Y");
1647 case 2: /* Z Global */
1648 initTransform(TFM_TRANSLATION, CTX_NONE);
1649 BIF_setSingleAxisConstraint(mat[2], " Z");
1652 case 3: /* X Local */
1653 initTransform(TFM_TRANSLATION, CTX_NONE);
1654 BIF_setLocalAxisConstraint('X', " X");
1657 case 4: /* Y Local */
1658 initTransform(TFM_TRANSLATION, CTX_NONE);
1659 BIF_setLocalAxisConstraint('Y', " Y");
1662 case 5: /* Z Local */
1663 initTransform(TFM_TRANSLATION, CTX_NONE);
1664 BIF_setLocalAxisConstraint('Z', " Z");
1668 allqueue(REDRAWVIEW3D, 0);
1672 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1675 short yco = 20, menuwidth = 120;
1677 block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV);
1678 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1680 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1681 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1682 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1684 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1686 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1687 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1688 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1691 uiBlockSetDirection(block, UI_RIGHT);
1692 uiTextBoundsBlock(block, 60);
1696 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1705 case 0: /* X Global */
1706 initTransform(TFM_ROTATION, CTX_NONE);
1707 BIF_setSingleAxisConstraint(mat[0], " X");
1710 case 1: /* Y Global */
1711 initTransform(TFM_ROTATION, CTX_NONE);
1712 BIF_setSingleAxisConstraint(mat[1], " Y");
1715 case 2: /* Z Global */
1716 initTransform(TFM_ROTATION, CTX_NONE);
1717 BIF_setSingleAxisConstraint(mat[2], " Z");
1720 case 3: /* X Local */
1721 initTransform(TFM_ROTATION, CTX_NONE);
1722 BIF_setLocalAxisConstraint('X', " X");
1725 case 4: /* Y Local */
1726 initTransform(TFM_ROTATION, CTX_NONE);
1727 BIF_setLocalAxisConstraint('Y', " Y");
1730 case 5: /* Z Local */
1731 initTransform(TFM_ROTATION, CTX_NONE);
1732 BIF_setLocalAxisConstraint('Z', " Z");
1736 allqueue(REDRAWVIEW3D, 0);
1740 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1743 short yco = 20, menuwidth = 120;
1745 block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV);
1746 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1748 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1749 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1750 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1752 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1754 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1755 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1756 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1759 uiBlockSetDirection(block, UI_RIGHT);
1760 uiTextBoundsBlock(block, 60);
1764 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1773 case 0: /* X Global */
1774 initTransform(TFM_RESIZE, CTX_NONE);
1775 BIF_setSingleAxisConstraint(mat[0], " X");
1778 case 1: /* Y Global */
1779 initTransform(TFM_RESIZE, CTX_NONE);
1780 BIF_setSingleAxisConstraint(mat[1], " Y");
1783 case 2: /* Z Global */
1784 initTransform(TFM_RESIZE, CTX_NONE);
1785 BIF_setSingleAxisConstraint(mat[2], " Z");
1788 case 3: /* X Local */
1789 initTransform(TFM_RESIZE, CTX_NONE);
1790 BIF_setLocalAxisConstraint('X', " X");
1793 case 4: /* Y Local */
1794 initTransform(TFM_RESIZE, CTX_NONE);
1795 BIF_setLocalAxisConstraint('X', " X");
1798 case 5: /* Z Local */
1799 initTransform(TFM_RESIZE, CTX_NONE);
1800 BIF_setLocalAxisConstraint('X', " X");
1804 allqueue(REDRAWVIEW3D, 0);
1808 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1811 short yco = 20, menuwidth = 120;
1813 block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV);
1814 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1816 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1817 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1818 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1820 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1822 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1823 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1824 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1827 uiBlockSetDirection(block, UI_RIGHT);
1828 uiTextBoundsBlock(block, 60);
1832 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1835 Scene *scene= CTX_data_scene(C);
1839 initTransform(TFM_TRANSLATION, CTX_NONE);
1843 initTransform(TFM_ROTATION, CTX_NONE);
1847 initTransform(TFM_RESIZE, CTX_NONE);
1854 initTransform(TFM_TOSPHERE, CTX_NONE);
1858 initTransform(TFM_SHEAR, CTX_NONE);
1862 initTransform(TFM_WARP, CTX_NONE);
1866 initTransform(TFM_PUSHPULL, CTX_NONE);
1871 if (obedit->type == OB_MESH)
1872 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1874 } else error("Only meshes can be shrinked/fattened");
1886 initTransform(TFM_TILT, CTX_NONE);
1890 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1894 scene->snap_flag &= ~SCE_SNAP;
1897 scene->snap_flag |= SCE_SNAP;
1900 scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1903 scene->snap_target = SCE_SNAP_TARGET_CENTER;
1906 scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1909 scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1915 allqueue(REDRAWVIEW3D, 0);
1919 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1921 Scene *scene= CTX_data_scene(C);
1922 Object *obedit = CTX_data_edit_object(C);
1924 short yco = 20, menuwidth = 120;
1926 block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP, UI_HELV);
1927 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1929 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1930 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1932 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1933 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1935 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1936 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1938 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1941 if (obedit->type == OB_MESH)
1942 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1943 else if (obedit->type == OB_CURVE) {
1944 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1948 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1949 if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1950 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1951 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1952 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1955 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1957 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale to Image Aspect Ratio|Alt V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1960 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1964 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1965 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1966 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align to Transform Orientation|Ctrl Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1969 if (BIF_snappingSupported(obedit))
1971 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1973 if (scene->snap_flag & SCE_SNAP)
1975 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1976 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1980 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1981 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1984 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1986 switch(scene->snap_target)
1988 case SCE_SNAP_TARGET_CLOSEST:
1989 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1990 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1991 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1992 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1994 case SCE_SNAP_TARGET_CENTER:
1995 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1996 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1997 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1998 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2000 case SCE_SNAP_TARGET_MEDIAN:
2001 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2002 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2003 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2004 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2006 case SCE_SNAP_TARGET_ACTIVE:
2007 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2008 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2009 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2010 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2015 uiBlockSetDirection(block, UI_RIGHT);
2016 uiTextBoundsBlock(block, 60);
2020 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
2025 initTransform(TFM_MIRROR, CTX_NO_PET);
2029 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2030 BIF_setLocalAxisConstraint('X', " on X axis");
2034 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2035 BIF_setLocalAxisConstraint('Y', " on Y axis");
2039 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2040 BIF_setLocalAxisConstraint('Z', " on Z axis");
2044 allqueue(REDRAWVIEW3D, 0);
2048 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2051 short yco = 20, menuwidth = 120;
2053 block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV);
2054 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2056 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2057 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2058 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2059 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2060 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2062 uiBlockSetDirection(block, UI_RIGHT);
2063 uiTextBoundsBlock(block, 60);
2067 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2071 case 0: /* clear origin */
2074 case 1: /* clear scale */
2077 case 2: /* clear rotation */
2080 case 3: /* clear location */
2084 if(OBACT) object_apply_deform(OBACT);
2086 case 5: /* make duplis real */
2087 make_duplilist_real();
2089 case 6: /* apply scale/rotation or deformation */
2090 apply_objects_locrot();
2092 case 7: /* apply visual matrix to objects loc/size/rot */
2093 apply_objects_visual_tx();
2096 allqueue(REDRAWVIEW3D, 0);
2100 static uiBlock *view3d_edit_object_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
2103 short yco = 20, menuwidth = 120;
2105 block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV);
2106 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2108 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Scale/Rotation to ObData|Ctrl A, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2109 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2110 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2113 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2115 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2116 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2117 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2118 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2120 uiBlockSetDirection(block, UI_RIGHT);
2121 uiTextBoundsBlock(block, 60);
2125 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2138 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
2141 short yco = 20, menuwidth = 120;
2143 block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV);
2144 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2146 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2147 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2148 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2150 uiBlockSetDirection(block, UI_RIGHT);
2151 uiTextBoundsBlock(block, 60);
2155 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2163 make_links((short)event);
2166 allqueue(REDRAWVIEW3D, 0);
2170 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
2172 Scene *scene= CTX_data_scene(C);
2176 short yco = 20, menuwidth = 120;
2178 block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV);
2179 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2181 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2183 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2185 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2189 if(ob->type==OB_MESH) {
2190 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2191 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2192 } else if(ob->type==OB_CURVE) {
2193 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2194 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2195 } else if(ob->type==OB_FONT) {
2196 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2197 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2198 } else if(ob->type==OB_SURF) {
2199 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2200 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2201 } else if(ob->type==OB_MBALL) {
2202 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2203 } else if(ob->type==OB_CAMERA) {
2204 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2205 } else if(ob->type==OB_LAMP) {
2206 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2207 } else if(ob->type==OB_LATTICE) {
2208 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2209 } else if(ob->type==OB_ARMATURE) {
2210 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2214 uiBlockSetDirection(block, UI_RIGHT);
2215 uiTextBoundsBlock(block, 60);
2219 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2223 case 1: /* Object */
2224 single_object_users(1);
2226 case 2: /* Object & ObData */
2227 single_object_users(1);
2228 single_obdata_users(1);
2230 case 3: /* Object & ObData & Materials+Tex */
2231 single_object_users(1);
2232 single_obdata_users(1);
2233 single_mat_users(1); /* also tex */
2235 case 4: /* Materials+Tex */
2236 single_mat_users(1);
2239 single_ipo_users(1);
2243 clear_id_newpoins();
2246 allqueue(REDRAWALL, 0);
2250 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
2254 short yco = 20, menuwidth = 120;
2256 block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV);
2257 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2259 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2260 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2261 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2262 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2263 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2265 uiBlockSetDirection(block, UI_RIGHT);
2266 uiTextBoundsBlock(block, 60);
2270 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2296 // XXX copy_attr((short)event);
2299 allqueue(REDRAWVIEW3D, 0);
2302 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
2304 Scene *scene= CTX_data_scene(C);
2308 short yco = 20, menuwidth = 120;
2310 block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV);
2311 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2315 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2316 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2317 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2318 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2319 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2320 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2322 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2324 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2325 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2326 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2327 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2328 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2329 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2331 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2333 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2334 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2338 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2339 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2340 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2343 if(ob->type == OB_FONT) {
2344 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2345 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2346 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2348 if(ob->type == OB_CURVE) {
2349 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2350 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2353 if(ob->type==OB_MESH) {
2354 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2355 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2357 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2360 uiBlockSetDirection(block, UI_RIGHT);
2361 uiTextBoundsBlock(block, 60);
2366 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2370 case 0: /* clear parent */
2373 case 1: /* make parent */
2377 allqueue(REDRAWVIEW3D, 0);
2381 static uiBlock *view3d_edit_object_parentmenu(bContext *C, ARegion *ar, void *arg_unused)
2384 short yco = 20, menuwidth = 120;
2386 block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV);
2387 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2389 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2390 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2392 uiBlockSetDirection(block, UI_RIGHT);
2393 uiTextBoundsBlock(block, 60);
2397 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2404 group_operation(event);
2407 allqueue(REDRAWVIEW3D, 0);
2411 static uiBlock *view3d_edit_object_groupmenu(bContext *C, ARegion *ar, void *arg_unused)
2414 short yco = 20, menuwidth = 120;
2416 block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV);
2417 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2419 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add to Existing Group|Ctrl G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2420 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add to New Group|Ctrl G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2421 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove from All Groups|Ctrl G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2423 uiBlockSetDirection(block, UI_RIGHT);
2424 uiTextBoundsBlock(block, 60);
2428 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2432 case 0: /* clear track */
2435 case 1: /* make track */
2439 allqueue(REDRAWVIEW3D, 0);
2443 static uiBlock *view3d_edit_object_trackmenu(bContext *C, ARegion *ar, void *arg_unused)
2446 short yco = 20, menuwidth = 120;
2448 block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV);
2449 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2451 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2452 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2454 uiBlockSetDirection(block, UI_RIGHT);
2455 uiTextBoundsBlock(block, 60);
2459 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2463 case 1: /* add constraint */
2466 case 2: /* clear constraint */
2467 ob_clear_constraints();
2470 allqueue(REDRAWVIEW3D, 0);
2474 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, ARegion *ar, void *arg_unused)
2477 short yco = 20, menuwidth = 120;
2479 block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV);
2480 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2482 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2485 uiBlockSetDirection(block, UI_RIGHT);
2486 uiTextBoundsBlock(block, 60);
2490 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2496 case 0: /* show objects */
2499 case 1: /* hide selected objects */
2502 case 2: /* hide deselected objects */
2506 allqueue(REDRAWVIEW3D, 0);
2510 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
2513 short yco = 20, menuwidth = 120;
2515 block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV);
2516 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2518 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2519 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2520 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2522 uiBlockSetDirection(block, UI_RIGHT);
2523 uiTextBoundsBlock(block, 60);
2527 #ifndef DISABLE_PYTHON
2528 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2531 BPY_menu_do_python(PYMENU_OBJECT, event);
2533 allqueue(REDRAWVIEW3D, 0);
2537 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2540 // short yco = 20, menuwidth = 120;
2541 // XXX BPyMenu *pym;
2544 block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV);
2545 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2547 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2548 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, i, pym->tooltip?pym->tooltip:pym->filename);
2551 uiBlockSetDirection(block, UI_RIGHT);
2552 uiTextBoundsBlock(block, 60);
2556 #endif /* DISABLE_PYTHON */
2559 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2562 Scene *scene= CTX_data_scene(C);
2563 ScrArea *sa= CTX_wm_area(C);
2564 View3D *v3d= sa->spacedata.first;
2568 case 0: /* transform properties*/
2569 // XXX mainqenter(NKEY, 1);
2571 case 1: /* delete */
2572 delete_context_selected();
2574 case 2: /* duplicate */
2575 duplicate_context_selected();
2577 case 3: /* duplicate linked */
2580 case 5: /* make single user */
2583 case 7: /* boolean operation */
2586 case 8: /* join objects */
2589 case 9: /* convert object type */
2592 case 10: /* move to layer */
2595 case 11: /* insert keyframe */
2598 case 15: /* Object Panel */
2599 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2601 case 16: /* make proxy object*/
2604 case 18: /* delete keyframe */
2608 allqueue(REDRAWVIEW3D, 0);
2612 static uiBlock *view3d_edit_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
2614 Scene *scene= CTX_data_scene(C);
2616 short yco= 0, menuwidth=120;
2618 block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV);
2619 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2621 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2622 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2623 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2625 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2626 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2628 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2630 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2631 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2633 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2635 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2636 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2637 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2639 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2641 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2642 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2643 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2644 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2645 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2647 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2649 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2650 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2651 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2652 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2654 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2656 if (OBACT && OBACT->type == OB_MESH) {
2657 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2659 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2660 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2662 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2664 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2665 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2667 #ifndef DISABLE_PYTHON
2668 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2669 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2672 if(ar->alignment==RGN_ALIGN_TOP) {
2673 uiBlockSetDirection(block, UI_DOWN);
2676 uiBlockSetDirection(block, UI_TOP);
2677 uiBlockFlipOrder(block);
2680 uiTextBoundsBlock(block, 50);
2685 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2687 Scene *scene= CTX_data_scene(C);
2689 scene->prop_mode= event;
2691 allqueue(REDRAWVIEW3D, 1);
2694 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, ARegion *ar, void *arg_unused)
2696 Scene *scene= CTX_data_scene(C);
2698 short yco = 20, menuwidth = 120;
2700 block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV);
2701 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2703 if (scene->prop_mode==PROP_SMOOTH) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2704 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2705 if (scene->prop_mode==PROP_SPHERE) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2706 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2707 if (scene->prop_mode==PROP_ROOT) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2708 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2709 if (scene->prop_mode==PROP_SHARP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2710 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2711 if (scene->prop_mode==PROP_LIN) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2712 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2713 if (scene->prop_mode==PROP_RANDOM) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2714 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2715 if (scene->prop_mode==PROP_CONST) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2716 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2718 uiBlockSetDirection(block, UI_RIGHT);
2719 uiTextBoundsBlock(block, 60);
2724 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2727 Scene *scene= CTX_data_scene(C);
2732 case 0: /* make vertex parent */
2735 case 1: /* remove doubles */
2736 count= removedoublesflag(1, 0, scene->toolsettings->doublimit);
2737 notice("Removed: %d", count);
2738 if (count) { /* only undo and redraw if an action is taken */
2739 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2740 ED_undo_push(C, "Rem Doubles");
2743 case 2: /* smooth */
2746 case 3: /* separate */
2754 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2756 case 6: /* add hook */
2763 allqueue(REDRAWVIEW3D, 0);
2767 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, ARegion *ar, void *arg_unused)
2770 short yco = 20, menuwidth = 120;
2772 block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV);
2773 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2775 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2776 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2777 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2778 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2780 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2782 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2783 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2785 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2787 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2788 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2790 uiBlockSetDirection(block, UI_RIGHT);
2791 uiTextBoundsBlock(block, 60);
2795 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2797 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2800 Scene *scene= CTX_data_scene(C);
2806 case 0: /* subdivide smooth */
2807 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2808 ED_undo_push(C, "Subdivide Smooth");
2810 case 1: /*subdivide fractal */
2812 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2813 fac= -( (float)randfac )/100;
2814 esubdivideflag(1, fac, scene->toolsettings->editbutflag,1,0);
2815 ED_undo_push(C, "Subdivide Fractal");
2817 case 2: /* subdivide */
2818 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag,1,0);
2819 ED_undo_push(C, "Subdivide");
2821 case 3: /* knife subdivide */
2822 KnifeSubdivide(KNIFE_PROMPT);
2824 case 4: /* Loop subdivide */
2827 case 5: /* Make Edge/Face */
2833 case 7: /* Mark Seam */
2834 editmesh_mark_seam(0);
2836 case 8: /* Clear Seam */
2837 editmesh_mark_seam(1);
2839 case 9: /* Crease SubSurf */
2840 if(!multires_level1_test()) {
2841 initTransform(TFM_CREASE, CTX_EDGE);
2845 case 10: /* Rotate Edge */
2846 edge_rotate_selected(2);
2848 case 11: /* Rotate Edge */
2849 edge_rotate_selected(1);
2851 case 12: /* Edgeslide */
2854 case 13: /* Edge Loop Delete */
2855 if(EdgeLoopDelete()) {
2857 ED_undo_push(C, "Erase Edge Loop");
2858 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2861 case 14: /*Collapse Edges*/
2863 ED_undo_push(C, "Collapse");
2866 editmesh_mark_sharp(1);
2867 ED_undo_push(C, "Mark Sharp");
2868 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2871 editmesh_mark_sharp(0);
2872 ED_undo_push(C, "Clear Sharp");
2873 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2875 case 17: /* Adjust Bevel Weight */
2876 if(!multires_level1_test()) {
2877 initTransform(TFM_BWEIGHT, CTX_EDGE);
2882 allqueue(REDRAWVIEW3D, 0);
2886 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, ARegion *ar, void *arg_unused)
2889 short yco = 20, menuwidth = 120;
2891 block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV);
2892 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);