Prologue

Now that we’ve covered the basics of writing a working addon and making it installable, let’s add some refinements to its functionality.

To start with, users normally add new objects via the Add menu which pops up when pressing  SHIFT + A , rather than via a custom panel. Can our script add a new “Tetrahedron” item to that menu? Yes it can.

Also, our script currently requires us to adjust its setting (the “Upside-Down” checkbox) before it performs its action. In user-interface parlance, this is the ordering “Object→Setting→Action”: select an object, specify the settings for the action, then perform the action. Whereas the preferred order in Blender 2.5x is “Object→Action→Setting”: which means the action is performed with some initial settings, which the user is then free to modify while observing their effect. This gives a much smoother workflow, rather than the user having to guess what the effects will be before applying them, and then undoing and trying again if they guessed wrong.

(Of course, since our example script creates a new object rather than modifying an existing one, the initial “Object” step is not relevant here. But it is to other operators.)

So the modifications we need to make to our script are:

  • Get rid of the existing Panel subclass.
  • Our register function will add a new entry to the Add menu (specifically, the mesh-add submenu) to invoke our Operator subclass.
  • When our operator is invoked, a panel will appear, with all the settings controls we previously had, except for the “Add” button. The user can play with these settings, and observe the effect on the newly-created object immediately.

The nice thing is, Blender does most of the hard work for us, so we only need to edit a few lines of code to achieve all the above!

Adding To The Add Menu

This needs to be done in two steps. First we need a function which will be invoked when Blender creates its Add menu: this will add an entry that invokes our custom operator by its name. Specifically, we will add our custom item to the “Mesh” submenu of the “Add” menu. We can also assign an icon to the menu item; here I’m using the generic plugin icon:

def add_to_menu(self, context) :
    self.layout.operator("mesh.make_tetrahedron", icon = "PLUGIN")
#end add_to_menu
# version 2.72b only allows for the icon value from the set:
# ("NONE", "QUESTION", "ERROR", "CANCEL", "TRIA_RIGHT", "TRIA_DOWN", 
#  "TRIA_LEFT", "TRIA_UP", "ARROW_LEFTRIGHT", "PLUS", "DISCLOSURE_TRI_DOWN", 
#  "DISCLOSURE_TRI_RIGHT", "RADIOBUT_OFF", "RADIOBUT_ON", "MENU")

Having done that, we change our register function to add our add_to_menu item to a list that Blender uses to create its Add→Mesh menu:

def register() :
    bpy.utils.register_class(MakeTetrahedron)
    bpy.types.INFO_MT_mesh_add.append(add_to_menu)
#end register

Note this bpy.types.INFO_MT_mesh_add object is not currently mentioned in the API documentation; I found it by examining the scripts that come bundled with Blender.

And of course we should clean up ourselves, so the unregister function needs to remove the item we added:

def unregister() :
    bpy.utils.unregister_class(MakeTetrahedron)
    bpy.types.INFO_MT_mesh_add.remove(add_to_menu)
#end unregister

Fixing Up The UI

Note that previously, our register and unregister functions were attaching a custom property to Blender’s Scene class to hold our setting value. That code is now gone, but we still need the property. Instead, it will now be attached directly to our MakeTetrahedron class.

Also, remember we said we were getting rid of the TetrahedronMakerPanel class? In fact we keep the draw method from that, and move it to our MakeTetrahedron operator, only getting rid of the last button in the panel for invoking the operator. This is because by the time the panel is being drawn, the operator has already been invoked.

We also need to tell Blender that we are conforming to the Object→Action→Settings convention, by adding the "REGISTER" item to our bl_options.

So the header of our operator class now looks like this:

class MakeTetrahedron(bpy.types.Operator) :
    bl_idname = "mesh.make_tetrahedron"
    bl_label = "Tetrahedron"
    bl_options = {"REGISTER", "UNDO"}

    inverted = bpy.props.BoolProperty \
      (
        name = "Upside Down",
        description = "Generate the tetrahedron upside down",
        default = False
      )

    def draw(self, context) :
        TheCol = self.layout.column(align = True)
        TheCol.prop(self, "inverted")
    #end draw

Previously our custom property was called make_tetrahedron_inverted, but here I just call it inverted, because after all it is being attached to our own class, so there should be no worry about name clashes.

