[Bf-blender-cvs] [6b84b1bb0ac] temp-length-modifier: GPencil Length modifier
YimingWu
noreply at git.blender.org
Thu Nov 14 20:05:23 CET 2019
Commit: 6b84b1bb0acf815d54b64c5e6f4dbad981064067
Author: YimingWu
Date: Thu Nov 14 19:58:05 2019 +0100
Branches: temp-length-modifier
https://developer.blender.org/rB6b84b1bb0acf815d54b64c5e6f4dbad981064067
GPencil Length modifier
This patch includes a modifiers that developed for NPR rendering.
- Length modifier that stretch/shrink a stroke.
Differential Revision: https://developer.blender.org/D5795
Prepare patch
===================================================================
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_gpencillength.c
M source/blender/makesdna/DNA_gpencil_modifier_types.h
M source/blender/makesrna/RNA_access.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 05e8f0fce38..c6ce96b49b8 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -2351,6 +2351,41 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
sub.active = bool(md.vertex_group)
sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
+ def GP_LENGTH(self, layout, ob, md):
+ gpd = ob.data
+ sp = layout.split()
+ col = sp.column()
+ col.label(text="Absolute:")
+ col.prop(md, "length")
+
+ col = sp.column()
+ col.label(text="Relative:")
+ col.prop(md, "percentage")
+
+ col = layout.column()
+ col.prop(md, "tip_length");
+
+ col.separator()
+
+ col.label(text="Material:")
+ row = col.row(align=True)
+ row.prop_search(md, "material", gpd, "materials", text="", icon='SHADING_TEXTURE')
+ row.prop(md, "invert_materials", text="", icon='ARROW_LEFTRIGHT')
+ row = layout.row(align=True)
+ row.prop(md, "pass_index", text="Pass")
+ row.prop(md, "invert_material_pass", text="", icon='ARROW_LEFTRIGHT')
+
+ col = layout.column()
+ col.separator()
+
+ col.label(text="Layer:")
+ row = col.row(align=True)
+ row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
+ row.prop(md, "invert_layers", text="", icon='ARROW_LEFTRIGHT')
+ row = layout.row(align=True)
+ row.prop(md, "layer_pass", text="Pass")
+ row.prop(md, "invert_layer_pass", text="", icon='ARROW_LEFTRIGHT')
+
def GP_MULTIPLY(self, layout, ob, md):
gpd = ob.data
col = layout.column()
@@ -2360,7 +2395,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
subcol.enabled = md.duplications > 0
subcol.prop(md, "distance")
subcol.prop(md, "offset", slider=True)
-
+
subcol.separator()
subcol.prop(md, "enable_fading")
@@ -2396,7 +2431,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
row = layout.row(align=True)
row.prop(md, "layer_pass", text="Pass")
row.prop(md, "invert_layer_pass", text="", icon='ARROW_LEFTRIGHT')
-
+
classes = (
DATA_PT_modifiers,
DATA_PT_gpencil_modifiers,
diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt
index 44335f4da25..fa01a1cbad3 100644
--- a/source/blender/gpencil_modifiers/CMakeLists.txt
+++ b/source/blender/gpencil_modifiers/CMakeLists.txt
@@ -49,6 +49,7 @@ set(SRC
intern/MOD_gpencilcolor.c
intern/MOD_gpencilhook.c
intern/MOD_gpencillattice.c
+ intern/MOD_gpencillength.c
intern/MOD_gpencilmirror.c
intern/MOD_gpencilmultiply.c
intern/MOD_gpencilnoise.c
diff --git a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
index f5c064c1c07..b84ccbcab64 100644
--- a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
+++ b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
@@ -42,6 +42,7 @@ extern GpencilModifierTypeInfo modifierType_Gpencil_Hook;
extern GpencilModifierTypeInfo modifierType_Gpencil_Offset;
extern GpencilModifierTypeInfo modifierType_Gpencil_Armature;
extern GpencilModifierTypeInfo modifierType_Gpencil_Time;
+extern GpencilModifierTypeInfo modifierType_Gpencil_Length;
extern GpencilModifierTypeInfo modifierType_Gpencil_Multiply;
/* MOD_gpencil_util.c */
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
index 16e585705df..b3321b693a4 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
@@ -71,6 +71,7 @@ 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_gpencillength.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c
new file mode 100644
index 00000000000..4828a0e3dd8
--- /dev/null
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillength.c
@@ -0,0 +1,179 @@
+/*
+ * ***** 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 copyData(const GpencilModifierData *md, GpencilModifierData *target)
+{
+ BKE_gpencil_modifier_copyData_generic(md, target);
+}
+
+static void stretchOrShrinkStroke(bGPDstroke *gps, float length, float tip_length)
+{
+ if (length > 0.0f) {
+ BKE_gpencil_stretch_stroke(gps, length, tip_length);
+ }
+ else {
+ BKE_gpencil_shrink_stroke(gps, -length);
+ }
+}
+
+static void applyLength(bGPDstroke *gps, float length, float percentage, float tip_length)
+{
+
+ stretchOrShrinkStroke(gps, length, tip_length);
+
+ float len = BKE_gpencil_stroke_length(gps, true);
+ if (len < FLT_EPSILON) {
+ return;
+ }
+ float length2 = len * percentage / 2.0f; /* Srinking from two tips. */
+
+ stretchOrShrinkStroke(gps, length2, tip_length);
+}
+
+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) {
+ LengthGpencilModifierData *lmd = (LengthGpencilModifierData *)md;
+ bGPDstroke *gps;
+ for (gps = gpf->strokes.first; gps; gps = gps->next) {
+ if (is_stroke_affected_by_modifier(ob,
+ lmd->layername,
+ lmd->materialname,
+ lmd->pass_index,
+ lmd->layer_pass,
+ 1,
+ gpl,
+ gps,
+ lmd->flag & GP_MIRROR_INVERT_LAYER,
+ lmd->flag & GP_MIRROR_INVERT_PASS,
+ lmd->flag & GP_MIRROR_INVERT_LAYERPASS,
+ lmd->flag & GP_MIRROR_INVERT_MATERIAL)) {
+ applyLength(gps, lmd->length, lmd->percentage, lmd->tip_length);
+ }
+ }
+ }
+ }
+}
+
+/* -------------------------------- */
+
+/* Generic "generateStrokes" callback */
+static void deformStroke(GpencilModifierData *md,
+ Depsgraph *depsgraph,
+ Object *ob,
+ bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
+ bGPDstroke *gps)
+{
+ LengthGpencilModifierData *lmd = (LengthGpencilModifierData *)md;
+ if (is_stroke_affected_by_modifier(ob,
+ lmd->layername,
+ lmd->materialname,
+ lmd->pass_index,
+ lmd->layer_pass,
+ 1,
+ gpl,
+ gps,
+ lmd->flag & GP_MIRROR_INVERT_LAYER,
+ lmd->flag & GP_MIRROR_INVERT_PASS,
+ lmd->flag & GP_MIRROR_INVERT_LAYERPASS,
+ lmd->flag & GP_MIRROR_INVERT_MATERIAL)) {
+ applyLength(gps, lmd->length, lmd->percentage, lmd->tip_length);
+ }
+}
+
+GpencilModifierTypeInfo modifierType_Gpencil_Length = {
+ /* name */ "Length",
+ /* structName */ "LengthGpencilModifierData",
+ /* structSize */ sizeof(LengthGpencilModifierData),
+ /* type */ eGpencilModifierTypeType_Gpencil,
+ /* flags */ eGpencilModifierTypeFlag_SupportsEditmode,
+
+ /* copyData */ copyData,
+
+ /* deformStroke */ deformStroke,
+ /* generateStrokes */ NULL,
+ /* bak
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list