[Bf-blender-cvs] [889919e7077] soc-2019-npr: Gpencil: Multiply modifier added. (not functioning)

YimingWu noreply at git.blender.org
Tue Jul 2 09:22:00 CEST 2019


Commit: 889919e70777968b459b2b6fbb74d238dd8b591f
Author: YimingWu
Date:   Tue Jul 2 15:21:16 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB889919e70777968b459b2b6fbb74d238dd8b591f

Gpencil: Multiply modifier added. (not functioning)

===================================================================

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/gpencil_modifiers/CMakeLists.txt
M	source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
M	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
A	source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index cb390b09fa4..68591ac661d 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -2330,6 +2330,23 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
     def GP_LENGTH(self, layout, ob, md):
         col = layout.column()
         col.prop(md, "length")
+    
+    def GP_MULTIPLY(self, layout, ob, md):
+        sp = layout.split(factor = 0.5)
+
+        col = sp.column()
+        col.prop(md, "enable_duplication")
+        if md.enable_duplication:
+            col.prop(md,"duplications")
+            col.prop(md,"distance")
+            col.prop(md,"offset")
+
+        col = sp.column()
+        col.prop(md, "enable_angle_splitting")
+        if md.enable_angle_splitting:
+            col.prop(md,"split_angle")
+
+        
 
 
 classes = (
diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt
index a098ee4bbcc..e5380ae4516 100644
--- a/source/blender/gpencil_modifiers/CMakeLists.txt
+++ b/source/blender/gpencil_modifiers/CMakeLists.txt
@@ -63,6 +63,7 @@ set(SRC
   intern/MOD_gpenciltime.c
   intern/MOD_gpenciltint.c
   intern/MOD_gpencillength.c
+  intern/MOD_gpencilmultiply.c
 
   MOD_gpencil_modifiertypes.h
 )
diff --git a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
index cd9cb01b341..ac926ffe96e 100644
--- a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
+++ b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
@@ -44,6 +44,7 @@ extern GpencilModifierTypeInfo modifierType_Gpencil_Armature;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Time;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Sample;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Length;
+extern GpencilModifierTypeInfo modifierType_Gpencil_Multiply;
 
 /* MOD_gpencil_util.c */
 void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[]);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
index 526bf71db6e..f609fbf385b 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
@@ -59,7 +59,6 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[])
   INIT_GP_TYPE(Subdiv);
   INIT_GP_TYPE(Simplify);
   INIT_GP_TYPE(Sample);
-  INIT_GP_TYPE(Length);
   INIT_GP_TYPE(Thick);
   INIT_GP_TYPE(Tint);
   INIT_GP_TYPE(Color);
@@ -73,6 +72,8 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[])
   INIT_GP_TYPE(Offset);
   INIT_GP_TYPE(Armature);
   INIT_GP_TYPE(Time);
