[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21323] branches/soc-2009-kazanbas: - added API functions:

Arystanbek Dyussenov arystan.d at gmail.com
Thu Jul 2 22:46:36 CEST 2009


Revision: 21323
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21323
Author:   kazanbas
Date:     2009-07-02 22:46:35 +0200 (Thu, 02 Jul 2009)

Log Message:
-----------
- added API functions:
 - Mesh.calc_normals
 - Object.add_vertex_to_group
 - Main.add_material
 - Main.add_texture
 - Material.add_texture
- OBJ importer conversion in progress

Modified Paths:
--------------
    branches/soc-2009-kazanbas/release/io/export_obj.py
    branches/soc-2009-kazanbas/release/io/import_obj.py
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/makesrna.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_main_api.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_material.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh_api.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_object_api.c

Added Paths:
-----------
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_material_api.c

Modified: branches/soc-2009-kazanbas/release/io/export_obj.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_obj.py	2009-07-02 19:41:31 UTC (rev 21322)
+++ branches/soc-2009-kazanbas/release/io/export_obj.py	2009-07-02 20:46:35 UTC (rev 21323)
@@ -464,7 +464,7 @@
 			# XXX
 			# High Quality Normals
 			if EXPORT_NORMALS and face_index_pairs:
-				pass
+				me.calc_normals()
 #				if EXPORT_NORMALS_HQ:
 #					BPyMesh.meshCalcNormals(me)
 #				else:

Modified: branches/soc-2009-kazanbas/release/io/import_obj.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/import_obj.py	2009-07-02 19:41:31 UTC (rev 21322)
+++ branches/soc-2009-kazanbas/release/io/import_obj.py	2009-07-02 20:46:35 UTC (rev 21323)
@@ -42,7 +42,7 @@
 
 from Blender import Mesh, Draw, Window, Texture, Material, sys
 import bpy
-import BPyMesh
+# import BPyMesh
 import BPyImage
 import BPyMessages
 
@@ -130,10 +130,12 @@
 	# This function sets textures defined in .mtl file                                 #
 	#==================================================================================#
 	def load_material_image(blender_material, context_material_name, imagepath, type):
+
+		texture= bpy.data.add_texture(type)
+		texture.type= 'IMAGE'
+# 		texture= bpy.data.textures.new(type)
+# 		texture.setType('Image')
 		
-		texture= bpy.data.textures.new(type)
-		texture.setType('Image')
-		
 		# Absolute path - c:\.. etc would work here
 		image= obj_image_load(imagepath, DIR, IMAGE_SEARCH)
 		has_data = image.has_data
@@ -182,7 +184,8 @@
 	#Create new materials
 	for name in unique_materials: # .keys()
 		if name != None:
-			unique_materials[name]= bpy.data.materials.new(name)
+			unique_materials[name]= bpy.data.add_material(name)
+# 			unique_materials[name]= bpy.data.materials.new(name)
 			unique_material_images[name]= None, False # assign None to all material images to start with, add to later.
 		
 	unique_materials[None]= None
@@ -190,7 +193,8 @@
 	
 	for libname in material_libs:
 		mtlpath= DIR + libname
-		if not sys.exists(mtlpath):
+		if not bpy.sys.exists(mtlpath):
+# 		if not sys.exists(mtlpath):
 			#print '\tError Missing MTL: "%s"' % mtlpath
 			pass
 		else:
@@ -210,17 +214,23 @@
 					line_split= line.split()
 					line_lower= line.lower().lstrip()
 					if line_lower.startswith('ka'):
-						context_material.setMirCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
+						context_material.mirror_color = (float(line_split[1]), float(line_split[2]), float(line_split[3]))
+# 						context_material.setMirCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
 					elif line_lower.startswith('kd'):
-						context_material.setRGBCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
+						context_material.diffuse_color = (float(line_split[1]), float(line_split[2]), float(line_split[3]))
+# 						context_material.setRGBCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
 					elif line_lower.startswith('ks'):
-						context_material.setSpecCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
+						context_material.specular_color = (float(line_split[1]), float(line_split[2]), float(line_split[3]))
+# 						context_material.setSpecCol((float(line_split[1]), float(line_split[2]), float(line_split[3])))
 					elif line_lower.startswith('ns'):
-						context_material.setHardness( int((float(line_split[1])*0.51)) )
+						context_material.specular_hardness = int((float(line_split[1])*0.51))
+# 						context_material.setHardness( int((float(line_split[1])*0.51)) )
 					elif line_lower.startswith('ni'): # Refraction index
