maanantai 20. joulukuuta 2010

Towards Blender 2.55





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

Ei kommentteja:

Lähetä kommentti