Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/scripts/io/import_scene_3ds.py')
-rw-r--r--release/scripts/io/import_scene_3ds.py160
1 files changed, 13 insertions, 147 deletions
diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py
index 971d62d8e15..29289ae0970 100644
--- a/release/scripts/io/import_scene_3ds.py
+++ b/release/scripts/io/import_scene_3ds.py
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
@@ -130,7 +130,7 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen).
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
@@ -146,41 +146,9 @@ from import_scene_obj import unpack_face_list, load_image
import bpy
import Mathutils
-# import Blender
-# from Blender import Mesh, Object, Material, Image, Texture, Lamp, Mathutils
-# from Blender.Mathutils import Vector
-# import BPyImage
-
-# 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
-
BOUNDS_3DS = []
-#this script imports uvcoords as sticky vertex coords
-#this parameter enables copying these to face uv coords
-#which shold be more useful.
-
-def createBlenderTexture(material, name, image):
- texture = bpy.data.textures.new(name)
- texture.setType('Image')
- texture.image = image
- material.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL)
-
-
-
######################################################
# Data Structures
######################################################
@@ -294,11 +262,8 @@ def read_chunk(file, chunk):
def read_string(file):
#read in the characters till we get a null character
s = b''
-# s = ''
while not s.endswith(b'\x00'):
-# while not s.endswith('\x00'):
s += struct.unpack('<c', file.read(1))[0]
-# s += struct.unpack( '<c', file.read(1) )[0]
#print 'string: ',s
s = str(s[:-1], 'ASCII')
@@ -327,29 +292,17 @@ def skip_to_end(file, skip_chunk):
def add_texture_to_material(image, texture, material, mapto):
-# if mapto=='DIFFUSE':
-# map = Texture.MapTo.COL
-# elif mapto=='SPECULAR':
-# map = Texture.MapTo.SPEC
-# elif mapto=='OPACITY':
-# map = Texture.MapTo.ALPHA
-# elif mapto=='BUMP':
-# map = Texture.MapTo.NOR
-# else:
+ #print('assigning %s to %s' % (texture, material))
+
if mapto not in ("COLOR", "SPECULARITY", "ALPHA", "NORMAL"):
print('/tError: Cannot map to "%s"\n\tassuming diffuse color. modify material "%s" later.' % (mapto, material.name))
mapto = "COLOR"
-# map = Texture.MapTo.COL
- if image: texture.image = image
+ if image:
+ texture.image = image
# if image: texture.setImage(image) # double check its an image.
material.add_texture(texture, "UV", mapto)
-# 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)
-# else:
-# material.setTexture(free_tex_slots[0],texture,Texture.TexCo.UV,map)
def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
@@ -436,7 +389,6 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
if bmesh.faces and (contextMeshUV or img):
bmesh.add_uv_texture()
-# bmesh.faceUV = 1
for ii, i in enumerate(faces):
# Mapped index- faces may have not been added- if so, then map to the correct index
@@ -461,7 +413,9 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
# targetFace.uv = [contextMeshUV[vindex] for vindex in myContextMesh_facels[i]]
if img:
uf.image = img
-# targetFace.image = img
+
+ # to get this image to show up in 'Textured' shading mode
+ uf.tex = True
# bmesh.transform(contextMatrix)
ob = bpy.data.objects.new(tempName, 'MESH')
@@ -507,7 +461,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
return [float(col)/255 for col in struct.unpack('<3B', temp_data)] # data [0,1,2] == rgb
def read_texture(new_chunk, temp_chunk, name, mapto):
- new_texture = bpy.data.textures.new('Diffuse')
+ new_texture = bpy.data.textures.new(name)
new_texture.type = 'IMAGE'
new_texture = new_texture.recast_type()
@@ -657,96 +611,15 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
elif (new_chunk.ID == MAT_TEXTURE_MAP):
read_texture(new_chunk, temp_chunk, "Diffuse", "COLOR")
-# #print 'elif (new_chunk.ID==MAT_TEXTURE_MAP):'
-# new_texture= bpy.data.textures.new('Diffuse')
-# new_texture.setType('Image')
-# img = None
-# while (new_chunk.bytes_read<new_chunk.length):
-# #print 'MAT_TEXTURE_MAP..while', new_chunk.bytes_read, new_chunk.length
-# read_chunk(file, temp_chunk)
-
-# if (temp_chunk.ID==MAT_MAP_FILENAME):
-# texture_name=read_string(file)
-# #img= TEXTURE_DICT[contextMaterial.name]= BPyImage.comprehensiveImageLoad(texture_name, FILENAME)
-# img= TEXTURE_DICT[contextMaterial.name]= BPyImage.comprehensiveImageLoad(texture_name, FILENAME, PLACE_HOLDER= False, RECURSIVE= IMAGE_SEARCH)
-# new_chunk.bytes_read += (len(texture_name)+1) #plus one for the null character that gets removed
-
-# else:
-# skip_to_end(file, temp_chunk)
-
-# new_chunk.bytes_read+= temp_chunk.bytes_read
-
-# #add the map to the material in the right channel
-# if img:
-# add_texture_to_material(img, new_texture, contextMaterial, 'DIFFUSE')
elif (new_chunk.ID == MAT_SPECULAR_MAP):
read_texture(new_chunk, temp_chunk, "Specular", "SPECULARITY")
-# #print 'elif (new_chunk.ID == MAT_SPECULAR_MAP):'
-# new_texture = bpy.data.textures.new('Specular')
-# new_texture.setType('Image')
-# img = None
-# while (new_chunk.bytes_read < new_chunk.length):
-# read_chunk(file, temp_chunk)
-
-# if (temp_chunk.ID == MAT_MAP_FILENAME):
-# texture_name = read_string(file)
-# #img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME)
-# img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME, PLACE_HOLDER=False, RECURSIVE=IMAGE_SEARCH)
-# new_chunk.bytes_read+= (len(texture_name)+1) #plus one for the null character that gets removed
-# else:
-# skip_to_end(file, temp_chunk)
-
-# new_chunk.bytes_read += temp_chunk.bytes_read
-
-# #add the map to the material in the right channel
-# if img:
-# add_texture_to_material(img, new_texture, contextMaterial, 'SPECULAR')
elif (new_chunk.ID == MAT_OPACITY_MAP):
read_texture(new_chunk, temp_chunk, "Opacity", "ALPHA")
-# #print 'new_texture = Blender.Texture.New('Opacity')'
-# new_texture = bpy.data.textures.new('Opacity')
-# new_texture.setType('Image')
-# img = None
-# while (new_chunk.bytes_read < new_chunk.length):
-# read_chunk(file, temp_chunk)
-
-# if (temp_chunk.ID == MAT_MAP_FILENAME):
-# texture_name = read_string(file)
-# #img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME)
-# img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME, PLACE_HOLDER=False, RECURSIVE=IMAGE_SEARCH)
-# new_chunk.bytes_read += (len(texture_name)+1) #plus one for the null character that gets removed
-# else:
-# skip_to_end(file, temp_chunk)
-
-# new_chunk.bytes_read += temp_chunk.bytes_read
-# #add the map to the material in the right channel
-# if img:
-# add_texture_to_material(img, new_texture, contextMaterial, 'OPACITY')
elif (new_chunk.ID == MAT_BUMP_MAP):
read_texture(new_chunk, temp_chunk, "Bump", "NORMAL")
-# #print 'elif (new_chunk.ID == MAT_BUMP_MAP):'
-# new_texture = bpy.data.textures.new('Bump')
-# new_texture.setType('Image')
-# img = None
-# while (new_chunk.bytes_read < new_chunk.length):
-# read_chunk(file, temp_chunk)
-
-# if (temp_chunk.ID == MAT_MAP_FILENAME):
-# texture_name = read_string(file)
-# #img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME)
-# img = BPyImage.comprehensiveImageLoad(texture_name, FILENAME, PLACE_HOLDER=False, RECURSIVE=IMAGE_SEARCH)
-# new_chunk.bytes_read += (len(texture_name)+1) #plus one for the null character that gets removed
-# else:
-# skip_to_end(file, temp_chunk)
-
-# new_chunk.bytes_read += temp_chunk.bytes_read
-
-# #add the map to the material in the right channel
-# if img:
-# add_texture_to_material(img, new_texture, contextMaterial, 'BUMP')
elif (new_chunk.ID == MAT_TRANSPARENCY):
#print 'elif (new_chunk.ID == MAT_TRANSPARENCY):'
@@ -852,7 +725,6 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
temp_data = file.read(STRUCT_SIZE_2FLOAT)
new_chunk.bytes_read += STRUCT_SIZE_2FLOAT #2 float x 4 bytes each
return Mathutils.Vector( struct.unpack('<2f', temp_data) )
-# return Vector( struct.unpack('<2f', temp_data) )
contextMeshUV = [ getuv() for i in range(num_uv) ]
@@ -863,7 +735,6 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
new_chunk.bytes_read += STRUCT_SIZE_4x3MAT
contextMatrix_rot = Mathutils.Matrix(\
-# contextMatrix_rot = Blender.Mathutils.Matrix(\
data[:3] + [0],\
data[3:6] + [0],\
data[6:9] + [0],\
@@ -1089,16 +960,9 @@ def load_3ds(filename, context, IMPORT_CONSTRAIN_BOUNDS=10.0, IMAGE_SEARCH=True,
print('finished importing: "%s" in %.4f sec.' % (filename, (time.clock()-time1)))
# print('finished importing: "%s" in %.4f sec.' % (filename, (Blender.sys.time()-time1)))
file.close()
-# Blender.Window.WaitCursor(0)
DEBUG = False
-# if __name__=='__main__' and not DEBUG:
-# if calcsize == None:
-# Blender.Draw.PupMenu('Error%t|a full python installation not found')
-# else:
-# Blender.Window.FileSelector(load_3ds, 'Import 3DS', '*.3ds')
-
# For testing compatibility
#load_3ds('/metavr/convert/vehicle/truck_002/TruckTanker1.3DS', False)
#load_3ds('/metavr/archive/convert/old/arranged_3ds_to_hpx-2/only-need-engine-trains/Engine2.3DS', False)
@@ -1151,7 +1015,9 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
# to the class instance from the operator settings before calling.
path = StringProperty(name="File Path", description="File path used for importing the 3DS file", maxlen= 1024, default= "")
-
+ filename = StringProperty(name="File Name", description="Name of the file.")
+ directory = StringProperty(name="Directory", description="Directory of the file.")
+
# size_constraint = FloatProperty(name="Size Constraint", description="Scale the model by 10 until it reacehs the size constraint. Zero Disables.", min=0.0, max=1000.0, soft_min=0.0, soft_max=1000.0, default=10.0),
# search_images = BoolProperty(name="Image Search", description="Search subdirectories for any assosiated images (Warning, may be slow)", default=True),
# apply_matrix = BoolProperty(name="Transform Fix", description="Workaround for object transformations importing incorrectly", default=False),