Manual merge of soc-2009-kazanbas branch:
[blender.git] / source / blender / makesrna / intern / rna_mesh.c
index efd0046..cfc1e01 100644 (file)
@@ -423,14 +423,11 @@ static int rna_CustomDataData_numverts(PointerRNA *ptr, int type)
     return 0;
 }
 
-static int rna_MeshTextureFace_uv_get_length(PointerRNA *ptr)
+static int rna_MeshTextureFace_uv_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
 {
-    return rna_CustomDataData_numverts(ptr, CD_MTFACE) * 2;
-}
-
-static int rna_MeshTextureFace_uv_set_length(PointerRNA *ptr, int length)
-{
-    return length == rna_MeshTextureFace_uv_get_length(ptr);
+       length[0]= rna_CustomDataData_numverts(ptr, CD_MTFACE);
+       length[1]= 2;
+    return length[0]*length[1];
 }
 
 static void rna_MeshTextureFace_uv_get(PointerRNA *ptr, float *values)
@@ -711,35 +708,22 @@ static void rna_TextureFace_image_set(PointerRNA *ptr, PointerRNA value)
        tf->tpage= (struct Image*)id;
 }
 
-static int rna_MeshFace_verts_get_length(PointerRNA *ptr)
+static int rna_MeshFace_verts_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
 {
        MFace *face= (MFace*)ptr->data;
+
        if(face)
-               return face->v4 ? 4 : 3;
+               length[0]= (face->v4)? 4: 3;
        else
-               return 4; // XXX rna_raw_access wants the length of a dummy face. this needs fixing. - Campbell
-}
+               length[0]= 4; // XXX rna_raw_access wants the length of a dummy face. this needs fixing. - Campbell
 
-static int rna_MeshFace_verts_set_length(PointerRNA *ptr, int length)
-{
-       MFace *face= (MFace*)ptr->data;
-       if (length == 3) {
-               face->v4= 0;
-       }
-       else if(length == 4) {
-               face->v4= 1;
-       }
-       else
-               return 0;
-       
-       return 1;
+       return length[0];
 }
 
 static void rna_MeshFace_verts_get(PointerRNA *ptr, int *values)
 {
        MFace *face= (MFace*)ptr->data;
-       int verts[4] = {face->v1, face->v2, face->v3, face->v4};
-       memcpy(values, verts, (face->v4 ? 4 : 3) * sizeof(int));
+       memcpy(values, &face->v1, (face->v4 ? 4 : 3) * sizeof(int));
 }
 
 static void rna_MeshFace_verts_set(PointerRNA *ptr, const int *values)
@@ -969,6 +953,16 @@ static void rna_def_medge(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SHARP);
        RNA_def_property_ui_text(prop, "Sharp", "Sharp edge for the EdgeSplit modifier");
        RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+       prop= RNA_def_property(srna, "loose", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_LOOSEEDGE);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Loose", "Loose edge");
+
+       prop= RNA_def_property(srna, "fgon", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FGON);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Fgon", "Fgon edge");
 }
 
 static void rna_def_mface(BlenderRNA *brna)
@@ -982,20 +976,15 @@ static void rna_def_mface(BlenderRNA *brna)
        RNA_def_struct_path_func(srna, "rna_MeshFace_path");
        RNA_def_struct_ui_icon(srna, ICON_FACESEL);
 
-       /*
        // XXX allows creating invalid meshes
        prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_sdna(prop, NULL, "v1");
        RNA_def_property_array(prop, 4);
-       RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
-       */
-
-       // XXX allows creating invalid meshes
-       prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
-       RNA_def_property_array(prop, 4);
+       /*
        RNA_def_property_flag(prop, PROP_DYNAMIC);
-       RNA_def_property_dynamic_array_funcs(prop, "rna_MeshFace_verts_get_length", "rna_MeshFace_verts_set_length");
+       RNA_def_property_dynamic_array_funcs(prop, "rna_MeshFace_verts_get_length");
        RNA_def_property_int_funcs(prop, "rna_MeshFace_verts_get", "rna_MeshFace_verts_set", NULL);
+       */
        RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
 
        prop= RNA_def_property(srna, "material_index", PROP_INT, PROP_UNSIGNED);
@@ -1037,7 +1026,7 @@ static void rna_def_mtface(BlenderRNA *brna)
                {TF_ALPHA, "ALPHA", 0, "Alpha", "Render polygon transparent, depending on alpha channel of the texture"},
                {TF_CLIP, "CLIPALPHA", 0, "Clip Alpha", "Use the images alpha values clipped with no blending (binary alpha)"},
                {0, NULL, 0, NULL, NULL}};
-       unsigned short uv_dim[1]= {2};
+       int uv_dim[]= {4, 2};
 
        srna= RNA_def_struct(brna, "MeshTextureFaceLayer", NULL);
        RNA_def_struct_ui_text(srna, "Mesh Texture Face Layer", "Layer of texture faces in a Mesh datablock.");
@@ -1183,9 +1172,9 @@ static void rna_def_mtface(BlenderRNA *brna)
        RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 
        prop= RNA_def_property(srna, "uv", PROP_FLOAT, PROP_NONE);
-       RNA_def_property_multidimensional_array(prop, 4 * 2, 2, uv_dim);
+       RNA_def_property_multi_array(prop, 2, uv_dim);
        RNA_def_property_flag(prop, PROP_DYNAMIC);
-       RNA_def_property_dynamic_array_funcs(prop, "rna_MeshTextureFace_uv_get_length", "rna_MeshTextureFace_uv_set_length");
+       RNA_def_property_dynamic_array_funcs(prop, "rna_MeshTextureFace_uv_get_length");
        RNA_def_property_float_funcs(prop, "rna_MeshTextureFace_uv_get", "rna_MeshTextureFace_uv_set", NULL);
        RNA_def_property_ui_text(prop, "UV", "");
        RNA_def_property_update(prop, 0, "rna_Mesh_update_data");