[Bf-blender-cvs] [b5247238bb2] greasepencil-object: Split Grease Pencil Stack modifiers

Antonio Vazquez noreply at git.blender.org
Wed Jun 20 17:42:16 CEST 2018


Commit: b5247238bb2c8360a946bde0c3379eca02ccb074
Author: Antonio Vazquez
Date:   Wed Jun 20 17:20:08 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rBb5247238bb2c8360a946bde0c3379eca02ccb074

Split Grease Pencil Stack modifiers

Now all modifiers logic is totally separated of mesh modifiers.

Thanks Dalai Felinto for his help and support doing this change.

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

M	build_files/cmake/macros.cmake
M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/CMakeLists.txt
M	source/blender/blenkernel/BKE_gpencil.h
A	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/BKE_modifier.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/object/CMakeLists.txt
A	source/blender/editors/object/object_gpencil_modifier.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_modifier.c
M	source/blender/editors/object/object_ops.c
M	source/blender/editors/space_outliner/outliner_draw.c
A	source/blender/gpencil_modifiers/CMakeLists.txt
A	source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
R082	source/blender/modifiers/intern/MOD_gpencil_util.c	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
R100	source/blender/modifiers/intern/MOD_gpencil_util.h	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
R094	source/blender/modifiers/intern/MOD_gpencilbuild.c	source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
R084	source/blender/modifiers/intern/MOD_gpencilcolor.c	source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
R088	source/blender/modifiers/intern/MOD_gpencilhook.c	source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
R080	source/blender/modifiers/intern/MOD_gpencilinstance.c	source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c
R081	source/blender/modifiers/intern/MOD_gpencillattice.c	source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
R085	source/blender/modifiers/intern/MOD_gpencilnoise.c	source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
R080	source/blender/modifiers/intern/MOD_gpenciloffset.c	source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
R082	source/blender/modifiers/intern/MOD_gpencilopacity.c	source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
R076	source/blender/modifiers/intern/MOD_gpencilsimplify.c	source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
R080	source/blender/modifiers/intern/MOD_gpencilsmooth.c	source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
R084	source/blender/modifiers/intern/MOD_gpencilsubdiv.c	source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
R080	source/blender/modifiers/intern/MOD_gpencilthick.c	source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
R084	source/blender/modifiers/intern/MOD_gpenciltint.c	source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
A	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesdna/intern/makesdna.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/CMakeLists.txt
M	source/blender/makesrna/intern/makesrna.c
A	source/blender/makesrna/intern/rna_gpencil_modifier.c
M	source/blender/makesrna/intern/rna_internal.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/makesrna/intern/rna_object.c
M	source/blender/makesrna/intern/rna_ui_api.c
M	source/blender/modifiers/CMakeLists.txt
M	source/blender/modifiers/MOD_modifiertypes.h
M	source/blender/modifiers/intern/MOD_armature.c
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_bevel.c
M	source/blender/modifiers/intern/MOD_boolean.c
M	source/blender/modifiers/intern/MOD_build.c
M	source/blender/modifiers/intern/MOD_cast.c
M	source/blender/modifiers/intern/MOD_cloth.c
M	source/blender/modifiers/intern/MOD_collision.c
M	source/blender/modifiers/intern/MOD_correctivesmooth.c
M	source/blender/modifiers/intern/MOD_curve.c
M	source/blender/modifiers/intern/MOD_datatransfer.c
M	source/blender/modifiers/intern/MOD_decimate.c
M	source/blender/modifiers/intern/MOD_displace.c
M	source/blender/modifiers/intern/MOD_dynamicpaint.c
M	source/blender/modifiers/intern/MOD_edgesplit.c
M	source/blender/modifiers/intern/MOD_explode.c
M	source/blender/modifiers/intern/MOD_fluidsim.c
M	source/blender/modifiers/intern/MOD_hook.c
M	source/blender/modifiers/intern/MOD_laplaciandeform.c
M	source/blender/modifiers/intern/MOD_laplaciansmooth.c
M	source/blender/modifiers/intern/MOD_lattice.c
M	source/blender/modifiers/intern/MOD_mask.c
M	source/blender/modifiers/intern/MOD_meshcache.c
M	source/blender/modifiers/intern/MOD_meshdeform.c
M	source/blender/modifiers/intern/MOD_meshsequencecache.c
M	source/blender/modifiers/intern/MOD_mirror.c
M	source/blender/modifiers/intern/MOD_multires.c
M	source/blender/modifiers/intern/MOD_none.c
M	source/blender/modifiers/intern/MOD_normal_edit.c
M	source/blender/modifiers/intern/MOD_ocean.c
M	source/blender/modifiers/intern/MOD_particleinstance.c
M	source/blender/modifiers/intern/MOD_particlesystem.c
M	source/blender/modifiers/intern/MOD_remesh.c
M	source/blender/modifiers/intern/MOD_screw.c
M	source/blender/modifiers/intern/MOD_shapekey.c
M	source/blender/modifiers/intern/MOD_shrinkwrap.c
M	source/blender/modifiers/intern/MOD_simpledeform.c
M	source/blender/modifiers/intern/MOD_skin.c
M	source/blender/modifiers/intern/MOD_smoke.c
M	source/blender/modifiers/intern/MOD_smooth.c
M	source/blender/modifiers/intern/MOD_softbody.c
M	source/blender/modifiers/intern/MOD_solidify.c
M	source/blender/modifiers/intern/MOD_subsurf.c
M	source/blender/modifiers/intern/MOD_surface.c
M	source/blender/modifiers/intern/MOD_surfacedeform.c
M	source/blender/modifiers/intern/MOD_triangulate.c
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/modifiers/intern/MOD_uvproject.c
M	source/blender/modifiers/intern/MOD_uvwarp.c
M	source/blender/modifiers/intern/MOD_warp.c
M	source/blender/modifiers/intern/MOD_wave.c
M	source/blender/modifiers/intern/MOD_weightvgedit.c
M	source/blender/modifiers/intern/MOD_weightvgmix.c
M	source/blender/modifiers/intern/MOD_weightvgproximity.c
M	source/blender/modifiers/intern/MOD_wireframe.c
M	source/creator/creator.c

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

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 9c5de8ee555..2430b8d1516 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -626,16 +626,19 @@ function(SETUP_BLENDER_SORTED_LIBS)
 		bf_freestyle
 		bf_ikplugin
 		bf_modifiers
