[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34083] trunk/blender: py api function to tag all ID blocks, was available in 2.4x as.

Campbell Barton ideasman42 at gmail.com
Wed Jan 5 06:33:50 CET 2011


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

Log Message:
-----------
py api function to tag all ID blocks, was available in 2.4x as.
 bpy.data.meshes.tag = True

But this was only useful for setting so make it a function for 2.5x.
 bpy.data.objects.tag(False)


X3D: use tagging rather then a name dictionary, this fixes a bug where library name overlaps could mix up names.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py
    trunk/blender/source/blender/blenkernel/BKE_library.h
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c

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 03:22:46 UTC (rev 34082)
+++ trunk/blender/release/scripts/op/io_scene_x3d/export_x3d.py	2011-01-05 05:33:27 UTC (rev 34083)
@@ -82,9 +82,6 @@
         self.it = 3
 
         #--- class private don't touch ---
-        self.texNames = {}   # dictionary of textureNames
-        self.matNames = {}   # dictionary of materiaNames
-        self.meshNames = {}   # dictionary of meshNames
         self.indentLevel = 0  # keeps track of current indenting
         self.filepath = filepath
         self.file = None
@@ -438,18 +435,14 @@
         #-- IndexedFaceSet or IndexedLineSet
 
         # user selected BOUNDS=1, SOLID=3, SHARED=4, or TEXTURE=5
-        ifStyle = "IndexedFaceSet"
         # look up mesh name, use it if available
-        if meshME in self.meshNames:
-            self.writeIndented("<%s USE=\"ME_%s\">" % (ifStyle, meshME), 1)
-            self.meshNames[meshME] += 1
+        if mesh.tag:
+            self.writeIndented("<IndexedFaceSet USE=\"ME_%s\">" % meshME, 1)
         else:
-            if int(mesh.users) > 1:
-                self.writeIndented("<%s DEF=\"ME_%s\" " % (ifStyle, meshME), 1)
-                self.meshNames[meshME] = 1
-            else:
-                self.writeIndented("<%s " % ifStyle, 1)
+            mesh.tag = True
 
+            self.writeIndented("<IndexedFaceSet DEF=\"ME_%s\" " % meshME, 1)
+
             if bTwoSided == 1:
                 self.file.write("solid=\"false\" ")
             else:
@@ -488,7 +481,7 @@
         self.writingtexture = 0
         self.writingcolor = 0
         #--- output closing braces
-        self.writeIndented("</%s>\n" % ifStyle, -1)
+        self.writeIndented("</IndexedFaceSet>\n", -1)
         self.writeIndented("</Shape>\n", -1)
         self.writeIndented("</Transform>\n", -1)
 
@@ -575,51 +568,49 @@
 
     def writeMaterial(self, mat, matName, world):
         # look up material name, use it if available
-        if matName in self.matNames:
+        if mat.tag:
             self.writeIndented("<Material USE=\"MA_%s\" />\n" % matName)
-            self.matNames[matName] += 1
-            return
-
-        self.matNames[matName] = 1
-
-        emit = mat.emit
-        ambient = mat.ambient / 3.0
-        diffuseColor = tuple(mat.diffuse_color)
-        if world:
-            ambiColor = tuple(((c * mat.ambient) * 2.0) for c in world.ambient_color)
         else:
-            ambiColor = 0.0, 0.0, 0.0
+            mat.tag = True
 
-        emitColor = tuple(((c * emit) + ambiColor[i]) / 2.0 for i, c in enumerate(diffuseColor))
-        shininess = mat.specular_hardness / 512.0
-        specColor = tuple((c + 0.001) / (1.25 / (mat.specular_intensity + 0.001)) for c in mat.specular_color)
-        transp = 1.0 - mat.alpha
+            emit = mat.emit
+            ambient = mat.ambient / 3.0
+            diffuseColor = tuple(mat.diffuse_color)
+            if world:
+                ambiColor = tuple(((c * mat.ambient) * 2.0) for c in world.ambient_color)
+            else:
+                ambiColor = 0.0, 0.0, 0.0
 
