modified OBJ import and export UI's to be less confusing with nicer layout. removed...
authorCampbell Barton <ideasman42@gmail.com>
Sun, 19 Oct 2008 15:53:22 +0000 (15:53 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 19 Oct 2008 15:53:22 +0000 (15:53 +0000)
release/scripts/export_fbx.py
release/scripts/export_obj.py
release/scripts/import_obj.py

index 2d8859aa8fbfb84ea16e886b15d290de43a81d24..696d3d1561a1816b1e2c54622629dc0c95685cae 100644 (file)
@@ -2887,7 +2887,7 @@ def fbx_ui():
 def write_ui():
        
        # globals
-       GLOBALS['EVENT'] = 2
+       GLOBALS['EVENT'] = EVENT_REDRAW
        #GLOBALS['MOUSE'] = Window.GetMouseCoords()
        GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()]
        GLOBALS['FILENAME'] = ''
@@ -2929,13 +2929,6 @@ def write_ui():
        GLOBALS['_YROT90'] =                                    Draw.Create(False)
        GLOBALS['_ZROT90'] =                                    Draw.Create(False)
        
-       # horrible ugly hack so tooltips draw, dosnt always work even
-       # Fixed in Draw.UIBlock for 2.45rc2, but keep this until 2.45 is released
-       Window.SetKeyQualifiers(0)
-       while Window.GetMouseButtons(): Blender.sys.sleep(10)
-       for i in xrange(100): Window.QHandle(i)
-       # END HORRID HACK
-       
        # best not do move the cursor
        # Window.SetMouseCoords(*[i/2 for i in Window.GetScreenSize()])
        
index 6ea890879ddb8bda9ab756157378b7a4b8e0b3ba..f99a949fbae3c32910806a8ea13f15dc5b1df8bc 100644 (file)
@@ -2,14 +2,14 @@
 
 """
 Name: 'Wavefront (.obj)...'
-Blender: 243
+Blender: 248
 Group: 'Export'
 Tooltip: 'Save a Wavefront OBJ File'
 """
 
 __author__ = "Campbell Barton, Jiri Hnidek"
