=bmesh= merge from trunk at r36529
[blender.git] / source / blender / editors / sculpt_paint / sculpt.c
index 7156b49c0264b49f1ff7b57f87eea86ad1b4829f..c8f63e871b4049861449c4eef898d7b16eacdd2b 100644 (file)
@@ -135,7 +135,7 @@ struct MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
        Mesh *me= (Mesh*)ob->data;
        ModifierData *md;
 
-       if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) {
+       if(!CustomData_get_layer(&me->ldata, CD_MDISPS)) {
                /* multires can't work without displacement layer */
                return NULL;
        }
@@ -231,6 +231,8 @@ typedef struct StrokeCache {
        float mouse[2];
        float bstrength;
        float tex_mouse[2];
+       
+       rctf prect;
 
        /* The rest is temporary storage that isn't saved as a property */
 
@@ -277,10 +279,20 @@ typedef struct StrokeCache {
 static int sculpt_get_redraw_rect(ARegion *ar, RegionView3D *rv3d,
                                Object *ob, rcti *rect)
 {
+       StrokeCache *cache = ob->sculpt->cache;
        PBVH *pbvh= ob->sculpt->pbvh;
        float bb_min[3], bb_max[3], pmat[4][4];
        int i, j, k;
 
+/*     if (G.rt == 1) {
+               rect->xmin = cache->prect.xmin;
+               rect->xmax = cache->prect.xmax;
+               rect->ymin = cache->prect.ymin;
+               rect->ymax = cache->prect.ymax;
+
+               return rect->xmin < rect->xmax && rect->ymin < rect->ymax;;
+       }
+*/
        view3d_get_object_project_mat(rv3d, ob, pmat);
 
        if(!pbvh)
@@ -335,6 +347,7 @@ void sculpt_get_redraw_planes(float planes[4][4], ARegion *ar,
        PBVH *pbvh= ob->sculpt->pbvh;
        BoundBox bb;
        bglMats mats;
+       StrokeCache *cache = ob->sculpt->cache;
        rcti rect;
 
        memset(&bb, 0, sizeof(BoundBox));
@@ -363,6 +376,13 @@ void sculpt_get_redraw_planes(float planes[4][4], ARegion *ar,
        /* clear redraw flag from nodes */
        if(pbvh)
                BLI_pbvh_update(pbvh, PBVH_UpdateRedraw, NULL);
+
+       /*clear prect*/
+       cache->prect.xmin = FLT_MAX;
+       cache->prect.xmax = -FLT_MAX;
+       cache->prect.ymin = FLT_MAX;
+       cache->prect.ymax = -FLT_MAX;
+
 }
 
 /************************ Brush Testing *******************/
@@ -2220,10 +2240,11 @@ static void do_scrape_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnod
 {
        SculptSession *ss = ob->sculpt;
        Brush *brush = paint_brush(&sd->paint);
+       rctf mr;
+       float xrad, yrad;
 
        float bstrength = ss->cache->bstrength;
        const float radius = ss->cache->radius;
-
        float an[3];
        float fc[3];
        float offset = get_offset(sd, ss);
@@ -2320,7 +2341,7 @@ void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
                for (a= 0; a < me->totvert; a++, mvert++)
                        VECCOPY(mvert->co, vertCos[a]);
 
-               mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+               mesh_calc_normals(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
        }
 
        /* apply new coords on active key block */
@@ -2553,7 +2574,7 @@ static void sculpt_flush_stroke_deform(Sculpt *sd, Object *ob)
                /* Modifiers could depend on mesh normals, so we should update them/
                   Note, then if sculpting happens on locked key, normals should be re-calculated
                   after applying coords from keyblock on base mesh */
-               mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+               mesh_calc_normals(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
        } else if (ss->kb)
                sculpt_update_keyblock(ob);
 }
@@ -2718,7 +2739,7 @@ void sculpt_update_mesh_elements(Scene *scene, Sculpt *sd, Object *ob, int need_
        if(mmd) {
                ss->multires = mmd;
                ss->totvert = dm->getNumVerts(dm);
-               ss->totface = dm->getNumFaces(dm);
+               ss->totface = dm->getNumTessFaces(dm);
                ss->mvert= NULL;
                ss->mface= NULL;
                ss->face_normals= NULL;
@@ -2928,6 +2949,11 @@ static void sculpt_update_cache_invariants(bContext* C, Sculpt *sd, SculptSessio
        int mode;
 
        ss->cache = cache;
+       
+       cache->prect.xmin = FLT_MAX;
+       cache->prect.xmax = -FLT_MAX;
+       cache->prect.ymin = FLT_MAX;
+       cache->prect.ymax = -FLT_MAX;
 
        /* Set scaling adjustment */
        ss->cache->scale[0] = 1.0f / ob->size[0];