[Bf-blender-cvs] [c28f0e55c1f] lanpr-under-gp: LineArt: Option for matching input/output vertex group names.
YimingWu
noreply at git.blender.org
Sat Oct 3 05:38:36 CEST 2020
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");
More information about the Bf-blender-cvs
mailing list