Adding back more functionalities for transform orientations.
[blender.git] / release / scripts / ui / space_view3d.py
1
2 import bpy
3
4 # ********** Header **********
5
6 class VIEW3D_HT_header(bpy.types.Header):
7         __space_type__ = 'VIEW_3D'
8
9         def draw(self, context):
10                 layout = self.layout
11                 
12                 view = context.space_data
13                 mode_string = context.mode
14                 edit_object = context.edit_object
15                 object = context.active_object
16                 
17                 row = layout.row(align=True)
18                 row.template_header()
19
20                 # Menus
21                 if context.area.show_menus:
22                         sub = row.row(align=True)
23
24                         sub.itemM("VIEW3D_MT_view")
25                         
26                         # Select Menu
27                         if mode_string not in ('EDIT_TEXT', 'SCULPT', 'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'):
28                                 sub.itemM("VIEW3D_MT_select_%s" % mode_string.lower())
29                         
30                         if edit_object:
31                                 sub.itemM("VIEW3D_MT_edit_%s" % edit_object.type.lower())
32                         elif object:
33                                 ob_mode_string = object.mode
34                                 
35                                 if mode_string not in ['PAINT_WEIGHT', 'PAINT_TEXTURE']:
36                                         sub.itemM("VIEW3D_MT_%s" % mode_string.lower())
37                         else:
38                                 sub.itemM("VIEW3D_MT_object")
39
40                 layout.template_header_3D()
41
42 # ********** Menu **********
43
44 # ********** Utilities **********
45
46 class VIEW3D_MT_showhide(bpy.types.Menu):
47         __space_type__ = 'VIEW_3D'
48         __label__ = "Show/Hide"
49         _operator_name = ""
50
51         def draw(self, context):
52                 layout = self.layout
53                 
54                 layout.itemO("%s.reveal" % self._operator_name, text="Show Hidden")
55                 layout.itemO("%s.hide" % self._operator_name, text="Hide Selected")
56                 layout.item_booleanO("%s.hide" % self._operator_name, "unselected", True, text="Hide Unselected")
57
58 class VIEW3D_MT_snap(bpy.types.Menu):
59         __space_type__ = 'VIEW_3D'
60         __label__ = "Snap"
61
62         def draw(self, context):
63                 layout = self.layout
64                 
65                 layout.itemO("view3d.snap_selected_to_grid", text="Selection to Grid")
66                 layout.itemO("view3d.snap_selected_to_cursor", text="Selection to Cursor")
67                 layout.itemO("view3d.snap_selected_to_center", text="Selection to Center")
68                 
69                 layout.itemS()
70                 
71                 layout.itemO("view3d.snap_cursor_to_selected", text="Cursor to Selected")
72                 layout.itemO("view3d.snap_cursor_to_grid", text="Cursor to Grid")
73                 layout.itemO("view3d.snap_cursor_to_active", text="Cursor to Active")
74
75 # ********** View menus **********
76
77 class VIEW3D_MT_view(bpy.types.Menu):
78         __space_type__ = 'VIEW_3D'
79         __label__ = "View"
80
81         def draw(self, context):
82                 layout = self.layout
83
84                 layout.itemO("view3d.properties", icon='ICON_MENU_PANEL')
85                 layout.itemO("view3d.toolbar", icon='ICON_MENU_PANEL')
86                 
87                 layout.itemS()
88                 
89                 layout.item_enumO("view3d.viewnumpad", "type", 'CAMERA')
90                 layout.item_enumO("view3d.viewnumpad", "type", 'TOP')
91                 layout.item_enumO("view3d.viewnumpad", "type", 'FRONT')
92                 layout.item_enumO("view3d.viewnumpad", "type", 'RIGHT')
93                 
94                 layout.itemM("VIEW3D_MT_view_cameras", text="Cameras")
95                 
96                 layout.itemS()
97                 
98                 layout.itemO("view3d.view_persportho")
99                 
100                 layout.itemS()
101                 
102                 layout.itemM("VIEW3D_MT_view_navigation")
103                 layout.itemM("VIEW3D_MT_view_align")
104                 
105                 layout.itemS()
106
107                 layout.operator_context = "INVOKE_REGION_WIN"
108                 
109                 layout.itemO("view3d.clip_border", text="Clipping Border...")
110                 layout.itemO("view3d.zoom_border", text="Zoom Border...")
111                 
112                 layout.itemS()
113                 
114                 layout.itemO("view3d.view_center")
115                 layout.itemO("view3d.view_all")
116                 
117                 layout.itemS()
118                 
119                 layout.itemO("screen.region_foursplit", text="Toggle Quad View")
120                 layout.itemO("screen.screen_full_area", text="Toggle Full Screen")
121
122 class VIEW3D_MT_view_navigation(bpy.types.Menu):
123         __space_type__ = 'VIEW_3D'
124         __label__ = "Navigation"
125
126         def draw(self, context):
127                 layout = self.layout
128
129                 layout.items_enumO("view3d.view_orbit", "type")
130                 
131                 layout.itemS()
132                 
133                 layout.items_enumO("view3d.view_pan", "type")
134                 
135                 layout.itemS()
136                 
137                 layout.item_floatO("view3d.zoom", "delta", 1.0, text="Zoom In")
138                 layout.item_floatO("view3d.zoom", "delta", -1.0, text="Zoom Out")
139                 
140                 layout.itemS()
141                 
142                 layout.itemO("view3d.fly")
143
144 class VIEW3D_MT_view_align(bpy.types.Menu):
145         __space_type__ = 'VIEW_3D'
146         __label__ = "Align View"
147
148         def draw(self, context):
149                 layout = self.layout
150                 
151                 layout.itemO("view3d.view_center")
152                 
153 class VIEW3D_MT_view_cameras(bpy.types.Menu):
154         __space_type__ = 'VIEW_3D'
155         __label__ = "Cameras"
156
157         def draw(self, context):
158                 layout = self.layout
159
160 # ********** Select menus, suffix from context.mode **********
161
162 class VIEW3D_MT_select_object(bpy.types.Menu):
163         __space_type__ = 'VIEW_3D'
164         __label__ = "Select"
165
166         def draw(self, context):
167                 layout = self.layout
168
169                 layout.itemO("view3d.select_border")
170
171                 layout.itemS()
172
173                 layout.itemO("object.select_all_toggle", text="Select/Deselect All")
174                 layout.itemO("object.select_inverse", text="Inverse")
175                 layout.itemO("object.select_random", text="Random")
176                 layout.itemO("object.select_mirror", text="Mirror")
177                 layout.itemO("object.select_by_layer", text="Select All by Layer")
178                 layout.item_enumO("object.select_by_type", "type", "", text="Select All by Type...")
179                 layout.itemO("object.select_grouped", text="Select Grouped...")
180
181 class VIEW3D_MT_select_pose(bpy.types.Menu):
182         __space_type__ = 'VIEW_3D'
183         __label__ = "Select"
184
185         def draw(self, context):
186                 layout = self.layout
187
188                 layout.itemO("view3d.select_border", text="Border Select...")
189
190                 layout.itemS()
191                 
192                 layout.itemO("pose.select_all_toggle", text="Select/Deselect All")
193                 layout.itemO("pose.select_inverse", text="Inverse")
194                 layout.itemO("pose.select_constraint_target", text="Constraint Target")
195                 layout.itemO("pose.select_linked", text="Linked")
196                 
197                 layout.itemS()
198                 
199                 layout.item_enumO("pose.select_hierarchy", "direction", 'PARENT')
200                 layout.item_enumO("pose.select_hierarchy", "direction", 'CHILD')
201                 
202                 layout.itemS()
203                 
204                 props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Parent")
205                 props.extend = True
206                 props.direction = 'PARENT'
207
208                 props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Child")
209                 props.extend = True
210                 props.direction = 'CHILD'
211
212 class VIEW3D_MT_select_particle(bpy.types.Menu):
213         __space_type__ = 'VIEW_3D'
214         __label__ = "Select"
215
216         def draw(self, context):
217                 layout = self.layout
218
219                 layout.itemO("view3d.select_border")
220
221                 layout.itemS()
222                 
223                 layout.itemO("particle.select_all_toggle", text="Select/Deselect All")
224                 layout.itemO("particle.select_linked")
225                 
226                 layout.itemS()
227                 
228                 layout.itemO("particle.select_more")
229                 layout.itemO("particle.select_less")
230
231 class VIEW3D_MT_select_edit_mesh(bpy.types.Menu):
232         __space_type__ = 'VIEW_3D'
233         __label__ = "Select"
234
235         def draw(self, context):
236                 layout = self.layout
237
238                 layout.itemO("view3d.select_border", text="Border Select...")
239
240                 layout.itemS()
241
242                 layout.itemO("mesh.select_all_toggle", text="Select/Deselect All")
243                 layout.itemO("mesh.select_inverse", text="Inverse")
244
245                 layout.itemS()
246
247                 layout.itemO("mesh.select_random", text="Random...")
248                 layout.itemO("mesh.edges_select_sharp", text="Sharp Edges")
249                 layout.itemO("mesh.faces_select_linked_flat", text="Linked Flat Faces")
250
251                 layout.itemS()
252
253                 layout.item_enumO("mesh.select_by_number_vertices", "type", 'TRIANGLES', text="Triangles")
254                 layout.item_enumO("mesh.select_by_number_vertices", "type", 'QUADS', text="Quads")
255                 layout.item_enumO("mesh.select_by_number_vertices", "type", 'OTHER', text="Loose Verts/Edges")
256                 layout.itemO("mesh.select_similar", text="Similar...")
257
258                 layout.itemS()
259
260                 layout.itemO("mesh.select_less", text="Less")
261                 layout.itemO("mesh.select_more", text="More")
262
263                 layout.itemS()
264
265                 layout.itemO("mesh.select_linked", text="Linked")
266                 layout.itemO("mesh.select_vertex_path", text="Vertex Path")
267                 layout.itemO("mesh.loop_multi_select", text="Edge Loop")
268                 layout.item_booleanO("mesh.loop_multi_select", "ring", True, text="Edge Ring")
269
270                 layout.itemS()
271
272                 layout.itemO("mesh.loop_to_region")
273                 layout.itemO("mesh.region_to_loop")
274
275 class VIEW3D_MT_select_edit_curve(bpy.types.Menu):
276         __space_type__ = 'VIEW_3D'
277         __label__ = "Select"
278
279         def draw(self, context):
280                 layout = self.layout
281
282                 layout.itemO("view3d.select_border", text="Border Select...")
283                 layout.itemO("view3d.select_circle", text="Circle Select...")
284
285                 layout.itemS()
286                 
287                 layout.itemO("curve.select_all_toggle", text="Select/Deselect All")
288                 layout.itemO("curve.select_inverse")
289                 layout.itemO("curve.select_random")
290                 layout.itemO("curve.select_every_nth")
291
292                 layout.itemS()
293                 
294                 layout.itemO("curve.de_select_first")
295                 layout.itemO("curve.de_select_last")
296                 layout.itemO("curve.select_next")
297                 layout.itemO("curve.select_previous")
298
299                 layout.itemS()
300                 
301                 layout.itemO("curve.select_more")
302                 layout.itemO("curve.select_less")
303
304 class VIEW3D_MT_select_edit_surface(bpy.types.Menu):
305         __space_type__ = 'VIEW_3D'
306         __label__ = "Select"
307
308         def draw(self, context):
309                 layout = self.layout
310
311                 layout.itemO("view3d.select_border", text="Border Select...")
312                 layout.itemO("view3d.select_circle", text="Circle Select...")
313
314                 layout.itemS()
315                 
316                 layout.itemO("curve.select_all_toggle", text="Select/Deselect All")
317                 layout.itemO("curve.select_inverse")
318                 layout.itemO("curve.select_random")
319                 layout.itemO("curve.select_every_nth")
320
321                 layout.itemS()
322                 
323                 layout.itemO("curve.select_row")
324
325                 layout.itemS()
326                 
327                 layout.itemO("curve.select_more")
328                 layout.itemO("curve.select_less")
329
330 class VIEW3D_MT_select_edit_metaball(bpy.types.Menu):
331         __space_type__ = 'VIEW_3D'
332         __label__ = "Select"
333
334         def draw(self, context):
335                 layout = self.layout
336
337                 layout.itemO("view3d.select_border")
338                 
339                 layout.itemS()
340                 
341                 layout.itemO("mball.select_deselect_all_metaelems")
342                 layout.itemO("mball.select_inverse_metaelems")
343                 
344                 layout.itemS()
345                 
346                 layout.itemO("mball.select_random_metaelems")
347
348 class VIEW3D_MT_select_edit_lattice(bpy.types.Menu):
349         __space_type__ = 'VIEW_3D'
350         __label__ = "Select"
351
352         def draw(self, context):
353                 layout = self.layout
354
355                 layout.itemO("view3d.select_border")
356
357                 layout.itemS()
358                 
359                 layout.itemO("lattice.select_all_toggle", text="Select/Deselect All")
360
361 class VIEW3D_MT_select_edit_armature(bpy.types.Menu):
362         __space_type__ = 'VIEW_3D'
363         __label__ = "Select"
364
365         def draw(self, context):
366                 layout = self.layout
367
368                 layout.itemO("view3d.select_border", text="Border Select...")
369
370                 layout.itemS()
371                 
372                 layout.itemO("armature.select_all_toggle", text="Select/Deselect All")
373                 layout.itemO("armature.select_inverse", text="Inverse")
374
375                 layout.itemS()
376                 
377                 layout.item_enumO("armature.select_hierarchy", "direction", 'PARENT', text="Parent")
378                 layout.item_enumO("armature.select_hierarchy", "direction", 'CHILD', text="Child")
379                 
380                 layout.itemS()
381                 
382                 props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Parent")
383                 props.extend = True
384                 props.direction = 'PARENT'
385
386                 props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Child")
387                 props.extend = True
388                 props.direction = 'CHILD'
389
390 class VIEW3D_MT_select_face(bpy.types.Menu):# XXX no matching enum
391         __space_type__ = 'VIEW_3D'
392         __label__ = "Select"
393
394         def draw(self, context):
395                 layout = self.layout
396
397                 layout.view3d_select_faceselmenu()
398
399 # ********** Object menu **********
400
401 class VIEW3D_MT_object(bpy.types.Menu):
402         __space_type__ = 'VIEW_3D'
403         __context__ = "objectmode"
404         __label__ = "Object"
405
406         def draw(self, context):
407                 layout = self.layout
408
409                 layout.itemM("VIEW3D_MT_object_clear")
410                 layout.itemM("VIEW3D_MT_snap")
411                 
412                 layout.itemS()
413                 
414                 layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
415                 layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
416                 
417                 layout.itemS()
418                 
419                 layout.itemO("object.duplicate_move")
420                 layout.item_booleanO("object.duplicate", "linked", True, text="Duplicate Linked")
421                 layout.itemO("object.delete", text="Delete...")
422                 layout.itemO("object.proxy_make", text="Make Proxy...")
423                 
424                 layout.itemS()
425                 
426                 layout.itemM("VIEW3D_MT_object_parent")
427                 layout.itemM("VIEW3D_MT_object_track")
428                 layout.itemM("VIEW3D_MT_object_group")
429                 layout.itemM("VIEW3D_MT_object_constraints")
430                 
431                 layout.itemS()
432                 
433                 layout.itemO("object.join")
434                 
435                 layout.itemS()
436                 
437                 layout.itemM("VIEW3D_MT_object_showhide")
438                 
439 class VIEW3D_MT_object_clear(bpy.types.Menu):
440         __space_type__ = 'VIEW_3D'
441         __label__ = "Clear"
442
443         def draw(self, context):
444                 layout = self.layout
445                 
446                 layout.itemO("object.location_clear", text="Location")
447                 layout.itemO("object.rotation_clear", text="Rotation")
448                 layout.itemO("object.scale_clear", text="Scale")
449                 layout.itemO("object.origin_clear", text="Origin")
450                 
451 class VIEW3D_MT_object_parent(bpy.types.Menu):
452         __space_type__ = 'VIEW_3D'
453         __label__ = "Parent"
454
455         def draw(self, context):
456                 layout = self.layout
457                 
458                 layout.itemO("object.parent_set", text="Set")
459                 layout.itemO("object.parent_clear", text="Clear")
460                 
461 class VIEW3D_MT_object_track(bpy.types.Menu):
462         __space_type__ = 'VIEW_3D'
463         __label__ = "Track"
464
465         def draw(self, context):
466                 layout = self.layout
467                 
468                 layout.itemO("object.track_set", text="Set")
469                 layout.itemO("object.track_clear", text="Clear")
470                 
471 class VIEW3D_MT_object_group(bpy.types.Menu):
472         __space_type__ = 'VIEW_3D'
473         __label__ = "Group"
474
475         def draw(self, context):
476                 layout = self.layout
477                 
478                 layout.itemO("group.group_create")
479                 layout.itemO("group.objects_remove")
480                 
481                 layout.itemS()
482                 
483                 layout.itemO("group.objects_add_active")
484                 layout.itemO("group.objects_remove_active")
485                 
486 class VIEW3D_MT_object_constraints(bpy.types.Menu):
487         __space_type__ = 'VIEW_3D'
488         __label__ = "Constraints"
489
490         def draw(self, context):
491                 layout = self.layout
492                 
493                 layout.itemO("object.constraint_add_with_targets")
494                 layout.itemO("object.constraints_clear")
495                 
496 class VIEW3D_MT_object_showhide(bpy.types.Menu):
497         __space_type__ = 'VIEW_3D'
498         __label__ = "Show/Hide"
499
500         def draw(self, context):
501                 layout = self.layout
502                 
503                 layout.itemO("object.restrictview_clear", text="Show Hidden")
504                 layout.itemO("object.restrictview_set", text="Hide Selected")
505                 layout.item_booleanO("object.restrictview_set", "unselected", True, text="Hide Unselected")
506
507 # ********** Vertex paint menu **********       
508         
509 class VIEW3D_MT_paint_vertex(bpy.types.Menu):
510         __space_type__ = 'VIEW_3D'
511         __label__ = "Paint"
512
513         def draw(self, context):
514                 layout = self.layout
515                 
516                 sculpt = context.tool_settings.sculpt
517
518                 layout.itemO("paint.vertex_color_set")
519                 props = layout.itemO("paint.vertex_color_set", text="Set Selected Vertex Colors", properties=True)
520                 props.selected = True
521
522 # ********** Sculpt menu **********     
523         
524 class VIEW3D_MT_sculpt(bpy.types.Menu):
525         __space_type__ = 'VIEW_3D'
526         __label__ = "Sculpt"
527
528         def draw(self, context):
529                 layout = self.layout
530                 
531                 sculpt = context.tool_settings.sculpt
532                 brush = context.tool_settings.sculpt.brush
533                 
534                 layout.itemR(sculpt, "symmetry_x")
535                 layout.itemR(sculpt, "symmetry_y")
536                 layout.itemR(sculpt, "symmetry_z")
537                 layout.itemS()
538                 layout.itemR(sculpt, "lock_x")
539                 layout.itemR(sculpt, "lock_y")
540                 layout.itemR(sculpt, "lock_z")
541                 layout.itemS()
542                 layout.item_menu_enumO("brush.curve_preset", property="shape")
543                 layout.itemS()
544                 
545                 if brush.sculpt_tool != 'GRAB':
546                         layout.itemR(brush, "use_airbrush")
547                         
548                         if brush.sculpt_tool != 'LAYER':
549                                 layout.itemR(brush, "use_anchor")
550                         
551                         if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'):
552                                 layout.itemR(brush, "flip_direction")
553
554                         if brush.sculpt_tool == 'LAYER':
555                                 layout.itemR(brush, "use_persistent")
556                                 layout.itemO("sculpt.set_persistent_base")
557
558 # ********** Particle menu **********   
559         
560 class VIEW3D_MT_particle(bpy.types.Menu):
561         __space_type__ = 'VIEW_3D'
562         __label__ = "Particle"
563
564         def draw(self, context):
565                 layout = self.layout
566                 
567                 particle_edit = context.tool_settings.particle_edit
568                 
569                 layout.itemO("particle.mirror")
570                 
571                 layout.itemS()
572                 
573                 layout.itemO("particle.remove_doubles")
574                 layout.itemO("particle.delete")
575                 
576                 if particle_edit.selection_mode == 'POINT':
577                         layout.itemO("particle.subdivide")
578                 
579                 layout.itemO("particle.rekey")
580                 
581                 layout.itemS()
582                 
583                 layout.itemM("VIEW3D_MT_particle_showhide")
584
585 class VIEW3D_MT_particle_showhide(VIEW3D_MT_showhide):
586         _operator_name = "particle"
587
588 # ********** Pose Menu **********
589
590 class VIEW3D_MT_pose(bpy.types.Menu):
591         __space_type__ = 'VIEW_3D'
592         __label__ = "Pose"
593
594         def draw(self, context):
595                 layout = self.layout
596                 
597                 arm = context.active_object.data
598                 
599                 if arm.drawtype in ('BBONE', 'ENVELOPE'):
600                         layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale Envelope Distance")
601                 
602                 layout.itemM("VIEW3D_MT_pose_transform")
603                 
604                 layout.itemS()
605                 
606                 layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
607                 layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
608                 
609                 layout.itemS()
610                 
611                 layout.itemO("pose.apply")
612                 
613                 layout.itemS()
614                 
615                 layout.itemO("pose.copy")
616                 layout.itemO("pose.paste")
617                 layout.item_booleanO("pose.paste", "flipped", True, text="Paste X-Flipped Pose")
618                 
619                 layout.itemS()
620                 
621                 layout.itemM("VIEW3D_MT_pose_pose")
622                 layout.itemM("VIEW3D_MT_pose_motion")
623                 layout.itemM("VIEW3D_MT_pose_group")
624                 
625                 layout.itemS()
626                 
627                 layout.itemM("VIEW3D_MT_pose_ik")
628                 layout.itemM("VIEW3D_MT_pose_constraints")
629                 
630                 layout.itemS()
631                 
632                 layout.operator_context = "EXEC_AREA"
633                 layout.item_enumO("pose.autoside_names", "axis", 'XAXIS', text="AutoName Left/Right")
634                 layout.item_enumO("pose.autoside_names", "axis", 'YAXIS', text="AutoName Front/Back")
635                 layout.item_enumO("pose.autoside_names", "axis", 'ZAXIS', text="AutoName Top/Bottom")
636                 
637                 layout.itemO("pose.flip_names")
638                 
639                 layout.itemS()
640                 
641                 layout.operator_context = "INVOKE_AREA"
642                 layout.itemO("pose.armature_layers", text="Change Armature Layers...")
643                 layout.itemO("pose.bone_layers", text="Change Bone Layers...")
644                 
645                 layout.itemS()
646                 
647                 layout.itemM("VIEW3D_MT_pose_showhide")
648                 layout.item_menu_enumO("pose.flags_set", 'mode', text="Bone Settings")
649
650 class VIEW3D_MT_pose_transform(bpy.types.Menu):
651         __space_type__ = 'VIEW_3D'
652         __label__ = "Clear Transform"
653
654         def draw(self, context):
655                 layout = self.layout
656                 
657                 layout.itemL(text="User Transform")
658                 
659                 layout.itemO("pose.loc_clear", text="Location")
660                 layout.itemO("pose.rot_clear", text="Rotation")
661                 layout.itemO("pose.scale_clear", text="Scale")
662                 
663                 layout.itemL(text="Origin")
664                 
665 class VIEW3D_MT_pose_pose(bpy.types.Menu):
666         __space_type__ = 'VIEW_3D'
667         __label__ = "Pose Library"
668
669         def draw(self, context):
670                 layout = self.layout
671                 
672                 layout.itemO("poselib.browse_interactive", text="Browse Poses...")
673                 
674                 layout.itemS()
675                 
676                 layout.itemO("poselib.pose_add", text="Add Pose...")
677                 layout.itemO("poselib.pose_rename", text="Rename Pose...")
678                 layout.itemO("poselib.pose_remove", text="Remove Pose...")
679
680 class VIEW3D_MT_pose_motion(bpy.types.Menu):
681         __space_type__ = 'VIEW_3D'
682         __label__ = "Motion Paths"
683
684         def draw(self, context):
685                 layout = self.layout
686                 
687                 layout.itemO("pose.paths_calculate", text="Calculate")
688                 layout.itemO("pose.paths_clear", text="Clear")
689                 
690 class VIEW3D_MT_pose_group(bpy.types.Menu):
691         __space_type__ = 'VIEW_3D'
692         __label__ = "Bone Groups"
693
694         def draw(self, context):
695                 layout = self.layout
696                 layout.itemO("pose.group_add")
697                 layout.itemO("pose.group_remove")
698                 
699                 layout.itemS()
700                 
701                 layout.itemO("pose.group_assign")
702                 layout.itemO("pose.group_unassign")
703                 
704                 
705 class VIEW3D_MT_pose_ik(bpy.types.Menu):
706         __space_type__ = 'VIEW_3D'
707         __label__ = "Inverse Kinematics"
708
709         def draw(self, context):
710                 layout = self.layout
711                 
712                 layout.itemO("pose.ik_add")
713                 layout.itemO("pose.ik_clear")
714                 
715 class VIEW3D_MT_pose_constraints(bpy.types.Menu):
716         __space_type__ = 'VIEW_3D'
717         __label__ = "Constraints"
718
719         def draw(self, context):
720                 layout = self.layout
721                 
722                 layout.itemO("pose.constraint_add_with_targets", text="Add (With Targets)...")
723                 layout.itemO("pose.constraints_clear")
724                 
725 class VIEW3D_MT_pose_showhide(VIEW3D_MT_showhide):
726         _operator_name = "pose"
727
728 # ********** Edit Menus, suffix from ob.type **********
729
730 # Edit MESH
731 class VIEW3D_MT_edit_mesh(bpy.types.Menu):
732         __space_type__ = 'VIEW_3D'
733         __label__ = "Mesh"
734
735         def draw(self, context):
736                 layout = self.layout
737                 
738                 settings = context.tool_settings
739
740                 layout.itemO("ed.undo")
741                 layout.itemO("ed.redo")
742                 
743                 layout.itemS()
744                 
745                 layout.itemM("VIEW3D_MT_snap")
746                 
747                 layout.itemS()
748                 
749                 layout.itemO("uv.mapping_menu", text="UV Unwrap...")
750                 
751                 layout.itemS()
752                 
753                 layout.itemO("mesh.extrude")
754                 layout.itemO("mesh.duplicate")
755                 layout.itemO("mesh.delete", text="Delete...")
756                 
757                 layout.itemS()
758                 
759                 layout.itemM("VIEW3D_MT_edit_mesh_vertices")
760                 layout.itemM("VIEW3D_MT_edit_mesh_edges")
761                 layout.itemM("VIEW3D_MT_edit_mesh_faces")
762                 layout.itemM("VIEW3D_MT_edit_mesh_normals")
763                 
764                 layout.itemS()
765                 
766                 layout.itemR(settings, "automerge_editing")
767                 layout.itemR(settings, "proportional_editing")
768                 layout.item_menu_enumR(settings, "proportional_editing_falloff")
769                 
770                 layout.itemS()
771                 
772                 layout.itemM("VIEW3D_MT_edit_mesh_showhide")
773
774 class VIEW3D_MT_edit_mesh_vertices(bpy.types.Menu):
775         __space_type__ = 'VIEW_3D'
776         __label__ = "Vertices"
777
778         def draw(self, context):
779                 layout = self.layout
780                 
781                 layout.itemO("mesh.merge")
782                 layout.itemO("mesh.rip")
783                 layout.itemO("mesh.split")
784                 layout.itemO("mesh.separate")
785
786                 layout.itemS()
787                 
788                 layout.itemO("mesh.vertices_smooth")
789                 layout.itemO("mesh.remove_doubles")
790
791 class VIEW3D_MT_edit_mesh_edges(bpy.types.Menu):
792         __space_type__ = 'VIEW_3D'
793         __label__ = "Edges"
794
795         def draw(self, context):
796                 layout = self.layout
797
798                 layout.itemO("mesh.edge_face_add")
799                 layout.itemO("mesh.subdivide")
800
801                 layout.itemS()
802                 
803                 layout.itemO("mesh.mark_seam")
804                 layout.item_booleanO("mesh.mark_seam", "clear", True, text="Clear Seam")
805                 
806                 layout.itemS()
807                 
808                 layout.itemO("mesh.mark_sharp")
809                 layout.item_booleanO("mesh.mark_sharp", "clear", True, text="Clear Sharp")
810                 
811                 layout.itemS()
812                 
813                 layout.item_enumO("mesh.edge_rotate", "direction", 'CW', text="Rotate Edge CW")
814                 layout.item_enumO("mesh.edge_rotate", "direction", 'CCW', text="Rotate Edge CCW")
815
816 class VIEW3D_MT_edit_mesh_faces(bpy.types.Menu):
817         __space_type__ = 'VIEW_3D'
818         __label__ = "Faces"
819
820         def draw(self, context):
821                 layout = self.layout
822
823                 layout.itemO("mesh.edge_face_add")
824                 layout.itemO("mesh.fill")
825                 layout.itemO("mesh.beauty_fill")
826
827                 layout.itemS()
828                 
829                 layout.itemO("mesh.quads_convert_to_tris")
830                 layout.itemO("mesh.tris_convert_to_quads")
831                 layout.itemO("mesh.edge_flip")
832                 
833                 layout.itemS()
834                 
835                 layout.itemO("mesh.faces_shade_smooth")
836                 layout.itemO("mesh.faces_shade_flat")
837
838 class VIEW3D_MT_edit_mesh_normals(bpy.types.Menu):
839         __space_type__ = 'VIEW_3D'
840         __label__ = "Normals"
841
842         def draw(self, context):
843                 layout = self.layout
844
845                 layout.itemO("mesh.normals_make_consistent", text="Recalculate Outside")
846                 layout.item_booleanO("mesh.normals_make_consistent", "inside", True, text="Recalculate Inside")
847
848                 layout.itemS()
849                 
850                 layout.itemO("mesh.flip_normals")
851                 
852 class VIEW3D_MT_edit_mesh_showhide(VIEW3D_MT_showhide):
853         _operator_name = "mesh"
854
855 # Edit Curve
856
857 # draw_curve is used by VIEW3D_MT_edit_curve and VIEW3D_MT_edit_surface
858 def draw_curve(self, context):
859         layout = self.layout
860         
861         settings = context.tool_settings
862         
863         layout.itemM("VIEW3D_MT_snap")
864         
865         layout.itemS()
866         
867         layout.itemO("curve.extrude")
868         layout.itemO("curve.duplicate")
869         layout.itemO("curve.separate")
870         layout.itemO("curve.make_segment")
871         layout.itemO("curve.cyclic_toggle")
872         layout.itemO("curve.delete", text="Delete...")
873         
874         layout.itemS()
875         
876         layout.itemM("VIEW3D_MT_edit_curve_ctrlpoints")
877         layout.itemM("VIEW3D_MT_edit_curve_segments")
878         
879         layout.itemS()
880         
881         layout.itemR(settings, "proportional_editing")
882         layout.item_menu_enumR(settings, "proportional_editing_falloff")
883         
884         layout.itemS()
885         
886         layout.itemM("VIEW3D_MT_edit_curve_showhide")
887
888 class VIEW3D_MT_edit_curve(bpy.types.Menu):
889         __space_type__ = 'VIEW_3D'
890         __label__ = "Curve"
891
892         draw = draw_curve
893         
894 class VIEW3D_MT_edit_curve_ctrlpoints(bpy.types.Menu):
895         __space_type__ = 'VIEW_3D'
896         __label__ = "Control Points"
897
898         def draw(self, context):
899                 layout = self.layout
900                 
901                 edit_object = context.edit_object
902                 
903                 if edit_object.type == 'CURVE':
904                         layout.item_enumO("tfm.transform", "mode", 'TILT')
905                         layout.itemO("curve.tilt_clear")
906                         layout.itemO("curve.separate")
907                         
908                         layout.itemS()
909                         
910                         layout.item_menu_enumO("curve.handle_type_set", "type")
911                 
912 class VIEW3D_MT_edit_curve_segments(bpy.types.Menu):
913         __space_type__ = 'VIEW_3D'
914         __label__ = "Segments"
915
916         def draw(self, context):
917                 layout = self.layout
918                 
919                 layout.itemO("curve.subdivide")
920                 layout.itemO("curve.switch_direction")
921
922 class VIEW3D_MT_edit_curve_showhide(VIEW3D_MT_showhide):
923         _operator_name = "curve"
924
925 # Edit SURFACE
926 class VIEW3D_MT_edit_surface(bpy.types.Menu):
927         __space_type__ = 'VIEW_3D'
928         __label__ = "Surface"
929
930         draw = draw_curve
931
932 # Edit TEXT
933 class VIEW3D_MT_edit_text(bpy.types.Menu):
934         __space_type__ = 'VIEW_3D'
935         __label__ = "Text"
936
937         def draw(self, context):
938                 layout = self.layout
939                 
940                 layout.itemO("font.file_paste")
941                 
942                 layout.itemS()
943                 
944                 layout.itemm("view3d_mt_edit_text_chars")
945
946 class VIEW3D_MT_edit_text_chars(bpy.types.Menu):
947         __space_type__ = 'VIEW_3D'
948         __label__ = "Special Characters"
949
950         def draw(self, context):
951                 layout = self.layout
952                 
953                 layout.item_stringO("font.text_insert", "text", b'\xC2\xA9'.decode(), text="Copyright|Alt C")
954                 layout.item_stringO("font.text_insert", "text", b'\xC2\xAE'.decode(), text="Registered Trademark|Alt R")
955                 
956                 layout.itemS()
957                 
958                 layout.item_stringO("font.text_insert", "text", b'\xC2\xB0'.decode(), text="Degree Sign|Alt G")
959                 layout.item_stringO("font.text_insert", "text", b'\xC3\x97'.decode(), text="Multiplication Sign|Alt x")
960                 layout.item_stringO("font.text_insert", "text", b'\xC2\x8A'.decode(), text="Circle|Alt .")
961                 layout.item_stringO("font.text_insert", "text", b'\xC2\xB9'.decode(), text="Superscript 1|Alt 1")
962                 layout.item_stringO("font.text_insert", "text", b'\xC2\xB2'.decode(), text="Superscript 2|Alt 2")
963                 layout.item_stringO("font.text_insert", "text", b'\xC2\xB3'.decode(), text="Superscript 3|Alt 3")
964                 layout.item_stringO("font.text_insert", "text", b'\xC2\xBB'.decode(), text="Double >>|Alt >")
965                 layout.item_stringO("font.text_insert", "text", b'\xC2\xAB'.decode(), text="Double <<|Alt <")
966                 layout.item_stringO("font.text_insert", "text", b'\xE2\x80\xB0'.decode(), text="Promillage|Alt %")
967                 
968                 layout.itemS()
969                 
970                 layout.item_stringO("font.text_insert", "text", b'\xC2\xA4'.decode(), text="Dutch Florin|Alt F")
971                 layout.item_stringO("font.text_insert", "text", b'\xC2\xA3'.decode(), text="British Pound|Alt L")
972                 layout.item_stringO("font.text_insert", "text", b'\xC2\xA5'.decode(), text="Japanese Yen|Alt Y")
973                 
974                 layout.itemS()
975                 
976                 layout.item_stringO("font.text_insert", "text", b'\xC3\x9F'.decode(), text="German S|Alt S")
977                 layout.item_stringO("font.text_insert", "text", b'\xC2\xBF'.decode(), text="Spanish Question Mark|Alt ?")
978                 layout.item_stringO("font.text_insert", "text", b'\xC2\xA1'.decode(), text="Spanish Exclamation Mark|Alt !")
979
980 # Edit META
981 class VIEW3D_MT_edit_meta(bpy.types.Menu):
982         __space_type__ = 'VIEW_3D'
983         __label__ = "Metaball"
984
985         def draw(self, context):
986                 layout = self.layout
987                 
988                 settings = context.tool_settings
989
990                 layout.itemO("ed.undo")
991                 layout.itemO("ed.redo")
992                 
993                 layout.itemS()
994                 
995                 layout.itemM("VIEW3D_MT_snap")
996                 
997                 layout.itemS()
998                 
999                 layout.itemO("mball.delete_metaelems", text="Delete...")
1000                 layout.itemO("mball.duplicate_metaelems")
1001                 
1002                 layout.itemS()
1003                 
1004                 layout.itemR(settings, "proportional_editing")
1005                 layout.item_menu_enumR(settings, "proportional_editing_falloff")
1006                 
1007                 layout.itemS()
1008                 
1009                 layout.itemM("VIEW3D_MT_edit_meta_showhide")
1010
1011 class VIEW3D_MT_edit_meta_showhide(bpy.types.Menu):
1012         __space_type__ = 'VIEW_3D'
1013         __label__ = "Show/Hide"
1014
1015         def draw(self, context):
1016                 layout = self.layout
1017                 
1018                 layout.itemO("mball.reveal_metaelems", text="Show Hidden")
1019                 layout.itemO("mball.hide_metaelems", text="Hide Selected")
1020                 layout.item_booleanO("mball.hide_metaelems", "unselected", True, text="Hide Unselected")
1021
1022 # Edit LATTICE
1023 class VIEW3D_MT_edit_lattice(bpy.types.Menu):
1024         __space_type__ = 'VIEW_3D'
1025         __label__ = "Lattice"
1026
1027         def draw(self, context):
1028                 layout = self.layout
1029                 
1030                 settings = context.tool_settings
1031
1032                 layout.itemM("VIEW3D_MT_snap")
1033                 
1034                 layout.itemS()
1035                 
1036                 layout.itemO("lattice.make_regular")
1037                 
1038                 layout.itemS()
1039                 
1040                 layout.itemR(settings, "proportional_editing")
1041                 layout.item_menu_enumR(settings, "proportional_editing_falloff")
1042
1043 # Edit ARMATURE
1044 class VIEW3D_MT_edit_armature(bpy.types.Menu):
1045         __space_type__ = 'VIEW_3D'
1046         __label__ = "Armature"
1047
1048         def draw(self, context):
1049                 layout = self.layout
1050                 
1051                 edit_object = context.edit_object
1052                 arm = edit_object.data
1053                 
1054                 layout.itemM("VIEW3D_MT_snap")
1055                 layout.itemM("VIEW3D_MT_edit_armature_roll")
1056                 
1057                 if arm.drawtype == 'ENVELOPE':
1058                         layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale Envelope Distance")
1059                 else:
1060                         layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale B-Bone Width")
1061                                 
1062                 layout.itemS()
1063                 
1064                 layout.itemO("armature.extrude")
1065                 
1066                 if arm.x_axis_mirror:
1067                         layout.item_booleanO("armature.extrude", "forked", True, text="Extrude Forked")
1068                 
1069                 layout.itemO("armature.duplicate")
1070                 layout.itemO("armature.merge")
1071                 layout.itemO("armature.fill")
1072                 layout.itemO("armature.delete")
1073                 layout.itemO("armature.separate")
1074
1075                 layout.itemS()
1076
1077                 layout.itemO("armature.subdivide_multi", text="Subdivide")
1078                 
1079                 layout.itemS()
1080                 
1081                 layout.operator_context = "EXEC_AREA"
1082                 layout.item_enumO("armature.autoside_names", "type", 'XAXIS', text="AutoName Left/Right")
1083                 layout.item_enumO("armature.autoside_names", "type", 'YAXIS', text="AutoName Front/Back")
1084                 layout.item_enumO("armature.autoside_names", "type", 'ZAXIS', text="AutoName Top/Bottom")
1085                 layout.itemO("armature.flip_names")
1086
1087                 layout.itemS()
1088                 
1089                 layout.operator_context = "INVOKE_DEFAULT"
1090                 layout.itemO("armature.armature_layers")
1091                 layout.itemO("armature.bone_layers")
1092
1093                 layout.itemS()
1094
1095                 layout.itemM("VIEW3D_MT_edit_armature_parent")
1096
1097                 layout.itemS()
1098                 
1099                 layout.item_menu_enumO("armature.flags_set", "mode", text="Bone Settings")
1100
1101 class VIEW3D_MT_edit_armature_parent(bpy.types.Menu):
1102         __space_type__ = 'VIEW_3D'
1103         __label__ = "Parent"
1104
1105         def draw(self, context):
1106                 layout = self.layout
1107                 
1108                 layout.itemO("armature.parent_set", text="Make")
1109                 layout.itemO("armature.parent_clear", text="Clear")
1110
1111 class VIEW3D_MT_edit_armature_roll(bpy.types.Menu):
1112         __space_type__ = 'VIEW_3D'
1113         __label__ = "Bone Roll"
1114
1115         def draw(self, context):
1116                 layout = self.layout
1117                 
1118                 layout.item_enumO("armature.calculate_roll", "type", 'GLOBALUP', text="Clear Roll (Z-Axis Up)")
1119                 layout.item_enumO("armature.calculate_roll", "type", 'CURSOR', text="Roll to Cursor")
1120                 
1121                 layout.itemS()
1122                 
1123                 layout.item_enumO("tfm.transform", "mode", 'BONE_ROLL', text="Set Roll")
1124
1125 # ********** Panel **********
1126
1127 class VIEW3D_PT_3dview_properties(bpy.types.Panel):
1128         __space_type__ = 'VIEW_3D'
1129         __region_type__ = 'UI'
1130         __label__ = "View"
1131
1132         def poll(self, context):
1133                 view = context.space_data
1134                 return (view)
1135
1136         def draw(self, context):
1137                 layout = self.layout
1138                 
1139                 view = context.space_data
1140                 scene = context.scene
1141                 
1142                 col = layout.column()
1143                 col.itemL(text="Camera:")
1144                 col.itemR(view, "camera", text="")
1145                 col.itemR(view, "lens")
1146                 
1147                 col = layout.column(align=True)
1148                 col.itemL(text="Clip:")
1149                 col.itemR(view, "clip_start", text="Start")
1150                 col.itemR(view, "clip_end", text="End")
1151                 
1152                 col = layout.column(align=True)
1153                 col.itemL(text="Grid:")
1154                 col.itemR(view, "grid_lines", text="Lines")
1155                 col.itemR(view, "grid_spacing", text="Spacing")
1156                 col.itemR(view, "grid_subdivisions", text="Subdivisions")
1157                 
1158                 layout.column().itemR(scene, "cursor_location", text="3D Cursor:")
1159                 
1160 class VIEW3D_PT_3dview_display(bpy.types.Panel):
1161         __space_type__ = 'VIEW_3D'
1162         __region_type__ = 'UI'
1163         __label__ = "Display"
1164         __default_closed__ = True
1165         
1166         def poll(self, context):
1167                 view = context.space_data
1168                 return (view)
1169
1170         def draw(self, context):
1171                 layout = self.layout
1172                 view = context.space_data
1173                 
1174                 col = layout.column()
1175                 col.itemR(view, "display_floor", text="Grid Floor")
1176                 col.itemR(view, "display_x_axis", text="X Axis")
1177                 col.itemR(view, "display_y_axis", text="Y Axis")
1178                 col.itemR(view, "display_z_axis", text="Z Axis")
1179                 col.itemR(view, "outline_selected")
1180                 col.itemR(view, "all_object_centers")
1181                 col.itemR(view, "relationship_lines")
1182                 col.itemR(view, "textured_solid")
1183                 
1184                 layout.itemS()
1185                 
1186                 layout.itemO("screen.region_foursplit", text="Toggle Quad View")
1187                 
1188                 col = layout.column()
1189                 col.itemR(view, "lock_rotation")
1190                 col.itemR(view, "box_preview")
1191                 col.itemR(view, "box_clip")
1192
1193 class VIEW3D_PT_3dview_meshdisplay(bpy.types.Panel):
1194         __space_type__ = 'VIEW_3D'
1195         __region_type__ = 'UI'
1196         __label__ = "Mesh Display"
1197
1198         def poll(self, context):
1199                 editmesh = context.mode == 'EDIT_MESH'
1200                 return (editmesh)
1201
1202         def draw(self, context):
1203                 layout = self.layout
1204
1205                 mesh = context.active_object.data
1206                 
1207                 col = layout.column()
1208                 col.itemL(text="Overlays:")
1209                 col.itemR(mesh, "draw_edges", text="Edges")
1210                 col.itemR(mesh, "draw_faces", text="Faces")
1211                 col.itemR(mesh, "draw_creases", text="Creases")
1212                 col.itemR(mesh, "draw_bevel_weights", text="Bevel Weights")
1213                 col.itemR(mesh, "draw_seams", text="Seams")
1214                 col.itemR(mesh, "draw_sharp", text="Sharp")
1215                 
1216                 col.itemS()
1217                 col.itemL(text="Normals:")
1218                 col.itemR(mesh, "draw_normals", text="Face")
1219                 col.itemR(mesh, "draw_vertex_normals", text="Vertex")
1220                 col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
1221                 
1222                 col.itemS()
1223                 col.itemL(text="Numerics:")
1224                 col.itemR(mesh, "draw_edge_lenght")
1225                 col.itemR(mesh, "draw_edge_angle")
1226                 col.itemR(mesh, "draw_face_area")
1227
1228
1229 class VIEW3D_PT_3dview_curvedisplay(bpy.types.Panel):
1230         __space_type__ = 'VIEW_3D'
1231         __region_type__ = 'UI'
1232         __label__ = "Curve Display"
1233
1234         def poll(self, context):
1235                 editmesh = context.mode == 'EDIT_CURVE'
1236                 return (editmesh)
1237
1238         def draw(self, context):
1239                 layout = self.layout
1240
1241                 curve = context.active_object.data
1242                 
1243                 col = layout.column()
1244                 col.itemL(text="Overlays:")
1245                 col.itemR(curve, "draw_handles", text="Handles")
1246                 col.itemR(curve, "draw_normals", text="Normals")
1247                 col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
1248                 
1249         
1250 class VIEW3D_PT_background_image(bpy.types.Panel):
1251         __space_type__ = 'VIEW_3D'
1252         __region_type__ = 'UI'
1253         __label__ = "Background Image"
1254         __default_closed__ = True
1255
1256         def poll(self, context):
1257                 view = context.space_data
1258                 bg = context.space_data.background_image
1259                 return (view)
1260
1261         def draw_header(self, context):
1262                 layout = self.layout
1263                 view = context.space_data
1264
1265                 layout.itemR(view, "display_background_image", text="")
1266
1267         def draw(self, context):
1268                 layout = self.layout
1269                 
1270                 view = context.space_data
1271                 bg = view.background_image
1272
1273                 if bg:
1274                         layout.active = view.display_background_image
1275
1276                         col = layout.column()
1277                         col.itemR(bg, "image", text="")
1278                         #col.itemR(bg, "image_user")
1279                         col.itemR(bg, "size")
1280                         col.itemR(bg, "transparency", slider=True)
1281                         
1282                         
1283                         col = layout.column(align=True)
1284                         col.itemL(text="Offset:")
1285                         col.itemR(bg, "offset_x", text="X")
1286                         col.itemR(bg, "offset_y", text="Y")
1287
1288 class VIEW3D_PT_transform_orientations(bpy.types.Panel):
1289         __space_type__ = 'VIEW_3D'
1290         __region_type__ = 'UI'
1291         __label__ = "Transform Orientations"
1292         __default_closed__ = True
1293
1294         def poll(self, context):
1295                 view = context.space_data
1296                 return (view)
1297
1298         def draw(self, context):
1299                 layout = self.layout
1300                 
1301                 view = context.space_data
1302
1303                 col = layout.column()
1304                 col.itemO("TFM_OT_select_orientation", text="Select")
1305                 col.itemO("TFM_OT_create_orientation", text="Create")
1306                 col.itemO("TFM_OT_delete_orientation", text="Delete")
1307                         
1308 bpy.types.register(VIEW3D_HT_header) # Header
1309
1310 bpy.types.register(VIEW3D_MT_view) #View Menus
1311 bpy.types.register(VIEW3D_MT_view_navigation)
1312 bpy.types.register(VIEW3D_MT_view_align)
1313 bpy.types.register(VIEW3D_MT_view_cameras)
1314
1315 bpy.types.register(VIEW3D_MT_select_object) # Select Menus
1316 bpy.types.register(VIEW3D_MT_select_pose)
1317 bpy.types.register(VIEW3D_MT_select_particle)
1318 bpy.types.register(VIEW3D_MT_select_edit_mesh)
1319 bpy.types.register(VIEW3D_MT_select_edit_curve)
1320 bpy.types.register(VIEW3D_MT_select_edit_surface)
1321 bpy.types.register(VIEW3D_MT_select_edit_metaball)
1322 bpy.types.register(VIEW3D_MT_select_edit_lattice)
1323 bpy.types.register(VIEW3D_MT_select_edit_armature)
1324 bpy.types.register(VIEW3D_MT_select_face) # XXX todo
1325
1326 bpy.types.register(VIEW3D_MT_object) # Object Menu
1327 bpy.types.register(VIEW3D_MT_object_clear)
1328 bpy.types.register(VIEW3D_MT_object_parent)
1329 bpy.types.register(VIEW3D_MT_object_track)
1330 bpy.types.register(VIEW3D_MT_object_group)
1331 bpy.types.register(VIEW3D_MT_object_constraints)
1332 bpy.types.register(VIEW3D_MT_object_showhide)
1333
1334 bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
1335
1336 bpy.types.register(VIEW3D_MT_paint_vertex)
1337
1338 bpy.types.register(VIEW3D_MT_particle) # Particle Menu
1339 bpy.types.register(VIEW3D_MT_particle_showhide)
1340
1341 bpy.types.register(VIEW3D_MT_pose) # POSE Menu
1342 bpy.types.register(VIEW3D_MT_pose_transform)
1343 bpy.types.register(VIEW3D_MT_pose_pose)
1344 bpy.types.register(VIEW3D_MT_pose_motion)
1345 bpy.types.register(VIEW3D_MT_pose_group)
1346 bpy.types.register(VIEW3D_MT_pose_ik)
1347 bpy.types.register(VIEW3D_MT_pose_constraints)
1348 bpy.types.register(VIEW3D_MT_pose_showhide)
1349
1350 bpy.types.register(VIEW3D_MT_snap) # Edit Menus
1351
1352 bpy.types.register(VIEW3D_MT_edit_mesh)
1353 bpy.types.register(VIEW3D_MT_edit_mesh_vertices)
1354 bpy.types.register(VIEW3D_MT_edit_mesh_edges)
1355 bpy.types.register(VIEW3D_MT_edit_mesh_faces)
1356 bpy.types.register(VIEW3D_MT_edit_mesh_normals)
1357 bpy.types.register(VIEW3D_MT_edit_mesh_showhide)
1358
1359 bpy.types.register(VIEW3D_MT_edit_curve)
1360 bpy.types.register(VIEW3D_MT_edit_curve_ctrlpoints)
1361 bpy.types.register(VIEW3D_MT_edit_curve_segments)
1362 bpy.types.register(VIEW3D_MT_edit_curve_showhide)
1363
1364 bpy.types.register(VIEW3D_MT_edit_surface)
1365
1366 bpy.types.register(VIEW3D_MT_edit_text)
1367 bpy.types.register(VIEW3D_MT_edit_text_chars)
1368
1369 bpy.types.register(VIEW3D_MT_edit_meta)
1370 bpy.types.register(VIEW3D_MT_edit_meta_showhide)
1371
1372 bpy.types.register(VIEW3D_MT_edit_lattice)
1373
1374 bpy.types.register(VIEW3D_MT_edit_armature)
1375 bpy.types.register(VIEW3D_MT_edit_armature_parent)
1376 bpy.types.register(VIEW3D_MT_edit_armature_roll)
1377
1378 bpy.types.register(VIEW3D_PT_3dview_properties) # Panels
1379 bpy.types.register(VIEW3D_PT_3dview_display)
1380 bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
1381 bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
1382 bpy.types.register(VIEW3D_PT_background_image)
1383 bpy.types.register(VIEW3D_PT_transform_orientations)