-						context_material.setIOR( max(1, min(float(line_split[1]), 3))) # Between 1 and 3
+						context_material.ior = max(1, min(float(line_split[1]), 3))
+# 						context_material.setIOR( max(1, min(float(line_split[1]), 3))) # Between 1 and 3
 					elif line_lower.startswith('d') or line_lower.startswith('tr'):
-						context_material.setAlpha(float(line_split[1]))
+						context_material.alpha = float(line_split[1])
+# 						context_material.setAlpha(float(line_split[1]))
 					elif line_lower.startswith('map_ka'):
 						img_filepath= line_value(line.split())
 						if img_filepath:
@@ -395,39 +405,39 @@
 						edge_dict[i1,i2]=  1
 			
 			# FGons into triangles
-			if has_ngons and len_face_vert_loc_indicies > 4:
+# 			if has_ngons and len_face_vert_loc_indicies > 4:
 				
-				ngon_face_indices= BPyMesh.ngon(verts_loc, face_vert_loc_indicies)
-				faces.extend(\
-				[(\
-				[face_vert_loc_indicies[ngon[0]], face_vert_loc_indicies[ngon[1]], face_vert_loc_indicies[ngon[2]] ],\
-				[face_vert_tex_indicies[ngon[0]], face_vert_tex_indicies[ngon[1]], face_vert_tex_indicies[ngon[2]] ],\
-				context_material,\
-				context_smooth_group,\
-				context_object)\
-				for ngon in ngon_face_indices]\
-				)
+# 				ngon_face_indices= BPyMesh.ngon(verts_loc, face_vert_loc_indicies)
+# 				faces.extend(\
+# 				[(\
+# 				[face_vert_loc_indicies[ngon[0]], face_vert_loc_indicies[ngon[1]], face_vert_loc_indicies[ngon[2]] ],\
+# 				[face_vert_tex_indicies[ngon[0]], face_vert_tex_indicies[ngon[1]], face_vert_tex_indicies[ngon[2]] ],\
+# 				context_material,\
+# 				context_smooth_group,\
+# 				context_object)\
+# 				for ngon in ngon_face_indices]\
+# 				)
 				
-				# edges to make fgons
-				if CREATE_FGONS:
-					edge_users= {}
-					for ngon in ngon_face_indices:
-						for i in (0,1,2):
-							i1= face_vert_loc_indicies[ngon[i  ]]
-							i2= face_vert_loc_indicies[ngon[i-1]]
-							if i1>i2: i1,i2= i2,i1
+# 				# edges to make fgons
+# 				if CREATE_FGONS:
+# 					edge_users= {}
+# 					for ngon in ngon_face_indices:
+# 						for i in (0,1,2):
+# 							i1= face_vert_loc_indicies[ngon[i  ]]
+# 							i2= face_vert_loc_indicies[ngon[i-1]]
+# 							if i1>i2: i1,i2= i2,i1
 							
-							try:
-								edge_users[i1,i2]+=1
-							except KeyError:
-								edge_users[i1,i2]= 1
+# 							try:
+# 								edge_users[i1,i2]+=1
+# 							except KeyError:
+# 								edge_users[i1,i2]= 1
 					
-					for key, users in edge_users.iteritems():
-						if users>1:
-							fgon_edges[key]= None
+# 					for key, users in edge_users.iteritems():
+# 						if users>1:
+# 							fgon_edges[key]= None
 				
-				# remove all after 3, means we dont have to pop this one.
-				faces.pop(f_idx)
+# 				# remove all after 3, means we dont have to pop this one.
+# 				faces.pop(f_idx)
 		
 		
 	# Build sharp edges
@@ -564,33 +574,36 @@
 # 				me_edges[ed].flag |= SHARP
 # 		del SHARP
 	
-# 	if CREATE_EDGES:
+	if CREATE_EDGES:
+
+		me.add_geometry(0, len(edges))
+
+		# edges is (should be) a list of (a, b) tuples
+		me.edges.foreach_set("verts", unpack_list(edges))
 # 		me_edges.extend( edges )
 	
 # 	del me_edges
-	
+
+	me.calc_normals()
 # 	me.calcNormals()
 
 	ob= bpy.data.add_object("MESH", "Mesh")
 	ob.data= me
+	scn.add_object(ob)
 # 	ob= scn.objects.new(me)
 	new_objects.append(ob)
 
