Commit: c28f0e55c1f0892e1557589bd6c23625736815ac Author: YimingWu Date: Sat Oct 3 11:34:35 2020 +0800 Branches: lanpr-under-gp https://developer.blender.org/rBc28f0e55c1f0892e1557589bd6c23625736815ac
LineArt: Option for matching input/output vertex group names. =================================================================== M source/blender/editors/include/ED_lineart.h M source/blender/editors/lineart/lineart_cpu.c M source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c M source/blender/makesdna/DNA_gpencil_modifier_types.h M source/blender/makesrna/intern/rna_gpencil_modifier.c =================================================================== diff --git a/source/blender/editors/include/ED_lineart.h b/source/blender/editors/include/ED_lineart.h index 43b571eb403..7d30b082f7d 100644 --- a/source/blender/editors/include/ED_lineart.h +++ b/source/blender/editors/include/ED_lineart.h @@ -620,7 +620,7 @@ void ED_lineart_gpencil_generate_from_chain(struct Depsgraph *depsgraph, float pre_sample_length, const char *source_vgname, const char *vgname, - bool invert_source); + int modifier_flags); void ED_lineart_gpencil_generate_strokes_direct(struct Depsgraph *depsgraph, struct Object *ob, struct bGPDlayer *gpl, @@ -638,7 +638,7 @@ void ED_lineart_gpencil_generate_strokes_direct(struct Depsgraph *depsgraph, float pre_sample_length, const char *source_vgname, const char *vgname, - bool invert_source); + int modifier_flags); struct bContext; diff --git a/source/blender/editors/lineart/lineart_cpu.c b/source/blender/editors/lineart/lineart_cpu.c index d02ba32c3b3..2fc5dc13546 100644 --- a/source/blender/editors/lineart/lineart_cpu.c +++ b/source/blender/editors/lineart/lineart_cpu.c @@ -3999,7 +3999,7 @@ void ED_lineart_gpencil_generate_from_chain(Depsgraph *depsgraph, float pre_sample_length, const char *source_vgname, const char *vgname, - bool invert_source) + int modifier_flags) { LineartRenderBuffer *rb = lineart_share.render_buffer_shared; @@ -4038,6 +4038,8 @@ void ED_lineart_gpencil_generate_from_chain(Depsgraph *depsgraph, unit_m4(mat); int enabled_types = lineart_rb_line_types(rb); + bool invert_input = modifier_flags & LRT_GPENCIL_INVERT_SOURCE_VGROUP; + bool match_output = modifier_flags & LRT_GPENCIL_MATCH_OUTPUT_VGROUP; LISTBASE_FOREACH (LineartRenderLineChain *, rlc, &rb->chains) { @@ -4100,32 +4102,39 @@ void ED_lineart_gpencil_generate_from_chain(Depsgraph *depsgraph, if (source_vgname && vgname) { Object *eval_ob = DEG_get_evaluated_object(depsgraph, rlc->object_ref); int gpdg = -1; - if ((gpdg = BKE_object_defgroup_name_index(gpencil_object, vgname)) >= 0) { - if (eval_ob->type == OB_MESH) { - int dindex = 0; - Mesh *me = (Mesh *)eval_ob->data; - if (!me->dvert) { - continue; - } - LISTBASE_FOREACH (bDeformGroup *, db, &eval_ob->defbase) { - if (strstr(db->name, source_vgname) == db->name) { - int sindex = 0, vindex; - LISTBASE_FOREACH (LineartRenderLineChainItem *, rlci, &rlc->chain) { - vindex = rlci->index; - /* XXX: Here doesn't have post-modifier dvert! */ - if (vindex >= me->totvert) { - break; - } - MDeformWeight *mdw = BKE_defvert_ensure_index(&me->dvert[vindex], dindex); - if (mdw->weight > 0.999f) { - MDeformWeight *gdw = BKE_defvert_ensure_index(&gps->dvert[sindex], gpdg); - gdw->weight = 1.0f; - } - sindex++; + if ((!match_output) && (gpdg = BKE_object_defgroup_name_index(gpencil_object, vgname)) < 0) { + continue; + } + if (eval_ob->type == OB_MESH) { + int dindex = 0; + Mesh *me = (Mesh *)eval_ob->data; + if (!me->dvert) { + continue; + } + LISTBASE_FOREACH (bDeformGroup *, db, &eval_ob->defbase) { + if (strstr(db->name, source_vgname) == db->name) { + if (match_output) { + gpdg = BKE_object_defgroup_name_index(gpencil_object, db->name); + if (gpdg < 0) { + continue; + } + } + int sindex = 0, vindex; + LISTBASE_FOREACH (LineartRenderLineChainItem *, rlci, &rlc->chain) { + vindex = rlci->index; + /* XXX: Here doesn't have post-modifier dvert! */ + if (vindex >= me->totvert) { + break; + } + MDeformWeight *mdw = BKE_defvert_ensure_index(&me->dvert[vindex], dindex); + if (mdw->weight > 0.999f) { + MDeformWeight *gdw = BKE_defvert_ensure_index(&gps->dvert[sindex], gpdg); + gdw->weight = 1.0f; } + sindex++; } - dindex++; } + dindex++; } } } @@ -4165,7 +4174,7 @@ void ED_lineart_gpencil_generate_strokes_direct(Depsgraph *depsgraph, float pre_sample_length, const char *source_vgname, const char *vgname, - bool invert_source) + int modifier_flags) { if (!gpl || !gpf || !source_reference || !ob) { @@ -4204,7 +4213,7 @@ void ED_lineart_gpencil_generate_strokes_direct(Depsgraph *depsgraph, pre_sample_length, source_vgname, vgname, - invert_source); + modifier_flags); } static int lineart_gpencil_update_strokes_exec(bContext *C, wmOperator *UNUSED(op)) @@ -4341,7 +4350,7 @@ static int lineart_gpencil_bake_strokes_invoke(bContext *C, lmd->pre_sample_length, lmd->source_vertex_group, lmd->vgname, - lmd->flags & LRT_GPENCIL_INVERT_SOURCE_VGROUP); + lmd->flags); } } } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c index 93d9cad2007..a456607a19e 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c @@ -75,6 +75,7 @@ static void initData(GpencilModifierData *md) lmd->line_types = LRT_EDGE_FLAG_ALL_TYPE; lmd->thickness = 25; lmd->opacity = 1.0f; + lmd->flags |= LRT_GPENCIL_MATCH_OUTPUT_VGROUP; } static void copyData(const GpencilModifierData *md, GpencilModifierData *target) @@ -116,7 +117,7 @@ static void generate_strokes_actual( lmd->pre_sample_length, lmd->source_vertex_group, lmd->vgname, - lmd->flags & LRT_GPENCIL_INVERT_SOURCE_VGROUP); + lmd->flags); } static bool isModifierDisabled(GpencilModifierData *md) @@ -436,7 +437,12 @@ static void vgroup_panel_draw(const bContext *C, Panel *panel) uiItemR(row, ptr, "source_vertex_group", 0, "Source", ICON_GROUP_VERTEX); uiItemR(row, ptr, "invert_source_vertex_group", UI_ITEM_R_TOGGLE, "", ICON_ARROW_LEFTRIGHT); - uiItemPointerR(layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", "Target", ICON_NONE); + uiItemR(layout, ptr, "match_output_vertex_group", 0, NULL, ICON_NONE); + + bool match_output = RNA_boolean_get(ptr, "match_output_vertex_group"); + if (!match_output) { + uiItemPointerR(layout, ptr, "vertex_group", &ob_ptr, "vertex_groups", "Target", ICON_NONE); + } } static void panelRegister(ARegionType *region_type) diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h index a85f44566ec..2345bd855be 100644 --- a/source/blender/makesdna/DNA_gpencil_modifier_types.h +++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h @@ -805,6 +805,7 @@ typedef enum eLineartGpencilModifierSource { typedef enum eLineArtGPencilModifierFlags { LRT_GPENCIL_INVERT_SOURCE_VGROUP = (1 << 0), + LRT_GPENCIL_MATCH_OUTPUT_VGROUP = (1 << 1), } eLineArtGPencilModifierFlags; typedef enum eLineartGpencilTransparencyFlags { diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index 5f3b141e112..e7049b420f7 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -2415,6 +2415,12 @@ static void rna_def_modifier_gpencillineart(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Invert Source", "Invert soource vertex group"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "match_output_vertex_group", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_default(prop, 1); + RNA_def_property_boolean_sdna(prop, NULL, "flags", LRT_GPENCIL_MATCH_OUTPUT_VGROUP); + RNA_def_property_ui_text(prop, "Match Output", "Match output vertex group"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE); RNA_def_property_int_default(prop, 20); RNA_def_property_ui_text(prop, "Thickness", "The thickness that are used to generate strokes"); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs