[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2031] trunk/py/scripts/addons/ io_scene_x3d: - support for path mode copying

Campbell Barton ideasman42 at gmail.com
Fri Jun 10 06:52:19 CEST 2011


Revision: 2031
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2031
Author:   campbellbarton
Date:     2011-06-10 04:52:18 +0000 (Fri, 10 Jun 2011)
Log Message:
-----------
- support for path mode copying
- h3d: replace unfinvviewmat with gl_ModelViewMatrixInverse

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_x3d/__init__.py
    trunk/py/scripts/addons/io_scene_x3d/export_x3d.py

Modified: trunk/py/scripts/addons/io_scene_x3d/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_scene_x3d/__init__.py	2011-06-10 04:07:41 UTC (rev 2030)
+++ trunk/py/scripts/addons/io_scene_x3d/__init__.py	2011-06-10 04:52:18 UTC (rev 2031)
@@ -126,7 +126,7 @@
             default='-Y',
             )
 
-    # path_mode = path_reference_mode
+    path_mode = path_reference_mode
 
     def execute(self, context):
         from . import export_x3d

Modified: trunk/py/scripts/addons/io_scene_x3d/export_x3d.py
===================================================================
--- trunk/py/scripts/addons/io_scene_x3d/export_x3d.py	2011-06-10 04:07:41 UTC (rev 2030)
+++ trunk/py/scripts/addons/io_scene_x3d/export_x3d.py	2011-06-10 04:52:18 UTC (rev 2031)
@@ -101,9 +101,39 @@
 
     return par_lookup[None]
 
-##########################################################
+# -----------------------------------------------------------------------------
+# H3D Functions
+# -----------------------------------------------------------------------------
+def h3d_shader_glsl_frag_patch(filepath):
+    h3d_file = open(filepath, 'r')
+    lines = []
+    for l in h3d_file:
+        l = l.replace("uniform mat4 unfinvviewmat;", "")
+        l = l.replace("unfinvviewmat", "gl_ModelViewMatrixInverse")
+        
+        '''
+        l = l.replace("varying vec3 varposition;", "")
+        l = l.replace("varposition", "gl_Vertex")  # not needed int H3D
+        '''
+
+        #l = l.replace("varying vec3 varnormal;", "")
+        #l = l.replace("varnormal", "gl_Normal")  # view normal
+        #l = l.replace("varnormal", "normalize(-(gl_ModelViewMatrix * gl_Vertex).xyz)")  # view normal
+        # l = l.replace("varnormal", "gl_NormalMatrix * gl_Normal")  # view normal
+        lines.append(l)
+    
+    
+    h3d_file.close()
+
+    h3d_file = open(filepath, 'w')
+    h3d_file.writelines(lines)
+    h3d_file.close()
+    
+
+
+# -----------------------------------------------------------------------------
 # Functions for writing output file
-##########################################################
+# -----------------------------------------------------------------------------
 
 def export(file,
            global_matrix,
@@ -114,11 +144,13 @@
            use_normals=False,
            use_hierarchy=True,
            use_h3d=False,
+           path_mode='AUTO',
            ):
 
     # -------------------------------------------------------------------------
     # Global Setup
     # -------------------------------------------------------------------------
+    import bpy_extras
     from bpy_extras.io_utils import unique_name
     from xml.sax.saxutils import quoteattr
 
@@ -130,8 +162,13 @@
     uuid_cache_image = {}     # image
     uuid_cache_world = {}     # world
 
+    # store files to copy
+    copy_set = set()
+
     fw = file.write
-    dirname = os.path.dirname(file.name)
+    base_src = os.path.dirname(bpy.data.filepath)
+    base_dst = os.path.dirname(file.name)
+    filename_strip = os.path.splitext(os.path.basename(file.name))[0]
     gpu_shader_cache = {}
 
     if use_h3d:
@@ -759,6 +796,12 @@
 
                     ident = ident[:-1]
                     fw('%s</Shape>\n' % ident)
