Revision: 23422
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23422
Author:   kazanbas
Date:     2009-09-22 18:35:07 +0200 (Tue, 22 Sep 2009)

Log Message:
-----------
Manual merge of soc-2009-kazanbas branch:

* copied I/O scripts
* copied, modified rna_*_api.c and rna_*.c

I/O scripts not working yet due to slight BPY differences and RNA changes. Will 
fix them later.

Not merged changes:

* C unit testing integration, because it is clumsy
* scons cross-compiling, can be merged easily later

Modified Paths:
--------------
    trunk/blender/release/io/engine_render_pov.py
    trunk/blender/release/io/export_ply.py
    trunk/blender/release/ui/space_info.py
    trunk/blender/source/blender/blenkernel/BKE_anim.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/makesdna/DNA_object_types.h
    trunk/blender/source/blender/makesrna/intern/makesrna.c
    trunk/blender/source/blender/makesrna/intern/rna_action.c
    trunk/blender/source/blender/makesrna/intern/rna_armature.c
    trunk/blender/source/blender/makesrna/intern/rna_image.c
    trunk/blender/source/blender/makesrna/intern/rna_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh_api.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_object_api.c
    trunk/blender/source/blender/makesrna/intern/rna_pose.c
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Added Paths:
-----------
    trunk/blender/release/io/export_3ds.py
    trunk/blender/release/io/export_fbx.py
    trunk/blender/release/io/export_obj.py
    trunk/blender/release/io/export_x3d.py
    trunk/blender/release/io/import_3ds.py
    trunk/blender/release/io/import_obj.py
    trunk/blender/source/blender/makesrna/intern/rna_action_api.c
    trunk/blender/source/blender/makesrna/intern/rna_image_api.c
    trunk/blender/source/blender/makesrna/intern/rna_material_api.c
    trunk/blender/source/blender/makesrna/intern/rna_pose_api.c

Modified: trunk/blender/release/io/engine_render_pov.py
===================================================================
--- trunk/blender/release/io/engine_render_pov.py       2009-09-22 16:23:46 UTC 
(rev 23421)
+++ trunk/blender/release/io/engine_render_pov.py       2009-09-22 16:35:07 UTC 
(rev 23422)
@@ -281,7 +281,7 @@
                        me = ob.data
                        me_materials= me.materials
                        
-                       me = ob.create_render_mesh(scene)
+                       me = ob.create_mesh(True, 'RENDER')
                        
                        if not me:
                                continue

Added: trunk/blender/release/io/export_3ds.py
===================================================================
--- trunk/blender/release/io/export_3ds.py                              (rev 0)
+++ trunk/blender/release/io/export_3ds.py      2009-09-22 16:35:07 UTC (rev 
23422)
@@ -0,0 +1,1128 @@
+#!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 struct
+import os
+import time
+
+import bpy
+
+# import Blender
+# from BPyMesh import getMeshFromObject
+# from BPyObject import getDerivedObjects
+# try: 
+#     import struct
+# except: 
+#     struct = None
+
+# also used by X3D exporter
+# return a tuple (free, object list), free is True if memory should be freed 
later with free_derived_objects()
+def create_derived_objects(ob):
+       if ob.parent and ob.parent.dupli_type != 'NONE':
+               return False, None
+
+       if ob.dupli_type != 'NONE':
+               ob.create_dupli_list()
+               return True, [(dob.object, dob.matrix) for dob in ob.dupli_list]
+       else:
+               return False, [(ob, ob.matrix)]
+
+# also used by X3D exporter
+def free_derived_objects(ob):
+       ob.free_dupli_list()
+
+# 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= int("0x4D4D",16)
+
+#------ Main Chunks
+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    =      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=  int("0x0011",16)
+RGB2=  int("0x0012",16)
+
+#>------ sub defines of 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=   int("0x4720",16);      # The camera range values
+
+#>------ sub defines of OBJECT_MESH
+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            = 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          = 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[0], 6), round(uv[1], 6)
+#      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('<3B', int(255*self.r), 
int(255*self.g), int(255*self.b) ) )
+#              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.
+

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to