[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