4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * The Original Code is Copyright (C) 2004-2008 Blender Foundation.
21 * All rights reserved.
24 * Contributor(s): Blender Foundation
26 * ***** END GPL LICENSE BLOCK *****
33 #include "DNA_armature_types.h"
35 #include "DNA_image_types.h"
36 #include "DNA_meshdata_types.h"
37 #include "DNA_mesh_types.h"
38 #include "DNA_object_types.h"
39 #include "DNA_space_types.h"
40 #include "DNA_scene_types.h"
41 #include "DNA_screen_types.h"
42 #include "DNA_texture_types.h"
43 #include "DNA_userdef_types.h" /* U.smooth_viewtx */
44 #include "DNA_view3d_types.h"
45 #include "DNA_windowmanager_types.h"
47 #include "RNA_access.h"
49 #include "MEM_guardedalloc.h"
51 #include "BKE_action.h"
52 #include "BKE_brush.h"
53 #include "BKE_context.h"
54 #include "BKE_curve.h"
55 #include "BKE_depsgraph.h"
56 #include "BKE_displist.h"
57 #include "BKE_effect.h"
58 #include "BKE_global.h"
59 #include "BKE_image.h"
60 #include "BKE_library.h"
63 #include "BKE_modifier.h"
64 #include "BKE_particle.h"
65 #include "BKE_screen.h"
66 #include "BKE_utildefines.h" /* for VECCOPY */
68 #include "ED_armature.h"
69 #include "ED_particle.h"
70 #include "ED_object.h"
73 #include "ED_screen.h"
79 #include "RNA_access.h"
80 #include "RNA_define.h"
83 #include "BIF_glutil.h"
84 #include "BIF_transform.h"
86 #include "BLI_arithb.h"
87 #include "BLI_blenlib.h"
88 #include "BLI_editVert.h"
90 #include "UI_interface.h"
91 #include "UI_interface_icons.h"
92 #include "UI_resources.h"
93 #include "UI_view2d.h"
97 #include "view3d_intern.h"
100 /* View3d->modeselect
101 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
102 * rather than those buttons.
103 * I know the implementation's not good - it's an experiment to see if this
104 * approach would work well
106 * This can be cleaned when I make some new 'mode' icons.
109 #define V3D_OBJECTMODE_SEL ICON_OBJECT_DATA
110 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
111 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
112 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
113 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
114 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
115 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
116 #define V3D_POSEMODE_SEL ICON_POSE_HLT
117 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
119 #define TEST_EDITMESH if(obedit==0) return; \
120 if( (v3d->lay & obedit->lay)==0 ) return;
123 static void handle_view3d_lock(void) {}
124 static void countall(void) {}
125 extern void borderselect();
126 static int retopo_mesh_paint_check() {return 0;}
128 /* view3d handler codes */
129 #define VIEW3D_HANDLER_BACKGROUND 1
130 #define VIEW3D_HANDLER_PROPERTIES 2
131 #define VIEW3D_HANDLER_OBJECT 3
132 #define VIEW3D_HANDLER_PREVIEW 4
133 #define VIEW3D_HANDLER_MULTIRES 5
134 #define VIEW3D_HANDLER_TRANSFORM 6
135 #define VIEW3D_HANDLER_GREASEPENCIL 7
136 #define VIEW3D_HANDLER_BONESKETCH 8
138 /* end XXX ************* */
141 /* well... in this file a lot of view mode manipulation happens, so let's have it defined here */
142 void ED_view3d_exit_paint_modes(bContext *C)
144 if(G.f & G_TEXTUREPAINT)
145 WM_operator_name_call(C, "PAINT_OT_texture_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
146 if(G.f & G_VERTEXPAINT)
147 WM_operator_name_call(C, "PAINT_OT_vertex_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
148 else if(G.f & G_WEIGHTPAINT)
149 WM_operator_name_call(C, "PAINT_OT_weight_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
151 if(G.f & G_SCULPTMODE)
152 WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
153 if(G.f & G_PARTICLEEDIT)
154 WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
156 G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
163 static void do_view3d_header_buttons(bContext *C, void *arg, int event);
165 #define B_SCENELOCK 101
168 #define B_VIEWBUT 104
170 #define B_VIEWRENDER 106
171 #define B_STARTGAME 107
172 #define B_MODESELECT 108
174 #define B_SEL_VERT 110
175 #define B_SEL_EDGE 111
176 #define B_SEL_FACE 112
177 #define B_SEL_PATH 113
178 #define B_SEL_POINT 114
179 #define B_SEL_END 115
180 #define B_MAN_TRANS 116
181 #define B_MAN_ROT 117
182 #define B_MAN_SCALE 118
184 #define B_MAN_MODE 120
185 #define B_VIEW_BUTSEDIT 121
188 #define B_ACTCOPY 124
189 #define B_ACTPASTE 125
190 #define B_ACTPASTEFLIP 126
195 static RegionView3D *wm_region_view3d(const bContext *C)
197 ScrArea *sa= CTX_wm_area(C);
199 /* XXX handle foursplit? */
200 for(ar= sa->regionbase.first; ar; ar= ar->next)
201 if(ar->regiontype==RGN_TYPE_WINDOW)
202 return ar->regiondata;
206 /* XXX; all this context stuff... should become operator */
207 void do_layer_buttons(bContext *C, short event)
209 wmWindow *win= CTX_wm_window(C);
210 Scene *scene= CTX_data_scene(C);
211 ScrArea *sa= CTX_wm_area(C);
212 View3D *v3d= sa->spacedata.first;
213 static int oldlay= 1;
214 short shift, alt, ctrl;
216 shift= win->eventstate->shift;
217 alt= win->eventstate->alt;
218 ctrl= win->eventstate->ctrl;
221 if(v3d->localview) return;
223 if(event==-1 && ctrl) {
224 v3d->scenelock= !v3d->scenelock;
225 do_view3d_header_buttons(C, NULL, B_SCENELOCK);
226 } else if (event<0) {
227 if(v3d->lay== (1<<20)-1) {
228 if(event==-2 || shift) v3d->lay= oldlay;
235 if(v3d->scenelock) handle_view3d_lock();
237 /* new layers might need unflushed events events */
238 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
242 if(event<11) event+= 10;
245 if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
246 else v3d->lay += (1<<event);
248 do_view3d_header_buttons(C, NULL, event+B_LAY);
250 ED_area_tag_redraw(sa);
252 if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene);
255 static int layers_exec(bContext *C, wmOperator *op)
257 Scene *scene= CTX_data_scene(C);
258 ScrArea *sa= CTX_wm_area(C);
259 View3D *v3d= sa->spacedata.first;
260 int nr= RNA_int_get(op->ptr, "nr");
263 return OPERATOR_CANCELLED;
266 if(RNA_boolean_get(op->ptr, "extend"))
271 if(v3d->scenelock) handle_view3d_lock();
273 /* new layers might need unflushed events events */
274 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
276 ED_area_tag_redraw(sa);
278 return OPERATOR_FINISHED;
281 /* applies shift and alt, lazy coding or ok? :) */
282 /* the local per-keymap-entry keymap will solve it */
283 static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event)
285 if(event->ctrl || event->oskey)
286 return OPERATOR_PASS_THROUGH;
289 RNA_boolean_set(op->ptr, "extend", 1);
292 int nr= RNA_int_get(op->ptr, "nr") + 10;
293 RNA_int_set(op->ptr, "nr", nr);
297 return OPERATOR_FINISHED;
300 void VIEW3D_OT_layers(wmOperatorType *ot)
304 ot->idname= "VIEW3D_OT_layers";
307 ot->invoke= layers_invoke;
308 ot->exec= layers_exec;
309 ot->poll= ED_operator_view3d_active;
312 ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
314 RNA_def_int(ot->srna, "nr", 1, 0, 20, "Number", "", 0, 20);
315 RNA_def_boolean(ot->srna, "extend", 0, "Extend", "");
320 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
322 Scene *scene= CTX_data_scene(C);
327 /* Set Active Object as Active Camera */
328 /* XXX ugly hack alert */
329 // G.qual |= LR_CTRLKEY;
330 // persptoetsen(PAD0);
331 // G.qual &= ~LR_CTRLKEY;
334 for( base = FIRSTBASE; base; base = base->next ) {
335 if (base->object->type == OB_CAMERA) {
339 /* XXX use api call! */
350 static uiBlock *view3d_view_camerasmenu(bContext *C, ARegion *ar, void *arg_unused)
352 Scene *scene= CTX_data_scene(C);
355 short yco= 0, menuwidth=120;
359 block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP);
360 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
362 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, "");
364 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
366 for( base = FIRSTBASE; base; base = base->next ) {
367 if (base->object->type == OB_CAMERA) {
370 strcpy(camname, base->object->id.name+2);
371 if (base->object == scene->camera) strcat(camname, " (Active)");
373 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
377 uiBlockSetDirection(block, UI_RIGHT);
378 uiTextBoundsBlock(block, 50);
384 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
387 case 0: /* Orbit Left */
390 case 1: /* Orbit Right */
393 case 2: /* Orbit Up */
396 case 3: /* Orbit Down */
399 case 4: /* Pan left */
400 /* XXX ugly hack alert */
401 // G.qual |= LR_CTRLKEY;
403 // G.qual &= ~LR_CTRLKEY;
405 case 5: /* Pan right */
406 /* XXX ugly hack alert */
407 // G.qual |= LR_CTRLKEY;
409 // G.qual &= ~LR_CTRLKEY;
412 /* ugly hack alert */
413 // G.qual |= LR_CTRLKEY;
415 // G.qual &= ~LR_CTRLKEY;
417 case 7: /* Pan down */
418 /* ugly hack alert */
419 // G.qual |= LR_CTRLKEY;
421 // G.qual &= ~LR_CTRLKEY;
423 case 8: /* Zoom In */
424 persptoetsen(PADPLUSKEY);
426 case 9: /* Zoom Out */
427 persptoetsen(PADMINUS);
429 case 10: /* Reset Zoom */
430 persptoetsen(PADENTER);
432 case 11: /* Camera Fly mode */
439 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, ARegion *ar, void *arg_unused)
441 /* static short tog=0; */
443 short yco= 0, menuwidth=120;
445 block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP);
446 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
448 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
450 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
452 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
453 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
454 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
455 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
457 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
459 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
460 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
461 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
462 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
464 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
466 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
467 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
468 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
470 uiBlockSetDirection(block, UI_RIGHT);
471 uiTextBoundsBlock(block, 50);
475 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
477 Scene *scene= CTX_data_scene(C);
478 ScrArea *sa= CTX_wm_area(C);
479 View3D *v3d= sa->spacedata.first;
480 Object *obedit = CTX_data_edit_object(C);
485 case 0: /* Align View to Selected (edit/faceselect mode) */
488 if ((obedit) && (obedit->type == OB_MESH)) {
489 editmesh_align_view_to_selected(v3d, event + 1);
491 else if (FACESEL_PAINT_TEST) {
492 Object *obact= OBACT;
493 if (obact && obact->type==OB_MESH) {
494 Mesh *me= obact->data;
497 // XXX faceselect_align_view_to_selected(v3d, me, event + 1);
498 ED_area_tag_redraw(sa);
503 case 3: /* Center View to Cursor */
504 curs= give_cursor(scene, v3d);
505 v3d->ofs[0]= -curs[0];
506 v3d->ofs[1]= -curs[1];
507 v3d->ofs[2]= -curs[2];
508 ED_area_tag_redraw(sa);
510 case 4: /* Align Active Camera to View */
511 /* XXX This ugly hack is a symptom of the nasty persptoetsen function,
512 * but at least it works for now.
514 // G.qual |= LR_CTRLKEY|LR_ALTKEY;
516 // G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
518 case 5: /* Align View to Selected (object mode) */
519 // XXX mainqenter(PADASTERKEY, 1);
521 case 6: /* Center View and Cursor to Origin */
522 WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
523 curs= give_cursor(scene, v3d);
524 curs[0]=curs[1]=curs[2]= 0.0;
529 static uiBlock *view3d_view_alignviewmenu(bContext *C, ARegion *ar, void *arg_unused)
531 /* static short tog=0; */
533 Object *obedit = CTX_data_edit_object(C);
534 short yco= 0, menuwidth=120;
536 block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP);
537 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
539 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
540 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, "");
541 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, "");
543 if (((obedit) && (obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
544 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, "");
545 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, "");
546 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, "");
548 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
551 uiBlockSetDirection(block, UI_RIGHT);
552 uiTextBoundsBlock(block, 50);
558 static uiBlock *view3d_view_spacehandlers(bContext *C, ARegion *ar, void *arg_unused)
565 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
579 case 5: /* Perspective */
581 case 6: /* Orthographic */
583 case 7: /* Local View */
585 case 8: /* Global View */
587 case 9: /* View All (Home) */
588 WM_operator_name_call(C, "VIEW3D_OT_viewhome", WM_OP_EXEC_REGION_WIN, NULL);
590 case 11: /* View Selected */
591 WM_operator_name_call(C, "VIEW3D_OT_viewcenter", WM_OP_EXEC_REGION_WIN, NULL);
593 case 13: /* Play Back Animation */
595 case 15: /* Background Image... */
596 // add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
598 case 16: /* View Panel */
599 // add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
601 case 17: /* Set Clipping Border */
602 WM_operator_name_call(C, "VIEW3D_OT_clipping", WM_OP_INVOKE_REGION_WIN, NULL);
604 case 18: /* render preview */
605 // toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
607 case 19: /* zoom within border */
608 // view3d_border_zoom();
610 case 20: /* Transform Space Panel */
611 // add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
613 case 21: /* Grease Pencil */
614 // add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
616 case 22: /* View all layers */
617 do_layer_buttons(C, -2);
623 static void view3d_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused)
625 // uiItemO(layout, NULL, 0, "VIEW3D_OT_view_fly_mode");
629 uiItemsEnumO(layout, "VIEW3D_OT_view_orbit", "type");
633 uiItemsEnumO(layout, "VIEW3D_OT_view_pan", "type");
637 uiItemFloatO(layout, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f);
638 uiItemFloatO(layout, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f);
641 static void view3d_view_alignviewmenu(bContext *C, uiLayout *layout, void *arg_unused)
646 static void view3d_viewmenu(bContext *C, uiLayout *layout, void *arg_unused)
648 ScrArea *sa= CTX_wm_area(C);
650 // uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations...
651 // uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview...
652 // uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties....
653 // uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image....
654 // uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil....
658 uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA);
659 uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP);
660 uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT);
661 uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT);
663 //uiItemMenuF(layout, "Cameras", view3d_view_camerasmenu);
667 uiItemO(layout, NULL, 0, "VIEW3D_OT_view_persportho");
671 // uiItemO(layout, NULL, 0, "VIEW3D_OT_view_show_all_layers");
675 // uiItemO(layout, NULL, 0, "VIEW3D_OT_view_local_view");
676 // uiItemO(layout, NULL, 0, "VIEW3D_OT_view_global_view");
680 uiItemMenuF(layout, "View Navigation", 0, view3d_view_viewnavmenu);
681 uiItemMenuF(layout, "Align View", 0, view3d_view_alignviewmenu);
685 uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
687 uiItemO(layout, NULL, 0, "VIEW3D_OT_clipping");
688 uiItemO(layout, NULL, 0, "VIEW3D_OT_zoom_border");
692 uiItemO(layout, NULL, 0, "VIEW3D_OT_viewcenter");
693 uiItemO(layout, NULL, 0, "VIEW3D_OT_viewhome");
697 if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
698 else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
701 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
703 ScrArea *sa= CTX_wm_area(C);
704 View3D *v3d= sa->spacedata.first;
705 RegionView3D *rv3d= wm_region_view3d(C);
707 short yco= 0, menuwidth=120;
709 block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP);
710 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
712 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
713 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
714 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
715 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
716 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
718 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
720 if ((rv3d->viewbut == 0) && !(rv3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
721 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
722 if (rv3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
723 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
724 if (rv3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
725 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
726 if (rv3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
727 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
728 if (rv3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
729 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
731 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
733 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
735 if(rv3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
736 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
737 if(rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
738 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
740 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
742 if(v3d->lay== (1<<20)-1) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Previous Layers|Shift ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
743 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
745 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
747 if(v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
748 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
749 if(!v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
750 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
752 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
754 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
755 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
757 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
759 if(rv3d->rflag & RV3D_CLIPPING)
760 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
762 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
763 if (rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
764 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
765 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
766 if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
767 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
769 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
771 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
773 #ifndef DISABLE_PYTHON
774 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
775 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
778 if(ar->alignment==RGN_ALIGN_TOP) {
779 uiBlockSetDirection(block, UI_DOWN);
782 uiBlockSetDirection(block, UI_TOP);
783 uiBlockFlipOrder(block);
786 uiTextBoundsBlock(block, 50);
793 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
796 extern void selectall_type(short obtype);
800 selectall_type(OB_MESH);
803 selectall_type(OB_CURVE);
805 case 3: /* Surface */
806 selectall_type(OB_SURF);
809 selectall_type(OB_MBALL);
811 case 5: /* Armature */
812 selectall_type(OB_ARMATURE);
814 case 6: /* Lattice */
815 selectall_type(OB_LATTICE);
818 selectall_type(OB_FONT);
821 selectall_type(OB_EMPTY);
824 selectall_type(OB_CAMERA);
827 selectall_type(OB_LAMP);
830 do_layer_buttons(C, -2);
835 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
838 short yco = 20, menuwidth = 120;
840 block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP);
841 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
843 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
844 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
845 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
846 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
848 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
850 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
851 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
852 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
853 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
855 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
857 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
858 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
860 uiBlockSetDirection(block, UI_RIGHT);
861 uiTextBoundsBlock(block, 60);
866 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
868 // XXX extern void selectall_layer(unsigned int layernum);
892 // XXX selectall_layer(event);
897 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
900 short xco= 0, yco = 20, menuwidth = 22;
902 block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP);
903 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
905 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
906 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
907 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
908 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
909 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
911 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
912 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
913 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
914 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
915 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
917 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
918 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
919 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
920 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
921 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
923 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
924 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
925 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
926 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
927 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
929 uiBlockSetDirection(block, UI_RIGHT);
930 /*uiTextBoundsBlock(block, 100);*/
934 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
937 case 1: /* Object Ipo */
939 case 3: /* Current Material */
940 case 4: /* Current Texture */
947 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
950 short yco = 20, menuwidth = 120;
952 block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP);
953 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
955 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
956 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
957 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
958 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
960 uiBlockSetDirection(block, UI_RIGHT);
961 uiTextBoundsBlock(block, 60);
965 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
969 case 1: /* Children */
970 case 2: /* Immediate Children */
972 case 4: /* Siblings */
974 case 6: /* Objects on Shared Layers */
975 case 7: /* Objects in Same Group */
976 case 8: /* Object Hooks*/
977 case 9: /* Object PassIndex*/
978 case 10: /* Object Color*/
979 case 11: /* Game Properties*/
980 select_object_grouped((short)event);
985 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
988 short yco = 20, menuwidth = 120;
990 block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP);
991 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
993 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
994 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
995 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
996 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
997 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, "");
998 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, "");
999 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, "");
1000 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1001 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1002 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1003 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1005 uiBlockSetDirection(block, UI_RIGHT);
1006 uiTextBoundsBlock(block, 60);
1012 static uiBlock *view3d_select_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
1015 // short yco= 0, menuwidth=120;
1017 block= uiBeginBlock(C, ar, "view3d_select_objectmenu", UI_EMBOSSP);
1020 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
1022 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1024 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1026 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1027 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1028 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1030 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
1031 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
1033 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1035 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
1036 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
1038 uiDefMenuButO(block, "VIEW3D_OT_select_border", "Border Select");
1040 uiDefMenuSep(block);
1042 uiDefMenuButO(block, "OBJECT_OT_select_all_toggle", "Select/Deselect All");
1043 uiDefMenuButO(block, "OBJECT_OT_select_invert", "Inverse");
1044 uiDefMenuButO(block, "OBJECT_OT_select_random", "Random");
1045 uiDefMenuButO(block, "OBJECT_OT_select_by_layer", "Select All by Layer");
1046 uiDefMenuButO(block, "OBJECT_OT_select_by_type", "Select All by Type");
1049 if(ar->alignment==RGN_ALIGN_TOP) {
1050 uiBlockSetDirection(block, UI_DOWN);
1053 uiBlockSetDirection(block, UI_TOP);
1054 uiBlockFlipOrder(block);
1057 uiTextBoundsBlock(block, 50);
1061 void do_view3d_select_meshmenu(bContext *C, void *arg, int event)
1064 /* extern void borderselect(void);*/
1068 case 0: /* border select */
1071 case 2: /* Select/Deselect all */
1074 case 3: /* Inverse */
1077 case 4: /* select linked vertices */
1078 selectconnected_mesh_all();
1080 case 5: /* select random */
1081 selectrandom_mesh();
1083 case 7: /* select more */
1086 case 8: /* select less */
1089 case 9: /* select non-manifold */
1090 select_non_manifold();
1092 case 11: /* select triangles */
1093 select_faces_by_numverts(3);
1095 case 12: /* select quads */
1096 select_faces_by_numverts(4);
1098 case 13: /* select non-triangles/quads */
1099 select_faces_by_numverts(5);
1101 case 14: /* select sharp edges */
1102 select_sharp_edges();
1104 case 15: /* select linked flat faces */
1105 select_linked_flat_faces();
1108 case 16: /* path select */
1110 ED_undo_push(C, "Path Select");
1112 case 17: /* edge loop select */
1113 loop_multiselect(0);
1115 case 18: /* edge ring select */
1116 loop_multiselect(1);
1118 case 19: /* loop to region */
1121 case 20: /* region to loop */
1124 case 21: /* Select grouped */
1125 select_mesh_group_menu();
1132 static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
1135 short yco= 0, menuwidth=120;
1137 block= uiBeginBlock(C, ar, "view3d_select_meshmenu", UI_EMBOSSP);
1138 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1140 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1142 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1144 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1145 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1147 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1148 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1150 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1151 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1152 "Non-Manifold|Ctrl Alt Shift M",
1153 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1154 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1155 "Sharp Edges|Ctrl Alt Shift S",
1156 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1157 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1158 "Linked Flat Faces|Ctrl Alt Shift F",
1159 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1161 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1162 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1164 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1165 "Triangles|Ctrl Alt Shift 3",
1166 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1167 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1168 "Quads|Ctrl Alt Shift 4",
1169 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1170 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1171 "Non-Triangles/Quads|Ctrl Alt Shift 5",
1172 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1173 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
1174 "Similar to Selection...|Shift G",
1175 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1177 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1178 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1180 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1181 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1182 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1183 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1185 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1186 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1188 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1189 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1190 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1191 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1193 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
1194 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1196 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1197 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9", 0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");
1199 if(ar->alignment==RGN_ALIGN_TOP) {
1200 uiBlockSetDirection(block, UI_DOWN);
1203 uiBlockSetDirection(block, UI_TOP);
1204 uiBlockFlipOrder(block);
1207 uiTextBoundsBlock(block, 50);
1211 static void view3d_select_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
1213 Object *obedit= CTX_data_edit_object(C);
1215 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
1216 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_circle");
1220 uiItemO(layout, NULL, 0, "CURVE_OT_select_all_toggle");
1221 uiItemO(layout, NULL, 0, "CURVE_OT_select_invert");
1222 uiItemO(layout, NULL, 0, "CURVE_OT_select_random"); // Random...
1223 uiItemO(layout, NULL, 0, "CURVE_OT_select_every_nth"); // Every Nth..
1227 if(obedit->type == OB_SURF) {
1228 uiItemO(layout, NULL, 0, "CURVE_OT_select_row");
1231 uiItemO(layout, NULL, 0, "CURVE_OT_de_select_first");
1232 uiItemO(layout, NULL, 0, "CURVE_OT_de_select_last");
1233 uiItemO(layout, NULL, 0, "CURVE_OT_select_next");
1234 uiItemO(layout, NULL, 0, "CURVE_OT_select_previous");
1239 uiItemO(layout, NULL, 0, "CURVE_OT_select_more");
1240 uiItemO(layout, NULL, 0, "CURVE_OT_select_less");
1242 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1243 /* uiItemO(layout, NULL, 0, "CURVE_OT_select_linked"); */
1246 G.qual |= LR_CTRLKEY;
1247 select_connected_nurb();
1248 G.qual &= ~LR_CTRLKEY;
1253 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1258 case 0: /* border select */
1261 case 2: /* Select/Deselect all */
1262 deselectall_mball();
1264 case 3: /* Inverse */
1265 selectinverse_mball();
1267 case 4: /* Select Random */
1268 selectrandom_mball();
1275 static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_unused)
1278 short yco= 0, menuwidth=120;
1280 block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP);
1281 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1283 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1285 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1287 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1289 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1291 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1293 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1295 if(ar->alignment==RGN_ALIGN_TOP) {
1296 uiBlockSetDirection(block, UI_DOWN);
1299 uiBlockSetDirection(block, UI_TOP);
1300 uiBlockFlipOrder(block);
1303 uiTextBoundsBlock(block, 50);
1307 static void do_view3d_select_latticemenu(bContext *C, void *arg, int event)
1310 /* extern void borderselect(void);*/
1313 case 0: /* border select */
1316 case 2: /* Select/Deselect all */
1323 static uiBlock *view3d_select_latticemenu(bContext *C, ARegion *ar, void *arg_unused)
1326 short yco= 0, menuwidth=120;
1328 block= uiBeginBlock(C, ar, "view3d_select_latticemenu", UI_EMBOSSP);
1329 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1331 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1333 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1335 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1337 if(ar->alignment==RGN_ALIGN_TOP) {
1338 uiBlockSetDirection(block, UI_DOWN);
1341 uiBlockSetDirection(block, UI_TOP);
1342 uiBlockFlipOrder(block);
1345 uiTextBoundsBlock(block, 50);
1349 static void do_view3d_select_armaturemenu(bContext *C, void *arg, int event)
1352 /* extern void borderselect(void);*/
1355 case 0: /* border select */
1358 case 2: /* Select/Deselect all */
1359 deselectall_armature(1, 1);
1361 case 3: /* Swap Select All */
1362 deselectall_armature(3, 1);
1364 case 4: /* Select parent */
1365 armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1367 case 5: /* Select child */
1368 armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1370 case 6: /* Extend Select parent */
1371 armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1373 case 7: /* Extend Select child */
1374 armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1380 static uiBlock *view3d_select_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1383 short yco= 0, menuwidth=120;
1385 block= uiBeginBlock(C, ar, "view3d_select_armaturemenu", UI_EMBOSSP);
1386 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1390 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1392 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1393 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1395 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1397 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1398 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1400 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1402 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1403 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1405 if(ar->alignment==RGN_ALIGN_TOP) {
1406 uiBlockSetDirection(block, UI_DOWN);
1409 uiBlockSetDirection(block, UI_TOP);
1410 uiBlockFlipOrder(block);
1413 uiTextBoundsBlock(block, 50);
1417 static void do_view3d_select_pose_armaturemenu(bContext *C, void *arg, int event)
1420 /* extern void borderselect(void);*/
1423 case 0: /* border select */
1426 case 2: /* Select/Deselect all */
1427 deselectall_posearmature(OBACT, 1, 1);
1429 case 3: /* Select Target(s) of Constraint(s) */
1430 pose_select_constraint_target();
1432 case 5: /* Swap Select All */
1433 deselectall_posearmature(OBACT, 3, 1);
1435 case 6: /* Select parent */
1436 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1438 case 7: /* Select child */
1439 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1441 case 8: /* Extend Select parent */
1442 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1444 case 9: /* Extend Select child */
1445 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1451 static uiBlock *view3d_select_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
1454 short yco= 0, menuwidth=120;
1456 block= uiBeginBlock(C, ar, "view3d_select_pose_armaturemenu", UI_EMBOSSP);
1457 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1459 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1461 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1463 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1464 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1465 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1467 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1469 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1470 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1472 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1474 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1475 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1477 if(ar->alignment==RGN_ALIGN_TOP) {
1478 uiBlockSetDirection(block, UI_DOWN);
1481 uiBlockSetDirection(block, UI_TOP);
1482 uiBlockFlipOrder(block);
1485 uiTextBoundsBlock(block, 50);
1489 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1492 /* events >= 6 are registered bpython scripts */
1493 #ifndef DISABLE_PYTHON
1494 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1498 case 0: /* border select */
1501 case 2: /* Select/Deselect all */
1502 deselectall_tface();
1504 case 3: /* Select Inverse */
1507 case 4: /* Select Linked */
1508 select_linked_tfaces(2);
1514 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1517 short yco= 0, menuwidth=120;
1518 #ifndef DISABLE_PYTHON
1519 // XXX BPyMenu *pym;
1523 block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP);
1524 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1526 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1528 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1530 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1531 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1533 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1534 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1536 #ifndef DISABLE_PYTHON
1537 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1539 /* note that we account for the 6 previous entries with i+6: */
1540 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1541 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1542 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1543 // pym->tooltip?pym->tooltip:pym->filename);
1547 if(ar->alignment==RGN_ALIGN_TOP) {
1548 uiBlockSetDirection(block, UI_DOWN);
1551 uiBlockSetDirection(block, UI_TOP);
1552 uiBlockFlipOrder(block);
1555 uiTextBoundsBlock(block, 50);
1559 void do_view3d_edit_snapmenu(bContext *C, void *arg, int event)
1563 case 1: /*Selection to grid*/
1565 ED_undo_push(C, "Snap selection to grid");
1567 case 2: /*Selection to cursor*/
1569 ED_undo_push(C, "Snap selection to cursor");
1571 case 3: /*Selection to center of selection*/
1573 ED_undo_push(C, "Snap selection to center");
1575 case 4: /*Cursor to selection*/
1578 case 5: /*Cursor to grid*/
1579 snap_curs_to_grid();
1581 case 6: /*Cursor to Active*/
1582 snap_curs_to_active();
1583 ED_undo_push(C, "Snap selection to center");
1589 static uiBlock *view3d_edit_snapmenu(bContext *C, ARegion *ar, void *arg_unused)
1592 short yco = 20, menuwidth = 120;
1594 block= uiBeginBlock(C, ar, "view3d_edit_snapmenu", UI_EMBOSSP);
1595 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1597 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1598 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1599 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1600 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1601 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1602 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1603 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1607 uiBlockSetDirection(block, UI_RIGHT);
1608 uiTextBoundsBlock(block, 60);
1612 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1621 case 0: /* X Global */
1622 initTransform(TFM_TRANSLATION, CTX_NONE);
1623 BIF_setSingleAxisConstraint(mat[0], " X");
1626 case 1: /* Y Global */
1627 initTransform(TFM_TRANSLATION, CTX_NONE);
1628 BIF_setSingleAxisConstraint(mat[1], " Y");
1631 case 2: /* Z Global */
1632 initTransform(TFM_TRANSLATION, CTX_NONE);
1633 BIF_setSingleAxisConstraint(mat[2], " Z");
1636 case 3: /* X Local */
1637 initTransform(TFM_TRANSLATION, CTX_NONE);
1638 BIF_setLocalAxisConstraint('X', " X");
1641 case 4: /* Y Local */
1642 initTransform(TFM_TRANSLATION, CTX_NONE);
1643 BIF_setLocalAxisConstraint('Y', " Y");
1646 case 5: /* Z Local */
1647 initTransform(TFM_TRANSLATION, CTX_NONE);
1648 BIF_setLocalAxisConstraint('Z', " Z");
1655 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1658 short yco = 20, menuwidth = 120;
1660 block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP);
1661 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1663 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1664 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1665 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1667 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1669 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1670 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1671 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1674 uiBlockSetDirection(block, UI_RIGHT);
1675 uiTextBoundsBlock(block, 60);
1679 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1688 case 0: /* X Global */
1689 initTransform(TFM_ROTATION, CTX_NONE);
1690 BIF_setSingleAxisConstraint(mat[0], " X");
1693 case 1: /* Y Global */
1694 initTransform(TFM_ROTATION, CTX_NONE);
1695 BIF_setSingleAxisConstraint(mat[1], " Y");
1698 case 2: /* Z Global */
1699 initTransform(TFM_ROTATION, CTX_NONE);
1700 BIF_setSingleAxisConstraint(mat[2], " Z");
1703 case 3: /* X Local */
1704 initTransform(TFM_ROTATION, CTX_NONE);
1705 BIF_setLocalAxisConstraint('X', " X");
1708 case 4: /* Y Local */
1709 initTransform(TFM_ROTATION, CTX_NONE);
1710 BIF_setLocalAxisConstraint('Y', " Y");
1713 case 5: /* Z Local */
1714 initTransform(TFM_ROTATION, CTX_NONE);
1715 BIF_setLocalAxisConstraint('Z', " Z");
1722 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1725 short yco = 20, menuwidth = 120;
1727 block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP);
1728 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1730 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1731 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1732 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1734 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1736 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1737 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1738 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1741 uiBlockSetDirection(block, UI_RIGHT);
1742 uiTextBoundsBlock(block, 60);
1746 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1755 case 0: /* X Global */
1756 initTransform(TFM_RESIZE, CTX_NONE);
1757 BIF_setSingleAxisConstraint(mat[0], " X");
1760 case 1: /* Y Global */
1761 initTransform(TFM_RESIZE, CTX_NONE);
1762 BIF_setSingleAxisConstraint(mat[1], " Y");
1765 case 2: /* Z Global */
1766 initTransform(TFM_RESIZE, CTX_NONE);
1767 BIF_setSingleAxisConstraint(mat[2], " Z");
1770 case 3: /* X Local */
1771 initTransform(TFM_RESIZE, CTX_NONE);
1772 BIF_setLocalAxisConstraint('X', " X");
1775 case 4: /* Y Local */
1776 initTransform(TFM_RESIZE, CTX_NONE);
1777 BIF_setLocalAxisConstraint('X', " X");
1780 case 5: /* Z Local */
1781 initTransform(TFM_RESIZE, CTX_NONE);
1782 BIF_setLocalAxisConstraint('X', " X");
1789 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1792 short yco = 20, menuwidth = 120;
1794 block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP);
1795 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1797 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1798 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1799 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1801 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1803 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1804 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1805 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1808 uiBlockSetDirection(block, UI_RIGHT);
1809 uiTextBoundsBlock(block, 60);
1813 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1816 Scene *scene= CTX_data_scene(C);
1820 initTransform(TFM_TRANSLATION, CTX_NONE);
1824 initTransform(TFM_ROTATION, CTX_NONE);
1828 initTransform(TFM_RESIZE, CTX_NONE);
1835 initTransform(TFM_TOSPHERE, CTX_NONE);
1839 initTransform(TFM_SHEAR, CTX_NONE);
1843 initTransform(TFM_WARP, CTX_NONE);
1847 initTransform(TFM_PUSHPULL, CTX_NONE);
1852 if (obedit->type == OB_MESH)
1853 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1855 } else error("Only meshes can be shrinked/fattened");
1867 initTransform(TFM_TILT, CTX_NONE);
1871 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1875 scene->snap_flag &= ~SCE_SNAP;
1878 scene->snap_flag |= SCE_SNAP;
1881 scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1884 scene->snap_target = SCE_SNAP_TARGET_CENTER;
1887 scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1890 scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1899 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1901 Scene *scene= CTX_data_scene(C);
1902 Object *obedit = CTX_data_edit_object(C);
1904 short yco = 20, menuwidth = 120;
1906 block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
1907 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1909 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1910 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1912 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1913 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1915 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1916 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1918 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1921 if (obedit->type == OB_MESH)
1922 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1923 else if (obedit->type == OB_CURVE) {
1924 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1925 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1928 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1929 if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1930 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1931 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1932 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1935 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1937 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, "");
1940 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1942 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1944 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1946 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, "");
1949 if (BIF_snappingSupported(obedit))
1951 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1953 if (scene->snap_flag & SCE_SNAP)
1955 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1956 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1960 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1961 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1964 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1966 switch(scene->snap_target)
1968 case SCE_SNAP_TARGET_CLOSEST:
1969 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1970 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1971 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1972 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1974 case SCE_SNAP_TARGET_CENTER:
1975 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1976 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1977 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1978 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1980 case SCE_SNAP_TARGET_MEDIAN:
1981 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1982 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1983 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1984 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1986 case SCE_SNAP_TARGET_ACTIVE:
1987 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1988 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1989 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1990 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1995 uiBlockSetDirection(block, UI_RIGHT);
1996 uiTextBoundsBlock(block, 60);
2000 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
2005 initTransform(TFM_MIRROR, CTX_NO_PET);
2009 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2010 BIF_setLocalAxisConstraint('X', " on X axis");
2014 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2015 BIF_setLocalAxisConstraint('Y', " on Y axis");
2019 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2020 BIF_setLocalAxisConstraint('Z', " on Z axis");
2027 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2030 short yco = 20, menuwidth = 120;
2032 block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
2033 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2035 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2036 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2037 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2038 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2039 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2041 uiBlockSetDirection(block, UI_RIGHT);
2042 uiTextBoundsBlock(block, 60);
2046 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2050 case 0: /* clear origin */
2053 case 1: /* clear scale */
2056 case 2: /* clear rotation */
2059 case 3: /* clear location */
2063 if(OBACT) object_apply_deform(OBACT);
2065 case 5: /* make duplis real */
2066 make_duplilist_real();
2068 case 6: /* apply scale/rotation or deformation */
2069 apply_objects_locrot();
2071 case 7: /* apply visual matrix to objects loc/size/rot */
2072 apply_objects_visual_tx();
2078 static uiBlock *view3d_edit_object_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
2081 short yco = 20, menuwidth = 120;
2083 block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP);
2084 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2086 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, "");
2087 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2088 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2089 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2091 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2093 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2094 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2095 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2098 uiBlockSetDirection(block, UI_RIGHT);
2099 uiTextBoundsBlock(block, 60);
2103 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2116 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
2119 short yco = 20, menuwidth = 120;
2121 block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
2122 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2124 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2125 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2126 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2128 uiBlockSetDirection(block, UI_RIGHT);
2129 uiTextBoundsBlock(block, 60);
2133 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2141 make_links((short)event);
2147 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
2149 Scene *scene= CTX_data_scene(C);
2153 short yco = 20, menuwidth = 120;
2155 block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
2156 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2158 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2160 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2162 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2166 if(ob->type==OB_MESH) {
2167 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2168 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2169 } else if(ob->type==OB_CURVE) {
2170 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2171 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2172 } else if(ob->type==OB_FONT) {
2173 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2174 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2175 } else if(ob->type==OB_SURF) {
2176 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2177 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2178 } else if(ob->type==OB_MBALL) {
2179 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2180 } else if(ob->type==OB_CAMERA) {
2181 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2182 } else if(ob->type==OB_LAMP) {
2183 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2184 } else if(ob->type==OB_LATTICE) {
2185 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2186 } else if(ob->type==OB_ARMATURE) {
2187 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2191 uiBlockSetDirection(block, UI_RIGHT);
2192 uiTextBoundsBlock(block, 60);
2196 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2200 case 1: /* Object */
2201 single_object_users(1);
2203 case 2: /* Object & ObData */
2204 single_object_users(1);
2205 single_obdata_users(1);
2207 case 3: /* Object & ObData & Materials+Tex */
2208 single_object_users(1);
2209 single_obdata_users(1);
2210 single_mat_users(1); /* also tex */
2212 case 4: /* Materials+Tex */
2213 single_mat_users(1);
2216 single_ipo_users(1);
2220 clear_id_newpoins();
2226 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
2230 short yco = 20, menuwidth = 120;
2232 block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
2233 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2235 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2236 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2237 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2238 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2239 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2241 uiBlockSetDirection(block, UI_RIGHT);
2242 uiTextBoundsBlock(block, 60);
2246 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2272 // XXX copy_attr((short)event);
2277 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
2279 Scene *scene= CTX_data_scene(C);
2283 short yco = 20, menuwidth = 120;
2285 block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
2286 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2290 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2291 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2292 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2293 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2294 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2295 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2297 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2299 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2300 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2301 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2302 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2303 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2304 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2306 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2308 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2309 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2313 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2314 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2315 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2318 if(ob->type == OB_FONT) {
2319 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2320 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2321 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2323 if(ob->type == OB_CURVE) {
2324 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2325 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2328 if(ob->type==OB_MESH) {
2329 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2330 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2332 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2335 uiBlockSetDirection(block, UI_RIGHT);
2336 uiTextBoundsBlock(block, 60);
2341 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2345 case 0: /* clear parent */
2348 case 1: /* make parent */
2355 static uiBlock *view3d_edit_object_parentmenu(bContext *C, ARegion *ar, void *arg_unused)
2358 short yco = 20, menuwidth = 120;
2360 block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP);
2361 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2363 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2364 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2366 uiBlockSetDirection(block, UI_RIGHT);
2367 uiTextBoundsBlock(block, 60);
2371 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2378 group_operation(event);
2384 static uiBlock *view3d_edit_object_groupmenu(bContext *C, ARegion *ar, void *arg_unused)
2387 short yco = 20, menuwidth = 120;
2389 block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP);
2390 uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2392 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, "");
2393 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, "");
2394 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, "");
2396 uiBlockSetDirection(block, UI_RIGHT);
2397 uiTextBoundsBlock(block, 60);
2401 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2405 case 0: /* clear track */
2408 case 1: /* make track */
2415 static uiBlock *view3d_edit_object_trackmenu(bContext *C, ARegion *ar, void *arg_unused)
2418 short yco = 20, menuwidth = 120;
2420 block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP);
2421 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2423 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2424 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2426 uiBlockSetDirection(block, UI_RIGHT);
2427 uiTextBoundsBlock(block, 60);
2431 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2435 case 1: /* add constraint */
2438 case 2: /* clear constraint */
2439 ob_clear_constraints();
2445 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, ARegion *ar, void *arg_unused)
2448 short yco = 20, menuwidth = 120;
2450 block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP);
2451 uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2453 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2454 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2456 uiBlockSetDirection(block, UI_RIGHT);
2457 uiTextBoundsBlock(block, 60);
2461 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2467 case 0: /* show objects */
2470 case 1: /* hide selected objects */
2473 case 2: /* hide deselected objects */
2480 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
2483 short yco = 20, menuwidth = 120;
2485 block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP);
2486 uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2488 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2489 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2490 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2492 uiBlockSetDirection(block, UI_RIGHT);
2493 uiTextBoundsBlock(block, 60);
2497 #ifndef DISABLE_PYTHON
2498 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2501 BPY_menu_do_python(PYMENU_OBJECT, event);
2506 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2509 // short yco = 20, menuwidth = 120;
2510 // XXX BPyMenu *pym;
2513 block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
2514 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2516 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2517 // 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);
2520 uiBlockSetDirection(block, UI_RIGHT);
2521 uiTextBoundsBlock(block, 60);
2525 #endif /* DISABLE_PYTHON */
2528 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2531 Scene *scene= CTX_data_scene(C);
2532 ScrArea *sa= CTX_wm_area(C);
2533 View3D *v3d= sa->spacedata.first;
2537 case 0: /* transform properties*/
2538 // XXX mainqenter(NKEY, 1);
2540 case 1: /* delete */
2541 delete_context_selected();
2543 case 2: /* duplicate */
2544 duplicate_context_selected();
2546 case 3: /* duplicate linked */
2549 case 5: /* make single user */
2552 case 7: /* boolean operation */
2555 case 8: /* join objects */
2558 case 9: /* convert object type */
2561 case 10: /* move to layer */
2564 case 11: /* insert keyframe */
2567 case 15: /* Object Panel */
2568 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2570 case 16: /* make proxy object*/
2573 case 18: /* delete keyframe */
2580 static uiBlock *view3d_edit_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
2582 Scene *scene= CTX_data_scene(C);
2584 short yco= 0, menuwidth=120;
2586 block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP);
2587 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2589 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2590 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2591 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2593 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2594 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2596 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2598 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2599 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2601 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2603 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2604 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2605 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2607 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2609 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2610 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2611 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2612 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2613 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2615 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2617 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2618 uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2619 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2620 uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2622 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2624 if (OBACT && OBACT->type == OB_MESH) {
2625 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2627 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2628 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2630 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2632 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2633 uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2635 #ifndef DISABLE_PYTHON
2636 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2637 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2640 if(ar->alignment==RGN_ALIGN_TOP) {
2641 uiBlockSetDirection(block, UI_DOWN);
2644 uiBlockSetDirection(block, UI_TOP);
2645 uiBlockFlipOrder(block);
2648 uiTextBoundsBlock(block, 50);
2653 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2655 Scene *scene= CTX_data_scene(C);
2657 scene->prop_mode= event;
2661 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, ARegion *ar, void *arg_unused)
2663 Scene *scene= CTX_data_scene(C);
2665 short yco = 20, menuwidth = 120;
2667 block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP);
2668 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2670 if (scene->prop_mode==PROP_SMOOTH) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2671 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2672 if (scene->prop_mode==PROP_SPHERE) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2673 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2674 if (scene->prop_mode==PROP_ROOT) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2675 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2676 if (scene->prop_mode==PROP_SHARP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2677 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2678 if (scene->prop_mode==PROP_LIN) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2679 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2680 if (scene->prop_mode==PROP_RANDOM) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2681 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2682 if (scene->prop_mode==PROP_CONST) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2683 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2685 uiBlockSetDirection(block, UI_RIGHT);
2686 uiTextBoundsBlock(block, 60);
2691 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2694 Scene *scene= CTX_data_scene(C);
2699 case 0: /* make vertex parent */
2702 case 1: /* remove doubles */
2703 count= removedoublesflag(1, 0, scene->toolsettings->doublimit);
2704 notice("Removed: %d", count);
2705 if (count) { /* only undo and redraw if an action is taken */
2706 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2707 ED_undo_push(C, "Rem Doubles");
2710 case 2: /* smooth */
2713 case 3: /* separate */
2721 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2723 case 6: /* add hook */
2733 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, ARegion *ar, void *arg_unused)
2736 short yco = 20, menuwidth = 120;
2738 block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP);
2739 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2741 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2742 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2743 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2744 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2746 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2748 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2749 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2751 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2753 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2754 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2756 uiBlockSetDirection(block, UI_RIGHT);
2757 uiTextBoundsBlock(block, 60);
2761 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2763 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2766 Scene *scene= CTX_data_scene(C);
2772 case 0: /* subdivide smooth */
2773 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2774 ED_undo_push(C, "Subdivide Smooth");
2776 case 1: /*subdivide fractal */
2778 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2779 fac= -( (float)randfac )/100;
2780 esubdivideflag(1, fac, scene->toolsettings->editbutflag,1,0);
2781 ED_undo_push(C, "Subdivide Fractal");
2783 case 2: /* subdivide */
2784 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag,1,0);
2785 ED_undo_push(C, "Subdivide");
2787 case 3: /* knife subdivide */
2788 KnifeSubdivide(KNIFE_PROMPT);
2790 case 4: /* Loop subdivide */
2793 case 5: /* Make Edge/Face */
2799 case 7: /* Mark Seam */
2800 editmesh_mark_seam(0);
2802 case 8: /* Clear Seam */
2803 editmesh_mark_seam(1);
2805 case 9: /* Crease SubSurf */
2806 if(!multires_level1_test()) {
2807 initTransform(TFM_CREASE, CTX_EDGE);
2811 case 10: /* Rotate Edge */
2812 edge_rotate_selected(2);
2814 case 11: /* Rotate Edge */
2815 edge_rotate_selected(1);
2817 case 12: /* Edgeslide */
2820 case 13: /* Edge Loop Delete */
2821 if(EdgeLoopDelete()) {
2823 ED_undo_push(C, "Erase Edge Loop");
2824 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2827 case 14: /*Collapse Edges*/
2829 ED_undo_push(C, "Collapse");
2832 editmesh_mark_sharp(1);
2833 ED_undo_push(C, "Mark Sharp");
2834 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2837 editmesh_mark_sharp(0);
2838 ED_undo_push(C, "Clear Sharp");
2839 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2841 case 17: /* Adjust Bevel Weight */
2842 if(!multires_level1_test()) {
2843 initTransform(TFM_BWEIGHT, CTX_EDGE);
2851 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, ARegion *ar, void *arg_unused)
2854 short yco = 20, menuwidth = 120;
2856 block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP);
2857 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2859 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2861 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2863 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2864 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2865 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2867 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2869 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2870 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2871 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2873 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2875 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2876 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2878 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2880 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2881 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2883 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2884 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2886 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2887 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2889 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2891 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2892 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2894 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2895 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2897 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2898 uiBlockSetDirection(block, UI_RIGHT);
2899 uiTextBoundsBlock(block, 60);
2903 void do_view3d_edit_mesh_facesmenu(bContext *C, void *arg, int event)