[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