[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