+		bf_gpencil_modifiers
 		bf_alembic
 		bf_bmesh
 		bf_gpu
 		bf_draw
 		bf_blenloader
 		bf_blenkernel
+		bf_gpencil_modifiers
 		bf_physics
 		bf_nodes
 		bf_rna
 		bf_editor_manipulator_library  # rna -> manipulator bad-level calls
+		bf_editor_object # rna -> dependency issue
 		bf_python
 		bf_imbuf
 		bf_blenlib
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index d43d1f61908..e6c6c99556b 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -32,6 +32,11 @@ class ModifierButtonsPanel:
 class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
     bl_label = "Modifiers"
 
+    @classmethod
+    def poll(cls, context):
+        ob = context.object
+        return ob and ob.type != 'GPENCIL'
+
     def draw(self, context):
         layout = self.layout
 
@@ -1562,6 +1567,32 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         if md.rest_source == 'BIND':
             layout.operator("object.correctivesmooth_bind", text="Unbind" if is_bind else "Bind")
 
+
+class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
+    bl_label = "Modifiers"
+
+    @classmethod
+    def poll(cls, context):
+        ob = context.object
+        return ob and ob.type == 'GPENCIL'
+
+    def draw(self, context):
+        layout = self.layout
+
+        ob = context.object
+
+        layout.operator_menu_enum("object.gpencil_modifier_add", "type")
+
+        for md in ob.grease_pencil_modifiers:
+            box = layout.template_greasepencil_modifier(md)
+            if box:
+                # match enum type to our functions, avoids a lookup table.
+                getattr(self, md.type)(box, ob, md)
+
+    # the mt.type enum is (ab)used for a lookup on function names
+    # ...to avoid lengthy if statements
+    # so each type must have a function here.
+
     def GP_NOISE(self, layout, ob, md):
         gpd = ob.data
         split = layout.split()
@@ -1849,10 +1880,6 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         row.prop_search(md, "layer", gpd, "layers", text="", icon='GREASEPENCIL')
         row.prop(md, "invert_layers", text="", icon="ARROW_LEFTRIGHT")
 
-#        row = col.row(align=True)
-#        row.prop(md, "pass_index", text="Pass")
-#        row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
-
     def GP_LATTICE(self, layout, ob, md):
         gpd = ob.data
         split = layout.split()
@@ -1953,9 +1980,9 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         row.prop(md, "pass_index", text="Pass")
         row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 