-        if mat.use_shadeless:
-            ambient = 1.0
-            shininess = 0.0
-            specColor = emitColor = diffuseColor
+            emitColor = tuple(((c * emit) + ambiColor[i]) / 2.0 for i, c in enumerate(diffuseColor))
+            shininess = mat.specular_hardness / 512.0
+            specColor = tuple((c + 0.001) / (1.25 / (mat.specular_intensity + 0.001)) for c in mat.specular_color)
+            transp = 1.0 - mat.alpha
 
-        self.writeIndented("<Material DEF=\"MA_%s\" " % matName, 1)
-        self.file.write("diffuseColor=\"%s %s %s\" " % round_color(diffuseColor, self.cp))
-        self.file.write("specularColor=\"%s %s %s\" " % round_color(specColor, self.cp))
-        self.file.write("emissiveColor=\"%s %s %s\" \n" % round_color(emitColor, self.cp))
-        self.writeIndented("ambientIntensity=\"%s\" " % (round(ambient, self.cp)))
-        self.file.write("shininess=\"%s\" " % (round(shininess, self.cp)))
-        self.file.write("transparency=\"%s\" />" % (round(transp, self.cp)))
-        self.writeIndented("\n", -1)
+            if mat.use_shadeless:
+                ambient = 1.0
+                shininess = 0.0
+                specColor = emitColor = diffuseColor
 
+            self.writeIndented("<Material DEF=\"MA_%s\" " % matName, 1)
+            self.file.write("diffuseColor=\"%s %s %s\" " % round_color(diffuseColor, self.cp))
+            self.file.write("specularColor=\"%s %s %s\" " % round_color(specColor, self.cp))
+            self.file.write("emissiveColor=\"%s %s %s\" \n" % round_color(emitColor, self.cp))
+            self.writeIndented("ambientIntensity=\"%s\" " % (round(ambient, self.cp)))
+            self.file.write("shininess=\"%s\" " % (round(shininess, self.cp)))
+            self.file.write("transparency=\"%s\" />" % (round(transp, self.cp)))
+            self.writeIndented("\n", -1)
+
     def writeImageTexture(self, image):
         name = image.name
         filepath = os.path.basename(image.filepath)
-        if name in self.texNames:
+        if image.tag:
             self.writeIndented("<ImageTexture USE=\"%s\" />\n" % self.cleanStr(name))
-            self.texNames[name] += 1
         else:
+            image.tag = True
+
             self.writeIndented("<ImageTexture DEF=\"%s\" " % self.cleanStr(name), 1)
             self.file.write("url=\"%s\" />" % filepath)
             self.writeIndented("\n", -1)
-            self.texNames[name] = 1
 
     def writeBackground(self, world, alltextures):
         if world:
@@ -707,6 +698,11 @@
                 EXPORT_TRI=False,
                 ):
 
+        # tag un-exported IDs
+        bpy.data.meshes.tag(False)
+        bpy.data.materials.tag(False)
+        bpy.data.images.tag(False)
+
         print("Info: starting X3D export to %r..." % self.filepath)
         self.writeHeader()
         # self.writeScript()
@@ -786,8 +782,6 @@
 
     def cleanup(self):
         self.file.close()
-        self.texNames = {}
-        self.matNames = {}
         self.indentLevel = 0
         print("Info: finished X3D export to %r" % self.filepath)
 

Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h	2011-01-05 03:22:46 UTC (rev 34082)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h	2011-01-05 05:33:27 UTC (rev 34083)
@@ -65,8 +65,11 @@
 void free_libblock(struct ListBase *lb, void *idv);
 void free_libblock_us(struct ListBase *lb, void *idv);
 void free_main(struct Main *mainvar);
-void tag_main(struct Main *mainvar, int tag);
 
