[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34087] trunk/blender/release/scripts/op/ io_scene_x3d/export_x3d.py: use x3d Group' s rather then IndexedFaceSets to re-use objects.

Campbell Barton ideasman42 at gmail.com
Wed Jan 5 08:14:27 CET 2011


Revision: 34087
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34087
Author:   campbellbarton
Date:     2011-01-05 08:14:26 +0100 (Wed, 05 Jan 2011)

Log Message:
-----------
use x3d Group's rather then IndexedFaceSets to re-use objects.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py

Modified: trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py
===================================================================
--- trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py	2011-01-05 06:58:52 UTC (rev 34086)
+++ trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py	2011-01-05 07:14:26 UTC (rev 34087)
@@ -59,7 +59,6 @@
 
     def __init__(self, filepath):
         #--- public you can change these ---
-        self.writingcolor = 0
         self.proto = 1
         self.billnode = 0
         self.halonode = 0
@@ -280,9 +279,8 @@
     def writeIndexedFaceSet(self, ob, mesh, mtx, world, EXPORT_TRI=False):
         # imageMap = {}  # set of used images
         sided = {}  # 'one':cnt , 'two':cnt
-        meshName = self.cleanStr(ob.name)
+        mesh_name_x3d = self.cleanStr(ob.name)
 
-        meshME = self.cleanStr(ob.data.name)  # We dont care if its the mesh name or not
         if not mesh.faces:
             return
 
@@ -320,72 +318,73 @@
 
         loc, quat, sca = mtx.decompose()
 
-        self.write_indented("<Transform DEF=\"%s\" " % meshName)
+        self.write_indented("<Transform DEF=\"%s\" " % mesh_name_x3d, 1)
         self.file.write("translation=\"%.6f %.6f %.6f\" " % loc[:])
         self.file.write("scale=\"%.6f %.6f %.6f\" " % sca[:])
         self.file.write("rotation=\"%.6f %.6f %.6f %.6f\" " % (quat.axis[:] + (quat.angle, )))
         self.file.write(">\n")
 
-        self.write_indented("<Group DEF=\"G_%s\">\n" % meshName, 1)
+        if mesh.tag:
+            self.write_indented("<Group USE=\"G_%s\" />\n" % mesh_name_x3d, 1)
+        else:
+            mesh.tag = True
 
-        self.write_indented("<Shape>\n", 1)
-        is_smooth = False
+            self.write_indented("<Group DEF=\"G_%s\">\n" % mesh_name_x3d, 1)
 
-        # XXX, lame, only exports first material.
-        mat_first = None
-        for mat_first in mesh.materials:
-            if mat_first:
-                break
+            self.write_indented("<Shape>\n", 1)
+            is_smooth = False
 
-        if mat_first or mesh.uv_textures.active:
-            self.write_indented("<Appearance>\n", 1)
-            # right now this script can only handle a single material per mesh.
-            if mat_first and mat_first.use_face_texture == False:
-                self.writeMaterial(mat_first, self.cleanStr(mat_first.name, ""), world)
-                if len(mesh.materials) > 1:
-                    print("Warning: mesh named %s has multiple materials" % meshName)
-                    print("Warning: only one material per object handled")
+            # XXX, lame, only exports first material.
+            mat_first = None
+            for mat_first in mesh.materials:
+                if mat_first:
+                    break
 
-            image = None
+            if mat_first or mesh.uv_textures.active:
+                self.write_indented("<Appearance>\n", 1)
+                # right now this script can only handle a single material per mesh.
+                if mat_first and mat_first.use_face_texture == False:
+                    self.writeMaterial(mat_first, self.cleanStr(mat_first.name, ""), world)
+                    if len(mesh.materials) > 1:
+                        print("Warning: mesh named %s has multiple materials" % mesh_name_x3d)
+                        print("Warning: only one material per object handled")
 
-            if mat_first is None or mat_first.use_face_texture:
-                #-- textures
-                if mesh.uv_textures.active:
-                    for face in mesh.uv_textures.active.data:
-                        if face.use_image:
-                            image = face.image
-                            if image:
-                                break
-            elif mat_first:
-                for mtex in mat_first.texture_slots:
-                    if mtex:
-                        tex = mtex.texture
-                        if tex and tex.type == 'IMAGE':
-                            image = tex.image
-                            if image:
-                                break
+                image = None
 
