[Bf-blender-cvs] [18f3e5f5658] greasepencil-object: GPencil: Implement random offset in Array modifier

Antonio Vazquez noreply at git.blender.org
Fri Feb 28 16:36:31 CET 2020


Commit: 18f3e5f5658611cc7d88b1d025499d8651f9c696
Author: Antonio Vazquez
Date:   Fri Feb 28 09:49:51 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB18f3e5f5658611cc7d88b1d025499d8651f9c696

GPencil: Implement random offset in Array modifier

Still pending define a variable seed

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

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 1226df48091..d120e26ec53 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1969,6 +1969,9 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         subcol = col.column()
         subcol.enabled = md.use_constant_offset
         subcol.prop(md, "constant_offset", text="")
+        row = subcol.row(align=True)
+        row.prop(md, "use_random_offset", text="", icon='TIME', toggle=True)
+        row.prop(md, "random_offset_factor", text="")
 
         col.prop(md, "use_object_offset")
         subcol = col.column()
@@ -1980,20 +1983,23 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
         subcol = col.column()
         subcol.enabled = md.use_relative_offset
         subcol.prop(md, "relative_offset", text="")
+        row = subcol.row(align=True)
+        row.prop(md, "use_random_relative", text="", icon='TIME', toggle=True)
+        row.prop(md, "random_relative_factor", text="")
 
         split = layout.split()
         col = split.column()
         col.label(text="Rotation:")
         col.prop(md, "rotation", text="")
         row = col.row(align=True)
-        row.prop(md, "random_rot", text="", icon='TIME', toggle=True)
+        row.prop(md, "use_random_rot", text="", icon='TIME', toggle=True)
         row.prop(md, "rot_factor", text="")
 
         col = split.column()
         col.label(text="Scale:")
         col.prop(md, "scale", text="")
         row = col.row(align=True)
-        row.prop(md, "random_scale", text="", icon='TIME', toggle=True)
+        row.prop(md, "use_random_scale", text="", icon='TIME', toggle=True)
         row.prop(md, "scale_factor", text="")
 
         col = layout.column()
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 82a97481748..2f267d51114 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -69,11 +69,12 @@ static void initData(GpencilModifierData *md)
   gpmd->shift[2] = 0.0f;
   zero_v3(gpmd->offset);
   copy_v3_fl(gpmd->scale, 1.0f);
+  gpmd->rnd_offset = 0.5f;
+  gpmd->rnd_relative = 0.5f;
   gpmd->rnd_rot = 0.5f;
   gpmd->rnd_size = 0.5f;
   gpmd->object = NULL;
   gpmd->flag |= GP_ARRAY_USE_RELATIVE;
-
   /* fill random values */
   BLI_array_frand(gpmd->rnd, 20, 1);
   gpmd->rnd[0] = 1;
@@ -105,6 +106,13 @@ static void BKE_gpencil_instance_modifier_instance_tfm(Object *ob,
     zero_v3(offset);
   }
 
+  /* Random constant offset */
+  if (mmd->flag & GP_ARRAY_RANDOM_OFFSET) {
+    float rnd_offset[3];
+    mul_v3_v3fl(rnd_offset, mmd->offset, mmd->rnd_offset * mmd->rnd[ri]);
+    add_v3_v3(offset, rnd_offset);
+  }
+
   /* rotation */
   if (mmd->flag & GP_ARRAY_RANDOM_ROT) {
     factor = mmd->rnd_rot * mmd->rnd[ri];
@@ -164,6 +172,7 @@ static void generate_geometry(GpencilModifierData *md,
   /* Load the strokes to be duplicated. */
   bGPdata *gpd = (bGPdata *)ob->data;
   bool found = false;
+  int ri = 1;
 
   /* Get bounbox for relative offset. */
   float size[3] = {0.0f, 0.0f, 0.0f};
@@ -236,6 +245,13 @@ static void generate_geometry(GpencilModifierData *md,
         float relative[3];
         mul_v3_v3v3(relative, mmd->shift, size);
         madd_v3_v3fl(current_offset[3], relative, x);
+
+        /* Random relative offset. */
+        if (mmd->flag & GP_ARRAY_RANDOM_RELATIVE) {
+          float rnd_shift[3];
+          mul_v3_v3fl(rnd_shift, mmd->shift, mmd->rnd_relative * mmd->rnd[ri]);
+          add_v3_v3(current_offset[3], rnd_shift);
+        }
       }
 
       /* Duplicate original strokes to create this instance. */
@@ -264,6 +280,12 @@ static void generate_geometry(GpencilModifierData *md,
         /* Add new stroke. */
         BLI_addhead(&iter->gpf->strokes, gps_dst);
       }
+
+      /* Advance random index. */
+      ri++;
+      if (ri > 19) {
+        ri = 1;
+      }
     }
 
     /* Free temp data. */
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index 92877d5ee0b..6b5af3bce66 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -315,6 +315,10 @@ typedef struct ArrayGpencilModifierData {
   float rnd_size;
   /** Random size factor. */
   float rnd_rot;
+  /** Random constant offset factor. */
+  float rnd_offset;
+  /** Random relative offset factor. */
+  float rnd_relative;
   /** Rotation changes. */
   float rot[3];
   /** Scale changes. */
@@ -345,6 +349,8 @@ typedef enum eArrayGpencil_Flag {
   GP_ARRAY_USE_OFFSET = (1 << 7),
   GP_ARRAY_USE_RELATIVE = (1 << 8),
   GP_ARRAY_USE_OB_OFFSET = (1 << 9),
+  GP_ARRAY_RANDOM_OFFSET = (1 << 10),
+  GP_ARRAY_RANDOM_RELATIVE = (1 << 11),
 } 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 0838bc2a2fb..adb7c1e2dda 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1317,7 +1317,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
   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, "random_rot", PROP_BOOLEAN, PROP_NONE);
+  prop = RNA_def_property(srna, "use_random_rot", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_ROT);
   RNA_def_property_ui_text(prop, "Random Rotation", "Use random factors for rotation");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
@@ -1328,7 +1328,7 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
   RNA_def_property_range(prop, -10.0, 10.0);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
-  prop = RNA_def_property(srna, "random_scale", PROP_BOOLEAN, PROP_NONE);
+  prop = RNA_def_property(srna, "use_random_scale", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_SIZE);
   RNA_def_property_ui_text(prop, "Random Scale", "Use random factors for scale");
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
@@ -1339,6 +1339,28 @@ static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
   RNA_def_property_range(prop, -10.0, 10.0);
   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
 
+  prop = RNA_def_property(srna, "random_offset_factor", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "rnd_offset");
+  RNA_def_property_ui_text(prop, "Random Factor", "Random factor for constant offset");
+  RNA_def_property_range(prop, -10.0, 10.0);
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "random_relative_factor", PROP_FLOAT, PROP_NONE);
+  RNA_def_property_float_sdna(prop, NULL, "rnd_relative");
+  RNA_def_property_range(prop, -10.0, 10.0);
+  RNA_def_property_ui_text(prop, "Random Factor", "Random factor for relative offset");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "use_random_offset", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_OFFSET);
+  RNA_def_property_ui_text(prop, "Random", "Use random factor for constant offset");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+  prop = RNA_def_property(srna, "use_random_relative", PROP_BOOLEAN, PROP_NONE);
+  RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_RELATIVE);
+  RNA_def_property_ui_text(prop, "Random", "Use random factor for relative offset");
+  RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
   prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
   RNA_def_property_int_sdna(prop, NULL, "mat_rpl");
   RNA_def_property_range(prop, 0, SHRT_MAX);



More information about the Bf-blender-cvs mailing list