[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20757] branches/soc-2009-kazanbas/source/ blender: Added two RNA struct functions - merely wrappers around the C api.

Chingiz Dyussenov chingiz.ds at gmail.com
Tue Jun 9 16:53:22 CEST 2009


Revision: 20757
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20757
Author:   chingachgook
Date:     2009-06-09 16:53:19 +0200 (Tue, 09 Jun 2009)

Log Message:
-----------
Added two RNA struct functions - merely wrappers around the C api.

- add_mesh to Main - calls C add_mesh and returns a new mesh
- copy to Mesh - calls C copy_mesh and returns a new copy

Not sure about function placement and naming though.
Put both functions in editmesh.c, mesh editor module. Added prototypes 
to rna_internal.h. Prefixed both with "RNA_api_".

Wanted to code Mesh.copy so that it copies Mesh data from another object 
instead of creating a new Mesh, but this needs CustomData manipulations 
which I should study later.

Maybe we need a separate file for API functions? e.g. mesh_api.c?

Modified Paths:
--------------
    branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_main.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c

Modified: branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c	2009-06-09 13:51:32 UTC (rev 20756)
+++ branches/soc-2009-kazanbas/source/blender/editors/mesh/editmesh.c	2009-06-09 14:53:19 UTC (rev 20757)
@@ -2027,3 +2027,51 @@
 		vc->em= me->edit_mesh;
 	}
 }
+
+/* Python API */
+Mesh *RNA_api_add_mesh(Main *main, char *name)
+{
+	return add_mesh(name);
+}
+
+Mesh *RNA_api_mesh_copy(Mesh *me)
+{
+	return copy_mesh(me);
+}
+
+/*
+void RNA_api_mesh_copy_(Mesh *me, Object *ob, int apply_transform)
+{
+	if (ob->type != OB_MESH) {
+		return;
+	}
+
+	Mesh *src= (Mesh*)ob->data;
+
+	CustomData_free(&me->vdata, me->totvert);
+	CustomData_free(&me->edata, me->totedge);
+	CustomData_free(&me->fdata, me->totface);
+
+	CustomData_copy(&src->vdata, &me->vdata, CD_MASK_MESH, CD_DUPLICATE, me->totvert);
+	CustomData_copy(&src->edata, &me->edata, CD_MASK_MESH, CD_DUPLICATE, me->totedge);
+	CustomData_copy(&src->fdata, &me->fdata, CD_MASK_MESH, CD_DUPLICATE, me->totface);
+	mesh_update_customdata_pointers(me);
+
+	// ensure indirect linked data becomes lib-extern
+	for(i=0; i<src->fdata.totlayer; i++) {
+		if(src->fdata.layers[i].type == CD_MTFACE) {
+			tface= (MTFace*)src->fdata.layers[i].data;
+
+			for(a=0; a<src->totface; a++, tface++)
+				if(tface->tpage)
+					id_lib_extern((ID*)tface->tpage);
+		}
+	}
+	
+	me->mselect= NULL;
+	me->bb= src->bb;
+
+	//men->key= copy_key(me->key);
+	//if(men->key) men->key->from= (ID *)men;
+}
+*/

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h	2009-06-09 13:51:32 UTC (rev 20756)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal.h	2009-06-09 14:53:19 UTC (rev 20757)
@@ -189,6 +189,8 @@
 /* API functions */
 
 void RNA_api_ui_layout(struct StructRNA *srna);
+struct Mesh *RNA_api_add_mesh(struct Main *main, char *name);
+struct Mesh *RNA_api_mesh_copy(struct Mesh *me);
 
 /* ID Properties */
 

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_main.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_main.c	2009-06-09 13:51:32 UTC (rev 20756)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_main.c	2009-06-09 14:53:19 UTC (rev 20757)
@@ -218,6 +218,8 @@
 {
 	StructRNA *srna;
 	PropertyRNA *prop;
+	FunctionRNA *func;
+
 	const char *lists[][5]= {
 		{"cameras", "Camera", "rna_Main_camera_begin", "Cameras", "Camera datablocks."},
 		{"scenes", "Scene", "rna_Main_scene_begin", "Scenes", "Scene datablocks."},
@@ -265,6 +267,13 @@
 		RNA_def_property_collection_funcs(prop, lists[i][2], "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
 		RNA_def_property_ui_text(prop, lists[i][3], lists[i][4]);
 	}
+
+	func= RNA_def_function(srna, "add_mesh", "RNA_api_add_mesh");
+	RNA_def_function_ui_description(func, "Add a new mesh.");
+	prop= RNA_def_string(func, "name", "", 0, "", "New name for the datablock.");
+	RNA_def_property_flag(prop, PROP_REQUIRED);
+	prop= RNA_def_pointer(func, "mesh", "Mesh", "", "A new mesh.");
+	RNA_def_function_return(func, prop);
 }
 
 #endif

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c	2009-06-09 13:51:32 UTC (rev 20756)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c	2009-06-09 14:53:19 UTC (rev 20757)
@@ -1044,6 +1044,7 @@
 {
 	StructRNA *srna;
 	PropertyRNA *prop;
+	FunctionRNA *func;
 
 	srna= RNA_def_struct(brna, "Mesh", "ID");
 	RNA_def_struct_ui_text(srna, "Mesh", "Mesh datablock to define geometric surfaces.");
@@ -1126,6 +1127,11 @@
 	RNA_def_property_ui_text(prop, "Shape Keys", "");
 
 	rna_def_texmat_common(srna, "rna_Mesh_texspace_editable");
+
+	func= RNA_def_function(srna, "copy", "RNA_api_mesh_copy");
+	RNA_def_function_ui_description(func, "Create a copy of this mesh.");
+	prop= RNA_def_pointer(func, "mesh", "Mesh", "", "A new mesh.");
+	RNA_def_function_return(func, prop);
 }
 
 void RNA_def_mesh(BlenderRNA *brna)





More information about the Bf-blender-cvs mailing list