Scripts updated:

- Jean-Michel Soler: 1) paths import -- ai module; 2) tex2uvbaker;
- Campbell Barton: obj exporter.

BPython:
- Campbell also provided a patch (+docs) to add shader data access to Blender.Material.

Again, thanks guys and sorry for the long delay.
This commit is contained in:
Willian Padovani Germano
2005-08-01 03:06:24 +00:00
parent 3f9d13c119
commit f6ff9ec608
6 changed files with 888 additions and 107 deletions

View File

@@ -316,6 +316,8 @@ def ligne_fermee(l,n0,CP):
del courbes.ITEM[n0].beziers_knot[0]
return courbes,n0,CP
def passe(l,n0,CP):
return courbes,n0,CP
Actions= { "C" : courbe_vers_c,
"c" : courbe_vers_c,
@@ -326,12 +328,14 @@ Actions= { "C" : courbe_vers_c,
"m" : mouvement_vers,
"l" : ligne_tracee_l,
"L" : ligne_tracee_l,
"F" : passe,
"f" : ligne_fermee,
"B" : passe,
"b" : ligne_fermee,
"S" : passe,
"s" : ligne_fermee,
"N" : ligne_fermee,
"n" : passe,
}
TAGcourbe=Actions.keys()

View File

@@ -21,7 +21,7 @@ Run this script from "File->Export" menu to export all meshes.
# --------------------------------------------------------------------------
# OBJ Export v0.9 by Campbell Barton (AKA Ideasman)
# OBJ Export v0.9b by Campbell Barton (AKA Ideasman)
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
@@ -63,6 +63,7 @@ def save_mtl(filename):
file.write('Kd %.6f %.6f %.6f\n' % tuple(mat.getRGBCol())) # Diffuse
file.write('Ka %.6f %.6f %.6f\n' % tuple(mat.getMirCol())) # Ambient, uses mirror colour,
file.write('Ks %.6f %.6f %.6f\n' % tuple(mat.getSpecCol())) # Specular
file.write('Ni %.6f\n' % mat.getIOR()) # Refraction index
file.write('d %.6f\n' % mat.getAlpha()) # Alpha (obj uses 'd' for dissolve)
# illum, 0 to disable lightng, 2 is normal.
@@ -80,7 +81,7 @@ def save_obj(filename):
save_mtl(mtlfilename)
file = open(filename, "w")
# Write Header
file.write('# Blender OBJ File: %s\n' % (Get('filename')))
file.write('# www.blender.org\n')
@@ -91,6 +92,8 @@ def save_obj(filename):
# Initialize totals, these are updated each object
totverts = totuvco = 0
globalUVCoords = {}
# Get all meshs
for ob in scn.getChildren():
if ob.getType() != 'Mesh':
@@ -100,7 +103,14 @@ def save_obj(filename):
if not m.faces: # Make sure there is somthing to write
continue #dont bother with this mesh.
faces = [ f for f in m.faces if len(f) > 2 ]
materials = m.materials
# Sort by Material so we dont over context switch in the obj file.
if len(materials) > 1:
faces.sort(lambda a,b: cmp(a.mat, b.mat))
# Set the default mat
currentMatName = NULL_MAT
currentImgName = NULL_IMG
@@ -112,24 +122,27 @@ def save_obj(filename):
file.write('v %.6f %.6f %.6f\n' % tuple(v.co))
# UV
for f in m.faces:
for uvIdx in range(len(f.v)):
if f.uv:
file.write('vt %.6f %.6f 0.0\n' % f.uv[uvIdx])
else:
file.write('vt 0.0 0.0 0.0\n')
if m.hasFaceUV():
for f in faces:
for uv in f.uv:
uvKey = '%.6f %.6f' % uv
try:
dummy = globalUVCoords[uvKey]
except KeyError:
totuvco +=1 # 1 based index.
globalUVCoords[uvKey] = totuvco
file.write('vt %s 0.0\n' % uvKey)
# NORMAL
for f in m.faces:
for v in f.v:
file.write('vn %.6f %.6f %.6f\n' % tuple(v.no))
for v in m.verts:
file.write('vn %.6f %.6f %.6f\n' % tuple(v.no))
uvIdx = 0
for f in m.faces:
for f in faces:
# Check material and change if needed.
if len(m.materials) > f.mat:
if currentMatName != m.materials[f.mat].getName():
currentMatName = m.materials[f.mat].getName()
if len(materials) > 0:
if currentMatName != materials[f.mat].getName():
currentMatName = materials[f.mat].getName()
file.write('usemtl %s\n' % (currentMatName))
elif currentMatName != NULL_MAT:
@@ -146,19 +159,23 @@ def save_obj(filename):
elif currentImgName != NULL_IMG: # Not using an image so set to NULL_IMG
currentImgName = NULL_IMG
# Set a new image for all following faces
# Set a ne w image for all following faces
file.write( 'usemap %s\n' % currentImgName) # No splitting needed.
file.write('f ')
for v in f.v:
file.write( '%s/%s/%s ' % (v.index + totverts+1, uvIdx+totuvco+1, uvIdx+totuvco+1))
uvIdx+=1
file.write('f')
if m.hasFaceUV():
for vi, v in enumerate(f.v):
uvIdx = globalUVCoords[ '%.6f %.6f' % f.uv[vi] ]
i = v.index + totverts + 1
file.write( ' %d/%d/%d' % (i, uvIdx, i)) # vert, uv, normal
else: # No UV's
for v in f.v:
file.write( ' %d' % (v.index + totverts+1))
file.write('\n')
# Make the indicies global rather then per mesh
totverts += len(m.verts)
totuvco += uvIdx
file.close()
print "obj export time: %.2f" % (sys.time() - time1)

View File

@@ -11,7 +11,7 @@ __author__ = "Jean-Michel Soler (jms)"
__url__ = ("blender", "elysiun",
"Official Page, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_mesh3d2uv2d_en.htm",
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
__version__ = "0.2.6 2005/5/29"
__version__ = "0.2.8 2005/7/20"
__bpydoc__ = """\
Texture Baker "bakes" Blender procedural materials (including textures): it saves them as 2d uv-mapped images.
@@ -37,7 +37,7 @@ Notes:<br>
"""
#---------------------------------------------
# Last release : 0.2.6 , 2005/05/29 , 22h00
# Last release : 0.2.8 , 2005/07/20 , 17h10
#---------------------------------------------
#---------------------------------------------
# (c) jm soler 07/2004 : 'Procedural Texture Baker'
@@ -47,6 +47,26 @@ Notes:<br>
#
# Released under Blender Artistic Licence
#
# 0.2.8
# -- added the forgotten image property in face
# data. a little longer but better.
# ( a remove double in the resulting mesh may be
# useful .)
# -- the data.update() function problem is
# corrected too
# -- no more layers problem . CAM and MESH are
# localised in layer 20 . This layer is
# the active one for the image rendering .
# -- mesh creation is cleaner, loop in double was
# removed and the abskey is set in frame 1
# only . This solves an other deform problem .
# -- if user does not want an autosaved image,
# the "no replace" option leaves the render
# window on the screen
#
# 0.2.7
# -- minor correction on line 147: "!=-1" added
#
# 0.2.6
# -- Creation of LAMP object is removed and replaced
# by the use of the shadeless option in material object
@@ -142,7 +162,7 @@ DIRNAME=Blender.Get('filename')
# the file name from the path name
#-----------------------------------
if DIRNAME.find(os.sep):
if DIRNAME.find(os.sep)!=-1:
k0=DIRNAME.split(os.sep)
else:
k0=DIRNAME.split('/')
@@ -178,6 +198,8 @@ LIMIT=0
XYLIMIT = [0.0, 0.0,1.0,1.0]
OBJPOS = 100.0
DEBUG=1
RENDERLAYER=20
SCENELAYERS=[]
helpmsg = """
Texture Baker:
@@ -234,7 +256,7 @@ def RenameImage(RDIR, MYDIR, FILENAME, name):
name = Draw.PupStrInput ('ReName Image, please :', name, 32)
RenameImage(RDIR, MYDIR, FILENAME, name)
def SAVE_image (rc, name, FRAME):
def SAVE_image (rc, name, FRAME, result):
"""
# ---------------------------
# Function SAVE_image
@@ -268,26 +290,25 @@ def SAVE_image (rc, name, FRAME):
rc.startFrame(NEWFRAME)
rc.endFrame(NEWFRAME)
rc.renderAnim()
Blender.Scene.Render.CloseRenderWindow()
FILENAME = "%04d" % NEWFRAME
FILENAME = FILENAME.replace (' ', '0')
FILENAME = RDIR + MYDIR + FILENAME + '.png'
RenameImage(RDIR, MYDIR, FILENAME, name)
if result!=2 and not KEEPRENDERWINDOW:
Blender.Scene.Render.CloseRenderWindow()
FILENAME = "%04d" % NEWFRAME
FILENAME = FILENAME.replace (' ', '0')
FILENAME = RDIR + MYDIR + FILENAME + '.png'
RenameImage(RDIR, MYDIR, FILENAME, name)
rc.endFrame(OLDEFRAME)
rc.startFrame(OLDSFRAME)
rc.setRenderPath(RENDERDIR)
def SHOOT (XYlimit, frame, obj, name, FRAME):
def SHOOT (XYlimit, frame, obj, name, FRAME, result):
"""
# ---------------------------
# Function SHOOT
#
# IN : XYlimit list of 4 floats, smallest and biggest
# uvcoords
# frame cureente frame
# frame current frame
# obj for object location
# name image name
# FRAME the last animation's frame
@@ -305,6 +326,7 @@ def SHOOT (XYlimit, frame, obj, name, FRAME):
CAM, SC = GET_newobject('Camera','UVCAMERA')
CAM.link(Cam)
CAM.setName('UVCAMERA')
CAM.layers=[RENDERLAYER]
Cam.lens = 30
Cam.name = 'UVCamera'
@@ -333,13 +355,15 @@ def SHOOT (XYlimit, frame, obj, name, FRAME):
elif (tres) == 5: res = 2048
else: res = 512
SCENELAYERS=SC.layers
SC.layers = [20]
context.imageSizeY(res)
context.imageSizeX(res)
SAVE_image (context, name, FRAME)
SAVE_image (context, name, FRAME, result)
context.imageSizeY(OLDy)
context.imageSizeX(OLDx)
if Camold :SC.setCurrentCamera(Camold)
SC.layers = SCENELAYERS
if Camold : SC.setCurrentCamera(Camold)
Blender.Set ('curframe', frame)
@@ -393,6 +417,8 @@ def Mesh2UVCoord (LIMIT):
# OUT: nothing
# ---------------------------
"""
global PUTRAW, FRAME, SCENELAYERS
try:
MESH3D = Object.GetSelected()[0]
if MESH3D.getType() == 'Mesh':
@@ -401,18 +427,21 @@ def Mesh2UVCoord (LIMIT):
try:
NewOBJECT=Blender.Object.Get('UVOBJECT')
CurSCENE=Blender.Scene.getCurrent()
MESH2 = NewOBJECT.getData()
except:
NewOBJECT, CurSCENE = GET_newobject('Mesh','UVOBJECT')
MESH2 = Blender.NMesh.GetRaw()
MESH2 = NewOBJECT.getData()
NewOBJECT.layers=[RENDERLAYER]
MESH2.faces=[]
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])
v1 = Blender.NMesh.Vert (0.0, 0.0, 0.0)
for n in [0,1]:
v1.co[n] = f.uv[f.v.index(v)][n]
exec "if v1.co[%s] > XYLIMIT[%s]: XYLIMIT[%s] = v1.co[%s]" % (n, n+2, n+2, n)
exec "if v1.co[%s] < XYLIMIT[%s]: XYLIMIT[%s] = v1.co[%s]" % (n, n, n, n)
v1.co[2] = 0.0
MESH2.verts.append(v1)
f1.v.append(MESH2.verts[len(MESH2.verts) - 1])
@@ -423,32 +452,23 @@ def Mesh2UVCoord (LIMIT):
f1.mode = f.mode
f1.flag = f.flag
f1.mat = f.mat
#-----------------------------------
# release : 0.2.8 , 2005/07/19 , end
#-----------------------------------
try:
f1.image=f.image
except :
pass
MESH2.materials = MESH.materials[:]
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+2, n+2, n)
exec "if v.co[%s] < XYLIMIT[%s]: XYLIMIT[%s] = v.co[%s]" % (n, n, n, n)
v.co[2] = 0.0
if DEBUG: print XYLIMIT
MESH2.update()
MESH2.insertKey (FRAME, 'absolute')
MESH2.update()
imagename = 'uvtext'
name = "CHANGE IMAGE NAME ? %t | Replace it | No replacing | Script help"
@@ -467,9 +487,9 @@ def Mesh2UVCoord (LIMIT):
#-----------------------------------
if LIMIT :
SHOOT(XYLIMIT, FRAME, NewOBJECT, imagename, FRAME)
SHOOT(XYLIMIT, FRAME, NewOBJECT, imagename, FRAME,result)
else :
SHOOT([0.0,0.0,1.0,1.0], FRAME, NewOBJECT, imagename, FRAME)
SHOOT([0.0,0.0,1.0,1.0], FRAME, NewOBJECT, imagename, FRAME, result)
#-----------------------------------
# release : 0.2.6, 2005/05/29 , 00h00
#-----------------------------------