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 "MEM_guardedalloc.h"
49 #include "BKE_action.h"
50 #include "BKE_context.h"
51 #include "BKE_curve.h"
52 #include "BKE_depsgraph.h"
53 #include "BKE_displist.h"
54 #include "BKE_effect.h"
55 #include "BKE_global.h"
56 #include "BKE_image.h"
57 #include "BKE_library.h"
60 #include "BKE_modifier.h"
61 #include "BKE_particle.h"
62 #include "BKE_screen.h"
63 #include "BKE_utildefines.h" /* for VECCOPY */
65 #include "ED_screen.h"
73 #include "BIF_glutil.h"
75 #include "BLI_arithb.h"
76 #include "BLI_blenlib.h"
77 #include "BLI_editVert.h"
79 #include "UI_interface.h"
80 #include "UI_interface_icons.h"
81 #include "UI_resources.h"
82 #include "UI_view2d.h"
86 #include "view3d_intern.h"
90 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
91 * rather than those buttons.
92 * I know the implementation's not good - it's an experiment to see if this
93 * approach would work well
95 * This can be cleaned when I make some new 'mode' icons.
98 #define V3D_OBJECTMODE_SEL ICON_OBJECT
99 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
100 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
101 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
102 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
103 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
104 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
105 #define V3D_POSEMODE_SEL ICON_POSE_HLT
106 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
108 #define TEST_EDITMESH if(G.obedit==0) return; \
109 if( (v3d->lay & G.obedit->lay)==0 ) return;
112 void handle_view3d_lock(void) {}
113 void allqueue(int x, int y) {}
114 void persptoetsen(int x) {}
116 void editmesh_align_view_to_selected(void *x, int y) {}
117 void play_anim(int x) {}
118 void add_blockhandler(void *x, int y, int z) {}
119 void toggle_blockhandler(void *x, int y, int z) {}
120 void view3d_border_zoom(void);
121 void selectlinks(void) {}
122 void countall(void) {}
123 void select_object_grouped() {}
124 extern void borderselect();
125 int BIF_snappingSupported() {return 1;}
126 void BIF_undo_push() {}
127 int retopo_mesh_paint_check() {return 0;}
128 int object_data_is_libdata() {return 0;}
130 /* view3d handler codes */
131 #define VIEW3D_HANDLER_BACKGROUND 1
132 #define VIEW3D_HANDLER_PROPERTIES 2
133 #define VIEW3D_HANDLER_OBJECT 3
134 #define VIEW3D_HANDLER_PREVIEW 4
135 #define VIEW3D_HANDLER_MULTIRES 5
136 #define VIEW3D_HANDLER_TRANSFORM 6
137 #define VIEW3D_HANDLER_GREASEPENCIL 7
139 /* end XXX ************* */
141 static void do_view3d_buttons(bContext *C, void *arg, int event);
143 #define B_SCENELOCK 101
146 #define B_VIEWBUT 104
148 #define B_VIEWRENDER 106
149 #define B_STARTGAME 107
150 #define B_MODESELECT 108
152 #define B_SEL_VERT 110
153 #define B_SEL_EDGE 111
154 #define B_SEL_FACE 112
155 #define B_SEL_PATH 113
156 #define B_SEL_POINT 114
157 #define B_SEL_END 115
158 #define B_MAN_TRANS 116
159 #define B_MAN_ROT 117
160 #define B_MAN_SCALE 118
162 #define B_MAN_MODE 120
163 #define B_VIEW_BUTSEDIT 121
166 #define B_ACTCOPY 124
167 #define B_ACTPASTE 125
168 #define B_ACTPASTEFLIP 126
173 /* temp hack to get the region window */
174 static ARegion *ed_regionwin(ScrArea *sa)
177 for(ar= sa->regionbase.first; ar; ar= ar->next)
178 if(ar->regiontype==RGN_TYPE_WINDOW)
183 /* XXX; all this context stuff... should become operator */
184 void do_layer_buttons(bContext *C, short event)
186 wmWindow *win= CTX_wm_window(C);
187 Scene *scene= CTX_data_scene(C);
188 ScrArea *sa= CTX_wm_area(C);
189 View3D *v3d= sa->spacedata.first;
190 static int oldlay= 1;
191 short shift, alt, ctrl;
193 shift= win->eventstate->shift;
194 alt= win->eventstate->alt;
195 ctrl= win->eventstate->ctrl;
198 if(v3d->localview) return;
200 if(event==-1 && ctrl) {
201 v3d->scenelock= !v3d->scenelock;
202 do_view3d_buttons(C, NULL, B_SCENELOCK);
203 } else if (event<0) {
204 if(v3d->lay== (1<<20)-1) {
205 if(event==-2 || shift) v3d->lay= oldlay;
212 if(v3d->scenelock) handle_view3d_lock();
214 /* new layers might need unflushed events events */
215 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
219 if(event<11) event+= 10;
222 if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
223 else v3d->lay += (1<<event);
225 do_view3d_buttons(C, NULL, event+B_LAY);
227 ED_area_tag_redraw(sa);
229 if(sa->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
230 if(v3d->drawtype == OB_SHADED) reshadeall_displist();
231 allqueue(REDRAWNLA, 0);
234 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
241 /* Set Active Object as Active Camera */
242 /* XXX ugly hack alert */
243 // G.qual |= LR_CTRLKEY;
245 // G.qual &= ~LR_CTRLKEY;
247 /* store settings of current view before allowing overwriting with camera view */
248 /* this is a copy of the code in toets.c */
249 if(v3d->persp != V3D_CAMOB) {
250 QUATCOPY(v3d->lviewquat, v3d->viewquat);
251 v3d->lview= v3d->view;
252 v3d->lpersp= v3d->persp;
255 for( base = FIRSTBASE; base; base = base->next ) {
256 if (base->object->type == OB_CAMERA) {
261 if (v3d->camera == base->object && v3d->persp==V3D_CAMOB)
264 if (U.smooth_viewtx) {
265 /* move 3d view to camera view */
266 float orig_ofs[3], orig_lens = v3d->lens;
267 VECCOPY(orig_ofs, v3d->ofs);
269 if (v3d->camera && v3d->persp==V3D_CAMOB)
270 view_settings_from_ob(v3d->camera, v3d->ofs, v3d->viewquat, &v3d->dist, &v3d->lens);
272 v3d->camera = base->object;
273 handle_view3d_lock();
274 v3d->persp= V3D_CAMOB;
277 smooth_view_to_camera(v3d);
280 VECCOPY(v3d->ofs, orig_ofs);
281 v3d->lens = orig_lens;
283 v3d->camera= base->object;
284 handle_view3d_lock();
285 v3d->persp= V3D_CAMOB;
294 allqueue(REDRAWVIEW3D, 0);
297 static uiBlock *view3d_view_camerasmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
299 Scene *scene= CTX_data_scene(C);
302 short yco= 0, menuwidth=120;
306 block= uiBeginBlock(C, handle->region, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV);
307 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
309 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, "");
311 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
313 for( base = FIRSTBASE; base; base = base->next ) {
314 if (base->object->type == OB_CAMERA) {
317 strcpy(camname, base->object->id.name+2);
318 if (base->object == scene->camera) strcat(camname, " (Active)");
320 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
324 uiBlockSetDirection(block, UI_RIGHT);
325 uiTextBoundsBlock(block, 50);
329 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
332 case 0: /* Orbit Left */
335 case 1: /* Orbit Right */
338 case 2: /* Orbit Up */
341 case 3: /* Orbit Down */
344 case 4: /* Pan left */
345 /* XXX ugly hack alert */
346 // G.qual |= LR_CTRLKEY;
348 // G.qual &= ~LR_CTRLKEY;
350 case 5: /* Pan right */
351 /* XXX ugly hack alert */
352 // G.qual |= LR_CTRLKEY;
354 // G.qual &= ~LR_CTRLKEY;
357 /* ugly hack alert */
358 // G.qual |= LR_CTRLKEY;
360 // G.qual &= ~LR_CTRLKEY;
362 case 7: /* Pan down */
363 /* ugly hack alert */
364 // G.qual |= LR_CTRLKEY;
366 // G.qual &= ~LR_CTRLKEY;
368 case 8: /* Zoom In */
369 persptoetsen(PADPLUSKEY);
371 case 9: /* Zoom Out */
372 persptoetsen(PADMINUS);
374 case 10: /* Reset Zoom */
375 persptoetsen(PADENTER);
377 case 11: /* Camera Fly mode */
381 allqueue(REDRAWVIEW3D, 0);
384 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
386 /* static short tog=0; */
388 short yco= 0, menuwidth=120;
390 block= uiBeginBlock(C, handle->region, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV);
391 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
393 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
395 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
397 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
398 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
399 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
400 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
402 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
404 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
405 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
406 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
407 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
409 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
411 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
412 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
413 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
415 uiBlockSetDirection(block, UI_RIGHT);
416 uiTextBoundsBlock(block, 50);
420 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
422 Scene *scene= CTX_data_scene(C);
423 ScrArea *sa= CTX_wm_area(C);
424 View3D *v3d= sa->spacedata.first;
429 case 0: /* Align View to Selected (edit/faceselect mode) */
432 if ((G.obedit) && (G.obedit->type == OB_MESH)) {
433 editmesh_align_view_to_selected(v3d, event + 1);
435 else if (FACESEL_PAINT_TEST) {
436 Object *obact= OBACT;
437 if (obact && obact->type==OB_MESH) {
438 Mesh *me= obact->data;
441 // XXX faceselect_align_view_to_selected(v3d, me, event + 1);
442 ED_area_tag_redraw(sa);
447 case 3: /* Center View to Cursor */
448 curs= give_cursor(scene, v3d);
449 v3d->ofs[0]= -curs[0];
450 v3d->ofs[1]= -curs[1];
451 v3d->ofs[2]= -curs[2];
452 ED_area_tag_redraw(sa);
454 case 4: /* Align Active Camera to View */
455 /* XXX This ugly hack is a symptom of the nasty persptoetsen function,
456 * but at least it works for now.
458 // G.qual |= LR_CTRLKEY|LR_ALTKEY;
460 // G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
462 case 5: /* Align View to Selected (object mode) */
463 // XXX mainqenter(PADASTERKEY, 1);
465 case 6: /* Center View and Cursor to Origin */
466 WM_operator_call(C, "ED_VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
467 curs= give_cursor(scene, v3d);
468 curs[0]=curs[1]=curs[2]= 0.0;
471 allqueue(REDRAWVIEW3D, 0);
474 static uiBlock *view3d_view_alignviewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
476 /* static short tog=0; */
478 short yco= 0, menuwidth=120;
480 block= uiBeginBlock(C, handle->region, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV);
481 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
484 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, "");
485 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, "");
487 if (((G.obedit) && (G.obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
488 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, "");
489 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, "");
490 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, "");
492 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
495 uiBlockSetDirection(block, UI_RIGHT);
496 uiTextBoundsBlock(block, 50);
500 #ifndef DISABLE_PYTHON
501 // XXX static void do_view3d_view_spacehandlers(bContext *C, void *arg, int event)
505 static uiBlock *view3d_view_spacehandlers(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
510 #endif /* DISABLE_PYTHON */
512 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
514 Scene *scene= CTX_data_scene(C);
515 ScrArea *sa= CTX_wm_area(C);
516 View3D *v3d= sa->spacedata.first;
521 v3d->persp = V3D_PERSP;
535 case 5: /* Perspective */
536 v3d->persp=V3D_PERSP;
538 case 6: /* Orthographic */
539 v3d->persp=V3D_ORTHO;
541 case 7: /* Local View */
543 initlocalview(scene, ed_regionwin(sa), v3d);
545 case 8: /* Global View */
547 endlocalview(scene, sa);
549 case 9: /* View All (Home) */
550 WM_operator_call(C, "ED_VIEW3D_OT_viewhome", WM_OP_REGION_WIN, NULL);
552 case 11: /* View Selected */
553 WM_operator_call(C, "ED_VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
555 case 13: /* Play Back Animation */
558 case 15: /* Background Image... */
559 add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
561 case 16: /* View Panel */
562 add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
564 case 17: /* Set Clipping Border */
565 WM_operator_call(C, "ED_VIEW3D_OT_clipping", WM_OP_REGION_WIN, NULL);
567 case 18: /* render preview */
568 toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
570 case 19: /* zoom within border */
571 view3d_border_zoom();
573 case 20: /* Transform Space Panel */
574 add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
576 case 21: /* Grease Pencil */
577 add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
579 case 22: /* View all layers */
580 do_layer_buttons(C, -2);
583 allqueue(REDRAWVIEW3D, 1);
586 static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
588 ScrArea *sa= CTX_wm_area(C);
589 View3D *v3d= sa->spacedata.first;
591 short yco= 0, menuwidth=120;
593 block= uiBeginBlock(C, handle->region, "view3d_viewmenu", UI_EMBOSSP, UI_HELV);
594 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
596 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
597 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
598 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
599 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
600 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
602 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
604 if ((v3d->viewbut == 0) && !(v3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
605 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
606 if (v3d->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, "");
607 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
608 if (v3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
609 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
610 if (v3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
611 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
612 if (v3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
613 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
615 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
617 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
619 if(v3d->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, "");
620 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
621 if(v3d->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, "");
622 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
624 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
626 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, "");
627 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
629 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
631 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, "");
632 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
633 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, "");
634 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
636 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
638 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
639 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
641 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
643 if(v3d->flag & V3D_CLIPPING)
644 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
646 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
647 if (v3d->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, "");
648 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
649 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
650 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, "");
651 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
653 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
655 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
657 #ifndef DISABLE_PYTHON
658 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
659 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
662 if(handle->region->alignment==RGN_ALIGN_TOP) {
663 uiBlockSetDirection(block, UI_DOWN);
666 uiBlockSetDirection(block, UI_TOP);
667 uiBlockFlipOrder(block);
670 uiTextBoundsBlock(block, 50);
675 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
679 extern void selectall_type(short obtype);
683 selectall_type(OB_MESH);
686 selectall_type(OB_CURVE);
688 case 3: /* Surface */
689 selectall_type(OB_SURF);
692 selectall_type(OB_MBALL);
694 case 5: /* Armature */
695 selectall_type(OB_ARMATURE);
697 case 6: /* Lattice */
698 selectall_type(OB_LATTICE);
701 selectall_type(OB_FONT);
704 selectall_type(OB_EMPTY);
707 selectall_type(OB_CAMERA);
710 selectall_type(OB_LAMP);
713 do_layer_buttons(C, -2);
716 allqueue(REDRAWVIEW3D, 0);
720 static uiBlock *view3d_select_object_typemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
723 short yco = 20, menuwidth = 120;
725 block= uiBeginBlock(C, handle->region, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV);
726 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
728 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
729 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
730 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
731 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
733 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
735 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
736 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
737 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
738 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
740 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
742 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
743 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
745 uiBlockSetDirection(block, UI_RIGHT);
746 uiTextBoundsBlock(block, 60);
750 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
752 // XXX extern void selectall_layer(unsigned int layernum);
776 // XXX selectall_layer(event);
779 allqueue(REDRAWVIEW3D, 0);
782 static uiBlock *view3d_select_object_layermenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
785 short xco= 0, yco = 20, menuwidth = 22;
787 block= uiBeginBlock(C, handle->region, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV);
788 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
790 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
791 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
792 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
793 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
794 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
796 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
797 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
798 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
799 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
800 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
802 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
803 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
804 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
805 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
806 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
808 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
809 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
810 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
811 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
812 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
814 uiBlockSetDirection(block, UI_RIGHT);
815 /*uiTextBoundsBlock(block, 100);*/
819 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
823 case 1: /* Object Ipo */
825 case 3: /* Current Material */
826 case 4: /* Current Texture */
831 allqueue(REDRAWVIEW3D, 0);
835 static uiBlock *view3d_select_object_linkedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
838 short yco = 20, menuwidth = 120;
840 block= uiBeginBlock(C, handle->region, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV);
841 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
843 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
844 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
845 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
846 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
848 uiBlockSetDirection(block, UI_RIGHT);
849 uiTextBoundsBlock(block, 60);
853 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
857 case 1: /* Children */
858 case 2: /* Immediate Children */
860 case 4: /* Siblings */
862 case 6: /* Objects on Shared Layers */
863 case 7: /* Objects in Same Group */
864 case 8: /* Object Hooks*/
865 case 9: /* Object PassIndex*/
866 case 10: /* Object Color*/
867 case 11: /* Game Properties*/
868 select_object_grouped((short)event);
871 allqueue(REDRAWVIEW3D, 0);
875 static uiBlock *view3d_select_object_groupedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
878 short yco = 20, menuwidth = 120;
880 block= uiBeginBlock(C, handle->region, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV);
881 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
883 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
884 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
885 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
886 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
887 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, "");
888 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, "");
889 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, "");
890 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
891 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
892 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
893 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
895 uiBlockSetDirection(block, UI_RIGHT);
896 uiTextBoundsBlock(block, 60);
900 void do_view3d_select_objectmenu(bContext *C, void *arg, int event)
905 case 0: /* border select */
908 case 1: /* Select/Deselect All */
911 case 2: /* inverse */
918 allqueue(REDRAWVIEW3D, 0);
922 static uiBlock *view3d_select_objectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
925 short yco= 0, menuwidth=120;
927 block= uiBeginBlock(C, handle->region, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
928 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
930 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
932 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
934 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
935 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
936 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
938 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
939 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
941 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
943 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
944 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
946 if(handle->region->alignment==RGN_ALIGN_TOP) {
947 uiBlockSetDirection(block, UI_DOWN);
950 uiBlockSetDirection(block, UI_TOP);
951 uiBlockFlipOrder(block);
954 uiTextBoundsBlock(block, 50);
958 void do_view3d_select_meshmenu(bContext *C, void *arg, int event)
961 /* extern void borderselect(void);*/
965 case 0: /* border select */
968 case 2: /* Select/Deselect all */
971 case 3: /* Inverse */
974 case 4: /* select linked vertices */
975 selectconnected_mesh_all();
977 case 5: /* select random */
980 case 7: /* select more */
983 case 8: /* select less */
986 case 9: /* select non-manifold */
987 select_non_manifold();
989 case 11: /* select triangles */
990 select_faces_by_numverts(3);
992 case 12: /* select quads */
993 select_faces_by_numverts(4);
995 case 13: /* select non-triangles/quads */
996 select_faces_by_numverts(5);
998 case 14: /* select sharp edges */
999 select_sharp_edges();
1001 case 15: /* select linked flat faces */
1002 select_linked_flat_faces();
1005 case 16: /* path select */
1007 BIF_undo_push("Path Select");
1009 case 17: /* edge loop select */
1010 loop_multiselect(0);
1012 case 18: /* edge ring select */
1013 loop_multiselect(1);
1015 case 19: /* loop to region */
1018 case 20: /* region to loop */
1021 case 21: /* Select grouped */
1022 select_mesh_group_menu();
1025 allqueue(REDRAWVIEW3D, 0);
1030 static uiBlock *view3d_select_meshmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1033 short yco= 0, menuwidth=120;
1035 block= uiBeginBlock(C, handle->region, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV);
1036 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1038 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1040 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1042 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1043 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1045 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1046 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1048 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1049 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1050 "Non-Manifold|Ctrl Alt Shift M",
1051 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1052 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1053 "Sharp Edges|Ctrl Alt Shift S",
1054 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1055 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1056 "Linked Flat Faces|Ctrl Alt Shift F",
1057 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1059 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1060 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1062 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1063 "Triangles|Ctrl Alt Shift 3",
1064 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1065 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1066 "Quads|Ctrl Alt Shift 4",
1067 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1068 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1069 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1070 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1071 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1072 "Similar to Selection...|Shift G",
1073 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1075 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1076 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1078 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1079 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1080 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1081 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1083 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1084 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1086 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1087 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1088 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1089 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
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, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1095 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1097 if(handle->region->alignment==RGN_ALIGN_TOP) {
1098 uiBlockSetDirection(block, UI_DOWN);
1101 uiBlockSetDirection(block, UI_TOP);
1102 uiBlockFlipOrder(block);
1105 uiTextBoundsBlock(block, 50);
1109 void do_view3d_select_curvemenu(bContext *C, void *arg, int event)
1112 /* extern void borderselect(void);*/
1115 case 0: /* border select */
1118 case 2: /* Select/Deselect all */
1121 case 3: /* Inverse */
1124 /* select connected control points */
1126 G.qual |= LR_CTRLKEY;
1127 select_connected_nurb();
1128 G.qual &= ~LR_CTRLKEY;
1130 case 5: /* select row (nurb) */
1133 case 7: /* select/deselect first */
1134 selectend_nurb(FIRST, 1, DESELECT);
1136 case 8: /* select/deselect last */
1137 selectend_nurb(LAST, 1, DESELECT);
1139 case 9: /* select more */
1142 case 10: /* select less */
1145 case 11: /* select next */
1148 case 12: /* select previous */
1151 case 13: /* select random */
1152 select_random_nurb();
1154 case 14: /* select every nth */
1155 select_every_nth_nurb();
1158 allqueue(REDRAWVIEW3D, 0);
1163 static uiBlock *view3d_select_curvemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1165 Scene *scene= CTX_data_scene(C);
1167 short yco= 0, menuwidth=120;
1169 block= uiBeginBlock(C, handle->region, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV);
1170 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1172 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1174 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1176 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1177 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1178 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1179 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1181 if (OBACT->type == OB_SURF) {
1182 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1184 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1187 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1189 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1190 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1191 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1192 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1195 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1196 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1197 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1199 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1200 /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1202 if(handle->region->alignment==RGN_ALIGN_TOP) {
1203 uiBlockSetDirection(block, UI_DOWN);
1206 uiBlockSetDirection(block, UI_TOP);
1207 uiBlockFlipOrder(block);
1210 uiTextBoundsBlock(block, 50);
1214 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1219 case 0: /* border select */
1222 case 2: /* Select/Deselect all */
1223 deselectall_mball();
1225 case 3: /* Inverse */
1226 selectinverse_mball();
1228 case 4: /* Select Random */
1229 selectrandom_mball();
1232 allqueue(REDRAWVIEW3D, 0);
1237 static uiBlock *view3d_select_metaballmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1240 short yco= 0, menuwidth=120;
1242 block= uiBeginBlock(C, handle->region, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV);
1243 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1245 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1247 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1249 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1251 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1253 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1255 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1257 if(handle->region->alignment==RGN_ALIGN_TOP) {
1258 uiBlockSetDirection(block, UI_DOWN);
1261 uiBlockSetDirection(block, UI_TOP);
1262 uiBlockFlipOrder(block);
1265 uiTextBoundsBlock(block, 50);
1269 static void do_view3d_select_latticemenu(bContext *C, void *arg, int event)
1272 /* extern void borderselect(void);*/
1275 case 0: /* border select */
1278 case 2: /* Select/Deselect all */
1282 allqueue(REDRAWVIEW3D, 0);
1286 static uiBlock *view3d_select_latticemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1289 short yco= 0, menuwidth=120;
1291 block= uiBeginBlock(C, handle->region, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV);
1292 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1294 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1296 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1298 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1300 if(handle->region->alignment==RGN_ALIGN_TOP) {
1301 uiBlockSetDirection(block, UI_DOWN);
1304 uiBlockSetDirection(block, UI_TOP);
1305 uiBlockFlipOrder(block);
1308 uiTextBoundsBlock(block, 50);
1312 static void do_view3d_select_armaturemenu(bContext *C, void *arg, int event)
1315 /* extern void borderselect(void);*/
1318 case 0: /* border select */
1321 case 2: /* Select/Deselect all */
1322 deselectall_armature(1, 1);
1324 case 3: /* Swap Select All */
1325 deselectall_armature(3, 1);
1327 case 4: /* Select parent */
1328 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1330 case 5: /* Select child */
1331 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1333 case 6: /* Extend Select parent */
1334 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1336 case 7: /* Extend Select child */
1337 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1340 allqueue(REDRAWVIEW3D, 0);
1344 static uiBlock *view3d_select_armaturemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1347 short yco= 0, menuwidth=120;
1349 block= uiBeginBlock(C, handle->region, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV);
1350 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1352 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1354 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1356 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1357 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1359 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1361 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1362 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1364 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1366 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1367 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1369 if(handle->region->alignment==RGN_ALIGN_TOP) {
1370 uiBlockSetDirection(block, UI_DOWN);
1373 uiBlockSetDirection(block, UI_TOP);
1374 uiBlockFlipOrder(block);
1377 uiTextBoundsBlock(block, 50);
1381 static void do_view3d_select_pose_armaturemenu(bContext *C, void *arg, int event)
1384 /* extern void borderselect(void);*/
1387 case 0: /* border select */
1390 case 2: /* Select/Deselect all */
1391 deselectall_posearmature(OBACT, 1, 1);
1393 case 3: /* Select Target(s) of Constraint(s) */
1394 pose_select_constraint_target();
1396 case 5: /* Swap Select All */
1397 deselectall_posearmature(OBACT, 3, 1);
1399 case 6: /* Select parent */
1400 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1402 case 7: /* Select child */
1403 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1405 case 8: /* Extend Select parent */
1406 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1408 case 9: /* Extend Select child */
1409 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1412 allqueue(REDRAWVIEW3D, 0);
1416 static uiBlock *view3d_select_pose_armaturemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1419 short yco= 0, menuwidth=120;
1421 block= uiBeginBlock(C, handle->region, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
1422 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1424 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1426 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1428 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1429 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1430 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1432 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1434 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1435 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1437 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1439 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1440 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1442 if(handle->region->alignment==RGN_ALIGN_TOP) {
1443 uiBlockSetDirection(block, UI_DOWN);
1446 uiBlockSetDirection(block, UI_TOP);
1447 uiBlockFlipOrder(block);
1450 uiTextBoundsBlock(block, 50);
1454 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1457 /* events >= 6 are registered bpython scripts */
1458 #ifndef DISABLE_PYTHON
1459 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1463 case 0: /* border select */
1466 case 2: /* Select/Deselect all */
1467 deselectall_tface();
1469 case 3: /* Select Inverse */
1472 case 4: /* Select Linked */
1473 select_linked_tfaces(2);
1476 allqueue(REDRAWVIEW3D, 0);
1480 static uiBlock *view3d_select_faceselmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1483 short yco= 0, menuwidth=120;
1484 #ifndef DISABLE_PYTHON
1485 // XXX BPyMenu *pym;
1489 block= uiBeginBlock(C, handle->region, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV);
1490 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1492 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1494 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1496 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1497 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1499 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1500 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1502 #ifndef DISABLE_PYTHON
1503 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1505 /* note that we account for the 6 previous entries with i+6: */
1506 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1507 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1508 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1509 // pym->tooltip?pym->tooltip:pym->filename);
1513 if(handle->region->alignment==RGN_ALIGN_TOP) {
1514 uiBlockSetDirection(block, UI_DOWN);
1517 uiBlockSetDirection(block, UI_TOP);
1518 uiBlockFlipOrder(block);
1521 uiTextBoundsBlock(block, 50);
1525 void do_view3d_edit_snapmenu(bContext *C, void *arg, int event)
1529 case 1: /*Selection to grid*/
1531 BIF_undo_push("Snap selection to grid");
1533 case 2: /*Selection to cursor*/
1535 BIF_undo_push("Snap selection to cursor");
1537 case 3: /*Selection to center of selection*/
1539 BIF_undo_push("Snap selection to center");
1541 case 4: /*Cursor to selection*/
1544 case 5: /*Cursor to grid*/
1545 snap_curs_to_grid();
1547 case 6: /*Cursor to Active*/
1548 snap_curs_to_active();
1549 BIF_undo_push("Snap selection to center");
1552 allqueue(REDRAWVIEW3D, 0);
1556 static uiBlock *view3d_edit_snapmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1559 short yco = 20, menuwidth = 120;
1561 block= uiBeginBlock(C, handle->region, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV);
1562 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1564 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1565 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1566 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1567 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1568 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1569 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1570 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1574 uiBlockSetDirection(block, UI_RIGHT);
1575 uiTextBoundsBlock(block, 60);
1579 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1588 case 0: /* X Global */
1589 initTransform(TFM_TRANSLATION, CTX_NONE);
1590 BIF_setSingleAxisConstraint(mat[0], " X");
1593 case 1: /* Y Global */
1594 initTransform(TFM_TRANSLATION, CTX_NONE);
1595 BIF_setSingleAxisConstraint(mat[1], " Y");
1598 case 2: /* Z Global */
1599 initTransform(TFM_TRANSLATION, CTX_NONE);
1600 BIF_setSingleAxisConstraint(mat[2], " Z");
1603 case 3: /* X Local */
1604 initTransform(TFM_TRANSLATION, CTX_NONE);
1605 BIF_setLocalAxisConstraint('X', " X");
1608 case 4: /* Y Local */
1609 initTransform(TFM_TRANSLATION, CTX_NONE);
1610 BIF_setLocalAxisConstraint('Y', " Y");
1613 case 5: /* Z Local */
1614 initTransform(TFM_TRANSLATION, CTX_NONE);
1615 BIF_setLocalAxisConstraint('Z', " Z");
1619 allqueue(REDRAWVIEW3D, 0);
1623 static uiBlock *view3d_transform_moveaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1626 short yco = 20, menuwidth = 120;
1628 block= uiBeginBlock(C, handle->region, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV);
1629 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1631 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1632 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1633 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1635 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1637 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1638 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1639 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1642 uiBlockSetDirection(block, UI_RIGHT);
1643 uiTextBoundsBlock(block, 60);
1647 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1656 case 0: /* X Global */
1657 initTransform(TFM_ROTATION, CTX_NONE);
1658 BIF_setSingleAxisConstraint(mat[0], " X");
1661 case 1: /* Y Global */
1662 initTransform(TFM_ROTATION, CTX_NONE);
1663 BIF_setSingleAxisConstraint(mat[1], " Y");
1666 case 2: /* Z Global */
1667 initTransform(TFM_ROTATION, CTX_NONE);
1668 BIF_setSingleAxisConstraint(mat[2], " Z");
1671 case 3: /* X Local */
1672 initTransform(TFM_ROTATION, CTX_NONE);
1673 BIF_setLocalAxisConstraint('X', " X");
1676 case 4: /* Y Local */
1677 initTransform(TFM_ROTATION, CTX_NONE);
1678 BIF_setLocalAxisConstraint('Y', " Y");
1681 case 5: /* Z Local */
1682 initTransform(TFM_ROTATION, CTX_NONE);
1683 BIF_setLocalAxisConstraint('Z', " Z");
1687 allqueue(REDRAWVIEW3D, 0);
1691 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1694 short yco = 20, menuwidth = 120;
1696 block= uiBeginBlock(C, handle->region, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV);
1697 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1699 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1700 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1701 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1703 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1705 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1706 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1707 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1710 uiBlockSetDirection(block, UI_RIGHT);
1711 uiTextBoundsBlock(block, 60);
1715 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1724 case 0: /* X Global */
1725 initTransform(TFM_RESIZE, CTX_NONE);
1726 BIF_setSingleAxisConstraint(mat[0], " X");
1729 case 1: /* Y Global */
1730 initTransform(TFM_RESIZE, CTX_NONE);
1731 BIF_setSingleAxisConstraint(mat[1], " Y");
1734 case 2: /* Z Global */
1735 initTransform(TFM_RESIZE, CTX_NONE);
1736 BIF_setSingleAxisConstraint(mat[2], " Z");
1739 case 3: /* X Local */
1740 initTransform(TFM_RESIZE, CTX_NONE);
1741 BIF_setLocalAxisConstraint('X', " X");
1744 case 4: /* Y Local */
1745 initTransform(TFM_RESIZE, CTX_NONE);
1746 BIF_setLocalAxisConstraint('X', " X");
1749 case 5: /* Z Local */
1750 initTransform(TFM_RESIZE, CTX_NONE);
1751 BIF_setLocalAxisConstraint('X', " X");
1755 allqueue(REDRAWVIEW3D, 0);
1759 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1762 short yco = 20, menuwidth = 120;
1764 block= uiBeginBlock(C, handle->region, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV);
1765 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1767 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1768 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1769 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1771 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1773 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1774 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1775 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1778 uiBlockSetDirection(block, UI_RIGHT);
1779 uiTextBoundsBlock(block, 60);
1783 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1786 Scene *scene= CTX_data_scene(C);
1790 initTransform(TFM_TRANSLATION, CTX_NONE);
1794 initTransform(TFM_ROTATION, CTX_NONE);
1798 initTransform(TFM_RESIZE, CTX_NONE);
1805 initTransform(TFM_TOSPHERE, CTX_NONE);
1809 initTransform(TFM_SHEAR, CTX_NONE);
1813 initTransform(TFM_WARP, CTX_NONE);
1817 initTransform(TFM_PUSHPULL, CTX_NONE);
1822 if (G.obedit->type == OB_MESH)
1823 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1825 } else error("Only meshes can be shrinked/fattened");
1837 initTransform(TFM_TILT, CTX_NONE);
1841 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1845 scene->snap_flag &= ~SCE_SNAP;
1848 scene->snap_flag |= SCE_SNAP;
1851 scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1854 scene->snap_target = SCE_SNAP_TARGET_CENTER;
1857 scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1860 scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1866 allqueue(REDRAWVIEW3D, 0);
1870 static uiBlock *view3d_transformmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1872 Scene *scene= CTX_data_scene(C);
1874 short yco = 20, menuwidth = 120;
1876 block= uiBeginBlock(C, handle->region, "view3d_transformmenu", UI_EMBOSSP, UI_HELV);
1877 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1879 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1880 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1882 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1883 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1885 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1886 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1888 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1891 if (G.obedit->type == OB_MESH)
1892 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1893 else if (G.obedit->type == OB_CURVE) {
1894 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1895 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1898 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1899 if (G.obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1900 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1901 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1902 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1905 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1907 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, "");
1910 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1912 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1914 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1915 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1916 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, "");
1919 if (BIF_snappingSupported())
1921 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1923 if (scene->snap_flag & SCE_SNAP)
1925 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1926 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1930 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1931 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1934 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1936 switch(scene->snap_target)
1938 case SCE_SNAP_TARGET_CLOSEST:
1939 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1940 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1941 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1942 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1944 case SCE_SNAP_TARGET_CENTER:
1945 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1946 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1947 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1948 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1950 case SCE_SNAP_TARGET_MEDIAN:
1951 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1952 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1953 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1954 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1956 case SCE_SNAP_TARGET_ACTIVE:
1957 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1958 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1959 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1960 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1965 uiBlockSetDirection(block, UI_RIGHT);
1966 uiTextBoundsBlock(block, 60);
1970 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
1975 initTransform(TFM_MIRROR, CTX_NO_PET);
1979 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1980 BIF_setLocalAxisConstraint('X', " on X axis");
1984 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1985 BIF_setLocalAxisConstraint('Y', " on Y axis");
1989 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1990 BIF_setLocalAxisConstraint('Z', " on Z axis");
1994 allqueue(REDRAWVIEW3D, 0);
1998 static uiBlock *view3d_object_mirrormenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2001 short yco = 20, menuwidth = 120;
2003 block= uiBeginBlock(C, handle->region, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV);
2004 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2006 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2007 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2008 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2009 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2010 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2012 uiBlockSetDirection(block, UI_RIGHT);
2013 uiTextBoundsBlock(block, 60);
2017 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2021 case 0: /* clear origin */
2024 case 1: /* clear scale */
2027 case 2: /* clear rotation */
2030 case 3: /* clear location */
2034 if(OBACT) object_apply_deform(OBACT);
2036 case 5: /* make duplis real */
2037 make_duplilist_real();
2039 case 6: /* apply scale/rotation or deformation */
2040 apply_objects_locrot();
2042 case 7: /* apply visual matrix to objects loc/size/rot */
2043 apply_objects_visual_tx();
2046 allqueue(REDRAWVIEW3D, 0);
2050 static uiBlock *view3d_edit_object_transformmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2053 short yco = 20, menuwidth = 120;
2055 block= uiBeginBlock(C, handle->region, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV);
2056 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2058 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, "");
2059 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2060 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2061 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2063 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2065 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2066 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2067 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2068 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2070 uiBlockSetDirection(block, UI_RIGHT);
2071 uiTextBoundsBlock(block, 60);
2075 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2088 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2091 short yco = 20, menuwidth = 120;
2093 block= uiBeginBlock(C, handle->region, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV);
2094 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2097 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2098 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2100 uiBlockSetDirection(block, UI_RIGHT);
2101 uiTextBoundsBlock(block, 60);
2105 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2113 make_links((short)event);
2116 allqueue(REDRAWVIEW3D, 0);
2120 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2122 Scene *scene= CTX_data_scene(C);
2126 short yco = 20, menuwidth = 120;
2128 block= uiBeginBlock(C, handle->region, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV);
2129 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2131 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2133 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2135 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2139 if(ob->type==OB_MESH) {
2140 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2141 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2142 } else if(ob->type==OB_CURVE) {
2143 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2144 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2145 } else if(ob->type==OB_FONT) {
2146 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2147 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2148 } else if(ob->type==OB_SURF) {
2149 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2150 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2151 } else if(ob->type==OB_MBALL) {
2152 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2153 } else if(ob->type==OB_CAMERA) {
2154 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2155 } else if(ob->type==OB_LAMP) {
2156 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2157 } else if(ob->type==OB_LATTICE) {
2158 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2159 } else if(ob->type==OB_ARMATURE) {
2160 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2164 uiBlockSetDirection(block, UI_RIGHT);
2165 uiTextBoundsBlock(block, 60);
2169 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2173 case 1: /* Object */
2174 single_object_users(1);
2176 case 2: /* Object & ObData */
2177 single_object_users(1);
2178 single_obdata_users(1);
2180 case 3: /* Object & ObData & Materials+Tex */
2181 single_object_users(1);
2182 single_obdata_users(1);
2183 single_mat_users(1); /* also tex */
2185 case 4: /* Materials+Tex */
2186 single_mat_users(1);
2189 single_ipo_users(1);
2193 clear_id_newpoins();
2196 allqueue(REDRAWALL, 0);
2200 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2204 short yco = 20, menuwidth = 120;
2206 block= uiBeginBlock(C, handle->region, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV);
2207 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2209 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2210 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2211 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2212 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2213 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2215 uiBlockSetDirection(block, UI_RIGHT);
2216 uiTextBoundsBlock(block, 60);
2220 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2246 // XXX copy_attr((short)event);
2249 allqueue(REDRAWVIEW3D, 0);
2252 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2254 Scene *scene= CTX_data_scene(C);
2258 short yco = 20, menuwidth = 120;
2260 block= uiBeginBlock(C, handle->region, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV);
2261 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2265 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2266 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2267 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2268 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2269 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2270 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2272 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2274 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2275 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2276 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2277 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2278 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2279 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2281 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2283 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2284 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2288 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2289 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2290 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2293 if(ob->type == OB_FONT) {
2294 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2295 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2296 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2298 if(ob->type == OB_CURVE) {
2299 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2300 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2303 if(ob->type==OB_MESH) {
2304 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2305 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2307 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2310 uiBlockSetDirection(block, UI_RIGHT);
2311 uiTextBoundsBlock(block, 60);
2316 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2320 case 0: /* clear parent */
2323 case 1: /* make parent */
2327 allqueue(REDRAWVIEW3D, 0);
2331 static uiBlock *view3d_edit_object_parentmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2334 short yco = 20, menuwidth = 120;
2336 block= uiBeginBlock(C, handle->region, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV);
2337 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2339 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2340 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2342 uiBlockSetDirection(block, UI_RIGHT);
2343 uiTextBoundsBlock(block, 60);
2347 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2354 group_operation(event);
2357 allqueue(REDRAWVIEW3D, 0);
2361 static uiBlock *view3d_edit_object_groupmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2364 short yco = 20, menuwidth = 120;
2366 block= uiBeginBlock(C, handle->region, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV);
2367 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2369 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, "");
2370 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, "");
2371 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, "");
2373 uiBlockSetDirection(block, UI_RIGHT);
2374 uiTextBoundsBlock(block, 60);
2378 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2382 case 0: /* clear track */
2385 case 1: /* make track */
2389 allqueue(REDRAWVIEW3D, 0);
2393 static uiBlock *view3d_edit_object_trackmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2396 short yco = 20, menuwidth = 120;
2398 block= uiBeginBlock(C, handle->region, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV);
2399 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2401 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2402 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2404 uiBlockSetDirection(block, UI_RIGHT);
2405 uiTextBoundsBlock(block, 60);
2409 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2413 case 1: /* add constraint */
2416 case 2: /* clear constraint */
2417 ob_clear_constraints();
2420 allqueue(REDRAWVIEW3D, 0);
2424 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2427 short yco = 20, menuwidth = 120;
2429 block= uiBeginBlock(C, handle->region, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV);
2430 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2432 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2433 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2435 uiBlockSetDirection(block, UI_RIGHT);
2436 uiTextBoundsBlock(block, 60);
2440 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2446 case 0: /* show objects */
2449 case 1: /* hide selected objects */
2452 case 2: /* hide deselected objects */
2456 allqueue(REDRAWVIEW3D, 0);
2460 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2463 short yco = 20, menuwidth = 120;
2465 block= uiBeginBlock(C, handle->region, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV);
2466 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2468 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2469 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2470 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2472 uiBlockSetDirection(block, UI_RIGHT);
2473 uiTextBoundsBlock(block, 60);
2477 #ifndef DISABLE_PYTHON
2478 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2481 BPY_menu_do_python(PYMENU_OBJECT, event);
2483 allqueue(REDRAWVIEW3D, 0);
2487 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2490 // short yco = 20, menuwidth = 120;
2491 // XXX BPyMenu *pym;
2494 block= uiBeginBlock(C, handle->region, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV);
2495 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2497 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2498 // 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);
2501 uiBlockSetDirection(block, UI_RIGHT);
2502 uiTextBoundsBlock(block, 60);
2506 #endif /* DISABLE_PYTHON */
2509 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2512 Scene *scene= CTX_data_scene(C);
2513 ScrArea *sa= CTX_wm_area(C);
2514 View3D *v3d= sa->spacedata.first;
2518 case 0: /* transform properties*/
2519 // XXX mainqenter(NKEY, 1);
2521 case 1: /* delete */
2522 delete_context_selected();
2524 case 2: /* duplicate */
2525 duplicate_context_selected();
2527 case 3: /* duplicate linked */
2530 case 5: /* make single user */
2533 case 7: /* boolean operation */
2536 case 8: /* join objects */
2539 case 9: /* convert object type */
2542 case 10: /* move to layer */
2545 case 11: /* insert keyframe */
2548 case 15: /* Object Panel */
2549 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2551 case 16: /* make proxy object*/
2554 case 18: /* delete keyframe */
2558 allqueue(REDRAWVIEW3D, 0);
2562 static uiBlock *view3d_edit_objectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2564 Scene *scene= CTX_data_scene(C);
2566 short yco= 0, menuwidth=120;
2568 block= uiBeginBlock(C, handle->region, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV);
2569 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2571 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2572 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2573 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2575 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2576 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2578 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2580 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2581 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2583 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2585 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2586 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2587 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2589 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2591 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2592 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2593 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2594 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2595 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2597 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2599 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2600 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2601 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2602 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2604 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2606 if (OBACT && OBACT->type == OB_MESH) {
2607 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2609 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2610 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2612 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2614 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2615 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2617 #ifndef DISABLE_PYTHON
2618 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2619 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2622 if(handle->region->alignment==RGN_ALIGN_TOP) {
2623 uiBlockSetDirection(block, UI_DOWN);
2626 uiBlockSetDirection(block, UI_TOP);
2627 uiBlockFlipOrder(block);
2630 uiTextBoundsBlock(block, 50);
2635 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2637 Scene *scene= CTX_data_scene(C);
2639 scene->prop_mode= event;
2641 allqueue(REDRAWVIEW3D, 1);
2644 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2646 Scene *scene= CTX_data_scene(C);
2648 short yco = 20, menuwidth = 120;
2650 block= uiBeginBlock(C, handle->region, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV);
2651 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2653 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, "");
2654 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2655 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, "");
2656 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2657 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, "");
2658 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2659 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, "");
2660 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2661 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, "");
2662 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2663 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, "");
2664 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2665 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, "");
2666 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2668 uiBlockSetDirection(block, UI_RIGHT);
2669 uiTextBoundsBlock(block, 60);
2674 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2677 Scene *scene= CTX_data_scene(C);
2682 case 0: /* make vertex parent */
2685 case 1: /* remove doubles */
2686 count= removedoublesflag(1, 0, scene->toolsettings->doublimit);
2687 notice("Removed: %d", count);
2688 if (count) { /* only undo and redraw if an action is taken */
2689 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2690 BIF_undo_push("Rem Doubles");
2693 case 2: /* smooth */
2696 case 3: /* separate */
2704 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2706 case 6: /* add hook */
2713 allqueue(REDRAWVIEW3D, 0);
2717 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2720 short yco = 20, menuwidth = 120;
2722 block= uiBeginBlock(C, handle->region, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV);
2723 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2725 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2726 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2727 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2728 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2730 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2732 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2733 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2735 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2737 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2738 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2740 uiBlockSetDirection(block, UI_RIGHT);
2741 uiTextBoundsBlock(block, 60);
2745 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2747 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2750 Scene *scene= CTX_data_scene(C);
2756 case 0: /* subdivide smooth */
2757 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2758 BIF_undo_push("Subdivide Smooth");
2760 case 1: /*subdivide fractal */
2762 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2763 fac= -( (float)randfac )/100;
2764 esubdivideflag(1, fac, scene->toolsettings->editbutflag,1,0);
2765 BIF_undo_push("Subdivide Fractal");
2767 case 2: /* subdivide */
2768 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag,1,0);
2769 BIF_undo_push("Subdivide");
2771 case 3: /* knife subdivide */
2772 KnifeSubdivide(KNIFE_PROMPT);
2774 case 4: /* Loop subdivide */
2777 case 5: /* Make Edge/Face */
2783 case 7: /* Mark Seam */
2784 editmesh_mark_seam(0);
2786 case 8: /* Clear Seam */
2787 editmesh_mark_seam(1);
2789 case 9: /* Crease SubSurf */
2790 if(!multires_level1_test()) {
2791 initTransform(TFM_CREASE, CTX_EDGE);
2795 case 10: /* Rotate Edge */
2796 edge_rotate_selected(2);
2798 case 11: /* Rotate Edge */
2799 edge_rotate_selected(1);
2801 case 12: /* Edgeslide */
2804 case 13: /* Edge Loop Delete */
2805 if(EdgeLoopDelete()) {
2807 BIF_undo_push("Erase Edge Loop");
2808 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2811 case 14: /*Collapse Edges*/
2813 BIF_undo_push("Collapse");
2816 editmesh_mark_sharp(1);
2817 BIF_undo_push("Mark Sharp");
2818 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2821 editmesh_mark_sharp(0);
2822 BIF_undo_push("Clear Sharp");
2823 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2825 case 17: /* Adjust Bevel Weight */
2826 if(!multires_level1_test()) {
2827 initTransform(TFM_BWEIGHT, CTX_EDGE);
2832 allqueue(REDRAWVIEW3D, 0);
2836 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2839 short yco = 20, menuwidth = 120;
2841 block= uiBeginBlock(C, handle->region, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV);
2842 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2844 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2846 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2848 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2849 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2850 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2852 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2854 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2855 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2856 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2858 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2860 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2861 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2863 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2865 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2866 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2868 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2869 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2871 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2872 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2874 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2876 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2877 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2879 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2880 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2882 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2883 uiBlockSetDirection(block, UI_RIGHT);
2884 uiTextBoundsBlock(block, 60);
2888 void do_view3d_edit_mesh_facesmenu(bContext *C, void *arg, int event)
2891 Scene *scene= CTX_data_scene(C);
2894 case 0: /* Fill Faces */
2897 case 1: /* Beauty Fill Faces */
2900 case 2: /* Quads to Tris */
2901 convert_to_triface(0);
2902 allqueue(REDRAWVIEW3D, 0);
2904 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2906 case 3: /* Tris to Quads */
2909 case 4: /* Flip triangle edges */
2912 case 5: /* Make Edge/Face */
2915 case 6: /* Set Smooth */
2916 mesh_set_smooth_faces(1);
2918 case 7: /* Set Solid */
2919 mesh_set_smooth_faces(0);