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_paint.h"
65 #include "BKE_particle.h"
66 #include "BKE_screen.h"
67 #include "BKE_utildefines.h" /* for VECCOPY */
69 #include "ED_armature.h"
70 #include "ED_particle.h"
71 #include "ED_object.h"
74 #include "ED_screen.h"
75 #include "ED_transform.h"
81 #include "RNA_access.h"
82 #include "RNA_define.h"
83 #include "RNA_enum_types.h"
86 #include "BIF_glutil.h"
88 #include "BLI_arithb.h"
89 #include "BLI_blenlib.h"
90 #include "BLI_editVert.h"
92 #include "UI_interface.h"
93 #include "UI_interface_icons.h"
94 #include "UI_resources.h"
95 #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 TEST_EDITMESH if(obedit==0) return; \
110 if( (v3d->lay & obedit->lay)==0 ) return;
113 static void countall(void) {}
114 extern void borderselect();
115 static int retopo_mesh_paint_check() {return 0;}
117 /* view3d handler codes */
118 #define VIEW3D_HANDLER_BACKGROUND 1
119 #define VIEW3D_HANDLER_PROPERTIES 2
120 #define VIEW3D_HANDLER_OBJECT 3
121 #define VIEW3D_HANDLER_PREVIEW 4
122 #define VIEW3D_HANDLER_MULTIRES 5
123 #define VIEW3D_HANDLER_TRANSFORM 6
124 #define VIEW3D_HANDLER_GREASEPENCIL 7
125 #define VIEW3D_HANDLER_BONESKETCH 8
127 /* end XXX ************* */
129 static void do_view3d_header_buttons(bContext *C, void *arg, int event);
131 #define B_SCENELOCK 101
134 #define B_VIEWBUT 104
136 #define B_VIEWRENDER 106
137 #define B_STARTGAME 107
138 #define B_MODESELECT 108
140 #define B_SEL_VERT 110
141 #define B_SEL_EDGE 111
142 #define B_SEL_FACE 112
143 #define B_SEL_PATH 113
144 #define B_SEL_POINT 114
145 #define B_SEL_END 115
146 #define B_MAN_TRANS 116
147 #define B_MAN_ROT 117
148 #define B_MAN_SCALE 118
150 #define B_MAN_MODE 120
151 #define B_VIEW_BUTSEDIT 121
154 #define B_ACTCOPY 124
155 #define B_ACTPASTE 125
156 #define B_ACTPASTEFLIP 126
161 static RegionView3D *wm_region_view3d(const bContext *C)
163 ScrArea *sa= CTX_wm_area(C);
165 /* XXX handle foursplit? */
166 for(ar= sa->regionbase.first; ar; ar= ar->next)
167 if(ar->regiontype==RGN_TYPE_WINDOW)
168 return ar->regiondata;
172 // XXX quickly ported across
173 static void handle_view3d_lock(bContext *C)
175 Scene *scene= CTX_data_scene(C);
176 ScrArea *sa= CTX_wm_area(C);
177 View3D *v3d= CTX_wm_view3d(C);
179 if (v3d != NULL && sa != NULL) {
180 if(v3d->localview==0 && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
183 scene->lay= v3d->lay;
184 scene->camera= v3d->camera;
186 //copy_view3d_lock(REDRAW);
191 static int layers_exec(bContext *C, wmOperator *op)
193 Scene *scene= CTX_data_scene(C);
194 ScrArea *sa= CTX_wm_area(C);
195 View3D *v3d= sa->spacedata.first;
196 int nr= RNA_int_get(op->ptr, "nr");
199 return OPERATOR_CANCELLED;
202 if(RNA_boolean_get(op->ptr, "extend"))
207 /* set active layer, ensure to always have one */
208 if(v3d->lay & (1<<nr))
210 else if((v3d->lay & v3d->layact)==0) {
214 if(v3d->lay & (1<<bit)) {
222 if(v3d->scenelock) handle_view3d_lock(C);
224 /* new layers might need unflushed events events */
225 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
227 ED_area_tag_redraw(sa);
229 return OPERATOR_FINISHED;
232 /* applies shift and alt, lazy coding or ok? :) */
233 /* the local per-keymap-entry keymap will solve it */
234 static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event)
236 if(event->ctrl || event->oskey)
237 return OPERATOR_PASS_THROUGH;
240 RNA_boolean_set(op->ptr, "extend", 1);
243 int nr= RNA_int_get(op->ptr, "nr") + 10;
244 RNA_int_set(op->ptr, "nr", nr);
248 return OPERATOR_FINISHED;
251 void VIEW3D_OT_layers(wmOperatorType *ot)
255 ot->idname= "VIEW3D_OT_layers";
258 ot->invoke= layers_invoke;
259 ot->exec= layers_exec;
260 ot->poll= ED_operator_view3d_active;
263 ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
265 RNA_def_int(ot->srna, "nr", 1, 0, 20, "Number", "", 0, 20);
266 RNA_def_boolean(ot->srna, "extend", 0, "Extend", "");
270 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
273 extern void selectall_type(short obtype);
277 selectall_type(OB_MESH);
280 selectall_type(OB_CURVE);
282 case 3: /* Surface */
283 selectall_type(OB_SURF);
286 selectall_type(OB_MBALL);
288 case 5: /* Armature */
289 selectall_type(OB_ARMATURE);
291 case 6: /* Lattice */
292 selectall_type(OB_LATTICE);
295 selectall_type(OB_FONT);
298 selectall_type(OB_EMPTY);
301 selectall_type(OB_CAMERA);
304 selectall_type(OB_LAMP);
307 do_layer_buttons(C, -2);
312 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
315 short yco = 20, menuwidth = 120;
317 block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP);
318 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
320 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
321 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
322 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
323 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
325 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
327 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
328 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
329 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
330 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
332 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
334 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
335 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
337 uiBlockSetDirection(block, UI_RIGHT);
338 uiTextBoundsBlock(block, 60);
343 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
345 // XXX extern void selectall_layer(unsigned int layernum);
369 // XXX selectall_layer(event);
374 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
377 short xco= 0, yco = 20, menuwidth = 22;
379 block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP);
380 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
382 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
383 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
384 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
385 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
386 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
388 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
389 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
390 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
391 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
392 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
394 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
395 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
396 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
397 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
398 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
400 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
401 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
402 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
403 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
404 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
406 uiBlockSetDirection(block, UI_RIGHT);
407 /*uiTextBoundsBlock(block, 100);*/
411 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
414 case 1: /* Object Ipo */
416 case 3: /* Current Material */
417 case 4: /* Current Texture */
424 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
427 short yco = 20, menuwidth = 120;
429 block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP);
430 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
432 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
433 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
434 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
435 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
437 uiBlockSetDirection(block, UI_RIGHT);
438 uiTextBoundsBlock(block, 60);
442 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
446 case 1: /* Children */
447 case 2: /* Immediate Children */
449 case 4: /* Siblings */
451 case 6: /* Objects on Shared Layers */
452 case 7: /* Objects in Same Group */
453 case 8: /* Object Hooks*/
454 case 9: /* Object PassIndex*/
455 case 10: /* Object Color*/
456 case 11: /* Game Properties*/
457 select_object_grouped((short)event);
462 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
465 short yco = 20, menuwidth = 120;
467 block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP);
468 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
470 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
471 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
472 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
473 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
474 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, "");
475 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, "");
476 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, "");
477 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
478 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
479 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
480 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
482 uiBlockSetDirection(block, UI_RIGHT);
483 uiTextBoundsBlock(block, 60);
489 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
492 /* events >= 6 are registered bpython scripts */
493 #ifndef DISABLE_PYTHON
494 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
498 case 0: /* border select */
501 case 2: /* Select/Deselect all */
504 case 3: /* Select Inverse */
507 case 4: /* Select Linked */
508 select_linked_tfaces(2);
514 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
517 short yco= 0, menuwidth=120;
518 #ifndef DISABLE_PYTHON
523 block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP);
524 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
526 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
528 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
530 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
531 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
533 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
534 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
536 #ifndef DISABLE_PYTHON
537 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
539 /* note that we account for the 6 previous entries with i+6: */
540 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
541 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
542 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
543 // pym->tooltip?pym->tooltip:pym->filename);
547 if(ar->alignment==RGN_ALIGN_TOP) {
548 uiBlockSetDirection(block, UI_DOWN);
551 uiBlockSetDirection(block, UI_TOP);
552 uiBlockFlipOrder(block);
555 uiTextBoundsBlock(block, 50);
559 /* wrapper for python layouts */
560 void uiTemplate_view3d_select_faceselmenu(uiLayout *layout, bContext *C)
562 void *arg_unused = NULL;
563 ARegion *ar= CTX_wm_region(C);
564 view3d_select_faceselmenu(C, ar, arg_unused);
568 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
577 case 0: /* X Global */
578 initTransform(TFM_TRANSLATION, CTX_NONE);
579 BIF_setSingleAxisConstraint(mat[0], " X");
582 case 1: /* Y Global */
583 initTransform(TFM_TRANSLATION, CTX_NONE);
584 BIF_setSingleAxisConstraint(mat[1], " Y");
587 case 2: /* Z Global */
588 initTransform(TFM_TRANSLATION, CTX_NONE);
589 BIF_setSingleAxisConstraint(mat[2], " Z");
592 case 3: /* X Local */
593 initTransform(TFM_TRANSLATION, CTX_NONE);
594 BIF_setLocalAxisConstraint('X', " X");
597 case 4: /* Y Local */
598 initTransform(TFM_TRANSLATION, CTX_NONE);
599 BIF_setLocalAxisConstraint('Y', " Y");
602 case 5: /* Z Local */
603 initTransform(TFM_TRANSLATION, CTX_NONE);
604 BIF_setLocalAxisConstraint('Z', " Z");
611 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
614 short yco = 20, menuwidth = 120;
616 block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP);
617 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
619 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
620 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
621 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
623 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
625 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
626 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
627 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
630 uiBlockSetDirection(block, UI_RIGHT);
631 uiTextBoundsBlock(block, 60);
635 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
644 case 0: /* X Global */
645 initTransform(TFM_ROTATION, CTX_NONE);
646 BIF_setSingleAxisConstraint(mat[0], " X");
649 case 1: /* Y Global */
650 initTransform(TFM_ROTATION, CTX_NONE);
651 BIF_setSingleAxisConstraint(mat[1], " Y");
654 case 2: /* Z Global */
655 initTransform(TFM_ROTATION, CTX_NONE);
656 BIF_setSingleAxisConstraint(mat[2], " Z");
659 case 3: /* X Local */
660 initTransform(TFM_ROTATION, CTX_NONE);
661 BIF_setLocalAxisConstraint('X', " X");
664 case 4: /* Y Local */
665 initTransform(TFM_ROTATION, CTX_NONE);
666 BIF_setLocalAxisConstraint('Y', " Y");
669 case 5: /* Z Local */
670 initTransform(TFM_ROTATION, CTX_NONE);
671 BIF_setLocalAxisConstraint('Z', " Z");
678 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
681 short yco = 20, menuwidth = 120;
683 block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP);
684 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
686 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
687 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
688 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
690 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
692 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
693 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
694 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
697 uiBlockSetDirection(block, UI_RIGHT);
698 uiTextBoundsBlock(block, 60);
702 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
711 case 0: /* X Global */
712 initTransform(TFM_RESIZE, CTX_NONE);
713 BIF_setSingleAxisConstraint(mat[0], " X");
716 case 1: /* Y Global */
717 initTransform(TFM_RESIZE, CTX_NONE);
718 BIF_setSingleAxisConstraint(mat[1], " Y");
721 case 2: /* Z Global */
722 initTransform(TFM_RESIZE, CTX_NONE);
723 BIF_setSingleAxisConstraint(mat[2], " Z");
726 case 3: /* X Local */
727 initTransform(TFM_RESIZE, CTX_NONE);
728 BIF_setLocalAxisConstraint('X', " X");
731 case 4: /* Y Local */
732 initTransform(TFM_RESIZE, CTX_NONE);
733 BIF_setLocalAxisConstraint('X', " X");
736 case 5: /* Z Local */
737 initTransform(TFM_RESIZE, CTX_NONE);
738 BIF_setLocalAxisConstraint('X', " X");
745 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
748 short yco = 20, menuwidth = 120;
750 block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP);
751 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
753 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
754 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
755 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
757 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
759 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
760 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
761 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
764 uiBlockSetDirection(block, UI_RIGHT);
765 uiTextBoundsBlock(block, 60);
771 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
774 Scene *scene= CTX_data_scene(C);
775 ToolSettings *ts= CTX_data_tool_settings(C);
779 initTransform(TFM_TRANSLATION, CTX_NONE);
783 initTransform(TFM_ROTATION, CTX_NONE);
787 initTransform(TFM_RESIZE, CTX_NONE);
794 initTransform(TFM_TOSPHERE, CTX_NONE);
798 initTransform(TFM_SHEAR, CTX_NONE);
802 initTransform(TFM_WARP, CTX_NONE);
806 initTransform(TFM_PUSHPULL, CTX_NONE);
811 if (obedit->type == OB_MESH)
812 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
814 } else error("Only meshes can be shrinked/fattened");
826 initTransform(TFM_TILT, CTX_NONE);
830 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
834 ts->snap_flag &= ~SCE_SNAP;
837 ts->snap_flag |= SCE_SNAP;
840 ts->snap_target = SCE_SNAP_TARGET_CLOSEST;
843 ts->snap_target = SCE_SNAP_TARGET_CENTER;
846 ts->snap_target = SCE_SNAP_TARGET_MEDIAN;
849 ts->snap_target = SCE_SNAP_TARGET_ACTIVE;
858 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
860 ToolSettings *ts= CTX_data_tool_settings(C);
861 Object *obedit = CTX_data_edit_object(C);
863 short yco = 20, menuwidth = 120;
865 block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
866 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
868 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
869 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
871 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
872 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
874 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
875 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
877 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
880 if (obedit->type == OB_MESH)
881 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
882 else if (obedit->type == OB_CURVE) {
883 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
884 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
887 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
888 if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
889 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
890 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
891 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
894 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
896 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, "");
899 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
901 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
903 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
904 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
905 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, "");
908 if (BIF_snappingSupported(obedit))
910 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
912 if (ts->snap_flag & SCE_SNAP)
914 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
915 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
919 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
920 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
923 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
925 switch(ts->snap_target)
927 case SCE_SNAP_TARGET_CLOSEST:
928 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
929 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
930 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
931 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
933 case SCE_SNAP_TARGET_CENTER:
934 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
935 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
936 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
937 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
939 case SCE_SNAP_TARGET_MEDIAN:
940 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
941 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
942 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
943 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
945 case SCE_SNAP_TARGET_ACTIVE:
946 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
947 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
948 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
949 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
954 uiBlockSetDirection(block, UI_RIGHT);
955 uiTextBoundsBlock(block, 60);
960 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
965 initTransform(TFM_MIRROR, CTX_NO_PET);
969 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
970 BIF_setLocalAxisConstraint('X', " on X axis");
974 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
975 BIF_setLocalAxisConstraint('Y', " on Y axis");
979 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
980 BIF_setLocalAxisConstraint('Z', " on Z axis");
987 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
990 short yco = 20, menuwidth = 120;
992 block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
993 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
995 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
996 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
997 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
998 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
999 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1001 uiBlockSetDirection(block, UI_RIGHT);
1002 uiTextBoundsBlock(block, 60);
1008 static void view3d_edit_object_transformmenu(bContext *C, uiLayout *layout, void *arg_unused)
1011 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, "");
1012 apply_objects_locrot();
1013 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1014 apply_objects_visual_tx();
1015 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1016 if(OBACT) object_apply_deform(OBACT);
1018 uiItemO(layout, NULL, 0, "OBJECT_OT_duplicates_make_real");
1022 uiItemO(layout, NULL, 0, "OBJECT_OT_location_clear");
1023 uiItemO(layout, NULL, 0, "OBJECT_OT_rotation_clear");
1024 uiItemO(layout, NULL, 0, "OBJECT_OT_scale_clear");
1025 uiItemO(layout, NULL, 0, "OBJECT_OT_origin_clear");
1029 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
1042 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
1045 short yco = 20, menuwidth = 120;
1047 block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
1048 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
1050 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1051 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1052 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1054 uiBlockSetDirection(block, UI_RIGHT);
1055 uiTextBoundsBlock(block, 60);
1059 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
1067 make_links((short)event);
1073 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
1075 Scene *scene= CTX_data_scene(C);
1079 short yco = 20, menuwidth = 120;
1081 block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
1082 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
1084 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1086 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1088 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1092 if(ob->type==OB_MESH) {
1093 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1094 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1095 } else if(ob->type==OB_CURVE) {
1096 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1097 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1098 } else if(ob->type==OB_FONT) {
1099 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1100 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1101 } else if(ob->type==OB_SURF) {
1102 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1103 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1104 } else if(ob->type==OB_MBALL) {
1105 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1106 } else if(ob->type==OB_CAMERA) {
1107 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1108 } else if(ob->type==OB_LAMP) {
1109 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1110 } else if(ob->type==OB_LATTICE) {
1111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1112 } else if(ob->type==OB_ARMATURE) {
1113 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1117 uiBlockSetDirection(block, UI_RIGHT);
1118 uiTextBoundsBlock(block, 60);
1122 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
1126 case 1: /* Object */
1127 single_object_users(1);
1129 case 2: /* Object & ObData */
1130 single_object_users(1);
1131 single_obdata_users(1);
1133 case 3: /* Object & ObData & Materials+Tex */
1134 single_object_users(1);
1135 single_obdata_users(1);
1136 single_mat_users(1); /* also tex */
1138 case 4: /* Materials+Tex */
1139 single_mat_users(1);
1142 single_ipo_users(1);
1146 clear_id_newpoins();
1152 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
1156 short yco = 20, menuwidth = 120;
1158 block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
1159 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
1161 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1162 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1163 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1164 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1165 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1167 uiBlockSetDirection(block, UI_RIGHT);
1168 uiTextBoundsBlock(block, 60);
1172 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
1198 // XXX copy_attr((short)event);
1203 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
1205 Scene *scene= CTX_data_scene(C);
1209 short yco = 20, menuwidth = 120;
1211 block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
1212 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
1216 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1217 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1218 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1219 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1220 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1221 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1223 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1225 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1226 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1227 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1228 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1229 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1230 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
1232 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1234 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
1235 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
1239 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
1240 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
1241 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1244 if(ob->type == OB_FONT) {
1245 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1246 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1247 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1249 if(ob->type == OB_CURVE) {
1250 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1251 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1254 if(ob->type==OB_MESH) {
1255 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1256 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
1258 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
1261 uiBlockSetDirection(block, UI_RIGHT);
1262 uiTextBoundsBlock(block, 60);
1268 #ifndef DISABLE_PYTHON
1269 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
1272 BPY_menu_do_python(PYMENU_OBJECT, event);
1277 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
1280 // short yco = 20, menuwidth = 120;
1281 // XXX BPyMenu *pym;
1284 block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
1285 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
1287 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
1288 // 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);
1291 uiBlockSetDirection(block, UI_RIGHT);
1292 uiTextBoundsBlock(block, 60);
1296 #endif /* DISABLE_PYTHON */
1301 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
1303 Scene *scene= CTX_data_scene(C);
1304 ScrArea *sa= CTX_wm_area(C);
1305 View3D *v3d= sa->spacedata.first;
1309 case 0: /* transform properties*/
1310 // XXX mainqenter(NKEY, 1);
1312 case 5: /* make single user */
1315 case 7: /* boolean operation */
1318 case 8: /* join objects */
1321 case 9: /* convert object type */
1324 case 10: /* move to layer */
1327 case 11: /* insert keyframe */
1330 case 16: /* make proxy object*/
1333 case 18: /* delete keyframe */
1341 /* texture paint menu (placeholder, no items yet??) */
1342 static void do_view3d_tpaintmenu(bContext *C, void *arg, int event)
1346 case 0: /* undo image painting */
1347 undo_imagepaint_step(1);
1354 static uiBlock *view3d_tpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
1357 short yco= 0, menuwidth=120;
1359 block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
1360 uiBlockSetButmFunc(block, do_view3d_tpaintmenu, NULL);
1362 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Texture Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1363 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1365 if(ar->alignment==RGN_ALIGN_TOP) {
1366 uiBlockSetDirection(block, UI_DOWN);
1369 uiBlockSetDirection(block, UI_TOP);
1370 uiBlockFlipOrder(block);
1373 uiTextBoundsBlock(block, 50);
1378 static void do_view3d_wpaintmenu(bContext *C, void *arg, int event)
1383 /* events >= 3 are registered bpython scripts */
1384 #ifndef DISABLE_PYTHON
1385 if (event >= 4) BPY_menu_do_python(PYMENU_WEIGHTPAINT, event - 4);
1388 case 0: /* undo weight painting */
1391 case 1: /* set vertex colors/weight */
1392 clear_wpaint_selectedfaces();
1394 case 2: /* vgroups from envelopes */
1395 pose_adds_vgroups(ob, 0);
1397 case 3: /* vgroups from bone heat */
1398 pose_adds_vgroups(ob, 1);
1404 static uiBlock *view3d_wpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
1407 short yco= 0, menuwidth=120, menunr=1;
1408 #ifndef DISABLE_PYTHON
1409 // XXX BPyMenu *pym;
1413 block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
1414 uiBlockSetButmFunc(block, do_view3d_wpaintmenu, NULL);
1416 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Weight Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1418 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1420 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Bone Heat Weights to Vertex Groups|W, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1421 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Bone Envelopes to Vertex Groups|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1423 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1425 if (paint_facesel_test(CTX_data_active_object(C))) {
1426 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Weight|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1427 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1431 #ifndef DISABLE_PYTHON
1432 /* note that we account for the 4 previous entries with i+4:
1433 even if the last item isnt displayed, it dosent matter */
1434 // for (pym = BPyMenuTable[PYMENU_WEIGHTPAINT]; pym; pym = pym->next, i++) {
1435 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1436 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+4,
1437 // pym->tooltip?pym->tooltip:pym->filename);
1441 if(ar->alignment==RGN_ALIGN_TOP) {
1442 uiBlockSetDirection(block, UI_DOWN);
1445 uiBlockSetDirection(block, UI_TOP);
1446 uiBlockFlipOrder(block);
1449 uiTextBoundsBlock(block, 50);
1453 static void do_view3d_facesel_showhidemenu(bContext *C, void *arg, int event)
1457 case 4: /* show hidden faces */
1460 case 5: /* hide selected faces */
1463 case 6: /* XXX hide deselected faces */
1464 // G.qual |= LR_SHIFTKEY;
1466 // G.qual &= ~LR_SHIFTKEY;
1472 static uiBlock *view3d_facesel_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
1475 short yco = 20, menuwidth = 120;
1477 block= uiBeginBlock(C, ar, "view3d_facesel_showhidemenu", UI_EMBOSSP);
1478 uiBlockSetButmFunc(block, do_view3d_facesel_showhidemenu, NULL);
1480 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Faces|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1481 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Faces|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1482 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected Faces|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1484 uiBlockSetDirection(block, UI_RIGHT);
1485 uiTextBoundsBlock(block, 60);
1489 static void do_view3d_faceselmenu(bContext *C, void *arg, int event)
1493 case 0: /* set vertex colors */
1494 clear_vpaint_selectedfaces();
1496 case 1: /* mark border seam */
1497 seam_mark_clear_tface(1);
1499 case 2: /* clear seam */
1500 seam_mark_clear_tface(2);
1506 static uiBlock *view3d_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1509 short yco= 0, menuwidth=120;
1511 block= uiBeginBlock(C, ar, "view3d_faceselmenu", UI_EMBOSSP);
1512 uiBlockSetButmFunc(block, do_view3d_faceselmenu, NULL);
1514 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1516 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1518 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1519 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Border Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1521 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1523 uiDefIconTextBlockBut(block, view3d_facesel_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Faces", 0, yco-=20, 120, 19, "");
1525 if(ar->alignment==RGN_ALIGN_TOP) {
1526 uiBlockSetDirection(block, UI_DOWN);
1529 uiBlockSetDirection(block, UI_TOP);
1530 uiBlockFlipOrder(block);
1533 uiTextBoundsBlock(block, 50);
1537 static char *view3d_modeselect_pup(Scene *scene)
1540 static char string[1024];
1541 static char formatstr[] = "|%s %%x%d %%i%d";
1544 str += sprintf(str, "Mode: %%t");
1546 str += sprintf(str, formatstr, "Object Mode", OB_MODE_OBJECT, ICON_OBJECT_DATA);
1548 if(ob==NULL) return string;
1550 /* if active object is editable */
1551 if ( ((ob->type == OB_MESH) || (ob->type == OB_ARMATURE)
1552 || (ob->type == OB_CURVE) || (ob->type == OB_SURF) || (ob->type == OB_FONT)
1553 || (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) {
1555 str += sprintf(str, formatstr, "Edit Mode", OB_MODE_EDIT, ICON_EDITMODE_HLT);
1558 if (ob->type == OB_MESH) {
1560 str += sprintf(str, formatstr, "Sculpt Mode", OB_MODE_SCULPT, ICON_SCULPTMODE_HLT);
1561 str += sprintf(str, formatstr, "Vertex Paint", OB_MODE_VERTEX_PAINT, ICON_VPAINT_HLT);
1562 str += sprintf(str, formatstr, "Texture Paint", OB_MODE_TEXTURE_PAINT, ICON_TPAINT_HLT);
1563 str += sprintf(str, formatstr, "Weight Paint", OB_MODE_WEIGHT_PAINT, ICON_WPAINT_HLT);
1567 /* if active object is an armature */
1568 if (ob->type==OB_ARMATURE) {
1569 str += sprintf(str, formatstr, "Pose Mode", OB_MODE_POSE, ICON_POSE_HLT);
1572 if (ob->particlesystem.first) {
1573 str += sprintf(str, formatstr, "Particle Mode", OB_MODE_PARTICLE_EDIT, ICON_PARTICLEMODE);
1580 static char *drawtype_pup(void)
1582 static char string[512];
1585 str += sprintf(str, "%s", "Draw type: %t");
1586 str += sprintf(str, "%s", "|Bounding Box %x1");
1587 str += sprintf(str, "%s", "|Wireframe %x2");
1588 str += sprintf(str, "%s", "|Solid %x3");
1589 str += sprintf(str, "%s", "|Shaded %x4");
1590 str += sprintf(str, "%s", "|Textured %x5");
1593 static char *around_pup(const bContext *C)
1595 Object *obedit = CTX_data_edit_object(C);
1596 static char string[512];
1599 str += sprintf(str, "%s", "Pivot: %t");
1600 str += sprintf(str, "%s", "|Bounding Box Center %x0");
1601 str += sprintf(str, "%s", "|Median Point %x3");
1602 str += sprintf(str, "%s", "|3D Cursor %x1");
1603 str += sprintf(str, "%s", "|Individual Centers %x2");
1604 if ((obedit) && (obedit->type == OB_MESH))
1605 str += sprintf(str, "%s", "|Active Vert/Edge/Face %x4");
1607 str += sprintf(str, "%s", "|Active Object %x4");
1611 static char *ndof_pup(void)
1613 static char string[512];
1616 str += sprintf(str, "%s", "ndof mode: %t");
1617 str += sprintf(str, "%s", "|turntable %x0");
1618 str += sprintf(str, "%s", "|fly %x1");
1619 str += sprintf(str, "%s", "|transform %x2");
1624 static char *snapmode_pup(void)
1626 static char string[512];
1629 str += sprintf(str, "%s", "Snap Element: %t");
1630 str += sprintf(str, "%s", "|Vertex%x0");
1631 str += sprintf(str, "%s", "|Edge%x1");
1632 str += sprintf(str, "%s", "|Face%x2");
1633 str += sprintf(str, "%s", "|Volume%x3");
1637 static char *propfalloff_pup(void)
1639 static char string[512];
1642 str += sprintf(str, "%s", "Falloff: %t");
1643 str += sprintf(str, "%s", "|Smooth Falloff%x0");
1644 str += sprintf(str, "%s", "|Sphere Falloff%x1");
1645 str += sprintf(str, "%s", "|Root Falloff%x2");
1646 str += sprintf(str, "%s", "|Sharp Falloff%x3");
1647 str += sprintf(str, "%s", "|Linear Falloff%x4");
1648 str += sprintf(str, "%s", "|Random Falloff%x6");
1649 str += sprintf(str, "%s", "|Constant, No Falloff%x5");
1654 static void do_view3d_header_buttons(bContext *C, void *arg, int event)
1656 wmWindow *win= CTX_wm_window(C);
1657 Scene *scene= CTX_data_scene(C);
1658 ToolSettings *ts= CTX_data_tool_settings(C);
1659 ScrArea *sa= CTX_wm_area(C);
1660 View3D *v3d= sa->spacedata.first;
1661 Object *obedit = CTX_data_edit_object(C);
1663 int bit, ctrl= win->eventstate->ctrl, shift= win->eventstate->shift;
1664 PointerRNA props_ptr;
1666 if(obedit && obedit->type==OB_MESH) {
1667 em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
1669 /* watch it: if sa->win does not exist, check that when calling direct drawing routines */
1673 WM_operator_name_call(C, "VIEW3D_OT_view_all", WM_OP_EXEC_REGION_WIN, NULL);
1676 ED_area_tag_redraw(sa);
1679 if(v3d->scenelock) {
1680 v3d->lay= scene->lay;
1681 /* seek for layact */
1684 if(v3d->lay & (1<<bit)) {
1685 v3d->layact= 1<<bit;
1690 v3d->camera= scene->camera;
1691 ED_area_tag_redraw(sa);
1703 if (sa->spacetype==SPACE_VIEW3D) {
1704 // XXX BIF_do_ogl_render(v3d, shift);
1708 // XXX start_game();
1711 WM_operator_properties_create(&props_ptr, "OBJECT_OT_mode_set");
1712 RNA_enum_set(&props_ptr, "mode", v3d->modeselect);
1713 WM_operator_name_call(C, "OBJECT_OT_mode_set", WM_OP_EXEC_REGION_WIN, &props_ptr);
1716 // XXX handle_view3d_around(); /* copies to other 3d windows */
1721 if(shift==0 || em->selectmode==0)
1722 em->selectmode= SCE_SELECT_VERTEX;
1723 ts->selectmode= em->selectmode;
1724 EM_selectmode_set(em);
1725 WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
1726 ED_undo_push(C, "Selectmode Set: Vertex");
1731 if(shift==0 || em->selectmode==0){
1732 if( (em->selectmode ^ SCE_SELECT_EDGE) == SCE_SELECT_VERTEX){
1733 if(ctrl) EM_convertsel(em, SCE_SELECT_VERTEX,SCE_SELECT_EDGE);
1735 em->selectmode = SCE_SELECT_EDGE;
1737 ts->selectmode= em->selectmode;
1738 EM_selectmode_set(em);
1739 WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
1740 ED_undo_push(C, "Selectmode Set: Edge");
1745 if( shift==0 || em->selectmode==0){
1746 if( ((ts->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_VERTEX) || ((ts->selectmode ^ SCE_SELECT_FACE) == SCE_SELECT_EDGE)){
1747 if(ctrl) EM_convertsel(em, (ts->selectmode ^ SCE_SELECT_FACE),SCE_SELECT_FACE);
1749 em->selectmode = SCE_SELECT_FACE;
1751 ts->selectmode= em->selectmode;
1752 EM_selectmode_set(em);
1753 WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
1754 ED_undo_push(C, "Selectmode Set: Face");
1759 ts->particle.selectmode= SCE_SELECT_PATH;
1760 ED_undo_push(C, "Selectmode Set: Path");
1763 ts->particle.selectmode = SCE_SELECT_POINT;
1764 ED_undo_push(C, "Selectmode Set: Point");
1767 ts->particle.selectmode = SCE_SELECT_END;
1768 ED_undo_push(C, "Selectmode Set: End point");
1772 if( shift==0 || v3d->twtype==0) {
1773 v3d->twtype= V3D_MANIP_TRANSLATE;
1775 ED_area_tag_redraw(sa);
1778 if( shift==0 || v3d->twtype==0) {
1779 v3d->twtype= V3D_MANIP_ROTATE;
1781 ED_area_tag_redraw(sa);
1784 if( shift==0 || v3d->twtype==0) {
1785 v3d->twtype= V3D_MANIP_SCALE;
1787 ED_area_tag_redraw(sa);
1793 case B_VIEW_BUTSEDIT:
1798 if(event>=B_LAY && event<B_LAY+31) {
1799 if(v3d->lay!=0 && shift) {
1801 /* but do find active layer */
1804 if( v3d->lay & (1<<bit)) v3d->layact= 1<<bit;
1806 if( (v3d->lay & v3d->layact) == 0) {
1809 if(v3d->lay & (1<<bit)) {
1810 v3d->layact= 1<<bit;
1821 v3d->layact= v3d->lay;
1824 if(v3d->scenelock) handle_view3d_lock(C);
1826 ED_area_tag_redraw(sa);
1829 /* new layers might need unflushed events events */
1830 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
1836 if(obedit && obedit->type==OB_MESH)
1837 BKE_mesh_end_editmesh(obedit->data, em);
1840 static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *ob, int *xcoord, int yco)
1842 Object *obedit = CTX_data_edit_object(C);
1843 RegionView3D *rv3d= wm_region_view3d(C);
1844 short xmax, xco= *xcoord;
1846 /* compensate for local mode when setting up the viewing menu/iconrow values */
1847 if(rv3d->view==7) rv3d->viewbut= 1;
1848 else if(rv3d->view==1) rv3d->viewbut= 2;
1849 else if(rv3d->view==3) rv3d->viewbut= 3;
1850 else rv3d->viewbut= 0;
1852 /* the 'xmax - 3' rather than xmax is to prevent some weird flickering where the highlighted
1853 * menu is drawn wider than it should be. The ypos of -2 is to make it properly fill the
1854 * height of the header */
1856 xmax= GetButStringLength("Select");
1862 else if (ob && ob->mode & OB_MODE_WEIGHT_PAINT) {
1863 xmax= GetButStringLength("Paint");
1864 uiDefPulldownBut(block, view3d_wpaintmenu, NULL, "Paint", xco,yco, xmax-3, 20, "");
1867 else if (ob && ob->mode & OB_MODE_TEXTURE_PAINT) {
1868 xmax= GetButStringLength("Paint");
1869 uiDefPulldownBut(block, view3d_tpaintmenu, NULL, "Paint", xco,yco, xmax-3, 20, "");
1872 else if (paint_facesel_test(ob)) {
1873 if (ob && ob->type == OB_MESH) {
1874 xmax= GetButStringLength("Face");
1875 uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face", xco,yco, xmax-3, 20, "");
1879 else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
1880 /* ported to python */
1883 if (ob && (ob->mode & OB_MODE_POSE)) {
1884 /* ported to python */
1891 static int view3d_layer_icon(int but_lay, int ob_lay, int used_lay)
1893 if (but_lay & ob_lay)
1894 return ICON_LAYER_ACTIVE;
1895 else if (but_lay & used_lay)
1896 return ICON_LAYER_USED;
1901 static void header_xco_step(ARegion *ar, int *xco, int *yco, int *maxco, int step)
1904 if(*maxco < *xco) *maxco = *xco;
1906 if(ar->winy > *yco + 44) {
1907 if(*xco > ar->winrct.xmax) {
1914 /* Returns the icon associated with an object mode */
1915 static int object_mode_icon(int mode)
1917 EnumPropertyItem *item = object_mode_items;
1919 while(item->name != NULL) {
1920 if(item->value == mode)
1925 return ICON_OBJECT_DATAMODE;
1928 void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
1930 ARegion *ar= CTX_wm_region(C);
1931 ScrArea *sa= CTX_wm_area(C);
1932 View3D *v3d= sa->spacedata.first;
1933 Scene *scene= CTX_data_scene(C);
1934 ToolSettings *ts= CTX_data_tool_settings(C);
1936 Object *obedit = CTX_data_edit_object(C);
1938 int a, xco=0, maxco=0, yco= 0;
1940 block= uiLayoutFreeBlock(layout);
1941 uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL);
1943 if((sa->flag & HEADER_NO_PULLDOWN)==0)
1944 view3d_header_pulldowns(C, block, ob, &xco, yco);
1946 /* other buttons: */
1947 uiBlockSetEmboss(block, UI_EMBOSS);
1951 v3d->modeselect = ob->mode;
1953 v3d->modeselect = OB_MODE_OBJECT;
1955 v3d->flag &= ~V3D_MODE;
1957 /* not sure what the v3d->flag is useful for now... modeselect is confusing */
1958 if(obedit) v3d->flag |= V3D_EDITMODE;
1959 if(ob && (ob->mode & OB_MODE_POSE)) v3d->flag |= V3D_POSEMODE;
1960 if(ob && (ob->mode & OB_MODE_VERTEX_PAINT)) v3d->flag |= V3D_VERTEXPAINT;
1961 if(ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) v3d->flag |= V3D_WEIGHTPAINT;
1962 if(ob && (ob->mode & OB_MODE_TEXTURE_PAINT)) v3d->flag |= V3D_TEXTUREPAINT;
1963 if(paint_facesel_test(ob)) v3d->flag |= V3D_FACESELECT;
1965 uiDefIconTextButS(block, MENU, B_MODESELECT, object_mode_icon(v3d->modeselect), view3d_modeselect_pup(scene) ,
1966 xco,yco,126,20, &(v3d->modeselect), 0, 0, 0, 0, "Mode (Hotkeys: Tab, V, Ctrl Tab)");
1967 header_xco_step(ar, &xco, &yco, &maxco, 126+8);
1970 uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_BBOX, drawtype_pup(), xco,yco,XIC+10,YIC, &(v3d->drawtype), 1.0, 5.0, 0, 0, "Viewport Shading (Hotkeys: Z, Shift Z, Alt Z)");
1972 header_xco_step(ar, &xco, &yco, &maxco, XIC+18);
1974 uiBlockBeginAlign(block);
1976 if(retopo_mesh_paint_check()) {
1977 void *rpd= NULL; // XXX RetopoPaintData *rpd= get_retopo_paint_data();
1979 ToolSettings *ts= scene->toolsettings;
1981 uiDefButC(block,ROW,B_REDR,"Pen",xco,yco,40,20,&ts->retopo_paint_tool,6.0,RETOPO_PEN,0,0,"");
1983 uiDefButC(block,ROW,B_REDR,"Line",xco,yco,40,20,&ts->retopo_paint_tool,6.0,RETOPO_LINE,0,0,"");
1985 uiDefButC(block,ROW,B_REDR,"Ellipse",xco,yco,60,20,&ts->retopo_paint_tool,6.0,RETOPO_ELLIPSE,0,0,"");
1988 uiBlockBeginAlign(block);
1989 if(ts->retopo_paint_tool == RETOPO_PEN) {
1990 uiDefButC(block,TOG,B_NOP,"Hotspot",xco,yco,60,20, &ts->retopo_hotspot, 0,0,0,0,"Show hotspots at line ends to allow line continuation");
1993 else if(ts->retopo_paint_tool == RETOPO_LINE) {
1994 uiDefButC(block,NUM,B_NOP,"LineDiv",xco,yco,80,20,&ts->line_div,1,50,0,0,"Subdivisions per retopo line");
1997 else if(ts->retopo_paint_tool == RETOPO_ELLIPSE) {
1998 uiDefButC(block,NUM,B_NOP,"EllDiv",xco,yco,80,20,&ts->ellipse_div,3,50,0,0,"Subdivisions per retopo ellipse");
2001 header_xco_step(ar, &xco, &yco, &maxco, 5);
2003 uiBlockEndAlign(block);
2006 if (obedit==NULL && ((ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)))) {
2007 uiDefIconButBitI(block, TOG, G_FACESELECT, B_VIEW_BUTSEDIT, ICON_FACESEL_HLT,xco,yco,XIC,YIC, &G.f, 0, 0, 0, 0, "Painting Mask (FKey)");
2008 header_xco_step(ar, &xco, &yco, &maxco, XIC+10);
2010 /* Manipulators aren't used in weight paint mode */
2012 uiDefIconTextButS(block, ICONTEXTROW,B_AROUND, ICON_ROTATE, around_pup(C), xco,yco,XIC+10,YIC, &(v3d->around), 0, 3.0, 0, 0, "Rotation/Scaling Pivot (Hotkeys: Comma, Shift Comma, Period, Ctrl Period, Alt Period)");
2015 uiDefIconButBitS(block, TOG, V3D_ALIGN, B_AROUND, ICON_ALIGN,
2017 &v3d->flag, 0, 0, 0, 0, "Move object centers only");
2018 uiBlockEndAlign(block);
2020 header_xco_step(ar, &xco, &yco, &maxco, XIC+8);
2022 uiBlockBeginAlign(block);
2025 if (G.ndofdevice ==0 ) {
2026 uiDefIconTextButC(block, ICONTEXTROW,B_NDOF, ICON_NDOF_TURN, ndof_pup(), xco,yco,XIC+10,YIC, &(v3d->ndofmode), 0, 3.0, 0, 0, "Ndof mode");
2029 uiDefIconButC(block, TOG, B_NDOF, ICON_NDOF_DOM,
2031 &v3d->ndoffilter, 0, 1, 0, 0, "dominant axis");
2032 uiBlockEndAlign(block);
2034 header_xco_step(ar, &xco, &yco, &maxco, XIC+8);
2036 uiBlockEndAlign(block);
2038 /* Transform widget / manipulators */
2039 uiBlockBeginAlign(block);
2040 uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,xco,yco,XIC,YIC, &v3d->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)");
2043 if(v3d->twflag & V3D_USE_MANIPULATOR) {
2044 uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, xco,yco,XIC,YIC, &v3d->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)");
2046 uiDefIconButBitS(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, xco,yco,XIC,YIC, &v3d->twtype, 1.0, 0.0, 0, 0, "Rotate manipulator mode (Ctrl Alt R)");
2048 uiDefIconButBitS(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, xco,yco,XIC,YIC, &v3d->twtype, 1.0, 0.0, 0, 0, "Scale manipulator mode (Ctrl Alt S)");
2052 if (v3d->twmode > (BIF_countTransformOrientation(C) - 1) + V3D_MANIP_CUSTOM) {
2056 str_menu = BIF_menustringTransformOrientation(C, "Orientation");
2057 uiDefButS(block, MENU, B_MAN_MODE, str_menu,xco,yco,70,YIC, &v3d->twmode, 0, 0, 0, 0, "Transform Orientation (ALT+Space)");
2058 MEM_freeN(str_menu);
2060 header_xco_step(ar, &xco, &yco, &maxco, 78);
2061 uiBlockEndAlign(block);
2065 if(obedit==NULL && v3d->localview==0) {
2066 int ob_lay = ob ? ob->lay : 0;
2067 uiBlockBeginAlign(block);
2068 for(a=0; a<5; a++) {
2069 uiDefIconButBitI(block, TOG, 1<<a, B_LAY+a, view3d_layer_icon(1<<a, ob_lay, v3d->lay_used), (short)(xco+a*(XIC/2)), yco+(short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(v3d->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
2071 for(a=0; a<5; a++) {
2072 uiDefIconButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, view3d_layer_icon(1<<(a+10), ob_lay, v3d->lay_used), (short)(xco+a*(XIC/2)), yco, XIC/2, (YIC)/2, &(v3d->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
2075 uiBlockBeginAlign(block);
2076 for(a=5; a<10; a++) {
2077 uiDefIconButBitI(block, TOG, 1<<a, B_LAY+a, view3d_layer_icon(1<<a, ob_lay, v3d->lay_used), (short)(xco+a*(XIC/2)), yco+(short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(v3d->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
2079 for(a=5; a<10; a++) {
2080 uiDefIconButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, view3d_layer_icon(1<<(a+10), ob_lay, v3d->lay_used), (short)(xco+a*(XIC/2)), yco, XIC/2, (YIC)/2, &(v3d->lay), 0, 0, 0, 0, "Toggles Layer visibility (Alt Num, Alt Shift Num)");
2082 uiBlockEndAlign(block);
2084 xco+= (a-2)*(XIC/2)+3;
2087 uiDefIconButS(block, ICONTOG, B_SCENELOCK, ICON_LOCKVIEW_OFF, xco+=XIC,yco,XIC,YIC, &(v3d->scenelock), 0, 0, 0, 0, "Locks Active Camera and layers to Scene (Ctrl `)");
2088 header_xco_step(ar, &xco, &yco, &maxco, XIC+10);
2092 /* proportional falloff */
2093 if((obedit && (obedit->type == OB_MESH || obedit->type == OB_CURVE || obedit->type == OB_SURF || obedit->type == OB_LATTICE)) || (ob && ob->mode & OB_MODE_PARTICLE_EDIT)) {
2095 uiBlockBeginAlign(block);
2096 uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_PROP_OFF, "Proportional %t|Off %x0|On %x1|Connected %x2", xco,yco,XIC+10,YIC, &(ts->proportional), 0, 1.0, 0, 0, "Proportional Edit Falloff (Hotkeys: O, Alt O) ");
2099 if(ts->proportional) {
2100 uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SMOOTHCURVE, propfalloff_pup(), xco,yco,XIC+10,YIC, &(ts->prop_mode), 0.0, 0.0, 0, 0, "Proportional Edit Falloff (Hotkey: Shift O) ");
2103 uiBlockEndAlign(block);
2104 header_xco_step(ar, &xco, &yco, &maxco, XIC+10);
2108 if (BIF_snappingSupported(obedit)) {
2109 uiBlockBeginAlign(block);
2111 if (ts->snap_flag & SCE_SNAP) {
2112 uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");
2114 uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");
2116 if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) {
2117 uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");
2120 uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SNAP_VERTEX, snapmode_pup(), xco,yco,XIC+10,YIC, &(ts->snap_mode), 0.0, 0.0, 0, 0, "Snapping mode");
2122 uiDefButS(block, MENU, B_NOP, "Snap Mode%t|Closest%x0|Center%x1|Median%x2|Active%x3",xco,yco,70,YIC, &ts->snap_target, 0, 0, 0, 0, "Snap Target Mode");
2125 uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEAR,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");
2129 uiBlockEndAlign(block);
2130 header_xco_step(ar, &xco, &yco, &maxco, 10);
2133 /* selection modus */
2134 if(obedit && (obedit->type == OB_MESH)) {
2135 EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
2137 uiBlockBeginAlign(block);
2138 uiDefIconButBitS(block, TOG, SCE_SELECT_VERTEX, B_SEL_VERT, ICON_VERTEXSEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode (Ctrl Tab 1)");
2140 uiDefIconButBitS(block, TOG, SCE_SELECT_EDGE, B_SEL_EDGE, ICON_EDGESEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Edge select mode (Ctrl Tab 2)");
2142 uiDefIconButBitS(block, TOG, SCE_SELECT_FACE, B_SEL_FACE, ICON_FACESEL, xco,yco,XIC,YIC, &em->selectmode, 1.0, 0.0, 0, 0, "Face select mode (Ctrl Tab 3)");
2144 uiBlockEndAlign(block);
2145 if(v3d->drawtype > OB_WIRE) {
2146 uiDefIconButBitS(block, TOG, V3D_ZBUF_SELECT, B_REDR, ICON_ORTHO, xco,yco,XIC,YIC, &v3d->flag, 1.0, 0.0, 0, 0, "Occlude background geometry");
2149 uiBlockEndAlign(block);
2150 header_xco_step(ar, &xco, &yco, &maxco, XIC);
2152 BKE_mesh_end_editmesh(obedit->data, em);
2154 else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
2155 uiBlockBeginAlign(block);
2156 uiDefIconButBitI(block, TOG, SCE_SELECT_PATH, B_SEL_PATH, ICON_EDGESEL, xco,yco,XIC,YIC, &ts->particle.selectmode, 1.0, 0.0, 0, 0, "Path edit mode");
2158 uiDefIconButBitI(block, TOG, SCE_SELECT_POINT, B_SEL_POINT, ICON_VERTEXSEL, xco,yco,XIC,YIC, &ts->particle.selectmode, 1.0, 0.0, 0, 0, "Point select mode");
2160 uiDefIconButBitI(block, TOG, SCE_SELECT_END, B_SEL_END, ICON_FACESEL, xco,yco,XIC,YIC, &ts->particle.selectmode, 1.0, 0.0, 0, 0, "Tip select mode");
2162 uiBlockEndAlign(block);
2164 if(v3d->drawtype > OB_WIRE) {
2165 uiDefIconButBitS(block, TOG, V3D_ZBUF_SELECT, B_REDR, ICON_ORTHO, xco,yco,XIC,YIC, &v3d->flag, 1.0, 0.0, 0, 0, "Limit selection to visible (clipped with depth buffer)");
2168 uiBlockEndAlign(block);
2169 header_xco_step(ar, &xco, &yco, &maxco, XIC);
2172 uiDefIconBut(block, BUT, B_VIEWRENDER, ICON_SCENE, xco,yco,XIC,YIC, NULL, 0, 1.0, 0, 0, "Render this window (Ctrl Click for anim)");
2174 if (ob && (ob->mode & OB_MODE_POSE)) {
2176 uiBlockBeginAlign(block);
2178 uiDefIconButO(block, BUT, "POSE_OT_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco,yco,XIC,YIC, NULL);
2179 uiBlockSetButLock(block, object_data_is_libdata(ob), "Can't edit external libdata");
2182 uiDefIconButO(block, BUT, "POSE_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco,yco,XIC,YIC, NULL);
2184 // FIXME: this needs an extra arg...
2185 uiDefIconButO(block, BUT, "POSE_OT_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEFLIPDOWN, xco,yco,XIC,YIC, NULL);
2186 uiBlockEndAlign(block);
2187 header_xco_step(ar, &xco, &yco, &maxco, XIC);