[Bf-blender-cvs] [39bc44ffc59] blender2.8: GP: Refactor Instance modifier and rename to Array

Antonioya noreply at git.blender.org
Sun Oct 28 18:30:22 CET 2018


Commit: 39bc44ffc59ef1ad96893ce838c3a3484d072f44
Author: Antonioya
Date:   Sun Oct 28 18:08:24 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB39bc44ffc59ef1ad96893ce838c3a3484d072f44

GP: Refactor Instance modifier and rename to Array

The old name Instance was logic when the modifier created new object instances, but now works equal to mesh Array modifier, so the old name was not logic and must be Array.

Also added a Object to use as offset similar to mesh Array modifier.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/BKE_gpencil_modifier.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/editors/space_outliner/outliner_draw.c
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
R052	source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c	source/blender/gpencil_modifiers/intern/MOD_gpencilarray.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 b72eb832d2a..761805800fe 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1919,7 +1919,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         row.prop(md, "layer_pass", text="Pass")
         row.prop(md, "invert_layer_pass", text="", icon='ARROW_LEFTRIGHT')
 
-    def GP_INSTANCE(self, layout, ob, md):
+    def GP_ARRAY(self, layout, ob, md):
         gpd = ob.data
 
         col = layout.column()
@@ -1929,12 +1929,11 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         col = split.column()
         col.label(text="Offset:")
         col.prop(md, "offset", text="")
+        col.prop(md, "offset_object", text="Object")
 
         col = split.column()
         col.label(text="Shift:")
         col.prop(md, "shift", text="")
-        row = col.row(align=True)
-        row.prop(md, "lock_axis", expand=True)
 
         split = layout.split()
         col = split.column()
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 8ab088eff02..1debfecc895 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -50,7 +50,7 @@ struct Brush;
 struct Object;
 struct bDeformGroup;
 struct SimplifyGpencilModifierData;
-struct InstanceGpencilModifierData;
+struct ArrayGpencilModifierData;
 struct LatticeGpencilModifierData;
 
 struct MDeformVert;
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 5efc390015c..91f368613cb 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -234,8 +234,6 @@ typedef struct GpencilModifierTypeInfo {
 	                       GreasePencilTexWalkFunc walk, void *userData);
 } GpencilModifierTypeInfo;
 
