[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31605] trunk/blender/release/scripts/io/ import_scene_obj.py: OBJ Import support for nurbs curves back, remove some commented code.

Campbell Barton ideasman42 at gmail.com
Fri Aug 27 06:07:26 CEST 2010


Revision: 31605
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31605
Author:   campbellbarton
Date:     2010-08-27 06:07:12 +0200 (Fri, 27 Aug 2010)

Log Message:
-----------
OBJ Import support for nurbs curves back, remove some commented code.

Modified Paths:
--------------
    trunk/blender/release/scripts/io/import_scene_obj.py

Modified: trunk/blender/release/scripts/io/import_scene_obj.py
===================================================================
--- trunk/blender/release/scripts/io/import_scene_obj.py	2010-08-27 02:33:35 UTC (rev 31604)
+++ trunk/blender/release/scripts/io/import_scene_obj.py	2010-08-27 04:07:12 UTC (rev 31605)
@@ -30,50 +30,12 @@
 Note, This loads mesh objects and materials only, nurbs and curves are not supported.
 """
 
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# Script copyright (C) Campbell J Barton 2007
-#
-# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ***** END GPL LICENCE BLOCK *****
-# --------------------------------------------------------------------------
-
 import os
 import time
 import bpy
 import mathutils
 from geometry import PolyFill
 
-# from Blender import Mesh, Draw, Window, Texture, Material, sys
-# # import BPyMesh
-# import BPyImage
-# import BPyMessages
-
-# try:		import os
-# except:		os= False
-
-def stripExt(name): # name is a string
-    '''Strips the prefix off the name before writing'''
-    index= name.rfind('.')
-    if index != -1:
-        return name[ : index ]
-    else:
-        return name
-# end path funcs
-
 def unpack_list(list_of_tuples):
     l = []
     for t in list_of_tuples:
@@ -448,22 +410,16 @@
                     line_lower= line.lower().lstrip()
                     if line_lower.startswith('ka'):
                         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.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.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.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.raytrace_transparency.ior = max(1, min(float(line_split[1]), 3))
-# 						context_material.setIOR( max(1, min(float(line_split[1]), 3))) # Between 1 and 3
+                        context_material.raytrace_transparency.ior = max(1, min(float(line_split[1]), 3)) # Between 1 and 3
                     elif line_lower.startswith('d') or line_lower.startswith('tr'):
                         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:
@@ -621,14 +577,14 @@
             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]\
+                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
@@ -674,20 +630,17 @@
     # make sure the list isnt too big
     for material in materials:
         me.materials.link(material)
-    #me.vertices.extend([(0,0,0)]) # dummy vert
 
     me.vertices.add(len(verts_loc))
     me.faces.add(len(faces))
 
     # verts_loc is a list of (x, y, z) tuples
     me.vertices.foreach_set("co", unpack_list(verts_loc))
-# 	me.vertices.extend(verts_loc)
 
     # faces is a list of (vert_indices, texco_indices, ...) tuples
     # XXX faces should contain either 3 or 4 verts
     # XXX no check for valid face indices
     me.faces.foreach_set("vertices_raw", unpack_face_list([f[0] for f in faces]))
-# 	face_mapping= me.faces.extend([f[0] for f in faces], indexList=True)
 
     if verts_tex and me.faces:
         me.uv_textures.new()
@@ -695,7 +648,6 @@
     context_material_old= -1 # avoid a dict lookup
     mat= 0 # rare case it may be un-initialized.
     me_faces= me.faces
-# 	ALPHA= Mesh.FaceTranspModes.ALPHA
 
     for i, face in enumerate(faces):
         if len(face[0]) < 2:
@@ -704,14 +656,8 @@
             if CREATE_EDGES:
                 edges.append(face[0])
         else:
-# 			face_index_map= face_mapping[i]
 
-            # since we use foreach_set to add faces, all of them are added
-            if 1:
-# 			if face_index_map!=None: # None means the face wasnt added
-
                 blender_face = me.faces[i]
-# 				blender_face= me_faces[face_index_map]
 
                 face_vert_loc_indicies,\
                 face_vert_tex_indicies,\
@@ -851,22 +797,15 @@
         print('\tWarning, surfaces not supported')
         return
 
-    cu = bpy.data.curves.new(name, 'Curve')
-    cu.flag |= 1 # 3D curve
+    cu = bpy.data.curves.new(name, 'CURVE')
+    cu.dimensions = '3D'
 
-    nu = None
-    for pt in curv_idx:
+    nu = cu.splines.new('NURBS')
+    nu.points.add(len(curv_idx) - 1) # a point is added to start with
+    nu.points.foreach_set("co", [co_axis for vt_idx in curv_idx for co_axis in (vert_loc[vt_idx] + (1.0,))])
 
-        pt = vert_loc[pt]
-        pt = (pt[0], pt[1], pt[2], 1.0)
+    nu.order_u = deg[0] + 1
 
-        if nu == None:
-            nu = cu.appendNurb(pt)
-        else:
-            nu.append(pt)
-
-    nu.orderU = deg[0]+1
-
     # get for endpoint flag from the weighting
     if curv_range and len(parm_u) > deg[0]+1:
         do_endpoints = True
@@ -884,7 +823,7 @@
         do_endpoints = False
 
     if do_endpoints:
-        nu.flagU |= 2
+        nu.use_endpoint_u = True
 
 
     # close
@@ -899,10 +838,10 @@
                 break
 
     if do_closed:
-        nu.flagU |= 1
+        nu.use_cyclic_u = True
     '''
     
-    ob= bpy.data.objects.new("Mesh", me)
+    ob= bpy.data.objects.new("Nurb", cu)
 
     new_objects.append(ob)
 
@@ -1224,8 +1163,7 @@
         verts_loc[:] = [(v[0], v[2], -v[1]) for v in verts_loc]
 
     # deselect all
-# 	if context.selected_objects:
-# 		bpy.ops.OBJECT_OT_select_all()
+    bpy.ops.object.select_all(action='DESELECT')
 
     scene = context.scene
 # 	scn.objects.selected = []
@@ -1241,12 +1179,13 @@
         create_mesh(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(context_nurbs, verts_loc, new_objects)
 
     # Create new obj
     for obj in new_objects:
-        scene.objects.link(obj)
+        base = scene.objects.link(obj)
+        base.select = True
 
     scene.update()
 
@@ -1449,7 +1388,7 @@
             return
 
         for f in files:
-            scn= bpy.data.scenes.new( stripExt(f) )
+            scn= bpy.data.scenes.new(os.path.splitext(f)[0])
             scn.makeCurrent()
 
             load_obj(sys.join(filepath, f),\
@@ -1581,13 +1520,11 @@
 # check later: line 489
 # can convert now: edge flags, edges: lines 508-528
 # ngon (uses python module BPyMesh): 384-414
-# nurbs: 947-
 # NEXT clamp size: get bound box with RNA
 # get back to l 140 (here)
 # search image in bpy.config.textureDir - load_image
 # replaced BPyImage.comprehensiveImageLoad with a simplified version that only checks additional directory specified, but doesn't search dirs recursively (obj_image_load)
 # bitmask won't work? - 132
-# uses operator bpy.ops.OBJECT_OT_select_all() to deselect all (not necessary?)
 # uses bpy.sys.time()
 
 if __name__ == "__main__":





More information about the Bf-blender-cvs mailing list