Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-02-27 09:43:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-02-27 09:43:10 +0300
commit0b67c21077e0da675c25530ab2e2b3f359881169 (patch)
tree3169f81a0c58bcc3def873962cec8997806356e2 /source/blender/blenkernel/intern/displist.c
parent7293291a408aaf12e19e3a15782434ac37f4ffd1 (diff)
Fix T43807: invalid mesh from 2-sided cyclic curve
Diffstat (limited to 'source/blender/blenkernel/intern/displist.c')
-rw-r--r--source/blender/blenkernel/intern/displist.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 9ea5a5638b9..dd92a82bed2 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -351,7 +351,8 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase,
data = dl->verts;
- if (nu->flagu & CU_NURB_CYCLIC) {
+ /* check that (len != 2) so we don't immediately loop back on ourselves */
+ if (nu->flagu & CU_NURB_CYCLIC && (dl->nr != 2)) {
dl->type = DL_POLY;
a = nu->pntsu;
}
@@ -421,8 +422,12 @@ static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase,
dl->charidx = nu->charidx;
data = dl->verts;
- if (nu->flagu & CU_NURB_CYCLIC) dl->type = DL_POLY;
- else dl->type = DL_SEGM;
+ if ((nu->flagu & CU_NURB_CYCLIC) && (dl->nr != 2)) {
+ dl->type = DL_POLY;
+ }
+ else {
+ dl->type = DL_SEGM;
+ }
a = len;
bp = nu->bp;
@@ -1621,8 +1626,12 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba
dl->type = DL_SURF;
dl->flag = dlb->flag & (DL_FRONT_CURVE | DL_BACK_CURVE);
- if (dlb->type == DL_POLY) dl->flag |= DL_CYCL_U;
- if (bl->poly >= 0) dl->flag |= DL_CYCL_V;
+ if (dlb->type == DL_POLY) {
+ dl->flag |= DL_CYCL_U;
+ }
+ if ((bl->poly >= 0) && (steps != 2)) {
+ dl->flag |= DL_CYCL_V;
+ }
dl->parts = steps;
dl->nr = dlb->nr;