-void BKE_gpencil_instance_modifier_instance_tfm(struct InstanceGpencilModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
-
 /* Initialize modifier's global data (type info and some common global storages). */
 void BKE_gpencil_modifier_init(void);
 
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index abf6268a9a3..68691cd3d05 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -720,47 +720,6 @@ GpencilModifierData *BKE_gpencil_modifiers_findByName(Object *ob, const char *na
 	return BLI_findstring(&(ob->greasepencil_modifiers), name, offsetof(GpencilModifierData, name));
 }
 
-/* helper function for per-instance positioning */
-void BKE_gpencil_instance_modifier_instance_tfm(InstanceGpencilModifierData *mmd, const int elem_idx[3], float r_mat[4][4])
-{
-	float offset[3], rot[3], scale[3];
-	int ri = mmd->rnd[0];
-	float factor;
-
-	offset[0] = mmd->offset[0] * elem_idx[0];
-	offset[1] = mmd->offset[1] * elem_idx[1];
-	offset[2] = mmd->offset[2] * elem_idx[2];
-
-	/* rotation */
-	if (mmd->flag & GP_INSTANCE_RANDOM_ROT) {
-		factor = mmd->rnd_rot * mmd->rnd[ri];
-		mul_v3_v3fl(rot, mmd->rot, factor);
-		add_v3_v3(rot, mmd->rot);
-	}
-	else {
-		copy_v3_v3(rot, mmd->rot);
-	}
-
-	/* scale */
-	if (mmd->flag & GP_INSTANCE_RANDOM_SIZE) {
-		factor = mmd->rnd_size * mmd->rnd[ri];
-		mul_v3_v3fl(scale, mmd->scale, factor);
-		add_v3_v3(scale, mmd->scale);
-	}
-	else {
-		copy_v3_v3(scale, mmd->scale);
-	}
-
-	/* advance random index */
-	mmd->rnd[0]++;
-	if (mmd->rnd[0] > 19) {
-		mmd->rnd[0] = 1;
-	}
-
-	/* calculate matrix */
-	loc_eul_size_to_mat4(r_mat, offset, rot, scale);
-}
-
 void BKE_gpencil_subdivide(bGPDstroke *gps, int level, int flag)
 {
 	bGPDspoint *temp_points;
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 1c45dc24108..41ec458c023 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1064,7 +1064,7 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
 						case eGpencilModifierType_Tint:
 							data.icon = ICON_COLOR;
 							break;
-						case eGpencilModifierType_Instance:
+						case eGpencilModifierType_Array:
 							data.icon = ICON_MOD_ARRAY;
 							break;
 						case eGpencilModifierType_Build:
diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt
index 00a387c58e8..b28a83372b8 100644
--- a/source/blender/gpencil_modifiers/CMakeLists.txt
+++ b/source/blender/gpencil_modifiers/CMakeLists.txt
@@ -50,7 +50,7 @@ set(SRC
 	intern/MOD_gpencilthick.c
 	intern/MOD_gpenciltint.c
 	intern/MOD_gpencilcolor.c
-	intern/MOD_gpencilinstance.c
+	intern/MOD_gpencilarray.c
 	intern/MOD_gpencilbuild.c
 	intern/MOD_gpencilopacity.c
 	intern/MOD_gpencillattice.c
diff --git a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
index d820bbcc7c8..07db9f15288 100644
--- a/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
+++ b/source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h
@@ -36,7 +36,7 @@ extern GpencilModifierTypeInfo modifierType_Gpencil_Simplify;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Thick;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Tint;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Color;
-extern GpencilModifierTypeInfo modifierType_Gpencil_Instance;
+extern GpencilModifierTypeInfo modifierType_Gpencil_Array;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Build;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Opacity;
 extern GpencilModifierTypeInfo modifierType_Gpencil_Lattice;
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
index 1a61133f3f7..2551d9a216d 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
@@ -69,7 +69,7 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[])
 	INIT_GP_TYPE(Thick);
 	INIT_GP_TYPE(Tint);
 	INIT_GP_TYPE(Color);
-	INIT_GP_TYPE(Instance);
+	INIT_GP_TYPE(Array);
 	INIT_GP_TYPE(Build);
 	INIT_GP_TYPE(Opacity);
 	INIT_GP_TYPE(Lattice);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
similarity index 52%
rename from source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c
rename to source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 9c56a06af99..b188dd0de0b 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilinstance.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -44,12 +44,14 @@
 
 #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 "DEG_depsgraph.h"
@@ -59,15 +61,17 @@
 #include "MOD_gpencil_util.h"
 #include "MOD_gpencil_modifiertypes.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
+
 static void initData(GpencilModifierData *md)
 {
-	InstanceGpencilModifierData *gpmd = (InstanceGpencilModifierData *)md;
-	gpmd->count[0] = 1;
-	gpmd->count[1] = 1;
-	gpmd->count[2] = 1;
+	ArrayGpencilModifierData *gpmd = (ArrayGpencilModifierData *)md;
+	gpmd->count = 2;
 	gpmd->offset[0] = 1.0f;
-	gpmd->offset[1] = 1.0f;
-	gpmd->offset[2] = 1.0f;
+	gpmd->offset[1] = 0.0f;
+	gpmd->offset[2] = 0.0f;
 	gpmd->shift[0] = 0.0f;
 	gpmd->shift[1] = 0.0f;
 	gpmd->shift[2] = 0.0f;
@@ -76,7 +80,7 @@ static void initData(GpencilModifierData *md)
 	gpmd->scale[2] = 1.0f;
 	gpmd->rnd_rot = 0.5f;
 	gpmd->rnd_size = 0.5f;
-	gpmd->lock_axis |= GP_LOCKAXIS_X;
+	gpmd->object = NULL;
 
 	/* fill random values */
 	BLI_array_frand(gpmd->rnd, 20, 1);
@@ -89,14 +93,74 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
 }
 
 /* -------------------------------- */
+/* helper function for per-instance positioning */
+static void BKE_gpencil_instance_modifier_instance_tfm(
+	Object *ob, ArrayGpencilModifierData *mmd, const int elem_idx,
+	float r_mat[4][4], float r_offset[4][4])
+{
+	float offset[3], rot[3], scale[3];
+	int ri = mmd->rnd[0];
+	float factor;
+
+	offset[0] = mmd->offset[0] * elem_idx;
+	offset[1] = mmd->offset[1] * elem_idx;
+	offset[2] = mmd->offset[2] * elem_idx;
+
+	/* rotation */
+	if (mmd->flag & GP_ARRAY_RANDOM_ROT) {
+		factor = mmd->rnd_rot * mmd->rnd[ri];
+		mul_v3_v3fl(rot, mmd->rot, factor);
+		add_v3_v3(rot, mmd->rot);
+	}
+	else {
+		copy_v3_v3(rot, mmd->rot);
+	}
+
+	/* scale */
+	if (mmd->flag & GP_ARRAY_RANDOM_SIZE) {
+		factor = mmd->rnd_size * mmd->rnd[ri];
+		mul_v3_v3fl(scale, mmd->scale, factor);
+		add_v3_v3(scale, mmd->scale);
+	}
+	else {
+		copy_v3_v3(scale, mmd->scale);
+	}
+
+	/* advance random index */
+	mmd->rnd[0]++;
+	if (mmd->rnd[0] > 19) {
+		mmd->rnd[0] = 1;
+	}
+
+	/* calculate matrix */
+	loc_eul_size_to_mat4(r_mat, offset, rot, scale);
+
+	copy_m4_m4(r_offset, r_mat);
+
+	/* offset object */
+	if (mmd->object) {
+		float mat_offset[4][4];
+		float obinv[4][4];
+
+		unit_m4(mat_offset);
+		add_v3_v3(mat_offset[3], mmd->offset);
+		invert_m4_m4(obinv, ob->obmat);
+
+		mul_m4_series(r_offset, mat_offset,
+			obinv, mmd->object->obmat);
+		copy_m4_m4(mat_offset, r_offset);
+
+		/* clear r_mat locations to avoid double transform */
+		zero_v3(r_mat[3]);
+	}
+}
 
 /* array modifier - generate geometry callback (for viewport/rendering) */
-/* TODO: How to skip this for the simplify options?   -->  !GP_SIMPLIFY_MODIF(ts, playing) */
 static void generate_geometry(
         GpencilModifierData *md, Depsgraph *UNUSED(depsgraph),
         Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 {
-	InstanceGpencilModifierData *mmd = (InstanceGpenc

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list