Merging r46111 through r46136 from trunk into soc-2011-tomato
[blender-staging.git] / source / blender / makesrna / intern / rna_object_api.c
index 69b948e17a1e5fd6881a72a59e6851366fa07f92..cb0f1d307aa8733b32466a92f1b0bc452547db1c 100644 (file)
 #include "DNA_object_types.h"
 #include "DNA_modifier_types.h"
 
-/* #include "BLO_sys_types.h"  *//* needed for intptr_t used in ED_mesh.h */
-
-/* #include "ED_mesh.h" */
-
-
 #ifdef RNA_RUNTIME
 #include "BLI_math.h"
 
@@ -101,7 +96,7 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
                        object_free_modifiers(tmpobj);
 
                /* copies the data */
-               copycu = tmpobj->data = copy_curve( (Curve *) ob->data );
+               copycu = tmpobj->data = BKE_curve_copy((Curve *) ob->data );
 
                /* temporarily set edit so we get updates from edit mode, but
                 * also because for text datablocks copying it while in edit
@@ -110,26 +105,26 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
                copycu->editnurb = tmpcu->editnurb;
 
                /* get updated display list, and convert to a mesh */
-               makeDispListCurveTypes( sce, tmpobj, 0 );
+               makeDispListCurveTypes(sce, tmpobj, 0);
 
                copycu->editfont = NULL;
                copycu->editnurb = NULL;
 
-               nurbs_to_mesh( tmpobj );
+               nurbs_to_mesh(tmpobj);
 
                /* nurbs_to_mesh changes the type to a mesh, check it worked */
                if (tmpobj->type != OB_MESH) {
-                       free_libblock_us( &(G.main->object), tmpobj );
+                       free_libblock_us(&(G.main->object), tmpobj);
                        BKE_report(reports, RPT_ERROR, "cant convert curve to mesh. Does the curve have any segments?");
                        return NULL;
                }
                tmpmesh = tmpobj->data;
-               free_libblock_us( &G.main->object, tmpobj );
+               free_libblock_us(&G.main->object, tmpobj);
                break;
 
        case OB_MBALL: {
                /* metaballs don't have modifiers, so just convert to mesh */
-               Object *basis_ob = find_basis_mball(sce, ob);
+               Object *basis_ob = BKE_metaball_basis_find(sce, ob);
                /* todo, re-generatre for render-res */
                /* metaball_polygonize(scene, ob) */
 
@@ -155,7 +150,8 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
                        /* copies the data */
                        tmpmesh = copy_mesh( ob->data );
                /* if not getting the original caged mesh, get final derived mesh */
-               } else {
+               }
+               else {
                        /* Make a dummy mesh, saves copying */
                        DerivedMesh *dm;
                        /* CustomDataMask mask = CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL; */
@@ -368,7 +364,7 @@ static void rna_Mesh_assign_verts_to_group(Object *ob, bDeformGroup *group, int
        }
 
        if (assignmode != WEIGHT_REPLACE && assignmode != WEIGHT_ADD && assignmode != WEIGHT_SUBTRACT) {
-               BKE_report(reports, RPT_ERROR, "Bad assignment mode" );
+               BKE_report(reports, RPT_ERROR, "Bad assignment mode");
                return;
        }
 
@@ -388,6 +384,7 @@ static void rna_Mesh_assign_verts_to_group(Object *ob, bDeformGroup *group, int
 }
 #endif
 
+/* BMESH_TODO, return polygon index, not tessface */
 void rna_Object_ray_cast(Object *ob, ReportList *reports, float ray_start[3], float ray_end[3],
                          float r_location[3], float r_normal[3], int *index)
 {
@@ -479,6 +476,11 @@ int rna_Object_is_modified(Object *ob, Scene *scene, int settings)
        return object_is_modified(scene, ob) & settings;
 }
 
+int rna_Object_is_deform_modified(Object *ob, Scene *scene, int settings)
+{
+       return object_is_deform_modified(scene, ob) & settings;
+}
+
 #ifndef NDEBUG
 void rna_Object_dm_info(struct Object *ob, int type, char *result)
 {
@@ -647,6 +649,14 @@ void RNA_api_object(StructRNA *srna)
        parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
        RNA_def_function_return(func, parm);
 
+       func = RNA_def_function(srna, "is_deform_modified", "rna_Object_is_deform_modified");
+       RNA_def_function_ui_description(func, "Determine if this object is modified by a deformation from the base mesh data");
+       parm = RNA_def_pointer(func, "scene", "Scene", "", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+       parm = RNA_def_enum(func, "settings", mesh_type_items, 0, "", "Modifier settings to apply");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm = RNA_def_boolean(func, "result", 0, "", "Object visibility");
+       RNA_def_function_return(func, parm);
 
 #ifndef NDEBUG
        /* mesh */