more updates, mostly 2.3 error checking, nice messages when pythons not installed and some nendo import optimizations.
BPyMesh will work with the exception of the redux function in py2.3
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import Blender
|
||||
from BPyMesh_redux import redux # seperated because of its size.
|
||||
#import BPyMesh_redux
|
||||
#reload(BPyMesh_redux)
|
||||
#redux= BPyMesh_redux.redux
|
||||
# from BPyMesh_redux import redux # seperated because of its size.
|
||||
import BPyMesh_redux
|
||||
reload(BPyMesh_redux)
|
||||
redux= BPyMesh_redux.redux
|
||||
|
||||
# python 2.3 has no reversed() iterator. this will only work on lists and tuples
|
||||
try:
|
||||
@@ -15,7 +15,10 @@ except:
|
||||
try:
|
||||
set
|
||||
except:
|
||||
try:
|
||||
from sets import Set as set
|
||||
except:
|
||||
set= None
|
||||
|
||||
|
||||
def meshWeight2Dict(me):
|
||||
@@ -642,6 +645,10 @@ def ngon(from_data, indices, PREF_FIX_LOOPS= True):
|
||||
indices: a list of indicies to use this list is the ordered closed polyline to fill, and can be a subset of the data given.
|
||||
PREF_FIX_LOOPS: If this is enabled polylines that use loops to make multiple polylines are delt with correctly.
|
||||
'''
|
||||
|
||||
if not set: # Need sets for this, otherwise do a normal fill.
|
||||
PREF_FIX_LOOPS= False
|
||||
|
||||
Vector= Blender.Mathutils.Vector
|
||||
if not indices:
|
||||
return []
|
||||
|
||||
@@ -33,7 +33,10 @@ import BPyMesh
|
||||
try:
|
||||
set
|
||||
except:
|
||||
try:
|
||||
from sets import Set as set
|
||||
except:
|
||||
set= None
|
||||
|
||||
def uv_key(uv):
|
||||
return round(uv.x, 5), round(uv.y, 5)
|
||||
@@ -63,6 +66,8 @@ def redux(ob, REDUX=0.5, BOUNDRY_WEIGHT=2.0, REMOVE_DOUBLES=False, FACE_AREA_WEI
|
||||
|
||||
if REDUX<0 or REDUX>1.0:
|
||||
raise 'Error, factor must be between 0 and 1.0'
|
||||
elif not set:
|
||||
raise 'Error, this function requires Python 2.4 or a full install of Python 2.3'
|
||||
|
||||
BOUNDRY_WEIGHT= 1+BOUNDRY_WEIGHT
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ importername = "lwo_import 0.3.0a - devel"
|
||||
# +----------------------------------------------------------
|
||||
# +---------------------------------------------------------+
|
||||
# | Release log: |
|
||||
# | 0.2.2 : This code works with Blender 2.42 RC3 |
|
||||
# | Added a new PolyFill function for BPYMesh's |
|
||||
# | ngon() to use, checked compatibility |
|
||||
# | lightwaves ngons are imported as fgons |
|
||||
# | Checked compatibility against 1711 lwo files |
|
||||
# | 0.2.1 : This code works with Blender 2.40 RC1 |
|
||||
# | modified material mode assignment to deal with |
|
||||
# | Python API modification |
|
||||
@@ -85,8 +90,14 @@ import Blender
|
||||
# use for comprehensiveImageLoad
|
||||
import BPyImage
|
||||
|
||||
# Use this ngon function
|
||||
import BPyMesh
|
||||
|
||||
#python specific modules import
|
||||
import struct, chunk, os, cStringIO
|
||||
try:
|
||||
import struct, chunk, os, cStringIO
|
||||
except:
|
||||
struct= chunk= os= cStringIO= None
|
||||
|
||||
# ===========================================================
|
||||
# === Utility Preamble ======================================
|
||||
@@ -1060,8 +1071,6 @@ def read_surfs(lwochunk, surf_list, tag_list):
|
||||
|
||||
|
||||
|
||||
import BPyMesh
|
||||
reload(BPyMesh)
|
||||
def reduce_face(verts, face):
|
||||
TriangleArea= Blender.Mathutils.TriangleArea
|
||||
Vector= Blender.Mathutils.Vector
|
||||
@@ -1428,35 +1437,6 @@ def create_objects(clip_list, objspec_list, surf_list):
|
||||
return
|
||||
|
||||
|
||||
# =====================
|
||||
# === Load an image ===
|
||||
# =====================
|
||||
#extensively search for image name
|
||||
"""
|
||||
def load_image(dir_part, name):
|
||||
img = None
|
||||
nname = os.path.splitext(name)
|
||||
lname = [c.lower() for c in nname]
|
||||
ext_list = [nname[1]]
|
||||
if lname[1] != nname[1]:
|
||||
ext_list.append(lname[1])
|
||||
ext_list.extend(['.tga', '.png', '.jpg', '.gif', '.bmp']) #order from best to worst (personal judgement) bmp last cause of nasty bug
|
||||
#first round: original "case"
|
||||
name_list = []
|
||||
name_list.extend([os.path.join(dir_part, nname[0] + ext) for ext in ext_list])
|
||||
#second round: lower "case"
|
||||
if lname[0] != nname[0]:
|
||||
name_list.extend([os.path.join(dir_part, lname[0] + ext) for ext in ext_list])
|
||||
for nn in name_list:
|
||||
if os.path.exists(nn) == 1:
|
||||
break
|
||||
try:
|
||||
img = Blender.Image.Load(nn)
|
||||
return img
|
||||
except IOError:
|
||||
return None
|
||||
"""
|
||||
|
||||
|
||||
# ===========================================
|
||||
# === Lookup for image index in clip_list ===
|
||||
@@ -1788,16 +1768,15 @@ def read_faces_6(lwochunk):
|
||||
tobj.pprint("read %s faces; type of block %d (0=FACE; 1=PATCH)" % (len(faces), subsurf))
|
||||
return faces, subsurf
|
||||
|
||||
def main():
|
||||
if not struct:
|
||||
Blender.Draw.PupMenu('This importer requires a full python install')
|
||||
return
|
||||
|
||||
Blender.Window.FileSelector(read, "Import LWO", '*.lwo')
|
||||
|
||||
# ===========================================================
|
||||
# === Start the show and main callback ======================
|
||||
# ===========================================================
|
||||
|
||||
def fs_callback(filename):
|
||||
read(filename)
|
||||
|
||||
Blender.Window.FileSelector(fs_callback, "Import LWO")
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
||||
# Cams debugging lwo loader
|
||||
"""
|
||||
|
||||
@@ -70,17 +70,25 @@ edges during the course of modeling.
|
||||
# ***** END GPL LICENCE BLOCK *****
|
||||
|
||||
import Blender, meshtools
|
||||
import struct, time, sys, os
|
||||
try:
|
||||
import struct, os
|
||||
except:
|
||||
struct= None
|
||||
|
||||
# =============================
|
||||
# === Read Nendo 1.x Format ===
|
||||
# =============================
|
||||
def read(filename):
|
||||
start = time.clock()
|
||||
start = Blender.sys.time()
|
||||
|
||||
scn= Blender.Scene.GetCurrent()
|
||||
for obj in scn.getChildren():
|
||||
obj.sel= 0
|
||||
|
||||
file = open(filename, "rb")
|
||||
version, numobjs = read_header(file)
|
||||
|
||||
for object in range(numobjs):
|
||||
for object in xrange(numobjs):
|
||||
good, = struct.unpack(">B", file.read(1))
|
||||
if not good: continue # an empty object
|
||||
objname = read_object_flags(file)
|
||||
@@ -94,9 +102,9 @@ def read(filename):
|
||||
|
||||
Blender.Window.DrawProgressBar(1.0, "Done") # clear progressbar
|
||||
file.close()
|
||||
end = time.clock()
|
||||
end = Blender.sys.time()
|
||||
seconds = " in %.2f %s" % (end-start, "seconds")
|
||||
message = "Successfully imported " + os.path.basename(filename) + seconds
|
||||
message = "Successfully imported " + filename.split(Blender.sys.sep)[-1] + seconds
|
||||
message += " (%s)" % version.title()
|
||||
meshtools.print_boxed(message)
|
||||
|
||||
@@ -130,7 +138,7 @@ def read_object_flags(file):
|
||||
def read_edge_table(file, version):
|
||||
numedges, = struct.unpack(">H", file.read(2))
|
||||
edge_table = {}
|
||||
for i in range(numedges):
|
||||
for i in xrange(numedges):
|
||||
if not i%100 and meshtools.show_progress:
|
||||
Blender.Window.DrawProgressBar(float(i)/numedges, "Reading Edge Table")
|
||||
edge = struct.unpack(">8H", file.read(16))
|
||||
@@ -146,7 +154,7 @@ def read_edge_table(file, version):
|
||||
def read_face_table(file):
|
||||
numfaces, = struct.unpack(">H", file.read(2))
|
||||
face_table = {}
|
||||
for i in range(numfaces):
|
||||
for i in xrange(numfaces):
|
||||
if not i%100 and meshtools.show_progress:
|
||||
Blender.Window.DrawProgressBar(float(i)/numfaces, "Reading Face Table")
|
||||
face_table[i] = struct.unpack(">H", file.read(2))[0]
|
||||
@@ -158,7 +166,7 @@ def read_face_table(file):
|
||||
def read_vert_table(file):
|
||||
numverts, = struct.unpack(">H", file.read(2))
|
||||
vert_table = []
|
||||
for i in range(numverts):
|
||||
for i in xrange(numverts):
|
||||
if not i%100 and meshtools.show_progress:
|
||||
Blender.Window.DrawProgressBar(float(i)/numverts, "Reading Vertex Table")
|
||||
w, x, y, z = struct.unpack(">H3f", file.read(14))
|
||||
@@ -196,7 +204,7 @@ def make_verts(vert_table):
|
||||
[0.0,-0.1, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 1.0]]
|
||||
verts = []
|
||||
for i in range(len(vert_table)):
|
||||
for i in xrange(len(vert_table)):
|
||||
vertex = vert_table[i][1]
|
||||
vertex = meshtools.apply_transform(vertex, matrix)
|
||||
verts.append(vertex)
|
||||
@@ -207,11 +215,10 @@ def make_verts(vert_table):
|
||||
# =======================
|
||||
def make_face_table(edge_table): # For Nendo
|
||||
face_table = {}
|
||||
for i in range(len(edge_table)):
|
||||
for i in xrange(len(edge_table)):
|
||||
Lf = edge_table[i][2]
|
||||
Rf = edge_table[i][3]
|
||||
face_table[Lf] = i
|
||||
face_table[Rf] = i
|
||||
face_table[Lf] = face_table[Rf] = i
|
||||
return face_table
|
||||
|
||||
# =======================
|
||||
@@ -219,11 +226,10 @@ def make_face_table(edge_table): # For Nendo
|
||||
# =======================
|
||||
def make_vert_table(edge_table): # For Nendo
|
||||
vert_table = {}
|
||||
for i in range(len(edge_table)):
|
||||
for i in xrange(len(edge_table)):
|
||||
Sv = edge_table[i][1]
|
||||
Ev = edge_table[i][0]
|
||||
vert_table[Sv] = i
|
||||
vert_table[Ev] = i
|
||||
vert_table[Sv] = vert_table[Ev]= i
|
||||
return vert_table
|
||||
|
||||
# ==================
|
||||
@@ -233,7 +239,7 @@ def make_faces(edge_table): # For Nendo
|
||||
face_table = make_face_table(edge_table)
|
||||
faces=[]
|
||||
#for i in range(len(face_table)):
|
||||
for i in face_table.keys(): # avoids a whole class of errors
|
||||
for i in face_table.iterkeys(): # avoids a whole class of errors
|
||||
face_verts = []
|
||||
current_edge = face_table[i]
|
||||
while(1):
|
||||
@@ -250,7 +256,14 @@ def make_faces(edge_table): # For Nendo
|
||||
faces.append(face_verts)
|
||||
return faces
|
||||
|
||||
def fs_callback(filename):
|
||||
read(filename)
|
||||
|
||||
Blender.Window.FileSelector(fs_callback, "Import Nendo")
|
||||
def main():
|
||||
if not struct:
|
||||
Blender.Draw.PupMenu('This importer requires a full python install')
|
||||
return
|
||||
|
||||
Blender.Window.FileSelector(read, 'Import Nendo', '*.ndo')
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ def file_callback(filename):
|
||||
return
|
||||
|
||||
file = open(filename, 'wb')
|
||||
|
||||
mesh = BPyMesh.getMeshFromObject(object, None, True, False, scn)
|
||||
if not mesh:
|
||||
Blender.Draw.PupMenu('Error%t|Could not get mesh data from active object')
|
||||
@@ -56,7 +57,13 @@ def file_callback(filename):
|
||||
|
||||
mesh.transform(object.matrixWorld)
|
||||
|
||||
have_uv = mesh.faceUV
|
||||
if mesh.vertexColors or mesh.faceUV:
|
||||
mesh.faceUV= 1
|
||||
have_uv= True
|
||||
else:
|
||||
have_uv= False
|
||||
|
||||
|
||||
verts = [] # list of dictionaries
|
||||
vdict = {} # (index, normal, uv) -> new index
|
||||
for i, f in enumerate(mesh.faces):
|
||||
@@ -130,4 +137,11 @@ def file_callback(filename):
|
||||
file.write('\n')
|
||||
file.close()
|
||||
|
||||
Blender.Window.FileSelector(file_callback, 'PLY Export', Blender.sys.makename(ext='.ply'))
|
||||
|
||||
|
||||
def main():
|
||||
Blender.Window.FileSelector(file_callback, 'PLY Export', Blender.sys.makename(ext='.ply'))
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
||||
@@ -41,7 +41,10 @@ Run this script from "File->Import" and select the desired PLY file.
|
||||
# 2.32.
|
||||
|
||||
import Blender, meshtools
|
||||
import re, struct, StringIO
|
||||
try:
|
||||
import re, struct, StringIO
|
||||
except:
|
||||
struct= None
|
||||
|
||||
class element_spec:
|
||||
name = ''
|
||||
@@ -301,5 +304,19 @@ def filesel_callback(filename):
|
||||
message = 'Successfully imported ' + Blender.sys.basename(filename) + ' ' + str(Blender.sys.time()-t)
|
||||
meshtools.print_boxed(message)
|
||||
|
||||
Blender.Window.FileSelector(filesel_callback, 'Import PLY', Blender.sys.makename(ext='.ply'))
|
||||
|
||||
|
||||
def main():
|
||||
if not struct:
|
||||
Blender.Draw.PupMenu('This importer requires a full python install')
|
||||
return
|
||||
|
||||
Blender.Window.FileSelector(filesel_callback, 'Import PLY', '*.ply')
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user