[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31597] trunk/blender: rna api changes

Campbell Barton ideasman42 at gmail.com
Fri Aug 27 00:44:05 CEST 2010


Revision: 31597
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31597
Author:   campbellbarton
Date:     2010-08-27 00:44:05 +0200 (Fri, 27 Aug 2010)

Log Message:
-----------
rna api changes
- mesh.add_geometry(v, e, f)  --> mesh.vertices.add(tot), mesh.edges.add(tot), mesh.faces.add(tot)
- mesh.add_material(mat) --> mesh.materials.link(mat)

changed material.link so it always adds a material even if it exists in the list, this behavior is good for users but not scripts since it can mess up indicies (some formats may have the same material set twice).

Modified Paths:
--------------
    trunk/blender/release/scripts/io/import_scene_3ds.py
    trunk/blender/release/scripts/io/import_scene_obj.py
    trunk/blender/release/scripts/modules/bpy_types.py
    trunk/blender/release/scripts/op/add_mesh_torus.py
    trunk/blender/release/scripts/op/object.py
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/mesh_data.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh_api.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/io/import_scene_3ds.py
===================================================================
--- trunk/blender/release/scripts/io/import_scene_3ds.py	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/release/scripts/io/import_scene_3ds.py	2010-08-26 22:44:05 UTC (rev 31597)
@@ -334,7 +334,8 @@
         bmesh = bpy.data.meshes.new(contextObName)
         if myContextMesh_vertls:
 
