[Bf-blender-cvs] [18729aff270] master: Merge branch 'blender-v2.91-release'

Campbell Barton noreply at git.blender.org
Wed Nov 4 05:48:38 CET 2020


Commit: 18729aff27025b069817e3f5935190678f7daa45
Author: Campbell Barton
Date:   Wed Nov 4 15:47:06 2020 +1100
Branches: master
https://developer.blender.org/rB18729aff27025b069817e3f5935190678f7daa45

Merge branch 'blender-v2.91-release'

===================================================================



===================================================================

diff --cc source/blender/blenkernel/intern/curve.c
index f275299d8f1,b2ebb56d828..af1784b30f8
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@@ -2965,79 -2989,77 +2965,77 @@@ void BKE_curve_bevelList_make(Object *o
    }
  
    /* STEP 2: DOUBLE POINTS AND AUTOMATIC RESOLUTION, REDUCE DATABLOCKS */
 -  bl = bev->first;
 -  while (bl) {
 -    if (bl->nr) { /* null bevel items come from single points */
 -      /* Scale the threshold so high resolution shapes don't get over reduced, see: T49850. */
 -      const float threshold_resolu = 0.00001f / resolu;
 -      bool is_cyclic = bl->poly != -1;
 -      nr = bl->nr;
 -      if (is_cyclic) {
 -        bevp1 = bl->bevpoints;
 -        bevp0 = bevp1 + (nr - 1);
 +  LISTBASE_FOREACH (BevList *, bl, bev) {
 +    if (bl->nr == 0) { /* null bevel items come from single points */
 +      continue;
 +    }
 +
++    /* Scale the threshold so high resolution shapes don't get over reduced, see: T49850. */
++    const float threshold_resolu = 0.00001f / resolu;
 +    bool is_cyclic = bl->poly != -1;
 +    nr = bl->nr;
 +    if (is_cyclic) {
 +      bevp1 = bl->bevpoints;
 +      bevp0 = bevp1 + (nr - 1);
 +    }
 +    else {
 +      bevp0 = bl->bevpoints;
 +      bevp0->offset = 0;
 +      bevp1 = bevp0 + 1;
 +    }
 +    nr--;
 +    while (nr--) {
 +      if (seglen != NULL) {
 +        if (fabsf(bevp1->offset) < treshold) {
 +          bevp0->dupe_tag = true;
 +          bl->dupe_nr++;
 +        }
        }
        else {
-         if (fabsf(bevp0->vec[0] - bevp1->vec[0]) < 0.00001f) {
-           if (fabsf(bevp0->vec[1] - bevp1->vec[1]) < 0.00001f) {
-             if (fabsf(bevp0->vec[2] - bevp1->vec[2]) < 0.00001f) {
-               bevp0->dupe_tag = true;
-               bl->dupe_nr++;
-             }
 -        bevp0 = bl->bevpoints;
 -        bevp0->offset = 0;
 -        bevp1 = bevp0 + 1;
 -      }
 -      nr--;
 -      while (nr--) {
 -        if (seglen != NULL) {
 -          if (fabsf(bevp1->offset) < treshold) {
 -            bevp0->dupe_tag = true;
 -            bl->dupe_nr++;
 -          }
 -        }
 -        else {
 -          if (compare_v3v3(bevp0->vec, bevp1->vec, threshold_resolu)) {
 -            bevp0->dupe_tag = true;
 -            bl->dupe_nr++;
--          }
++        if (compare_v3v3(bevp0->vec, bevp1->vec, threshold_resolu)) {
++          bevp0->dupe_tag = true;
++          bl->dupe_nr++;
          }
 -        bevp0 = bevp1;
 -        bevp1++;
        }
 +      bevp0 = bevp1;
 +      bevp1++;
      }
 -    bl = bl->next;
    }
 -  bl = bev->first;
 -  while (bl) {
 -    blnext = bl->next;
 -    if (bl->nr && bl->dupe_nr) {
 -      nr = bl->nr - bl->dupe_nr + 1; /* +1 because vectorbezier sets flag too */
 -      blnew = MEM_mallocN(sizeof(BevList), "makeBevelList4");
 -      memcpy(blnew, bl, sizeof(BevList));
 -      blnew->bevpoints = MEM_calloc_arrayN(nr, sizeof(BevPoint), "makeBevelPoints4");
 -      if (!blnew->bevpoints) {
 -        MEM_freeN(blnew);
 -        break;
 -      }
 -      blnew->segbevcount = bl->segbevcount;
 -      blnew->seglen = bl->seglen;
 -      blnew->nr = 0;
 -      BLI_remlink(bev, bl);
 -      BLI_insertlinkbefore(bev, blnext, blnew); /* to make sure bevlijst is tuned with nurblist */
 -      bevp0 = bl->bevpoints;
 -      bevp1 = blnew->bevpoints;
 -      nr = bl->nr;
 -      while (nr--) {
 -        if (bevp0->dupe_tag == 0) {
 -          memcpy(bevp1, bevp0, sizeof(BevPoint));
 -          bevp1++;
 -          blnew->nr++;
 -        }
 -        bevp0++;
 -      }
 -      if (bl->bevpoints != NULL) {
 -        MEM_freeN(bl->bevpoints);
 +
 +  LISTBASE_FOREACH_MUTABLE (BevList *, bl, bev) {
 +    if (bl->nr == 0 || bl->dupe_nr == 0) {
 +      continue;
 +    }
 +
 +    nr = bl->nr - bl->dupe_nr + 1; /* +1 because vectorbezier sets flag too */
 +    blnew = MEM_mallocN(sizeof(BevList), "makeBevelList4");
 +    memcpy(blnew, bl, sizeof(BevList));
 +    blnew->bevpoints = MEM_calloc_arrayN(nr, sizeof(BevPoint), "makeBevelPoints4");
 +    if (!blnew->bevpoints) {
 +      MEM_freeN(blnew);
 +      break;
 +    }
 +    blnew->segbevcount = bl->segbevcount;
 +    blnew->seglen = bl->seglen;
 +    blnew->nr = 0;
 +    BLI_remlink(bev, bl);
 +    BLI_insertlinkbefore(bev, bl->next, blnew); /* to make sure bevlist is tuned with nurblist */
 +    bevp0 = bl->bevpoints;
 +    bevp1 = blnew->bevpoints;
 +    nr = bl->nr;
 +    while (nr--) {
 +      if (bevp0->dupe_tag == 0) {
 +        memcpy(bevp1, bevp0, sizeof(BevPoint));
 +        bevp1++;
 +        blnew->nr++;
        }
 -      MEM_freeN(bl);
 -      blnew->dupe_nr = 0;
 +      bevp0++;
 +    }
 +    if (bl->bevpoints != NULL) {
 +      MEM_freeN(bl->bevpoints);
      }
 -    bl = blnext;
 +    MEM_freeN(bl);
 +    blnew->dupe_nr = 0;
    }
  
    /* STEP 3: POLYS COUNT AND AUTOHOLE */



More information about the Bf-blender-cvs mailing list