svn merge ^/trunk/blender -r43530:43554
authorCampbell Barton <ideasman42@gmail.com>
Fri, 20 Jan 2012 12:34:00 +0000 (12:34 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 20 Jan 2012 12:34:00 +0000 (12:34 +0000)
1  2 
release/scripts/startup/bl_ui/properties_data_modifier.py
source/blender/blenkernel/intern/subsurf_ccg.c
source/blender/editors/include/ED_mesh.h
source/blender/editors/mesh/mesh_data.c
source/blender/editors/object/object_bake.c
source/blender/editors/uvedit/uvedit_smart_stitch.c
source/blender/makesrna/intern/rna_mesh.c
source/blenderplayer/bad_level_call_stubs/stubs.c

@@@ -342,9 -328,9 +348,9 @@@ static void set_subsurf_uv(CCGSubSurf *
                return;
  
        /* create a CCGSubSurf from uv's */
-       uvss = _getSubSurf(NULL, ccgSubSurf_getSubdivisionLevels(ss), 0, 1, 0);
+       uvss = _getSubSurf(NULL, ccgSubSurf_getSubdivisionLevels(ss), CCG_USE_ARENA);
  
 -      if(!ss_sync_from_uv(uvss, ss, dm, dmtface)) {
 +      if(!ss_sync_from_uv(uvss, ss, dm, dmloopuv)) {
                ccgSubSurf_free(uvss);
                return;
        }
@@@ -3245,10 -2779,10 +3251,10 @@@ struct DerivedMesh *subsurf_make_derive
                                                int isFinalCalc, int forEditMode, int inEditMode)
  {
        int useSimple = smd->subdivType == ME_SIMPLE_SUBSURF;
-       int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr;
+       CCGFlags useAging = smd->flags & eSubsurfModifierFlag_DebugIncr ? CCG_USE_AGING : 0;
        int useSubsurfUv = smd->flags & eSubsurfModifierFlag_SubsurfUv;
        int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges);
 -      CCGDerivedMesh *result;
 +      CCGDerivedMesh *result = NULL;
  
        if(forEditMode) {
                int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels;
  
                result->freeSS = 1;
        } else {
 -              int useIncremental = (smd->flags & eSubsurfModifierFlag_Incremental);
 +              int useIncremental = 1; //(smd->flags & eSubsurfModifierFlag_Incremental);
-               int useAging = smd->flags & eSubsurfModifierFlag_DebugIncr;
                int levels= (smd->modifier.scene)? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels): smd->levels;
                CCGSubSurf *ss;
  
                }
  
                if(useIncremental && isFinalCalc) {
-                       smd->mCache = ss = _getSubSurf(smd->mCache, levels,
-                                                                                  useAging, 0, useSimple);
+                       smd->mCache = ss = _getSubSurf(smd->mCache, levels, useAging);
  
 -                      ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple);
 +                      if (!ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple)) {
 +                              //ccgSubSurf_free(smd->mCache);
-                               smd->mCache = ss = _getSubSurf(NULL, levels,
-                                                                                          useAging, 0, useSimple);
++                              smd->mCache = ss = _getSubSurf(NULL, levels, useAging);
 +                              
 +                              ss_sync_from_derivedmesh(ss, dm, vertCos, useSimple);
 +      
 +                      }
  
                        result = getCCGDerivedMesh(smd->mCache,
                                                                           drawInteriorEdges,
@@@ -286,12 -231,14 +286,16 @@@ struct BMFace *EDBM_findnearestface(str
  
  /* mesh_data.c */
  // void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
 +void ED_mesh_polys_add(struct Mesh *mesh, struct ReportList *reports, int count);
  void ED_mesh_faces_add(struct Mesh *mesh, struct ReportList *reports, int count);
  void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count);
 +void ED_mesh_loops_add(struct Mesh *mesh, struct ReportList *reports, int count);
  void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count);
  
+ void ED_mesh_faces_remove(struct Mesh *mesh, struct ReportList *reports, int count);
+ void ED_mesh_edges_remove(struct Mesh *mesh, struct ReportList *reports, int count);
+ void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int count);
  void ED_mesh_transform(struct Mesh *me, float *mat);
  void ED_mesh_calc_normals(struct Mesh *me);
  void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
@@@ -818,15 -624,15 +818,15 @@@ static void mesh_add_verts(Mesh *mesh, 
        mesh->totvert= totvert;
  }
  
- void ED_mesh_transform(Mesh *mesh, float *mat)
+ void ED_mesh_transform(Mesh *me, float *mat)
  {
        int i;
-       MVert *mvert= mesh->mvert;
+       MVert *mvert= me->mvert;
  
-       for(i= 0; i < mesh->totvert; i++, mvert++)
+       for(i= 0; i < me->totvert; i++, mvert++)
                mul_m4_v3((float (*)[4])mat, mvert->co);
  
-       mesh_calc_normals_mapping(mesh->mvert, mesh->totvert, mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly, NULL, NULL, 0, NULL, NULL);
 -      mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
++      mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
  }
  
  static void mesh_add_edges(Mesh *mesh, int len)
