[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23557] trunk/blender/release/scripts/io: Copying scripts from 2.4x without 2.5x changes
Campbell Barton
ideasman42 at gmail.com
Tue Sep 29 17:16:22 CEST 2009
Revision: 23557
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23557
Author: campbellbarton
Date: 2009-09-29 17:16:22 +0200 (Tue, 29 Sep 2009)
Log Message:
-----------
Copying scripts from 2.4x without 2.5x changes
Added Paths:
-----------
trunk/blender/release/scripts/io/export_3ds.py
trunk/blender/release/scripts/io/export_fbx.py
trunk/blender/release/scripts/io/export_obj.py
trunk/blender/release/scripts/io/export_ply.py
trunk/blender/release/scripts/io/export_x3d.py
trunk/blender/release/scripts/io/import_3ds.py
trunk/blender/release/scripts/io/import_obj.py
Copied: trunk/blender/release/scripts/io/export_3ds.py (from rev 23556, branches/blender2.4/release/scripts/3ds_export.py)
===================================================================
--- trunk/blender/release/scripts/io/export_3ds.py (rev 0)
+++ trunk/blender/release/scripts/io/export_3ds.py 2009-09-29 15:16:22 UTC (rev 23557)
@@ -0,0 +1,1019 @@
+#!BPY
+# coding: utf-8
+"""
+Name: '3D Studio (.3ds)...'
+Blender: 243
+Group: 'Export'
+Tooltip: 'Export to 3DS file format (.3ds).'
+"""
+
+__author__ = ["Campbell Barton", "Bob Holcomb", "Richard Lärkäng", "Damien McGinnes", "Mark Stijnman"]
+__url__ = ("blenderartists.org", "www.blender.org", "www.gametutorials.com", "lib3ds.sourceforge.net/")
+__version__ = "0.90a"
+__bpydoc__ = """\
+
+3ds Exporter
+
+This script Exports a 3ds file.
+
+Exporting is based on 3ds loader from www.gametutorials.com(Thanks DigiBen) and using information
+from the lib3ds project (http://lib3ds.sourceforge.net/) sourcecode.
+"""
+
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# Script copyright (C) Bob Holcomb
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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.
+#
+# ***** END GPL LICENCE BLOCK *****
+# --------------------------------------------------------------------------
+
+
+######################################################
+# Importing modules
+######################################################
+
+import Blender
+import bpy
+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!
+name_unique = []
+name_mapping = {}
+def sane_name(name):
+ name_fixed = name_mapping.get(name)
+ if name_fixed != None:
+ return name_fixed
+
+ if len(name) > 12:
+ new_name = name[:12]
+ else:
+ new_name = name
+
+ i = 0
+
+ while new_name in name_unique:
+ new_name = new_name[:-4] + '.%.3d' % i
+ i+=1
+
+ name_unique.append(new_name)
+ name_mapping[name] = new_name
+ return new_name
+
+######################################################
+# Data Structures
+######################################################
+
+#Some of the chunks that we will export
+#----- Primary Chunk, at the beginning of each file
+PRIMARY= long("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
+
+#------ 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
+
+RGB1= long("0x0011",16)
+RGB2= long("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
+
+#>------ sub defines of CAMERA
+OBJECT_CAM_RANGES= long("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
+
+#>------ 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);
+
+#>------ 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);
+
+def uv_key(uv):
+ return round(uv.x, 6), round(uv.y, 6)
+
+# size defines:
+SZ_SHORT = 2
+SZ_INT = 4
+SZ_FLOAT = 4
+
+class _3ds_short(object):
+ '''Class representing a short (2-byte integer) for a 3ds file.
+ *** This looks like an unsigned short H is unsigned from the struct docs - Cam***'''
+ __slots__ = 'value'
+ def __init__(self, val=0):
+ self.value=val
+
+ def get_size(self):
+ return SZ_SHORT
+
+ def write(self,file):
+ file.write(struct.pack("<H", self.value))
+
+ def __str__(self):
+ return str(self.value)
+
+class _3ds_int(object):
+ '''Class representing an int (4-byte integer) for a 3ds file.'''
+ __slots__ = 'value'
+ def __init__(self, val=0):
+ self.value=val
+
+ def get_size(self):
+ return SZ_INT
+
+ def write(self,file):
+ file.write(struct.pack("<I", self.value))
+
+ def __str__(self):
+ return str(self.value)
+
+class _3ds_float(object):
+ '''Class representing a 4-byte IEEE floating point number for a 3ds file.'''
+ __slots__ = 'value'
+ def __init__(self, val=0.0):
+ self.value=val
+
+ def get_size(self):
+ return SZ_FLOAT
+
+ def write(self,file):
+ file.write(struct.pack("<f", self.value))
+
+ def __str__(self):
+ return str(self.value)
+
+
+class _3ds_string(object):
+ '''Class representing a zero-terminated string for a 3ds file.'''
+ __slots__ = 'value'
+ def __init__(self, val=""):
+ self.value=val
+
+ def get_size(self):
+ return (len(self.value)+1)
+
+ def write(self,file):
+ binary_format = "<%ds" % (len(self.value)+1)
+ file.write(struct.pack(binary_format, self.value))
+
+ def __str__(self):
+ return self.value
+
+class _3ds_point_3d(object):
+ '''Class representing a three-dimensional point for a 3ds file.'''
+ __slots__ = 'x','y','z'
+ def __init__(self, point=(0.0,0.0,0.0)):
+ self.x, self.y, self.z = point
+
+ def get_size(self):
+ return 3*SZ_FLOAT
+
+ def write(self,file):
+ file.write(struct.pack('<3f', self.x, self.y, self.z))
+
+ def __str__(self):
+ return '(%f, %f, %f)' % (self.x, self.y, self.z)
+
+# Used for writing a track
+"""
+class _3ds_point_4d(object):
+ '''Class representing a four-dimensional point for a 3ds file, for instance a quaternion.'''
+ __slots__ = 'x','y','z','w'
+ def __init__(self, point=(0.0,0.0,0.0,0.0)):
+ self.x, self.y, self.z, self.w = point
+
+ def get_size(self):
+ return 4*SZ_FLOAT
+
+ def write(self,file):
+ data=struct.pack('<4f', self.x, self.y, self.z, self.w)
+ file.write(data)
+
+ def __str__(self):
+ return '(%f, %f, %f, %f)' % (self.x, self.y, self.z, self.w)
+"""
+
+class _3ds_point_uv(object):
+ '''Class representing a UV-coordinate for a 3ds file.'''
+ __slots__ = 'uv'
+ def __init__(self, point=(0.0,0.0)):
+ self.uv = point
+
+ def __cmp__(self, other):
+ return cmp(self.uv,other.uv)
+
+ def get_size(self):
+ return 2*SZ_FLOAT
+
+ def write(self,file):
+ data=struct.pack('<2f', self.uv[0], self.uv[1])
+ file.write(data)
+
+ def __str__(self):
+ return '(%g, %g)' % self.uv
+
+class _3ds_rgb_color(object):
+ '''Class representing a (24-bit) rgb color for a 3ds file.'''
+ __slots__ = 'r','g','b'
+ def __init__(self, col=(0,0,0)):
+ self.r, self.g, self.b = col
+
+ def get_size(self):
+ return 3
+
+ def write(self,file):
+ file.write( struct.pack('<3c', chr(int(255*self.r)), chr(int(255*self.g)), chr(int(255*self.b)) ) )
+
+ def __str__(self):
+ return '{%f, %f, %f}' % (self.r, self.g, self.b)
+
+class _3ds_face(object):
+ '''Class representing a face for a 3ds file.'''
+ __slots__ = 'vindex'
+ def __init__(self, vindex):
+ self.vindex = vindex
+
+ def get_size(self):
+ return 4*SZ_SHORT
+
+ def write(self,file):
+ # The last zero is only used by 3d studio
+ file.write(struct.pack("<4H", self.vindex[0],self.vindex[1], self.vindex[2], 0))
+
+ def __str__(self):
+ return '[%d %d %d]' % (self.vindex[0],self.vindex[1], self.vindex[2])
+
+class _3ds_array(object):
+ '''Class representing an array of variables for a 3ds file.
+
+ Consists of a _3ds_short to indicate the number of items, followed by the items themselves.
+ '''
+ __slots__ = 'values', 'size'
+ def __init__(self):
+ self.values=[]
+ self.size=SZ_SHORT
+
+ # add an item:
+ def add(self,item):
+ self.values.append(item)
+ self.size+=item.get_size()
+
+ def get_size(self):
+ return self.size
+
+ def write(self,file):
+ _3ds_short(len(self.values)).write(file)
+ #_3ds_int(len(self.values)).write(file)
+ for value in self.values:
+ value.write(file)
+
+ # To not overwhelm the output in a dump, a _3ds_array only
+ # outputs the number of items, not all of the actual items.
+ def __str__(self):
+ return '(%d items)' % len(self.values)
+
+class _3ds_named_variable(object):
+ '''Convenience class for named variables.'''
+
+ __slots__ = 'value', 'name'
+ def __init__(self, name, val=None):
+ self.name=name
+ self.value=val
+
+ def get_size(self):
+ if (self.value==None):
+ return 0
+ else:
+ return self.value.get_size()
+
+ def write(self, file):
+ if (self.value!=None):
+ self.value.write(file)
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list