+                    
+                    # XXX
+                    
+            #fw('%s<PythonScript DEF="PS" url="object.py" >\n' % ident)
+            #fw('%s    <ShaderProgram USE="MA_Material.005" containerField="references"/>\n' % ident)
+            #fw('%s</PythonScript>\n' % ident)
 
             ident = ident[:-1]
             fw('%s</Group>\n' % ident)
@@ -822,6 +865,9 @@
             fw('%s<ComposedShader USE=%s />\n' % (ident, material_id))
         else:
             material.tag = True
+            
+            # GPU_material_bind_uniforms
+            # GPU_begin_object_materials
 
             #~ CD_MCOL 6
             #~ CD_MTFACE 5
@@ -903,11 +949,11 @@
             fw('%s<ComposedShader DEF=%s language="GLSL" >\n' % (ident, material_id))
             ident += '\t'
 
-            shader_url_frag = 'shaders/glsl_%s.frag' % material_id[1:-1]
-            shader_url_vert = 'shaders/glsl_%s.vert' % material_id[1:-1]
+            shader_url_frag = 'shaders/%s_%s.frag' % (filename_strip, material_id[1:-1])
+            shader_url_vert = 'shaders/%s_%s.vert' % (filename_strip, material_id[1:-1])
 
             # write files
-            shader_dir = os.path.join(dirname, 'shaders')
+            shader_dir = os.path.join(base_dst, 'shaders')
             if not os.path.isdir(shader_dir):
                 os.mkdir(shader_dir)
 
@@ -1003,12 +1049,16 @@
                             
                     else:
                         assert(0)
+                else:
+                    print("SKIPPING", uniform['type'])
 
-            file_frag = open(os.path.join(dirname, shader_url_frag), 'w')
+            file_frag = open(os.path.join(base_dst, shader_url_frag), 'w')
             file_frag.write(gpu_shader['fragment'])
             file_frag.close()
+            # patch it
+            h3d_shader_glsl_frag_patch(os.path.join(base_dst, shader_url_frag))
 
-            file_vert = open(os.path.join(dirname, shader_url_vert), 'w')
+            file_vert = open(os.path.join(base_dst, shader_url_vert), 'w')
             file_vert.write(gpu_shader['vertex'])
             file_vert.close()
 
@@ -1030,18 +1080,19 @@
             fw('%s<ImageTexture ' % ident)))
             fw('DEF=%s\n' % image_id)
 
+            # collect image paths, can load multiple
+            # [relative, name-only, absolute]
             filepath = image.filepath
             filepath_full = bpy.path.abspath(filepath)
-            # collect image paths, can load multiple
-            # [relative, name-only, absolute]
-            images = []
+            filepath_ref = bpy_extras.io_utils.path_reference(filepath_full, base_src, base_dst, path_mode, "textures", copy_set)
+            filepath_base = os.path.basename(filepath_ref)
 
-            if bpy.path.is_subdir(filepath_full, dirname):
-                images.append(os.path.relpath(filepath_full, dirname))
+            images = [
+                filepath_base,
+                filepath_ref,
+                filepath_full,
+            ]
 
-            images.append(os.path.basename(filepath_full))
-            images.append(filepath_full)
-            
             images = [f.replace('\\', '/') for f in images]
             images = [f for i, f in enumerate(images) if f not in images[:i]]
 
@@ -1237,6 +1288,10 @@
     if use_h3d:
         bpy.data.materials.remove(gpu_shader_dummy_mat)
 
+    # copy all collected files.
+    print(copy_set)
+    bpy_extras.io_utils.path_reference_copy(copy_set)
+
     print('Info: finished X3D export to %r' % file.name)
 
 
@@ -1254,6 +1309,7 @@
          use_hierarchy=True,
          use_h3d=False,
          global_matrix=None,
+         path_mode='AUTO',
          ):
 
     bpy.path.ensure_ext(filepath, '.x3dz' if use_compress else '.x3d')
@@ -1285,6 +1341,7 @@
            use_normals=use_normals,
            use_hierarchy=use_hierarchy,
            use_h3d=use_h3d,
+           path_mode=path_mode,
            )
 
     return {'FINISHED'}



More information about the Bf-extensions-cvs mailing list