@@@ -889,60 -695,46 +889,100 @@@ static void mesh_add_faces(Mesh *mesh, 
        mesh->totface= totface;
  }
  
 +static void mesh_add_loops(Mesh *mesh, int len)
 +{
 +      CustomData ldata;
 +      int totloop;
 +
 +      if(len == 0)
 +              return;
 +
 +      totloop= mesh->totloop + len;   /* new face count */
 +
 +      /* update customdata */
 +      CustomData_copy(&mesh->ldata, &ldata, CD_MASK_MESH, CD_DEFAULT, totloop);
 +      CustomData_copy_data(&mesh->ldata, &ldata, 0, 0, mesh->totloop);
 +
 +      if(!CustomData_has_layer(&ldata, CD_MLOOP))
 +              CustomData_add_layer(&ldata, CD_MLOOP, CD_CALLOC, NULL, totloop);
 +
 +      CustomData_free(&mesh->ldata, mesh->totloop);
 +      mesh->ldata= ldata;
 +      mesh_update_customdata_pointers(mesh, TRUE);
 +
 +      mesh->totloop= totloop;
 +}
 +
 +static void mesh_add_polys(Mesh *mesh, int len)
 +{
 +      CustomData pdata;
 +      MPoly *mpoly;
 +      int i, totpoly;
 +
 +      if(len == 0)
 +              return;
 +
 +      totpoly= mesh->totpoly + len;   /* new face count */
 +
 +      /* update customdata */
 +      CustomData_copy(&mesh->pdata, &pdata, CD_MASK_MESH, CD_DEFAULT, totpoly);
 +      CustomData_copy_data(&mesh->pdata, &pdata, 0, 0, mesh->totpoly);
 +
 +      if(!CustomData_has_layer(&pdata, CD_MPOLY))
 +              CustomData_add_layer(&pdata, CD_MPOLY, CD_CALLOC, NULL, totpoly);
 +
 +      CustomData_free(&mesh->pdata, mesh->totpoly);
 +      mesh->pdata= pdata;
 +      mesh_update_customdata_pointers(mesh, TRUE);
 +
 +      /* set default flags */
 +      mpoly= &mesh->mpoly[mesh->totpoly];
 +      for(i=0; i<len; i++, mpoly++)
 +              mpoly->flag= ME_FACE_SEL;
 +
 +      mesh->totpoly= totpoly;
 +}
 +
