diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-07-25 15:57:36 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-07-25 15:57:36 +0400 |
commit | cc0f3146e798479be0758b5c152ef67ef42ea8dc (patch) | |
tree | 669704799ec2a83908777d1b0d9cc1517dfb871c /source/blender/makesrna | |
parent | 61a09d96b1c10decb732f77a50421101e43cf401 (diff) |
Shapekeys for curves/surfeces
Fix #21498: Edit curve Shape key /252_r 27318
Added full support of shape keys for curves and nurbs surfaces including
topology changing in edit mode, undo stuff, updating relative keys when
working under basis and so on.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_curve.c | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 394a17903e2..84807446f50 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -36,6 +36,9 @@ #include "WM_types.h" +#include "BKE_curve.h" +#include "ED_curve.h" + EnumPropertyItem beztriple_handle_type_items[] = { {HD_FREE, "FREE", 0, "Free", ""}, {HD_AUTO, "AUTO", 0, "Auto", ""}, @@ -71,6 +74,8 @@ EnumPropertyItem curve_type_items[] = { #include "MEM_guardedalloc.h" +#include "ED_curve.h" /* for BKE_curve_nurbs */ + static StructRNA *rna_Curve_refine(PointerRNA *ptr) { Curve *cu= (Curve*)ptr->data; @@ -193,7 +198,8 @@ static void rna_Curve_active_textbox_index_range(PointerRNA *ptr, int *min, int static void rna_Curve_dimension_set(PointerRNA *ptr, int value) { Curve *cu= (Curve*)ptr->id.data; - Nurb *nu= cu->editnurb ? cu->editnurb->first : cu->nurb.first; + ListBase *nurbs= BKE_curve_nurbs(cu); + Nurb *nu= nurbs->first; if(value==CU_3D) { cu->flag |= CU_3D; @@ -309,11 +315,9 @@ static void rna_Curve_taperObject_set(PointerRNA *ptr, PointerRNA value) static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu= (Curve*)ptr->id.data; - Nurb *nu=NULL; - - if (cu->editnurb) nu= cu->editnurb->first; - else nu=cu->nurb.first; - + ListBase *nurbs= BKE_curve_nurbs(cu); + Nurb *nu= nurbs->first; + while(nu) { nu->resolu= cu->resolu; nu= nu->next; @@ -325,16 +329,15 @@ static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, Pointe static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) { Curve *cu= (Curve*)ptr->id.data; - Nurb *nu=NULL; - - if (cu->editnurb) nu= cu->editnurb->first; - else nu=cu->nurb.first; - + ListBase *nurbs= BKE_curve_nurbs(cu); + Nurb *nu=nurbs->first; + + while(nu) { nu->resolv= cu->resolv; nu= nu->next; } - + rna_Curve_update_data(bmain, scene, ptr); } @@ -466,12 +469,9 @@ static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu) { /* todo, check we're in the list */ int found= 0; - if(cu->editnurb) { - found= BLI_remlink_safe(cu->editnurb, nu); - } - else { - found= BLI_remlink_safe(&cu->nurb, nu); - } + ListBase *nurbs= BKE_curve_nurbs(cu); + + found= BLI_remlink_safe(nurbs, nu); if(!found) { BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" does not contain spline given", cu->id.name+2); @@ -486,11 +486,10 @@ static PointerRNA rna_Curve_active_spline_get(PointerRNA *ptr) { Curve *cu= (Curve*)ptr->data; Nurb *nu; + ListBase *nurbs= BKE_curve_nurbs(cu); - if(cu->editnurb) - nu= BLI_findlink(cu->editnurb, cu->actnu); - else - nu= BLI_findlink(&cu->nurb, cu->actnu); // currently set to -1, should be changed to be allowed outside of editmode. + // for curve outside editmode will set to -1, should be changed to be allowed outside of editmode. + nu= BLI_findlink(nurbs, cu->actnu); if(nu) return rna_pointer_inherit_refine(ptr, &RNA_Spline, nu); @@ -502,14 +501,13 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr, PointerRNA value) { Curve *cu= (Curve*)ptr->data; Nurb *nu= value.data; + ListBase *nubase= BKE_curve_nurbs(cu); /* -1 is ok for an unset index */ if(nu==NULL) cu->actnu= -1; - else if(cu->editnurb) - cu->actnu= BLI_findindex(cu->editnurb, nu); else - cu->actnu= BLI_findindex(&cu->nurb, nu); + cu->actnu= BLI_findindex(nubase, nu); } #else |