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('