-# 	# Create the vertex groups. No need to have the flag passed here since we test for the 
-# 	# content of the vertex_groups. If the user selects to NOT have vertex groups saved then
-# 	# the following test will never run
-# 	for group_name, group_indicies in vertex_groups.iteritems():
-# 		i= ob.add_vertex_group(group_name)
-# # 		me.addVertGroup(group_name)
-# 		me.assign_verts_to_group(group_index, group_indicies, len(group_indicies), 1.0, 'REPLACE')
-# # 		me.assignVertsToGroup(group_name, group_indicies, 1.00, Mesh.AssignModes.REPLACE)
+	# Create the vertex groups. No need to have the flag passed here since we test for the 
+	# content of the vertex_groups. If the user selects to NOT have vertex groups saved then
+	# the following test will never run
+	for group_name, group_indicies in vertex_groups.iteritems():
+		group= ob.add_vertex_group(group_name)
+# 		me.addVertGroup(group_name)
+		for vertex_index in group_indicies:
+			ob.add_vertex_to_group(vertex_index, group, 1.0, 'REPLACE')
+# 		me.assignVertsToGroup(group_name, group_indicies, 1.00, Mesh.AssignModes.REPLACE)
 
 
-class Mesh(bpy.types.Mesh):
-
-	def assign_verts_to_group(self, group_index, vert_indices, weight):
-		
-
 def create_nurbs(scn, context_nurbs, vert_loc, new_objects):
 	'''
 	Add nurbs object to blender, only support one type at the moment
@@ -700,16 +713,16 @@
 	return float
 
 def load_obj(filepath,
-						 CLAMP_SIZE= 0.0, 
-						 CREATE_FGONS= True, 
-						 CREATE_SMOOTH_GROUPS= True, 
-						 CREATE_EDGES= True, 
-						 SPLIT_OBJECTS= True, 
-						 SPLIT_GROUPS= True, 
-						 SPLIT_MATERIALS= True, 
-						 ROTATE_X90= True, 
-						 IMAGE_SEARCH=True,
-						 POLYGROUPS=False):
+			 CLAMP_SIZE= 0.0, 
+			 CREATE_FGONS= True, 
+			 CREATE_SMOOTH_GROUPS= True, 
+			 CREATE_EDGES= True, 
+			 SPLIT_OBJECTS= True, 
+			 SPLIT_GROUPS= True, 
+			 SPLIT_MATERIALS= True, 
+			 ROTATE_X90= True, 
+			 IMAGE_SEARCH=True,
+			 POLYGROUPS=False):
 	'''
 	Called by the user interface or another script.
 	load_obj(path) - should give acceptable results.
@@ -997,30 +1010,30 @@
 		create_mesh(scn, new_objects, has_ngons, CREATE_FGONS, CREATE_EDGES, verts_loc_split, verts_tex, faces_split, unique_materials_split, unique_material_images, unique_smooth_groups, vertex_groups, dataname)
 	
 	# nurbs support
-	for context_nurbs in nurbs:
-		create_nurbs(scn, context_nurbs, verts_loc, new_objects)
+# 	for context_nurbs in nurbs:
+# 		create_nurbs(scn, context_nurbs, verts_loc, new_objects)
 	
 	
 	axis_min= [ 1000000000]*3
 	axis_max= [-1000000000]*3
 	
-	if CLAMP_SIZE:
-		# Get all object bounds
-		for ob in new_objects:
-			for v in ob.getBoundBox():
-				for axis, value in enumerate(v):
-					if axis_min[axis] > value:	axis_min[axis]= value
-					if axis_max[axis] < value:	axis_max[axis]= value
+# 	if CLAMP_SIZE:
+# 		# Get all object bounds
+# 		for ob in new_objects:
+# 			for v in ob.getBoundBox():
+# 				for axis, value in enumerate(v):
+# 					if axis_min[axis] > value:	axis_min[axis]= value
+# 					if axis_max[axis] < value:	axis_max[axis]= value
 		
-		# Scale objects
-		max_axis= max(axis_max[0]-axis_min[0], axis_max[1]-axis_min[1], axis_max[2]-axis_min[2])
-		scale= 1.0
+# 		# Scale objects
+# 		max_axis= max(axis_max[0]-axis_min[0], axis_max[1]-axis_min[1], axis_max[2]-axis_min[2])
+# 		scale= 1.0
 		
-		while CLAMP_SIZE < max_axis * scale:
-			scale= scale/10.0

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list