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)
584 static void view3d_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
586 ScrArea *sa= CTX_wm_area(C);
588 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations...
589 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview...
590 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties....
591 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image....
592 // uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil....
594 // uiMenuSeparator(head);
596 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA);
597 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP);
598 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT);
599 uiMenuItemEnumO(head, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT);
601 //uiMenuLevel(head, "Cameras", view3d_view_camerasmenu);
603 uiMenuSeparator(head);
605 uiMenuItemO(head, 0, "VIEW3D_OT_view_persportho");
607 uiMenuSeparator(head);
609 // uiMenuItemO(head, 0, "VIEW3D_OT_view_show_all_layers");
611 // uiMenuSeparator(head);
613 // uiMenuItemO(head, 0, "VIEW3D_OT_view_local_view");
614 // uiMenuItemO(head, 0, "VIEW3D_OT_view_global_view");
616 // uiMenuSeparator(head);
618 uiMenuLevel(head, "View Navigation", view3d_view_viewnavmenu);
619 uiMenuLevel(head, "Align View", view3d_view_alignviewmenu);
621 uiMenuSeparator(head);
623 uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
625 uiMenuItemO(head, 0, "VIEW3D_OT_clipping");
626 uiMenuItemO(head, 0, "VIEW3D_OT_border_zoom");
628 uiMenuSeparator(head);
630 uiMenuItemO(head, 0, "VIEW3D_OT_viewcenter");
631 uiMenuItemO(head, 0, "VIEW3D_OT_viewhome");
633 uiMenuSeparator(head);
635 if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
636 else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
639 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
641 ScrArea *sa= CTX_wm_area(C);
642 View3D *v3d= sa->spacedata.first;
643 RegionView3D *rv3d= wm_region_view3d(C);
645 short yco= 0, menuwidth=120;
647 block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP, UI_HELV);
648 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
650 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
651 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
652 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
653 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
654 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
656 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
658 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, "");
659 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
660 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, "");
661 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
662 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, "");
663 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
664 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, "");
665 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
666 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, "");
667 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
669 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
671 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
673 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, "");
674 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
675 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, "");
676 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
678 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
680 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, "");
681 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
683 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
685 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, "");
686 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
687 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, "");
688 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
690 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
692 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
693 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
695 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
697 if(rv3d->rflag & RV3D_CLIPPING)
698 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
700 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
701 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, "");
702 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
703 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
704 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, "");
705 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
707 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
709 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
711 #ifndef DISABLE_PYTHON
712 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
713 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
716 if(ar->alignment==RGN_ALIGN_TOP) {
717 uiBlockSetDirection(block, UI_DOWN);
720 uiBlockSetDirection(block, UI_TOP);
721 uiBlockFlipOrder(block);
724 uiTextBoundsBlock(block, 50);
731 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
734 extern void selectall_type(short obtype);
738 selectall_type(OB_MESH);
741 selectall_type(OB_CURVE);
743 case 3: /* Surface */
744 selectall_type(OB_SURF);
747 selectall_type(OB_MBALL);
749 case 5: /* Armature */
750 selectall_type(OB_ARMATURE);
752 case 6: /* Lattice */
753 selectall_type(OB_LATTICE);
756 selectall_type(OB_FONT);
759 selectall_type(OB_EMPTY);
762 selectall_type(OB_CAMERA);
765 selectall_type(OB_LAMP);
768 do_layer_buttons(C, -2);
771 allqueue(REDRAWVIEW3D, 0);
774 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
777 short yco = 20, menuwidth = 120;
779 block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV);
780 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
782 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
783 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
784 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
785 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
787 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
789 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
790 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
791 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
792 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
794 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
796 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
797 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
799 uiBlockSetDirection(block, UI_RIGHT);
800 uiTextBoundsBlock(block, 60);
805 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
807 // XXX extern void selectall_layer(unsigned int layernum);
831 // XXX selectall_layer(event);
834 allqueue(REDRAWVIEW3D, 0);
837 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
840 short xco= 0, yco = 20, menuwidth = 22;
842 block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV);
843 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
845 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
846 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
847 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
848 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
849 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
851 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
852 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
853 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
854 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
855 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
857 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
858 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
859 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
860 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
861 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
863 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
864 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
865 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
866 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
867 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
869 uiBlockSetDirection(block, UI_RIGHT);
870 /*uiTextBoundsBlock(block, 100);*/
874 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
877 case 1: /* Object Ipo */
879 case 3: /* Current Material */
880 case 4: /* Current Texture */
885 allqueue(REDRAWVIEW3D, 0);
888 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
891 short yco = 20, menuwidth = 120;
893 block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV);
894 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
896 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
897 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
898 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
899 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
901 uiBlockSetDirection(block, UI_RIGHT);
902 uiTextBoundsBlock(block, 60);
906 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
910 case 1: /* Children */
911 case 2: /* Immediate Children */
913 case 4: /* Siblings */
915 case 6: /* Objects on Shared Layers */
916 case 7: /* Objects in Same Group */
917 case 8: /* Object Hooks*/
918 case 9: /* Object PassIndex*/
919 case 10: /* Object Color*/
920 case 11: /* Game Properties*/
921 select_object_grouped((short)event);
924 allqueue(REDRAWVIEW3D, 0);
928 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
931 short yco = 20, menuwidth = 120;
933 block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV);
934 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
936 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
937 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
938 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
939 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
940 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, "");
941 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, "");
942 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, "");
943 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
944 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
946 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
948 uiBlockSetDirection(block, UI_RIGHT);
949 uiTextBoundsBlock(block, 60);
955 static uiBlock *view3d_select_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
958 // short yco= 0, menuwidth=120;
960 block= uiBeginBlock(C, ar, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
963 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
965 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
967 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
969 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
970 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
971 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
973 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
974 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
976 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
978 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
979 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
981 uiDefMenuButO(block, "VIEW3D_OT_borderselect", "Border Select");
985 uiDefMenuButO(block, "OBJECT_OT_de_select_all", "Select/Deselect All");
986 uiDefMenuButO(block, "OBJECT_OT_select_invert", "Inverse");
987 uiDefMenuButO(block, "OBJECT_OT_select_random", "Random");
988 uiDefMenuButO(block, "OBJECT_OT_select_by_layer", "Select All by Layer");
989 uiDefMenuButO(block, "OBJECT_OT_select_by_type", "Select All by Type");
992 if(ar->alignment==RGN_ALIGN_TOP) {
993 uiBlockSetDirection(block, UI_DOWN);
996 uiBlockSetDirection(block, UI_TOP);
997 uiBlockFlipOrder(block);
1000 uiTextBoundsBlock(block, 50);
1004 void do_view3d_select_meshmenu(bContext *C, void *arg, int event)
1007 /* extern void borderselect(void);*/
1011 case 0: /* border select */
1014 case 2: /* Select/Deselect all */
1017 case 3: /* Inverse */
1020 case 4: /* select linked vertices */
1021 selectconnected_mesh_all();
1023 case 5: /* select random */
1024 selectrandom_mesh();
1026 case 7: /* select more */
1029 case 8: /* select less */
1032 case 9: /* select non-manifold */
1033 select_non_manifold();
1035 case 11: /* select triangles */
1036 select_faces_by_numverts(3);
1038 case 12: /* select quads */
1039 select_faces_by_numverts(4);
1041 case 13: /* select non-triangles/quads */
1042 select_faces_by_numverts(5);
1044 case 14: /* select sharp edges */
1045 select_sharp_edges();
1047 case 15: /* select linked flat faces */
1048 select_linked_flat_faces();
1051 case 16: /* path select */
1053 ED_undo_push(C, "Path Select");
1055 case 17: /* edge loop select */
1056 loop_multiselect(0);
1058 case 18: /* edge ring select */
1059 loop_multiselect(1);
1061 case 19: /* loop to region */
1064 case 20: /* region to loop */
1067 case 21: /* Select grouped */
1068 select_mesh_group_menu();
1071 allqueue(REDRAWVIEW3D, 0);
1076 static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
1079 short yco= 0, menuwidth=120;
1081 block= uiBeginBlock(C, ar, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV);
1082 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1084 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1086 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1088 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1089 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1091 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1092 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1094 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1095 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1096 "Non-Manifold|Ctrl Alt Shift M",
1097 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1098 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1099 "Sharp Edges|Ctrl Alt Shift S",
1100 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1101 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1102 "Linked Flat Faces|Ctrl Alt Shift F",
1103 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1105 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1106 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1108 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1109 "Triangles|Ctrl Alt Shift 3",
1110 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1112 "Quads|Ctrl Alt Shift 4",
1113 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1114 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1115 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1116 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1117 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1118 "Similar to Selection...|Shift G",
1119 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1121 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1122 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1124 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1125 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1126 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1127 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1129 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1130 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1132 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1133 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1134 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1135 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1137 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1138 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1140 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1141 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1143 if(ar->alignment==RGN_ALIGN_TOP) {
1144 uiBlockSetDirection(block, UI_DOWN);
1147 uiBlockSetDirection(block, UI_TOP);
1148 uiBlockFlipOrder(block);
1151 uiTextBoundsBlock(block, 50);
1155 void do_view3d_select_curvemenu(bContext *C, void *arg, int event)
1158 /* extern void borderselect(void);*/
1161 case 0: /* border select */
1164 case 2: /* Select/Deselect all */
1167 case 3: /* Inverse */
1170 /* select connected control points */
1172 G.qual |= LR_CTRLKEY;
1173 select_connected_nurb();
1174 G.qual &= ~LR_CTRLKEY;
1176 case 5: /* select row (nurb) */
1179 case 7: /* select/deselect first */
1180 selectend_nurb(FIRST, 1, DESELECT);
1182 case 8: /* select/deselect last */
1183 selectend_nurb(LAST, 1, DESELECT);
1185 case 9: /* select more */
1188 case 10: /* select less */
1191 case 11: /* select next */
1194 case 12: /* select previous */
1197 case 13: /* select random */
1198 select_random_nurb();
1200 case 14: /* select every nth */
1201 select_every_nth_nurb();
1204 allqueue(REDRAWVIEW3D, 0);
1209 static uiBlock *view3d_select_curvemenu(bContext *C, ARegion *ar, void *arg_unused)
1211 Scene *scene= CTX_data_scene(C);
1213 short yco= 0, menuwidth=120;
1215 block= uiBeginBlock(C, ar, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV);
1216 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1218 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1220 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1222 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1223 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1224 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1225 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1227 if (OBACT->type == OB_SURF) {
1228 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1230 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1233 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1235 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1236 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1237 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1238 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1241 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1242 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1243 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1245 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1246 /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1248 if(ar->alignment==RGN_ALIGN_TOP) {
1249 uiBlockSetDirection(block, UI_DOWN);
1252 uiBlockSetDirection(block, UI_TOP);
1253 uiBlockFlipOrder(block);
1256 uiTextBoundsBlock(block, 50);
1260 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1265 case 0: /* border select */
1268 case 2: /* Select/Deselect all */
1269 deselectall_mball();
1271 case 3: /* Inverse */
1272 selectinverse_mball();
1274 case 4: /* Select Random */
1275 selectrandom_mball();
1278 allqueue(REDRAWVIEW3D, 0);
1283 static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_unused)
1286 short yco= 0, menuwidth=120;
1288 block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV);
1289 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1291 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1293 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1295 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1297 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1299 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1301 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1303 if(ar->alignment==RGN_ALIGN_TOP) {
1304 uiBlockSetDirection(block, UI_DOWN);
1307 uiBlockSetDirection(block, UI_TOP);
1308 uiBlockFlipOrder(block);
1311 uiTextBoundsBlock(block, 50);
1315 static void do_view3d_select_latticemenu(bContext *C, void *arg, int event)
1318 /* extern void borderselect(void);*/
1321 case 0: /* border select */
1324 case 2: /* Select/Deselect all */
1328 allqueue(REDRAWVIEW3D, 0);
1332 static uiBlock *view3d_select_latticemenu(bContext *C, ARegion *ar, void *arg_unused)
1335 short yco= 0, menuwidth=120;
1337 block= uiBeginBlock(C, ar, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV);
1338 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1340 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1342 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1344 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1346 if(ar->alignment==RGN_ALIGN_TOP) {
1347 uiBlockSetDirection(block, UI_DOWN);
1350 uiBlockSetDirection(block, UI_TOP);
1351 uiBlockFlipOrder(block);
1354 uiTextBoundsBlock(block, 50);
1358 static void do_view3d_select_armaturemenu(bContext *C, void *arg, int event)
1361 /* extern void borderselect(void);*/
1364 case 0: /* border select */
1367 case 2: /* Select/Deselect all */
1368 deselectall_armature(1, 1);
1370 case 3: /* Swap Select All */
1371 deselectall_armature(3, 1);
1373 case 4: /* Select parent */
1374 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1376 case 5: /* Select child */
1377 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1379 case 6: /* Extend Select parent */
1380 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1382 case 7: /* Extend Select child */
1383 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1386 allqueue(REDRAWVIEW3D, 0);
1390 static uiBlock *view3d_select_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1393 short yco= 0, menuwidth=120;
1395 block= uiBeginBlock(C, ar, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV);
1396 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1398 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1400 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1402 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1403 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1405 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1407 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1408 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1410 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1412 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1413 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1415 if(ar->alignment==RGN_ALIGN_TOP) {
1416 uiBlockSetDirection(block, UI_DOWN);
1419 uiBlockSetDirection(block, UI_TOP);
1420 uiBlockFlipOrder(block);
1423 uiTextBoundsBlock(block, 50);
1427 static void do_view3d_select_pose_armaturemenu(bContext *C, void *arg, int event)
1430 /* extern void borderselect(void);*/
1433 case 0: /* border select */
1436 case 2: /* Select/Deselect all */
1437 deselectall_posearmature(OBACT, 1, 1);
1439 case 3: /* Select Target(s) of Constraint(s) */
1440 pose_select_constraint_target();
1442 case 5: /* Swap Select All */
1443 deselectall_posearmature(OBACT, 3, 1);
1445 case 6: /* Select parent */
1446 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1448 case 7: /* Select child */
1449 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1451 case 8: /* Extend Select parent */
1452 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1454 case 9: /* Extend Select child */
1455 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1458 allqueue(REDRAWVIEW3D, 0);
1462 static uiBlock *view3d_select_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1465 short yco= 0, menuwidth=120;
1467 block= uiBeginBlock(C, ar, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
1468 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1470 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1472 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1474 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1475 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1476 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1478 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1480 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1481 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1483 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1485 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1486 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1488 if(ar->alignment==RGN_ALIGN_TOP) {
1489 uiBlockSetDirection(block, UI_DOWN);
1492 uiBlockSetDirection(block, UI_TOP);
1493 uiBlockFlipOrder(block);
1496 uiTextBoundsBlock(block, 50);
1500 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1503 /* events >= 6 are registered bpython scripts */
1504 #ifndef DISABLE_PYTHON
1505 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1509 case 0: /* border select */
1512 case 2: /* Select/Deselect all */
1513 deselectall_tface();
1515 case 3: /* Select Inverse */
1518 case 4: /* Select Linked */
1519 select_linked_tfaces(2);
1522 allqueue(REDRAWVIEW3D, 0);
1526 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1529 short yco= 0, menuwidth=120;
1530 #ifndef DISABLE_PYTHON
1531 // XXX BPyMenu *pym;
1535 block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV);
1536 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1538 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1540 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1542 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1543 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1545 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1546 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1548 #ifndef DISABLE_PYTHON
1549 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1551 /* note that we account for the 6 previous entries with i+6: */
1552 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1553 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1554 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1555 // pym->tooltip?pym->tooltip:pym->filename);
1559 if(ar->alignment==RGN_ALIGN_TOP) {
1560 uiBlockSetDirection(block, UI_DOWN);
1563 uiBlockSetDirection(block, UI_TOP);
1564 uiBlockFlipOrder(block);
1567 uiTextBoundsBlock(block, 50);
1571 void do_view3d_edit_snapmenu(bContext *C, void *arg, int event)
1575 case 1: /*Selection to grid*/
1577 ED_undo_push(C, "Snap selection to grid");
1579 case 2: /*Selection to cursor*/
1581 ED_undo_push(C, "Snap selection to cursor");
1583 case 3: /*Selection to center of selection*/
1585 ED_undo_push(C, "Snap selection to center");
1587 case 4: /*Cursor to selection*/
1590 case 5: /*Cursor to grid*/
1591 snap_curs_to_grid();
1593 case 6: /*Cursor to Active*/
1594 snap_curs_to_active();
1595 ED_undo_push(C, "Snap selection to center");
1598 allqueue(REDRAWVIEW3D, 0);
1602 static uiBlock *view3d_edit_snapmenu(bContext *C, ARegion *ar, void *arg_unused)
1605 short yco = 20, menuwidth = 120;
1607 block= uiBeginBlock(C, ar, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV);
1608 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1610 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1611 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1612 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1613 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1614 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1615 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1616 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1620 uiBlockSetDirection(block, UI_RIGHT);
1621 uiTextBoundsBlock(block, 60);
1625 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1634 case 0: /* X Global */
1635 initTransform(TFM_TRANSLATION, CTX_NONE);
1636 BIF_setSingleAxisConstraint(mat[0], " X");
1639 case 1: /* Y Global */
1640 initTransform(TFM_TRANSLATION, CTX_NONE);
1641 BIF_setSingleAxisConstraint(mat[1], " Y");
1644 case 2: /* Z Global */
1645 initTransform(TFM_TRANSLATION, CTX_NONE);
1646 BIF_setSingleAxisConstraint(mat[2], " Z");
1649 case 3: /* X Local */
1650 initTransform(TFM_TRANSLATION, CTX_NONE);
1651 BIF_setLocalAxisConstraint('X', " X");
1654 case 4: /* Y Local */
1655 initTransform(TFM_TRANSLATION, CTX_NONE);
1656 BIF_setLocalAxisConstraint('Y', " Y");
1659 case 5: /* Z Local */
1660 initTransform(TFM_TRANSLATION, CTX_NONE);
1661 BIF_setLocalAxisConstraint('Z', " Z");
1665 allqueue(REDRAWVIEW3D, 0);
1669 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1672 short yco = 20, menuwidth = 120;
1674 block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV);
1675 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1677 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1678 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1679 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1681 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1683 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1684 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1685 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1688 uiBlockSetDirection(block, UI_RIGHT);
1689 uiTextBoundsBlock(block, 60);
1693 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1702 case 0: /* X Global */
1703 initTransform(TFM_ROTATION, CTX_NONE);
1704 BIF_setSingleAxisConstraint(mat[0], " X");
1707 case 1: /* Y Global */
1708 initTransform(TFM_ROTATION, CTX_NONE);
1709 BIF_setSingleAxisConstraint(mat[1], " Y");
1712 case 2: /* Z Global */
1713 initTransform(TFM_ROTATION, CTX_NONE);
1714 BIF_setSingleAxisConstraint(mat[2], " Z");
1717 case 3: /* X Local */
1718 initTransform(TFM_ROTATION, CTX_NONE);
1719 BIF_setLocalAxisConstraint('X', " X");
1722 case 4: /* Y Local */
1723 initTransform(TFM_ROTATION, CTX_NONE);
1724 BIF_setLocalAxisConstraint('Y', " Y");
1727 case 5: /* Z Local */
1728 initTransform(TFM_ROTATION, CTX_NONE);
1729 BIF_setLocalAxisConstraint('Z', " Z");
1733 allqueue(REDRAWVIEW3D, 0);
1737 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1740 short yco = 20, menuwidth = 120;
1742 block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV);
1743 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1745 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1746 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1747 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1749 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1751 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1752 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1753 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1756 uiBlockSetDirection(block, UI_RIGHT);
1757 uiTextBoundsBlock(block, 60);
1761 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1770 case 0: /* X Global */
1771 initTransform(TFM_RESIZE, CTX_NONE);
1772 BIF_setSingleAxisConstraint(mat[0], " X");
1775 case 1: /* Y Global */
1776 initTransform(TFM_RESIZE, CTX_NONE);
1777 BIF_setSingleAxisConstraint(mat[1], " Y");
1780 case 2: /* Z Global */
1781 initTransform(TFM_RESIZE, CTX_NONE);
1782 BIF_setSingleAxisConstraint(mat[2], " Z");
1785 case 3: /* X Local */
1786 initTransform(TFM_RESIZE, CTX_NONE);
1787 BIF_setLocalAxisConstraint('X', " X");
1790 case 4: /* Y Local */
1791 initTransform(TFM_RESIZE, CTX_NONE);
1792 BIF_setLocalAxisConstraint('X', " X");
1795 case 5: /* Z Local */
1796 initTransform(TFM_RESIZE, CTX_NONE);
1797 BIF_setLocalAxisConstraint('X', " X");
1801 allqueue(REDRAWVIEW3D, 0);
1805 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1808 short yco = 20, menuwidth = 120;
1810 block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV);
1811 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1813 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1814 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1815 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1817 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1819 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1820 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1821 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1824 uiBlockSetDirection(block, UI_RIGHT);
1825 uiTextBoundsBlock(block, 60);
1829 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1832 Scene *scene= CTX_data_scene(C);
1836 initTransform(TFM_TRANSLATION, CTX_NONE);
1840 initTransform(TFM_ROTATION, CTX_NONE);
1844 initTransform(TFM_RESIZE, CTX_NONE);
1851 initTransform(TFM_TOSPHERE, CTX_NONE);
1855 initTransform(TFM_SHEAR, CTX_NONE);
1859 initTransform(TFM_WARP, CTX_NONE);
1863 initTransform(TFM_PUSHPULL, CTX_NONE);
1868 if (obedit->type == OB_MESH)
1869 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1871 } else error("Only meshes can be shrinked/fattened");
1883 initTransform(TFM_TILT, CTX_NONE);
1887 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1891 scene->snap_flag &= ~SCE_SNAP;
1894 scene->snap_flag |= SCE_SNAP;
1897 scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1900 scene->snap_target = SCE_SNAP_TARGET_CENTER;
1903 scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1906 scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1912 allqueue(REDRAWVIEW3D, 0);
1916 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1918 Scene *scene= CTX_data_scene(C);
1919 Object *obedit = CTX_data_edit_object(C);
1921 short yco = 20, menuwidth = 120;
1923 block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP, UI_HELV);
1924 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1926 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1927 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1929 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1930 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1932 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1933 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1935 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1938 if (obedit->type == OB_MESH)
1939 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1940 else if (obedit->type == OB_CURVE) {
1941 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1942 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1946 if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1947 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1948 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1949 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1952 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1954 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, "");
1957 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1959 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1961 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1963 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, "");
1966 if (BIF_snappingSupported(obedit))
1968 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1970 if (scene->snap_flag & SCE_SNAP)
1972 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1973 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1977 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1978 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1981 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1983 switch(scene->snap_target)
1985 case SCE_SNAP_TARGET_CLOSEST:
1986 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1987 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1988 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1989 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1991 case SCE_SNAP_TARGET_CENTER:
1992 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1993 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1994 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1995 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1997 case SCE_SNAP_TARGET_MEDIAN:
1998 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1999 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2000 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2001 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2003 case SCE_SNAP_TARGET_ACTIVE:
2004 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2005 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2006 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2007 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2012 uiBlockSetDirection(block, UI_RIGHT);
2013 uiTextBoundsBlock(block, 60);
2017 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
2022 initTransform(TFM_MIRROR, CTX_NO_PET);
2026 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2027 BIF_setLocalAxisConstraint('X', " on X axis");
2031 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2032 BIF_setLocalAxisConstraint('Y', " on Y axis");
2036 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2037 BIF_setLocalAxisConstraint('Z', " on Z axis");
2041 allqueue(REDRAWVIEW3D, 0);
2045 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2048 short yco = 20, menuwidth = 120;
2050 block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV);
2051 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2053 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2054 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2055 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2056 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2057 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2059 uiBlockSetDirection(block, UI_RIGHT);
2060 uiTextBoundsBlock(block, 60);
2064 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2068 case 0: /* clear origin */
2071 case 1: /* clear scale */
2074 case 2: /* clear rotation */
2077 case 3: /* clear location */
2081 if(OBACT) object_apply_deform(OBACT);
2083 case 5: /* make duplis real */
2084 make_duplilist_real();
2086 case 6: /* apply scale/rotation or deformation */
2087 apply_objects_locrot();
2089 case 7: /* apply visual matrix to objects loc/size/rot */
2090 apply_objects_visual_tx();
2093 allqueue(REDRAWVIEW3D, 0);
2097 static uiBlock *view3d_edit_object_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
2100 short yco = 20, menuwidth = 120;
2102 block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV);
2103 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2105 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, "");
2106 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2107 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2108 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2110 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2112 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2113 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2114 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2115 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2117 uiBlockSetDirection(block, UI_RIGHT);
2118 uiTextBoundsBlock(block, 60);
2122 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2135 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
2138 short yco = 20, menuwidth = 120;
2140 block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV);
2141 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2143 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2144 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2145 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2147 uiBlockSetDirection(block, UI_RIGHT);
2148 uiTextBoundsBlock(block, 60);
2152 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2160 make_links((short)event);
2163 allqueue(REDRAWVIEW3D, 0);
2167 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
2169 Scene *scene= CTX_data_scene(C);
2173 short yco = 20, menuwidth = 120;
2175 block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV);
2176 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2178 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2180 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2182 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2186 if(ob->type==OB_MESH) {
2187 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2188 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2189 } else if(ob->type==OB_CURVE) {
2190 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve 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_FONT) {
2193 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text 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_SURF) {
2196 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface 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_MBALL) {
2199 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2200 } else if(ob->type==OB_CAMERA) {
2201 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2202 } else if(ob->type==OB_LAMP) {
2203 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2204 } else if(ob->type==OB_LATTICE) {
2205 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2206 } else if(ob->type==OB_ARMATURE) {
2207 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2211 uiBlockSetDirection(block, UI_RIGHT);
2212 uiTextBoundsBlock(block, 60);
2216 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2220 case 1: /* Object */
2221 single_object_users(1);
2223 case 2: /* Object & ObData */
2224 single_object_users(1);
2225 single_obdata_users(1);
2227 case 3: /* Object & ObData & Materials+Tex */
2228 single_object_users(1);
2229 single_obdata_users(1);
2230 single_mat_users(1); /* also tex */
2232 case 4: /* Materials+Tex */
2233 single_mat_users(1);
2236 single_ipo_users(1);
2240 clear_id_newpoins();
2243 allqueue(REDRAWALL, 0);
2247 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
2251 short yco = 20, menuwidth = 120;
2253 block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV);
2254 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2256 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2257 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2258 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2259 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2260 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2262 uiBlockSetDirection(block, UI_RIGHT);
2263 uiTextBoundsBlock(block, 60);
2267 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2293 // XXX copy_attr((short)event);
2296 allqueue(REDRAWVIEW3D, 0);
2299 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
2301 Scene *scene= CTX_data_scene(C);
2305 short yco = 20, menuwidth = 120;
2307 block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV);
2308 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2312 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2313 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2314 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2315 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2316 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2317 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2319 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2321 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2322 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2323 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2324 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2325 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2326 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2328 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2330 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2331 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2335 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2336 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2337 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2340 if(ob->type == OB_FONT) {
2341 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2342 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2343 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2345 if(ob->type == OB_CURVE) {
2346 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2347 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2350 if(ob->type==OB_MESH) {
2351 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2352 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2354 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2357 uiBlockSetDirection(block, UI_RIGHT);
2358 uiTextBoundsBlock(block, 60);
2363 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2367 case 0: /* clear parent */
2370 case 1: /* make parent */
2374 allqueue(REDRAWVIEW3D, 0);
2378 static uiBlock *view3d_edit_object_parentmenu(bContext *C, ARegion *ar, void *arg_unused)
2381 short yco = 20, menuwidth = 120;
2383 block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV);
2384 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2386 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2387 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2389 uiBlockSetDirection(block, UI_RIGHT);
2390 uiTextBoundsBlock(block, 60);
2394 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2401 group_operation(event);
2404 allqueue(REDRAWVIEW3D, 0);
2408 static uiBlock *view3d_edit_object_groupmenu(bContext *C, ARegion *ar, void *arg_unused)
2411 short yco = 20, menuwidth = 120;
2413 block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV);
2414 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2416 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, "");
2417 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, "");
2418 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, "");
2420 uiBlockSetDirection(block, UI_RIGHT);
2421 uiTextBoundsBlock(block, 60);
2425 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2429 case 0: /* clear track */
2432 case 1: /* make track */
2436 allqueue(REDRAWVIEW3D, 0);
2440 static uiBlock *view3d_edit_object_trackmenu(bContext *C, ARegion *ar, void *arg_unused)
2443 short yco = 20, menuwidth = 120;
2445 block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV);
2446 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2448 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2449 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2451 uiBlockSetDirection(block, UI_RIGHT);
2452 uiTextBoundsBlock(block, 60);
2456 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2460 case 1: /* add constraint */
2463 case 2: /* clear constraint */
2464 ob_clear_constraints();
2467 allqueue(REDRAWVIEW3D, 0);
2471 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, ARegion *ar, void *arg_unused)
2474 short yco = 20, menuwidth = 120;
2476 block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV);
2477 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2479 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2480 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2482 uiBlockSetDirection(block, UI_RIGHT);
2483 uiTextBoundsBlock(block, 60);
2487 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2493 case 0: /* show objects */
2496 case 1: /* hide selected objects */
2499 case 2: /* hide deselected objects */
2503 allqueue(REDRAWVIEW3D, 0);
2507 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
2510 short yco = 20, menuwidth = 120;
2512 block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV);
2513 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2515 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2516 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2517 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2519 uiBlockSetDirection(block, UI_RIGHT);
2520 uiTextBoundsBlock(block, 60);
2524 #ifndef DISABLE_PYTHON
2525 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2528 BPY_menu_do_python(PYMENU_OBJECT, event);
2530 allqueue(REDRAWVIEW3D, 0);
2534 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2537 // short yco = 20, menuwidth = 120;
2538 // XXX BPyMenu *pym;
2541 block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV);
2542 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2544 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2545 // 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);
2548 uiBlockSetDirection(block, UI_RIGHT);
2549 uiTextBoundsBlock(block, 60);
2553 #endif /* DISABLE_PYTHON */
2556 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2559 Scene *scene= CTX_data_scene(C);
2560 ScrArea *sa= CTX_wm_area(C);
2561 View3D *v3d= sa->spacedata.first;
2565 case 0: /* transform properties*/
2566 // XXX mainqenter(NKEY, 1);
2568 case 1: /* delete */
2569 delete_context_selected();
2571 case 2: /* duplicate */
2572 duplicate_context_selected();
2574 case 3: /* duplicate linked */
2577 case 5: /* make single user */
2580 case 7: /* boolean operation */
2583 case 8: /* join objects */
2586 case 9: /* convert object type */
2589 case 10: /* move to layer */
2592 case 11: /* insert keyframe */
2595 case 15: /* Object Panel */
2596 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2598 case 16: /* make proxy object*/
2601 case 18: /* delete keyframe */
2605 allqueue(REDRAWVIEW3D, 0);
2609 static uiBlock *view3d_edit_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
2611 Scene *scene= CTX_data_scene(C);
2613 short yco= 0, menuwidth=120;
2615 block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV);
2616 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2618 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2619 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2620 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2622 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2623 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2625 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2627 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2628 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2630 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2632 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2633 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2634 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2636 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2638 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2639 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2640 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2641 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2642 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2644 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2646 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2647 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2648 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2649 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2651 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2653 if (OBACT && OBACT->type == OB_MESH) {
2654 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2656 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2657 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2659 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2661 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2662 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2664 #ifndef DISABLE_PYTHON
2665 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2666 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2669 if(ar->alignment==RGN_ALIGN_TOP) {
2670 uiBlockSetDirection(block, UI_DOWN);
2673 uiBlockSetDirection(block, UI_TOP);
2674 uiBlockFlipOrder(block);
2677 uiTextBoundsBlock(block, 50);
2682 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2684 Scene *scene= CTX_data_scene(C);
2686 scene->prop_mode= event;
2688 allqueue(REDRAWVIEW3D, 1);
2691 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, ARegion *ar, void *arg_unused)
2693 Scene *scene= CTX_data_scene(C);
2695 short yco = 20, menuwidth = 120;
2697 block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV);
2698 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2700 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, "");
2701 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2702 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, "");
2703 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2704 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, "");
2705 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2706 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, "");
2707 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2708 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, "");
2709 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2710 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, "");
2711 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2712 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, "");
2713 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2715 uiBlockSetDirection(block, UI_RIGHT);
2716 uiTextBoundsBlock(block, 60);
2721 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2724 Scene *scene= CTX_data_scene(C);
2729 case 0: /* make vertex parent */
2732 case 1: /* remove doubles */
2733 count= removedoublesflag(1, 0, scene->toolsettings->doublimit);
2734 notice("Removed: %d", count);
2735 if (count) { /* only undo and redraw if an action is taken */
2736 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2737 ED_undo_push(C, "Rem Doubles");
2740 case 2: /* smooth */
2743 case 3: /* separate */
2751 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2753 case 6: /* add hook */
2760 allqueue(REDRAWVIEW3D, 0);
2764 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, ARegion *ar, void *arg_unused)
2767 short yco = 20, menuwidth = 120;
2769 block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV);
2770 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2772 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2773 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2774 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2775 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2777 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2779 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2780 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2782 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2784 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2785 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2787 uiBlockSetDirection(block, UI_RIGHT);
2788 uiTextBoundsBlock(block, 60);
2792 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2794 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2797 Scene *scene= CTX_data_scene(C);
2803 case 0: /* subdivide smooth */
2804 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2805 ED_undo_push(C, "Subdivide Smooth");
2807 case 1: /*subdivide fractal */
2809 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2810 fac= -( (float)randfac )/100;
2811 esubdivideflag(1, fac, scene->toolsettings->editbutflag,1,0);
2812 ED_undo_push(C, "Subdivide Fractal");
2814 case 2: /* subdivide */
2815 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag,1,0);
2816 ED_undo_push(C, "Subdivide");
2818 case 3: /* knife subdivide */
2819 KnifeSubdivide(KNIFE_PROMPT);
2821 case 4: /* Loop subdivide */
2824 case 5: /* Make Edge/Face */
2830 case 7: /* Mark Seam */
2831 editmesh_mark_seam(0);
2833 case 8: /* Clear Seam */
2834 editmesh_mark_seam(1);
2836 case 9: /* Crease SubSurf */
2837 if(!multires_level1_test()) {
2838 initTransform(TFM_CREASE, CTX_EDGE);
2842 case 10: /* Rotate Edge */
2843 edge_rotate_selected(2);
2845 case 11: /* Rotate Edge */
2846 edge_rotate_selected(1);
2848 case 12: /* Edgeslide */
2851 case 13: /* Edge Loop Delete */
2852 if(EdgeLoopDelete()) {
2854 ED_undo_push(C, "Erase Edge Loop");
2855 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2858 case 14: /*Collapse Edges*/
2860 ED_undo_push(C, "Collapse");
2863 editmesh_mark_sharp(1);
2864 ED_undo_push(C, "Mark Sharp");
2865 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2868 editmesh_mark_sharp(0);
2869 ED_undo_push(C, "Clear Sharp");
2870 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2872 case 17: /* Adjust Bevel Weight */
2873 if(!multires_level1_test()) {
2874 initTransform(TFM_BWEIGHT, CTX_EDGE);
2879 allqueue(REDRAWVIEW3D, 0);
2883 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, ARegion *ar, void *arg_unused)
2886 short yco = 20, menuwidth = 120;
2888 block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV);
2889 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2891 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2893 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2895 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2", &n