+ static void mesh_remove_verts(Mesh *mesh, int len)
+ {
+       int totvert;
+       if(len == 0)
+               return;
+       totvert= mesh->totvert - len;
+       CustomData_free_elem(&mesh->vdata, totvert, len);
+       /* set final vertex list size */
+       mesh->totvert= totvert;
+ }
+ static void mesh_remove_edges(Mesh *mesh, int len)
+ {
+       int totedge;
+       if(len == 0)
+               return;
+       totedge= mesh->totedge - len;
+       CustomData_free_elem(&mesh->edata, totedge, len);
+       mesh->totedge= totedge;
+ }
+ static void mesh_remove_faces(Mesh *mesh, int len)
+ {
+       int totface;
+       if(len == 0)
+               return;
+       totface= mesh->totface - len;   /* new face count */
+       CustomData_free_elem(&mesh->fdata, totface, len);
+       mesh->totface= totface;
+ }
  /*
  void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges, int faces)
  {
@@@ -990,27 -782,49 +1030,69 @@@ void ED_mesh_vertices_add(Mesh *mesh, R
        mesh_add_verts(mesh, count);
  }
  
 -      if(mesh->edit_mesh) {
+ void ED_mesh_faces_remove(Mesh *mesh, ReportList *reports, int count)
+ {
 -      if(mesh->edit_mesh) {
++      if(mesh->edit_btmesh) {
+               BKE_report(reports, RPT_ERROR, "Can't remove faces in edit mode");
+               return;
+       }
+       else if(count > mesh->totface) {
+               BKE_report(reports, RPT_ERROR, "Can't remove more faces than the mesh contains");
+               return;
+       }
+       mesh_remove_faces(mesh, count);
+ }
+ void ED_mesh_edges_remove(Mesh *mesh, ReportList *reports, int count)
+ {
 -      if(mesh->edit_mesh) {
++      if(mesh->edit_btmesh) {
+               BKE_report(reports, RPT_ERROR, "Can't remove edges in edit mode");
+               return;
+       }
+       else if(count > mesh->totedge) {
+               BKE_report(reports, RPT_ERROR, "Can't remove more edges than the mesh contains");
+               return;
+       }
+       mesh_remove_edges(mesh, count);
+ }
+ void ED_mesh_vertices_remove(Mesh *mesh, ReportList *reports, int count)
+ {
 -void ED_mesh_calc_normals(Mesh *me)
++      if(mesh->edit_btmesh) {
+               BKE_report(reports, RPT_ERROR, "Can't remove vertices in edit mode");
+               return;
+       }
+       else if(count > mesh->totvert) {
+               BKE_report(reports, RPT_ERROR, "Can't remove more vertices than the mesh contains");
+               return;
+       }
+       mesh_remove_verts(mesh, count);
+ }
 +void ED_mesh_loops_add(Mesh *mesh, ReportList *reports, int count)
 +{
 +      if(mesh->edit_btmesh) {
 +              BKE_report(reports, RPT_ERROR, "Can't add loops in edit mode.");
 +                      return;
 +      }
 +
 +      mesh_add_loops(mesh, count);
 +}
 +
 +void ED_mesh_polys_add(Mesh *mesh, ReportList *reports, int count)
 +{
 +      if(mesh->edit_btmesh) {
 +              BKE_report(reports, RPT_ERROR, "Can't add polys in edit mode.");
 +              return;
 +      }
 +
 +      mesh_add_polys(mesh, count);
 +}
 +
 +void ED_mesh_calc_normals(Mesh *mesh)
  {
 -      mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
 +      mesh_calc_normals_mapping(mesh->mvert, mesh->totvert, mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly, NULL, NULL, 0, NULL, NULL);
  }
@@@ -2008,42 -1746,25 +2016,46 @@@ static void rna_def_mesh_faces(BlenderR
        RNA_def_property_int_sdna(prop, NULL, "act_face");
        RNA_def_property_ui_text(prop, "Active Face", "The active face for this mesh");
  
 -      prop= RNA_def_property(srna, "active_tface", PROP_POINTER, PROP_UNSIGNED);
 -      RNA_def_property_struct_type(prop, "MeshTextureFace");
 -      RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_mtface_get", NULL, NULL, NULL);
 -      RNA_def_property_ui_text(prop, "Active UV Map Face", "Active UV Map Face");
 -      RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 -
        func= RNA_def_function(srna, "add", "ED_mesh_faces_add");
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
-       parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add", 0, INT_MAX);
+       RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of faces to add", 0, INT_MAX);
+       func= RNA_def_function(srna, "remove", "ED_mesh_faces_remove");
+       RNA_def_function_flag(func, FUNC_USE_REPORTS);
+       RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of faces to remove", 0, INT_MAX);
  }
  
 -/* mesh.vertex_colors */
 -static void rna_def_vertex_colors(BlenderRNA *brna, PropertyRNA *cprop)
 +/* mesh.loops */
 +static void rna_def_mesh_loops(BlenderRNA *brna, PropertyRNA *cprop)
 +{
 +      StructRNA *srna;
 +
 +      /*PropertyRNA *prop;*/
 +
 +      FunctionRNA *func;
 +      /*PropertyRNA *parm;*/
 +
 +      RNA_def_property_srna(cprop, "MeshLoops");
 +      srna= RNA_def_struct(brna, "MeshLoops", NULL);
 +      RNA_def_struct_sdna(srna, "Mesh");
 +      RNA_def_struct_ui_text(srna, "Mesh Loops", "Collection of mesh loops");
 +
 +#if 0 // BMESH_TODO
 +      prop= RNA_def_property(srna, "active", PROP_INT, PROP_NONE);
 +      RNA_def_property_int_sdna(prop, NULL, "act_face");
 +      RNA_def_property_ui_text(prop, "Active Polygon", "The active polygon for this mesh");
 +#endif
 +
 +      func= RNA_def_function(srna, "add", "ED_mesh_loops_add");
 +      RNA_def_function_flag(func, FUNC_USE_REPORTS);
 +      RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of loops to add", 0, INT_MAX);
 +}
 +
 +/* mesh.polygons */
 +static void rna_def_mesh_polygons(BlenderRNA *brna, PropertyRNA *cprop)
  {
        StructRNA *srna;
 +
        PropertyRNA *prop;
  
        FunctionRNA *func;
@@@ -327,8 -297,9 +327,11 @@@ void ED_mesh_update(struct Mesh *mesh, 
  void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count){}
  void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count){}
  void ED_mesh_faces_add(struct Mesh *mesh, struct ReportList *reports, int count){}
 +void ED_mesh_loops_add(struct Mesh *mesh, struct ReportList *reports, int count){}
 +void ED_mesh_polys_add(struct Mesh *mesh, struct ReportList *reports, int count){}
+ void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int count){}
+ void ED_mesh_edges_remove(struct Mesh *mesh, struct ReportList *reports, int count){}
+ void ED_mesh_faces_remove(struct Mesh *mesh, struct ReportList *reports, int count){}
  void ED_mesh_material_link(struct Mesh *mesh, struct Material *ma){}
  int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me){return 0;}
  int ED_mesh_uv_texture_add(struct bContext *C, struct Mesh *me){return 0;}