diff options
author | YimingWu <xp8110@outlook.com> | 2021-06-25 13:48:20 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2021-06-25 13:48:20 +0300 |
commit | 3558bb8eae758aa7e6483d0a6fc00dc83407d4cf (patch) | |
tree | 7dc46c0bee5ce2e8d81388d4c426a5e1addb3023 /source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c | |
parent | ae085e301c2aac0d6956609bfe93a90a19f0e235 (diff) |
LineArt: Filtering feature lines with face mask
User can specify filtering options inside line art modifier,
like inverting selection and including face mark region border.
Reviewed By: Sebastian Parborg (zeddb)
Differential Revision: https://developer.blender.org/D11307
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c')
-rw-r--r-- | source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c index 1f70ecb4595..b87ed9e431a 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c @@ -449,6 +449,51 @@ static void transparency_panel_draw(const bContext *UNUSED(C), Panel *panel) uiItemR(col, ptr, "use_transparency_match", 0, IFACE_("Match All Masks"), ICON_NONE); } +static void face_mark_panel_draw_header(const bContext *UNUSED(C), Panel *panel) +{ + uiLayout *layout = panel->layout; + PointerRNA ob_ptr; + PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, &ob_ptr); + + const bool is_baked = RNA_boolean_get(ptr, "is_baked"); + const bool use_cache = RNA_boolean_get(ptr, "use_cache"); + const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data); + + if (!use_cache || is_first) { + uiLayoutSetEnabled(layout, !is_baked); + uiItemR(layout, ptr, "use_face_mark", 0, IFACE_("Face Mark Filtering"), ICON_NONE); + } + else { + uiItemL(layout, IFACE_("Face Mark Filtering"), ICON_NONE); + } +} + +static void face_mark_panel_draw(const bContext *UNUSED(C), Panel *panel) +{ + uiLayout *layout = panel->layout; + PointerRNA ob_ptr; + PointerRNA *ptr = gpencil_modifier_panel_get_property_pointers(panel, &ob_ptr); + + const bool is_baked = RNA_boolean_get(ptr, "is_baked"); + const bool use_mark = RNA_boolean_get(ptr, "use_face_mark"); + const bool use_cache = RNA_boolean_get(ptr, "use_cache"); + const bool is_first = BKE_gpencil_is_first_lineart_in_stack(ob_ptr.data, ptr->data); + + uiLayoutSetEnabled(layout, !is_baked); + + if (use_cache && !is_first) { + uiItemL(layout, "Cached from the first line art modifier.", ICON_INFO); + return; + } + + uiLayoutSetPropSep(layout, true); + + uiLayoutSetActive(layout, use_mark); + + uiItemR(layout, ptr, "use_face_mark_invert", 0, NULL, ICON_NONE); + uiItemR(layout, ptr, "use_face_mark_boundaries", 0, NULL, ICON_NONE); +} + static void chaining_panel_draw(const bContext *UNUSED(C), Panel *panel) { PointerRNA ob_ptr; @@ -567,6 +612,8 @@ static void panelRegister(ARegionType *region_type) transparency_panel_draw, occlusion_panel); gpencil_modifier_subpanel_register( + region_type, "face_mark", "", face_mark_panel_draw_header, face_mark_panel_draw, panel_type); + gpencil_modifier_subpanel_register( region_type, "chaining", "Chaining", NULL, chaining_panel_draw, panel_type); gpencil_modifier_subpanel_register( region_type, "vgroup", "Vertex Weight Transfer", NULL, vgroup_panel_draw, panel_type); |