From 0a7ed17099c6249b8f6d90e210fd75270e25ad15 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 4 Apr 2016 17:47:55 +1000 Subject: Fix curve adding 3D nurbs when 2D is set Ctrl-LMB ignored 2D constraint --- source/blender/editors/curve/editcurve.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 1b588e3baed..77fc7a83256 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -4767,7 +4767,7 @@ static bool ed_editcurve_extrude(Curve *cu, EditNurb *editnurb) /***************** add vertex operator **********************/ -static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float location[3]) +static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float location_init[3]) { Nurb *nu; @@ -4808,7 +4808,7 @@ static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float locat int i; mid_v3_v3v3(center, minmax[0], minmax[1]); - sub_v3_v3v3(ofs, location, center); + sub_v3_v3v3(ofs, location_init, center); if ((cu->flag & CU_3D) == 0) { ofs[2] = 0.0f; @@ -4846,6 +4846,14 @@ static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float locat changed = true; } else { + float location[3]; + + copy_v3_v3(location, location_init); + + if ((cu->flag & CU_3D) == 0) { + location[2] = 0.0f; + } + /* nothing selected: create a new curve */ nu = BKE_curve_nurb_active_get(cu); @@ -4863,6 +4871,10 @@ static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float locat nurb_new->orderu = 4; nurb_new->flag |= CU_SMOOTH; BKE_nurb_bezierPoints_add(nurb_new, 1); + + if ((cu->flag & CU_3D) == 0) { + nurb_new->flag |= CU_2D; + } } BLI_addtail(&editnurb->nurbs, nurb_new); @@ -4894,6 +4906,10 @@ static int ed_editcurve_addvert(Curve *cu, EditNurb *editnurb, const float locat nurb_new->flag |= CU_SMOOTH; nurb_new->orderu = 4; BKE_nurb_points_add(nurb_new, 1); + + if ((cu->flag & CU_3D) == 0) { + nurb_new->flag |= CU_2D; + } } BLI_addtail(&editnurb->nurbs, nurb_new); -- cgit v1.2.3