[Bf-blender-cvs] [4ed65048efe] greasepencil-object: GPencil: Add switches to Array modiifer

Antonio Vazquez noreply at git.blender.org
Thu Feb 27 10:55:47 CET 2020


Commit: 4ed65048efeb255dae87b17e5eb4e6d8c5876024
Author: Antonio Vazquez
Date:   Thu Feb 27 10:55:38 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB4ed65048efeb255dae87b17e5eb4e6d8c5876024

GPencil: Add switches to Array modiifer

New switches to enable Offset, Shift and Object transform.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarray.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 f4ac128519b..3e0d4f217b3 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1965,13 +1965,21 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
 
         split = layout.split()
         col = split.column()
-        col.label(text="Offset:")
-        col.prop(md, "offset", text="")
-        col.prop(md, "offset_object", text="Object")
+        col.prop(md, "use_offset")
+        subcol = col.column()
+        subcol.enabled = md.use_offset
+        subcol.prop(md, "offset", text="")
+
+        col.prop(md, "use_object_offset")
+        subcol = col.column()
+        subcol.enabled = md.use_object_offset
+        subcol.prop(md, "offset_object", text="")
 
         col = split.column()
-        col.label(text="Shift:")
-        col.prop(md, "shift", text="")
+        col.prop(md, "use_shift")
+        subcol = col.column()
+        subcol.enabled = md.use_shift
+        subcol.prop(md, "shift", text="")
 
         split = layout.split()
         col = split.column()
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 310cd73829a..a09c29c29a2 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -4477,6 +4477,20 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
         LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) {
           const GpencilModifierTypeInfo *mti = BKE_gpencil_modifierType_getInfo(md->type);
           switch (mti->type) {
+            case eGpencilModifierType_Array: {
+              ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md;
+              if ((mmd->offset[0] != 0.0f) || (mmd->offset[1] != 0.0f) ||
+                  (mmd->offset[2] != 0.0f)) {
+                mmd->flag |= GP_ARRAY_USE_OFFSET;
+              }
+              if ((mmd->shift[0] != 0.0f) || (mmd->shift[1] != 0.0f) || (mmd->shift[2] != 0.0f)) {
+                mmd->flag |= GP_ARRAY_USE_OFFSET;
+              }
+              if (mmd->object != NULL) {
+                mmd->flag |= GP_ARRAY_USE_OB_OFFSET;
+              }
+              break;
+            }
             case eGpencilModifierType_Tint: {
               TintGpencilModifierData *mmd = (TintGpencilModifierData *)md;
               srgb_to_linearrgb_v3_v3(mmd->rgb, mmd->rgb);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index f5eb15a54dc..76c0340e45f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -72,6 +72,7 @@ static void initData(GpencilModifierData *md)
   gpmd->rnd_rot = 0.5f;
   gpmd->rnd_size = 0.5f;
   gpmd->object = NULL;
+  gpmd->flag |= GP_ARRAY_USE_OFFSET;
 
   /* fill random values */
   BLI_array_frand(gpmd->rnd, 20, 1);
@@ -95,9 +96,11 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
   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;
+  if (mmd->flag & GP_ARRAY_USE_OFFSET) {
+    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) {
@@ -131,7 +134,7 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
   copy_m4_m4(r_offset, r_mat);
 
   /* offset object */
-  if (mmd->object) {
+  if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
     float mat_offset[4][4];
     float obinv[4][4];
 
@@ -206,7 +209,7 @@ static void generate_geometry(GpencilModifierData *md,
       float mat_offset[4][4];
       BKE_gpencil_instance_modifier_instance_tfm(ob, mmd, x, mat, mat_offset);
 
-      if (mmd->object) {
+      if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
         /* recalculate cumulative offset here */
         mul_m4_m4m4(current_offset, current_offset, mat_offset);
       }
@@ -214,8 +217,9 @@ static void generate_geometry(GpencilModifierData *md,
         copy_m4_m4(current_offset, mat);
       }
       /* apply shift */
-      madd_v3_v3fl(current_offset[3], mmd->shift, x);
-
+      if (mmd->flag & GP_ARRAY_USE_SHIFT) {
+        madd_v3_v3fl(current_offset[3], mmd->shift, x);
+      }
       /* Duplicate original strokes to create this instance. */
       LISTBASE_FOREACH_BACKWARD (tmpStrokes *, iter, &stroke_cache) {
         /* Duplicate stroke */
@@ -225,7 +229,7 @@ static void generate_geometry(GpencilModifierData *md,
         for (int i = 0; i < iter->gps->totpoints; i++) {
           bGPDspoint *pt = &gps_dst->points[i];
           /* Apply object local transform (Rot/Scale). */
-          if (mmd->object) {
+          if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) &&(mmd->object)) {
             mul_m4_v3(mat, &pt->x);
           }
           /* Global Rotate and scale. */
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index 017af2173dd..e0bf8750025 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -342,6 +342,9 @@ typedef enum eArrayGpencil_Flag {
   GP_ARRAY_INVERT_PASS = (1 << 3),
   GP_ARRAY_INVERT_LAYERPASS = (1 << 5),
   GP_ARRAY_INVERT_MATERIAL = (1 << 6),
+  GP_ARRAY_USE_OFFSET = (1 << 7),
+  GP_ARRAY_USE_SHIFT = (1 << 8),
+  GP_ARRAY_USE_OB_OFFSET = (1 << 9),
 } eArrayGpencil_Flag;
 
 typedef struct BuildGpencilModifierData {
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 7fe97e2313e..cbd35157a37 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1370,6 +1370,21 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_LAYERPASS);
   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "use_offset", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OFFSET);
+  RNA_def_property_ui_text(prop, "Offset", "Enable offset");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OB_OFFSET);
+  RNA_def_property_ui_text(prop, "Object Offset", "Enable obejct offset");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "use_shift", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_SHIFT);
+  RNA_def_property_ui_text(prop, "Shift", "Enable shift");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 }
 
 static void rna_def_modifier_gpencilbuild(BlenderRNA *brna)



More information about the Bf-blender-cvs mailing list