[Bf-blender-cvs] [1ee5236c8c3] greasepencil-object: GPencil: Change Array modifier to use Relative Offset

Antonio Vazquez noreply at git.blender.org
Thu Feb 27 19:50:56 CET 2020


Commit: 1ee5236c8c3bdcad8be8cf82d0983e0a8c8612a3
Author: Antonio Vazquez
Date:   Thu Feb 27 19:50:43 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB1ee5236c8c3bdcad8be8cf82d0983e0a8c8612a3

GPencil: Change Array modifier to use Relative Offset

The old shift parameter was related to Instances, but not as array.

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

M	release/scripts/startup/bl_ui/properties_data_modifier.py
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 3e0d4f217b3..75d8a740f74 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1965,10 +1965,10 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
 
         split = layout.split()
         col = split.column()
-        col.prop(md, "use_offset")
+        col.prop(md, "use_constant_offset", text="Constant Offset")
         subcol = col.column()
-        subcol.enabled = md.use_offset
-        subcol.prop(md, "offset", text="")
+        subcol.enabled = md.use_constant_offset
+        subcol.prop(md, "constant_offset", text="")
 
         col.prop(md, "use_object_offset")
         subcol = col.column()
@@ -1976,10 +1976,10 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         subcol.prop(md, "offset_object", text="")
 
         col = split.column()
-        col.prop(md, "use_shift")
+        col.prop(md, "use_relative_offset", text="Relative Offset")
         subcol = col.column()
-        subcol.enabled = md.use_shift
-        subcol.prop(md, "shift", text="")
+        subcol.enabled = md.use_relative_offset
+        subcol.prop(md, "relative_offset", text="")
 
         split = layout.split()
         col = split.column()
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 76c0340e45f..5466080d982 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -101,6 +101,9 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
     offset[1] = mmd->offset[1] * elem_idx;
     offset[2] = mmd->offset[2] * elem_idx;
   }
+  else {
+    zero_v3(offset);
+  }
 
   /* rotation */
   if (mmd->flag & GP_ARRAY_RANDOM_ROT) {
@@ -162,6 +165,18 @@ static void generate_geometry(GpencilModifierData *md,
   bGPdata *gpd = (bGPdata *)ob->data;
   bool found = false;
 
+  /* Get bounbox for relative offset. */
+  float size[3] = {0.0f, 0.0f, 0.0f};
+  if (mmd->flag & GP_ARRAY_USE_RELATIVE) {
+    BoundBox *bb = BKE_object_boundbox_get(ob);
+    if (bb == NULL) {
+      const float min[3] = {-1.0f, -1.0f, -1.0f}, max[3] = {1.0f, 1.0f, 1.0f};
+      BKE_boundbox_init_from_minmax(bb, min, max);
+    }
+    BKE_boundbox_calc_size_aabb(bb, size);
+    mul_v3_fl(size, 2.0f);
+  }
+
   LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) {
     bGPDframe *gpf = BKE_gpencil_frame_retime_get(depsgraph, scene, ob, gpl);
     if (gpf == NULL) {
@@ -216,10 +231,13 @@ static void generate_geometry(GpencilModifierData *md,
       else {
         copy_m4_m4(current_offset, mat);
       }
-      /* apply shift */
-      if (mmd->flag & GP_ARRAY_USE_SHIFT) {
-        madd_v3_v3fl(current_offset[3], mmd->shift, x);
+      /* Apply relative offset. */
+      if (mmd->flag & GP_ARRAY_USE_RELATIVE) {
+        float relative[3];
+        mul_v3_v3v3(relative, mmd->shift, size);
+        madd_v3_v3fl(current_offset[3], relative, x);
       }
+
       /* Duplicate original strokes to create this instance. */
       LISTBASE_FOREACH_BACKWARD (tmpStrokes *, iter, &stroke_cache) {
         /* Duplicate stroke */
@@ -229,7 +247,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->flag & GP_ARRAY_USE_OB_OFFSET) &&(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 e0bf8750025..92877d5ee0b 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -343,7 +343,7 @@ typedef enum eArrayGpencil_Flag {
   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_RELATIVE = (1 << 8),
   GP_ARRAY_USE_OB_OFFSET = (1 << 9),
 } eArrayGpencil_Flag;
 
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 02bac8dc347..ee7c903498b 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1246,7 +1246,7 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 }
 
-static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
+static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
 {
   StructRNA *srna;
   PropertyRNA *prop;
@@ -1290,15 +1290,16 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
 
-  prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
+  prop = RNA_def_property(srna, "constant_offset", PROP_FLOAT, PROP_TRANSLATION);
   RNA_def_property_float_sdna(prop, NULL, "offset");
-  RNA_def_property_ui_text(prop, "Offset", "Value for the distance between items");
+  RNA_def_property_ui_text(prop, "Constant Offset", "Value for the distance between items");
   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
-  prop = RNA_def_property(srna, "shift", PROP_FLOAT, PROP_TRANSLATION);
+  prop = RNA_def_property(srna, "relative_offset", PROP_FLOAT, PROP_TRANSLATION);
   RNA_def_property_float_sdna(prop, NULL, "shift");
-  RNA_def_property_ui_text(prop, "Shift", "Shiftiness value");
+  RNA_def_property_ui_text(
+      prop, "Relative Offset", "Value for the distance between items bounding box");
   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
@@ -1371,7 +1372,7 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
   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);
+  prop = RNA_def_property(srna, "use_constant_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");
@@ -1381,8 +1382,8 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
   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);
+  prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_RELATIVE);
   RNA_def_property_ui_text(prop, "Shift", "Enable shift");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 }
@@ -2140,7 +2141,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna)
   rna_def_modifier_gpenciltint(brna);
   rna_def_modifier_gpenciltime(brna);
   rna_def_modifier_gpencilcolor(brna);
-  rna_def_modifier_gpencilinstance(brna);
+  rna_def_modifier_gpencilarray(brna);
   rna_def_modifier_gpencilbuild(brna);
   rna_def_modifier_gpencilopacity(brna);
   rna_def_modifier_gpencillattice(brna);



More information about the Bf-blender-cvs mailing list