-
 classes = (
     DATA_PT_modifiers,
+    DATA_PT_gpencil_modifiers,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 5709ac723f4..57eecd1c71e 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -44,6 +44,7 @@ set(SRC_DNA_INC
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_fileglobal_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_freestyle_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_genfile.h
+	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpencil_modifier_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpencil_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpu_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_group_types.h
@@ -112,6 +113,7 @@ add_subdirectory(gpu)
 add_subdirectory(imbuf)
 add_subdirectory(nodes)
 add_subdirectory(modifiers)
+add_subdirectory(gpencil_modifiers)
 add_subdirectory(makesdna)
 add_subdirectory(makesrna)
 
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index bec53fa4567..887a7f4f67b 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -33,6 +33,7 @@
 
 struct CurveMapping;
 struct Depsgraph;
+struct GpencilModifierData;
 struct ToolSettings;
 struct ListBase;
 struct bGPdata;
@@ -114,10 +115,6 @@ struct bGPDstroke *BKE_gpencil_add_stroke(struct bGPDframe *gpf, int mat_idx, in
 #define GPENCIL_ALPHA_OPACITY_THRESH 0.001f
 #define GPENCIL_STRENGTH_MIN 0.003f
 
-#define GPENCIL_MODIFIER_ACTIVE(_md, _is_render) (((_md->mode & eModifierMode_Realtime) && (_is_render == false)) || \
-												  ((_md->mode & eModifierMode_Render) && (_is_render == true)))
-#define GPENCIL_MODIFIER_EDIT(_md, _is_edit) (((_md->mode & eModifierMode_Editmode) == 0) && (_is_edit))
-
 bool gpencil_layer_is_editable(const struct bGPDlayer *gpl);
 
 /* How gpencil_layer_getframe() should behave when there
@@ -162,21 +159,6 @@ void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGP
 /* GPencil geometry evaluation */
 void BKE_gpencil_eval_geometry(struct Depsgraph *depsgraph, struct bGPdata *gpd);
 
-/* modifiers */
-bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
-
-void BKE_gpencil_stroke_modifiers(
-		struct Depsgraph *depsgraph, struct Object *ob,
-		struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, bool is_render);
-void BKE_gpencil_geometry_modifiers(
-		struct Depsgraph *depsgraph, struct Object *ob,
-		struct bGPDlayer *gpl, struct bGPDframe *gpf, bool is_render);
-
-void BKE_gpencil_instance_modifier_instance_tfm(struct InstanceGpencilModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
-
-void BKE_gpencil_lattice_init(struct Object *ob);
-void BKE_gpencil_lattice_clear(struct Object *ob);
-
 /* stroke geometry utilities */
 void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3]);
 void BKE_gpencil_simplify_stroke(struct bGPDstroke *gps, float factor);
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
new file mode 100644
index 00000000000..35464035a4b
--- /dev/null
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -0,0 +1,252 @@
+/*
+ * ***** 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: all of this file.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __BKE_GPENCIL_MODIFIER_H__
+#define __BKE_GPENCIL_MODIFIER_H__
+
+/** \file BKE_greasepencil_modifier.h
+ *  \ingroup bke
+ */
+
+#include "DNA_gpencil_modifier_types.h"     /* needed for all enum typdefs */
+#include "BLI_compiler_attrs.h"
+#include "BKE_customdata.h"
+
+struct ID;
+struct Depsgraph;
+struct DerivedMesh;
+struct bContext; /* NOTE: gp_bakeModifier() - called from UI - needs to create new datablocks, hence the need for this */
+struct Mesh;
+struct Object;
+struct Scene;
+struct ViewLayer;
+struct ListBase;
+struct bArmature;
+struct Main;
+struct GpencilModifierData;
+struct BMEditMesh;
+struct DepsNodeHandle;
+struct bGPDlayer;
+struct bGPDframe;
+struct bGPDstroke;
+struct ModifierUpdateDepsgraphContext;
+
+#define GPENCIL_MODIFIER_ACTIVE(_md, _is_render) (((_md->mode & eGpencilModifierMode_Realtime) && (_is_render == false)) || \
+												  ((_md->mode & eGpencilModifierMode_Render) && (_is_render == true))) 
+#define GPENCIL_MODIFIER_EDIT(_md, _is_edit) (((_md->mode & eGpencilModifierMode_Editmode) == 0) && (_is_edit))
+
+typedef enum {
+	/* Should not be used, only for None modifier type */
+	eGpencilModifierTypeType_None,
+
+	/* grease pencil modifiers */
+	eGpencilModifierTypeType_Gpencil,
+}  GpencilModifierTypeType;
+
+typedef enum {
+	eGpencilModifierTypeFlag_SupportsMapping = (1 << 0),
+	eGpencilModifierTypeFlag_SupportsEditmode = (1 << 1),
+
+	/* For modifiers that support editmode this determines if the
+	* modifier should be enabled by default in editmode. This should
+	* only be used by modifiers that are relatively speedy and
+	* also generally used in editmode, otherwise let the user enable
+	* it by hand.
+	*/
+	eGpencilModifierTypeFlag_EnableInEditmode = (1 << 2),
+
+	/* For modifiers that require original data and so cannot
+	* be placed after any non-deformative modifier.
+	*/
+	eGpencilModifierTypeFlag_RequiresOriginalData = (1 << 3),
+
+	/* max one per type */
+	eGpencilModifierTypeFlag_Single = (1 << 4),
+
+	/* can't be added manually by user */
+	eGpencilModifierTypeFlag_NoUserAdd = (1 << 5),
+} GpencilModifierTypeFlag;
+
+/* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */
+typedef void(*GreasePencilObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin, int cb_flag);
+typedef void(*GreasePencilIDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag);
+typedef void(*GreasePencilTexWalkFunc)(void *userData, struct Object *ob, struct GpencilModifierData *md, const char *propname);
+
+typedef struct GpencilModifierTypeInfo {
+	/* The user visible name for this modifier */
+	char name[32];
+
+	/* The DNA struct name for the modifier data type, used to
+	 * write the DNA data out.
+	 */
+	char struct_name[32];
+
+	/* The size of the modifier data type, used by allocation. */
+	int struct_size;
+
+	GpencilModifierType type;
+	GpencilModifierTypeFlag flags;
+
+
+	/********************* Non-optional functions *********************/
+
+	/* Copy instance data for this modifier type. Should cop

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list