From 675936b42cc9aa3ea15c1cf4af06790e5b41ecae Mon Sep 17 00:00:00 2001 From: Arystanbek Dyussenov Date: Mon, 10 Aug 2009 13:49:55 +0000 Subject: [PATCH] - ran 2to3 on export_3ds.py, import_3ds.py and export_x3d.py - added operators and menu items for ^ --- release/io/export_3ds.py | 164 +++++++++++++++++++------------- release/io/export_obj.py | 2 +- release/io/export_x3d.py | 114 ++++++++++++++-------- release/io/import_3ds.py | 200 +++++++++++++++++++++++---------------- release/ui/space_info.py | 3 + 5 files changed, 291 insertions(+), 192 deletions(-) diff --git a/release/io/export_3ds.py b/release/io/export_3ds.py index 69b4d00b4d8..c4a73a44b0c 100644 --- a/release/io/export_3ds.py +++ b/release/io/export_3ds.py @@ -46,14 +46,17 @@ from the lib3ds project (http://lib3ds.sourceforge.net/) sourcecode. # Importing modules ###################################################### -import Blender +import struct + import bpy -from BPyMesh import getMeshFromObject -from BPyObject import getDerivedObjects -try: - import struct -except: - struct = None + +# import Blender +# from BPyMesh import getMeshFromObject +# from BPyObject import getDerivedObjects +# try: +# import struct +# except: +# struct = None # So 3ds max can open files, limit names to 12 in length # this is verry annoying for filenames! @@ -85,58 +88,58 @@ def sane_name(name): #Some of the chunks that we will export #----- Primary Chunk, at the beginning of each file -PRIMARY= long("0x4D4D",16) +PRIMARY= int("0x4D4D",16) #------ Main Chunks -OBJECTINFO = long("0x3D3D",16); #This gives the version of the mesh and is found right before the material and object information -VERSION = long("0x0002",16); #This gives the version of the .3ds file -KFDATA = long("0xB000",16); #This is the header for all of the key frame info +OBJECTINFO = int("0x3D3D",16); #This gives the version of the mesh and is found right before the material and object information +VERSION = int("0x0002",16); #This gives the version of the .3ds file +KFDATA = int("0xB000",16); #This is the header for all of the key frame info #------ sub defines of OBJECTINFO MATERIAL=45055 #0xAFFF // This stored the texture info OBJECT=16384 #0x4000 // This stores the faces, vertices, etc... #>------ sub defines of MATERIAL -MATNAME = long("0xA000",16); # This holds the material name -MATAMBIENT = long("0xA010",16); # Ambient color of the object/material -MATDIFFUSE = long("0xA020",16); # This holds the color of the object/material -MATSPECULAR = long("0xA030",16); # SPecular color of the object/material -MATSHINESS = long("0xA040",16); # ?? -MATMAP = long("0xA200",16); # This is a header for a new material -MATMAPFILE = long("0xA300",16); # This holds the file name of the texture +MATNAME = int("0xA000",16); # This holds the material name +MATAMBIENT = int("0xA010",16); # Ambient color of the object/material +MATDIFFUSE = int("0xA020",16); # This holds the color of the object/material +MATSPECULAR = int("0xA030",16); # SPecular color of the object/material +MATSHINESS = int("0xA040",16); # ?? +MATMAP = int("0xA200",16); # This is a header for a new material +MATMAPFILE = int("0xA300",16); # This holds the file name of the texture -RGB1= long("0x0011",16) -RGB2= long("0x0012",16) +RGB1= int("0x0011",16) +RGB2= int("0x0012",16) #>------ sub defines of OBJECT -OBJECT_MESH = long("0x4100",16); # This lets us know that we are reading a new object -OBJECT_LIGHT = long("0x4600",16); # This lets un know we are reading a light object -OBJECT_CAMERA= long("0x4700",16); # This lets un know we are reading a camera object +OBJECT_MESH = int("0x4100",16); # This lets us know that we are reading a new object +OBJECT_LIGHT = int("0x4600",16); # This lets un know we are reading a light object +OBJECT_CAMERA= int("0x4700",16); # This lets un know we are reading a camera object #>------ sub defines of CAMERA -OBJECT_CAM_RANGES= long("0x4720",16); # The camera range values +OBJECT_CAM_RANGES= int("0x4720",16); # The camera range values #>------ sub defines of OBJECT_MESH -OBJECT_VERTICES = long("0x4110",16); # The objects vertices -OBJECT_FACES = long("0x4120",16); # The objects faces -OBJECT_MATERIAL = long("0x4130",16); # This is found if the object has a material, either texture map or color -OBJECT_UV = long("0x4140",16); # The UV texture coordinates -OBJECT_TRANS_MATRIX = long("0x4160",16); # The Object Matrix +OBJECT_VERTICES = int("0x4110",16); # The objects vertices +OBJECT_FACES = int("0x4120",16); # The objects faces +OBJECT_MATERIAL = int("0x4130",16); # This is found if the object has a material, either texture map or color +OBJECT_UV = int("0x4140",16); # The UV texture coordinates +OBJECT_TRANS_MATRIX = int("0x4160",16); # The Object Matrix #>------ sub defines of KFDATA -KFDATA_KFHDR = long("0xB00A",16); -KFDATA_KFSEG = long("0xB008",16); -KFDATA_KFCURTIME = long("0xB009",16); -KFDATA_OBJECT_NODE_TAG = long("0xB002",16); +KFDATA_KFHDR = int("0xB00A",16); +KFDATA_KFSEG = int("0xB008",16); +KFDATA_KFCURTIME = int("0xB009",16); +KFDATA_OBJECT_NODE_TAG = int("0xB002",16); #>------ sub defines of OBJECT_NODE_TAG -OBJECT_NODE_ID = long("0xB030",16); -OBJECT_NODE_HDR = long("0xB010",16); -OBJECT_PIVOT = long("0xB013",16); -OBJECT_INSTANCE_NAME = long("0xB011",16); -POS_TRACK_TAG = long("0xB020",16); -ROT_TRACK_TAG = long("0xB021",16); -SCL_TRACK_TAG = long("0xB022",16); +OBJECT_NODE_ID = int("0xB030",16); +OBJECT_NODE_HDR = int("0xB010",16); +OBJECT_PIVOT = int("0xB013",16); +OBJECT_INSTANCE_NAME = int("0xB011",16); +POS_TRACK_TAG = int("0xB020",16); +ROT_TRACK_TAG = int("0xB021",16); +SCL_TRACK_TAG = int("0xB022",16); def uv_key(uv): return round(uv.x, 6), round(uv.y, 6) @@ -343,12 +346,12 @@ class _3ds_named_variable(object): def dump(self,indent): if (self.value!=None): spaces="" - for i in xrange(indent): + for i in range(indent): spaces+=" "; if (self.name!=""): - print spaces, self.name, " = ", self.value + print(spaces, self.name, " = ", self.value) else: - print spaces, "[unnamed]", " = ", self.value + print(spaces, "[unnamed]", " = ", self.value) #the chunk class @@ -408,9 +411,9 @@ class _3ds_chunk(object): Dump is used for debugging purposes, to dump the contents of a chunk to the standard output. Uses the dump function of the named variables and the subchunks to do the actual work.''' spaces="" - for i in xrange(indent): + for i in range(indent): spaces+=" "; - print spaces, "ID=", hex(self.ID.value), "size=", self.get_size() + print(spaces, "ID=", hex(self.ID.value), "size=", self.get_size()) for variable in self.variables: variable.dump(indent+1) for subchunk in self.subchunks: @@ -555,11 +558,11 @@ def remove_face_uv(verts, tri_list): # initialize a list of UniqueLists, one per vertex: #uv_list = [UniqueList() for i in xrange(len(verts))] - unique_uvs= [{} for i in xrange(len(verts))] + unique_uvs= [{} for i in range(len(verts))] # for each face uv coordinate, add it to the UniqueList of the vertex for tri in tri_list: - for i in xrange(3): + for i in range(3): # store the index into the UniqueList for future reference: # offset.append(uv_list[tri.vertex_index[i]].add(_3ds_point_uv(tri.faceuvs[i]))) @@ -589,7 +592,7 @@ def remove_face_uv(verts, tri_list): pt = _3ds_point_3d(vert.co) # reuse, should be ok uvmap = [None] * len(unique_uvs[i]) - for ii, uv_3ds in unique_uvs[i].itervalues(): + for ii, uv_3ds in unique_uvs[i].values(): # add a vertex duplicate to the vertex_array for every uv associated with this vertex: vert_array.add(pt) # add the uv coordinate to the uv array: @@ -607,7 +610,7 @@ def remove_face_uv(verts, tri_list): # Make sure the triangle vertex indices now refer to the new vertex list: for tri in tri_list: - for i in xrange(3): + for i in range(3): tri.offset[i]+=index_list[tri.vertex_index[i]] tri.vertex_index= tri.offset @@ -655,7 +658,7 @@ def make_faces_chunk(tri_list, mesh, materialDict): # obj_material_faces[tri.mat].add(_3ds_short(i)) face_chunk.add_variable("faces", face_list) - for mat_name, mat_faces in unique_mats.itervalues(): + for mat_name, mat_faces in unique_mats.values(): obj_material_chunk=_3ds_chunk(OBJECT_MATERIAL) obj_material_chunk.add_variable("name", mat_name) obj_material_chunk.add_variable("face_list", mat_faces) @@ -677,7 +680,7 @@ def make_faces_chunk(tri_list, mesh, materialDict): obj_material_faces[tri.mat].add(_3ds_short(i)) face_chunk.add_variable("faces", face_list) - for i in xrange(n_materials): + for i in range(n_materials): obj_material_chunk=_3ds_chunk(OBJECT_MATERIAL) obj_material_chunk.add_variable("name", obj_material_names[i]) obj_material_chunk.add_variable("face_list", obj_material_faces[i]) @@ -862,7 +865,7 @@ def make_kf_obj_node(obj, name_to_id): return kf_obj_node """ -import BPyMessages +# import BPyMessages def save_3ds(filename, context): '''Save the Blender scene to a 3ds file.''' # Time the export @@ -871,16 +874,16 @@ def save_3ds(filename, context): filename += '.3ds' # XXX -# if not BPyMessages.Warning_SaveOver(filename): -# return +# if not BPyMessages.Warning_SaveOver(filename): +# return # XXX - time1 = bpy.sys.time() -# time1= Blender.sys.time() -# Blender.Window.WaitCursor(1) + time1 = bpy.sys.time() +# time1= Blender.sys.time() +# Blender.Window.WaitCursor(1) sce = context.scene -# sce= bpy.data.scenes.active +# sce= bpy.data.scenes.active # Initialize the main chunk (primary): primary = _3ds_chunk(PRIMARY) @@ -948,7 +951,7 @@ def save_3ds(filename, context): f.mat = 0 # Make material chunks for all materials used in the meshes: - for mat_and_image in materialDict.itervalues(): + for mat_and_image in materialDict.values(): object_info.add_subchunk(make_material_chunk(mat_and_image[0], mat_and_image[1])) # Give all objects a unique ID and build a dictionary from object name to object id: @@ -1011,15 +1014,44 @@ def save_3ds(filename, context): # Debugging only: report the exporting time: Blender.Window.WaitCursor(0) - print "3ds export time: %.2f" % (Blender.sys.time() - time1) + print("3ds export time: %.2f" % (Blender.sys.time() - time1)) # Debugging only: dump the chunk hierarchy: #primary.dump() -if __name__=='__main__': - if struct: - Blender.Window.FileSelector(save_3ds, "Export 3DS", Blender.sys.makename(ext='.3ds')) - else: - Blender.Draw.PupMenu("Error%t|This script requires a full python installation") -# save_3ds('/test_b.3ds') +# if __name__=='__main__': +# if struct: +# Blender.Window.FileSelector(save_3ds, "Export 3DS", Blender.sys.makename(ext='.3ds')) +# else: +# Blender.Draw.PupMenu("Error%t|This script requires a full python installation") +# # save_3ds('/test_b.3ds') + +class EXPORT_OT_3ds(bpy.types.Operator): + ''' + 3DS Exporter + ''' + __idname__ = "export.3ds" + __label__ = 'Export 3DS' + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + + __props__ = [ + bpy.props.StringProperty(attr="filename", name="File Name", description="File name used for exporting the 3DS file", maxlen= 1024, default= ""), + ] + + def execute(self, context): + raise Exception("Not doing anything yet.") + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self.__operator__) + return ('RUNNING_MODAL',) + + def poll(self, context): # Poll isnt working yet + print("Poll") + return context.active_object != None + +bpy.ops.add(EXPORT_OT_3ds) diff --git a/release/io/export_obj.py b/release/io/export_obj.py index fa07c5408a7..b2d4af7c517 100644 --- a/release/io/export_obj.py +++ b/release/io/export_obj.py @@ -913,7 +913,7 @@ class EXPORT_OT_obj(bpy.types.Operator): # to the class instance from the operator settings before calling. __props__ = [ - bpy.props.StringProperty(attr="filename", name="File Name", description="File name used for exporting the PLY file", maxlen= 1024, default= ""), + bpy.props.StringProperty(attr="filename", name="File Name", description="File name used for exporting the OBJ file", maxlen= 1024, default= ""), # context group bpy.props.BoolProperty(attr="use_selection", name="Selection Only", description="", default= False), diff --git a/release/io/export_x3d.py b/release/io/export_x3d.py index b12ff67d8a6..b57be2286e9 100644 --- a/release/io/export_x3d.py +++ b/release/io/export_x3d.py @@ -53,22 +53,27 @@ Known issues:
# Library dependancies #################################### -import Blender -from Blender import Object, Lamp, Draw, Image, Text, sys, Mesh -from Blender.Scene import Render import math -import BPyObject -import BPyMesh + +import bpy +import Mathutils + +# import Blender +# from Blender import Object, Lamp, Draw, Image, Text, sys, Mesh +# from Blender.Scene import Render +# import BPyObject +# import BPyMesh # DEG2RAD=0.017453292519943295 -MATWORLD= Blender.Mathutils.RotationMatrix(-90, 4, 'x') +MATWORLD= Mathutils.RotationMatrix(-90, 4, 'x') #################################### # Global Variables #################################### -filename = Blender.Get('filename') +filename = "" +# filename = Blender.Get('filename') _safeOverwrite = True extension = '' @@ -109,7 +114,7 @@ class x3d_class: import gzip self.file = gzip.open(filename, "w") except: - print "failed to import compression modules, exporting uncompressed" + print("failed to import compression modules, exporting uncompressed") self.filename = filename[:-1] # remove trailing z if self.file == None: @@ -383,7 +388,7 @@ class x3d_class: if nIFSCnt > 1: self.writeIndented("\n" % ("G_", meshName),1) - if sided.has_key('two') and sided['two'] > 0: + if 'two' in sided and sided['two'] > 0: bTwoSided=1 else: bTwoSided=0 @@ -414,8 +419,8 @@ class x3d_class: if not matFlags & Blender.Material.Modes['TEXFACE']: self.writeMaterial(mat, self.cleanStr(maters[0].name,''), world) if len(maters) > 1: - print "Warning: mesh named %s has multiple materials" % meshName - print "Warning: only one material per object handled" + print("Warning: mesh named %s has multiple materials" % meshName) + print("Warning: only one material per object handled") #-- textures if mesh.faceUV: @@ -433,7 +438,7 @@ class x3d_class: # user selected BOUNDS=1, SOLID=3, SHARED=4, or TEXTURE=5 ifStyle="IndexedFaceSet" # look up mesh name, use it if available - if self.meshNames.has_key(meshME): + if meshME in self.meshNames: self.writeIndented("<%s USE=\"ME_%s\">" % (ifStyle, meshME), 1) self.meshNames[meshME]+=1 else: @@ -547,7 +552,7 @@ class x3d_class: if self.writingtexture == 0: self.file.write("\n\t\t\ttexCoordIndex=\"") texIndxStr="" - for i in xrange(len(texIndexList)): + for i in range(len(texIndexList)): texIndxStr = texIndxStr + "%d, " % texIndexList[i] if texIndexList[i]==-1: self.file.write(texIndxStr) @@ -555,7 +560,7 @@ class x3d_class: self.file.write("\"\n\t\t\t") else: self.writeIndented("") self.writeIndented("\n", -1) @@ -569,7 +574,7 @@ class x3d_class: if face.col: c=face.col[0] if self.verbose > 2: - print "Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b) + print("Debug: face.col r=%d g=%d b=%d" % (c.r, c.g, c.b)) aColor = self.rgbToFS(c) self.file.write("%s, " % aColor) self.file.write("\" />") @@ -577,7 +582,7 @@ class x3d_class: def writeMaterial(self, mat, matName, world): # look up material name, use it if available - if self.matNames.has_key(matName): + if matName in self.matNames: self.writeIndented("\n" % matName) self.matNames[matName]+=1 return; @@ -617,7 +622,7 @@ class x3d_class: def writeImageTexture(self, image): name = image.name filename = image.filename.split('/')[-1].split('\\')[-1] - if self.texNames.has_key(name): + if name in self.texNames: self.writeIndented("\n" % self.cleanStr(name)) self.texNames[name] += 1 return @@ -671,7 +676,7 @@ class x3d_class: self.file.write("groundColor=\"%s %s %s\" " % (round(grd0,self.cp), round(grd1,self.cp), round(grd2,self.cp))) self.file.write("skyColor=\"%s %s %s\" " % (round(sky0,self.cp), round(sky1,self.cp), round(sky2,self.cp))) alltexture = len(alltextures) - for i in xrange(alltexture): + for i in range(alltexture): namemat = alltextures[i].name pic = alltextures[i].getImage() if (namemat == "back") and (pic != None): @@ -697,7 +702,7 @@ class x3d_class: EXPORT_TRI= False,\ ): - print "Info: starting X3D export to " + self.filename + "..." + print("Info: starting X3D export to " + self.filename + "...") self.writeHeader() # self.writeScript() self.writeNavigationInfo(scene) @@ -771,7 +776,7 @@ class x3d_class: self.texNames={} self.matNames={} self.indentLevel=0 - print "Info: finished X3D export to %s\n" % self.filename + print("Info: finished X3D export to %s\n" % self.filename) def cleanStr(self, name, prefix='rsvd_'): """cleanStr(name,prefix) - try to create a valid VRML DEF name from object name""" @@ -815,7 +820,7 @@ class x3d_class: else: sidename='one' - if sided.has_key(sidename): + if sidename in sided: sided[sidename]+=1 else: sided[sidename]=1 @@ -829,30 +834,30 @@ class x3d_class: imageMap[faceName]=[face.image.name,sidename,face] if self.verbose > 2: - for faceName in imageMap.iterkeys(): + for faceName in imageMap.keys(): ifs=imageMap[faceName] - print "Debug: faceName=%s image=%s, solid=%s facecnt=%d" % \ - (faceName, ifs[0], ifs[1], len(ifs)-2) + print("Debug: faceName=%s image=%s, solid=%s facecnt=%d" % \ + (faceName, ifs[0], ifs[1], len(ifs)-2)) return len(imageMap) def faceToString(self,face): - print "Debug: face.flag=0x%x (bitflags)" % face.flag + print("Debug: face.flag=0x%x (bitflags)" % face.flag) if face.sel: - print "Debug: face.sel=true" + print("Debug: face.sel=true") - print "Debug: face.mode=0x%x (bitflags)" % face.mode + print("Debug: face.mode=0x%x (bitflags)" % face.mode) if face.mode & Mesh.FaceModes.TWOSIDE: - print "Debug: face.mode twosided" + print("Debug: face.mode twosided") - print "Debug: face.transp=0x%x (enum)" % face.transp + print("Debug: face.transp=0x%x (enum)" % face.transp) if face.transp == Mesh.FaceTranspModes.SOLID: - print "Debug: face.transp.SOLID" + print("Debug: face.transp.SOLID") if face.image: - print "Debug: face.image=%s" % face.image.name - print "Debug: face.materialIndex=%d" % face.materialIndex + print("Debug: face.image=%s" % face.image.name) + print("Debug: face.materialIndex=%d" % face.materialIndex) def getVertexColorByIndx(self, mesh, indx): c = None @@ -867,12 +872,12 @@ class x3d_class: return c def meshToString(self,mesh): - print "Debug: mesh.hasVertexUV=%d" % mesh.vertexColors - print "Debug: mesh.faceUV=%d" % mesh.faceUV - print "Debug: mesh.hasVertexColours=%d" % mesh.hasVertexColours() - print "Debug: mesh.verts=%d" % len(mesh.verts) - print "Debug: mesh.faces=%d" % len(mesh.faces) - print "Debug: mesh.materials=%d" % len(mesh.materials) + print("Debug: mesh.hasVertexUV=%d" % mesh.vertexColors) + print("Debug: mesh.faceUV=%d" % mesh.faceUV) + print("Debug: mesh.hasVertexColours=%d" % mesh.hasVertexColours()) + print("Debug: mesh.verts=%d" % len(mesh.verts)) + print("Debug: mesh.faces=%d" % len(mesh.faces)) + print("Debug: mesh.materials=%d" % len(mesh.materials)) def rgbToFS(self, c): s="%s %s %s" % ( @@ -924,7 +929,7 @@ class x3d_class: self.indentLevel = self.indentLevel + inc spaces="" - for x in xrange(self.indentLevel): + for x in range(self.indentLevel): spaces = spaces + "\t" self.file.write(spaces + s) @@ -1045,7 +1050,34 @@ def x3d_export_ui(filename): ######################################################### -if __name__ == '__main__': - Blender.Window.FileSelector(x3d_export_ui,"Export X3D", Blender.Get('filename').replace('.blend', '.x3d')) +# if __name__ == '__main__': +# Blender.Window.FileSelector(x3d_export_ui,"Export X3D", Blender.Get('filename').replace('.blend', '.x3d')) +class EXPORT_OT_x3d(bpy.types.Operator): + ''' + X3D Exporter + ''' + __idname__ = "export.x3d" + __label__ = 'Export X3D' + + # List of operator properties, the attributes will be assigned + # to the class instance from the operator settings before calling. + __props__ = [ + bpy.props.StringProperty(attr="filename", name="File Name", description="File name used for exporting the X3D file", maxlen= 1024, default= ""), + ] + + def execute(self, context): + raise Exception("Not doing anything yet.") + return ('FINISHED',) + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self.__operator__) + return ('RUNNING_MODAL',) + + def poll(self, context): # Poll isnt working yet + print("Poll") + return context.active_object != None + +bpy.ops.add(EXPORT_OT_x3d) diff --git a/release/io/import_3ds.py b/release/io/import_3ds.py index bcde82c4869..a08fdb8fc85 100644 --- a/release/io/import_3ds.py +++ b/release/io/import_3ds.py @@ -125,26 +125,29 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen). # Importing modules -import Blender +from struct import calcsize, unpack + import bpy -from Blender import Mesh, Object, Material, Image, Texture, Lamp, Mathutils -from Blender.Mathutils import Vector -import BPyImage -import BPyMessages +# import Blender +# from Blender import Mesh, Object, Material, Image, Texture, Lamp, Mathutils +# from Blender.Mathutils import Vector +# import BPyImage -try: - from struct import calcsize, unpack -except: - calcsize= unpack= None +# import BPyMessages + +# try: +# from struct import calcsize, unpack +# except: +# calcsize= unpack= None -# If python version is less than 2.4, try to get set stuff from module -try: - set -except: - from sets import Set as set +# # If python version is less than 2.4, try to get set stuff from module +# try: +# set +# except: +# from sets import Set as set BOUNDS_3DS= [] @@ -167,12 +170,12 @@ def createBlenderTexture(material, name, image): #Some of the chunks that we will see #----- Primary Chunk, at the beginning of each file -PRIMARY= long('0x4D4D',16) +PRIMARY= int('0x4D4D',16) #------ Main Chunks -OBJECTINFO = long('0x3D3D',16); #This gives the version of the mesh and is found right before the material and object information -VERSION = long('0x0002',16); #This gives the version of the .3ds file -EDITKEYFRAME= long('0xB000',16); #This is the header for all of the key frame info +OBJECTINFO = int('0x3D3D',16); #This gives the version of the mesh and is found right before the material and object information +VERSION = int('0x0002',16); #This gives the version of the .3ds file +EDITKEYFRAME= int('0xB000',16); #This is the header for all of the key frame info #------ sub defines of OBJECTINFO MATERIAL=45055 #0xAFFF // This stored the texture info @@ -180,62 +183,62 @@ OBJECT=16384 #0x4000 // This stores the faces, vertices, etc... #>------ sub defines of MATERIAL #------ sub defines of MATERIAL_BLOCK -MAT_NAME = long('0xA000',16) # This holds the material name -MAT_AMBIENT = long('0xA010',16) # Ambient color of the object/material -MAT_DIFFUSE = long('0xA020',16) # This holds the color of the object/material -MAT_SPECULAR = long('0xA030',16) # SPecular color of the object/material -MAT_SHINESS = long('0xA040',16) # ?? -MAT_TRANSPARENCY= long('0xA050',16) # Transparency value of material -MAT_SELF_ILLUM = long('0xA080',16) # Self Illumination value of material -MAT_WIRE = long('0xA085',16) # Only render's wireframe +MAT_NAME = int('0xA000',16) # This holds the material name +MAT_AMBIENT = int('0xA010',16) # Ambient color of the object/material +MAT_DIFFUSE = int('0xA020',16) # This holds the color of the object/material +MAT_SPECULAR = int('0xA030',16) # SPecular color of the object/material +MAT_SHINESS = int('0xA040',16) # ?? +MAT_TRANSPARENCY= int('0xA050',16) # Transparency value of material +MAT_SELF_ILLUM = int('0xA080',16) # Self Illumination value of material +MAT_WIRE = int('0xA085',16) # Only render's wireframe -MAT_TEXTURE_MAP = long('0xA200',16) # This is a header for a new texture map -MAT_SPECULAR_MAP= long('0xA204',16) # This is a header for a new specular map -MAT_OPACITY_MAP = long('0xA210',16) # This is a header for a new opacity map -MAT_REFLECTION_MAP= long('0xA220',16) # This is a header for a new reflection map -MAT_BUMP_MAP = long('0xA230',16) # This is a header for a new bump map -MAT_MAP_FILENAME = long('0xA300',16) # This holds the file name of the texture +MAT_TEXTURE_MAP = int('0xA200',16) # This is a header for a new texture map +MAT_SPECULAR_MAP= int('0xA204',16) # This is a header for a new specular map +MAT_OPACITY_MAP = int('0xA210',16) # This is a header for a new opacity map +MAT_REFLECTION_MAP= int('0xA220',16) # This is a header for a new reflection map +MAT_BUMP_MAP = int('0xA230',16) # This is a header for a new bump map +MAT_MAP_FILENAME = int('0xA300',16) # This holds the file name of the texture -MAT_FLOAT_COLOR = long ('0x0010', 16) #color defined as 3 floats -MAT_24BIT_COLOR = long ('0x0011', 16) #color defined as 3 bytes +MAT_FLOAT_COLOR = int ('0x0010', 16) #color defined as 3 floats +MAT_24BIT_COLOR = int ('0x0011', 16) #color defined as 3 bytes #>------ sub defines of OBJECT -OBJECT_MESH = long('0x4100',16); # This lets us know that we are reading a new object -OBJECT_LAMP = long('0x4600',16); # This lets un know we are reading a light object -OBJECT_LAMP_SPOT = long('0x4610',16); # The light is a spotloght. -OBJECT_LAMP_OFF = long('0x4620',16); # The light off. -OBJECT_LAMP_ATTENUATE = long('0x4625',16); -OBJECT_LAMP_RAYSHADE = long('0x4627',16); -OBJECT_LAMP_SHADOWED = long('0x4630',16); -OBJECT_LAMP_LOCAL_SHADOW = long('0x4640',16); -OBJECT_LAMP_LOCAL_SHADOW2 = long('0x4641',16); -OBJECT_LAMP_SEE_CONE = long('0x4650',16); -OBJECT_LAMP_SPOT_RECTANGULAR= long('0x4651',16); -OBJECT_LAMP_SPOT_OVERSHOOT= long('0x4652',16); -OBJECT_LAMP_SPOT_PROJECTOR= long('0x4653',16); -OBJECT_LAMP_EXCLUDE= long('0x4654',16); -OBJECT_LAMP_RANGE= long('0x4655',16); -OBJECT_LAMP_ROLL= long('0x4656',16); -OBJECT_LAMP_SPOT_ASPECT= long('0x4657',16); -OBJECT_LAMP_RAY_BIAS= long('0x4658',16); -OBJECT_LAMP_INNER_RANGE= long('0x4659',16); -OBJECT_LAMP_OUTER_RANGE= long('0x465A',16); -OBJECT_LAMP_MULTIPLIER = long('0x465B',16); -OBJECT_LAMP_AMBIENT_LIGHT = long('0x4680',16); +OBJECT_MESH = int('0x4100',16); # This lets us know that we are reading a new object +OBJECT_LAMP = int('0x4600',16); # This lets un know we are reading a light object +OBJECT_LAMP_SPOT = int('0x4610',16); # The light is a spotloght. +OBJECT_LAMP_OFF = int('0x4620',16); # The light off. +OBJECT_LAMP_ATTENUATE = int('0x4625',16); +OBJECT_LAMP_RAYSHADE = int('0x4627',16); +OBJECT_LAMP_SHADOWED = int('0x4630',16); +OBJECT_LAMP_LOCAL_SHADOW = int('0x4640',16); +OBJECT_LAMP_LOCAL_SHADOW2 = int('0x4641',16); +OBJECT_LAMP_SEE_CONE = int('0x4650',16); +OBJECT_LAMP_SPOT_RECTANGULAR= int('0x4651',16); +OBJECT_LAMP_SPOT_OVERSHOOT= int('0x4652',16); +OBJECT_LAMP_SPOT_PROJECTOR= int('0x4653',16); +OBJECT_LAMP_EXCLUDE= int('0x4654',16); +OBJECT_LAMP_RANGE= int('0x4655',16); +OBJECT_LAMP_ROLL= int('0x4656',16); +OBJECT_LAMP_SPOT_ASPECT= int('0x4657',16); +OBJECT_LAMP_RAY_BIAS= int('0x4658',16); +OBJECT_LAMP_INNER_RANGE= int('0x4659',16); +OBJECT_LAMP_OUTER_RANGE= int('0x465A',16); +OBJECT_LAMP_MULTIPLIER = int('0x465B',16); +OBJECT_LAMP_AMBIENT_LIGHT = int('0x4680',16); -OBJECT_CAMERA= long('0x4700',16); # This lets un know we are reading a camera object +OBJECT_CAMERA= int('0x4700',16); # This lets un know we are reading a camera object #>------ sub defines of CAMERA -OBJECT_CAM_RANGES= long('0x4720',16); # The camera range values +OBJECT_CAM_RANGES= int('0x4720',16); # The camera range values #>------ sub defines of OBJECT_MESH -OBJECT_VERTICES = long('0x4110',16); # The objects vertices -OBJECT_FACES = long('0x4120',16); # The objects faces -OBJECT_MATERIAL = long('0x4130',16); # This is found if the object has a material, either texture map or color -OBJECT_UV = long('0x4140',16); # The UV texture coordinates -OBJECT_TRANS_MATRIX = long('0x4160',16); # The Object Matrix +OBJECT_VERTICES = int('0x4110',16); # The objects vertices +OBJECT_FACES = int('0x4120',16); # The objects faces +OBJECT_MATERIAL = int('0x4130',16); # This is found if the object has a material, either texture map or color +OBJECT_UV = int('0x4140',16); # The UV texture coordinates +OBJECT_TRANS_MATRIX = int('0x4160',16); # The Object Matrix global scn scn= None @@ -255,10 +258,10 @@ class chunk: self.bytes_read=0 def dump(self): - print 'ID: ', self.ID - print 'ID in hex: ', hex(self.ID) - print 'length: ', self.length - print 'bytes_read: ', self.bytes_read + print('ID: ', self.ID) + print('ID in hex: ', hex(self.ID)) + print('length: ', self.length) + print('bytes_read: ', self.bytes_read) def read_chunk(file, chunk): temp_data=file.read(calcsize(chunk.binary_format)) @@ -309,13 +312,13 @@ def add_texture_to_material(image, texture, material, mapto): elif mapto=='BUMP': map=Texture.MapTo.NOR else: - print '/tError: Cannot map to "%s"\n\tassuming diffuse color. modify material "%s" later.' % (mapto, material.name) + print('/tError: Cannot map to "%s"\n\tassuming diffuse color. modify material "%s" later.' % (mapto, material.name)) map=Texture.MapTo.COL if image: texture.setImage(image) # double check its an image. free_tex_slots= [i for i, tex in enumerate( material.getTextures() ) if tex==None] if not free_tex_slots: - print '/tError: Cannot add "%s" map. 10 Texture slots alredy used.' % mapto + print('/tError: Cannot add "%s" map. 10 Texture slots alredy used.' % mapto) else: material.setTexture(free_tex_slots[0],texture,Texture.TexCo.UV,map) @@ -374,7 +377,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): myVertMapping = {} vertMappingIndex = 0 - vertsToUse = [i for i in xrange(len(myContextMesh_vertls)) if faceVertUsers[i]] + vertsToUse = [i for i in range(len(myContextMesh_vertls)) if faceVertUsers[i]] myVertMapping = dict( [ (ii, i) for i, ii in enumerate(vertsToUse) ] ) tempName= '%s_%s' % (contextObName, matName) # matName may be None. @@ -423,7 +426,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): importedObjects.append(ob) bmesh.calcNormals() - for matName, faces in myContextMeshMaterials.iteritems(): + for matName, faces in myContextMeshMaterials.items(): makeMeshMaterialCopy(matName, faces) if len(materialFaces)!=len(myContextMesh_facels): @@ -455,7 +458,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): new_chunk.bytes_read+= 4 #read the 4 bytes for the version number #this loader works with version 3 and below, but may not with 4 and above if (version>3): - print '\tNon-Fatal Error: Version greater than 3, may not load correctly: ', version + print('\tNon-Fatal Error: Version greater than 3, may not load correctly: ', version) #is it an object info chunk? elif (new_chunk.ID==OBJECTINFO): @@ -684,7 +687,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): return temp_data #contextMesh.verts.extend( [Vector(),] ) # DUMMYVERT! - remove when blenders internals are fixed. - contextMesh_vertls= [getvert() for i in xrange(num_verts)] + contextMesh_vertls= [getvert() for i in range(num_verts)] #print 'object verts: bytes read: ', new_chunk.bytes_read @@ -702,7 +705,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): v1,v2,v3,dummy= unpack('<4H', temp_data) return v1, v2, v3 - contextMesh_facels= [ getface() for i in xrange(num_faces) ] + contextMesh_facels= [ getface() for i in range(num_faces) ] elif (new_chunk.ID==OBJECT_MATERIAL): @@ -719,7 +722,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH): new_chunk.bytes_read+= STRUCT_SIZE_UNSIGNED_SHORT return unpack('