-__url__ = ['www.blender.org', 'blenderartists.org']
-__version__ = "1.1"
+__url__ = ['http://wiki.blender.org/index.php/Scripts/Manual/Export/wavefront_obj', 'www.blender.org', 'blenderartists.org']
+__version__ = "1.2"
 
 __bpydoc__ = """\
 This script is an exporter to OBJ file format.
@@ -535,23 +535,31 @@ def write_ui(filename):
        if not BPyMessages.Warning_SaveOver(filename):
                return
        
-       EXPORT_APPLY_MODIFIERS = Draw.Create(1)
+       global EXPORT_APPLY_MODIFIERS, EXPORT_ROTX90, EXPORT_TRI, EXPORT_EDGES,\
+               EXPORT_NORMALS, EXPORT_NORMALS_HQ, EXPORT_UV,\
+               EXPORT_MTL, EXPORT_SEL_ONLY, EXPORT_ALL_SCENES,\
+               EXPORT_ANIMATION, EXPORT_COPY_IMAGES, EXPORT_BLEN_OBS,\
+               EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER
+       
+       EXPORT_APPLY_MODIFIERS = Draw.Create(0)
        EXPORT_ROTX90 = Draw.Create(1)
        EXPORT_TRI = Draw.Create(0)
        EXPORT_EDGES = Draw.Create(1)
        EXPORT_NORMALS = Draw.Create(0)
-       EXPORT_NORMALS_HQ = Draw.Create(1)
+       EXPORT_NORMALS_HQ = Draw.Create(0)
        EXPORT_UV = Draw.Create(1)
        EXPORT_MTL = Draw.Create(1)
        EXPORT_SEL_ONLY = Draw.Create(1)
        EXPORT_ALL_SCENES = Draw.Create(0)
        EXPORT_ANIMATION = Draw.Create(0)
        EXPORT_COPY_IMAGES = Draw.Create(0)
-       EXPORT_BLEN_OBS = Draw.Create(1)
+       EXPORT_BLEN_OBS = Draw.Create(0)
        EXPORT_GROUP_BY_OB = Draw.Create(0)
        EXPORT_GROUP_BY_MAT = Draw.Create(0)
        EXPORT_KEEP_VERT_ORDER = Draw.Create(1)
        
+       # Old UI
+       '''
        # removed too many options are bad!
        
        # Get USER Options
@@ -580,12 +588,124 @@ def write_ui(filename):
        
        if not Draw.PupBlock('Export...', pup_block):
                return
+       '''
+       
+       # BEGIN ALTERNATIVE UI *******************
+       if True: 
+               
+               EVENT_NONE = 0
+               EVENT_EXIT = 1
+               EVENT_REDRAW = 2
+               EVENT_EXPORT = 3
+               
+               GLOBALS = {}
+               GLOBALS['EVENT'] = EVENT_REDRAW
+               #GLOBALS['MOUSE'] = Window.GetMouseCoords()
+               GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()]
+               
+               def obj_ui_set_event(e,v):
+                       GLOBALS['EVENT'] = e
+               
+               def do_split(e,v):
+                       global EXPORT_BLEN_OBS, EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_APPLY_MODIFIERS, KEEP_VERT_ORDER
+                       if EXPORT_BLEN_OBS.val or EXPORT_GROUP_BY_OB.val or EXPORT_GROUP_BY_MAT.val or EXPORT_APPLY_MODIFIERS.val:
+                               EXPORT_KEEP_VERT_ORDER.val = 0
+                       else:
+                               EXPORT_KEEP_VERT_ORDER.val = 1
+                       
+               def do_vertorder(e,v):
+                       global EXPORT_BLEN_OBS, EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_APPLY_MODIFIERS, KEEP_VERT_ORDER
+                       if EXPORT_KEEP_VERT_ORDER.val:
+                               EXPORT_BLEN_OBS.val = EXPORT_GROUP_BY_OB.val = EXPORT_GROUP_BY_MAT.val = EXPORT_APPLY_MODIFIERS.val = 0
+                       else:
+                               if not (EXPORT_BLEN_OBS.val or EXPORT_GROUP_BY_OB.val or EXPORT_GROUP_BY_MAT.val or EXPORT_APPLY_MODIFIERS.val):
+                                       EXPORT_KEEP_VERT_ORDER.val = 1
+                       
+               def do_help(e,v):
+                       url = __url__[0]
+                       print 'Trying to open web browser with documentation at this address...'
+                       print '\t' + url
+                       
+                       try:
+                               import webbrowser
+                               webbrowser.open(url)
+                       except:
+                               print '...could not open a browser window.'
+               
+               def obj_ui():
+                       ui_x, ui_y = GLOBALS['MOUSE']
+                       
+                       # Center based on overall pup size
+                       ui_x -= 165
+                       ui_y -= 110
+                       
+                       global EXPORT_APPLY_MODIFIERS, EXPORT_ROTX90, EXPORT_TRI, EXPORT_EDGES,\
+                               EXPORT_NORMALS, EXPORT_NORMALS_HQ, EXPORT_UV,\
+                               EXPORT_MTL, EXPORT_SEL_ONLY, EXPORT_ALL_SCENES,\
+                               EXPORT_ANIMATION, EXPORT_COPY_IMAGES, EXPORT_BLEN_OBS,\
+                               EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER
+
+                       Draw.Label('Context...', ui_x+9, ui_y+209, 220, 20)
+                       Draw.BeginAlign()
+                       EXPORT_SEL_ONLY = Draw.Toggle('Selection Only', EVENT_NONE, ui_x+9, ui_y+189, 110, 20, EXPORT_SEL_ONLY.val, 'Only export objects in visible selection. Else export whole scene.')
+                       EXPORT_ALL_SCENES = Draw.Toggle('All Scenes', EVENT_NONE, ui_x+119, ui_y+189, 110, 20, EXPORT_ALL_SCENES.val, 'Each scene as a separate OBJ file.')
+                       EXPORT_ANIMATION = Draw.Toggle('Animation', EVENT_NONE, ui_x+229, ui_y+189, 110, 20, EXPORT_ANIMATION.val, 'Each frame as a numbered OBJ file.')
+                       Draw.EndAlign()
+                       
+                       
+                       Draw.Label('Output Options...', ui_x+9, ui_y+159, 220, 20)
+                       Draw.BeginAlign()
+                       EXPORT_APPLY_MODIFIERS = Draw.Toggle('Apply Modifiers', EVENT_REDRAW, ui_x+9, ui_y+140, 110, 20, EXPORT_APPLY_MODIFIERS.val, 'Use transformed mesh data from each object. May break vert order for morph targets.', do_split)
+                       EXPORT_ROTX90 = Draw.Toggle('Rotate X90', EVENT_NONE, ui_x+119, ui_y+140, 110, 20, EXPORT_ROTX90.val, 'Rotate on export so Blenders UP is translated into OBJs UP')
+                       EXPORT_COPY_IMAGES = Draw.Toggle('Copy Images', EVENT_NONE, ui_x+229, ui_y+140, 110, 20, EXPORT_COPY_IMAGES.val, 'Copy image files to the export directory, never overwrite.')
+                       Draw.EndAlign()
+                       
+                       
+                       Draw.Label('Export...', ui_x+9, ui_y+109, 220, 20)
+                       Draw.BeginAlign()
+                       EXPORT_EDGES = Draw.Toggle('Edges', EVENT_NONE, ui_x+9, ui_y+90, 50, 20, EXPORT_EDGES.val, 'Edges not connected to faces.')
+                       EXPORT_TRI = Draw.Toggle('Triangulate', EVENT_NONE, ui_x+59, ui_y+90, 70, 20, EXPORT_TRI.val, 'Triangulate quads.')
+                       Draw.EndAlign()
+                       Draw.BeginAlign()
+                       EXPORT_MTL = Draw.Toggle('Materials', EVENT_NONE, ui_x+139, ui_y+90, 70, 20, EXPORT_MTL.val, 'Write a separate MTL file with the OBJ.')
+                       EXPORT_UV = Draw.Toggle('UVs', EVENT_NONE, ui_x+209, ui_y+90, 31, 20, EXPORT_UV.val, 'Export texface UV coords.')
+                       Draw.EndAlign()
+                       Draw.BeginAlign()
+                       EXPORT_NORMALS = Draw.Toggle('Normals', EVENT_NONE, ui_x+250, ui_y+90, 59, 20, EXPORT_NORMALS.val, 'Export vertex normal data (Ignored on import).')
+                       EXPORT_NORMALS_HQ = Draw.Toggle('HQ', EVENT_NONE, ui_x+309, ui_y+90, 31, 20, EXPORT_NORMALS_HQ.val, 'Calculate high quality normals for rendering.')
+                       Draw.EndAlign()
+                       
+                       
+                       Draw.Label('Blender Objects as OBJ:', ui_x+9, ui_y+59, 220, 20)
+                       Draw.BeginAlign()
+                       EXPORT_BLEN_OBS = Draw.Toggle('Objects', EVENT_REDRAW, ui_x+9, ui_y+40, 60, 20, EXPORT_BLEN_OBS.val, 'Export blender objects as "OBJ objects".', do_split)
+                       EXPORT_GROUP_BY_OB = Draw.Toggle('Groups', EVENT_REDRAW, ui_x+69, ui_y+39, 60, 20, EXPORT_GROUP_BY_OB.val, 'Export blender objects as "OBJ Groups".', do_split)
+                       EXPORT_GROUP_BY_MAT = Draw.Toggle('Material Groups', EVENT_REDRAW, ui_x+129, ui_y+39, 100, 20, EXPORT_GROUP_BY_MAT.val, 'Group by materials.', do_split)
+                       Draw.EndAlign()
+                       
+                       EXPORT_KEEP_VERT_ORDER = Draw.Toggle('Keep Vert Order', EVENT_REDRAW, ui_x+239, ui_y+39, 100, 20, EXPORT_KEEP_VERT_ORDER.val, 'Keep vert and face order, disables some other options. Use for morph targets.', do_vertorder)
+                       
+                       Draw.BeginAlign()
+                       Draw.PushButton('Online Help', EVENT_REDRAW, ui_x+9, ui_y+9, 110, 20, 'Load the wiki page for this script', do_help)
+                       Draw.PushButton('Cancel', EVENT_EXIT, ui_x+119, ui_y+9, 110, 20, '', obj_ui_set_event)
+                       Draw.PushButton('Export', EVENT_EXPORT, ui_x+229, ui_y+9, 110, 20, 'Export with these settings', obj_ui_set_event)
+                       Draw.EndAlign()
+
+               
+               # hack so the toggle buttons redraw. this is not nice at all
+               while GLOBALS['EVENT'] not in (EVENT_EXIT, EVENT_EXPORT):
+                       Draw.UIBlock(obj_ui)
+               
+               if GLOBALS['EVENT'] != EVENT_EXPORT:
+                       return
+               
+       # END ALTERNATIVE UI *********************
+       
        
        if EXPORT_KEEP_VERT_ORDER.val:
                EXPORT_BLEN_OBS.val = False
                EXPORT_GROUP_BY_OB.val = False
                EXPORT_GROUP_BY_MAT.val = False
-               EXPORT_GROUP_BY_MAT.val = False
                EXPORT_APPLY_MODIFIERS.val = False
        
        Window.EditMode(0)
index 6ddfb867a36186232dc28194027c92c87534562f..b7bdd54fe6de1dfa3d78e8f1c6e90514b5cfba12 100644 (file)
@@ -2,14 +2,14 @@
  
 """
 Name: 'Wavefront (.obj)...'