-            # XXX, incorrect, uses first image
-            if image:
-                self.writeImageTexture(image)
+                if mat_first is None or mat_first.use_face_texture:
+                    #-- textures
+                    if mesh.uv_textures.active:
+                        for face in mesh.uv_textures.active.data:
+                            if face.use_image:
+                                image = face.image
+                                if image:
+                                    break
+                elif mat_first:
+                    for mtex in mat_first.texture_slots:
+                        if mtex:
+                            tex = mtex.texture
+                            if tex and tex.type == 'IMAGE':
+                                image = tex.image
+                                if image:
+                                    break
 
-                if self.tilenode == 1:
-                    self.write_indented("<TextureTransform	scale=\"%s %s\" />\n" % (image.xrep, image.yrep))
-                    self.tilenode = 0
+                # XXX, incorrect, uses first image
+                if image:
+                    self.writeImageTexture(image)
 
-            self.write_indented("</Appearance>\n", -1)
+                    if self.tilenode == 1:
+                        self.write_indented("<TextureTransform	scale=\"%s %s\" />\n" % (image.xrep, image.yrep))
+                        self.tilenode = 0
 
-        #-- IndexedFaceSet or IndexedLineSet
+                self.write_indented("</Appearance>\n", -1)
 
-        # user selected BOUNDS=1, SOLID=3, SHARED=4, or TEXTURE=5
-        # look up mesh name, use it if available
-        if mesh.tag:
-            self.write_indented("<IndexedFaceSet USE=\"ME_%s\">" % meshME, 1)
-        else:
-            mesh.tag = True
+            #-- IndexedFaceSet or IndexedLineSet
 
-            self.write_indented("<IndexedFaceSet DEF=\"ME_%s\" " % meshME, 1)
+            # user selected BOUNDS=1, SOLID=3, SHARED=4, or TEXTURE=5
+            # look up mesh name, use it if available
 
+            self.write_indented("<IndexedFaceSet ", 1)
+
             # --- Write IndexedFaceSet Attributes
             if mesh.show_double_sided:
                 self.file.write("solid=\"true\" ")
@@ -408,13 +407,13 @@
             if is_col:
                 self.write_ifs_color_attr(mesh)
 
-            self.write_ifs_coords_attr(ob, mesh, meshName, EXPORT_TRI)
+            self.write_ifs_coords_attr(ob, mesh, mesh_name_x3d, EXPORT_TRI)
 
             # close IndexedFaceSet
             self.file.write(">\n")
 
             # --- Write IndexedFaceSet Elements
-            self.write_ifs_coords_elem(ob, mesh, meshName, EXPORT_TRI)
+            self.write_ifs_coords_elem(ob, mesh, mesh_name_x3d, EXPORT_TRI)
 
             if is_col:
                 self.write_ifs_texco_elem(mesh)
@@ -422,11 +421,11 @@
                 self.write_ifs_color_elem(mesh)
             #--- output vertexColors
 
-        self.writingcolor = 0
-        #--- output closing braces
-        self.write_indented("</IndexedFaceSet>\n", -1)
-        self.write_indented("</Shape>\n", -1)
-        self.write_indented("</Group>\n", -1)
+            #--- output closing braces
+            self.write_indented("</IndexedFaceSet>\n", -1)
+            self.write_indented("</Shape>\n", -1)
+            self.write_indented("</Group>\n", -1)
+
         self.write_indented("</Transform>\n", -1)
 
         if self.halonode == 1:
@@ -443,7 +442,7 @@
 
         self.file.write("\n")
 
-    def write_ifs_coords_attr(self, ob, mesh, meshName, EXPORT_TRI=False):
+    def write_ifs_coords_attr(self, ob, mesh, mesh_name_x3d, EXPORT_TRI=False):
         self.file.write('coordIndex="')
         if EXPORT_TRI:
             for face in mesh.faces:
@@ -464,8 +463,8 @@
 
         self.file.write("\" ")
 
-    def write_ifs_coords_elem(self, ob, mesh, meshName, EXPORT_TRI=False):
-        self.write_indented("<Coordinate DEF=\"%s%s\" \n" % ("coord_", meshName), 1)
+    def write_ifs_coords_elem(self, ob, mesh, mesh_name_x3d, EXPORT_TRI=False):
+        self.write_indented("<Coordinate DEF=\"%s%s\" \n" % ("coord_", mesh_name_x3d), 1)
         self.file.write("\t\t\t\tpoint=\"")
         for v in mesh.vertices:
             self.file.write("%.6f %.6f %.6f, " % v.co[:])





More information about the Bf-blender-cvs mailing list