#**********************************************************************************************
#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 (ari.hayrinen at gmail.com)
# 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