-Blender: 242
+Blender: 248
 Group: 'Import'
 Tooltip: 'Load a Wavefront OBJ File, Shift: batch import all dir.'
 """
 
 __author__= "Campbell Barton", "Jiri Hnidek"
-__url__= ["blender.org", "blenderartists.org"]
-__version__= "2.0"
+__url__= ['http://wiki.blender.org/index.php/Scripts/Manual/Import/wavefront_obj', 'blender.org', 'blenderartists.org']
+__version__= "2.1"
 
 __bpydoc__= """\
 This script imports a Wavefront OBJ files to Blender.
@@ -756,19 +756,22 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
        if BPyMessages.Error_NoFile(filepath):
                return
        
+       global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, KEEP_VERT_ORDER
        
        CREATE_SMOOTH_GROUPS= Draw.Create(0)
        CREATE_FGONS= Draw.Create(1)
        CREATE_EDGES= Draw.Create(1)
-       SPLIT_OBJECTS= Draw.Create(1)
-       SPLIT_GROUPS= Draw.Create(1)
-       SPLIT_MATERIALS= Draw.Create(1)
-       KEEP_VERT_ORDER= Draw.Create(1)
+       SPLIT_OBJECTS= Draw.Create(0)
+       SPLIT_GROUPS= Draw.Create(0)
+       SPLIT_MATERIALS= Draw.Create(0)
        CLAMP_SIZE= Draw.Create(10.0)
        IMAGE_SEARCH= Draw.Create(1)