-            bmesh.add_geometry(len(myContextMesh_vertls)//3, 0, len(myContextMesh_facels))
+            bmesh.vertices.add(len(myContextMesh_vertls)//3)
+            bmesh.faces.add(len(myContextMesh_facels))
             bmesh.vertices.foreach_set("co", myContextMesh_vertls)
             
             eekadoodle_faces = []
@@ -350,12 +351,13 @@
 
             for mat_idx, (matName, faces) in enumerate(myContextMeshMaterials.items()):
                 if matName is None:
-                    bmesh.add_material(None)
+                    bmat = None
                 else:
                     bmat = MATDICT[matName][1]
-                    bmesh.add_material(bmat) # can be None
                     img = TEXTURE_DICT.get(bmat.name)
-                
+
+                bmesh.materials.link(bmat) # can be None
+
                 if uv_faces  and img:
                     for fidx in faces:
                         bmesh.faces[fidx].material_index = mat_idx

Modified: trunk/blender/release/scripts/io/import_scene_obj.py
===================================================================
--- trunk/blender/release/scripts/io/import_scene_obj.py	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/release/scripts/io/import_scene_obj.py	2010-08-26 22:44:05 UTC (rev 31597)
@@ -673,10 +673,11 @@
 
     # make sure the list isnt too big
     for material in materials:
-        me.add_material(material)
+        me.materials.link(material)
     #me.vertices.extend([(0,0,0)]) # dummy vert
 
-    me.add_geometry(len(verts_loc), 0, len(faces))
+    me.vertices.add(len(verts_loc))
+    me.faces.add(len(faces))
 
     # verts_loc is a list of (x, y, z) tuples
     me.vertices.foreach_set("co", unpack_list(verts_loc))
@@ -768,7 +769,7 @@
 
     if CREATE_EDGES:
 
-        me.add_geometry(0, len(edges), 0)
+        me.edges.add(len(edges))
 
         # edges should be a list of (a, b) tuples
         me.edges.foreach_set("vertices", unpack_list(edges))

Modified: trunk/blender/release/scripts/modules/bpy_types.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_types.py	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/release/scripts/modules/bpy_types.py	2010-08-26 22:44:05 UTC (rev 31597)
@@ -306,7 +306,9 @@
         Make a mesh from a list of verts/edges/faces
         Until we have a nicer way to make geometry, use this.
         """
-        self.add_geometry(len(verts), len(edges), len(faces))
+        self.vertices.add(len(verts))
+        self.edges.add(len(edges))
+        self.faces.add(len(faces))
 
         verts_flat = [f for v in verts for f in v]
         self.vertices.foreach_set("co", verts_flat)
@@ -318,8 +320,11 @@
 
         def treat_face(f):
             if len(f) == 3:
-                return f[0], f[1], f[2], 0
-            elif f[3] == 0:
+                if f[2] == 0:
+                    return f[2], f[0], f[1], 0
+                else:
+                    return f[0], f[1], f[2], 0
+            elif f[2] == 0 or f[3] == 0:
                 return f[3], f[0], f[1], f[2]
             return f
 

Modified: trunk/blender/release/scripts/op/add_mesh_torus.py
===================================================================
--- trunk/blender/release/scripts/op/add_mesh_torus.py	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/release/scripts/op/add_mesh_torus.py	2010-08-26 22:44:05 UTC (rev 31597)
@@ -121,7 +121,9 @@
 
         mesh = bpy.data.meshes.new("Torus")
 
-        mesh.add_geometry(int(len(verts_loc) / 3), 0, int(len(faces) / 4))
+        mesh.vertices.add(len(verts_loc) // 3)
+        mesh.faces.add(len(faces) // 4)
+
         mesh.vertices.foreach_set("co", verts_loc)
         mesh.faces.foreach_set("vertices_raw", faces)
         mesh.update()

Modified: trunk/blender/release/scripts/op/object.py
===================================================================
--- trunk/blender/release/scripts/op/object.py	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/release/scripts/op/object.py	2010-08-26 22:44:05 UTC (rev 31597)
@@ -499,11 +499,13 @@
 
         for data, objects in linked.items():
             face_verts = [axis for obj in objects for v in matrix_to_quat(obj.matrix_world) for axis in v]
-            faces = list(range(int(len(face_verts) / 3)))
+            faces = list(range(len(face_verts) // 3))
 
             mesh = bpy.data.meshes.new(data.name + "_dupli")
 
-            mesh.add_geometry(int(len(face_verts) / 3), 0, int(len(face_verts) / (4 * 3)))
+            mesh.vertices.add(len(face_verts) // 3)
+            mesh.faces.add(len(face_verts) // 12)
+
             mesh.vertices.foreach_set("co", face_verts)
             mesh.faces.foreach_set("vertices_raw", faces)
             mesh.update() # generates edge data

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2010-08-26 22:44:05 UTC (rev 31597)
@@ -209,11 +209,14 @@
 short sharesFace(struct EditMesh *em, struct EditEdge *e1, struct EditEdge *e2);
 
 /* mesh_data.c */
+// void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
+void ED_mesh_faces_add(struct Mesh *mesh, struct ReportList *reports, int count);
+void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count);
+void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count);
 
-void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
 void ED_mesh_transform(struct Mesh *me, float *mat);
 void ED_mesh_calc_normals(struct Mesh *me);
-void ED_mesh_material_add(struct Mesh *me, struct Material *ma);
+void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
 void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges);
 
 int ED_mesh_uv_texture_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);

Modified: trunk/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_data.c	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/source/blender/editors/mesh/mesh_data.c	2010-08-26 22:44:05 UTC (rev 31597)
@@ -721,6 +721,7 @@
 	mesh->totface= totface;
 }
 
+/*
 void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges, int faces)
 {
 	if(mesh->edit_mesh) {
@@ -735,23 +736,50 @@
 	if(faces)
 		mesh_add_faces(mesh, faces);
 }
+*/
 
+void ED_mesh_faces_add(Mesh *mesh, ReportList *reports, int count)
+{
+	if(mesh->edit_mesh) {
+		BKE_report(reports, RPT_ERROR, "Can't add faces in edit mode.");
+		return;
+	}
+
+	mesh_add_faces(mesh, count);
+}
+
+void ED_mesh_edges_add(Mesh *mesh, ReportList *reports, int count)
+{
+	if(mesh->edit_mesh) {
+		BKE_report(reports, RPT_ERROR, "Can't add edges in edit mode.");
+		return;
+	}
+
+	mesh_add_edges(mesh, count);
+}
+
+void ED_mesh_vertices_add(Mesh *mesh, ReportList *reports, int count)
+{
+	if(mesh->edit_mesh) {
+		BKE_report(reports, RPT_ERROR, "Can't add vertices in edit mode.");
+		return;
+	}
+
+	mesh_add_verts(mesh, count);
+}
+
 void ED_mesh_calc_normals(Mesh *me)
 {
 	mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
 }
 
-void ED_mesh_material_add(Mesh *me, Material *ma)
+/* always adds the material even if its linked alredy
+ * for pradictable material indicies */
+void ED_mesh_material_link(Mesh *me, Material *ma)
 {
-	int i;
 	int totcol = me->totcol + 1;
 	Material **mat;
 
-	/* don't add if mesh already has it */
-	for(i = 0; i < me->totcol; i++)
-		if(me->mat[i] == ma)
-			return;
-
 	mat= MEM_callocN(sizeof(void*)*totcol, "newmatar");
 
 	if(me->totcol) memcpy(mat, me->mat, sizeof(void*) * me->totcol);

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2010-08-26 20:03:21 UTC (rev 31596)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2010-08-26 22:44:05 UTC (rev 31597)
@@ -1630,14 +1630,52 @@
 	RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 }
 
-/* scene.objects */
+/* mesh.vertices */
+static void rna_def_mesh_vertices(BlenderRNA *brna, PropertyRNA *cprop)
+{
+	StructRNA *srna;
+//	PropertyRNA *prop;
+
+	FunctionRNA *func;
+	PropertyRNA *parm;
+
+	RNA_def_property_srna(cprop, "MeshVertices");
+	srna= RNA_def_struct(brna, "MeshVertices", NULL);
+	RNA_def_struct_sdna(srna, "Mesh");
+	RNA_def_struct_ui_text(srna, "Mesh Vertices", "Collection of mesh vertices");
+
+	func= RNA_def_function(srna, "add", "ED_mesh_vertices_add");
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
+	parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add.", 0, INT_MAX);
+}
+
+/* mesh.edges */
+static void rna_def_mesh_edges(BlenderRNA *brna, PropertyRNA *cprop)
+{
+	StructRNA *srna;
+//	PropertyRNA *prop;
+
+	FunctionRNA *func;
+	PropertyRNA *parm;
+
+	RNA_def_property_srna(cprop, "MeshEdges");
+	srna= RNA_def_struct(brna, "MeshEdges", NULL);
+	RNA_def_struct_sdna(srna, "Mesh");
+	RNA_def_struct_ui_text(srna, "Mesh Edges", "Collection of mesh edges");
+
+	func= RNA_def_function(srna, "add", "ED_mesh_edges_add");
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
+	parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add.", 0, INT_MAX);
+}
+
+/* mesh.faces */
 static void rna_def_mesh_faces(BlenderRNA *brna, PropertyRNA *cprop)
 {
 	StructRNA *srna;
 	PropertyRNA *prop;
 
-//	FunctionRNA *func;
-//	PropertyRNA *parm;
+	FunctionRNA *func;
+	PropertyRNA *parm;
 
 	RNA_def_property_srna(cprop, "MeshFaces");
 	srna= RNA_def_struct(brna, "MeshFaces", NULL);
@@ -1653,9 +1691,12 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list