+void tag_main_idcode(struct Main *mainvar, const short type, const short tag);
+void tag_main_lb(struct ListBase *lb, const short tag);
+void tag_main(struct Main *mainvar, const short tag);
+
 void rename_id(struct ID *id, const char *name);
 void name_uiprefix_id(char *name, struct ID *id);
 void test_idbutton(char *name);

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c	2011-01-05 03:22:46 UTC (rev 34082)
+++ trunk/blender/source/blender/blenkernel/intern/library.c	2011-01-05 05:33:27 UTC (rev 34083)
@@ -1257,18 +1257,36 @@
 	}
 }
 
-void tag_main(struct Main *mainvar, int tag)
+void tag_main_lb(ListBase *lb, const short tag)
 {
+	ID *id;
+	if(tag) {
+		for(id= lb->first; id; id= id->next) {
+			id->flag |= LIB_DOIT;
+		}
+	}
+	else {
+		for(id= lb->first; id; id= id->next) {
+			id->flag &= ~LIB_DOIT;
+		}
+	}
+}
+
+void tag_main_idcode(struct Main *mainvar, const short type, const short tag)
+{
+	ListBase *lb= which_libbase(mainvar, type);
+
+	tag_main_lb(lb, tag);
+}
+
+void tag_main(struct Main *mainvar, const short tag)
+{
 	ListBase *lbarray[MAX_LIBARRAY];
-	ID *id;
 	int a;
 
 	a= set_listbasepointers(mainvar, lbarray);
 	while(a--) {
-		for(id= lbarray[a]->first; id; id= id->next) {
-			if(tag)	id->flag |= LIB_DOIT;
-			else	id->flag &= ~LIB_DOIT;
-		}
+		tag_main_lb(lbarray[a], tag);
 	}
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2011-01-05 03:22:46 UTC (rev 34082)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c	2011-01-05 05:33:27 UTC (rev 34083)
@@ -473,6 +473,35 @@
 	/* XXX python now has invalid pointer? */
 }
 
+/* tag functions, all the same */
+void rna_Main_cameras_tag(Main *bmain, int value) { tag_main_lb(&bmain->camera, value); }
+void rna_Main_scenes_tag(Main *bmain, int value) { tag_main_lb(&bmain->scene, value); }
+void rna_Main_objects_tag(Main *bmain, int value) { tag_main_lb(&bmain->object, value); }
+void rna_Main_materials_tag(Main *bmain, int value) { tag_main_lb(&bmain->mat, value); }
+void rna_Main_node_groups_tag(Main *bmain, int value) { tag_main_lb(&bmain->nodetree, value); }
+void rna_Main_meshes_tag(Main *bmain, int value) { tag_main_lb(&bmain->mesh, value); }
+void rna_Main_lamps_tag(Main *bmain, int value) { tag_main_lb(&bmain->lamp, value); }
+void rna_Main_libraries_tag(Main *bmain, int value) { tag_main_lb(&bmain->library, value); }
+void rna_Main_screens_tag(Main *bmain, int value) { tag_main_lb(&bmain->screen, value); }
+void rna_Main_window_managers_tag(Main *bmain, int value) { tag_main_lb(&bmain->wm, value); }
+void rna_Main_images_tag(Main *bmain, int value) { tag_main_lb(&bmain->image, value); }
+void rna_Main_lattices_tag(Main *bmain, int value) { tag_main_lb(&bmain->latt, value); }
+void rna_Main_curves_tag(Main *bmain, int value) { tag_main_lb(&bmain->curve, value); }
+void rna_Main_metaballs_tag(Main *bmain, int value) { tag_main_lb(&bmain->mball, value); }
+void rna_Main_fonts_tag(Main *bmain, int value) { tag_main_lb(&bmain->vfont, value); }
+void rna_Main_textures_tag(Main *bmain, int value) { tag_main_lb(&bmain->tex, value); }
+void rna_Main_brushes_tag(Main *bmain, int value) { tag_main_lb(&bmain->brush, value); }
+void rna_Main_worlds_tag(Main *bmain, int value) { tag_main_lb(&bmain->world, value); }

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list