[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22223] branches/soc-2009-kazanbas/release : - OBJ exporter now copies images

Arystanbek Dyussenov arystan.d at gmail.com
Wed Aug 5 11:50:00 CEST 2009


Revision: 22223
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22223
Author:   kazanbas
Date:     2009-08-05 11:49:59 +0200 (Wed, 05 Aug 2009)

Log Message:
-----------
- OBJ exporter now copies images
- added OBJ, FBX scripts to File -> Export, File -> Import menus

Modified Paths:
--------------
    branches/soc-2009-kazanbas/release/io/export_fbx.py
    branches/soc-2009-kazanbas/release/io/export_obj.py
    branches/soc-2009-kazanbas/release/ui/space_info.py

Modified: branches/soc-2009-kazanbas/release/io/export_fbx.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-08-05 09:45:52 UTC (rev 22222)
+++ branches/soc-2009-kazanbas/release/io/export_fbx.py	2009-08-05 09:49:59 UTC (rev 22223)
@@ -1323,6 +1323,19 @@
 		file.write('\n\t\t}')
 		file.write('\n\t}')
 
+	def copy_image(image):
+
+		rel = image.get_export_path(basepath, True)
+		base = os.path.basename(fname_rel)
+
+		if EXP_IMAGE_COPY:
+			src = bpy.sys.expandpath(image.filename)
+			absp = image.get_export_path(basepath, False)
+			if not os.path.exists(absp):
+				shutil.copy(src, absp)
+
+		return (rel, base)
+
 	# tex is an Image (Arystan)
 	def write_video(texname, tex):
 		# Same as texture really!
