1
$\begingroup$

I'd like to create a flat mesh and give it a thickness by bmesh. Putting together some answers seen on this forum, I thought that a script like the one below should have done the work, but it doesn't. How to make it work?

import bpy
import bmesh
me = bpy.data.meshes.new('theMesh')
ob = bpy.data.objects.new('theObject', me)
bm = bmesh.new() 
bm.from_mesh(me) 
ob.location = [0,0,0]
ob.show_name = True
bpy.context.scene.objects.link(ob)

#Create the mesh (in this example a very simple 4 verticies mesh)
#=======================
l=1
w=1
h=1 
vertex= [0 for i in range(4)] 
vertex[0] = bm.verts.new( (-l/2, -w/2, +h/2 ))
vertex[1] = bm.verts.new( (-l/2, +w/2, +h/2 ))
vertex[2]= bm.verts.new( (+l/2, +w/2, +h/2 ))
vertex[3] = bm.verts.new( (+l/2, -w/2, +h/2 ))
for i in [0,1,2,3]:
    bm.edges.new( (vertex[i], vertex[(i+1) % 4] ))        
bm.faces.new( (vertex[:]) )
#========================

# Add thickness
bmesh.ops.solidify(bm, geom=[f for f in bm.faces], thickness=-h)

bm.to_mesh(me)
me.update()

The script runs without errors, but the thickness doesn't appear.

Note that if the flat mesh is created by create_grid the script works.

#Create the mesh
#=======================
bmesh.ops.create_grid(bm,size=1)
#=======================
$\endgroup$

1 Answer 1

1
$\begingroup$

I tested the script and it created some additional geometry, so i added these two lines

for face in bm.faces:
    face.normal_update()

before calling the bmesh operator and it worked for me

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .