A bmesh solution
As an exercise wrote a bmesh script to take a single ngon mesh and make it a consistent pyramid with steps
steps of size step_size
.
I've used the the primitive plane add as a default ngon. Comment that part out, manually add any single ngon face object, select it, and run script in object mode.
Basically the script takes a face, makes the base (solidify), then insets and extrudes along the normal for each extra step of the pyramid. By no means the quickest way to do this, however for non-regular based pyramids produces solution which may be easier than editing from regular pyramid created using extra objects addon's stepped pyramid.
Sample runs, on default plane, filled ngon circle, and arbitrary 6 sided ngon shaped mesh
import bpy
from mathutils import Vector
import bmesh
step_size = 0.1
steps = 10
# remove and make some single ngon active mesh object for arbitrary base
bpy.ops.mesh.primitive_plane_add()
context = bpy.context
ob = context.object
me = ob.data
bm = bmesh.new()
bm.from_mesh(me)
faces = bm.faces[:]
vec = step_size * faces[0].normal #* Vector((0, 0, 1))
# make the base
bmesh.ops.solidify(bm, geom=faces, thickness=step_size)
bmesh.ops.translate(bm, vec=vec, verts=bm.verts)
steps -= 1
for s in range(steps):
bmesh.ops.inset_individual(bm, faces=faces, use_even_offset=True, thickness=step_size)
ret = bmesh.ops.extrude_face_region(bm, geom=faces)
faces = [f for f in ret['geom'] if isinstance(f, bmesh.types.BMFace)]
verts=[v for v in ret['geom'] if isinstance(v, bmesh.types.BMVert)]
bmesh.ops.translate(bm, vec=vec, verts=verts)
bm.to_mesh(me)