From 4532b0ba2aa2cf1bd85cb11814748fe3aca4e5bd Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 23 Mar 2010 22:09:33 +0000 Subject: [PATCH] Fixed disappearing of NURBS surface when it's created from to joined nurbs curves. --- source/blender/editors/curve/editcurve.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index b477a1ee71a..993842d34f6 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -2835,6 +2835,10 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu if( is_u_selected(nu1, nu1->pntsu-1) ); else { + /* For 2D curves blender uses orderv=0. It doesn't make any sense mathematically. */ + /* but after rotating orderu=0 will be confusing. */ + if (nu1->orderv == 0) nu1->orderv= 1; + rotate_direction_nurb(nu1); if( is_u_selected(nu1, nu1->pntsu-1) ); else { @@ -2855,6 +2859,7 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu /* 2nd nurbs: u = 0 selected */ if( is_u_selected(nu2, 0) ); else { + if (nu2->orderv == 0) nu2->orderv= 1; rotate_direction_nurb(nu2); if( is_u_selected(nu2, 0) ); else { @@ -2900,8 +2905,8 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu /* merge */ origu= nu1->pntsu; nu1->pntsu+= nu2->pntsu; - if(nu1->orderu<3) nu1->orderu++; - if(nu1->orderv<3) nu1->orderv++; + if(nu1->orderu<3 && nu1->orderupntsu) nu1->orderu++; + if(nu1->orderv<3 && nu1->ordervpntsv) nu1->orderv++; temp= nu1->bp; nu1->bp= MEM_mallocN(nu1->pntsu*nu1->pntsv*sizeof(BPoint), "mergeBP"); @@ -2976,7 +2981,7 @@ static int merge_nurb(bContext *C, wmOperator *op) BLI_freelistN(&nsortbase); return OPERATOR_CANCELLED; } - + while(nus2) { merge_2_nurb(op, editnurb, nus1->nu, nus2->nu); nus2= nus2->next;