+  INIT_GP_TYPE(Length);
+  INIT_GP_TYPE(Multiply);
 #undef INIT_GP_TYPE
 }
 
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
new file mode 100644
index 00000000000..967b7a351f5
--- /dev/null
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c
@@ -0,0 +1,148 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software  Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2017, Blender Foundation
+ * This is a new part of Blender
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
+
+/** \file blender/gpencil_modifiers/intern/MOD_gpencilstrokes.c
+ *  \ingroup modifiers
+ */
+
+#include <stdio.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_gpencil_modifier_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_rand.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+#include "BLI_linklist.h"
+#include "BLI_alloca.h"
+
+#include "BKE_gpencil.h"
+#include "BKE_gpencil_modifier.h"
+#include "BKE_modifier.h"
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_object.h"
+#include "BKE_main.h"
+#include "BKE_scene.h"
+#include "BKE_layer.h"
+#include "BKE_library_query.h"
+#include "BKE_collection.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_mapping.h"
+
+#include "bmesh.h"
+#include "bmesh_tools.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
+
+#include "MOD_gpencil_util.h"
+#include "MOD_gpencil_modifiertypes.h"
+
+static void initData(GpencilModifierData *md)
+{
+  MultiplyGpencilModifierData *gpmd = (MultiplyGpencilModifierData *)md;
+}
+
+static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
+{
+  BKE_gpencil_modifier_copyData_generic(md, target);
+}
+
+static void bakeModifier(Main *UNUSED(bmain),
+                         Depsgraph *depsgraph,
+                         GpencilModifierData *md,
+                         Object *ob)
+{
+
+  bGPdata *gpd = ob->data;
+
+  for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+    for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
+      MultiplyGpencilModifierData *lmd = (MultiplyGpencilModifierData *)md;
+      bGPDstroke *gps;
+      for (gps = gpf->strokes.first; gps; gps = gps->next) {
+        /* deform goes here */
+      }
+      return;
+    }
+  }
+}
+
+/* -------------------------------- */
+
+/* Generic "generateStrokes" callback */
+static void generateStrokes(
+    GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+{
+  MultiplyGpencilModifierData *lmd = (MultiplyGpencilModifierData *)md;
+  bGPDstroke *gps;
+  for (gps = gpf->strokes.first; gps; gps = gps->next) {
+    /* deform goes here */
+  }
+}
+
+static void updateDepsgraph(GpencilModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
+{
+  MultiplyGpencilModifierData *lmd = (MultiplyGpencilModifierData *)md;
+}
+
+static void foreachObjectLink(GpencilModifierData *md,
+                              Object *ob,
+                              ObjectWalkFunc walk,
+                              void *userData)
+{
+  MultiplyGpencilModifierData *mmd = (MultiplyGpencilModifierData *)md;
+}
+
+GpencilModifierTypeInfo modifierType_Gpencil_Multiply = {
+    /* name */ "Multiply Stretch",
+    /* structName */ "MultiplyGpencilModifierData",
+    /* structSize */ sizeof(MultiplyGpencilModifierData),
+    /* type */ eGpencilModifierTypeType_Gpencil,
+    /* flags */ 0,
+
+    /* copyData */ copyData,
+
+    /* deformStroke */ NULL,
+    /* generateStrokes */ generateStrokes,
+    /* bakeModifier */ bakeModifier,
+    /* remapTime */ NULL,
+
+    /* initData */ initData,
+    /* freeData */ NULL,
+    /* isDisabled */ NULL,
+    /* updateDepsgraph */ updateDepsgraph,
+    /* dependsOnTime */ NULL,
+    /* foreachObjectLink */ foreachObjectLink,
+    /* foreachIDLink */ NULL,
+    /* foreachTexLink */ NULL,
+    /* getDuplicationFactor */ NULL,
+};
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index 69ba088342d..bb8e59871ac 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -50,6 +50,7 @@ typedef enum GpencilModifierType {
   eGpencilModifierType_Time = 16,
   eGpencilModifierType_Sample = 17,
   eGpencilModifierType_Length = 18,
+  eGpencilModifierType_Multiply = 19,
   NUM_GREASEPENCIL_MODIFIER_TYPES
 } GpencilModifierType;
 
@@ -600,6 +601,9 @@ typedef enum eStrokeGpencil_Flag { /* emm what are these for */
                                    GP_STROKE_INVERT_LAYERPASS = (1 << 3),
 } eStrokeGpencil_Flag;
 
+/* XXX: all the length and similar parameters should have an image space behavior. */
+/* Need future investigations */
+
 typedef struct SampleGpencilModifierData {
   GpencilModifierData modifier;
   float length;
@@ -612,4 +616,22 @@ typedef struct LengthGpencilModifierData {
   char _pad[4];
 } LengthGpencilModifierData;
 
+typedef struct MultiplyGpencilModifierData {
+  GpencilModifierData modifier;
+  int flags;
+
+  int duplications;
+  float distance;
+  float offset; /* -1:inner 0:middle 1:outer */
+
+  float split_angle; /* in rad not deg */
+
+  char _pad[4];
+} MultiplyGpencilModifierData;
+
+typedef enum eMultiplyGpencil_Flag {
+  GP_MULTIPLY_ENABLE_DUPLICATION = (1 << 0),
+  GP_MULTIPLY_ENABLE_ANGLE_SPLITTING = (1 << 1),
+} eMultiplyGpencil_Flag;
+
 #endif /* __DNA_GPENCIL_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 486b9224170..47a88837667 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -82,6 +82,11 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = {
      "Subdivide",
      "Subdivide stroke adding more control points"},
     {eGpencilModifierType_Sample, "GP_SAMPLE", ICON_MOD_MULTIRES, "Sample", "Resamples strokes"},
+    {eGpencilModifierType_Multiply,
+     "GP_MULTIPLY",
+     ICON_GP_MULTIFRAME_EDITING,
+     "Multiply",
+     "Produce multiple strokes along one stroke"},
     {0, "", 0, N_("Deform"), ""},
     {eGpencilModifierType_Armature,
      "GP_ARMATURE",
@@ -217,6 +222,8 @@ static StructRNA *rna_GpencilModifier_refine(struct PointerRNA *ptr)
       return &RNA_SampleGpencilModifier;
     case eGpencilModifierType_Length:
       return &RNA_LengthGpencilModifier;
+   

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list