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)


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to