Note that I also changed the bl_label text, taking out the word “Add”. This is redundant, because our label will be appearing in a menu that is already titled “Add”.

invoke Versus execute

The last thing to do is rearrange the code for actually creating the tetrahedron object. Previously we had it in a method called invoke, and that method will still be called when our operator is selected from the Add→Mesh menu. Then our draw method will be called, so our panel will also appear. But then, if the user makes adjustments to the controls in our panel, Blender will invoke a different operator method, called execute.

To the user, it looks like they are making adjustments to an already-created object. But in fact our execute method can do exactly the same thing as invoke, namely create a new object every time it’s called! Blender will take care of getting rid of previously-created objects, so the user won’t know the difference.

Nice, isn’t it? But in order for this to work, our code needs to do one thing more: ensure that our newly-created object is the only selected, active object. So the following is added after NewObj has been created and linked into the scene:

        bpy.ops.object.select_all(action = "DESELECT")
        NewObj.select = True
        context.scene.objects.active = NewObj

Put It All Together

Note that the object-creation code has been moved into a common routine that I have called action_common. This can then be called from both the invoke and execute methods.

import math
import bpy
import mathutils

class MakeTetrahedron(bpy.types.Operator) :
    bl_idname = "mesh.make_tetrahedron"
    bl_label = "Tetrahedron"
    bl_options = {"REGISTER", "UNDO"}

    inverted = bpy.props.BoolProperty \
      (
        name = "Upside Down",
        description = "Generate the tetrahedron upside down",
        default = False
      )

    def draw(self, context) :
        TheCol = self.layout.column(align = True)
        TheCol.prop(self, "inverted")
    #end draw

    def action_common(self, context) :
        Scale = -1 if self.inverted else 1
        Vertices = \
          [
            mathutils.Vector((0, -1 / math.sqrt(3),0)),
            mathutils.Vector((0.5, 1 / (2 * math.sqrt(3)), 0)),
            mathutils.Vector((-0.5, 1 / (2 * math.sqrt(3)), 0)),
            mathutils.Vector((0, 0, Scale * math.sqrt(2 / 3))),
          ]
        NewMesh = bpy.data.meshes.new("Tetrahedron")
        NewMesh.from_pydata \
          (
            Vertices,
            [],
            [[0, 1, 2], [0, 1, 3], [1, 2, 3], [2, 0, 3]]
          )
        NewMesh.update()
        NewObj = bpy.data.objects.new("Tetrahedron", NewMesh)
        context.scene.objects.link(NewObj)
        bpy.ops.object.select_all(action = "DESELECT")
        NewObj.select = True
        context.scene.objects.active = NewObj
    #end action_common

    def execute(self, context) :
        self.action_common(context)
        return {"FINISHED"}
    #end execute

    def invoke(self, context, event) :
        self.action_common(context)
        return {"FINISHED"}
    #end invoke

#end MakeTetrahedron

def add_to_menu(self, context) :
    self.layout.operator("mesh.make_tetrahedron", icon = "PLUGIN")
#end add_to_menu

def register() :
    bpy.utils.register_class(MakeTetrahedron)
    bpy.types.INFO_MT_mesh_add.append(add_to_menu)
#end register

def unregister() :
    bpy.utils.unregister_class(MakeTetrahedron)
    bpy.types.INFO_MT_mesh_add.remove(add_to_menu)
#end unregister

if __name__ == "__main__" :
    register()
#end if

Undocumented Blender

That INFO_MT_mesh_add object is one of a bunch of undocumented things lurking in the bpy.types module. They all have names of the form prefix_type_restofname, where prefix is an all-uppercase mnemonic for the category of object (mostly a window type, e.g. INFO for the Info window, which is where the main menu bar appears, though there are also names for major object categories like MESH and LAMP), and type indicates the class of object: HT for a window header UI object (bpy.types.Header), MT for a menu (bpy.types.Menu), OT for an operator, and PT for a panel (bpy.types.Panel). The OT ones seem to correspond directly to objects in bpy.ops, but at a lower level; it’s probably easier just to use the official bpy.ops objects. As for the HT, MT and PT objects, these all have append, prepend and remove methods that you can use to customize them: append adds a widget at the end (right or bottom), while prepend puts it at the front (left or top).

Since they aren’t (yet) mentioned in the official Blender documentation, here is a list of all the ones I’ve been able to find:

Operator CategoryHeaderMenuPanel
Bone PropertiesBONE_PT_constraints, BONE_PT_context_bone, BONE_PT_custom_props, BONE_PT_deform, BONE_PT_display, BONE_PT_inverse_kinematics, BONE_PT_relations, BONE_PT_transform, BONE_PT_transform_locks
Movie Clip EditorCLIP_HT_headerCLIP_MT_camera_presets, CLIP_MT_clip, CLIP_MT_proxy, CLIP_MT_reconstruction, CLIP_MT_select, CLIP_MT_select_grouped, CLIP_MT_select_mode, CLIP_MT_stabilize_2d_specials, CLIP_MT_track, CLIP_MT_track_color_presets, CLIP_MT_track_color_specials, CLIP_MT_track_transform, CLIP_MT_track_visibility, CLIP_MT_tracking_settings_presets, CLIP_MT_tracking_specials, CLIP_MT_viewCLIP_PT_active_mask_point, CLIP_PT_active_mask_spline, CLIP_PT_display, CLIP_PT_footage, CLIP_PT_footage_info, CLIP_PT_marker, CLIP_PT_marker_display, CLIP_PT_mask, CLIP_PT_mask_display, CLIP_PT_mask_layers, CLIP_PT_objects, CLIP_PT_plane_track, CLIP_PT_proxy, CLIP_PT_stabilization, CLIP_PT_tools_cleanup, CLIP_PT_tools_clip, CLIP_PT_tools_geometry, CLIP_PT_tools_grease_pencil, CLIP_PT_tools_marker, CLIP_PT_tools_mask, CLIP_PT_tools_object, CLIP_PT_tools_orientation, CLIP_PT_tools_plane_tracking, CLIP_PT_tools_solve, CLIP_PT_tools_tracking, CLIP_PT_track, CLIP_PT_track_settings, CLIP_PT_tracking_camera
Cloth PropertiesCLOTH_MT_presets
ConsoleCONSOLE_HT_headerCONSOLE_MT_console, CONSOLE_MT_language
Cycles RendererCYCLES_MT_integrator_presets, CYCLES_MT_sampling_presets
Object Data ContextDATA_PT_active_spline, DATA_PT_area, DATA_PT_bone_group_specials, DATA_PT_bone_groups, DATA_PT_camera, DATA_PT_camera_display, DATA_PT_camera_dof, DATA_PT_cone, DATA_PT_context_arm, DATA_PT_context_camera, DATA_PT_context_curve, DATA_PT_context_lamp, DATA_PT_context_lattice, DATA_PT_context_mesh, DATA_PT_context_metaball, DATA_PT_context_speaker, DATA_PT_curve_texture_space, DATA_PT_custom_props_arm, DATA_PT_custom_props_camera, DATA_PT_custom_props_curve, DATA_PT_custom_props_lamp, DATA_PT_custom_props_lattice, DATA_PT_custom_props_mesh, DATA_PT_custom_props_metaball, DATA_PT_custom_props_speaker, DATA_PT_customdata, DATA_PT_display, DATA_PT_distance, DATA_PT_empty, DATA_PT_falloff_curve, DATA_PT_font, DATA_PT_geometry_curve, DATA_PT_ghost, DATA_PT_iksolver_itasc, DATA_PT_lamp, DATA_PT_lattice, DATA_PT_lens, DATA_PT_mball_texture_space, DATA_PT_metaball, DATA_PT_metaball_element, DATA_PT_modifiers, DATA_PT_motion_paths, DATA_PT_normals, DATA_PT_paragraph, DATA_PT_pathanim, DATA_PT_pose_library, DATA_PT_preview, DATA_PT_shadow, DATA_PT_shadow_game, DATA_PT_shape_curve, DATA_PT_shape_keys, DATA_PT_skeleton, DATA_PT_speaker, DATA_PT_spot, DATA_PT_sunsky, DATA_PT_text_boxes, DATA_PT_texture_space, DATA_PT_uv_texture, DATA_PT_vertex_colors, DATA_PT_vertex_groups
DopesheetDOPESHEET_HT_headerDOPESHEET_MT_channel, DOPESHEET_MT_gpencil_channel, DOPESHEET_MT_gpencil_frame, DOPESHEET_MT_key, DOPESHEET_MT_key_transform, DOPESHEET_MT_marker, DOPESHEET_MT_select, DOPESHEET_MT_view
FilebrowserFILEBROWSER_HT_header
Fluid SimulationFLUID_MT_presets
Graph EditorGRAPH_HT_headerGRAPH_MT_channel, GRAPH_MT_key, GRAPH_MT_key_transform, GRAPH_MT_marker, GRAPH_MT_select, GRAPH_MT_view
UV/Image EditorIMAGE_HT_headerIMAGE_MT_image, IMAGE_MT_image_invert, IMAGE_MT_select, IMAGE_MT_uvs, IMAGE_MT_uvs_mirror, IMAGE_MT_uvs_select_mode, IMAGE_MT_uvs_showhide, IMAGE_MT_uvs_snap, IMAGE_MT_uvs_transform, IMAGE_MT_uvs_weldalign, IMAGE_MT_viewIMAGE_PT_active_mask_point, IMAGE_PT_active_mask_spline, IMAGE_PT_game_properties, IMAGE_PT_image_properties, IMAGE_PT_mask, IMAGE_PT_mask_display, IMAGE_PT_mask_layers, IMAGE_PT_paint, IMAGE_PT_paint_curve, IMAGE_PT_paint_stroke, IMAGE_PT_sample_line, IMAGE_PT_scope_sample, IMAGE_PT_tools_brush_appearance, IMAGE_PT_tools_brush_texture, IMAGE_PT_tools_brush_tool, IMAGE_PT_tools_mask, IMAGE_PT_tools_mask_texture, IMAGE_PT_view_histogram, IMAGE_PT_view_properties, IMAGE_PT_view_vectorscope, IMAGE_PT_view_waveform
Info WindowINFO_HT_headerINFO_MT_add, INFO_MT_armature_add, INFO_MT_curve_add, INFO_MT_edit_curve_add, INFO_MT_file, INFO_MT_file_export, INFO_MT_file_external_data, INFO_MT_file_import, INFO_MT_game, INFO_MT_help, INFO_MT_mesh_add, INFO_MT_render, INFO_MT_report, INFO_MT_surface_add, INFO_MT_window
Lamp PropertiesLAMP_MT_sunsky_presets
Logic EditorLOGIC_HT_headerLOGIC_MT_logicbricks_add, LOGIC_MT_viewLOGIC_PT_properties
Mask PropertiesMASK_MT_animation, MASK_MT_mask, MASK_MT_select, MASK_MT_transform, MASK_MT_visibility
Material PropertiesMATERIAL_MT_specials, MATERIAL_MT_sss_presetsMATERIAL_PT_context_material, MATERIAL_PT_custom_props, MATERIAL_PT_diffuse, MATERIAL_PT_flare, MATERIAL_PT_halo, MATERIAL_PT_mirror, MATERIAL_PT_options, MATERIAL_PT_physics, MATERIAL_PT_preview, MATERIAL_PT_shading, MATERIAL_PT_shadow, MATERIAL_PT_specular, MATERIAL_PT_sss, MATERIAL_PT_strand, MATERIAL_PT_transp, MATERIAL_PT_transp_game, MATERIAL_PT_volume_density, MATERIAL_PT_volume_integration, MATERIAL_PT_volume_lighting, MATERIAL_PT_volume_options, MATERIAL_PT_volume_shading, MATERIAL_PT_volume_transp
Mesh PropertiesMESH_MT_shape_key_specials, MESH_MT_vertex_group_specials
NLA EditorNLA_HT_headerNLA_MT_add, NLA_MT_edit, NLA_MT_edit_transform, NLA_MT_marker, NLA_MT_select, NLA_MT_view
Node EditorNODE_HT_headerNODE_MT_add, NODE_MT_category_CMP_CONVERTOR, NODE_MT_category_CMP_DISTORT, NODE_MT_category_CMP_GROUP, NODE_MT_category_CMP_INPUT, NODE_MT_category_CMP_LAYOUT, NODE_MT_category_CMP_MATTE, NODE_MT_category_CMP_OP_COLOR, NODE_MT_category_CMP_OP_FILTER, NODE_MT_category_CMP_OP_VECTOR, NODE_MT_category_CMP_OUTPUT, NODE_MT_category_SH_CONVERTOR, NODE_MT_category_SH_GROUP, NODE_MT_category_SH_INPUT, NODE_MT_category_SH_LAYOUT, NODE_MT_category_SH_NEW_CONVERTOR, NODE_MT_category_SH_NEW_GROUP, NODE_MT_category_SH_NEW_INPUT, NODE_MT_category_SH_NEW_LAYOUT, NODE_MT_category_SH_NEW_OP_COLOR, NODE_MT_category_SH_NEW_OP_VECTOR, NODE_MT_category_SH_NEW_OUTPUT, NODE_MT_category_SH_NEW_SCRIPT, NODE_MT_category_SH_NEW_SHADER, NODE_MT_category_SH_NEW_TEXTURE, NODE_MT_category_SH_OP_COLOR, NODE_MT_category_SH_OP_VECTOR, NODE_MT_category_SH_OUTPUT, NODE_MT_category_TEX_CONVERTOR, NODE_MT_category_TEX_DISTORT, NODE_MT_category_TEX_GROUP, NODE_MT_category_TEX_INPUT, NODE_MT_category_TEX_LAYOUT, NODE_MT_category_TEX_OP_COLOR, NODE_MT_category_TEX_OUTPUT, NODE_MT_category_TEX_PATTERN, NODE_MT_category_TEX_TEXTURE, NODE_MT_node, NODE_MT_node_color_presets, NODE_MT_node_color_specials, NODE_MT_select, NODE_MT_viewNODE_PT_active_node_color, NODE_PT_active_node_generic, NODE_PT_active_node_properties, NODE_PT_backdrop, NODE_PT_category_CMP_CONVERTOR, NODE_PT_category_CMP_DISTORT, NODE_PT_category_CMP_GROUP, NODE_PT_category_CMP_INPUT, NODE_PT_category_CMP_LAYOUT, NODE_PT_category_CMP_MATTE, NODE_PT_category_CMP_OP_COLOR, NODE_PT_category_CMP_OP_FILTER, NODE_PT_category_CMP_OP_VECTOR, NODE_PT_category_CMP_OUTPUT, NODE_PT_category_SH_CONVERTOR, NODE_PT_category_SH_GROUP, NODE_PT_category_SH_INPUT, NODE_PT_category_SH_LAYOUT, NODE_PT_category_SH_NEW_CONVERTOR, NODE_PT_category_SH_NEW_GROUP, NODE_PT_category_SH_NEW_INPUT, NODE_PT_category_SH_NEW_LAYOUT, NODE_PT_category_SH_NEW_OP_COLOR, NODE_PT_category_SH_NEW_OP_VECTOR, NODE_PT_category_SH_NEW_OUTPUT, NODE_PT_category_SH_NEW_SCRIPT, NODE_PT_category_SH_NEW_SHADER, NODE_PT_category_SH_NEW_TEXTURE, NODE_PT_category_SH_OP_COLOR, NODE_PT_category_SH_OP_VECTOR, NODE_PT_category_SH_OUTPUT, NODE_PT_category_TEX_CONVERTOR, NODE_PT_category_TEX_DISTORT, NODE_PT_category_TEX_GROUP, NODE_PT_category_TEX_INPUT, NODE_PT_category_TEX_LAYOUT, NODE_PT_category_TEX_OP_COLOR, NODE_PT_category_TEX_OUTPUT, NODE_PT_category_TEX_PATTERN, NODE_PT_category_TEX_TEXTURE, NODE_PT_quality
Object PropertiesOBJECT_PT_animation, OBJECT_PT_constraints, OBJECT_PT_context_object, OBJECT_PT_custom_props, OBJECT_PT_delta_transform, OBJECT_PT_display, OBJECT_PT_duplication, OBJECT_PT_groups, OBJECT_PT_motion_paths, OBJECT_PT_relations, OBJECT_PT_transform, OBJECT_PT_transform_locks
OutlinerOUTLINER_HT_headerOUTLINER_MT_edit_datablocks, OUTLINER_MT_search, OUTLINER_MT_view
Particle PropertiesPARTICLE_PT_boidbrain, PARTICLE_PT_cache, PARTICLE_PT_children, PARTICLE_PT_context_particles, PARTICLE_PT_custom_props, PARTICLE_PT_draw, PARTICLE_PT_emission, PARTICLE_PT_field_weights, PARTICLE_PT_force_fields, PARTICLE_PT_hair_dynamics, PARTICLE_PT_physics, PARTICLE_PT_render, PARTICLE_PT_rotation, PARTICLE_PT_velocity, PARTICLE_PT_vertexgroups
Physics PropertiesPHYSICS_PT_add, PHYSICS_PT_cloth, PHYSICS_PT_cloth_cache, PHYSICS_PT_cloth_collision, PHYSICS_PT_cloth_field_weights, PHYSICS_PT_cloth_stiffness, PHYSICS_PT_collision, PHYSICS_PT_domain_boundary, PHYSICS_PT_domain_gravity, PHYSICS_PT_domain_particles, PHYSICS_PT_dp_advanced_canvas, PHYSICS_PT_dp_brush_source, PHYSICS_PT_dp_brush_velocity, PHYSICS_PT_dp_brush_wave, PHYSICS_PT_dp_cache, PHYSICS_PT_dp_canvas_initial_color, PHYSICS_PT_dp_canvas_output, PHYSICS_PT_dp_effects, PHYSICS_PT_dynamic_paint, PHYSICS_PT_field, PHYSICS_PT_fluid, PHYSICS_PT_game_collision_bounds, PHYSICS_PT_game_obstacles, PHYSICS_PT_game_physics, PHYSICS_PT_rigid_body, PHYSICS_PT_rigid_body_collisions, PHYSICS_PT_rigid_body_constraint, PHYSICS_PT_rigid_body_dynamics, PHYSICS_PT_smoke, PHYSICS_PT_smoke_adaptive_domain, PHYSICS_PT_smoke_cache, PHYSICS_PT_smoke_field_weights, PHYSICS_PT_smoke_fire, PHYSICS_PT_smoke_flow_advanced, PHYSICS_PT_smoke_groups, PHYSICS_PT_smoke_highres, PHYSICS_PT_softbody, PHYSICS_PT_softbody_cache, PHYSICS_PT_softbody_collision, PHYSICS_PT_softbody_edge, PHYSICS_PT_softbody_field_weights, PHYSICS_PT_softbody_goal, PHYSICS_PT_softbody_solver
Properties PropertiesPROPERTIES_HT_header
Render Layer PropertiesRENDERLAYER_PT_freestyle, RENDERLAYER_PT_freestyle_lineset, RENDERLAYER_PT_freestyle_linestyle, RENDERLAYER_PT_layer_options, RENDERLAYER_PT_layer_passes, RENDERLAYER_PT_layers
Render PropertiesRENDER_MT_ffmpeg_presets, RENDER_MT_framerate_presets, RENDER_MT_lineset_specials, RENDER_MT_presetsRENDER_PT_antialiasing, RENDER_PT_bake, RENDER_PT_dimensions, RENDER_PT_embedded, RENDER_PT_encoding, RENDER_PT_freestyle, RENDER_PT_game_display, RENDER_PT_game_player, RENDER_PT_game_shading, RENDER_PT_game_sound, RENDER_PT_game_stereo, RENDER_PT_game_system, RENDER_PT_motion_blur, RENDER_PT_output, RENDER_PT_performance, RENDER_PT_post_processing, RENDER_PT_render, RENDER_PT_shading, RENDER_PT_stamp
Scene PropertiesSCENE_PT_audio, SCENE_PT_color_management, SCENE_PT_custom_props, SCENE_PT_game_navmesh, SCENE_PT_keying_set_paths, SCENE_PT_keying_sets, SCENE_PT_physics, SCENE_PT_rigid_body_cache, SCENE_PT_rigid_body_field_weights, SCENE_PT_rigid_body_world, SCENE_PT_scene, SCENE_PT_simplify, SCENE_PT_unit
Sequencer WindowSEQUENCER_HT_headerSEQUENCER_MT_add, SEQUENCER_MT_add_effect, SEQUENCER_MT_marker, SEQUENCER_MT_select, SEQUENCER_MT_strip, SEQUENCER_MT_view, SEQUENCER_MT_view_toggleSEQUENCER_PT_edit, SEQUENCER_PT_effect, SEQUENCER_PT_filter, SEQUENCER_PT_input, SEQUENCER_PT_mask, SEQUENCER_PT_modifiers, SEQUENCER_PT_preview, SEQUENCER_PT_proxy, SEQUENCER_PT_scene, SEQUENCER_PT_sound, SEQUENCER_PT_view
Texture PropertiesTEXTURE_MT_envmap_specials, TEXTURE_MT_specialsTEXTURE_PT_blend, TEXTURE_PT_clouds, TEXTURE_PT_colors, TEXTURE_PT_context_texture, TEXTURE_PT_custom_props, TEXTURE_PT_distortednoise, TEXTURE_PT_envmap, TEXTURE_PT_envmap_sampling, TEXTURE_PT_image, TEXTURE_PT_image_mapping, TEXTURE_PT_image_sampling, TEXTURE_PT_influence, TEXTURE_PT_magic, TEXTURE_PT_mapping, TEXTURE_PT_marble, TEXTURE_PT_musgrave, TEXTURE_PT_pointdensity, TEXTURE_PT_pointdensity_turbulence, TEXTURE_PT_preview, TEXTURE_PT_stucci, TEXTURE_PT_voronoi, TEXTURE_PT_voxeldata, TEXTURE_PT_wood
Text EditorTEXT_HT_headerTEXT_MT_edit, TEXT_MT_edit_select, TEXT_MT_edit_to3d, TEXT_MT_format, TEXT_MT_templates, TEXT_MT_templates_osl, TEXT_MT_templates_py, TEXT_MT_text, TEXT_MT_toolbox, TEXT_MT_viewTEXT_PT_find, TEXT_PT_properties
TimelineTIME_HT_headerTIME_MT_autokey, TIME_MT_cache, TIME_MT_frame, TIME_MT_playback, TIME_MT_view
User PreferencesUSERPREF_HT_headerUSERPREF_MT_addons_dev_guides, USERPREF_MT_interaction_presets, USERPREF_MT_keyconfigs, USERPREF_MT_splashUSERPREF_PT_addons, USERPREF_PT_edit, USERPREF_PT_file, USERPREF_PT_input, USERPREF_PT_interface, USERPREF_PT_system, USERPREF_PT_tabs, USERPREF_PT_theme
3D ViewVIEW3D_HT_headerVIEW3D_MT_armature_specials, VIEW3D_MT_bone_options_disable, VIEW3D_MT_bone_options_enable, VIEW3D_MT_bone_options_toggle, VIEW3D_MT_brush, VIEW3D_MT_brush_paint_modes, VIEW3D_MT_edit_armature, VIEW3D_MT_edit_armature_parent, VIEW3D_MT_edit_armature_roll, VIEW3D_MT_edit_curve, VIEW3D_MT_edit_curve_ctrlpoints, VIEW3D_MT_edit_curve_segments, VIEW3D_MT_edit_curve_showhide, VIEW3D_MT_edit_curve_specials, VIEW3D_MT_edit_font, VIEW3D_MT_edit_lattice, VIEW3D_MT_edit_mesh, VIEW3D_MT_edit_mesh_clean, VIEW3D_MT_edit_mesh_delete, VIEW3D_MT_edit_mesh_edges, VIEW3D_MT_edit_mesh_extrude, VIEW3D_MT_edit_mesh_faces, VIEW3D_MT_edit_mesh_normals, VIEW3D_MT_edit_mesh_select_mode, VIEW3D_MT_edit_mesh_showhide, VIEW3D_MT_edit_mesh_specials, VIEW3D_MT_edit_mesh_vertices, VIEW3D_MT_edit_meta, VIEW3D_MT_edit_meta_showhide, VIEW3D_MT_edit_surface, VIEW3D_MT_edit_text_chars, VIEW3D_MT_hide_mask, VIEW3D_MT_hook, VIEW3D_MT_make_links, VIEW3D_MT_make_single_user, VIEW3D_MT_mirror, VIEW3D_MT_object, VIEW3D_MT_object_animation, VIEW3D_MT_object_apply, VIEW3D_MT_object_clear, VIEW3D_MT_object_constraints, VIEW3D_MT_object_game, VIEW3D_MT_object_group, VIEW3D_MT_object_parent, VIEW3D_MT_object_quick_effects, VIEW3D_MT_object_showhide, VIEW3D_MT_object_specials, VIEW3D_MT_object_track, VIEW3D_MT_paint_vertex, VIEW3D_MT_paint_weight, VIEW3D_MT_particle, VIEW3D_MT_particle_showhide, VIEW3D_MT_particle_specials, VIEW3D_MT_pose, VIEW3D_MT_pose_apply, VIEW3D_MT_pose_constraints, VIEW3D_MT_pose_group, VIEW3D_MT_pose_ik, VIEW3D_MT_pose_library, VIEW3D_MT_pose_motion, VIEW3D_MT_pose_propagate, VIEW3D_MT_pose_showhide, VIEW3D_MT_pose_slide, VIEW3D_MT_pose_specials, VIEW3D_MT_pose_transform, VIEW3D_MT_sculpt, VIEW3D_MT_select_edit_armature, VIEW3D_MT_select_edit_curve, VIEW3D_MT_select_edit_lattice, VIEW3D_MT_select_edit_mesh, VIEW3D_MT_select_edit_metaball, VIEW3D_MT_select_edit_surface, VIEW3D_MT_select_object, VIEW3D_MT_select_paint_mask, VIEW3D_MT_select_paint_mask_vertex, VIEW3D_MT_select_particle, VIEW3D_MT_select_pose, VIEW3D_MT_snap, VIEW3D_MT_tools_projectpaint_clone, VIEW3D_MT_tools_projectpaint_stencil, VIEW3D_MT_transform, VIEW3D_MT_transform_armature, VIEW3D_MT_transform_base, VIEW3D_MT_transform_object, VIEW3D_MT_uv_map, VIEW3D_MT_vertex_group, VIEW3D_MT_view, VIEW3D_MT_view_align, VIEW3D_MT_view_align_selected, VIEW3D_MT_view_cameras, VIEW3D_MT_view_navigationVIEW3D_PT_background_image, VIEW3D_PT_context_properties, VIEW3D_PT_etch_a_ton, VIEW3D_PT_sculpt_options, VIEW3D_PT_sculpt_symmetry, VIEW3D_PT_sculpt_topology, VIEW3D_PT_tools_armatureedit, VIEW3D_PT_tools_armatureedit_options, VIEW3D_PT_tools_brush, VIEW3D_PT_tools_brush_appearance, VIEW3D_PT_tools_brush_curve, VIEW3D_PT_tools_brush_stroke, VIEW3D_PT_tools_brush_texture, VIEW3D_PT_tools_curveedit, VIEW3D_PT_tools_latticeedit, VIEW3D_PT_tools_mask_texture, VIEW3D_PT_tools_mballedit, VIEW3D_PT_tools_meshedit, VIEW3D_PT_tools_meshedit_options, VIEW3D_PT_tools_objectmode, VIEW3D_PT_tools_particlemode, VIEW3D_PT_tools_posemode, VIEW3D_PT_tools_posemode_options, VIEW3D_PT_tools_projectpaint, VIEW3D_PT_tools_rigidbody, VIEW3D_PT_tools_surfaceedit, VIEW3D_PT_tools_textedit, VIEW3D_PT_tools_vertexpaint, VIEW3D_PT_tools_weightpaint, VIEW3D_PT_tools_weightpaint_options, VIEW3D_PT_transform_orientations, VIEW3D_PT_view3d_cursor, VIEW3D_PT_view3d_curvedisplay, VIEW3D_PT_view3d_display, VIEW3D_PT_view3d_meshdisplay, VIEW3D_PT_view3d_meshstatvis, VIEW3D_PT_view3d_motion_tracking, VIEW3D_PT_view3d_name, VIEW3D_PT_view3d_properties
Window Manager PropertiesWM_MT_operator_presets
World PropertiesWORLD_PT_ambient_occlusion, WORLD_PT_context_world, WORLD_PT_custom_props, WORLD_PT_environment_lighting, WORLD_PT_game_context_world, WORLD_PT_game_mist, WORLD_PT_game_physics, WORLD_PT_game_world, WORLD_PT_gather, WORLD_PT_indirect_lighting, WORLD_PT_mist, WORLD_PT_preview, WORLD_PT_stars, WORLD_PT_world
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.