[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32058] trunk/blender/release/scripts: bugfix [#23945] obj export problems
Campbell Barton
ideasman42 at gmail.com
Wed Sep 22 15:24:21 CEST 2010
Revision: 32058
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32058
Author: campbellbarton
Date: 2010-09-22 15:24:21 +0200 (Wed, 22 Sep 2010)
Log Message:
-----------
bugfix [#23945] obj export problems
Modified Paths:
--------------
trunk/blender/release/scripts/modules/io_utils.py
trunk/blender/release/scripts/op/io_scene_obj/export_obj.py
Modified: trunk/blender/release/scripts/modules/io_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/io_utils.py 2010-09-22 12:36:54 UTC (rev 32057)
+++ trunk/blender/release/scripts/modules/io_utils.py 2010-09-22 13:24:21 UTC (rev 32058)
@@ -29,8 +29,14 @@
def invoke(self, context, event):
import os
if not self.filepath:
- self.filepath = os.path.splitext(context.blend_data.filepath)[0] + self.filename_ext
+ blend_filepath = context.blend_data.filepath
+ if not blend_filepath:
+ blend_filepath = "untitled"
+ else:
+ blend_filepath = os.path.splitext(blend_filepath)[0]
+ self.filepath = blend_filepath + self.filename_ext
+
context.window_manager.add_fileselect(self)
return {'RUNNING_MODAL'}
Modified: trunk/blender/release/scripts/op/io_scene_obj/export_obj.py
===================================================================
--- trunk/blender/release/scripts/op/io_scene_obj/export_obj.py 2010-09-22 12:36:54 UTC (rev 32057)
+++ trunk/blender/release/scripts/op/io_scene_obj/export_obj.py 2010-09-22 13:24:21 UTC (rev 32058)
@@ -303,18 +303,6 @@
else:
return '(null)'
- # TODO: implement this in C? dunno how it should be called...
- def getVertsFromGroup(me, group_index):
- ret = []
-
- for i, v in enumerate(me.vertices):
- for g in v.groups:
- if g.group == group_index:
- ret.append((i, g.weight))
-
- return ret
-
-
print('OBJ Export path: %r' % filepath)
temp_mesh_name = '~tmp-mesh'
@@ -403,27 +391,6 @@
me_verts = me.vertices[:]
- # XXX - todo, find a better way to do triangulation
- # ...removed convert_to_triface because it relies on editmesh
- '''
- # We have a valid mesh
- if EXPORT_TRI and me.faces:
- # Add a dummy object to it.
- has_quads = False
- for f in me.faces:
- if f.vertices[3] != 0:
- has_quads = True
- break
-
- if has_quads:
- newob = bpy.data.objects.new('temp_object', me)
- # if we forget to set Object.data - crash
- scene.objects.link(newob)
- newob.convert_to_triface(scene)
- # mesh will still be there
- scene.objects.unlink(newob)
- '''
-
# Make our own list so it can be sorted to reduce context switching
face_index_pairs = [ (face, index) for index, face in enumerate(me.faces)]
# faces = [ f for f in me.faces ]
@@ -560,25 +527,16 @@
# XXX
if EXPORT_POLYGROUPS:
# Retrieve the list of vertex groups
-# vertGroupNames = me.getVertGroupNames()
+ vertGroupNames = [g.name for g in ob.vertex_groups]
currentVGroup = ''
# Create a dictionary keyed by face id and listing, for each vertex, the vertex groups it belongs to
vgroupsMap = [[] for _i in range(len(me_verts))]
-# vgroupsMap = [[] for _i in xrange(len(me_verts))]
- for g in ob.vertex_groups:
-# for vertexGroupName in vertGroupNames:
- for v_idx, vWeight in getVertsFromGroup(me, g.index):
-# for v_idx, vWeight in me.getVertsFromGroup(vertexGroupName, 1):
- vgroupsMap[v_idx].append((g.name, vWeight))
+ for v_idx, v in enumerate(me.vertices):
+ for g in v.groups:
+ vgroupsMap[v_idx].append((vertGroupNames[g.group], g.weight))
for f, f_index in face_index_pairs:
- f_v = [me_verts[v_idx] for v_idx in f.vertices]
-
- # if f.vertices[3] == 0:
- # f_v.pop()
-
-# f_v= f.v
f_smooth= f.use_smooth
f_mat = min(f.material_index, len(materialNames)-1)
# f_mat = min(f.mat, len(materialNames)-1)
@@ -602,20 +560,12 @@
# Write the vertex group
if EXPORT_POLYGROUPS:
- if len(ob.vertex_groups):
+ if ob.vertex_groups:
# find what vertext group the face belongs to
theVGroup = findVertexGroupName(f,vgroupsMap)
if theVGroup != currentVGroup:
currentVGroup = theVGroup
file.write('g %s\n' % theVGroup)
-# # Write the vertex group
-# if EXPORT_POLYGROUPS:
-# if vertGroupNames:
-# # find what vertext group the face belongs to
-# theVGroup = findVertexGroupName(f,vgroupsMap)
-# if theVGroup != currentVGroup:
-# currentVGroup = theVGroup
-# file.write('g %s\n' % theVGroup)
# CHECK FOR CONTEXT SWITCH
if key == contextMat:
@@ -657,46 +607,56 @@
file.write('s off\n')
contextSmooth = f_smooth
- file.write('f')
- if faceuv:
- if EXPORT_NORMALS:
- if f_smooth: # Smoothed, use vertex normals
- for vi, v in enumerate(f_v):
- file.write( ' %d/%d/%d' % \
- (v.index + totverts,
- totuvco + uv_face_mapping[f_index][vi],
- globalNormals[ veckey3d(v.normal) ]) ) # vert, uv, normal
+ f_v_orig = [me_verts[v_idx] for v_idx in f.vertices]
+
+ if not EXPORT_TRI or len(f_v_orig) == 3:
+ f_v_iter = (f_v_orig, )
+ else:
+ f_v_iter = (f_v_orig[0], f_v_orig[1], f_v_orig[2]), (f_v_orig[0], f_v_orig[2], f_v_orig[3])
- else: # No smoothing, face normals
- no = globalNormals[ veckey3d(f.normal) ]
+ # support for triangulation
+ for f_v in f_v_iter:
+ file.write('f')
+
+ if faceuv:
+ if EXPORT_NORMALS:
+ if f_smooth: # Smoothed, use vertex normals
+ for vi, v in enumerate(f_v):
+ file.write( ' %d/%d/%d' % \
+ (v.index + totverts,
+ totuvco + uv_face_mapping[f_index][vi],
+ globalNormals[ veckey3d(v.normal) ]) ) # vert, uv, normal
+
+ else: # No smoothing, face normals
+ no = globalNormals[ veckey3d(f.normal) ]
+ for vi, v in enumerate(f_v):
+ file.write( ' %d/%d/%d' % \
+ (v.index + totverts,
+ totuvco + uv_face_mapping[f_index][vi],
+ no) ) # vert, uv, normal
+ else: # No Normals
for vi, v in enumerate(f_v):
- file.write( ' %d/%d/%d' % \
- (v.index + totverts,
- totuvco + uv_face_mapping[f_index][vi],
- no) ) # vert, uv, normal
- else: # No Normals
- for vi, v in enumerate(f_v):
- file.write( ' %d/%d' % (\
- v.index + totverts,\
- totuvco + uv_face_mapping[f_index][vi])) # vert, uv
+ file.write( ' %d/%d' % (\
+ v.index + totverts,\
+ totuvco + uv_face_mapping[f_index][vi])) # vert, uv
- face_vert_index += len(f_v)
+ face_vert_index += len(f_v)
- else: # No UV's
- if EXPORT_NORMALS:
- if f_smooth: # Smoothed, use vertex normals
+ else: # No UV's
+ if EXPORT_NORMALS:
+ if f_smooth: # Smoothed, use vertex normals
+ for v in f_v:
+ file.write( ' %d//%d' %
+ (v.index + totverts, globalNormals[ veckey3d(v.normal) ]) )
+ else: # No smoothing, face normals
+ no = globalNormals[ veckey3d(f.normal) ]
+ for v in f_v:
+ file.write( ' %d//%d' % (v.index + totverts, no) )
+ else: # No Normals
for v in f_v:
- file.write( ' %d//%d' %
- (v.index + totverts, globalNormals[ veckey3d(v.normal) ]) )
- else: # No smoothing, face normals
- no = globalNormals[ veckey3d(f.normal) ]
- for v in f_v:
- file.write( ' %d//%d' % (v.index + totverts, no) )
- else: # No Normals
- for v in f_v:
- file.write( ' %d' % (v.index + totverts) )
+ file.write( ' %d' % (v.index + totverts) )
- file.write('\n')
+ file.write('\n')
# Write edges.
if EXPORT_EDGES:
More information about the Bf-blender-cvs
mailing list