[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