+       KEEP_VERT_ORDER= Draw.Create(1)
        
        
        # Get USER Options
+       # Note, Works but not pretty, instead use a more complicated GUI
+       '''
        pup_block= [\
        'Import...',\
        ('Smooth Groups', CREATE_SMOOTH_GROUPS, 'Surround smooth groups by sharp edges'),\
@@ -791,6 +794,102 @@ def load_obj_ui(filepath, BATCH_LOAD= False):
                SPLIT_OBJECTS.val = False
                SPLIT_GROUPS.val = False
                SPLIT_MATERIALS.val = False
+       '''
+       
+       
+       
+       # BEGIN ALTERNATIVE UI *******************
+       if True: 
+               
+               EVENT_NONE = 0
+               EVENT_EXIT = 1
+               EVENT_REDRAW = 2
+               EVENT_IMPORT = 3
+               
+               GLOBALS = {}
+               GLOBALS['EVENT'] = EVENT_REDRAW
+               #GLOBALS['MOUSE'] = Window.GetMouseCoords()
+               GLOBALS['MOUSE'] = [i/2 for i in Window.GetScreenSize()]
+               
+               def obj_ui_set_event(e,v):
+                       GLOBALS['EVENT'] = e
+               
+               def do_split(e,v):
+                       global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER
+                       if SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val:
+                               KEEP_VERT_ORDER.val = 0
+                       else:
+                               KEEP_VERT_ORDER.val = 1
+                       
+               def do_vertorder(e,v):
+                       global SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, KEEP_VERT_ORDER
+                       if KEEP_VERT_ORDER.val:
+                               SPLIT_OBJECTS.val = SPLIT_GROUPS.val = SPLIT_MATERIALS.val = 0
+                       else:
+                               if not (SPLIT_OBJECTS.val or SPLIT_GROUPS.val or SPLIT_MATERIALS.val):
+                                       KEEP_VERT_ORDER.val = 1
+                       
+               def do_help(e,v):
+                       url = __url__[0]
+                       print 'Trying to open web browser with documentation at this address...'
+                       print '\t' + url
+                       
+                       try:
+                               import webbrowser
+                               webbrowser.open(url)
+                       except:
+                               print '...could not open a browser window.'
+               
+               def obj_ui():
+                       ui_x, ui_y = GLOBALS['MOUSE']
+                       
+                       # Center based on overall pup size
+                       ui_x -= 165
+                       ui_y -= 90
+                       
+                       global CREATE_SMOOTH_GROUPS, CREATE_FGONS, CREATE_EDGES, SPLIT_OBJECTS, SPLIT_GROUPS, SPLIT_MATERIALS, CLAMP_SIZE, IMAGE_SEARCH, KEEP_VERT_ORDER
+                       
+                       Draw.Label('Import...', ui_x+9, ui_y+159, 220, 21)
+                       Draw.BeginAlign()
+                       CREATE_SMOOTH_GROUPS = Draw.Toggle('Smooth Groups', EVENT_NONE, ui_x+9, ui_y+139, 110, 20, CREATE_SMOOTH_GROUPS.val, 'Surround smooth groups by sharp edges')
+                       CREATE_FGONS = Draw.Toggle('NGons as FGons', EVENT_NONE, ui_x+119, ui_y+139, 110, 20, CREATE_FGONS.val, 'Import faces with more then 4 verts as fgons')
+                       CREATE_EDGES = Draw.Toggle('Lines as Edges', EVENT_NONE, ui_x+229, ui_y+139, 110, 20, CREATE_EDGES.val, 'Import lines and faces with 2 verts as edges')
+                       Draw.EndAlign()
+                       
+                       Draw.Label('Separate objects by OBJ...', ui_x+9, ui_y+110, 220, 20)
+                       Draw.BeginAlign()
+                       SPLIT_OBJECTS = Draw.Toggle('Object', EVENT_REDRAW, ui_x+9, ui_y+89, 70, 21, SPLIT_OBJECTS.val, 'Import OBJ Objects into Blender Objects', do_split)
+                       SPLIT_GROUPS = Draw.Toggle('Group', EVENT_REDRAW, ui_x+79, ui_y+89, 70, 21, SPLIT_GROUPS.val, 'Import OBJ Groups into Blender Objects', do_split)
+                       SPLIT_MATERIALS = Draw.Toggle('Material', EVENT_REDRAW, ui_x+149, ui_y+89, 70, 21, SPLIT_MATERIALS.val, 'Import each material into a seperate mesh (Avoids > 16 per mesh error)', do_split)
+                       Draw.EndAlign()
+                       
+                       # Only used for user feedback
+                       KEEP_VERT_ORDER = Draw.Toggle('Keep Vert Order', EVENT_REDRAW, ui_x+229, ui_y+89, 110, 21, KEEP_VERT_ORDER.val, 'Keep vert and face order, disables split options, enable for morph targets', do_vertorder)
+                       
+                       Draw.Label('Options...', ui_x+9, ui_y+60, 211, 20)
+                       CLAMP_SIZE = Draw.Number('Clamp Scale: ', EVENT_NONE, ui_x+9, ui_y+39, 211, 21, CLAMP_SIZE.val, 0.0, 1000.0, 'Clamp the size to this maximum (Zero to Disable)')
+                       IMAGE_SEARCH = Draw.Toggle('Image Search', EVENT_NONE, ui_x+229, ui_y+39, 110, 21, IMAGE_SEARCH.val, 'Search subdirs for any assosiated images (Warning, may be slow)')
+                       Draw.BeginAlign()
+                       Draw.PushButton('Online Help', EVENT_REDRAW, ui_x+9, ui_y+9, 110, 21, 'Load the wiki page for this script', do_help)
+                       Draw.PushButton('Cancel', EVENT_EXIT, ui_x+119, ui_y+9, 110, 21, '', obj_ui_set_event)
+                       Draw.PushButton('Import', EVENT_IMPORT, ui_x+229, ui_y+9, 110, 21, 'Import with these settings', obj_ui_set_event)
+                       Draw.EndAlign()
+                       
+               
+               # hack so the toggle buttons redraw. this is not nice at all
+               while GLOBALS['EVENT'] not in (EVENT_EXIT, EVENT_IMPORT):
+                       Draw.UIBlock(obj_ui)
+               
+               if GLOBALS['EVENT'] != EVENT_IMPORT:
+                       return
+               
+       # END ALTERNATIVE UI *********************
+       
+       
+       
+       
+       
+       
        
        Window.WaitCursor(1)