[Bf-python] scripts bundle : transform 3d coords of the mesh in its UV coords, v2.0
jmsoler
jmsoler at free.fr
Sat Jul 31 17:33:12 CEST 2004
#!BPY
""" Registration info for Blender menus: <- these words are ignored
Name: 'Replace MESH 3D coords to UV coords'
Blender: 233
Group: 'Mesh'
Tip: 'Help to bake procedural textures in uvmapped picture.'
"""
#----------------------------------------------
# jm soler 07/2004 : 'Procedural Texture Baker'
# (c) jm soler 07/2004 : 'Procedural Texture Baker'
# Based on a Theeth's really good idea .
# It makes a rvk with uv coords of the mesh
# released unde BlenderArtistic Licence
#----------------------------------------------
# Official Page :
# http://jmsoler.free.fr/util/blenderfile/py/3d2uvbaker.py
# For problems and errors:
# http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender
#---------------------------------------------
import Blender
from Blender import NMesh,Draw,Object,Scene,Camera
FRAME=100
XYLIMIT=[0.0,0.]
OBJPOS=0.0
def GET_newobject(TYPE):
SCENE=Blender.Scene.getCurrent()
OBJECT=Blender.Object.New(TYPE)
SCENE.link(OBJECT)
return OBJECT,SCENE
def SAVE_image(rc,name,FRAME):
MYDIR=''
RENDERDIR=rc.getRenderPath()
rc.setRenderPath(RENDERDIR+MYDIR)
print RENDERDIR+MYDIR
IMAGETYPE=Blender.Scene.Render.PNG
rc.setImageType(IMAGETYPE)
NEWFRAME=FRAME
OLDEFRAME=rc.endFrame()
OLDSFRAME=rc.startFrame()
rc.startFrame(NEWFRAME)
rc.endFrame(NEWFRAME)
rc.renderAnim()
try :
import nt
os=nt
except:
import posix
os=posix
FILENAME= "%04d"%NEWFRAME
FILENAME=FILENAME.replace(' ','0')
FILENAME=RENDERDIR+MYDIR+FILENAME
try:
TRUE=os.stat(FILENAME)
os.rename(FILENAME,RENDERDIR+MYDIR+name+'.png')
except:
pass
rc.endFrame(OLDEFRAME)
rc.startFrame(OLDSFRAME)
rc.setRenderPath(RENDERDIR)
def SHOOT(XYlimit,frame,obj,name,FRAME):
try:
CAM=Blender.Object.Get('UVCAMERA')
Cam=CAM.getData()
SC=Blender.Scene.getCurrent()
except:
Cam=Blender.Camera.New()
Cam.name='UVCamera'
CAM,SC=GET_newobject('Camera')
CAM.link(Cam)
CAM.setName('UVCAMERA')
Cam.lens=30
Cam.name='UVCamera'
CAM.setLocation(obj.getLocation())
CAM.LocX+=XYlimit[0]/2.0
CAM.LocY+=XYlimit[1]/2.0
CAM.LocZ+=max(XYlimit[0],XYlimit[1])
CAM.setEuler(0.0,0.0,0.0)
try:
#lampe=Blender.Lamp.Get('lumin')
LAMP=Blender.Object.Get('Eclairage')
lampe=LAMP.getData()
SC=Blender.Scene.getCurrent()
except:
lampe=Blender.Lamp.New()
lampe.name='lumin'
LAMP,SC=GET_newobject('Lamp')
LAMP.link(lampe)
LAMP.setName('Eclairage')
LAMP.setLocation(obj.getLocation())
LAMP.LocX+=XYlimit[0]/2.0
LAMP.LocY+=XYlimit[1]/2.0
LAMP.LocZ+=max(XYlimit[0],XYlimit[1])
LAMP.setEuler(0.0,0.0,0.0)
context = SC.getRenderingContext()
Camold=SC.getCurrentCamera()
SC.setCurrentCamera(CAM)
OLDy=context.imageSizeY()
OLDx=context.imageSizeX()
context.imageSizeY(400)
context.imageSizeX(400)
SAVE_image(context,name,FRAME)
context.imageSizeY(OLDy)
context.imageSizeX(OLDx)
SC.setCurrentCamera(Camold)
Blender.Set('curframe',frame)
def Mesh2UVCoord():
try:
MESH3D=Object.GetSelected()[0]
if MESH3D.getType()=='Mesh':
MESH=MESH3D.getData()
MESH2=Blender.NMesh.GetRaw()
for f in MESH.faces:
f1=Blender.NMesh.Face()
for v in f.v:
v1= Blender.NMesh.Vert(v.co[0],v.co[1],v.co[2])
MESH2.verts.append(v1)
f1.v.append(MESH2.verts[len(MESH2.verts)-1])
MESH2.faces.append(f1)
f1.uv= f.uv[:]
f1.col=f.col[:]
f1.smooth=f.smooth
f1.mode=f.mode
f1.flag=f.flag
f1.mat=f.mat
MESH2.materials=MESH.materials[:]
NewOBJECT, CurSCENE=GET_newobject('Mesh')
NewOBJECT.link(MESH2)
NewOBJECT.setLocation(OBJPOS,OBJPOS,0.0)
NewOBJECT.setEuler(0.0,0.0,0.0)
MESH2.removeAllKeys()
MESH2.update()
MESH2.insertKey(1,'absolute')
MESH2.update()
for f in MESH2.faces:
for v in f.v:
for n in [0,1]:
v.co[n]=f.uv[f.v.index(v)][n]
exec "if v.co[%s]>XYLIMIT[%s]:XYLIMIT[%s]=v.co[%s]"%(n,n,n,n)
v.co[2]=0.0
print XYLIMIT
MESH2.update()
MESH2.insertKey(FRAME,'absolute')
MESH2.update()
imagename='uvtext'
name = "Change image name ? %t|Replace yes | no"
result = Draw.PupMenu(name)
if result ==1:
imagename=Draw.PupStrInput('Image Name:', imagename, 32)
SHOOT(XYLIMIT, FRAME,NewOBJECT,imagename,FRAME)
Blender.Redraw()
else:
name = "problem : not a mesh or no uv %t"
result = Draw.PupMenu(name)
print 'problem : not object selected or not mesh'
except:
name = "problem : not object selected or not a mesh %t"
result = Draw.PupMenu(name)
print 'problem : not object selected or not mesh'
Mesh2UVCoord()
More information about the Bf-python
mailing list