Sei sulla pagina 1di 4

#!

bpy

"""
name: 'shape keys for sculpted mesh'
blender: '2.44'
group: 'misc'
tooltip: 'draws extrution of a selected brush.'
"""

__author__ = "scorpion9"
__url__ = ("www.zone.ee/gamenet")
__version__ = "1.0 08/08/07"
# --------------------------------------------------------------------------
# ***** begin gpl license block *****
#
# copyright (c) 2007: scorpion9, http://your web address
#
# this program is free software; you can redistribute it and/or
# modify it under the terms of the gnu general public license
# as published by the free software foundation; either version 2
# of the license, or (at your option) any later version.
#
# this program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose. see the
# gnu general public license for more details.
#
# you should have received a copy of the gnu general public license
# along with this program; if not, write to the free software foundation,
# inc, 59 temple place - suite 330, boston, ma 02111-1307, usa.
#
# ***** end gpl licence block *****
# --------------------------------------------------------------------------
import blender
from blender import *
import math
from blender.draw import *
from blender.bgl import *
from math import *
from blender import mathutils
from blender.mathutils import *
from blender.noise import random
firsttime = 1
def script():

global firsttime
firsttime = 1
vertsinline = 20
nofl = 0
noedges = []
degh = 0
degv = 360
scene = blender.scene.getcurrent()
obj = blender.mesh.new("fractureline")
sel = blender.object.getselected()
print "selection length is ",len(sel)
if len(sel) == 1:
objdub = blender.mesh.new("duplicate")
vertsdub = objdub.verts
edgesdub = objdub.edges
facesdub = objdub.faces
#scene.objects.new(obj,"freehand")
scene.objects.new(objdub,"duplicate")
else:
objdub = sel[1]
objdub = objdub.getdata(mesh = 1)
vertsdub = objdub.verts
print "vertsdub is ",vertsdub
edgesdub = objdub.edges
facesdub = objdub.faces
#<>
verts = obj.verts
faces = obj.faces
edges = obj.edges
sel = blender.object.getselected()
print "sel",sel
if sel:obj3=sel[0]
obj2 = obj3.getdata(mesh = 1)
verts2 = obj2.verts
edges2 = obj2.edges
faces2 = obj2.faces
print len(verts2),"length "
def makeduplicate():
vertsbuf = []
edgesbuf = []
facesbuf = []
for v in verts2:
vertsbuf.append([v.co[0],v.co[1],v.co[2]])
vertsdub.extend(vertsbuf)
for e in edges2:
edgesbuf.append([e.v1.index,e.v2.index])
edgesdub.extend(edgesbuf)
for f in faces2:

facesbuf.append([f.verts[0].index,f.verts[1].index,f.verts[2].index,f.verts[3].ind
ex])
facesdub.extend(facesbuf)
def moveduplicate():
print "vertsdub ",vertsdub," verts2 ",verts2
print "vertsdub len ",len(vertsdub)," verts2 len",len(verts2)
for v in verts2:
vertsdub[v.index].co[0] = v.co[0]
vertsdub[v.index].co[1] = v.co[1]
vertsdub[v.index].co[2] = v.co[2]
if len(vertsdub)==0:
makeduplicate()
else:
moveduplicate()

def fractureline(degh,degv,vertsinline):
global firsttime #fracture line
horizontal = 0
vertical = 0
for i in range(0,vertsinline):
if firsttime == 0:
print "moved verts",horizontal
verts[i].co[0]=horizontal
verts[i].co[1]=vertical
verts[i].co[2]=random()
horizontal += random()*degh
vertical += random()*degv
if firsttime == 1:
verts.extend(horizontal,vertical,random())
if i == vertsinline-1:firsttime = 0
horizontal += random()*degh
vertical += random()*degv
obj.insertkey(i,"relative")
def createline(nofl): #create line
for v in verts:
if (len(verts)>v.index+1) and (v.index+1 not in noedges):
edges.extend(v.index,v.index+1)
def fcircle(degh,degv,nofl):
for i in range(0,20):
fractureline(sin(radians(degh)),cos(radians(degv)),vertsinline)
nofl+=1
noedges.append((nofl*20))
degh += (360/20)
degv += -(360/20)
createline(nofl)
#for i in range(1,10):

#fractureline(1,1,vertsinline)
#createline(1)
#blender.sys.sleep(10)
#blender.redraw()

#nofl = 0
#noedges = []

#obj2.insertkey(1,"relative")
objdub.insertkey()
print "****************************************************************"
print "*********************script end*********************************"
print "****************************************************************"

#scene.objects.new(obj,"fractureline")
blender.redraw()

#
#gui
createkey = create(0)
exits = create(0)
def draw():
glclearcolor(0.5,0.5,1,1)
glclear(gl_color_buffer_bit)
global createkey,exits
glrasterpos2i(10,211)
text("this script creates shape keys for sculpted mesh")
glrasterpos2i(10,191)
text("to start the script,select your object and press �create key�")
glrasterpos2i(10,171)
text("also, press �create key� every time you want to add a new key ")
glrasterpos2i(10,151)
text("nb! the original mesh must be active while script is running")
glrasterpos2i(10,131)
text("nb! the duplicated mesh must also be selected")
glrasterpos2i(10,111)
text("nb! the shape keys will be added to the duplicate,not to the original
mesh")
createkey = pushbutton("createkey",5,15,81,101,20,"adds a new key")
exits = pushbutton("exit",1,15,61,101,20,"start the script")
def exit(evt,val):
if (evt ==3 and not val) or evt == esckey:
exit()
def events(evt):
if evt ==1:exit()
if evt ==2:script()
if evt ==5:script()
register(draw,exit,events)

Potrebbero piacerti anche