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 #include "BPY_extern.h"
129 #include "BPY_menus.h"
132 #include "multires.h"
133 #include "mydevice.h"
134 #include "butspace.h"
136 #include "BIF_poseobject.h"
138 /* View3d->modeselect
139 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
140 * rather than those buttons.
141 * I know the implementation's not good - it's an experiment to see if this
142 * approach would work well
144 * This can be cleaned when I make some new 'mode' icons.
147 #define V3D_OBJECTMODE_SEL ICON_OBJECT
148 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
149 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
150 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
151 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
152 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
153 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
154 #define V3D_POSEMODE_SEL ICON_POSE_HLT
155 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
157 #define TEST_EDITMESH if(G.obedit==0) return; \
158 if( (G.vd->lay & G.obedit->lay)==0 ) return;
160 void do_layer_buttons(short event)
162 static int oldlay= 1;
165 if(G.vd->localview) return;
167 if(event==-1 && (G.qual & LR_CTRLKEY)) {
168 G.vd->scenelock= !G.vd->scenelock;
169 do_view3d_buttons(B_SCENELOCK);
170 } else if (event<0) {
171 if(G.vd->lay== (1<<20)-1) {
172 if(event==-2 || G.qual & LR_SHIFTKEY) G.vd->lay= oldlay;
176 G.vd->lay= (1<<20)-1;
179 if(G.vd->scenelock) handle_view3d_lock();
180 scrarea_queue_winredraw(curarea);
182 /* new layers might need unflushed events events */
183 DAG_scene_update_flags(G.scene, G.vd->lay); /* tags all that moves and flushes */
186 if(G.qual & LR_ALTKEY) {
187 if(event<11) event+= 10;
189 if(G.qual & LR_SHIFTKEY) {
190 if(G.vd->lay & (1<<event)) G.vd->lay -= (1<<event);
191 else G.vd->lay += (1<<event);
193 do_view3d_buttons(event+B_LAY);
195 /* redraw seems double: but the queue nicely handles that */
196 scrarea_queue_headredraw(curarea);
198 if(curarea->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
199 if(G.vd->drawtype == OB_SHADED) reshadeall_displist();
200 allqueue(REDRAWNLA, 0);
203 static void do_view3d_view_camerasmenu(void *arg, int event)
209 /* Set Active Object as Active Camera */
210 /* ugly hack alert */
211 G.qual |= LR_CTRLKEY;
213 G.qual &= ~LR_CTRLKEY;
215 /* store settings of current view before allowing overwriting with camera view */
216 /* this is a copy of the code in toets.c */
217 if(G.vd->persp != V3D_CAMOB) {
218 QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
219 G.vd->lview= G.vd->view;
220 G.vd->lpersp= G.vd->persp;
223 for( base = FIRSTBASE; base; base = base->next ) {
224 if (base->object->type == OB_CAMERA) {
229 if (G.vd->camera == base->object && G.vd->persp==V3D_CAMOB)
232 if (U.smooth_viewtx) {
233 /* move 3d view to camera view */
234 float orig_ofs[3], orig_lens = G.vd->lens;
235 VECCOPY(orig_ofs, G.vd->ofs);
237 if (G.vd->camera && G.vd->persp==V3D_CAMOB)
238 view_settings_from_ob(G.vd->camera, G.vd->ofs, G.vd->viewquat, &G.vd->dist, &G.vd->lens);
240 G.vd->camera = base->object;
241 handle_view3d_lock();
242 G.vd->persp= V3D_CAMOB;
245 smooth_view_to_camera(G.vd);
248 VECCOPY(G.vd->ofs, orig_ofs);
249 G.vd->lens = orig_lens;
251 G.vd->camera= base->object;
252 handle_view3d_lock();
253 G.vd->persp= V3D_CAMOB;
262 allqueue(REDRAWVIEW3D, 0);
265 static uiBlock *view3d_view_camerasmenu(void *arg_unused)
269 short yco= 0, menuwidth=120;
273 block= uiNewBlock(&curarea->uiblocks, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
274 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
276 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, "");
278 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
280 for( base = FIRSTBASE; base; base = base->next ) {
281 if (base->object->type == OB_CAMERA) {
284 strcpy(camname, base->object->id.name+2);
285 if (base->object == G.scene->camera) strcat(camname, " (Active)");
287 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
291 uiBlockSetDirection(block, UI_RIGHT);
292 uiTextBoundsBlock(block, 50);
296 static void do_view3d_view_cameracontrolsmenu(void *arg, int event)
299 case 0: /* Orbit Left */
302 case 1: /* Orbit Right */
305 case 2: /* Orbit Up */
308 case 3: /* Orbit Down */
311 case 4: /* Pan left */
312 /* ugly hack alert */
313 G.qual |= LR_CTRLKEY;
315 G.qual &= ~LR_CTRLKEY;
317 case 5: /* Pan right */
318 /* ugly hack alert */
319 G.qual |= LR_CTRLKEY;
321 G.qual &= ~LR_CTRLKEY;
324 /* ugly hack alert */
325 G.qual |= LR_CTRLKEY;
327 G.qual &= ~LR_CTRLKEY;
329 case 7: /* Pan down */
330 /* ugly hack alert */
331 G.qual |= LR_CTRLKEY;
333 G.qual &= ~LR_CTRLKEY;
335 case 8: /* Zoom In */
336 persptoetsen(PADPLUSKEY);
338 case 9: /* Zoom Out */
339 persptoetsen(PADMINUS);
341 case 10: /* Reset Zoom */
342 persptoetsen(PADENTER);
344 case 11: /* Camera Fly mode */
348 allqueue(REDRAWVIEW3D, 0);
351 static uiBlock *view3d_view_cameracontrolsmenu(void *arg_unused)
353 /* static short tog=0; */
355 short yco= 0, menuwidth=120;
357 block= uiNewBlock(&curarea->uiblocks, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
358 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
360 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
362 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
364 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
365 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
366 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
367 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
369 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
371 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
372 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
373 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
374 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
376 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
378 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
379 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
380 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
382 uiBlockSetDirection(block, UI_RIGHT);
383 uiTextBoundsBlock(block, 50);
387 static void do_view3d_view_alignviewmenu(void *arg, int event)
389 View3D *v3d= curarea->spacedata.first;
394 case 0: /* Align View to Selected (edit/faceselect mode) */
397 if ((G.obedit) && (G.obedit->type == OB_MESH)) {
398 editmesh_align_view_to_selected(v3d, event + 1);
399 } else if (FACESEL_PAINT_TEST) {
400 Object *obact= OBACT;
401 if (obact && obact->type==OB_MESH) {
402 Mesh *me= obact->data;
405 faceselect_align_view_to_selected(v3d, me, event + 1);
406 addqueue(v3d->area->win, REDRAW, 1);
411 case 3: /* Center View to Cursor */
413 G.vd->ofs[0]= -curs[0];
414 G.vd->ofs[1]= -curs[1];
415 G.vd->ofs[2]= -curs[2];
416 scrarea_queue_winredraw(curarea);
418 case 4: /* Align Active Camera to View */
419 /* This ugly hack is a symptom of the nasty persptoetsen function,
420 * but at least it works for now.
422 G.qual |= LR_CTRLKEY|LR_ALTKEY;
424 G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
426 case 5: /* Align View to Selected (object mode) */
427 mainqenter(PADASTERKEY, 1);
429 case 6: /* Center View and Cursor to Origin */
432 curs[0]=curs[1]=curs[2]= 0.0;
435 allqueue(REDRAWVIEW3D, 0);
438 static uiBlock *view3d_view_alignviewmenu(void *arg_unused)
440 /* static short tog=0; */
442 short yco= 0, menuwidth=120;
444 block= uiNewBlock(&curarea->uiblocks, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
445 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
447 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
448 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, "");
449 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, "");
451 if (((G.obedit) && (G.obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
452 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, "");
453 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, "");
454 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, "");
456 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
459 uiBlockSetDirection(block, UI_RIGHT);
460 uiTextBoundsBlock(block, 50);
464 static void do_view3d_view_spacehandlers(void *arg, int event)
466 Text *text = G.main->text.first;
467 unsigned short menu_evt_num = 0;
471 if (++menu_evt_num == event) {
473 if (BPY_has_spacehandler(text, curarea))
474 BPY_del_spacehandler(text, curarea);
476 BPY_add_spacehandler(text, curarea, SPACE_VIEW3D);
480 text = text->id.next;
484 allqueue(REDRAWVIEW3D, 1);
487 static uiBlock *view3d_view_spacehandlers(void *arg_unused)
490 short yco= 0, menuwidth=120;
491 Text *text = G.main->text.first;
492 ScrArea *sa = curarea;
493 unsigned short handlertype;
494 int icontype, slinks_num = 0;
495 unsigned short menu_evt_num = 0;
497 static char msg_tog_on[] = "Click to enable";
498 static char msg_tog_off[]= "Click to disable";
501 block= uiNewBlock(&curarea->uiblocks, "view3d_view_spacehandlers", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
502 uiBlockSetButmFunc(block, do_view3d_view_spacehandlers, NULL);
506 handlertype = BPY_is_spacehandler(text, SPACE_VIEW3D);
511 /* mark text as script, so we can remove its link if its header
512 * becomes corrupt and it's not recognized anymore */
513 if (!(text->flags & TXT_ISSCRIPT)) text->flags |= TXT_ISSCRIPT;
515 if (handlertype == SPACEHANDLER_VIEW3D_EVENT)
516 BLI_strncpy(menustr, "Event: ", 8);
518 BLI_strncpy(menustr, "Draw: ", 8);
519 BLI_strncpy(menustr+7, text->id.name+2, 22);
521 if (BPY_has_spacehandler(text, sa)) {
522 icontype = ICON_CHECKBOX_HLT;
526 icontype = ICON_CHECKBOX_DEHLT;
530 uiDefIconTextBut(block, BUTM, 1, icontype, menustr, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, menu_evt_num, tip);
532 else if (text->flags & TXT_ISSCRIPT) {
533 /* if bit set, text was a space handler, but its header got corrupted,
534 * so we need to remove the link here */
535 BPY_del_spacehandler(text, sa);
536 text->flags &=~TXT_ISSCRIPT;
539 text = text->id.next;
542 if (slinks_num == 0) {
543 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");
546 uiBlockSetDirection(block, UI_RIGHT);
547 uiTextBoundsBlock(block, 50);
552 static void do_view3d_viewmenu(void *arg, int event)
554 View3D *v3d= curarea->spacedata.first;
559 G.vd->persp = V3D_PERSP;
573 case 5: /* Perspective */
574 G.vd->persp=V3D_PERSP;
576 case 6: /* Orthographic */
577 G.vd->persp=V3D_ORTHO;
579 case 7: /* Local View */
583 case 8: /* Global View */
585 endlocalview(curarea);
587 case 9: /* View All (Home) */
590 case 11: /* View Selected */
593 case 13: /* Play Back Animation */
596 case 15: /* Background Image... */
597 add_blockhandler(curarea, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
599 case 16: /* View Panel */
600 add_blockhandler(curarea, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
602 case 17: /* Set Clipping Border */
603 view3d_edit_clipping(v3d);
605 case 18: /* render preview */
606 toggle_blockhandler(curarea, VIEW3D_HANDLER_PREVIEW, 0);
608 case 19: /* zoom within border */
609 view3d_border_zoom();
611 case 20: /* Transform Space Panel */
612 add_blockhandler(curarea, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
614 case 21: /* Grease Pencil */
615 add_blockhandler(curarea, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
617 case 22: /* View all layers */
618 do_layer_buttons(-2);
621 allqueue(REDRAWVIEW3D, 1);
624 static uiBlock *view3d_viewmenu(void *arg_unused)
627 short yco= 0, menuwidth=120;
628 View3D *v3d= curarea->spacedata.first;
630 block= uiNewBlock(&curarea->uiblocks, "view3d_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
631 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
633 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
634 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
635 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
636 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
637 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
639 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
641 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, "");
642 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
643 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, "");
644 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
645 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, "");
646 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
647 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, "");
648 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
649 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, "");
650 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
652 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
654 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
656 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, "");
657 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
658 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, "");
659 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
661 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
663 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, "");
664 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
666 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
668 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, "");
669 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
670 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, "");
671 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
673 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
675 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
676 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
678 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
680 if(v3d->flag & V3D_CLIPPING)
681 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
683 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
684 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, "");
685 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
686 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
687 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, "");
688 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
690 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
692 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
694 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
695 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
697 if(curarea->headertype==HEADERTOP) {
698 uiBlockSetDirection(block, UI_DOWN);
701 uiBlockSetDirection(block, UI_TOP);
702 uiBlockFlipOrder(block);
705 uiTextBoundsBlock(block, 50);
710 void do_view3d_select_object_typemenu(void *arg, int event)
713 extern void selectall_type(short obtype);
717 selectall_type(OB_MESH);
720 selectall_type(OB_CURVE);
722 case 3: /* Surface */
723 selectall_type(OB_SURF);
726 selectall_type(OB_MBALL);
728 case 5: /* Armature */
729 selectall_type(OB_ARMATURE);
731 case 6: /* Lattice */
732 selectall_type(OB_LATTICE);
735 selectall_type(OB_FONT);
738 selectall_type(OB_EMPTY);
741 selectall_type(OB_CAMERA);
744 selectall_type(OB_LAMP);
747 do_layer_buttons(-2);
750 allqueue(REDRAWVIEW3D, 0);
753 static uiBlock *view3d_select_object_typemenu(void *arg_unused)
756 short yco = 20, menuwidth = 120;
758 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
759 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
761 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
762 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
763 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
764 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
766 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
768 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
769 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
770 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
771 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
773 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
775 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
776 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
778 uiBlockSetDirection(block, UI_RIGHT);
779 uiTextBoundsBlock(block, 60);
783 void do_view3d_select_object_layermenu(void *arg, int event)
785 extern void selectall_layer(unsigned int layernum);
809 selectall_layer(event);
812 allqueue(REDRAWVIEW3D, 0);
815 static uiBlock *view3d_select_object_layermenu(void *arg_unused)
818 short xco= 0, yco = 20, menuwidth = 22;
820 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
821 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
823 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
824 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
825 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
826 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
827 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
829 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
830 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
831 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
832 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
833 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
835 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
836 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
837 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
838 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
839 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
841 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
842 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
843 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
844 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
845 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
847 uiBlockSetDirection(block, UI_RIGHT);
848 /*uiTextBoundsBlock(block, 100);*/
852 void do_view3d_select_object_linkedmenu(void *arg, int event)
855 case 1: /* Object Ipo */
857 case 3: /* Current Material */
858 case 4: /* Current Texture */
863 allqueue(REDRAWVIEW3D, 0);
866 static uiBlock *view3d_select_object_linkedmenu(void *arg_unused)
869 short yco = 20, menuwidth = 120;
871 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
872 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
874 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
875 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
876 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
877 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
879 uiBlockSetDirection(block, UI_RIGHT);
880 uiTextBoundsBlock(block, 60);
884 void do_view3d_select_object_groupedmenu(void *arg, int event)
887 case 1: /* Children */
888 case 2: /* Immediate Children */
890 case 4: /* Siblings */
892 case 6: /* Objects on Shared Layers */
893 case 7: /* Objects in Same Group */
894 case 8: /* Object Hooks*/
895 case 9: /* Object PassIndex*/
896 case 10: /* Object Color*/
897 case 11: /* Game Properties*/
898 select_object_grouped((short)event);
901 allqueue(REDRAWVIEW3D, 0);
904 static uiBlock *view3d_select_object_groupedmenu(void *arg_unused)
907 short yco = 20, menuwidth = 120;
909 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
910 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
912 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
913 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
914 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
915 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
916 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, "");
917 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, "");
918 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, "");
919 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
920 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
921 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
922 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
924 uiBlockSetDirection(block, UI_RIGHT);
925 uiTextBoundsBlock(block, 60);
929 void do_view3d_select_objectmenu(void *arg, int event)
933 case 0: /* border select */
936 case 1: /* Select/Deselect All */
939 case 2: /* inverse */
946 allqueue(REDRAWVIEW3D, 0);
949 static uiBlock *view3d_select_objectmenu(void *arg_unused)
952 short yco= 0, menuwidth=120;
954 block= uiNewBlock(&curarea->uiblocks, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
955 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
957 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
959 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
961 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
963 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
965 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
966 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
968 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
970 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
971 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
973 if(curarea->headertype==HEADERTOP) {
974 uiBlockSetDirection(block, UI_DOWN);
977 uiBlockSetDirection(block, UI_TOP);
978 uiBlockFlipOrder(block);
981 uiTextBoundsBlock(block, 50);
985 void do_view3d_select_meshmenu(void *arg, int event)
987 /* extern void borderselect(void);*/
991 case 0: /* border select */
994 case 2: /* Select/Deselect all */
997 case 3: /* Inverse */
1000 case 4: /* select linked vertices */
1001 selectconnected_mesh_all();
1003 case 5: /* select random */
1004 selectrandom_mesh();
1006 case 7: /* select more */
1009 case 8: /* select less */
1012 case 9: /* select non-manifold */
1013 select_non_manifold();
1015 case 11: /* select triangles */
1016 select_faces_by_numverts(3);
1018 case 12: /* select quads */
1019 select_faces_by_numverts(4);
1021 case 13: /* select non-triangles/quads */
1022 select_faces_by_numverts(5);
1024 case 14: /* select sharp edges */
1025 select_sharp_edges();
1027 case 15: /* select linked flat faces */
1028 select_linked_flat_faces();
1031 case 16: /* path select */
1033 BIF_undo_push("Path Select");
1035 case 17: /* edge loop select */
1036 loop_multiselect(0);
1038 case 18: /* edge ring select */
1039 loop_multiselect(1);
1041 case 19: /* loop to region */
1044 case 20: /* region to loop */
1047 case 21: /* Select grouped */
1048 select_mesh_group_menu();
1051 allqueue(REDRAWVIEW3D, 0);
1055 static uiBlock *view3d_select_meshmenu(void *arg_unused)
1058 short yco= 0, menuwidth=120;
1060 block= uiNewBlock(&curarea->uiblocks, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1061 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1063 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1065 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1067 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1068 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1070 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1071 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1073 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1074 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1075 "Non-Manifold|Ctrl Alt Shift M",
1076 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1077 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1078 "Sharp Edges|Ctrl Alt Shift S",
1079 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1080 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1081 "Linked Flat Faces|Ctrl Alt Shift F",
1082 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1084 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1085 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1087 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1088 "Triangles|Ctrl Alt Shift 3",
1089 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1090 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1091 "Quads|Ctrl Alt Shift 4",
1092 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1093 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1094 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1095 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1097 "Similar to Selection...|Shift G",
1098 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1100 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1101 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1103 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1104 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1105 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1106 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1108 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1109 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1112 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1113 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1114 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1116 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1117 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1119 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1120 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1122 if(curarea->headertype==HEADERTOP) {
1123 uiBlockSetDirection(block, UI_DOWN);
1126 uiBlockSetDirection(block, UI_TOP);
1127 uiBlockFlipOrder(block);
1130 uiTextBoundsBlock(block, 50);
1134 void do_view3d_select_curvemenu(void *arg, int event)
1136 /* extern void borderselect(void);*/
1139 case 0: /* border select */
1142 case 2: /* Select/Deselect all */
1145 case 3: /* Inverse */
1148 /* select connected control points */
1150 G.qual |= LR_CTRLKEY;
1151 select_connected_nurb();
1152 G.qual &= ~LR_CTRLKEY;
1154 case 5: /* select row (nurb) */
1157 case 7: /* select/deselect first */
1158 selectend_nurb(FIRST, 1, DESELECT);
1160 case 8: /* select/deselect last */
1161 selectend_nurb(LAST, 1, DESELECT);
1163 case 9: /* select more */
1166 case 10: /* select less */
1169 case 11: /* select next */
1172 case 12: /* select previous */
1175 case 13: /* select random */
1176 select_random_nurb();
1178 case 14: /* select every nth */
1179 select_every_nth_nurb();
1182 allqueue(REDRAWVIEW3D, 0);
1186 static uiBlock *view3d_select_curvemenu(void *arg_unused)
1189 short yco= 0, menuwidth=120;
1191 block= uiNewBlock(&curarea->uiblocks, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1192 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1194 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1196 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1198 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1199 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1200 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1201 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1203 if (OBACT->type == OB_SURF) {
1204 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1206 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1209 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1211 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1212 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1213 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1214 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1217 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1218 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1219 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1221 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1222 /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1224 if(curarea->headertype==HEADERTOP) {
1225 uiBlockSetDirection(block, UI_DOWN);
1228 uiBlockSetDirection(block, UI_TOP);
1229 uiBlockFlipOrder(block);
1232 uiTextBoundsBlock(block, 50);
1236 void do_view3d_select_metaballmenu(void *arg, int event)
1240 case 0: /* border select */
1243 case 2: /* Select/Deselect all */
1244 deselectall_mball();
1246 case 3: /* Inverse */
1247 selectinverse_mball();
1249 case 4: /* Select Random */
1250 selectrandom_mball();
1253 allqueue(REDRAWVIEW3D, 0);
1257 static uiBlock *view3d_select_metaballmenu(void *arg_unused)
1260 short yco= 0, menuwidth=120;
1262 block= uiNewBlock(&curarea->uiblocks, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1263 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1265 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1267 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1269 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1273 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1275 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1277 if(curarea->headertype==HEADERTOP) {
1278 uiBlockSetDirection(block, UI_DOWN);
1281 uiBlockSetDirection(block, UI_TOP);
1282 uiBlockFlipOrder(block);
1285 uiTextBoundsBlock(block, 50);
1289 static void do_view3d_select_latticemenu(void *arg, int event)
1291 /* extern void borderselect(void);*/
1294 case 0: /* border select */
1297 case 2: /* Select/Deselect all */
1301 allqueue(REDRAWVIEW3D, 0);
1304 static uiBlock *view3d_select_latticemenu(void *arg_unused)
1307 short yco= 0, menuwidth=120;
1309 block= uiNewBlock(&curarea->uiblocks, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1310 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1312 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1314 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1316 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1318 if(curarea->headertype==HEADERTOP) {
1319 uiBlockSetDirection(block, UI_DOWN);
1322 uiBlockSetDirection(block, UI_TOP);
1323 uiBlockFlipOrder(block);
1326 uiTextBoundsBlock(block, 50);
1330 static void do_view3d_select_armaturemenu(void *arg, int event)
1332 /* extern void borderselect(void);*/
1335 case 0: /* border select */
1338 case 2: /* Select/Deselect all */
1339 deselectall_armature(1, 1);
1341 case 3: /* Swap Select All */
1342 deselectall_armature(3, 1);
1344 case 4: /* Select parent */
1345 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1347 case 5: /* Select child */
1348 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1350 case 6: /* Extend Select parent */
1351 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1353 case 7: /* Extend Select child */
1354 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1357 allqueue(REDRAWVIEW3D, 0);
1360 static uiBlock *view3d_select_armaturemenu(void *arg_unused)
1363 short yco= 0, menuwidth=120;
1365 block= uiNewBlock(&curarea->uiblocks, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1366 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1368 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1370 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1372 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1373 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1375 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1377 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1378 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1380 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1382 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1383 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1385 if(curarea->headertype==HEADERTOP) {
1386 uiBlockSetDirection(block, UI_DOWN);
1389 uiBlockSetDirection(block, UI_TOP);
1390 uiBlockFlipOrder(block);
1393 uiTextBoundsBlock(block, 50);
1397 static void do_view3d_select_pose_armaturemenu(void *arg, int event)
1399 /* extern void borderselect(void);*/
1402 case 0: /* border select */
1405 case 2: /* Select/Deselect all */
1406 deselectall_posearmature(OBACT, 1, 1);
1408 case 3: /* Select Target(s) of Constraint(s) */
1409 pose_select_constraint_target();
1411 case 5: /* Swap Select All */
1412 deselectall_posearmature(OBACT, 3, 1);
1414 case 6: /* Select parent */
1415 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1417 case 7: /* Select child */
1418 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1420 case 8: /* Extend Select parent */
1421 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1423 case 9: /* Extend Select child */
1424 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1427 allqueue(REDRAWVIEW3D, 0);
1430 static uiBlock *view3d_select_pose_armaturemenu(void *arg_unused)
1433 short yco= 0, menuwidth=120;
1435 block= uiNewBlock(&curarea->uiblocks, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1436 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1438 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1440 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1442 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1443 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1444 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
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 Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1449 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1451 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1453 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1454 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1456 if(curarea->headertype==HEADERTOP) {
1457 uiBlockSetDirection(block, UI_DOWN);
1460 uiBlockSetDirection(block, UI_TOP);
1461 uiBlockFlipOrder(block);
1464 uiTextBoundsBlock(block, 50);
1468 void do_view3d_select_faceselmenu(void *arg, int event)
1470 /* events >= 6 are registered bpython scripts */
1471 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1474 case 0: /* border select */
1477 case 2: /* Select/Deselect all */
1478 deselectall_tface();
1480 case 3: /* Select Inverse */
1483 case 4: /* Select Linked */
1484 select_linked_tfaces(2);
1487 allqueue(REDRAWVIEW3D, 0);
1490 static uiBlock *view3d_select_faceselmenu(void *arg_unused)
1493 short yco= 0, menuwidth=120;
1497 block= uiNewBlock(&curarea->uiblocks, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1498 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1500 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1502 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1504 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1505 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1507 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1508 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1510 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1512 /* note that we account for the 6 previous entries with i+6: */
1513 for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1514 uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1515 menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1516 pym->tooltip?pym->tooltip:pym->filename);
1519 if(curarea->headertype==HEADERTOP) {
1520 uiBlockSetDirection(block, UI_DOWN);
1523 uiBlockSetDirection(block, UI_TOP);
1524 uiBlockFlipOrder(block);
1527 uiTextBoundsBlock(block, 50);
1531 void do_view3d_edit_snapmenu(void *arg, int event)
1534 case 1: /*Selection to grid*/
1536 BIF_undo_push("Snap selection to grid");
1538 case 2: /*Selection to cursor*/
1540 BIF_undo_push("Snap selection to cursor");
1542 case 3: /*Selection to center of selection*/
1544 BIF_undo_push("Snap selection to center");
1546 case 4: /*Cursor to selection*/
1549 case 5: /*Cursor to grid*/
1550 snap_curs_to_grid();
1552 case 6: /*Cursor to Active*/
1553 snap_curs_to_active();
1554 BIF_undo_push("Snap selection to center");
1557 allqueue(REDRAWVIEW3D, 0);
1560 static uiBlock *view3d_edit_snapmenu(void *arg_unused)
1563 short yco = 20, menuwidth = 120;
1565 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1566 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1568 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1569 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1570 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1571 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1572 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1573 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1574 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1578 uiBlockSetDirection(block, UI_RIGHT);
1579 uiTextBoundsBlock(block, 60);
1583 void do_view3d_transform_moveaxismenu(void *arg, int event)
1591 case 0: /* X Global */
1592 initTransform(TFM_TRANSLATION, CTX_NONE);
1593 BIF_setSingleAxisConstraint(mat[0], " X");
1596 case 1: /* Y Global */
1597 initTransform(TFM_TRANSLATION, CTX_NONE);
1598 BIF_setSingleAxisConstraint(mat[1], " Y");
1601 case 2: /* Z Global */
1602 initTransform(TFM_TRANSLATION, CTX_NONE);
1603 BIF_setSingleAxisConstraint(mat[2], " Z");
1606 case 3: /* X Local */
1607 initTransform(TFM_TRANSLATION, CTX_NONE);
1608 BIF_setLocalAxisConstraint('X', " X");
1611 case 4: /* Y Local */
1612 initTransform(TFM_TRANSLATION, CTX_NONE);
1613 BIF_setLocalAxisConstraint('Y', " Y");
1616 case 5: /* Z Local */
1617 initTransform(TFM_TRANSLATION, CTX_NONE);
1618 BIF_setLocalAxisConstraint('Z', " Z");
1622 allqueue(REDRAWVIEW3D, 0);
1625 static uiBlock *view3d_transform_moveaxismenu(void *arg_unused)
1628 short yco = 20, menuwidth = 120;
1630 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1631 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1633 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1634 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1635 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1637 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1639 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1640 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1641 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1644 uiBlockSetDirection(block, UI_RIGHT);
1645 uiTextBoundsBlock(block, 60);
1649 void do_view3d_transform_rotateaxismenu(void *arg, int event)
1657 case 0: /* X Global */
1658 initTransform(TFM_ROTATION, CTX_NONE);
1659 BIF_setSingleAxisConstraint(mat[0], " X");
1662 case 1: /* Y Global */
1663 initTransform(TFM_ROTATION, CTX_NONE);
1664 BIF_setSingleAxisConstraint(mat[1], " Y");
1667 case 2: /* Z Global */
1668 initTransform(TFM_ROTATION, CTX_NONE);
1669 BIF_setSingleAxisConstraint(mat[2], " Z");
1672 case 3: /* X Local */
1673 initTransform(TFM_ROTATION, CTX_NONE);
1674 BIF_setLocalAxisConstraint('X', " X");
1677 case 4: /* Y Local */
1678 initTransform(TFM_ROTATION, CTX_NONE);
1679 BIF_setLocalAxisConstraint('Y', " Y");
1682 case 5: /* Z Local */
1683 initTransform(TFM_ROTATION, CTX_NONE);
1684 BIF_setLocalAxisConstraint('Z', " Z");
1688 allqueue(REDRAWVIEW3D, 0);
1691 static uiBlock *view3d_transform_rotateaxismenu(void *arg_unused)
1694 short yco = 20, menuwidth = 120;
1696 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1697 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1699 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1700 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1701 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1703 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1705 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1706 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1707 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1710 uiBlockSetDirection(block, UI_RIGHT);
1711 uiTextBoundsBlock(block, 60);
1715 void do_view3d_transform_scaleaxismenu(void *arg, int event)
1723 case 0: /* X Global */
1724 initTransform(TFM_RESIZE, CTX_NONE);
1725 BIF_setSingleAxisConstraint(mat[0], " X");
1728 case 1: /* Y Global */
1729 initTransform(TFM_RESIZE, CTX_NONE);
1730 BIF_setSingleAxisConstraint(mat[1], " Y");
1733 case 2: /* Z Global */
1734 initTransform(TFM_RESIZE, CTX_NONE);
1735 BIF_setSingleAxisConstraint(mat[2], " Z");
1738 case 3: /* X Local */
1739 initTransform(TFM_RESIZE, CTX_NONE);
1740 BIF_setLocalAxisConstraint('X', " X");
1743 case 4: /* Y Local */
1744 initTransform(TFM_RESIZE, CTX_NONE);
1745 BIF_setLocalAxisConstraint('X', " X");
1748 case 5: /* Z Local */
1749 initTransform(TFM_RESIZE, CTX_NONE);
1750 BIF_setLocalAxisConstraint('X', " X");
1754 allqueue(REDRAWVIEW3D, 0);
1757 static uiBlock *view3d_transform_scaleaxismenu(void *arg_unused)
1760 short yco = 20, menuwidth = 120;
1762 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1763 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1765 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1766 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1767 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1769 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1771 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1772 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1773 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1776 uiBlockSetDirection(block, UI_RIGHT);
1777 uiTextBoundsBlock(block, 60);
1781 static void do_view3d_transformmenu(void *arg, int event)
1785 initTransform(TFM_TRANSLATION, CTX_NONE);
1789 initTransform(TFM_ROTATION, CTX_NONE);
1793 initTransform(TFM_RESIZE, CTX_NONE);
1800 initTransform(TFM_TOSPHERE, CTX_NONE);
1804 initTransform(TFM_SHEAR, CTX_NONE);
1808 initTransform(TFM_WARP, CTX_NONE);
1812 initTransform(TFM_PUSHPULL, CTX_NONE);
1817 if (G.obedit->type == OB_MESH)
1818 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1820 } else error("Only meshes can be shrinked/fattened");
1832 initTransform(TFM_TILT, CTX_NONE);
1836 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1840 G.scene->snap_flag &= ~SCE_SNAP;
1843 G.scene->snap_flag |= SCE_SNAP;
1846 G.scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1849 G.scene->snap_target = SCE_SNAP_TARGET_CENTER;
1852 G.scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1855 G.scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1861 allqueue(REDRAWVIEW3D, 0);
1864 static uiBlock *view3d_transformmenu(void *arg_unused)
1867 short yco = 20, menuwidth = 120;
1869 block= uiNewBlock(&curarea->uiblocks, "view3d_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1870 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1872 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1873 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1875 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1876 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1878 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1879 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1881 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1884 if (G.obedit->type == OB_MESH)
1885 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1886 else if (G.obedit->type == OB_CURVE) {
1887 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1888 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1891 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1892 if (G.obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1893 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1894 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1895 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1898 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1900 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, "");
1903 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1905 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1907 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1908 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1909 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, "");
1912 if (BIF_snappingSupported())
1914 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1916 if (G.scene->snap_flag & SCE_SNAP)
1918 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1919 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1923 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1924 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1927 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1929 switch(G.scene->snap_target)
1931 case SCE_SNAP_TARGET_CLOSEST:
1932 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1933 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1934 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1935 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1937 case SCE_SNAP_TARGET_CENTER:
1938 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1939 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1940 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1941 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1943 case SCE_SNAP_TARGET_MEDIAN:
1944 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "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_HLT, "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_ACTIVE:
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_DEHLT, "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_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1958 uiBlockSetDirection(block, UI_RIGHT);
1959 uiTextBoundsBlock(block, 60);
1963 void do_view3d_object_mirrormenu(void *arg, int event)
1967 initTransform(TFM_MIRROR, CTX_NO_PET);
1971 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1972 BIF_setLocalAxisConstraint('X', " on X axis");
1976 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1977 BIF_setLocalAxisConstraint('Y', " on Y axis");
1981 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1982 BIF_setLocalAxisConstraint('Z', " on Z axis");
1986 allqueue(REDRAWVIEW3D, 0);
1989 static uiBlock *view3d_object_mirrormenu(void *arg_unused)
1992 short yco = 20, menuwidth = 120;
1994 block= uiNewBlock(&curarea->uiblocks, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1995 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
1997 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1998 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1999 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2000 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2001 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2003 uiBlockSetDirection(block, UI_RIGHT);
2004 uiTextBoundsBlock(block, 60);
2008 static void do_view3d_edit_object_transformmenu(void *arg, int event)
2011 case 0: /* clear origin */
2014 case 1: /* clear scale */
2017 case 2: /* clear rotation */
2020 case 3: /* clear location */
2024 if(OBACT) object_apply_deform(OBACT);
2026 case 5: /* make duplis real */
2027 make_duplilist_real();
2029 case 6: /* apply scale/rotation or deformation */
2030 apply_objects_locrot();
2032 case 7: /* apply visual matrix to objects loc/size/rot */
2033 apply_objects_visual_tx();
2036 allqueue(REDRAWVIEW3D, 0);
2039 static uiBlock *view3d_edit_object_transformmenu(void *arg_unused)
2042 short yco = 20, menuwidth = 120;
2044 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2045 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2047 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, "");
2048 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2049 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2050 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2052 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2054 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2055 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2056 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2057 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2059 uiBlockSetDirection(block, UI_RIGHT);
2060 uiTextBoundsBlock(block, 60);
2064 static void do_view3d_edit_object_makelocalmenu(void *arg, int event)
2075 static uiBlock *view3d_edit_object_makelocalmenu(void *arg_unused)
2078 short yco = 20, menuwidth = 120;
2080 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2081 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2083 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2084 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2085 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2087 uiBlockSetDirection(block, UI_RIGHT);
2088 uiTextBoundsBlock(block, 60);
2092 static void do_view3d_edit_object_makelinksmenu(void *arg, int event)
2099 make_links((short)event);
2102 allqueue(REDRAWVIEW3D, 0);
2105 static uiBlock *view3d_edit_object_makelinksmenu(void *arg_unused)
2110 short yco = 20, menuwidth = 120;
2112 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2113 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2115 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2117 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2119 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2123 if(ob->type==OB_MESH) {
2124 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2125 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2126 } else if(ob->type==OB_CURVE) {
2127 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2128 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2129 } else if(ob->type==OB_FONT) {
2130 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2131 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2132 } else if(ob->type==OB_SURF) {
2133 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2134 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2135 } else if(ob->type==OB_MBALL) {
2136 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2137 } else if(ob->type==OB_CAMERA) {
2138 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2139 } else if(ob->type==OB_LAMP) {
2140 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2141 } else if(ob->type==OB_LATTICE) {
2142 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2143 } else if(ob->type==OB_ARMATURE) {
2144 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2148 uiBlockSetDirection(block, UI_RIGHT);
2149 uiTextBoundsBlock(block, 60);
2153 static void do_view3d_edit_object_singleusermenu(void *arg, int event)
2156 case 1: /* Object */
2157 single_object_users(1);
2159 case 2: /* Object & ObData */
2160 single_object_users(1);
2161 single_obdata_users(1);
2163 case 3: /* Object & ObData & Materials+Tex */
2164 single_object_users(1);
2165 single_obdata_users(1);
2166 single_mat_users(1); /* also tex */
2168 case 4: /* Materials+Tex */
2169 single_mat_users(1);
2172 single_ipo_users(1);
2176 clear_id_newpoins();
2179 allqueue(REDRAWALL, 0);
2182 static uiBlock *view3d_edit_object_singleusermenu(void *arg_unused)
2186 short yco = 20, menuwidth = 120;
2188 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2189 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2191 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2192 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2193 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2194 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2195 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2197 uiBlockSetDirection(block, UI_RIGHT);
2198 uiTextBoundsBlock(block, 60);
2202 static void do_view3d_edit_object_copyattrmenu(void *arg, int event)
2228 copy_attr((short)event);
2231 allqueue(REDRAWVIEW3D, 0);
2234 static uiBlock *view3d_edit_object_copyattrmenu(void *arg_unused)
2239 short yco = 20, menuwidth = 120;
2241 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2242 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2246 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2247 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2248 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2249 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2250 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2251 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2253 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2255 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2256 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2257 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2258 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2259 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2260 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2262 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2264 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2265 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2269 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2270 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2274 if(ob->type == OB_FONT) {
2275 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2276 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2277 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2279 if(ob->type == OB_CURVE) {
2280 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2281 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2284 if(ob->type==OB_MESH) {
2285 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2286 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2288 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2291 uiBlockSetDirection(block, UI_RIGHT);
2292 uiTextBoundsBlock(block, 60);
2297 static void do_view3d_edit_object_parentmenu(void *arg, int event)
2300 case 0: /* clear parent */
2303 case 1: /* make parent */
2307 allqueue(REDRAWVIEW3D, 0);
2310 static uiBlock *view3d_edit_object_parentmenu(void *arg_unused)
2313 short yco = 20, menuwidth = 120;
2315 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2316 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2318 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2319 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2321 uiBlockSetDirection(block, UI_RIGHT);
2322 uiTextBoundsBlock(block, 60);
2326 static void do_view3d_edit_object_groupmenu(void *arg, int event)
2332 group_operation(event);
2335 allqueue(REDRAWVIEW3D, 0);
2338 static uiBlock *view3d_edit_object_groupmenu(void *arg_unused)
2341 short yco = 20, menuwidth = 120;
2343 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2344 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2346 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, "");
2347 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, "");
2348 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, "");
2350 uiBlockSetDirection(block, UI_RIGHT);
2351 uiTextBoundsBlock(block, 60);
2355 static void do_view3d_edit_object_trackmenu(void *arg, int event)
2358 case 0: /* clear track */
2361 case 1: /* make track */
2365 allqueue(REDRAWVIEW3D, 0);
2368 static uiBlock *view3d_edit_object_trackmenu(void *arg_unused)
2371 short yco = 20, menuwidth = 120;
2373 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2374 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2376 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2377 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2379 uiBlockSetDirection(block, UI_RIGHT);
2380 uiTextBoundsBlock(block, 60);
2384 static void do_view3d_edit_object_constraintsmenu(void *arg, int event)
2387 case 1: /* add constraint */
2390 case 2: /* clear constraint */
2391 ob_clear_constraints();
2394 allqueue(REDRAWVIEW3D, 0);
2397 static uiBlock *view3d_edit_object_constraintsmenu(void *arg_unused)
2400 short yco = 20, menuwidth = 120;
2402 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2403 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2405 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2406 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2408 uiBlockSetDirection(block, UI_RIGHT);
2409 uiTextBoundsBlock(block, 60);
2413 static void do_view3d_edit_object_showhidemenu(void *arg, int event)
2418 case 0: /* show objects */
2421 case 1: /* hide selected objects */
2424 case 2: /* hide deselected objects */
2428 allqueue(REDRAWVIEW3D, 0);
2431 static uiBlock *view3d_edit_object_showhidemenu(void *arg_unused)
2434 short yco = 20, menuwidth = 120;
2436 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2437 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2439 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2440 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2441 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2443 uiBlockSetDirection(block, UI_RIGHT);
2444 uiTextBoundsBlock(block, 60);
2448 static void do_view3d_edit_object_scriptsmenu(void *arg, int event)
2450 BPY_menu_do_python(PYMENU_OBJECT, event);
2452 allqueue(REDRAWVIEW3D, 0);
2455 static uiBlock *view3d_edit_object_scriptsmenu(void *arg_unused)
2458 short yco = 20, menuwidth = 120;
2462 block= uiNewBlock(&curarea->uiblocks, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2463 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2465 for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2466 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);
2469 uiBlockSetDirection(block, UI_RIGHT);
2470 uiTextBoundsBlock(block, 60);
2476 extern ListBase session_list;
2479 static void do_view3d_edit_objectmenu(void *arg, int event)
2482 struct VerseSession *session=NULL;
2484 /* needed to check for valid selected objects */
2489 if (base) ob= base->object;
2495 case 0: /* transform properties*/
2496 mainqenter(NKEY, 1);
2498 case 1: /* delete */
2499 delete_context_selected();
2501 case 2: /* duplicate */
2502 duplicate_context_selected();
2504 case 3: /* duplicate linked */
2507 case 5: /* make single user */
2510 case 7: /* boolean operation */
2513 case 8: /* join objects */
2516 case 9: /* convert object type */
2519 case 10: /* move to layer */
2522 case 11: /* insert keyframe */
2525 case 15: /* Object Panel */
2526 add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2528 case 16: /* make proxy object*/
2532 case 17: /* Share Object at Verse server */
2533 if(session_list.first != session_list.last) session = session_menu();
2534 else session = session_list.first;
2535 if(session) b_verse_push_object(session, ob);
2538 case 18: /* delete keyframe */
2542 allqueue(REDRAWVIEW3D, 0);
2545 static uiBlock *view3d_edit_objectmenu(void *arg_unused)
2548 short yco= 0, menuwidth=120;
2550 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2551 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2554 if(session_list.first != NULL) {
2555 Base *base = BASACT;
2557 if (base) ob= base->object;
2559 if(ob && (ob->type == OB_MESH) && (!ob->vnode)) {
2560 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Share at Verse Server", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2561 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2567 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2568 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2569 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2571 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2572 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2574 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2576 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2577 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2579 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2581 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2582 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2583 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2585 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2587 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2588 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2589 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2590 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2591 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2593 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2595 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2596 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2597 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2598 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2600 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2602 if (OBACT && OBACT->type == OB_MESH) {
2603 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2605 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2606 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2608 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2610 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2611 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2613 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2614 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2617 if(curarea->headertype==HEADERTOP) {
2618 uiBlockSetDirection(block, UI_DOWN);
2621 uiBlockSetDirection(block, UI_TOP);
2622 uiBlockFlipOrder(block);
2625 uiTextBoundsBlock(block, 50);
2630 static void do_view3d_edit_propfalloffmenu(void *arg, int event)
2633 G.scene->prop_mode= event;
2635 allqueue(REDRAWVIEW3D, 1);
2638 static uiBlock *view3d_edit_propfalloffmenu(void *arg_unused)
2641 short yco = 20, menuwidth = 120;
2643 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2644 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2646 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, "");
2647 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2648 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, "");
2649 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2650 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, "");
2651 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2652 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, "");
2653 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2654 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, "");
2655 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2656 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, "");
2657 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2658 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, "");
2659 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2661 uiBlockSetDirection(block, UI_RIGHT);
2662 uiTextBoundsBlock(block, 60);
2667 void do_view3d_edit_mesh_verticesmenu(void *arg, int event)
2673 case 0: /* make vertex parent */
2676 case 1: /* remove doubles */
2677 count= removedoublesflag(1, 0, G.scene->toolsettings->doublimit);
2678 notice("Removed: %d", count);
2679 if (count) { /* only undo and redraw if an action is taken */
2680 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2681 BIF_undo_push("Rem Doubles");
2684 case 2: /* smooth */
2687 case 3: /* separate */
2695 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2697 case 6: /* add hook */
2704 allqueue(REDRAWVIEW3D, 0);
2707 static uiBlock *view3d_edit_mesh_verticesmenu(void *arg_unused)
2710 short yco = 20, menuwidth = 120;
2712 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2713 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2715 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2716 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2717 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2718 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2720 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2722 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2723 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2725 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2727 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2728 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2730 uiBlockSetDirection(block, UI_RIGHT);
2731 uiTextBoundsBlock(block, 60);
2735 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2737 void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
2744 case 0: /* subdivide smooth */
2745 esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2746 BIF_undo_push("Subdivide Smooth");
2748 case 1: /*subdivide fractal */
2750 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2751 fac= -( (float)randfac )/100;
2752 esubdivideflag(1, fac, G.scene->toolsettings->editbutflag,1,0);
2753 BIF_undo_push("Subdivide Fractal");
2755 case 2: /* subdivide */
2756 esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag,1,0);
2757 BIF_undo_push("Subdivide");
2759 case 3: /* knife subdivide */
2760 KnifeSubdivide(KNIFE_PROMPT);
2762 case 4: /* Loop subdivide */
2765 case 5: /* Make Edge/Face */
2771 case 7: /* Mark Seam */
2772 editmesh_mark_seam(0);
2774 case 8: /* Clear Seam */
2775 editmesh_mark_seam(1);
2777 case 9: /* Crease SubSurf */
2778 if(!multires_level1_test()) {
2779 initTransform(TFM_CREASE, CTX_EDGE);
2783 case 10: /* Rotate Edge */
2784 edge_rotate_selected(2);
2786 case 11: /* Rotate Edge */
2787 edge_rotate_selected(1);
2789 case 12: /* Edgeslide */
2792 case 13: /* Edge Loop Delete */
2793 if(EdgeLoopDelete()) {
2795 BIF_undo_push("Erase Edge Loop");
2796 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2799 case 14: /*Collapse Edges*/
2801 BIF_undo_push("Collapse");
2804 editmesh_mark_sharp(1);
2805 BIF_undo_push("Mark Sharp");
2806 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2809 editmesh_mark_sharp(0);
2810 BIF_undo_push("Clear Sharp");
2811 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2813 case 17: /* Adjust Bevel Weight */
2814 if(!multires_level1_test()) {
2815 initTransform(TFM_BWEIGHT, CTX_EDGE);
2820 allqueue(REDRAWVIEW3D, 0);
2823 static uiBlock *view3d_edit_mesh_edgesmenu(void *arg_unused)
2826 short yco = 20, menuwidth = 120;
2828 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2829 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2831 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2833 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2835 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2836 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2837 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2839 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2841 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2842 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2843 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2845 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2847 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2848 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2850 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2852 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2853 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2855 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2856 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2858 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2859 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2861 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2863 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2864 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2866 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2867 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2869 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2870 uiBlockSetDirection(block, UI_RIGHT);
2871 uiTextBoundsBlock(block, 60);
2875 void do_view3d_edit_mesh_facesmenu(void *arg, int event)
2878 case 0: /* Fill Faces */
2881 case 1: /* Beauty Fill Faces */
2884 case 2: /* Quads to Tris */
2885 convert_to_triface(0);
2886 allqueue(REDRAWVIEW3D, 0);
2888 DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2890 case 3: /* Tris to Quads */
2893 case 4: /* Flip triangle edges */
2896 case 5: /* Make Edge/Face */
2899 case 6: /* Set Smooth */
2900 mesh_set_smooth_faces(1);
2902 case 7: /* Set Solid */
2903 mesh_set_smooth_faces(0);
2906 allqueue(REDRAWVIEW3D, 0);
2909 static uiBlock *view3d_edit_mesh_facesmenu(void *arg_unused)
2912 short yco = 20, menuwidth = 120;
2914 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_facesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2915 uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL);
2917 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2918 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2919 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Beautify Fill|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2922 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2924 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Quads to Triangles|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2925 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2926 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2928 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2930 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Smooth|W, Alt 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2931 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Solid|W, Alt 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2933 uiBlockSetDirection(block, UI_RIGHT);
2934 uiTextBoundsBlock(block, 60);
2938 void do_view3d_edit_mesh_normalsmenu(void *arg, int event)
2944 case 1: /* recalculate inside */
2947 case 2: /* recalculate outside */
2951 allqueue(REDRAWVIEW3D, 0);
2954 static uiBlock *view3d_edit_mesh_normalsmenu(void *arg_unused)
2957 short yco = 20, menuwidth = 120;
2959 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2960 uiBlockSetButmFunc(block, do_view3d_edit_mesh_normalsmenu, NULL);
2962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Outside|Ctrl N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2963 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Inside|Ctrl Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2965 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2967 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip|W, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2969 uiBlockSetDirection(block, UI_RIGHT);
2970 uiTextBoundsBlock(block, 60);