Optima Interior Direct
# Create faces between top and bottom rings for i in range(segments): i_next = (i + 1) % segments # Quad between top and bottom bm.faces.new((verts_top[i], verts_top[i_next], verts_bottom[i_next], verts_bottom[i]))
# Smooth shading for face in mesh.polygons: face.use_smooth = True optima interior
# Generate vertices for top and bottom rings verts_top = [] verts_bottom = [] for i in range(segments): angle = 2 * math.pi * i / segments x = radius * math.cos(angle) y = radius * math.sin(angle) # Top ring with gentle undulation (z varies with angle) z_top = height * (0.5 + 0.3 * math.sin(4 * angle)) # 4 lobes v_top = bm.verts.new((x, y, z_top)) verts_top.append(v_top) # Bottom ring (flat) v_bottom = bm.verts.new((x, y, -height/2)) verts_bottom.append(v_bottom) # Create faces between top and bottom rings
# Fill inner ring with a fan to close the top surface completely (making it solid) bm.faces.new(inner_verts) optima interior
# Create faces between top and bottom rings for i in range(segments): i_next = (i + 1) % segments # Quad between top and bottom bm.faces.new((verts_top[i], verts_top[i_next], verts_bottom[i_next], verts_bottom[i]))
# Smooth shading for face in mesh.polygons: face.use_smooth = True
# Generate vertices for top and bottom rings verts_top = [] verts_bottom = [] for i in range(segments): angle = 2 * math.pi * i / segments x = radius * math.cos(angle) y = radius * math.sin(angle) # Top ring with gentle undulation (z varies with angle) z_top = height * (0.5 + 0.3 * math.sin(4 * angle)) # 4 lobes v_top = bm.verts.new((x, y, z_top)) verts_top.append(v_top) # Bottom ring (flat) v_bottom = bm.verts.new((x, y, -height/2)) verts_bottom.append(v_bottom)
# Fill inner ring with a fan to close the top surface completely (making it solid) bm.faces.new(inner_verts)