user: What is Bmesh and how is it used in Blender Python scripting?

assistant: ecker(TextureNode) TextureNodeCombineColor(TextureNode) TextureNodeCompose(TextureNode) TextureNodeCoordinates(TextureNode) TextureNodeCurveRGB(TextureNode) TextureNodeCurveTime(TextureNode) TextureNodeDecompose(TextureNode) TextureNodeDistance(TextureNode) TextureNodeGroup(TextureNode) TextureNodeHueSaturation(TextureNode) TextureNodeImage(TextureNode) TextureNodeInvert(TextureNode) TextureNodeMath(TextureNode) TextureNodeMixRGB(TextureNode) TextureNodeOutput(TextureNode) TextureNodeRGBToBW(TextureNode) TextureNodeRotate(TextureNode) TextureNodeScale(TextureNode) TextureNodeSeparateColor(TextureNode) TextureNodeTexBlend(TextureNode) TextureNodeTexClouds(TextureNode) TextureNodeTexDistNoise(TextureNode) TextureNodeTexMagic(TextureNode) TextureNodeTexMarble(TextureNode) TextureNodeTexMusgrave(TextureNode) TextureNodeTexNoise(TextureNode) TextureNodeTexStucci(TextureNode) TextureNodeTexVoronoi(TextureNode) TextureNodeTexWood(TextureNode) TextureNodeTexture(TextureNode) TextureNodeTranslate(TextureNode) TextureNodeTree(NodeTree) TextureNodeValToNor(TextureNode) TextureNodeValToRGB(TextureNode) TextureNodeViewer(TextureNode) TextureSlot(bpy_struct) Theme(bpy_struct) ThemeBoneColorSet(bpy_struct) ThemeClipEditor(bpy_struct) ThemeCollectionColor(bpy_struct) ThemeCommon(bpy_struct) ThemeCommonAnim(bpy_struct) ThemeCommonCurves(bpy_struct) ThemeConsole(bpy_struct) ThemeDopeSheet(bpy_struct) ThemeFileBrowser(bpy_struct) ThemeFontStyle(bpy_struct) ThemeGradientColors(bpy_struct) ThemeGraphEditor(bpy_struct) ThemeImageEditor(bpy_struct) ThemeInfo(bpy_struct) ThemeNLAEditor(bpy_struct) ThemeNodeEditor(bpy_struct) ThemeOutliner(bpy_struct) ThemePreferences(bpy_struct) ThemeProperties(bpy_struct) ThemeRegions(bpy_struct) ThemeRegionsAssetShelf(bpy_struct) ThemeRegionsChannels(bpy_struct) ThemeRegionsScrubbing(bpy_struct) ThemeRegionsSidebars(bpy_struct) ThemeSequenceEditor(bpy_struct) ThemeSpaceGeneric(bpy_struct) ThemeSpaceGradient(bpy_struct) ThemeSpreadsheet(bpy_struct) ThemeStatusBar(bpy_struct) ThemeStripColor(bpy_struct) ThemeStyle(bpy_struct) ThemeTextEditor(bpy_struct) ThemeTopBar(bpy_struct) ThemeUserInterface(bpy_struct) ThemeView3D(bpy_struct) ThemeWidgetColors(bpy_struct) ThemeWidgetStateColors(bpy_struct) TimelineMarker(bpy_struct) TimelineMarkers(bpy_struct) Timer(bpy_struct) ToolSettings(bpy_struct) TrackToConstraint(Constraint) TransformCacheConstraint(Constraint) TransformConstraint(Constraint) TransformOrientation(bpy_struct) TransformOrientationSlot(bpy_struct) TriangulateModifier(Modifier) UDIMTile(bpy_struct) UDIMTiles(bpy_struct) UILayout(bpy_struct) UIList(bpy_struct) UIPieMenu(bpy_struct) UIPopover(bpy_struct) UIPopupMenu(bpy_struct) UI_UL_list(UIList) USDHook(bpy_struct) USERPREF_UL_asset_libraries(UIList) USERPREF_UL_extension_repos(UIList) UVLoopLayers(bpy_struct) UVProjectModifier(Modifier) UVProjector(bpy_struct) UVWarpModifier(Modifier) UnifiedPaintSettings(bpy_struct) UnitSettings(bpy_struct) UnknownType(bpy_struct) UserAssetLibrary(bpy_struct) UserExtensionRepo(bpy_struct) UserExtensionRepoCollection(bpy_struct) UserSolidLight(bpy_struct) UvSculpt(bpy_struct) VIEW3D_AST_brush_gpencil_paint(AssetShelf) VIEW3D_AST_brush_gpencil_sculpt(AssetShelf) VIEW3D_AST_brush_gpencil_vertex(AssetShelf) VIEW3D_AST_brush_gpencil_weight(AssetShelf) VIEW3D_AST_brush_sculpt(AssetShelf) VIEW3D_AST_brush_sculpt_curves(AssetShelf) VIEW3D_AST_brush_texture_paint(AssetShelf) VIEW3D_AST_brush_vertex_paint(AssetShelf) VIEW3D_AST_brush_weight_paint(AssetShelf) VIEW3D_AST_pose_library(AssetShelf) VIEW3D_FH_camera_background_image(FileHandler) VIEW3D_FH_empty_image(FileHandler) VIEW3D_FH_vdb_volume(FileHandler) VIEWLAYER_UL_aov(UIList) VIEWLAYER_UL_linesets(UIList) VOLUME_UL_grids(UIList) VectorFont(ID) VertexGroup(bpy_struct) VertexGroupElement(bpy_struct) VertexGroups(bpy_struct) VertexPaint(Paint) VertexWeightEditModifier(Modifier) VertexWeightMixModifier(Modifier) VertexWeightProximityModifier(Modifier) View2D(bpy_struct) View3DCursor(bpy_struct) View3DOverlay(bpy_struct) View3DShading(bpy_struct) ViewLayer(bpy_struct) ViewLayerEEVEE(bpy_struct) ViewLayers(bpy_struct) ViewerNodeViewerPathElem(ViewerPathElem) ViewerPath(bpy_struct) ViewerPathElem(bpy_struct) Volume(ID) VolumeDisplaceModifier(Modifier) VolumeDisplay(bpy_struct) VolumeGrid(bpy_struct) VolumeGrids(bpy_struct) VolumeRender(bpy_struct) VolumeToMeshModifier(Modifier) VoronoiTexture(Texture) WORKSPACE_UL_addons_items(UIList) WalkNavigation(bpy_struct) WarpModifier(Modifier) WaveModifier(Modifier) WeightedNormalModifier(Modifier) WeldModifier(Modifier) WhiteBalanceModifier(StripModifier) Window(bpy_struct) WindowManager(ID) WipeStrip(EffectStrip) WireframeModifier(Modifier) WoodTexture(Texture) WorkSpace(ID) WorkSpaceTool(bpy_struct) World(ID) WorldLighting(bpy_struct) WorldMistSettings(bpy_struct) XrActionMap(bpy_struct) XrActionMapBinding(bpy_struct) XrActionMapBindings(bpy_struct) XrActionMapItem(bpy_struct) XrActionMapItems(bpy_struct) XrActionMaps(bpy_struct) XrComponentPath(bpy_struct) XrComponentPaths(bpy_struct) XrEventData(bpy_struct) XrNavigation(bpy_struct) XrSessionSettings(bpy_struct) XrSessionState(bpy_struct) XrUserPath(bpy_struct) XrUserPaths(bpy_struct) bpy_prop_collection bpy_prop_collection_idprop bpy_struct wmOwnerID(bpy_struct) wmOwnerIDs(bpy_struct) wmTools(bpy_struct) Shared Enum Types Toggle navigation of Shared Enum Types Id Type Items Object Mode Items Workspace Object Mode Items Object Empty Drawtype Items Object Gpencil Type Items Metaelem Type Items Color Space Convert Default Items Proportional Falloff Items Proportional Falloff Curve Only Items Snap Source Items Snap Element Items Snap Animation Element Items Curve Fit Method Items Mesh Select Mode Items Mesh Select Mode Uv Items Mesh Delimit Mode Items Space Graph Mode Items Space File Browse Mode Items Space Sequencer View Type Items Space Type Items Space Image Mode Items Space Image Mode All Items Space Action Mode Items Fileselect Params Sort Items Region Type Items Object Modifier Type Items Constraint Type Items Boidrule Type Items Strip Modifier Type Items Strip Video Modifier Type Items Strip Sound Modifier Type Items Strip Scale Method Items Object Shaderfx Type Items Modifier Triangulate Quad Method Items Modifier Triangulate Ngon Method Items Modifier Shrinkwrap Mode Items Shrinkwrap Type Items Shrinkwrap Face Cull Items Node Warning Type Items Image Type All Items Image Color Mode Items Image Color Depth Items Image Generated Type Items Normal Space Items Normal Swizzle Items Bake Save Mode Items Bake Margin Type Items Bake Target Items Views Format Items Views Format Multilayer Items Views Format Multiview Items Stereo3D Display Items Stereo3D Anaglyph Type Items Stereo3D Interlace Type Items Exr Codec Items Color Sets Items Beztriple Keyframe Type Items Beztriple Interpolation Mode Items Beztriple Interpolation Easing Items Fcurve Auto Smoothing Items Keyframe Handle Type Items Driver Target Rotation Mode Items Keyingset Path Grouping Items Keying Flag Items Keying Flag Api Items Fmodifier Type Items Motionpath Bake Location Items Motionpath Display Type Items Motionpath Range Items Event Value Items Event Direction Items Event Type Items Event Type Mask Items Operator Type Flag Items Operator Return Items Operator Property Tag Items Brush Automasking Flag Items Brush Sculpt Brush Type Items Brush Vertex Brush Type Items Brush Weight Brush Type Items Brush Gpencil Types Items Brush Gpencil Vertex Types Items Brush Gpencil Sculpt Types Items Brush Gpencil Weight Types Items Brush Curves Sculpt Brush Type Items Brush Image Brush Type Items Brush Curve Preset Items Grease Pencil Selectmode Items Stroke Depth Order Items Axis Xy Items Axis Xyz Items Axis Flag Xyz Items Symmetrize Direction Items Texture Type Items Light Type Items Lightprobes Type Items Unpack Method Items Object Type Items Object Rotation Mode Items Object Type Curve Items Rigidbody Object Type Items Rigidbody Object Shape Items Rigidbody Constraint Type Items Object Axis Items Bake Pass Type Items Bake Pass Filter Type Items Keymap Propvalue Items Operator Context Items Wm Report Items Wm Job Type Items Property Type Items Property Subtype Items Property Subtype String Items Property Subtype Number Items Property Subtype Number Array Items Property Unit Items Property Flag Items Property Flag Enum Items Property Override Flag Items Property Override Flag Collection Items Property String Search Flag Items Shading Type Items Navigation Mode Items Node Socket In Out Items Node Socket Type Items Node Tree Interface Item Type Items Node Socket Structure Type Items Node Math Items Mapping Type Items Node Vec Math Items Node Boolean Math Items Node Compare Operation Items Node Integer Math Items Node Float To Int Items Node Map Range Items Node Clamp Items Node Compositor Extension Items Node Compositor Interpolation Items Ramp Blend Items Prop Dynamicpaint Type Items Clip Editor Mode Items Icon Items Uilist Layout Type Items Linestyle Color Modifier Type Items Linestyle Alpha Modifier Type Items Linestyle Thickness Modifier Type Items Linestyle Geometry Modifier Type Items Window Cursor Items Dt Method Vertex Items Dt Method Edge Items Dt Method Loop Items Dt Method Poly Items Dt Mix Mode Items Dt Layers Select Src Items Dt Layers Select Dst Items Context Mode Items Preference Section Items Attribute Type Items Color Attribute Type Items Attribute Type With Auto Items Attribute Domain Items Attribute Domain Edge Face Items Attribute Domain Only Mesh Items Attribute Domain Only Mesh No Edge Items Attribute Domain Only Mesh No Corner Items Attribute Domain Point Face Curve Items Attribute Domain Point Edge Face Curve Items Attribute Curves Domain Items Color Attribute Domain Items Attribute Domain Without Corner Items Attribute Domain With Auto Items Geometry Component Type Items Node Combsep Color Items Node Socket Data Type Items Node Geometry Curve Handle Side Items Node Geometry Mesh Circle Fill Type Items Volume Grid Data Type Items Collection Color Items Strip Color Items Subdivision Uv Smooth Items Subdivision Boundary Smooth Items Transform Orientation Items Velocity Unit Items Curves Type Items Curves Handle Type Items Curve Normal Mode Items Geometry Nodes Gizmo Color Items Geometry Nodes Linear Gizmo Draw Style Items Particle Edit Hair Brush Items Particle Edit Disconnected Hair Brush Items Keyframe Paste Offset Items Keyframe Paste Offset Value Items Keyframe Paste Merge Items Transform Pivot Full Items Transform Mode Type Items Nla Mode Extend Items Nla Mode Blend Items Keyblock Type Items Asset Library Type Items File Path Foreach Flag Items Types with Custom Property Support Utilities (bpy.utils) Toggle navigation of Utilities (bpy.utils) bpy.utils submodule (bpy.utils.previews) bpy.utils submodule (bpy.utils.units) Path Utilities (bpy.path) Application Data (bpy.app) Toggle navigation of Application Data (bpy.app) Application Handlers (bpy.app.handlers) Application Translations (bpy.app.translations) Application Icons (bpy.app.icons) Application Timers (bpy.app.timers) Property Definitions (bpy.props) Standalone Modules Audio System (aud) Additional Math Functions (bl_math) Font Drawing (blf) BMesh Module (bmesh) Toggle navigation of BMesh Module (bmesh) BMesh Operators (bmesh.ops) BMesh Types (bmesh.types) BMesh Utilities (bmesh.utils) BMesh Geometry Utilities (bmesh.geometry) Extra Utilities (bpy_extras) Toggle navigation of Extra Utilities (bpy_extras) bpy_extras submodule (bpy_extras.anim_utils) bpy_extras submodule (bpy_extras.asset_utils) bpy_extras submodule (bpy_extras.object_utils) bpy_extras submodule (bpy_extras.io_utils) bpy_extras submodule (bpy_extras.image_utils) bpy_extras submodule (bpy_extras.keyconfig_utils) bpy_extras submodule (bpy_extras.mesh_utils) bpy_extras submodule (bpy_extras.node_utils) bpy_extras submodule (bpy_extras.view3d_utils) bpy_extras submodule (bpy_extras.id_map_utils) Freestyle Module (freestyle) Toggle navigation of Freestyle Module (freestyle) Freestyle Types (freestyle.types) Freestyle Predicates (freestyle.predicates) Freestyle Functions (freestyle.functions) Freestyle Chaining Iterators (freestyle.chainingiterators) Freestyle Shaders (freestyle.shaders) Freestyle Utilities (freestyle.utils) Toggle navigation of Freestyle Utilities (freestyle.utils) freestyle.utils submodule (freestyle.utils.ContextFunctions) GPU Module (gpu) Toggle navigation of GPU Module (gpu) GPU Types (gpu.types) GPU Matrix Utilities (gpu.matrix) GPU Select Utilities (gpu.select) GPU Shader Utilities (gpu.shader) GPU State Utilities (gpu.state) GPU Texture Utilities (gpu.texture) GPU Platform Utilities (gpu.platform) GPU Capabilities Utilities (gpu.capabilities) GPU Utilities (gpu_extras) Toggle navigation of GPU Utilities (gpu_extras) gpu_extras submodule (gpu_extras.batch) gpu_extras submodule (gpu_extras.presets) ID Property Access (idprop.types) Image Buffer (imbuf) Toggle navigation of Image Buffer (imbuf) Image Buffer Types (imbuf.types) Math Types & Utilities (mathutils) Toggle navigation of Math Types & Utilities (mathutils) Geometry Utilities (mathutils.geometry) BVHTree Utilities (mathutils.bvhtree) KDTree Utilities (mathutils.kdtree) Interpolation Utilities (mathutils.interpolate) Noise Utilities (mathutils.noise) 5.0 Versions Loading... Note You are not using the most up to date version of the documentation. is the newest version. Back to top Toggle Light / Dark / Auto color theme Toggle table of contents sidebar BMesh Module (bmesh) ¶ This module provides access to blenders bmesh data structures. Introduction ¶ This API gives access the Blender’s internal mesh editing API, featuring geometry connectivity data and access to editing operations such as split, separate, collapse and dissolve. The features exposed closely follow the C API, giving Python access to the functions used by Blender’s own mesh editing tools. For an overview of BMesh data types and how they reference each other see: BMesh Design Document . Note Disk and Radial data is not exposed by the Python API since this is for internal use only. Warning TODO items are… add access to BMesh walkers . add custom-data manipulation functions add, remove or rename. Example Script ¶ # This example assumes we have a mesh object selected import bpy import bmesh # Get the active mesh me = bpy . context . object . data # Get a BMesh representation bm = bmesh . new () # create an empty BMesh bm . from_mesh ( me ) # fill it in from a Mesh # Modify the BMesh, can do anything here... for v in bm . verts : v . co . x += 1.0 # Finish up, write the bmesh back to the mesh bm . to_mesh ( me ) bm . free () # free and prevent further access Standalone Module ¶ The BMesh module is written to be standalone except for mathutils which is used for vertex locations and normals. The only other exception to this are when converting mesh data to and from bpy.types.Mesh . Mesh Access ¶ There are two ways to access BMesh data, you can create a new BMesh by converting a mesh from bpy.types.BlendData.meshes or by accessing the current Edit-Mode mesh. See: bmesh.types.BMesh.from_mesh and bmesh.from_edit_mesh respectively. When explicitly converting from mesh data Python owns the data, that means that the mesh only exists while Python holds a reference to it. The script is responsible for putting it back into a mesh data-block when the edits are done. Note that unlike bpy , a BMesh does not necessarily correspond to data in the currently open blend-file, a BMesh can be created, edited and freed without the user ever seeing or having access to it. Unlike Edit-Mode, the BMesh module can use multiple BMesh instances at once. Take care when dealing with multiple BMesh instances since the mesh data can use a lot of memory. While a mesh that the Python script owns will be freed when the script holds no references to it, it’s good practice to call bmesh.types.BMesh.free which will remove all the mesh data immediately and disable further access. Edit-Mode Tessellation ¶ When writing scripts that operate on Edit-Mode data you will normally want to re-calculate the tessellation after running the script, this needs to be called explicitly. The BMesh itself does not store the triangulated faces, instead they are stored in the bpy.types.Mesh , to refresh tessellation triangles call bpy.types.Mesh.calc_loop_triangles . CustomData Access ¶ BMesh has a unified way to access mesh attributes such as UVs, vertex colors, shape keys, edge crease, etc. This works by having a layers property on BMesh data sequences to access the custom data layers which can then be used to access the actual data on each vert, edge, face or loop. Here are some examples: uv_lay = bm . loops . layers . uv . active for face in bm . faces : for loop in face . loops : uv = loop [ uv_lay ] . uv print ( "Loop UV: %f , %f " % uv [:]) vert = loop . vert print ( "Loop Vert: ( %f , %f , %f )" % vert . co [:]) shape_lay = bm . verts . layers . shape [ "Key.001" ] for vert in bm . verts : shape = vert [ shape_lay ] print ( "Vert Shape: %f , %f , %f " % ( shape . x , shape . y , shape . z )) # In this example the active vertex group index is used, # this is stored in the object, not the `BMesh`. group_index = obj . vertex_groups . active_index # Only ever one deform weight layer. dvert_lay = bm . verts . layers . deform . active for vert in bm . verts : dvert = vert [ dvert_lay ] if group_index in dvert : print ( "Weight %f " % dvert [ group_index ]) else : print ( "Setting Weight" ) dvert [ group_index ] = 0.5 Keeping a Correct State ¶ When modeling in Blender there are certain assumptions made about the state of the mesh: Hidden geometry isn’t selected. When an edge is selected, its vertices are selected too. When a face is selected, its edges and vertices are selected. Duplicate edges / faces don’t exist. Faces have at least three vertices. To give developers flexibility these conventions are not enforced, yet tools must leave the mesh