2 * header_view3d.c oct-2003
4 * Functions to draw the "3D Viewport" window header
5 * and handle user events sent to it.
9 * ***** BEGIN GPL LICENSE BLOCK *****
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software Foundation,
23 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26 * All rights reserved.
28 * The Original Code is: all of this file.
30 * Contributor(s): none yet.
32 * ***** END GPL LICENSE BLOCK *****
43 #include "BIF_language.h"
45 #include "MEM_guardedalloc.h"
47 #include "DNA_armature_types.h"
49 #include "DNA_image_types.h"
50 #include "DNA_meshdata_types.h"
51 #include "DNA_mesh_types.h"
52 #include "DNA_object_types.h"
53 #include "DNA_scene_types.h"
54 #include "DNA_screen_types.h"
55 #include "DNA_space_types.h"
56 #include "DNA_view3d_types.h"
57 #include "DNA_text_types.h" /* for space handlers */
58 #include "DNA_texture_types.h"
59 #include "DNA_userdef_types.h" /* U.smooth_viewtx */
61 #include "BKE_action.h"
62 #include "BKE_curve.h"
63 #include "BKE_depsgraph.h"
64 #include "BKE_displist.h"
65 #include "BKE_effect.h"
66 #include "BKE_global.h"
67 #include "BKE_image.h"
68 #include "BKE_library.h"
71 #include "BKE_modifier.h"
72 #include "BKE_particle.h"
73 #include "BKE_utildefines.h" /* for VECCOPY */
76 #include "BKE_verse.h"
79 #include "BLI_arithb.h"
80 #include "BLI_blenlib.h"
81 #include "BLI_editVert.h"
84 #include "BSE_editipo.h"
85 #include "BSE_headerbuttons.h"
87 #include "BSE_drawview.h"
89 #include "BDR_editcurve.h"
90 #include "BDR_editface.h"
91 #include "BDR_editmball.h"
92 #include "BDR_editobject.h"
93 #include "BDR_sculptmode.h"
94 #include "BDR_imagepaint.h"
95 #include "BDR_vpaint.h"
97 #include "BIF_editlattice.h"
98 #include "BIF_editarmature.h"
99 #include "BIF_editparticle.h"
100 #include "BIF_editconstraint.h"
101 #include "BIF_editdeform.h"
102 #include "BIF_editfont.h"
103 #include "BIF_editgroup.h"
104 #include "BIF_editmesh.h"
105 #include "BIF_editmode_undo.h"
106 #include "BIF_editview.h"
108 #include "BIF_interface.h"
109 #include "BIF_keyframing.h"
110 #include "BIF_mainqueue.h"
111 #include "BIF_meshtools.h"
112 #include "BIF_poselib.h"
113 #include "BIF_poseobject.h"
114 #include "BIF_radialcontrol.h"
115 #include "BIF_renderwin.h"
116 #include "BIF_resources.h"
117 #include "BIF_retopo.h"
118 #include "BIF_screen.h"
119 #include "BIF_space.h"
120 #include "BIF_toets.h"
121 #include "BIF_toolbox.h"
122 #include "BIF_transform.h"
125 #include "BIF_verse.h"
128 #ifndef DISABLE_PYTHON
129 #include "BPY_extern.h"
130 #include "BPY_menus.h"
134 #include "multires.h"
135 #include "mydevice.h"
136 #include "butspace.h"
138 #include "BIF_poseobject.h"
140 /* View3d->modeselect
141 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
142 * rather than those buttons.
143 * I know the implementation's not good - it's an experiment to see if this
144 * approach would work well
146 * This can be cleaned when I make some new 'mode' icons.
149 #define V3D_OBJECTMODE_SEL ICON_OBJECT
150 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
151 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
152 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
153 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
154 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
155 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
156 #define V3D_POSEMODE_SEL ICON_POSE_HLT
157 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
159 #define TEST_EDITMESH if(G.obedit==0) return; \
160 if( (G.vd->lay & G.obedit->lay)==0 ) return;
162 void do_layer_buttons(short event)
164 static int oldlay= 1;
167 if(G.vd->localview) return;
169 if(event==-1 && (G.qual & LR_CTRLKEY)) {
170 G.vd->scenelock= !G.vd->scenelock;
171 do_view3d_buttons(B_SCENELOCK);
172 } else if (event<0) {
173 if(G.vd->lay== (1<<20)-1) {
174 if(event==-2 || G.qual & LR_SHIFTKEY) G.vd->lay= oldlay;
178 G.vd->lay= (1<<20)-1;
181 if(G.vd->scenelock) handle_view3d_lock();
182 scrarea_queue_winredraw(curarea);
184 /* new layers might need unflushed events events */
185 DAG_scene_update_flags(G.scene, G.vd->lay); /* tags all that moves and flushes */
188 if(G.qual & LR_ALTKEY) {
189 if(event<11) event+= 10;
191 if(G.qual & LR_SHIFTKEY) {
192 if(G.vd->lay & (1<<event)) G.vd->lay -= (1<<event);
193 else G.vd->lay += (1<<event);
195 do_view3d_buttons(event+B_LAY);
197 /* redraw seems double: but the queue nicely handles that */
198 scrarea_queue_headredraw(curarea);
200 if(curarea->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
201 if(G.vd->drawtype == OB_SHADED) reshadeall_displist();
202 allqueue(REDRAWNLA, 0);
205 static void do_view3d_view_camerasmenu(void *arg, int event)
211 /* Set Active Object as Active Camera */
212 /* ugly hack alert */
213 G.qual |= LR_CTRLKEY;
215 G.qual &= ~LR_CTRLKEY;
217 /* store settings of current view before allowing overwriting with camera view */
218 /* this is a copy of the code in toets.c */
219 if(G.vd->persp != V3D_CAMOB) {
220 QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
221 G.vd->lview= G.vd->view;
222 G.vd->lpersp= G.vd->persp;
225 for( base = FIRSTBASE; base; base = base->next ) {
226 if (base->object->type == OB_CAMERA) {
231 if (G.vd->camera == base->object && G.vd->persp==V3D_CAMOB)
234 if (U.smooth_viewtx) {
235 /* move 3d view to camera view */
236 float orig_ofs[3], orig_lens = G.vd->lens;
237 VECCOPY(orig_ofs, G.vd->ofs);
239 if (G.vd->camera && G.vd->persp==V3D_CAMOB)
240 view_settings_from_ob(G.vd->camera, G.vd->ofs, G.vd->viewquat, &G.vd->dist, &G.vd->lens);
242 G.vd->camera = base->object;
243 handle_view3d_lock();
244 G.vd->persp= V3D_CAMOB;
247 smooth_view_to_camera(G.vd);
250 VECCOPY(G.vd->ofs, orig_ofs);
251 G.vd->lens = orig_lens;
253 G.vd->camera= base->object;
254 handle_view3d_lock();
255 G.vd->persp= V3D_CAMOB;
264 allqueue(REDRAWVIEW3D, 0);
267 static uiBlock *view3d_view_camerasmenu(void *arg_unused)
271 short yco= 0, menuwidth=120;
275 block= uiNewBlock(&curarea->uiblocks, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
276 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
278 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, "");
280 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
282 for( base = FIRSTBASE; base; base = base->next ) {
283 if (base->object->type == OB_CAMERA) {
286 strcpy(camname, base->object->id.name+2);
287 if (base->object == G.scene->camera) strcat(camname, " (Active)");
289 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
293 uiBlockSetDirection(block, UI_RIGHT);
294 uiTextBoundsBlock(block, 50);
298 static void do_view3d_view_cameracontrolsmenu(void *arg, int event)
301 case 0: /* Orbit Left */
304 case 1: /* Orbit Right */
307 case 2: /* Orbit Up */
310 case 3: /* Orbit Down */
313 case 4: /* Pan left */
314 /* ugly hack alert */
315 G.qual |= LR_CTRLKEY;
317 G.qual &= ~LR_CTRLKEY;
319 case 5: /* Pan right */
320 /* ugly hack alert */
321 G.qual |= LR_CTRLKEY;
323 G.qual &= ~LR_CTRLKEY;
326 /* ugly hack alert */
327 G.qual |= LR_CTRLKEY;
329 G.qual &= ~LR_CTRLKEY;
331 case 7: /* Pan down */
332 /* ugly hack alert */
333 G.qual |= LR_CTRLKEY;
335 G.qual &= ~LR_CTRLKEY;
337 case 8: /* Zoom In */
338 persptoetsen(PADPLUSKEY);
340 case 9: /* Zoom Out */
341 persptoetsen(PADMINUS);
343 case 10: /* Reset Zoom */
344 persptoetsen(PADENTER);
346 case 11: /* Camera Fly mode */
350 allqueue(REDRAWVIEW3D, 0);
353 static uiBlock *view3d_view_cameracontrolsmenu(void *arg_unused)
355 /* static short tog=0; */
357 short yco= 0, menuwidth=120;
359 block= uiNewBlock(&curarea->uiblocks, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
360 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
362 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
364 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
366 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
367 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
368 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
369 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
371 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
373 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
374 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
375 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
376 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
378 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
380 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
381 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
382 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
384 uiBlockSetDirection(block, UI_RIGHT);
385 uiTextBoundsBlock(block, 50);
389 static void do_view3d_view_alignviewmenu(void *arg, int event)
391 View3D *v3d= curarea->spacedata.first;
396 case 0: /* Align View to Selected (edit/faceselect mode) */
399 if ((G.obedit) && (G.obedit->type == OB_MESH)) {
400 editmesh_align_view_to_selected(v3d, event + 1);
401 } else if (FACESEL_PAINT_TEST) {
402 Object *obact= OBACT;
403 if (obact && obact->type==OB_MESH) {
404 Mesh *me= obact->data;
407 faceselect_align_view_to_selected(v3d, me, event + 1);
408 addqueue(v3d->area->win, REDRAW, 1);
413 case 3: /* Center View to Cursor */
415 G.vd->ofs[0]= -curs[0];
416 G.vd->ofs[1]= -curs[1];
417 G.vd->ofs[2]= -curs[2];
418 scrarea_queue_winredraw(curarea);
420 case 4: /* Align Active Camera to View */
421 /* This ugly hack is a symptom of the nasty persptoetsen function,
422 * but at least it works for now.
424 G.qual |= LR_CTRLKEY|LR_ALTKEY;
426 G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
428 case 5: /* Align View to Selected (object mode) */
429 mainqenter(PADASTERKEY, 1);
431 case 6: /* Center View and Cursor to Origin */
434 curs[0]=curs[1]=curs[2]= 0.0;
437 allqueue(REDRAWVIEW3D, 0);
440 static uiBlock *view3d_view_alignviewmenu(void *arg_unused)
442 /* static short tog=0; */
444 short yco= 0, menuwidth=120;
446 block= uiNewBlock(&curarea->uiblocks, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
447 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
449 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
450 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, "");
451 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, "");
453 if (((G.obedit) && (G.obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
454 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, "");
455 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, "");
456 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, "");
458 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
461 uiBlockSetDirection(block, UI_RIGHT);
462 uiTextBoundsBlock(block, 50);
466 #ifndef DISABLE_PYTHON
467 static void do_view3d_view_spacehandlers(void *arg, int event)
469 Text *text = G.main->text.first;
470 unsigned short menu_evt_num = 0;
474 if (++menu_evt_num == event) {
476 if (BPY_has_spacehandler(text, curarea))
477 BPY_del_spacehandler(text, curarea);
479 BPY_add_spacehandler(text, curarea, SPACE_VIEW3D);
483 text = text->id.next;
487 allqueue(REDRAWVIEW3D, 1);
490 static uiBlock *view3d_view_spacehandlers(void *arg_unused)
493 short yco= 0, menuwidth=120;
494 Text *text = G.main->text.first;
495 ScrArea *sa = curarea;
496 unsigned short handlertype;
497 int icontype, slinks_num = 0;
498 unsigned short menu_evt_num = 0;
500 static char msg_tog_on[] = "Click to enable";
501 static char msg_tog_off[]= "Click to disable";
504 block= uiNewBlock(&curarea->uiblocks, "view3d_view_spacehandlers", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
505 uiBlockSetButmFunc(block, do_view3d_view_spacehandlers, NULL);
509 handlertype = BPY_is_spacehandler(text, SPACE_VIEW3D);
514 /* mark text as script, so we can remove its link if its header
515 * becomes corrupt and it's not recognized anymore */
516 if (!(text->flags & TXT_ISSCRIPT)) text->flags |= TXT_ISSCRIPT;
518 if (handlertype == SPACEHANDLER_VIEW3D_EVENT)
519 BLI_strncpy(menustr, "Event: ", 8);
521 BLI_strncpy(menustr, "Draw: ", 8);
522 BLI_strncpy(menustr+7, text->id.name+2, 22);
524 if (BPY_has_spacehandler(text, sa)) {
525 icontype = ICON_CHECKBOX_HLT;
529 icontype = ICON_CHECKBOX_DEHLT;
533 uiDefIconTextBut(block, BUTM, 1, icontype, menustr, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, menu_evt_num, tip);
535 else if (text->flags & TXT_ISSCRIPT) {
536 /* if bit set, text was a space handler, but its header got corrupted,
537 * so we need to remove the link here */
538 BPY_del_spacehandler(text, sa);
539 text->flags &=~TXT_ISSCRIPT;
542 text = text->id.next;
545 if (slinks_num == 0) {
546 uiDefIconTextBut(block, BUTM, 1, ICON_SCRIPT, "None Available", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, -1, "None of the texts in the Text Editor is a 3D View space handler");
549 uiBlockSetDirection(block, UI_RIGHT);
550 uiTextBoundsBlock(block, 50);
554 #endif /* DISABLE_PYTHON */
556 static void do_view3d_viewmenu(void *arg, int event)
558 View3D *v3d= curarea->spacedata.first;
563 G.vd->persp = V3D_PERSP;
577 case 5: /* Perspective */
578 G.vd->persp=V3D_PERSP;
580 case 6: /* Orthographic */
581 G.vd->persp=V3D_ORTHO;
583 case 7: /* Local View */
587 case 8: /* Global View */
589 endlocalview(curarea);
591 case 9: /* View All (Home) */
594 case 11: /* View Selected */
597 case 13: /* Play Back Animation */
600 case 15: /* Background Image... */
601 add_blockhandler(curarea, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
603 case 16: /* View Panel */
604 add_blockhandler(curarea, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
606 case 17: /* Set Clipping Border */
607 view3d_edit_clipping(v3d);
609 case 18: /* render preview */
610 toggle_blockhandler(curarea, VIEW3D_HANDLER_PREVIEW, 0);
612 case 19: /* zoom within border */
613 view3d_border_zoom();
615 case 20: /* Transform Space Panel */
616 add_blockhandler(curarea, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
618 case 21: /* Grease Pencil */
619 add_blockhandler(curarea, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
621 case 22: /* View all layers */
622 do_layer_buttons(-2);
625 allqueue(REDRAWVIEW3D, 1);
628 static uiBlock *view3d_viewmenu(void *arg_unused)
631 short yco= 0, menuwidth=120;
632 View3D *v3d= curarea->spacedata.first;
634 block= uiNewBlock(&curarea->uiblocks, "view3d_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
635 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
637 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
638 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
639 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
640 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
641 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
643 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
645 if ((G.vd->viewbut == 0) && !(G.vd->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
646 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
647 if (G.vd->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, "");
648 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
649 if (G.vd->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
650 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
651 if (G.vd->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
652 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
653 if (G.vd->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
654 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
656 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
658 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
660 if(G.vd->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, "");
661 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
662 if(G.vd->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, "");
663 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
665 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
667 if(G.vd->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, "");
668 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
670 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
672 if(G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
673 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
674 if(!G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
675 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
677 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
679 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
680 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
682 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
684 if(v3d->flag & V3D_CLIPPING)
685 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
687 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
688 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, "");
689 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
690 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
691 if(!curarea->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
692 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
694 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
696 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
698 #ifndef DISABLE_PYTHON
699 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
700 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
703 if(curarea->headertype==HEADERTOP) {
704 uiBlockSetDirection(block, UI_DOWN);
707 uiBlockSetDirection(block, UI_TOP);
708 uiBlockFlipOrder(block);
711 uiTextBoundsBlock(block, 50);
716 void do_view3d_select_object_typemenu(void *arg, int event)
719 extern void selectall_type(short obtype);
723 selectall_type(OB_MESH);
726 selectall_type(OB_CURVE);
728 case 3: /* Surface */
729 selectall_type(OB_SURF);
732 selectall_type(OB_MBALL);
734 case 5: /* Armature */
735 selectall_type(OB_ARMATURE);
737 case 6: /* Lattice */
738 selectall_type(OB_LATTICE);
741 selectall_type(OB_FONT);
744 selectall_type(OB_EMPTY);
747 selectall_type(OB_CAMERA);
750 selectall_type(OB_LAMP);
753 do_layer_buttons(-2);
756 allqueue(REDRAWVIEW3D, 0);
759 static uiBlock *view3d_select_object_typemenu(void *arg_unused)
762 short yco = 20, menuwidth = 120;
764 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
765 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
767 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
768 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
769 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
770 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
772 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
774 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
775 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
776 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
777 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
779 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
781 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
782 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
784 uiBlockSetDirection(block, UI_RIGHT);
785 uiTextBoundsBlock(block, 60);
789 void do_view3d_select_object_layermenu(void *arg, int event)
791 extern void selectall_layer(unsigned int layernum);
815 selectall_layer(event);
818 allqueue(REDRAWVIEW3D, 0);
821 static uiBlock *view3d_select_object_layermenu(void *arg_unused)
824 short xco= 0, yco = 20, menuwidth = 22;
826 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
827 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
829 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
830 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
831 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
832 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
833 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
835 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
836 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
837 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
838 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
839 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
841 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
842 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
843 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
844 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
845 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
847 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
848 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
849 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
850 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
851 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
853 uiBlockSetDirection(block, UI_RIGHT);
854 /*uiTextBoundsBlock(block, 100);*/
858 void do_view3d_select_object_linkedmenu(void *arg, int event)
861 case 1: /* Object Ipo */
863 case 3: /* Current Material */
864 case 4: /* Current Texture */
869 allqueue(REDRAWVIEW3D, 0);
872 static uiBlock *view3d_select_object_linkedmenu(void *arg_unused)
875 short yco = 20, menuwidth = 120;
877 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
878 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
880 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
881 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
882 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
883 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
885 uiBlockSetDirection(block, UI_RIGHT);
886 uiTextBoundsBlock(block, 60);
890 void do_view3d_select_object_groupedmenu(void *arg, int event)
893 case 1: /* Children */
894 case 2: /* Immediate Children */
896 case 4: /* Siblings */
898 case 6: /* Objects on Shared Layers */
899 case 7: /* Objects in Same Group */
900 case 8: /* Object Hooks*/
901 case 9: /* Object PassIndex*/
902 case 10: /* Object Color*/
903 case 11: /* Game Properties*/
904 select_object_grouped((short)event);
907 allqueue(REDRAWVIEW3D, 0);
910 static uiBlock *view3d_select_object_groupedmenu(void *arg_unused)
913 short yco = 20, menuwidth = 120;
915 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
916 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
918 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
919 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
920 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
921 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
922 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, "");
923 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, "");
924 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, "");
925 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
926 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
927 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
928 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
930 uiBlockSetDirection(block, UI_RIGHT);
931 uiTextBoundsBlock(block, 60);
935 void do_view3d_select_objectmenu(void *arg, int event)
939 case 0: /* border select */
942 case 1: /* Select/Deselect All */
945 case 2: /* inverse */
952 allqueue(REDRAWVIEW3D, 0);
955 static uiBlock *view3d_select_objectmenu(void *arg_unused)
958 short yco= 0, menuwidth=120;
960 block= uiNewBlock(&curarea->uiblocks, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
961 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
963 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
965 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
967 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
968 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
969 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
971 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
972 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
974 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
976 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
977 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
979 if(curarea->headertype==HEADERTOP) {
980 uiBlockSetDirection(block, UI_DOWN);
983 uiBlockSetDirection(block, UI_TOP);
984 uiBlockFlipOrder(block);
987 uiTextBoundsBlock(block, 50);
991 void do_view3d_select_meshmenu(void *arg, int event)
993 /* extern void borderselect(void);*/
997 case 0: /* border select */
1000 case 2: /* Select/Deselect all */
1003 case 3: /* Inverse */
1006 case 4: /* select linked vertices */
1007 selectconnected_mesh_all();
1009 case 5: /* select random */
1010 selectrandom_mesh();
1012 case 7: /* select more */
1015 case 8: /* select less */
1018 case 9: /* select non-manifold */
1019 select_non_manifold();
1021 case 11: /* select triangles */
1022 select_faces_by_numverts(3);
1024 case 12: /* select quads */
1025 select_faces_by_numverts(4);
1027 case 13: /* select non-triangles/quads */
1028 select_faces_by_numverts(5);
1030 case 14: /* select sharp edges */
1031 select_sharp_edges();
1033 case 15: /* select linked flat faces */
1034 select_linked_flat_faces();
1037 case 16: /* path select */
1039 BIF_undo_push("Path Select");
1041 case 17: /* edge loop select */
1042 loop_multiselect(0);
1044 case 18: /* edge ring select */
1045 loop_multiselect(1);
1047 case 19: /* loop to region */
1050 case 20: /* region to loop */
1053 case 21: /* Select grouped */
1054 select_mesh_group_menu();
1057 allqueue(REDRAWVIEW3D, 0);
1061 static uiBlock *view3d_select_meshmenu(void *arg_unused)
1064 short yco= 0, menuwidth=120;
1066 block= uiNewBlock(&curarea->uiblocks, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1067 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1069 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1071 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1073 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1074 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1076 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1077 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1079 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1080 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1081 "Non-Manifold|Ctrl Alt Shift M",
1082 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1083 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1084 "Sharp Edges|Ctrl Alt Shift S",
1085 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1086 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1087 "Linked Flat Faces|Ctrl Alt Shift F",
1088 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1090 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1091 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1093 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1094 "Triangles|Ctrl Alt Shift 3",
1095 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1097 "Quads|Ctrl Alt Shift 4",
1098 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1099 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1100 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1101 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1102 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1103 "Similar to Selection...|Shift G",
1104 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1106 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1107 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1109 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1110 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1112 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1114 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1115 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1117 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1118 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1119 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1120 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1122 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1123 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1125 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1126 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1128 if(curarea->headertype==HEADERTOP) {
1129 uiBlockSetDirection(block, UI_DOWN);
1132 uiBlockSetDirection(block, UI_TOP);
1133 uiBlockFlipOrder(block);
1136 uiTextBoundsBlock(block, 50);
1140 void do_view3d_select_curvemenu(void *arg, int event)
1142 /* extern void borderselect(void);*/
1145 case 0: /* border select */
1148 case 2: /* Select/Deselect all */
1151 case 3: /* Inverse */
1154 /* select connected control points */
1156 G.qual |= LR_CTRLKEY;
1157 select_connected_nurb();
1158 G.qual &= ~LR_CTRLKEY;
1160 case 5: /* select row (nurb) */
1163 case 7: /* select/deselect first */
1164 selectend_nurb(FIRST, 1, DESELECT);
1166 case 8: /* select/deselect last */
1167 selectend_nurb(LAST, 1, DESELECT);
1169 case 9: /* select more */
1172 case 10: /* select less */
1175 case 11: /* select next */
1178 case 12: /* select previous */
1181 case 13: /* select random */
1182 select_random_nurb();
1184 case 14: /* select every nth */
1185 select_every_nth_nurb();
1188 allqueue(REDRAWVIEW3D, 0);
1192 static uiBlock *view3d_select_curvemenu(void *arg_unused)
1195 short yco= 0, menuwidth=120;
1197 block= uiNewBlock(&curarea->uiblocks, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1198 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1200 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1202 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1204 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1205 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1206 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1207 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1209 if (OBACT->type == OB_SURF) {
1210 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1212 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1215 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1217 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1218 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1219 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1220 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1223 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1224 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1225 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1227 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1228 /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1230 if(curarea->headertype==HEADERTOP) {
1231 uiBlockSetDirection(block, UI_DOWN);
1234 uiBlockSetDirection(block, UI_TOP);
1235 uiBlockFlipOrder(block);
1238 uiTextBoundsBlock(block, 50);
1242 void do_view3d_select_metaballmenu(void *arg, int event)
1246 case 0: /* border select */
1249 case 2: /* Select/Deselect all */
1250 deselectall_mball();
1252 case 3: /* Inverse */
1253 selectinverse_mball();
1255 case 4: /* Select Random */
1256 selectrandom_mball();
1259 allqueue(REDRAWVIEW3D, 0);
1263 static uiBlock *view3d_select_metaballmenu(void *arg_unused)
1266 short yco= 0, menuwidth=120;
1268 block= uiNewBlock(&curarea->uiblocks, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1269 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1273 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1275 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1277 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1279 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1281 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1283 if(curarea->headertype==HEADERTOP) {
1284 uiBlockSetDirection(block, UI_DOWN);
1287 uiBlockSetDirection(block, UI_TOP);
1288 uiBlockFlipOrder(block);
1291 uiTextBoundsBlock(block, 50);
1295 static void do_view3d_select_latticemenu(void *arg, int event)
1297 /* extern void borderselect(void);*/
1300 case 0: /* border select */
1303 case 2: /* Select/Deselect all */
1307 allqueue(REDRAWVIEW3D, 0);
1310 static uiBlock *view3d_select_latticemenu(void *arg_unused)
1313 short yco= 0, menuwidth=120;
1315 block= uiNewBlock(&curarea->uiblocks, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1316 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1318 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1320 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1322 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1324 if(curarea->headertype==HEADERTOP) {
1325 uiBlockSetDirection(block, UI_DOWN);
1328 uiBlockSetDirection(block, UI_TOP);
1329 uiBlockFlipOrder(block);
1332 uiTextBoundsBlock(block, 50);
1336 static void do_view3d_select_armaturemenu(void *arg, int event)
1338 /* extern void borderselect(void);*/
1341 case 0: /* border select */
1344 case 2: /* Select/Deselect all */
1345 deselectall_armature(1, 1);
1347 case 3: /* Swap Select All */
1348 deselectall_armature(3, 1);
1350 case 4: /* Select parent */
1351 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1353 case 5: /* Select child */
1354 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1356 case 6: /* Extend Select parent */
1357 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1359 case 7: /* Extend Select child */
1360 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1363 allqueue(REDRAWVIEW3D, 0);
1366 static uiBlock *view3d_select_armaturemenu(void *arg_unused)
1369 short yco= 0, menuwidth=120;
1371 block= uiNewBlock(&curarea->uiblocks, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1372 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1374 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1376 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1378 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1379 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1381 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1383 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1384 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1386 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1389 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1391 if(curarea->headertype==HEADERTOP) {
1392 uiBlockSetDirection(block, UI_DOWN);
1395 uiBlockSetDirection(block, UI_TOP);
1396 uiBlockFlipOrder(block);
1399 uiTextBoundsBlock(block, 50);
1403 static void do_view3d_select_pose_armaturemenu(void *arg, int event)
1405 /* extern void borderselect(void);*/
1408 case 0: /* border select */
1411 case 2: /* Select/Deselect all */
1412 deselectall_posearmature(OBACT, 1, 1);
1414 case 3: /* Select Target(s) of Constraint(s) */
1415 pose_select_constraint_target();
1417 case 5: /* Swap Select All */
1418 deselectall_posearmature(OBACT, 3, 1);
1420 case 6: /* Select parent */
1421 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1423 case 7: /* Select child */
1424 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1426 case 8: /* Extend Select parent */
1427 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1429 case 9: /* Extend Select child */
1430 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1433 allqueue(REDRAWVIEW3D, 0);
1436 static uiBlock *view3d_select_pose_armaturemenu(void *arg_unused)
1439 short yco= 0, menuwidth=120;
1441 block= uiNewBlock(&curarea->uiblocks, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1442 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1444 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1446 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1448 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1449 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1450 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1452 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1454 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1455 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1457 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1459 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1460 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1462 if(curarea->headertype==HEADERTOP) {
1463 uiBlockSetDirection(block, UI_DOWN);
1466 uiBlockSetDirection(block, UI_TOP);
1467 uiBlockFlipOrder(block);
1470 uiTextBoundsBlock(block, 50);
1474 void do_view3d_select_faceselmenu(void *arg, int event)
1476 /* events >= 6 are registered bpython scripts */
1477 #ifndef DISABLE_PYTHON
1478 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1482 case 0: /* border select */
1485 case 2: /* Select/Deselect all */
1486 deselectall_tface();
1488 case 3: /* Select Inverse */
1491 case 4: /* Select Linked */
1492 select_linked_tfaces(2);
1495 allqueue(REDRAWVIEW3D, 0);
1498 static uiBlock *view3d_select_faceselmenu(void *arg_unused)
1501 short yco= 0, menuwidth=120;
1502 #ifndef DISABLE_PYTHON
1507 block= uiNewBlock(&curarea->uiblocks, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1508 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1510 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1512 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1514 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1515 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1517 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1518 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1520 #ifndef DISABLE_PYTHON
1521 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1523 /* note that we account for the 6 previous entries with i+6: */
1524 for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1525 uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1526 menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1527 pym->tooltip?pym->tooltip:pym->filename);
1531 if(curarea->headertype==HEADERTOP) {
1532 uiBlockSetDirection(block, UI_DOWN);
1535 uiBlockSetDirection(block, UI_TOP);
1536 uiBlockFlipOrder(block);
1539 uiTextBoundsBlock(block, 50);
1543 void do_view3d_edit_snapmenu(void *arg, int event)
1546 case 1: /*Selection to grid*/
1548 BIF_undo_push("Snap selection to grid");
1550 case 2: /*Selection to cursor*/
1552 BIF_undo_push("Snap selection to cursor");
1554 case 3: /*Selection to center of selection*/
1556 BIF_undo_push("Snap selection to center");
1558 case 4: /*Cursor to selection*/
1561 case 5: /*Cursor to grid*/
1562 snap_curs_to_grid();
1564 case 6: /*Cursor to Active*/
1565 snap_curs_to_active();
1566 BIF_undo_push("Snap selection to center");
1569 allqueue(REDRAWVIEW3D, 0);
1572 static uiBlock *view3d_edit_snapmenu(void *arg_unused)
1575 short yco = 20, menuwidth = 120;
1577 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1578 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1580 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1581 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1582 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1583 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1584 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1585 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1586 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1590 uiBlockSetDirection(block, UI_RIGHT);
1591 uiTextBoundsBlock(block, 60);
1595 void do_view3d_transform_moveaxismenu(void *arg, int event)
1603 case 0: /* X Global */
1604 initTransform(TFM_TRANSLATION, CTX_NONE);
1605 BIF_setSingleAxisConstraint(mat[0], " X");
1608 case 1: /* Y Global */
1609 initTransform(TFM_TRANSLATION, CTX_NONE);
1610 BIF_setSingleAxisConstraint(mat[1], " Y");
1613 case 2: /* Z Global */
1614 initTransform(TFM_TRANSLATION, CTX_NONE);
1615 BIF_setSingleAxisConstraint(mat[2], " Z");
1618 case 3: /* X Local */
1619 initTransform(TFM_TRANSLATION, CTX_NONE);
1620 BIF_setLocalAxisConstraint('X', " X");
1623 case 4: /* Y Local */
1624 initTransform(TFM_TRANSLATION, CTX_NONE);
1625 BIF_setLocalAxisConstraint('Y', " Y");
1628 case 5: /* Z Local */
1629 initTransform(TFM_TRANSLATION, CTX_NONE);
1630 BIF_setLocalAxisConstraint('Z', " Z");
1634 allqueue(REDRAWVIEW3D, 0);
1637 static uiBlock *view3d_transform_moveaxismenu(void *arg_unused)
1640 short yco = 20, menuwidth = 120;
1642 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1643 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1645 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1646 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1647 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1649 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1651 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1652 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1653 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1656 uiBlockSetDirection(block, UI_RIGHT);
1657 uiTextBoundsBlock(block, 60);
1661 void do_view3d_transform_rotateaxismenu(void *arg, int event)
1669 case 0: /* X Global */
1670 initTransform(TFM_ROTATION, CTX_NONE);
1671 BIF_setSingleAxisConstraint(mat[0], " X");
1674 case 1: /* Y Global */
1675 initTransform(TFM_ROTATION, CTX_NONE);
1676 BIF_setSingleAxisConstraint(mat[1], " Y");
1679 case 2: /* Z Global */
1680 initTransform(TFM_ROTATION, CTX_NONE);
1681 BIF_setSingleAxisConstraint(mat[2], " Z");
1684 case 3: /* X Local */
1685 initTransform(TFM_ROTATION, CTX_NONE);
1686 BIF_setLocalAxisConstraint('X', " X");
1689 case 4: /* Y Local */
1690 initTransform(TFM_ROTATION, CTX_NONE);
1691 BIF_setLocalAxisConstraint('Y', " Y");
1694 case 5: /* Z Local */
1695 initTransform(TFM_ROTATION, CTX_NONE);
1696 BIF_setLocalAxisConstraint('Z', " Z");
1700 allqueue(REDRAWVIEW3D, 0);
1703 static uiBlock *view3d_transform_rotateaxismenu(void *arg_unused)
1706 short yco = 20, menuwidth = 120;
1708 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1709 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1711 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1712 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1713 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1715 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1717 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1718 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1719 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1722 uiBlockSetDirection(block, UI_RIGHT);
1723 uiTextBoundsBlock(block, 60);
1727 void do_view3d_transform_scaleaxismenu(void *arg, int event)
1735 case 0: /* X Global */
1736 initTransform(TFM_RESIZE, CTX_NONE);
1737 BIF_setSingleAxisConstraint(mat[0], " X");
1740 case 1: /* Y Global */
1741 initTransform(TFM_RESIZE, CTX_NONE);
1742 BIF_setSingleAxisConstraint(mat[1], " Y");
1745 case 2: /* Z Global */
1746 initTransform(TFM_RESIZE, CTX_NONE);
1747 BIF_setSingleAxisConstraint(mat[2], " Z");
1750 case 3: /* X Local */
1751 initTransform(TFM_RESIZE, CTX_NONE);
1752 BIF_setLocalAxisConstraint('X', " X");
1755 case 4: /* Y Local */
1756 initTransform(TFM_RESIZE, CTX_NONE);
1757 BIF_setLocalAxisConstraint('X', " X");
1760 case 5: /* Z Local */
1761 initTransform(TFM_RESIZE, CTX_NONE);
1762 BIF_setLocalAxisConstraint('X', " X");
1766 allqueue(REDRAWVIEW3D, 0);
1769 static uiBlock *view3d_transform_scaleaxismenu(void *arg_unused)
1772 short yco = 20, menuwidth = 120;
1774 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1775 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1777 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1778 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1779 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1781 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1783 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1784 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1785 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1788 uiBlockSetDirection(block, UI_RIGHT);
1789 uiTextBoundsBlock(block, 60);
1793 static void do_view3d_transformmenu(void *arg, int event)
1797 initTransform(TFM_TRANSLATION, CTX_NONE);
1801 initTransform(TFM_ROTATION, CTX_NONE);
1805 initTransform(TFM_RESIZE, CTX_NONE);
1812 initTransform(TFM_TOSPHERE, CTX_NONE);
1816 initTransform(TFM_SHEAR, CTX_NONE);
1820 initTransform(TFM_WARP, CTX_NONE);
1824 initTransform(TFM_PUSHPULL, CTX_NONE);
1829 if (G.obedit->type == OB_MESH)
1830 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1832 } else error("Only meshes can be shrinked/fattened");
1844 initTransform(TFM_TILT, CTX_NONE);
1848 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1852 G.scene->snap_flag &= ~SCE_SNAP;
1855 G.scene->snap_flag |= SCE_SNAP;
1858 G.scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1861 G.scene->snap_target = SCE_SNAP_TARGET_CENTER;
1864 G.scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1867 G.scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1873 allqueue(REDRAWVIEW3D, 0);
1876 static uiBlock *view3d_transformmenu(void *arg_unused)
1879 short yco = 20, menuwidth = 120;
1881 block= uiNewBlock(&curarea->uiblocks, "view3d_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1882 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1884 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1885 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1887 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1888 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1890 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1891 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1893 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1896 if (G.obedit->type == OB_MESH)
1897 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1898 else if (G.obedit->type == OB_CURVE) {
1899 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1900 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1903 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1904 if (G.obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1905 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1906 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1907 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1910 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1912 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, "");
1915 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1917 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1919 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1920 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1921 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, "");
1924 if (BIF_snappingSupported())
1926 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1928 if (G.scene->snap_flag & SCE_SNAP)
1930 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1931 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1935 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1936 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1939 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1941 switch(G.scene->snap_target)
1943 case SCE_SNAP_TARGET_CLOSEST:
1944 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1945 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1946 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1947 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1949 case SCE_SNAP_TARGET_CENTER:
1950 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1951 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1952 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1953 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1955 case SCE_SNAP_TARGET_MEDIAN:
1956 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1957 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1958 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1959 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1961 case SCE_SNAP_TARGET_ACTIVE:
1962 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1963 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1964 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1965 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1970 uiBlockSetDirection(block, UI_RIGHT);
1971 uiTextBoundsBlock(block, 60);
1975 void do_view3d_object_mirrormenu(void *arg, int event)
1979 initTransform(TFM_MIRROR, CTX_NO_PET);
1983 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1984 BIF_setLocalAxisConstraint('X', " on X axis");
1988 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1989 BIF_setLocalAxisConstraint('Y', " on Y axis");
1993 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1994 BIF_setLocalAxisConstraint('Z', " on Z axis");
1998 allqueue(REDRAWVIEW3D, 0);
2001 static uiBlock *view3d_object_mirrormenu(void *arg_unused)
2004 short yco = 20, menuwidth = 120;
2006 block= uiNewBlock(&curarea->uiblocks, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2007 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2009 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2010 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2011 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2012 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2013 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2015 uiBlockSetDirection(block, UI_RIGHT);
2016 uiTextBoundsBlock(block, 60);
2020 static void do_view3d_edit_object_transformmenu(void *arg, int event)
2023 case 0: /* clear origin */
2026 case 1: /* clear scale */
2029 case 2: /* clear rotation */
2032 case 3: /* clear location */
2036 if(OBACT) object_apply_deform(OBACT);
2038 case 5: /* make duplis real */
2039 make_duplilist_real();
2041 case 6: /* apply scale/rotation or deformation */
2042 apply_objects_locrot();
2044 case 7: /* apply visual matrix to objects loc/size/rot */
2045 apply_objects_visual_tx();
2048 allqueue(REDRAWVIEW3D, 0);
2051 static uiBlock *view3d_edit_object_transformmenu(void *arg_unused)
2054 short yco = 20, menuwidth = 120;
2056 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2057 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2059 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, "");
2060 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2061 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2062 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2064 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2066 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2067 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2068 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2069 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2071 uiBlockSetDirection(block, UI_RIGHT);
2072 uiTextBoundsBlock(block, 60);
2076 static void do_view3d_edit_object_makelocalmenu(void *arg, int event)
2087 static uiBlock *view3d_edit_object_makelocalmenu(void *arg_unused)
2090 short yco = 20, menuwidth = 120;
2092 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2093 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2095 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2097 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2099 uiBlockSetDirection(block, UI_RIGHT);
2100 uiTextBoundsBlock(block, 60);
2104 static void do_view3d_edit_object_makelinksmenu(void *arg, int event)
2111 make_links((short)event);
2114 allqueue(REDRAWVIEW3D, 0);
2117 static uiBlock *view3d_edit_object_makelinksmenu(void *arg_unused)
2122 short yco = 20, menuwidth = 120;
2124 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2125 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2127 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2129 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2131 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2135 if(ob->type==OB_MESH) {
2136 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2137 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2138 } else if(ob->type==OB_CURVE) {
2139 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2140 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2141 } else if(ob->type==OB_FONT) {
2142 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2143 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2144 } else if(ob->type==OB_SURF) {
2145 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2146 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2147 } else if(ob->type==OB_MBALL) {
2148 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2149 } else if(ob->type==OB_CAMERA) {
2150 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2151 } else if(ob->type==OB_LAMP) {
2152 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2153 } else if(ob->type==OB_LATTICE) {
2154 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2155 } else if(ob->type==OB_ARMATURE) {
2156 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2160 uiBlockSetDirection(block, UI_RIGHT);
2161 uiTextBoundsBlock(block, 60);
2165 static void do_view3d_edit_object_singleusermenu(void *arg, int event)
2168 case 1: /* Object */
2169 single_object_users(1);
2171 case 2: /* Object & ObData */
2172 single_object_users(1);
2173 single_obdata_users(1);
2175 case 3: /* Object & ObData & Materials+Tex */
2176 single_object_users(1);
2177 single_obdata_users(1);
2178 single_mat_users(1); /* also tex */
2180 case 4: /* Materials+Tex */
2181 single_mat_users(1);
2184 single_ipo_users(1);
2188 clear_id_newpoins();
2191 allqueue(REDRAWALL, 0);
2194 static uiBlock *view3d_edit_object_singleusermenu(void *arg_unused)
2198 short yco = 20, menuwidth = 120;
2200 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2201 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2203 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2204 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2205 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2206 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2207 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2209 uiBlockSetDirection(block, UI_RIGHT);
2210 uiTextBoundsBlock(block, 60);
2214 static void do_view3d_edit_object_copyattrmenu(void *arg, int event)
2240 copy_attr((short)event);
2243 allqueue(REDRAWVIEW3D, 0);
2246 static uiBlock *view3d_edit_object_copyattrmenu(void *arg_unused)
2251 short yco = 20, menuwidth = 120;
2253 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2254 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2258 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2259 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2260 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2261 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2262 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2263 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2265 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2267 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2268 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2269 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2270 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2272 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2274 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2276 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2277 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2281 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2282 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2283 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2286 if(ob->type == OB_FONT) {
2287 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2288 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2289 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2291 if(ob->type == OB_CURVE) {
2292 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2293 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2296 if(ob->type==OB_MESH) {
2297 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2298 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2300 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2303 uiBlockSetDirection(block, UI_RIGHT);
2304 uiTextBoundsBlock(block, 60);
2309 static void do_view3d_edit_object_parentmenu(void *arg, int event)
2312 case 0: /* clear parent */
2315 case 1: /* make parent */
2319 allqueue(REDRAWVIEW3D, 0);
2322 static uiBlock *view3d_edit_object_parentmenu(void *arg_unused)
2325 short yco = 20, menuwidth = 120;
2327 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2328 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2330 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2331 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2333 uiBlockSetDirection(block, UI_RIGHT);
2334 uiTextBoundsBlock(block, 60);
2338 static void do_view3d_edit_object_groupmenu(void *arg, int event)
2344 group_operation(event);
2347 allqueue(REDRAWVIEW3D, 0);
2350 static uiBlock *view3d_edit_object_groupmenu(void *arg_unused)
2353 short yco = 20, menuwidth = 120;
2355 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2356 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2358 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, "");
2359 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, "");
2360 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, "");
2362 uiBlockSetDirection(block, UI_RIGHT);
2363 uiTextBoundsBlock(block, 60);
2367 static void do_view3d_edit_object_trackmenu(void *arg, int event)
2370 case 0: /* clear track */
2373 case 1: /* make track */
2377 allqueue(REDRAWVIEW3D, 0);
2380 static uiBlock *view3d_edit_object_trackmenu(void *arg_unused)
2383 short yco = 20, menuwidth = 120;
2385 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2386 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2389 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2391 uiBlockSetDirection(block, UI_RIGHT);
2392 uiTextBoundsBlock(block, 60);
2396 static void do_view3d_edit_object_constraintsmenu(void *arg, int event)
2399 case 1: /* add constraint */
2402 case 2: /* clear constraint */
2403 ob_clear_constraints();
2406 allqueue(REDRAWVIEW3D, 0);
2409 static uiBlock *view3d_edit_object_constraintsmenu(void *arg_unused)
2412 short yco = 20, menuwidth = 120;
2414 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2415 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2417 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2418 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2420 uiBlockSetDirection(block, UI_RIGHT);
2421 uiTextBoundsBlock(block, 60);
2425 static void do_view3d_edit_object_showhidemenu(void *arg, int event)
2430 case 0: /* show objects */
2433 case 1: /* hide selected objects */
2436 case 2: /* hide deselected objects */
2440 allqueue(REDRAWVIEW3D, 0);
2443 static uiBlock *view3d_edit_object_showhidemenu(void *arg_unused)
2446 short yco = 20, menuwidth = 120;
2448 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2449 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2451 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2452 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2453 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2455 uiBlockSetDirection(block, UI_RIGHT);
2456 uiTextBoundsBlock(block, 60);
2460 #ifndef DISABLE_PYTHON
2461 static void do_view3d_edit_object_scriptsmenu(void *arg, int event)
2463 BPY_menu_do_python(PYMENU_OBJECT, event);
2465 allqueue(REDRAWVIEW3D, 0);
2468 static uiBlock *view3d_edit_object_scriptsmenu(void *arg_unused)
2471 short yco = 20, menuwidth = 120;
2475 block= uiNewBlock(&curarea->uiblocks, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2476 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2478 for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2479 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);
2482 uiBlockSetDirection(block, UI_RIGHT);
2483 uiTextBoundsBlock(block, 60);
2487 #endif /* DISABLE_PYTHON */
2490 extern ListBase session_list;
2493 static void do_view3d_edit_objectmenu(void *arg, int event)
2496 struct VerseSession *session=NULL;
2498 /* needed to check for valid selected objects */
2503 if (base) ob= base->object;
2509 case 0: /* transform properties*/
2510 mainqenter(NKEY, 1);
2512 case 1: /* delete */
2513 delete_context_selected();
2515 case 2: /* duplicate */
2516 duplicate_context_selected();
2518 case 3: /* duplicate linked */
2521 case 5: /* make single user */
2524 case 7: /* boolean operation */
2527 case 8: /* join objects */
2530 case 9: /* convert object type */
2533 case 10: /* move to layer */
2536 case 11: /* insert keyframe */
2539 case 15: /* Object Panel */
2540 add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2542 case 16: /* make proxy object*/
2546 case 17: /* Share Object at Verse server */
2547 if(session_list.first != session_list.last) session = session_menu();
2548 else session = session_list.first;
2549 if(session) b_verse_push_object(session, ob);
2552 case 18: /* delete keyframe */
2556 allqueue(REDRAWVIEW3D, 0);
2559 static uiBlock *view3d_edit_objectmenu(void *arg_unused)
2562 short yco= 0, menuwidth=120;
2564 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2565 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2568 if(session_list.first != NULL) {
2569 Base *base = BASACT;
2571 if (base) ob= base->object;
2573 if(ob && (ob->type == OB_MESH) && (!ob->vnode)) {
2574 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Share at Verse Server", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2575 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2581 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2582 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2583 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2585 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2586 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2588 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2590 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2591 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2593 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2595 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2596 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2597 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2599 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2601 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2602 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2603 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2604 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2605 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2607 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2609 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2610 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2611 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2612 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2614 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2616 if (OBACT && OBACT->type == OB_MESH) {
2617 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2619 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2620 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2622 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2624 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2625 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2627 #ifndef DISABLE_PYTHON
2628 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2629 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2632 if(curarea->headertype==HEADERTOP) {
2633 uiBlockSetDirection(block, UI_DOWN);
2636 uiBlockSetDirection(block, UI_TOP);
2637 uiBlockFlipOrder(block);
2640 uiTextBoundsBlock(block, 50);
2645 static void do_view3d_edit_propfalloffmenu(void *arg, int event)
2648 G.scene->prop_mode= event;
2650 allqueue(REDRAWVIEW3D, 1);
2653 static uiBlock *view3d_edit_propfalloffmenu(void *arg_unused)
2656 short yco = 20, menuwidth = 120;
2658 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2659 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2661 if (G.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, "");
2662 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2663 if (G.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, "");
2664 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2665 if (G.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, "");
2666 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2667 if (G.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, "");
2668 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2669 if (G.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, "");
2670 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2671 if (G.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, "");
2672 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2673 if (G.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, "");
2674 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2676 uiBlockSetDirection(block, UI_RIGHT);
2677 uiTextBoundsBlock(block, 60);
2682 void do_view3d_edit_mesh_verticesmenu(void *arg, int event)
2688 case 0: /* make vertex parent */
2691 case 1: /* remove doubles */
2692 count= removedoublesflag(1, 0, G.scene->toolsettings->doublimit);
2693 notice("Removed: %d", count);
2694 if (count) { /* only undo and redraw if an action is taken */
2695 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2696 BIF_undo_push("Rem Doubles");
2699 case 2: /* smooth */
2702 case 3: /* separate */
2710 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2712 case 6: /* add hook */
2719 allqueue(REDRAWVIEW3D, 0);
2722 static uiBlock *view3d_edit_mesh_verticesmenu(void *arg_unused)
2725 short yco = 20, menuwidth = 120;
2727 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2728 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2730 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2731 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2732 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2733 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2735 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2737 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2738 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2740 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2742 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2743 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2745 uiBlockSetDirection(block, UI_RIGHT);
2746 uiTextBoundsBlock(block, 60);
2750 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2752 void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
2759 case 0: /* subdivide smooth */
2760 esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2761 BIF_undo_push("Subdivide Smooth");
2763 case 1: /*subdivide fractal */
2765 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2766 fac= -( (float)randfac )/100;
2767 esubdivideflag(1, fac, G.scene->toolsettings->editbutflag,1,0);
2768 BIF_undo_push("Subdivide Fractal");
2770 case 2: /* subdivide */
2771 esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag,1,0);
2772 BIF_undo_push("Subdivide");
2774 case 3: /* knife subdivide */
2775 KnifeSubdivide(KNIFE_PROMPT);
2777 case 4: /* Loop subdivide */
2780 case 5: /* Make Edge/Face */
2786 case 7: /* Mark Seam */
2787 editmesh_mark_seam(0);
2789 case 8: /* Clear Seam */
2790 editmesh_mark_seam(1);
2792 case 9: /* Crease SubSurf */
2793 if(!multires_level1_test()) {
2794 initTransform(TFM_CREASE, CTX_EDGE);
2798 case 10: /* Rotate Edge */
2799 edge_rotate_selected(2);
2801 case 11: /* Rotate Edge */
2802 edge_rotate_selected(1);
2804 case 12: /* Edgeslide */
2807 case 13: /* Edge Loop Delete */
2808 if(EdgeLoopDelete()) {
2810 BIF_undo_push("Erase Edge Loop");
2811 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2814 case 14: /*Collapse Edges*/
2816 BIF_undo_push("Collapse");
2819 editmesh_mark_sharp(1);
2820 BIF_undo_push("Mark Sharp");
2821 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2824 editmesh_mark_sharp(0);
2825 BIF_undo_push("Clear Sharp");
2826 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2828 case 17: /* Adjust Bevel Weight */
2829 if(!multires_level1_test()) {
2830 initTransform(TFM_BWEIGHT, CTX_EDGE);
2835 allqueue(REDRAWVIEW3D, 0);
2838 static uiBlock *view3d_edit_mesh_edgesmenu(void *arg_unused)
2841 short yco = 20, menuwidth = 120;
2843 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2844 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2846 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2848 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2850 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2851 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2852 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2854 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2856 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2857 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2858 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2860 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2862 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2863 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2865 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2867 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2868 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2870 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2871 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2873 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2874 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2876 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2878 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2879 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2881 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2882 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2884 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2885 uiBlockSetDirection(block, UI_RIGHT);
2886 uiTextBoundsBlock(block, 60);
2890 void do_view3d_edit_mesh_facesmenu(void *arg, int event)
2893 case 0: /* Fill Faces */
2896 case 1: /* Beauty Fill Faces */
2899 case 2: /* Quads to Tris */
2900 convert_to_triface(0);
2901 allqueue(REDRAWVIEW3D, 0);
2903 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2905 case 3: /* Tris to Quads */
2908 case 4: /* Flip triangle edges */
2911 case 5: /* Make Edge/Face */
2914 case 6: /* Set Smooth */
2915 mesh_set_smooth_faces(1);
2917 case 7: /* Set Solid */
2918 mesh_set_smooth_faces(0);
2921 allqueue(REDRAWVIEW3D, 0);
2924 static uiBlock *view3d_edit_mesh_facesmenu(void *arg_unused)
2927 short yco = 20, menuwidth = 120;
2929 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_facesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2930 uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL);
2932 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2933 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2934 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Beautify Fill|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2937 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2939 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Quads to Triangles|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2940 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2941 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2943 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Smooth|W, Alt 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2946 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Solid|W, Alt 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2948 uiBlockSetDirection(block, UI_RIGHT);
2949 uiTextBoundsBlock(block, 60);
2953 void do_view3d_edit_mesh_normalsmenu(void *arg, int event)
2959 case 1: /* recalculate inside */
2962 case 2: /* recalculate outside */
2966 allqueue(REDRAWVIEW3D, 0);
2969 static uiBlock *view3d_edit_mesh_normalsmenu(void *arg_unused)
2972 short yco = 20, menuwidth = 120;
2974 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2975 uiBlockSetButmFunc(block, do_view3d_edit_mesh_normalsmenu, NULL);
2977 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Outside|Ctrl N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2978 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Inside|Ctrl Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2980 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, &q