Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYimingWu <xp8110@outlook.com>2021-06-25 13:48:20 +0300
committerYimingWu <xp8110@outlook.com>2021-06-25 13:48:20 +0300
commit3558bb8eae758aa7e6483d0a6fc00dc83407d4cf (patch)
tree7dc46c0bee5ce2e8d81388d4c426a5e1addb3023 /source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
parentae085e301c2aac0d6956609bfe93a90a19f0e235 (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.c47
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);