I had a little break from Blender but now its time to go back and see what devs have been doing. I just converted my old pyramidaze script for 2.55. It is REALLY simple but it was my first python script back in 2006 :)
It just iterates through selected faces of the object and adds a pyramid top of them (see image above).
Here is 2.55 version:
#**********************************************************************************************
#pyramidaze.py
# - This script adds a "pyramid" over every selected face
#
# - Open this file in the Blender's text window
# - Select faces
# - set settings (see below)
# - run script (Alt + P)
#
# there is nothing special in this script but it shows how to iterate
# through all faces in selected object, how to get normal and how to
create new mesh object.
#
# Feel free to use this script any way you like, I'm sure this is very useful ;)
#
#Ari Hayrinen 29.11.2006
# updated for Blender 2.55 20.12.2010
#www.opendimension.org/blender_en
#
# TODO:
# - GUI
#
#*************************************************************************************************
import bpy
import mathutils
#************************************************************************************************
# settings
#************************************************************************************************
py_height = 1 # pyramid height if use_area is 0, negative value inverts pyramid
use_area = 1 # if 1, uses face area as pyramid height
area_multi = 1 # multiplier for face area, negative values inverts pyramid
#********************************************************************************
#main
#*********************************************************************************
objekti = bpy.context.active_object
scene = bpy.context.scene
# list for new faces
coords = []
faces = []
# counter so we know where to add new faces
verts = 0
vertices = objekti.data.vertices
# let's go through all faces in selected object
for face in objekti.data.faces:
#use only selected faces
if face.select:
center = face.center
#number of vertices
vco = len(face.vertices)
if use_area:
py_height = face.area * area_multi
#multiple normal with pyramid height and add result to the center of the face
center.x = center.x + face.normal[0] * py_height
center.y = center.y + face.normal[1] * py_height
center.z = center.z + face.normal[2] * py_height
#create vertices
coords.append([center.x,center.y,center.z])
verts +=1
for i in range(vco):
coords.append(vertices[face.vertices[i]].co)
verts +=1
#create triangles
cco = vco + 1 # number of created vertices
for j in range(vco):
if j < (vco-1):
faces.append([verts-cco, verts-(cco-(j+1)), verts-(vco-j-1)])
else:
faces.append([verts-cco, verts-(cco-(j+1)), verts-(cco-1)])
# Create new mesh block and add faces to it
mesh = bpy.data.meshes.new('myMesh')
mesh.from_pydata(coords,"",faces)
mesh.update()
new_obj = bpy.data.objects.new("koe", mesh)
scene.objects.link(new_obj)
new_obj.location = objekti.location