@@ -1336,15 +1349,7 @@
 			Property: "Width", "int", "",0
 			Property: "Height", "int", "",0''')
 		if tex:
-			src = bpy.sys.expandpath(tex.filename)
-			fname_rel = tex.get_export_path(basepath, True)
-			fname_abs = tex.get_export_path(basepath, False)
-			fname_strip = os.path.basename(fname_rel)
-
-			if EXP_IMAGE_COPY:
-				if !os.path.exists(fname_abs):
-					shutil.copy(src, fname_abs)
-
+			fname_rel, fname_strip = copy_image(tex)
 # 			fname, fname_strip, fname_rel = derived_paths(tex.filename, basepath, EXP_IMAGE_COPY)
 		else:
 			fname = fname_strip = fname_rel = ''
@@ -1409,15 +1414,7 @@
 		file.write('\n\t\tMedia: "Video::%s"' % texname)
 		
 		if tex:
-			src = bpy.sys.expandpath(tex.filename)
-			fname_rel = tex.get_export_path(basepath, True)
-			fname_abs = tex.get_export_path(basepath, False)
-			fname_strip = os.path.basename(fname_rel)
-
-			if EXP_IMAGE_COPY:
-				if !os.path.exists(fname_abs):
-					shutil.copy(src, fname_abs)
-
+			fname_rel, fname_strip = copy_image(tex)
 # 			fname, fname_strip, fname_rel = derived_paths(tex.filename, basepath, EXP_IMAGE_COPY)
 		else:
 			fname = fname_strip = fname_rel = ''

Modified: branches/soc-2009-kazanbas/release/io/export_obj.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_obj.py	2009-08-05 09:45:52 UTC (rev 22222)
+++ branches/soc-2009-kazanbas/release/io/export_obj.py	2009-08-05 09:49:59 UTC (rev 22223)
@@ -47,7 +47,7 @@
 
 # import math and other in functions that use them for the sake of fast Blender startup
 # import math
-import os # os.sep
+import os
 
 import bpy
 import Mathutils
@@ -83,13 +83,26 @@
 
 # A Dict of Materials
 # (material.name, image.name):matname_imagename # matname_imagename has gaps removed.
-MTL_DICT = {} 
+MTL_DICT = {} 	
 
-def write_mtl(scene, filename):
+def write_mtl(scene, filename, copy_images):
 
 	world = scene.world
 	worldAmb = world.ambient_color
 
+	dest_dir = os.path.dirname(filename)
+
+	def copy_image(image):
+		rel = image.get_export_path(dest_dir, True)
+
+		if copy_images:
+			abspath = image.get_export_path(dest_dir, False)
+			if not os.path.exists(abs_path):
+				shutil.copy(bpy.sys.expandpath(image.filename), abs_path)
+
+		return rel
+
+
 	file = open(filename, "w")
 	# XXX
 #	file.write('# Blender3D MTL File: %s\n' % Blender.Get('filename').split('\\')[-1].split('/')[-1])
@@ -129,13 +142,17 @@
 		
 		# Write images!
 		if img:	 # We have an image on the face!
-			file.write('map_Kd %s\n' % img.filename.split('\\')[-1].split('/')[-1]) # Diffuse mapping image			
+			# write relative image path
+			rel = copy_image(img)
+			file.write('map_Kd %s\n' % rel) # Diffuse mapping image
+# 			file.write('map_Kd %s\n' % img.filename.split('\\')[-1].split('/')[-1]) # Diffuse mapping image			
 		
 		elif mat: # No face image. if we havea material search for MTex image.
 			for mtex in mat.textures:
 				if mtex and mtex.texure.type == 'IMAGE':
 					try:
-						filename = mtex.texture.image.filename.split('\\')[-1].split('/')[-1]
+						filename = copy_image(mtex.texture.image)
+# 						filename = mtex.texture.image.filename.split('\\')[-1].split('/')[-1]
 						file.write('map_Kd %s\n' % filename) # Diffuse mapping image
 						break
 					except:
@@ -146,6 +163,7 @@
 	
 	file.close()
 
+# XXX not used
 def copy_file(source, dest):
 	file = open(source, 'rb')
 	data = file.read()
@@ -156,6 +174,7 @@
 	file.close()
 
 
+# XXX not used
 def copy_images(dest_dir):
 	if dest_dir[-1] != os.sep:
 		dest_dir += os.sep
@@ -181,7 +200,7 @@
 							pass
 	
 	# Now copy images
-# 	copyCount = 0
+	copyCount = 0
 	
 # 	for bImage in uniqueImages.values():
 # 		image_path = bpy.sys.expandpath(bImage.filename)
@@ -193,7 +212,7 @@
 # 				copy_file(image_path, dest_image_path)
 # 				copyCount+=1
 
-	paths= bpy.util.copy_images(uniqueImages.values(), dest_dir)
+# 	paths= bpy.util.copy_images(uniqueImages.values(), dest_dir)
 
 	print('\tCopied %d images' % copyCount)
 # 	print('\tCopied %d images' % copyCount)
@@ -412,16 +431,11 @@
 			if ob.type != 'MESH':
 				continue
 
-			if EXPORT_APPLY_MODIFIERS:
-				me = ob.create_mesh('PREVIEW')
-			else:
-				me = ob.data.create_copy()
+			me = ob.create_mesh(EXPORT_APPLY_MODIFIERS, 'PREVIEW')
 
 			if EXPORT_ROTX90:
-				print(ob_mat * mat_xrot90)
 				me.transform(ob_mat * mat_xrot90)
 			else:
-				print(ob_mat)
 				me.transform(ob_mat)
 
 #			# Will work for non meshes now! :)
@@ -597,7 +611,7 @@
 #							file.write('vt %.6f %.6f\n' % tuple(uv))
 				
 				uv_unique_count = len(uv_dict)
-				del uv, uvkey, uv_dict, f_index, uv_index
+# 				del uv, uvkey, uv_dict, f_index, uv_index
 				# Only need uv_unique_count and uv_face_mapping
 			
 			# NORMAL, Smooth/Non smoothed.
@@ -783,16 +797,17 @@
 	
 	# Now we have all our materials, save them
 	if EXPORT_MTL:
-		write_mtl(scene, mtlfilename)
-	if EXPORT_COPY_IMAGES:
-		dest_dir = filename
-		# Remove chars until we are just the path.
-		while dest_dir and dest_dir[-1] not in '\\/':
-			dest_dir = dest_dir[:-1]
-		if dest_dir:
-			copy_images(dest_dir)
-		else:
-			print('\tError: "%s" could not be used as a base for an image path.' % filename)
+		write_mtl(scene, mtlfilename, EXPORT_COPY_IMAGES)
+# 	if EXPORT_COPY_IMAGES:
+# 		dest_dir = os.path.basename(filename)
+# # 		dest_dir = filename
+# # 		# Remove chars until we are just the path.
+# # 		while dest_dir and dest_dir[-1] not in '\\/':
+# # 			dest_dir = dest_dir[:-1]
+# 		if dest_dir:
+# 			copy_images(dest_dir)
+# 		else:
+# 			print('\tError: "%s" could not be used as a base for an image path.' % filename)
 
 	print("OBJ Export time: %.2f" % (bpy.sys.time() - time1))
 #	print "OBJ Export time: %.2f" % (sys.time() - time1)
@@ -898,7 +913,7 @@
 		bpy.props.StringProperty(attr="filename", name="File Name", description="File name used for exporting the PLY file", maxlen= 1024, default= ""),
 
 		# context group
-		bpy.props.BoolProperty(attr="use_selection", name="Selection Only", description="", default= True),
+		bpy.props.BoolProperty(attr="use_selection", name="Selection Only", description="", default= False),
 		bpy.props.BoolProperty(attr="use_all_scenes", name="All Scenes", description="", default= False),
 		bpy.props.BoolProperty(attr="use_animation", name="All Animation", description="", default= False),
 

Modified: branches/soc-2009-kazanbas/release/ui/space_info.py
===================================================================
--- branches/soc-2009-kazanbas/release/ui/space_info.py	2009-08-05 09:45:52 UTC (rev 22222)
+++ branches/soc-2009-kazanbas/release/ui/space_info.py	2009-08-05 09:49:59 UTC (rev 22223)
@@ -74,6 +74,7 @@
 
 	def draw(self, context):
 		layout = self.layout
+		layout.itemO("import.obj", text="OBJ")
 
 class INFO_MT_file_export(bpy.types.Menu):
 	__space_type__ = "USER_PREFERENCES"
@@ -82,6 +83,8 @@
 	def draw(self, context):
 		layout = self.layout
 
+		layout.itemO("export.fbx", text="FBX")
+		layout.itemO("export.obj", text="OBJ")
 		layout.itemO("export.ply", text="PLY")
 
 class INFO_MT_file_external_data(bpy.types.Menu):





More information about the Bf-blender-cvs mailing list