diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-06 19:20:14 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-06 19:20:14 +0400 |
commit | a334b5a4b6bee306ba014aa5f9df608de0259735 (patch) | |
tree | 252884b89420517af6f5c585d6f04609ca3492a1 /source | |
parent | fd666b2c78bdf74bebdcde3c6a9192a435d58bdd (diff) |
Made feather self-intersection check an option.
Useful in cases when masking stuff like self-intersecting
ropes. This could probably be smarter option, but can't
currently think about robust approach here.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/mask.c | 3 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_mask_types.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_mask.c | 7 |
3 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c index 3208862cef6..4b4dcff229d 100644 --- a/source/blender/blenkernel/intern/mask.c +++ b/source/blender/blenkernel/intern/mask.c @@ -779,7 +779,8 @@ float (*BKE_mask_spline_feather_differentiated_points_with_resolution_ex(MaskSpl *tot_feather_point = tot; - spline_feather_collapse_inner_loops(spline, feather, tot); + if (spline->flag & MASK_SPLINE_NOINTERSECT) + spline_feather_collapse_inner_loops(spline, feather, tot); return feather; } diff --git a/source/blender/makesdna/DNA_mask_types.h b/source/blender/makesdna/DNA_mask_types.h index e7322263a6b..b34a6c9b12f 100644 --- a/source/blender/makesdna/DNA_mask_types.h +++ b/source/blender/makesdna/DNA_mask_types.h @@ -141,7 +141,8 @@ typedef struct MaskLayer { /* reserve (1 << 0) for SELECT */ enum { MASK_SPLINE_CYCLIC = (1 << 1), - MASK_SPLINE_NOFILL = (1 << 2) + MASK_SPLINE_NOFILL = (1 << 2), + MASK_SPLINE_NOINTERSECT = (1 << 3) }; /* MaskSpline->weight_interp */ diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c index 9ee2bb99b4e..f197bf8391d 100644 --- a/source/blender/makesrna/intern/rna_mask.c +++ b/source/blender/makesrna/intern/rna_mask.c @@ -568,6 +568,13 @@ static void rna_def_maskSpline(BlenderRNA *brna) RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", MASK_SPLINE_NOFILL); RNA_def_property_ui_text(prop, "Fill", "Make this spline filled"); RNA_def_property_update(prop, NC_MASK | NA_EDITED, "rna_Mask_update_data"); + + /* self-intersection check */ + prop = RNA_def_property(srna, "use_self_intersection_check", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MASK_SPLINE_NOINTERSECT); + RNA_def_property_ui_text(prop, "Self Intersection Check", "Prevent feather from self-intersections"); + RNA_def_property_update(prop, NC_MASK | NA_EDITED, "rna_Mask_update_data"); } static void rna_def_mask_layer(BlenderRNA *brna) |