1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 /** \file
18  * \ingroup RNA
19  */
20 
21 #include <float.h>
22 #include <limits.h>
23 #include <stdlib.h>
24 
25 #include "DNA_armature_types.h"
26 #include "DNA_brush_types.h"
27 #include "DNA_cachefile_types.h"
28 #include "DNA_gpencil_modifier_types.h"
29 #include "DNA_mesh_types.h"
30 #include "DNA_object_force_types.h"
31 #include "DNA_object_types.h"
32 #include "DNA_scene_types.h"
33 
34 #include "MEM_guardedalloc.h"
35 
36 #include "BLI_math.h"
37 #include "BLI_rand.h"
38 
39 #include "BLT_translation.h"
40 
41 #include "BKE_animsys.h"
42 #include "BKE_data_transfer.h"
43 #include "BKE_dynamicpaint.h"
44 #include "BKE_effect.h"
45 #include "BKE_fluid.h" /* For BKE_fluid_modifier_free & BKE_fluid_modifier_create_type_data */
46 #include "BKE_mesh_mapping.h"
47 #include "BKE_mesh_remap.h"
48 #include "BKE_multires.h"
49 
50 #include "RNA_access.h"
51 #include "RNA_define.h"
52 #include "RNA_enum_types.h"
53 
54 #include "rna_internal.h"
55 
56 #include "WM_api.h"
57 #include "WM_types.h"
58 
59 const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = {
60     {0, "", 0, N_("Generate"), ""},
61     {eGpencilModifierType_Array,
62      "GP_ARRAY",
63      ICON_MOD_ARRAY,
64      "Array",
65      "Create array of duplicate instances"},
66     {eGpencilModifierType_Build,
67      "GP_BUILD",
68      ICON_MOD_BUILD,
69      "Build",
70      "Create duplication of strokes"},
71     {eGpencilModifierType_Mirror,
72      "GP_MIRROR",
73      ICON_MOD_MIRROR,
74      "Mirror",
75      "Duplicate strokes like a mirror"},
76     {eGpencilModifierType_Multiply,
77      "GP_MULTIPLY",
78      ICON_GP_MULTIFRAME_EDITING,
79      "Multiple Strokes",
80      "Produce multiple strokes along one stroke"},
81     {eGpencilModifierType_Simplify,
82      "GP_SIMPLIFY",
83      ICON_MOD_SIMPLIFY,
84      "Simplify",
85      "Simplify stroke reducing number of points"},
86     {eGpencilModifierType_Subdiv,
87      "GP_SUBDIV",
88      ICON_MOD_SUBSURF,
89      "Subdivide",
90      "Subdivide stroke adding more control points"},
91     {0, "", 0, N_("Deform"), ""},
92     {eGpencilModifierType_Armature,
93      "GP_ARMATURE",
94      ICON_MOD_ARMATURE,
95      "Armature",
96      "Deform stroke points using armature object"},
97     {eGpencilModifierType_Hook,
98      "GP_HOOK",
99      ICON_HOOK,
100      "Hook",
101      "Deform stroke points using objects"},
102     {eGpencilModifierType_Lattice,
103      "GP_LATTICE",
104      ICON_MOD_LATTICE,
105      "Lattice",
106      "Deform strokes using lattice"},
107     {eGpencilModifierType_Noise, "GP_NOISE", ICON_MOD_NOISE, "Noise", "Add noise to strokes"},
108     {eGpencilModifierType_Offset,
109      "GP_OFFSET",
110      ICON_MOD_OFFSET,
111      "Offset",
112      "Change stroke location, rotation or scale"},
113     {eGpencilModifierType_Smooth, "GP_SMOOTH", ICON_MOD_SMOOTH, "Smooth", "Smooth stroke"},
114     {eGpencilModifierType_Thick,
115      "GP_THICK",
116      ICON_MOD_THICKNESS,
117      "Thickness",
118      "Change stroke thickness"},
119     {eGpencilModifierType_Time, "GP_TIME", ICON_MOD_TIME, "Time Offset", "Offset keyframes"},
120     {0, "", 0, N_("Color"), ""},
121     {eGpencilModifierType_Color,
122      "GP_COLOR",
123      ICON_MOD_HUE_SATURATION,
124      "Hue/Saturation",
125      "Apply changes to stroke colors"},
126     {eGpencilModifierType_Opacity,
127      "GP_OPACITY",
128      ICON_MOD_OPACITY,
129      "Opacity",
130      "Opacity of the strokes"},
131     {eGpencilModifierType_Texture,
132      "GP_TEXTURE",
133      ICON_TEXTURE,
134      "Texture Mapping",
135      "Change stroke uv texture values"},
136     {eGpencilModifierType_Tint, "GP_TINT", ICON_MOD_TINT, "Tint", "Tint strokes with new color"},
137     {0, NULL, 0, NULL, NULL},
138 };
139 
140 #ifndef RNA_RUNTIME
141 static const EnumPropertyItem modifier_modify_color_items[] = {
142     {GP_MODIFY_COLOR_BOTH, "BOTH", 0, "Stroke and Fill", "Modify fill and stroke colors"},
143     {GP_MODIFY_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
144     {GP_MODIFY_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
145     {0, NULL, 0, NULL, NULL},
146 };
147 
148 static const EnumPropertyItem modifier_modify_opacity_items[] = {
149     {GP_MODIFY_COLOR_BOTH, "BOTH", 0, "Stroke and Fill", "Modify fill and stroke colors"},
150     {GP_MODIFY_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
151     {GP_MODIFY_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
152     {GP_MODIFY_COLOR_HARDNESS, "HARDNESS", 0, "Hardness", "Modify stroke hardness"},
153     {0, NULL, 0, NULL, NULL},
154 };
155 
156 static const EnumPropertyItem modifier_gphook_falloff_items[] = {
157     {eGPHook_Falloff_None, "NONE", 0, "No Falloff", ""},
158     {eGPHook_Falloff_Curve, "CURVE", 0, "Curve", ""},
159     {eGPHook_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
160     {eGPHook_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
161     {eGPHook_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
162     {eGPHook_Falloff_InvSquare, "INVERSE_SQUARE", ICON_ROOTCURVE, "Inverse Square", ""},
163     {eGPHook_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
164     {eGPHook_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
165     {eGPHook_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
166     {0, NULL, 0, NULL, NULL},
167 };
168 
169 static const EnumPropertyItem rna_enum_time_mode_items[] = {
170     {GP_TIME_MODE_NORMAL, "NORMAL", 0, "Regular", "Apply offset in usual animation direction"},
171     {GP_TIME_MODE_REVERSE, "REVERSE", 0, "Reverse", "Apply offset in reverse animation direction"},
172     {GP_TIME_MODE_FIX, "FIX", 0, "Fixed Frame", "Keep frame and do not change with time"},
173     {0, NULL, 0, NULL, NULL},
174 };
175 
176 static const EnumPropertyItem gpencil_subdivision_type_items[] = {
177     {GP_SUBDIV_CATMULL, "CATMULL_CLARK", 0, "Catmull-Clark", ""},
178     {GP_SUBDIV_SIMPLE, "SIMPLE", 0, "Simple", ""},
179     {0, NULL, 0, NULL, NULL},
180 };
181 static const EnumPropertyItem gpencil_tint_type_items[] = {
182     {GP_TINT_UNIFORM, "UNIFORM", 0, "Uniform", ""},
183     {GP_TINT_GRADIENT, "GRADIENT", 0, "Gradient", ""},
184     {0, NULL, 0, NULL, NULL},
185 };
186 #endif
187 
188 #ifdef RNA_RUNTIME
189 
190 #  include "DNA_curve_types.h"
191 #  include "DNA_fluid_types.h"
192 #  include "DNA_particle_types.h"
193 
194 #  include "BKE_cachefile.h"
195 #  include "BKE_context.h"
196 #  include "BKE_gpencil.h"
197 #  include "BKE_gpencil_modifier.h"
198 #  include "BKE_object.h"
199 
200 #  include "DEG_depsgraph.h"
201 #  include "DEG_depsgraph_build.h"
202 
rna_GpencilModifier_refine(struct PointerRNA * ptr)203 static StructRNA *rna_GpencilModifier_refine(struct PointerRNA *ptr)
204 {
205   GpencilModifierData *md = (GpencilModifierData *)ptr->data;
206 
207   switch ((GpencilModifierType)md->type) {
208     case eGpencilModifierType_Noise:
209       return &RNA_NoiseGpencilModifier;
210     case eGpencilModifierType_Subdiv:
211       return &RNA_SubdivGpencilModifier;
212     case eGpencilModifierType_Simplify:
213       return &RNA_SimplifyGpencilModifier;
214     case eGpencilModifierType_Thick:
215       return &RNA_ThickGpencilModifier;
216     case eGpencilModifierType_Tint:
217       return &RNA_TintGpencilModifier;
218     case eGpencilModifierType_Time:
219       return &RNA_TimeGpencilModifier;
220     case eGpencilModifierType_Color:
221       return &RNA_ColorGpencilModifier;
222     case eGpencilModifierType_Array:
223       return &RNA_ArrayGpencilModifier;
224     case eGpencilModifierType_Build:
225       return &RNA_BuildGpencilModifier;
226     case eGpencilModifierType_Opacity:
227       return &RNA_OpacityGpencilModifier;
228     case eGpencilModifierType_Lattice:
229       return &RNA_LatticeGpencilModifier;
230     case eGpencilModifierType_Mirror:
231       return &RNA_MirrorGpencilModifier;
232     case eGpencilModifierType_Smooth:
233       return &RNA_SmoothGpencilModifier;
234     case eGpencilModifierType_Hook:
235       return &RNA_HookGpencilModifier;
236     case eGpencilModifierType_Offset:
237       return &RNA_OffsetGpencilModifier;
238     case eGpencilModifierType_Armature:
239       return &RNA_ArmatureGpencilModifier;
240     case eGpencilModifierType_Multiply:
241       return &RNA_MultiplyGpencilModifier;
242     case eGpencilModifierType_Texture:
243       return &RNA_TextureGpencilModifier;
244       /* Default */
245     case eGpencilModifierType_None:
246     case NUM_GREASEPENCIL_MODIFIER_TYPES:
247       return &RNA_GpencilModifier;
248   }
249 
250   return &RNA_GpencilModifier;
251 }
252 
rna_GpencilModifier_name_set(PointerRNA * ptr,const char * value)253 static void rna_GpencilModifier_name_set(PointerRNA *ptr, const char *value)
254 {
255   GpencilModifierData *gmd = ptr->data;
256   char oldname[sizeof(gmd->name)];
257 
258   /* make a copy of the old name first */
259   BLI_strncpy(oldname, gmd->name, sizeof(gmd->name));
260 
261   /* copy the new name into the name slot */
262   BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
263 
264   /* make sure the name is truly unique */
265   if (ptr->owner_id) {
266     Object *ob = (Object *)ptr->owner_id;
267     BKE_gpencil_modifier_unique_name(&ob->greasepencil_modifiers, gmd);
268   }
269 
270   /* fix all the animation data which may link to this */
271   BKE_animdata_fix_paths_rename_all(NULL, "grease_pencil_modifiers", oldname, gmd->name);
272 }
273 
rna_GpencilModifier_path(PointerRNA * ptr)274 static char *rna_GpencilModifier_path(PointerRNA *ptr)
275 {
276   GpencilModifierData *gmd = ptr->data;
277   char name_esc[sizeof(gmd->name) * 2];
278 
279   BLI_strescape(name_esc, gmd->name, sizeof(name_esc));
280   return BLI_sprintfN("grease_pencil_modifiers[\"%s\"]", name_esc);
281 }
282 
rna_GpencilModifier_update(Main * UNUSED (bmain),Scene * UNUSED (scene),PointerRNA * ptr)283 static void rna_GpencilModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
284 {
285   DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
286   WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->owner_id);
287 }
288 
rna_GpencilModifier_dependency_update(Main * bmain,Scene * scene,PointerRNA * ptr)289 static void rna_GpencilModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
290 {
291   rna_GpencilModifier_update(bmain, scene, ptr);
292   DEG_relations_tag_update(bmain);
293 }
294 
295 /* Vertex Groups */
296 
297 #  define RNA_GP_MOD_VGROUP_NAME_SET(_type, _prop) \
298     static void rna_##_type##GpencilModifier_##_prop##_set(PointerRNA *ptr, const char *value) \
299     { \
300       _type##GpencilModifierData *tmd = (_type##GpencilModifierData *)ptr->data; \
301       rna_object_vgroup_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
302     }
303 
304 RNA_GP_MOD_VGROUP_NAME_SET(Noise, vgname);
305 RNA_GP_MOD_VGROUP_NAME_SET(Thick, vgname);
306 RNA_GP_MOD_VGROUP_NAME_SET(Opacity, vgname);
307 RNA_GP_MOD_VGROUP_NAME_SET(Lattice, vgname);
308 RNA_GP_MOD_VGROUP_NAME_SET(Smooth, vgname);
309 RNA_GP_MOD_VGROUP_NAME_SET(Hook, vgname);
310 RNA_GP_MOD_VGROUP_NAME_SET(Offset, vgname);
311 RNA_GP_MOD_VGROUP_NAME_SET(Armature, vgname);
312 RNA_GP_MOD_VGROUP_NAME_SET(Texture, vgname);
313 RNA_GP_MOD_VGROUP_NAME_SET(Tint, vgname);
314 
315 #  undef RNA_GP_MOD_VGROUP_NAME_SET
316 
317 /* Objects */
318 
greasepencil_modifier_object_set(Object * self,Object ** ob_p,int type,PointerRNA value)319 static void greasepencil_modifier_object_set(Object *self,
320                                              Object **ob_p,
321                                              int type,
322                                              PointerRNA value)
323 {
324   Object *ob = value.data;
325 
326   if (!self || ob != self) {
327     if (!ob || type == OB_EMPTY || ob->type == type) {
328       id_lib_extern((ID *)ob);
329       *ob_p = ob;
330     }
331   }
332 }
333 
334 #  define RNA_GP_MOD_OBJECT_SET(_type, _prop, _obtype) \
335     static void rna_##_type##GpencilModifier_##_prop##_set( \
336         PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
337     { \
338       _type##GpencilModifierData *tmd = (_type##GpencilModifierData *)ptr->data; \
339       greasepencil_modifier_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
340     }
341 
342 RNA_GP_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
343 RNA_GP_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
344 RNA_GP_MOD_OBJECT_SET(Mirror, object, OB_EMPTY);
345 
346 #  undef RNA_GP_MOD_OBJECT_SET
347 
rna_HookGpencilModifier_object_set(PointerRNA * ptr,PointerRNA value,struct ReportList * UNUSED (reports))348 static void rna_HookGpencilModifier_object_set(PointerRNA *ptr,
349                                                PointerRNA value,
350                                                struct ReportList *UNUSED(reports))
351 {
352   HookGpencilModifierData *hmd = ptr->data;
353   Object *ob = (Object *)value.data;
354 
355   hmd->object = ob;
356   id_lib_extern((ID *)ob);
357   BKE_object_modifier_gpencil_hook_reset(ob, hmd);
358 }
359 
rna_TintGpencilModifier_object_set(PointerRNA * ptr,PointerRNA value,struct ReportList * UNUSED (reports))360 static void rna_TintGpencilModifier_object_set(PointerRNA *ptr,
361                                                PointerRNA value,
362                                                struct ReportList *UNUSED(reports))
363 {
364   TintGpencilModifierData *hmd = ptr->data;
365   Object *ob = (Object *)value.data;
366 
367   hmd->object = ob;
368   id_lib_extern((ID *)ob);
369 }
370 
rna_TimeModifier_start_frame_set(PointerRNA * ptr,int value)371 static void rna_TimeModifier_start_frame_set(PointerRNA *ptr, int value)
372 {
373   TimeGpencilModifierData *tmd = ptr->data;
374   CLAMP(value, MINFRAME, MAXFRAME);
375   tmd->sfra = value;
376 
377   if (tmd->sfra >= tmd->efra) {
378     tmd->efra = MIN2(tmd->sfra, MAXFRAME);
379   }
380 }
381 
rna_TimeModifier_end_frame_set(PointerRNA * ptr,int value)382 static void rna_TimeModifier_end_frame_set(PointerRNA *ptr, int value)
383 {
384   TimeGpencilModifierData *tmd = ptr->data;
385   CLAMP(value, MINFRAME, MAXFRAME);
386   tmd->efra = value;
387 
388   if (tmd->sfra >= tmd->efra) {
389     tmd->sfra = MAX2(tmd->efra, MINFRAME);
390   }
391 }
392 
rna_GpencilOpacity_range(PointerRNA * ptr,float * min,float * max,float * softmin,float * softmax)393 static void rna_GpencilOpacity_range(
394     PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
395 {
396   OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data;
397 
398   *min = 0.0f;
399   *softmin = 0.0f;
400 
401   *softmax = (md->flag & GP_OPACITY_NORMALIZE) ? 1.0f : 2.0f;
402   *max = *softmax;
403 }
404 
rna_GpencilOpacity_max_set(PointerRNA * ptr,float value)405 static void rna_GpencilOpacity_max_set(PointerRNA *ptr, float value)
406 {
407   OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data;
408 
409   md->factor = value;
410   if (md->flag & GP_OPACITY_NORMALIZE) {
411     if (md->factor > 1.0f) {
412       md->factor = 1.0f;
413     }
414   }
415 }
416 
rna_GpencilModifier_opacity_update(Main * bmain,Scene * scene,PointerRNA * ptr)417 static void rna_GpencilModifier_opacity_update(Main *bmain, Scene *scene, PointerRNA *ptr)
418 {
419   OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data;
420   if (md->flag & GP_OPACITY_NORMALIZE) {
421     if (md->factor > 1.0f) {
422       md->factor = 1.0f;
423     }
424   }
425 
426   rna_GpencilModifier_update(bmain, scene, ptr);
427 }
428 
429 #else
430 
rna_def_modifier_gpencilnoise(BlenderRNA * brna)431 static void rna_def_modifier_gpencilnoise(BlenderRNA *brna)
432 {
433   StructRNA *srna;
434   PropertyRNA *prop;
435 
436   srna = RNA_def_struct(brna, "NoiseGpencilModifier", "GpencilModifier");
437   RNA_def_struct_ui_text(srna, "Noise Modifier", "Noise effect modifier");
438   RNA_def_struct_sdna(srna, "NoiseGpencilModifierData");
439   RNA_def_struct_ui_icon(srna, ICON_MOD_NOISE);
440 
441   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
442   RNA_def_property_string_sdna(prop, NULL, "layername");
443   RNA_def_property_ui_text(prop, "Layer", "Layer name");
444   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
445 
446   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
447   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
448   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
449   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
450   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
451 
452   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
453   RNA_def_property_string_sdna(prop, NULL, "vgname");
454   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
455   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_NoiseGpencilModifier_vgname_set");
456   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
457 
458   prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
459   RNA_def_property_float_sdna(prop, NULL, "factor");
460   RNA_def_property_range(prop, 0.0, FLT_MAX);
461   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
462   RNA_def_property_ui_text(prop, "Offset Factor", "Amount of noise to apply");
463   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
464 
465   prop = RNA_def_property(srna, "factor_strength", PROP_FLOAT, PROP_FACTOR);
466   RNA_def_property_float_sdna(prop, NULL, "factor_strength");
467   RNA_def_property_range(prop, 0.0, FLT_MAX);
468   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
469   RNA_def_property_ui_text(prop, "Strength Factor", "Amount of noise to apply to opacity");
470   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
471 
472   prop = RNA_def_property(srna, "factor_thickness", PROP_FLOAT, PROP_FACTOR);
473   RNA_def_property_float_sdna(prop, NULL, "factor_thickness");
474   RNA_def_property_range(prop, 0.0, FLT_MAX);
475   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
476   RNA_def_property_ui_text(prop, "Thickness Factor", "Amount of noise to apply to thickness");
477   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
478 
479   prop = RNA_def_property(srna, "factor_uvs", PROP_FLOAT, PROP_FACTOR);
480   RNA_def_property_float_sdna(prop, NULL, "factor_uvs");
481   RNA_def_property_range(prop, 0.0, FLT_MAX);
482   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
483   RNA_def_property_ui_text(prop, "UV Factor", "Amount of noise to apply uv rotation");
484   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
485 
486   prop = RNA_def_property(srna, "random", PROP_BOOLEAN, PROP_NONE);
487   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_USE_RANDOM);
488   RNA_def_property_ui_text(prop, "Random", "Use random values over time");
489   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
490 
491   prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
492   RNA_def_property_ui_text(prop, "Seed", "Random seed");
493   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
494 
495   prop = RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_FACTOR);
496   RNA_def_property_float_sdna(prop, NULL, "noise_scale");
497   RNA_def_property_range(prop, 0.0, 1.0);
498   RNA_def_property_ui_text(prop, "Noise Scale", "Scale the noise frequency");
499   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
500 
501   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
502   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_CUSTOM_CURVE);
503   RNA_def_property_ui_text(
504       prop, "Custom Curve", "Use a custom curve to define noise effect along the strokes");
505   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
506 
507   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
508   RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity");
509   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
510   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
511 
512   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
513   RNA_def_property_int_sdna(prop, NULL, "pass_index");
514   RNA_def_property_range(prop, 0, 100);
515   RNA_def_property_ui_text(prop, "Pass", "Pass index");
516   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
517 
518   prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
519   RNA_def_property_int_sdna(prop, NULL, "step");
520   RNA_def_property_range(prop, 1, 100);
521   RNA_def_property_ui_text(
522       prop, "Step", "Number of frames before recalculate random values again");
523   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
524 
525   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
526   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_LAYER);
527   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
528   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
529 
530   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
531   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_MATERIAL);
532   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
533   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
534 
535   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
536   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_PASS);
537   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
538   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
539 
540   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
541   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_VGROUP);
542   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
543   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
544 
545   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
546   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
547   RNA_def_property_range(prop, 0, 100);
548   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
549   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
550 
551   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
552   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_LAYERPASS);
553   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
554   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
555 }
556 
rna_def_modifier_gpencilsmooth(BlenderRNA * brna)557 static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna)
558 {
559   StructRNA *srna;
560   PropertyRNA *prop;
561 
562   srna = RNA_def_struct(brna, "SmoothGpencilModifier", "GpencilModifier");
563   RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smooth effect modifier");
564   RNA_def_struct_sdna(srna, "SmoothGpencilModifierData");
565   RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
566 
567   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
568   RNA_def_property_string_sdna(prop, NULL, "layername");
569   RNA_def_property_ui_text(prop, "Layer", "Layer name");
570   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
571 
572   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
573   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
574   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
575   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
576   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
577 
578   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
579   RNA_def_property_string_sdna(prop, NULL, "vgname");
580   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
581   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SmoothGpencilModifier_vgname_set");
582   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
583 
584   prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
585   RNA_def_property_float_sdna(prop, NULL, "factor");
586   RNA_def_property_range(prop, 0, 1);
587   RNA_def_property_ui_text(prop, "Factor", "Amount of smooth to apply");
588   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
589 
590   prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
591   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_LOCATION);
592   RNA_def_property_ui_text(
593       prop, "Affect Position", "The modifier affects the position of the point");
594   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
595 
596   prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
597   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_STRENGTH);
598   RNA_def_property_ui_text(
599       prop, "Affect Strength", "The modifier affects the color strength of the point");
600   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
601 
602   prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
603   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_THICKNESS);
604   RNA_def_property_ui_text(
605       prop, "Affect Thickness", "The modifier affects the thickness of the point");
606   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
607 
608   prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
609   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_UV);
610   RNA_def_property_ui_text(
611       prop, "Affect UV", "The modifier affects the UV rotation factor of the point");
612   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
613 
614   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
615   RNA_def_property_int_sdna(prop, NULL, "pass_index");
616   RNA_def_property_range(prop, 0, 100);
617   RNA_def_property_ui_text(prop, "Pass", "Pass index");
618   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
619 
620   prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
621   RNA_def_property_int_sdna(prop, NULL, "step");
622   RNA_def_property_range(prop, 1, 10);
623   RNA_def_property_ui_text(
624       prop, "Step", "Number of times to apply smooth (high numbers can reduce fps)");
625   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
626 
627   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
628   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_LAYER);
629   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
630   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
631 
632   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
633   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_MATERIAL);
634   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
635   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
636 
637   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
638   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_PASS);
639   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
640   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
641 
642   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
643   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_VGROUP);
644   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
645   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
646 
647   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
648   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
649   RNA_def_property_range(prop, 0, 100);
650   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
651   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
652 
653   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
654   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_LAYERPASS);
655   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
656   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
657 
658   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
659   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_CUSTOM_CURVE);
660   RNA_def_property_ui_text(
661       prop, "Custom Curve", "Use a custom curve to define smooth effect along the strokes");
662   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
663 
664   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
665   RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity");
666   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
667   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
668 }
669 
rna_def_modifier_gpencilsubdiv(BlenderRNA * brna)670 static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna)
671 {
672   StructRNA *srna;
673   PropertyRNA *prop;
674 
675   srna = RNA_def_struct(brna, "SubdivGpencilModifier", "GpencilModifier");
676   RNA_def_struct_ui_text(srna, "Subdivision Modifier", "Subdivide Stroke modifier");
677   RNA_def_struct_sdna(srna, "SubdivGpencilModifierData");
678   RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
679 
680   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
681   RNA_def_property_string_sdna(prop, NULL, "layername");
682   RNA_def_property_ui_text(prop, "Layer", "Layer name");
683   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
684 
685   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
686   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
687   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
688   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
689   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
690 
691   prop = RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
692   RNA_def_property_int_sdna(prop, NULL, "level");
693   RNA_def_property_range(prop, 0, 5);
694   RNA_def_property_ui_text(prop, "Level", "Number of subdivisions");
695   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
696 
697   prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
698   RNA_def_property_enum_sdna(prop, NULL, "type");
699   RNA_def_property_enum_items(prop, gpencil_subdivision_type_items);
700   RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
701   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
702 
703   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
704   RNA_def_property_int_sdna(prop, NULL, "pass_index");
705   RNA_def_property_range(prop, 0, 100);
706   RNA_def_property_ui_text(prop, "Pass", "Pass index");
707   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
708 
709   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
710   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_LAYER);
711   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
712   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
713 
714   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
715   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_MATERIAL);
716   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
717   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
718 
719   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
720   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_PASS);
721   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
722   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
723 
724   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
725   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
726   RNA_def_property_range(prop, 0, 100);
727   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
728   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
729 
730   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
731   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_LAYERPASS);
732   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
733   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
734 }
735 
rna_def_modifier_gpencilsimplify(BlenderRNA * brna)736 static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
737 {
738   StructRNA *srna;
739   PropertyRNA *prop;
740 
741   static EnumPropertyItem prop_gpencil_simplify_mode_items[] = {
742       {GP_SIMPLIFY_FIXED,
743        "FIXED",
744        ICON_IPO_CONSTANT,
745        "Fixed",
746        "Delete alternating vertices in the stroke, except extremes"},
747       {GP_SIMPLIFY_ADAPTIVE,
748        "ADAPTIVE",
749        ICON_IPO_EASE_IN_OUT,
750        "Adaptive",
751        "Use a Ramer-Douglas-Peucker algorithm to simplify the stroke preserving main shape"},
752       {GP_SIMPLIFY_SAMPLE,
753        "SAMPLE",
754        ICON_IPO_EASE_IN_OUT,
755        "Sample",
756        "Re-sample the stroke with segments of the specified length"},
757       {GP_SIMPLIFY_MERGE,
758        "MERGE",
759        ICON_IPO_EASE_IN_OUT,
760        "Merge",
761        "Simplify the stroke by merging vertices closer than a given distance"},
762       {0, NULL, 0, NULL, NULL},
763   };
764 
765   srna = RNA_def_struct(brna, "SimplifyGpencilModifier", "GpencilModifier");
766   RNA_def_struct_ui_text(srna, "Simplify Modifier", "Simplify Stroke modifier");
767   RNA_def_struct_sdna(srna, "SimplifyGpencilModifierData");
768   RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLIFY);
769 
770   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
771   RNA_def_property_string_sdna(prop, NULL, "layername");
772   RNA_def_property_ui_text(prop, "Layer", "Layer name");
773   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
774 
775   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
776   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
777   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
778   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
779   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
780 
781   prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
782   RNA_def_property_float_sdna(prop, NULL, "factor");
783   RNA_def_property_range(prop, 0, 100.0);
784   RNA_def_property_ui_range(prop, 0, 100.0, 1.0f, 3);
785   RNA_def_property_ui_text(prop, "Factor", "Factor of Simplify");
786   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
787 
788   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
789   RNA_def_property_int_sdna(prop, NULL, "pass_index");
790   RNA_def_property_range(prop, 0, 100);
791   RNA_def_property_ui_text(prop, "Pass", "Pass index");
792   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
793 
794   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
795   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_LAYER);
796   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
797   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
798 
799   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
800   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_MATERIAL);
801   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
802   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
803 
804   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
805   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_PASS);
806   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
807   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
808 
809   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
810   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
811   RNA_def_property_range(prop, 0, 100);
812   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
813   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
814 
815   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
816   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_LAYERPASS);
817   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
818   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
819 
820   /* Mode */
821   prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
822   RNA_def_property_enum_items(prop, prop_gpencil_simplify_mode_items);
823   RNA_def_property_ui_text(prop, "Mode", "How to simplify the stroke");
824   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
825 
826   prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
827   RNA_def_property_int_sdna(prop, NULL, "step");
828   RNA_def_property_range(prop, 1, 50);
829   RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply simplify");
830   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
831 
832   /* Sample */
833   prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE);
834   RNA_def_property_float_sdna(prop, NULL, "length");
835   RNA_def_property_range(prop, 0, FLT_MAX);
836   RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3);
837   RNA_def_property_ui_text(prop, "Length", "Length of each segment");
838   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
839 
840   /* Merge */
841   prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
842   RNA_def_property_float_sdna(prop, NULL, "distance");
843   RNA_def_property_range(prop, 0, FLT_MAX);
844   RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3);
845   RNA_def_property_ui_text(prop, "Distance", "Distance between points");
846   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
847 }
848 
rna_def_modifier_gpencilthick(BlenderRNA * brna)849 static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
850 {
851   StructRNA *srna;
852   PropertyRNA *prop;
853 
854   srna = RNA_def_struct(brna, "ThickGpencilModifier", "GpencilModifier");
855   RNA_def_struct_ui_text(srna, "Thick Modifier", "Subdivide and Smooth Stroke modifier");
856   RNA_def_struct_sdna(srna, "ThickGpencilModifierData");
857   RNA_def_struct_ui_icon(srna, ICON_MOD_THICKNESS);
858 
859   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
860   RNA_def_property_string_sdna(prop, NULL, "layername");
861   RNA_def_property_ui_text(prop, "Layer", "Layer name");
862   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
863 
864   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
865   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
866   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
867   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
868   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
869 
870   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
871   RNA_def_property_string_sdna(prop, NULL, "vgname");
872   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
873   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ThickGpencilModifier_vgname_set");
874   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
875 
876   prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
877   RNA_def_property_int_sdna(prop, NULL, "thickness");
878   RNA_def_property_range(prop, -100, 500);
879   RNA_def_property_ui_text(prop, "Thickness", "Absolute thickness to apply everywhere");
880   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
881 
882   prop = RNA_def_property(srna, "thickness_factor", PROP_FLOAT, PROP_NONE);
883   RNA_def_property_float_sdna(prop, NULL, "thickness_fac");
884   RNA_def_property_range(prop, 0.0, FLT_MAX);
885   RNA_def_property_ui_range(prop, 0.0, 10.0, 0.1, 3);
886   RNA_def_property_ui_text(prop, "Thickness Factor", "Factor to multiply the thickness with");
887   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
888 
889   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
890   RNA_def_property_int_sdna(prop, NULL, "pass_index");
891   RNA_def_property_range(prop, 0, 100);
892   RNA_def_property_ui_text(prop, "Pass", "Pass index");
893   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
894 
895   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
896   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_LAYER);
897   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
898   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
899 
900   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
901   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_MATERIAL);
902   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
903   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
904 
905   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
906   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_PASS);
907   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
908   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
909 
910   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
911   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_VGROUP);
912   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
913   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
914 
915   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
916   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
917   RNA_def_property_range(prop, 0, 100);
918   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
919   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
920 
921   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
922   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_LAYERPASS);
923   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
924   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
925 
926   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
927   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_CUSTOM_CURVE);
928   RNA_def_property_ui_text(
929       prop, "Custom Curve", "Use a custom curve to define thickness change along the strokes");
930   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
931 
932   prop = RNA_def_property(srna, "normalize_thickness", PROP_BOOLEAN, PROP_NONE);
933   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_NORMALIZE);
934   RNA_def_property_ui_text(prop, "Uniform Thickness", "Replace the stroke thickness");
935   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
936 
937   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
938   RNA_def_property_pointer_sdna(prop, NULL, "curve_thickness");
939   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
940   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
941 }
942 
rna_def_modifier_gpenciloffset(BlenderRNA * brna)943 static void rna_def_modifier_gpenciloffset(BlenderRNA *brna)
944 {
945   StructRNA *srna;
946   PropertyRNA *prop;
947 
948   srna = RNA_def_struct(brna, "OffsetGpencilModifier", "GpencilModifier");
949   RNA_def_struct_ui_text(srna, "Offset Modifier", "Offset Stroke modifier");
950   RNA_def_struct_sdna(srna, "OffsetGpencilModifierData");
951   RNA_def_struct_ui_icon(srna, ICON_MOD_OFFSET);
952 
953   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
954   RNA_def_property_string_sdna(prop, NULL, "layername");
955   RNA_def_property_ui_text(prop, "Layer", "Layer name");
956   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
957 
958   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
959   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
960   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
961   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
962   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
963 
964   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
965   RNA_def_property_string_sdna(prop, NULL, "vgname");
966   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
967   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_OffsetGpencilModifier_vgname_set");
968   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
969 
970   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
971   RNA_def_property_int_sdna(prop, NULL, "pass_index");
972   RNA_def_property_range(prop, 0, 100);
973   RNA_def_property_ui_text(prop, "Pass", "Pass index");
974   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
975 
976   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
977   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_LAYER);
978   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
979   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
980 
981   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
982   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_MATERIAL);
983   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
984   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
985 
986   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
987   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_PASS);
988   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
989   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
990 
991   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
992   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_VGROUP);
993   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
994   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
995 
996   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
997   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
998   RNA_def_property_range(prop, 0, 100);
999   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1000   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1001 
1002   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1003   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_LAYERPASS);
1004   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1005   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1006 
1007   prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
1008   RNA_def_property_float_sdna(prop, NULL, "loc");
1009   RNA_def_property_ui_text(prop, "Location", "Values for change location");
1010   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1011   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1012 
1013   prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
1014   RNA_def_property_float_sdna(prop, NULL, "rot");
1015   RNA_def_property_ui_text(prop, "Rotation", "Values for changes in rotation");
1016   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1017   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1018 
1019   prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
1020   RNA_def_property_float_sdna(prop, NULL, "scale");
1021   RNA_def_property_ui_text(prop, "Scale", "Values for changes in scale");
1022   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1023   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1024 }
1025 
rna_def_modifier_gpenciltint(BlenderRNA * brna)1026 static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
1027 {
1028   StructRNA *srna;
1029   PropertyRNA *prop;
1030 
1031   /* modes */
1032   static EnumPropertyItem tint_mode_types_items[] = {
1033       {GPPAINT_MODE_STROKE, "STROKE", 0, "Stroke", "Vertex Color affects to Stroke only"},
1034       {GPPAINT_MODE_FILL, "FILL", 0, "Fill", "Vertex Color affects to Fill only"},
1035       {GPPAINT_MODE_BOTH, "BOTH", 0, "Stroke and Fill", "Vertex Color affects to Stroke and Fill"},
1036       {0, NULL, 0, NULL, NULL},
1037   };
1038 
1039   srna = RNA_def_struct(brna, "TintGpencilModifier", "GpencilModifier");
1040   RNA_def_struct_ui_text(srna, "Tint Modifier", "Tint modifier");
1041   RNA_def_struct_sdna(srna, "TintGpencilModifierData");
1042   RNA_def_struct_ui_icon(srna, ICON_COLOR);
1043 
1044   prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1045   RNA_def_property_ui_text(prop, "Object", "Parent object to define the center of the effect");
1046   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1047   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1048   RNA_def_property_pointer_funcs(prop, NULL, "rna_TintGpencilModifier_object_set", NULL, NULL);
1049   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1050 
1051   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1052   RNA_def_property_string_sdna(prop, NULL, "layername");
1053   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1054   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1055 
1056   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1057   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1058   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1059   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1060   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1061 
1062   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1063   RNA_def_property_string_sdna(prop, NULL, "vgname");
1064   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1065   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_TintGpencilModifier_vgname_set");
1066   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1067 
1068   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1069   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1070   RNA_def_property_range(prop, 0, 100);
1071   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1072   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1073 
1074   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1075   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_LAYER);
1076   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1077   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1078 
1079   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1080   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_MATERIAL);
1081   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1082   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1083 
1084   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1085   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_PASS);
1086   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1087   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1088 
1089   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1090   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_VGROUP);
1091   RNA_def_property_ui_text(prop, "Inverse Vertex Group", "Inverse filter");
1092   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1093 
1094   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1095   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1096   RNA_def_property_range(prop, 0, 100);
1097   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1098   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1099 
1100   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1101   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_LAYERPASS);
1102   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1103   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1104 
1105   prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
1106   RNA_def_property_float_sdna(prop, NULL, "factor");
1107   RNA_def_property_range(prop, 0, 2.0);
1108   RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
1109   RNA_def_property_ui_text(prop, "Strength", "Factor for tinting");
1110   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1111 
1112   prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
1113   RNA_def_property_float_sdna(prop, NULL, "radius");
1114   RNA_def_property_range(prop, 1e-6f, FLT_MAX);
1115   RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 1, 3);
1116   RNA_def_property_ui_text(prop, "Radius", "Defines the maximum distance of the effect");
1117   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1118 
1119   /* Mode type. */
1120   prop = RNA_def_property(srna, "vertex_mode", PROP_ENUM, PROP_NONE);
1121   RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode");
1122   RNA_def_property_enum_items(prop, tint_mode_types_items);
1123   RNA_def_property_ui_text(prop, "Mode", "Defines how vertex color affect to the strokes");
1124   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
1125   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1126 
1127   /* Type of Tint. */
1128   prop = RNA_def_property(srna, "tint_type", PROP_ENUM, PROP_NONE);
1129   RNA_def_property_enum_sdna(prop, NULL, "type");
1130   RNA_def_property_enum_items(prop, gpencil_tint_type_items);
1131   RNA_def_property_ui_text(prop, "Tint Type", "Select type of tinting algorithm");
1132   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1133 
1134   /* Simple Color. */
1135   prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1136   RNA_def_property_range(prop, 0.0, 1.0);
1137   RNA_def_property_float_sdna(prop, NULL, "rgb");
1138   RNA_def_property_array(prop, 3);
1139   RNA_def_property_ui_text(prop, "Color", "Color used for tinting");
1140   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1141 
1142   /* Color band. */
1143   prop = RNA_def_property(srna, "colors", PROP_POINTER, PROP_NONE);
1144   RNA_def_property_pointer_sdna(prop, NULL, "colorband");
1145   RNA_def_property_struct_type(prop, "ColorRamp");
1146   RNA_def_property_ui_text(prop, "Colors", "Color ramp used to define tinting colors");
1147   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1148 
1149   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
1150   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_CUSTOM_CURVE);
1151   RNA_def_property_ui_text(
1152       prop, "Custom Curve", "Use a custom curve to define vertex color effect along the strokes");
1153   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1154 
1155   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
1156   RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity");
1157   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
1158   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1159 }
1160 
rna_def_modifier_gpenciltime(BlenderRNA * brna)1161 static void rna_def_modifier_gpenciltime(BlenderRNA *brna)
1162 {
1163   StructRNA *srna;
1164   PropertyRNA *prop;
1165 
1166   srna = RNA_def_struct(brna, "TimeGpencilModifier", "GpencilModifier");
1167   RNA_def_struct_ui_text(srna, "Time Offset Modifier", "Time offset modifier");
1168   RNA_def_struct_sdna(srna, "TimeGpencilModifierData");
1169   RNA_def_struct_ui_icon(srna, ICON_MOD_TIME);
1170 
1171   prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1172   RNA_def_property_enum_sdna(prop, NULL, "mode");
1173   RNA_def_property_enum_items(prop, rna_enum_time_mode_items);
1174   RNA_def_property_ui_text(prop, "Mode", "");
1175   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1176 
1177   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1178   RNA_def_property_string_sdna(prop, NULL, "layername");
1179   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1180   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1181 
1182   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1183   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_INVERT_LAYER);
1184   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1185   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1186 
1187   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1188   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1189   RNA_def_property_range(prop, 0, 100);
1190   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1191   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1192 
1193   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1194   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_INVERT_LAYERPASS);
1195   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1196   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1197 
1198   prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
1199   RNA_def_property_int_sdna(prop, NULL, "offset");
1200   RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
1201   RNA_def_property_ui_text(
1202       prop, "Frame Offset", "Number of frames to offset original keyframe number or frame to fix");
1203   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1204 
1205   prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
1206   RNA_def_property_float_sdna(prop, NULL, "frame_scale");
1207   RNA_def_property_range(prop, 0.001f, 100.0f);
1208   RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
1209   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1210 
1211   prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
1212   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
1213   RNA_def_property_int_sdna(prop, NULL, "sfra");
1214   RNA_def_property_int_funcs(prop, NULL, "rna_TimeModifier_start_frame_set", NULL);
1215   RNA_def_property_range(prop, MINFRAME, MAXFRAME);
1216   RNA_def_property_ui_text(prop, "Start Frame", "First frame of the range");
1217   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1218 
1219   prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
1220   RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
1221   RNA_def_property_int_sdna(prop, NULL, "efra");
1222   RNA_def_property_int_funcs(prop, NULL, "rna_TimeModifier_end_frame_set", NULL);
1223   RNA_def_property_range(prop, MINFRAME, MAXFRAME);
1224   RNA_def_property_ui_text(prop, "End Frame", "Final frame of the range");
1225   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1226 
1227   prop = RNA_def_property(srna, "use_keep_loop", PROP_BOOLEAN, PROP_NONE);
1228   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_KEEP_LOOP);
1229   RNA_def_property_ui_text(
1230       prop, "Keep Loop", "Retiming end frames and move to start of animation to keep loop");
1231   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1232 
1233   prop = RNA_def_property(srna, "use_custom_frame_range", PROP_BOOLEAN, PROP_NONE);
1234   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_CUSTOM_RANGE);
1235   RNA_def_property_ui_text(
1236       prop, "Custom Range", "Define a custom range of frames to use in modifier");
1237   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1238 }
1239 
rna_def_modifier_gpencilcolor(BlenderRNA * brna)1240 static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
1241 {
1242   StructRNA *srna;
1243   PropertyRNA *prop;
1244 
1245   srna = RNA_def_struct(brna, "ColorGpencilModifier", "GpencilModifier");
1246   RNA_def_struct_ui_text(srna, "Hue/Saturation Modifier", "Change Hue/Saturation modifier");
1247   RNA_def_struct_sdna(srna, "ColorGpencilModifierData");
1248   RNA_def_struct_ui_icon(srna, ICON_MOD_TINT);
1249 
1250   prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
1251   RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
1252   RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
1253   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1254 
1255   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1256   RNA_def_property_string_sdna(prop, NULL, "layername");
1257   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1258   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1259 
1260   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1261   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1262   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1263   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1264   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1265 
1266   prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
1267   RNA_def_property_range(prop, 0.0, 1.0);
1268   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
1269   RNA_def_property_float_sdna(prop, NULL, "hsv[0]");
1270   RNA_def_property_ui_text(prop, "Hue", "Color Hue");
1271   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1272 
1273   prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
1274   RNA_def_property_range(prop, 0.0, FLT_MAX);
1275   RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
1276   RNA_def_property_float_sdna(prop, NULL, "hsv[1]");
1277   RNA_def_property_ui_text(prop, "Saturation", "Color Saturation");
1278   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1279 
1280   prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
1281   RNA_def_property_range(prop, 0.0, FLT_MAX);
1282   RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
1283   RNA_def_property_float_sdna(prop, NULL, "hsv[2]");
1284   RNA_def_property_ui_text(prop, "Value", "Color Value");
1285   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1286 
1287   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1288   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1289   RNA_def_property_range(prop, 0, 100);
1290   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1291   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1292 
1293   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1294   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_LAYER);
1295   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1296   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1297 
1298   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1299   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_MATERIAL);
1300   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1301   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1302 
1303   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1304   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_PASS);
1305   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1306   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1307 
1308   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1309   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1310   RNA_def_property_range(prop, 0, 100);
1311   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1312   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1313 
1314   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1315   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_LAYERPASS);
1316   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1317   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1318 
1319   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
1320   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_CUSTOM_CURVE);
1321   RNA_def_property_ui_text(
1322       prop, "Custom Curve", "Use a custom curve to define color effect along the strokes");
1323   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1324 
1325   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
1326   RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity");
1327   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
1328   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1329 }
1330 
rna_def_modifier_gpencilopacity(BlenderRNA * brna)1331 static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
1332 {
1333   StructRNA *srna;
1334   PropertyRNA *prop;
1335 
1336   srna = RNA_def_struct(brna, "OpacityGpencilModifier", "GpencilModifier");
1337   RNA_def_struct_ui_text(srna, "Opacity Modifier", "Opacity of Strokes modifier");
1338   RNA_def_struct_sdna(srna, "OpacityGpencilModifierData");
1339   RNA_def_struct_ui_icon(srna, ICON_MOD_OPACITY);
1340 
1341   prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
1342   RNA_def_property_enum_items(prop, modifier_modify_opacity_items);
1343   RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
1344   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1345 
1346   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1347   RNA_def_property_string_sdna(prop, NULL, "layername");
1348   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1349   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1350 
1351   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1352   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1353   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1354   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1355   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1356 
1357   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1358   RNA_def_property_string_sdna(prop, NULL, "vgname");
1359   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1360   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_OpacityGpencilModifier_vgname_set");
1361   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1362 
1363   prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
1364   RNA_def_property_float_sdna(prop, NULL, "factor");
1365   RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
1366   RNA_def_property_float_funcs(
1367       prop, NULL, "rna_GpencilOpacity_max_set", "rna_GpencilOpacity_range");
1368   RNA_def_property_ui_text(prop, "Opacity Factor", "Factor of Opacity");
1369   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1370 
1371   prop = RNA_def_property(srna, "hardness", PROP_FLOAT, PROP_NONE);
1372   RNA_def_property_float_sdna(prop, NULL, "hardeness");
1373   RNA_def_property_range(prop, 0.0, FLT_MAX);
1374   RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.1, 2);
1375   RNA_def_property_ui_text(prop, "Hardness", "Factor of stroke hardness");
1376   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1377 
1378   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1379   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1380   RNA_def_property_range(prop, 0, 100);
1381   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1382   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1383 
1384   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1385   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_LAYER);
1386   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1387   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1388 
1389   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1390   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_MATERIAL);
1391   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1392   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1393 
1394   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1395   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_PASS);
1396   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1397   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1398 
1399   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1400   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_VGROUP);
1401   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
1402   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1403 
1404   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1405   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1406   RNA_def_property_range(prop, 0, 100);
1407   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1408   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1409 
1410   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1411   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_LAYERPASS);
1412   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1413   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1414 
1415   prop = RNA_def_property(srna, "normalize_opacity", PROP_BOOLEAN, PROP_NONE);
1416   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_NORMALIZE);
1417   RNA_def_property_ui_text(prop, "Uniform Opacity", "Replace the stroke opacity");
1418   RNA_def_property_update(prop, 0, "rna_GpencilModifier_opacity_update");
1419 
1420   prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
1421   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_CUSTOM_CURVE);
1422   RNA_def_property_ui_text(
1423       prop, "Custom Curve", "Use a custom curve to define opacity effect along the strokes");
1424   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1425 
1426   prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
1427   RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity");
1428   RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
1429   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1430 }
1431 
rna_def_modifier_gpencilarray(BlenderRNA * brna)1432 static void rna_def_modifier_gpencilarray(BlenderRNA *brna)
1433 {
1434   StructRNA *srna;
1435   PropertyRNA *prop;
1436 
1437   srna = RNA_def_struct(brna, "ArrayGpencilModifier", "GpencilModifier");
1438   RNA_def_struct_ui_text(srna, "Instance Modifier", "Create grid of duplicate instances");
1439   RNA_def_struct_sdna(srna, "ArrayGpencilModifierData");
1440   RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
1441 
1442   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1443   RNA_def_property_string_sdna(prop, NULL, "layername");
1444   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1445   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1446 
1447   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1448   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1449   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1450   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1451   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1452 
1453   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1454   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1455   RNA_def_property_range(prop, 0, 100);
1456   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1457   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1458 
1459   prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
1460   RNA_def_property_range(prop, 1, SHRT_MAX);
1461   RNA_def_property_ui_range(prop, 1, 50, 1, -1);
1462   RNA_def_property_ui_text(prop, "Count", "Number of items");
1463   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1464 
1465   /* Offset parameters */
1466   prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
1467   RNA_def_property_pointer_sdna(prop, NULL, "object");
1468   RNA_def_property_ui_text(
1469       prop,
1470       "Object Offset",
1471       "Use the location and rotation of another object to determine the distance and "
1472       "rotational change between arrayed items");
1473   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1474   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1475   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1476 
1477   prop = RNA_def_property(srna, "constant_offset", PROP_FLOAT, PROP_TRANSLATION);
1478   RNA_def_property_float_sdna(prop, NULL, "offset");
1479   RNA_def_property_ui_text(prop, "Constant Offset", "Value for the distance between items");
1480   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1481   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1482 
1483   prop = RNA_def_property(srna, "relative_offset", PROP_FLOAT, PROP_XYZ);
1484   RNA_def_property_float_sdna(prop, NULL, "shift");
1485   RNA_def_property_ui_text(
1486       prop,
1487       "Relative Offset",
1488       "The size of the geometry will determine the distance between arrayed items");
1489   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1490   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1491 
1492   prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_XYZ);
1493   RNA_def_property_float_sdna(prop, NULL, "rnd_offset");
1494   RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location");
1495   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1496   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1497 
1498   prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_EULER);
1499   RNA_def_property_float_sdna(prop, NULL, "rnd_rot");
1500   RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation");
1501   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1502   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1503 
1504   prop = RNA_def_property(srna, "random_scale", PROP_FLOAT, PROP_XYZ);
1505   RNA_def_property_float_sdna(prop, NULL, "rnd_scale");
1506   RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
1507   RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1508   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1509 
1510   prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
1511   RNA_def_property_ui_text(prop, "Seed", "Random seed");
1512   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1513 
1514   prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
1515   RNA_def_property_int_sdna(prop, NULL, "mat_rpl");
1516   RNA_def_property_range(prop, 0, SHRT_MAX);
1517   RNA_def_property_ui_text(
1518       prop,
1519       "Material",
1520       "Index of the material used for generated strokes (0 keep original material)");
1521   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1522 
1523   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1524   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_LAYER);
1525   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1526   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1527 
1528   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1529   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_MATERIAL);
1530   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1531   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1532 
1533   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1534   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_PASS);
1535   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1536   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1537 
1538   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1539   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1540   RNA_def_property_range(prop, 0, 100);
1541   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1542   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1543 
1544   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1545   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_LAYERPASS);
1546   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1547   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1548 
1549   prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE);
1550   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OFFSET);
1551   RNA_def_property_ui_text(prop, "Offset", "Enable offset");
1552   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1553 
1554   prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
1555   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OB_OFFSET);
1556   RNA_def_property_ui_text(prop, "Object Offset", "Enable object offset");
1557   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1558 
1559   prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
1560   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_RELATIVE);
1561   RNA_def_property_ui_text(prop, "Shift", "Enable shift");
1562   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1563 }
1564 
rna_def_modifier_gpencilbuild(BlenderRNA * brna)1565 static void rna_def_modifier_gpencilbuild(BlenderRNA *brna)
1566 {
1567   static EnumPropertyItem prop_gpencil_build_mode_items[] = {
1568       {GP_BUILD_MODE_SEQUENTIAL,
1569        "SEQUENTIAL",
1570        ICON_PARTICLE_POINT,
1571        "Sequential",
1572        "Strokes appear/disappear one after the other, but only a single one changes at a time"},
1573       {GP_BUILD_MODE_CONCURRENT,
1574        "CONCURRENT",
1575        ICON_PARTICLE_TIP,
1576        "Concurrent",
1577        "Multiple strokes appear/disappear at once"},
1578       {0, NULL, 0, NULL, NULL},
1579   };
1580 
1581   static EnumPropertyItem prop_gpencil_build_transition_items[] = {
1582       {GP_BUILD_TRANSITION_GROW,
1583        "GROW",
1584        0,
1585        "Grow",
1586        "Show points in the order they occur in each stroke "
1587        "(e.g. for animating lines being drawn)"},
1588       {GP_BUILD_TRANSITION_SHRINK,
1589        "SHRINK",
1590        0,
1591        "Shrink",
1592        "Hide points from the end of each stroke to the start "
1593        "(e.g. for animating lines being erased)"},
1594       {GP_BUILD_TRANSITION_FADE,
1595        "FADE",
1596        0,
1597        "Fade",
1598        "Hide points in the order they occur in each stroke "
1599        "(e.g. for animating ink fading or vanishing after getting drawn)"},
1600       {0, NULL, 0, NULL, NULL},
1601   };
1602 
1603   static EnumPropertyItem prop_gpencil_build_time_align_items[] = {
1604       {GP_BUILD_TIMEALIGN_START,
1605        "START",
1606        0,
1607        "Align Start",
1608        "All strokes start at same time (i.e. short strokes finish earlier)"},
1609       {GP_BUILD_TIMEALIGN_END,
1610        "END",
1611        0,
1612        "Align End",
1613        "All strokes end at same time (i.e. short strokes start later)"},
1614       {0, NULL, 0, NULL, NULL},
1615   };
1616 
1617   StructRNA *srna;
1618   PropertyRNA *prop;
1619 
1620   srna = RNA_def_struct(brna, "BuildGpencilModifier", "GpencilModifier");
1621   RNA_def_struct_ui_text(srna, "Build Modifier", "Animate strokes appearing and disappearing");
1622   RNA_def_struct_sdna(srna, "BuildGpencilModifierData");
1623   RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
1624 
1625   /* Mode */
1626   prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1627   RNA_def_property_enum_items(prop, prop_gpencil_build_mode_items);
1628   RNA_def_property_ui_text(prop, "Mode", "How many strokes are being animated at a time");
1629   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1630 
1631   /* Direction */
1632   prop = RNA_def_property(srna, "transition", PROP_ENUM, PROP_NONE);
1633   RNA_def_property_enum_items(prop, prop_gpencil_build_transition_items);
1634   RNA_def_property_ui_text(
1635       prop, "Transition", "How are strokes animated (i.e. are they appearing or disappearing)");
1636   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1637 
1638   /* Transition Onset Delay + Length */
1639   prop = RNA_def_property(srna, "start_delay", PROP_FLOAT, PROP_NONE);
1640   RNA_def_property_float_sdna(prop, NULL, "start_delay");
1641   RNA_def_property_ui_text(
1642       prop,
1643       "Start Delay",
1644       "Number of frames after each GP keyframe before the modifier has any effect");
1645   RNA_def_property_range(prop, 0, MAXFRAMEF);
1646   RNA_def_property_ui_range(prop, 0, 200, 1, -1);
1647   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1648 
1649   prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE);
1650   RNA_def_property_float_sdna(prop, NULL, "length");
1651   RNA_def_property_ui_text(prop,
1652                            "Length",
1653                            "Maximum number of frames that the build effect can run for "
1654                            "(unless another GP keyframe occurs before this time has elapsed)");
1655   RNA_def_property_range(prop, 1, MAXFRAMEF);
1656   RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
1657   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1658 
1659   /* Concurrent Mode Settings */
1660   prop = RNA_def_property(srna, "concurrent_time_alignment", PROP_ENUM, PROP_NONE);
1661   RNA_def_property_enum_sdna(prop, NULL, "time_alignment");
1662   RNA_def_property_enum_items(prop, prop_gpencil_build_time_align_items);
1663   RNA_def_property_ui_text(
1664       prop, "Time Alignment", "When should strokes start to appear/disappear");
1665   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1666 
1667   /* Time Limits */
1668   prop = RNA_def_property(srna, "use_restrict_frame_range", PROP_BOOLEAN, PROP_NONE);
1669   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_RESTRICT_TIME);
1670   RNA_def_property_ui_text(
1671       prop, "Restrict Frame Range", "Only modify strokes during the specified frame range");
1672   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1673 
1674   /* Use percentage */
1675   prop = RNA_def_property(srna, "use_percentage", PROP_BOOLEAN, PROP_NONE);
1676   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_PERCENTAGE);
1677   RNA_def_property_ui_text(
1678       prop, "Restrict Visible Points", "Use a percentage factor to determine the visible points");
1679   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1680 
1681   /* Percentage factor. */
1682   prop = RNA_def_property(srna, "percentage_factor", PROP_FLOAT, PROP_FACTOR);
1683   RNA_def_property_float_sdna(prop, NULL, "percentage_fac");
1684   RNA_def_property_ui_text(prop, "Factor", "Defines how much of the stroke is visible");
1685   RNA_def_property_range(prop, 0.0f, 1.0f);
1686   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1687 
1688   prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
1689   RNA_def_property_float_sdna(prop, NULL, "start_frame");
1690   RNA_def_property_ui_text(
1691       prop, "Start Frame", "Start Frame (when Restrict Frame Range is enabled)");
1692   RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
1693   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1694 
1695   prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
1696   RNA_def_property_float_sdna(prop, NULL, "end_frame");
1697   RNA_def_property_ui_text(prop, "End Frame", "End Frame (when Restrict Frame Range is enabled)");
1698   RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
1699   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1700 
1701   /* Filters - Layer */
1702   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1703   RNA_def_property_string_sdna(prop, NULL, "layername");
1704   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1705   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1706 
1707   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1708   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_INVERT_LAYER);
1709   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1710   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1711 
1712   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1713   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1714   RNA_def_property_range(prop, 0, 100);
1715   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1716   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1717 
1718   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1719   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_INVERT_LAYERPASS);
1720   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1721   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1722 }
1723 
rna_def_modifier_gpencillattice(BlenderRNA * brna)1724 static void rna_def_modifier_gpencillattice(BlenderRNA *brna)
1725 {
1726   StructRNA *srna;
1727   PropertyRNA *prop;
1728 
1729   srna = RNA_def_struct(brna, "LatticeGpencilModifier", "GpencilModifier");
1730   RNA_def_struct_ui_text(
1731       srna, "Lattice Modifier", "Change stroke using lattice to deform modifier");
1732   RNA_def_struct_sdna(srna, "LatticeGpencilModifierData");
1733   RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
1734 
1735   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1736   RNA_def_property_string_sdna(prop, NULL, "layername");
1737   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1738   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1739 
1740   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1741   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1742   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1743   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1744   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1745 
1746   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1747   RNA_def_property_string_sdna(prop, NULL, "vgname");
1748   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1749   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_LatticeGpencilModifier_vgname_set");
1750   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1751 
1752   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1753   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1754   RNA_def_property_range(prop, 0, 100);
1755   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1756   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1757 
1758   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1759   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_LAYER);
1760   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1761   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1762 
1763   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1764   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_MATERIAL);
1765   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1766   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1767 
1768   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1769   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_PASS);
1770   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1771   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1772 
1773   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1774   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_VGROUP);
1775   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
1776   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1777 
1778   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1779   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1780   RNA_def_property_range(prop, 0, 100);
1781   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1782   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1783 
1784   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1785   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_LAYERPASS);
1786   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1787   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1788 
1789   prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1790   RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
1791   RNA_def_property_pointer_funcs(
1792       prop, NULL, "rna_LatticeGpencilModifier_object_set", NULL, "rna_Lattice_object_poll");
1793   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1794   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1795   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1796 
1797   prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
1798   RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
1799   RNA_def_property_ui_range(prop, 0, 1, 10, 2);
1800   RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
1801   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1802 }
1803 
rna_def_modifier_gpencilmirror(BlenderRNA * brna)1804 static void rna_def_modifier_gpencilmirror(BlenderRNA *brna)
1805 {
1806   StructRNA *srna;
1807   PropertyRNA *prop;
1808 
1809   srna = RNA_def_struct(brna, "MirrorGpencilModifier", "GpencilModifier");
1810   RNA_def_struct_ui_text(srna, "Mirror Modifier", "Create mirroring strokes");
1811   RNA_def_struct_sdna(srna, "MirrorGpencilModifierData");
1812   RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
1813 
1814   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1815   RNA_def_property_string_sdna(prop, NULL, "layername");
1816   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1817   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1818 
1819   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1820   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1821   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1822   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1823   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1824 
1825   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1826   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1827   RNA_def_property_range(prop, 0, 100);
1828   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1829   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1830 
1831   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1832   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYER);
1833   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1834   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1835 
1836   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1837   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_MATERIAL);
1838   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1839   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1840 
1841   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1842   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_PASS);
1843   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1844   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1845 
1846   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1847   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1848   RNA_def_property_range(prop, 0, 100);
1849   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1850   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1851 
1852   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1853   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYERPASS);
1854   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1855   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1856 
1857   prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1858   RNA_def_property_ui_text(prop, "Object", "Object used as center");
1859   RNA_def_property_pointer_funcs(prop, NULL, "rna_MirrorGpencilModifier_object_set", NULL, NULL);
1860   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1861   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1862   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1863 
1864   prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
1865   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_CLIPPING);
1866   RNA_def_property_ui_text(prop, "Clip", "Clip points");
1867   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1868 
1869   prop = RNA_def_property(srna, "use_axis_x", PROP_BOOLEAN, PROP_NONE);
1870   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_X);
1871   RNA_def_property_ui_text(prop, "X", "Mirror the X axis");
1872   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1873 
1874   prop = RNA_def_property(srna, "use_axis_y", PROP_BOOLEAN, PROP_NONE);
1875   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_Y);
1876   RNA_def_property_ui_text(prop, "Y", "Mirror the Y axis");
1877   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1878 
1879   prop = RNA_def_property(srna, "use_axis_z", PROP_BOOLEAN, PROP_NONE);
1880   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_Z);
1881   RNA_def_property_ui_text(prop, "Z", "Mirror the Z axis");
1882   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1883 }
1884 
rna_def_modifier_gpencilhook(BlenderRNA * brna)1885 static void rna_def_modifier_gpencilhook(BlenderRNA *brna)
1886 {
1887   StructRNA *srna;
1888   PropertyRNA *prop;
1889 
1890   srna = RNA_def_struct(brna, "HookGpencilModifier", "GpencilModifier");
1891   RNA_def_struct_ui_text(
1892       srna, "Hook Modifier", "Hook modifier to modify the location of stroke points");
1893   RNA_def_struct_sdna(srna, "HookGpencilModifierData");
1894   RNA_def_struct_ui_icon(srna, ICON_HOOK);
1895 
1896   prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1897   RNA_def_property_ui_text(
1898       prop, "Object", "Parent Object for hook, also recalculates and clears offset");
1899   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1900   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1901   RNA_def_property_pointer_funcs(prop, NULL, "rna_HookGpencilModifier_object_set", NULL, NULL);
1902   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1903 
1904   prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1905   RNA_def_property_string_sdna(prop, NULL, "subtarget");
1906   RNA_def_property_ui_text(
1907       prop,
1908       "Sub-Target",
1909       "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
1910   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1911 
1912   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1913   RNA_def_property_string_sdna(prop, NULL, "layername");
1914   RNA_def_property_ui_text(prop, "Layer", "Layer name");
1915   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1916 
1917   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
1918   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1919   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
1920   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
1921   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1922 
1923   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1924   RNA_def_property_string_sdna(prop, NULL, "vgname");
1925   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1926   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_HookGpencilModifier_vgname_set");
1927   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1928 
1929   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1930   RNA_def_property_int_sdna(prop, NULL, "pass_index");
1931   RNA_def_property_range(prop, 0, 100);
1932   RNA_def_property_ui_text(prop, "Pass", "Pass index");
1933   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1934 
1935   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1936   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_LAYER);
1937   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1938   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1939 
1940   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
1941   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_MATERIAL);
1942   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
1943   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1944 
1945   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1946   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_PASS);
1947   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1948   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1949 
1950   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1951   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_VGROUP);
1952   RNA_def_property_ui_text(prop, "Inverse Vertex Group", "Inverse filter");
1953   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1954 
1955   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1956   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1957   RNA_def_property_range(prop, 0, 100);
1958   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1959   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1960 
1961   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1962   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_LAYERPASS);
1963   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1964   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1965 
1966   prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
1967   RNA_def_property_float_sdna(prop, NULL, "force");
1968   RNA_def_property_range(prop, 0, 1);
1969   RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
1970   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1971 
1972   prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
1973   RNA_def_property_enum_items(prop, modifier_gphook_falloff_items); /* share the enum */
1974   RNA_def_property_ui_text(prop, "Falloff Type", "");
1975   RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE); /* Abusing id_curve :/ */
1976   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1977 
1978   prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
1979   RNA_def_property_float_sdna(prop, NULL, "falloff");
1980   RNA_def_property_range(prop, 0, FLT_MAX);
1981   RNA_def_property_ui_range(prop, 0, 100, 100, 2);
1982   RNA_def_property_ui_text(
1983       prop, "Radius", "If not zero, the distance from the hook where influence ends");
1984   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1985 
1986   prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
1987   RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
1988   RNA_def_property_ui_text(prop, "Falloff Curve", "Custom light falloff curve");
1989   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1990 
1991   prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
1992   RNA_def_property_float_sdna(prop, NULL, "cent");
1993   RNA_def_property_ui_text(prop, "Hook Center", "");
1994   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1995 
1996   prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
1997   RNA_def_property_float_sdna(prop, NULL, "parentinv");
1998   RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
1999   RNA_def_property_ui_text(
2000       prop, "Matrix", "Reverse the transformation between this object and its target");
2001   RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_GpencilModifier_update");
2002 
2003   prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
2004   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_UNIFORM_SPACE);
2005   RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
2006   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2007 }
2008 
rna_def_modifier_gpencilarmature(BlenderRNA * brna)2009 static void rna_def_modifier_gpencilarmature(BlenderRNA *brna)
2010 {
2011   StructRNA *srna;
2012   PropertyRNA *prop;
2013 
2014   srna = RNA_def_struct(brna, "ArmatureGpencilModifier", "GpencilModifier");
2015   RNA_def_struct_ui_text(
2016       srna, "Armature Modifier", "Change stroke using armature to deform modifier");
2017   RNA_def_struct_sdna(srna, "ArmatureGpencilModifierData");
2018   RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
2019 
2020   prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
2021   RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
2022   RNA_def_property_pointer_funcs(
2023       prop, NULL, "rna_ArmatureGpencilModifier_object_set", NULL, "rna_Armature_object_poll");
2024   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
2025   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2026   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2027 
2028   prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
2029   RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE);
2030   RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
2031   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2032 
2033   prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
2034   RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP);
2035   RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
2036   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2037 
2038   prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
2039   RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
2040   RNA_def_property_ui_text(
2041       prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
2042   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2043 
2044   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2045   RNA_def_property_string_sdna(prop, NULL, "vgname");
2046   RNA_def_property_ui_text(
2047       prop,
2048       "Vertex Group",
2049       "Name of Vertex Group which determines influence of modifier per point");
2050   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ArmatureGpencilModifier_vgname_set");
2051   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2052 
2053   prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2054   RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP);
2055   RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2056   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2057 }
2058 
rna_def_modifier_gpencilmultiply(BlenderRNA * brna)2059 static void rna_def_modifier_gpencilmultiply(BlenderRNA *brna)
2060 {
2061   StructRNA *srna;
2062   PropertyRNA *prop;
2063 
2064   srna = RNA_def_struct(brna, "MultiplyGpencilModifier", "GpencilModifier");
2065   RNA_def_struct_ui_text(srna, "Multiply Modifier", "Generate multiple strokes from one stroke");
2066   RNA_def_struct_sdna(srna, "MultiplyGpencilModifierData");
2067   RNA_def_struct_ui_icon(srna, ICON_GP_MULTIFRAME_EDITING);
2068 
2069   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
2070   RNA_def_property_string_sdna(prop, NULL, "layername");
2071   RNA_def_property_ui_text(prop, "Layer", "Layer name");
2072   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2073 
2074   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
2075   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
2076   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2077   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
2078   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2079 
2080   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
2081   RNA_def_property_int_sdna(prop, NULL, "pass_index");
2082   RNA_def_property_range(prop, 0, 100);
2083   RNA_def_property_ui_text(prop, "Pass", "Pass index");
2084   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2085 
2086   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
2087   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYER);
2088   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
2089   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2090 
2091   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
2092   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_MATERIAL);
2093   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
2094   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2095 
2096   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
2097   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_PASS);
2098   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
2099   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2100 
2101   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
2102   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
2103   RNA_def_property_range(prop, 0, 100);
2104   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
2105   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2106 
2107   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
2108   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYERPASS);
2109   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
2110   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2111 
2112   prop = RNA_def_property(srna, "enable_angle_splitting", PROP_BOOLEAN, PROP_NONE);
2113   RNA_def_property_boolean_sdna(prop, NULL, "flags", GP_MULTIPLY_ENABLE_ANGLE_SPLITTING);
2114   RNA_def_property_ui_text(prop, "Angle Splitting", "Enable angle splitting");
2115   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2116 
2117   prop = RNA_def_property(srna, "use_fade", PROP_BOOLEAN, PROP_NONE);
2118   RNA_def_property_boolean_sdna(prop, NULL, "flags", GP_MULTIPLY_ENABLE_FADING);
2119   RNA_def_property_ui_text(prop, "Fade", "Fade the stroke thickness for each generated stroke");
2120   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2121 
2122   prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
2123   RNA_def_property_range(prop, 0, M_PI);
2124   RNA_def_property_ui_range(prop, 0, M_PI, 10, 2);
2125   RNA_def_property_ui_text(prop, "Angle", "Split angle for segments");
2126   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2127 
2128   prop = RNA_def_property(srna, "duplicates", PROP_INT, PROP_NONE);
2129   RNA_def_property_int_sdna(prop, NULL, "duplications");
2130   RNA_def_property_range(prop, 0, 999);
2131   RNA_def_property_ui_range(prop, 1, 10, 1, 1);
2132   RNA_def_property_ui_text(prop, "Duplicates", "How many copies of strokes be displayed");
2133   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2134 
2135   prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
2136   RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
2137   RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 3);
2138   RNA_def_property_ui_text(prop, "Distance", "Distance of duplications");
2139   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2140 
2141   prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
2142   RNA_def_property_ui_range(prop, -1, 1, 0.01, 3);
2143   RNA_def_property_ui_text(prop, "Offset", "Offset of duplicates. -1 to 1: inner to outer");
2144   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2145 
2146   prop = RNA_def_property(srna, "fading_thickness", PROP_FLOAT, PROP_NONE);
2147   RNA_def_property_range(prop, 0, 1);
2148   RNA_def_property_ui_text(prop, "Thickness", "Fade influence of stroke's thickness");
2149   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2150 
2151   prop = RNA_def_property(srna, "fading_opacity", PROP_FLOAT, PROP_NONE);
2152   RNA_def_property_range(prop, 0, 1);
2153   RNA_def_property_ui_text(prop, "Opacity", "Fade influence of stroke's opacity");
2154   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2155 
2156   prop = RNA_def_property(srna, "fading_center", PROP_FLOAT, PROP_FACTOR);
2157   RNA_def_property_range(prop, 0, 1);
2158   RNA_def_property_ui_text(prop, "Center", "Fade center");
2159   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2160 }
2161 
rna_def_modifier_gpenciltexture(BlenderRNA * brna)2162 static void rna_def_modifier_gpenciltexture(BlenderRNA *brna)
2163 {
2164   StructRNA *srna;
2165   PropertyRNA *prop;
2166 
2167   static const EnumPropertyItem fit_type_items[] = {
2168       {GP_TEX_CONSTANT_LENGTH,
2169        "CONSTANT_LENGTH",
2170        0,
2171        "Constant Length",
2172        "Keep the texture at a constant length regardless of the length of each stroke"},
2173       {GP_TEX_FIT_STROKE,
2174        "FIT_STROKE",
2175        0,
2176        "Stroke Length",
2177        "Scale the texture to fit the length of each stroke"},
2178       {0, NULL, 0, NULL, NULL},
2179   };
2180 
2181   static const EnumPropertyItem mode_items[] = {
2182       {STROKE, "STROKE", 0, "Stroke", "Manipulate only stroke texture coordinates"},
2183       {FILL, "FILL", 0, "Fill", "Manipulate only fill texture coordinates"},
2184       {STROKE_AND_FILL,
2185        "STROKE_AND_FILL",
2186        0,
2187        "Stroke and Fill",
2188        "Manipulate both stroke and fill texture coordinates"},
2189       {0, NULL, 0, NULL, NULL},
2190   };
2191 
2192   srna = RNA_def_struct(brna, "TextureGpencilModifier", "GpencilModifier");
2193   RNA_def_struct_ui_text(
2194       srna, "Texture Modifier", "Transform stroke texture coordinates Modifier");
2195   RNA_def_struct_sdna(srna, "TextureGpencilModifierData");
2196   RNA_def_struct_ui_icon(srna, ICON_TEXTURE);
2197 
2198   prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
2199   RNA_def_property_string_sdna(prop, NULL, "layername");
2200   RNA_def_property_ui_text(prop, "Layer", "Layer name");
2201   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2202 
2203   prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
2204   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TEX_INVERT_LAYER);
2205   RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
2206   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2207 
2208   prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
2209   RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
2210   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2211   RNA_def_property_ui_text(prop, "Material", "Material used for filtering effect");
2212   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2213 
2214   prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
2215   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TEX_INVERT_MATERIAL);
2216   RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
2217   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2218 
2219   prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2220   RNA_def_property_string_sdna(prop, NULL, "vgname");
2221   RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
2222   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_TextureGpencilModifier_vgname_set");
2223   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2224 
2225   prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
2226   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TEX_INVERT_VGROUP);
2227   RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
2228   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2229 
2230   prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
2231   RNA_def_property_int_sdna(prop, NULL, "pass_index");
2232   RNA_def_property_range(prop, 0, 100);
2233   RNA_def_property_ui_text(prop, "Pass", "Pass index");
2234   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2235 
2236   prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
2237   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TEX_INVERT_PASS);
2238   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
2239   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2240 
2241   prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
2242   RNA_def_property_int_sdna(prop, NULL, "layer_pass");
2243   RNA_def_property_range(prop, 0, 100);
2244   RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
2245   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2246 
2247   prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
2248   RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TEX_INVERT_LAYERPASS);
2249   RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
2250   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2251 
2252   prop = RNA_def_property(srna, "uv_offset", PROP_FLOAT, PROP_NONE);
2253   RNA_def_property_float_sdna(prop, NULL, "uv_offset");
2254   RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
2255   RNA_def_property_ui_range(prop, -100.0, 100.0, 0.1, 3);
2256   RNA_def_property_ui_text(prop, "UV Offset", "Offset value to add to stroke UVs");
2257   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2258 
2259   prop = RNA_def_property(srna, "uv_scale", PROP_FLOAT, PROP_NONE);
2260   RNA_def_property_float_sdna(prop, NULL, "uv_scale");
2261   RNA_def_property_range(prop, 0.0, FLT_MAX);
2262   RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
2263   RNA_def_property_ui_text(prop, "UV Scale", "Factor to scale the UVs");
2264   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2265 
2266   prop = RNA_def_property(srna, "fill_rotation", PROP_FLOAT, PROP_ANGLE);
2267   RNA_def_property_float_sdna(prop, NULL, "fill_rotation");
2268   RNA_def_property_ui_text(prop, "Fill Rotation", "Additional rotation of the fill UV");
2269   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2270 
2271   prop = RNA_def_property(srna, "fill_offset", PROP_FLOAT, PROP_COORDS);
2272   RNA_def_property_float_sdna(prop, NULL, "fill_offset");
2273   RNA_def_property_array(prop, 2);
2274   RNA_def_property_ui_text(prop, "Fill Offset", "Additional offset of the fill UV");
2275   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2276 
2277   prop = RNA_def_property(srna, "fill_scale", PROP_FLOAT, PROP_COORDS);
2278   RNA_def_property_float_sdna(prop, NULL, "fill_scale");
2279   RNA_def_property_range(prop, 0.01f, 100.0f);
2280   RNA_def_property_ui_text(prop, "Fill Scale", "Additional scale of the fill UV");
2281   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2282 
2283   prop = RNA_def_property(srna, "fit_method", PROP_ENUM, PROP_NONE);
2284   RNA_def_property_enum_sdna(prop, NULL, "fit_method");
2285   RNA_def_property_enum_items(prop, fit_type_items);
2286   RNA_def_property_ui_text(prop, "Fit Method", "");
2287   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2288 
2289   prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
2290   RNA_def_property_enum_sdna(prop, NULL, "mode");
2291   RNA_def_property_enum_items(prop, mode_items);
2292   RNA_def_property_ui_text(prop, "Mode", "");
2293   RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
2294 }
2295 
RNA_def_greasepencil_modifier(BlenderRNA * brna)2296 void RNA_def_greasepencil_modifier(BlenderRNA *brna)
2297 {
2298   StructRNA *srna;
2299   PropertyRNA *prop;
2300 
2301   /* data */
2302   srna = RNA_def_struct(brna, "GpencilModifier", NULL);
2303   RNA_def_struct_ui_text(srna, "GpencilModifier", "Modifier affecting the grease pencil object");
2304   RNA_def_struct_refine_func(srna, "rna_GpencilModifier_refine");
2305   RNA_def_struct_path_func(srna, "rna_GpencilModifier_path");
2306   RNA_def_struct_sdna(srna, "GpencilModifierData");
2307 
2308   /* strings */
2309   prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2310   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_GpencilModifier_name_set");
2311   RNA_def_property_ui_text(prop, "Name", "Modifier name");
2312   RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, NULL);
2313   RNA_def_struct_name_property(srna, prop);
2314 
2315   /* enums */
2316   prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2317   RNA_def_property_clear_flag(prop, PROP_EDITABLE);
2318   RNA_def_property_enum_sdna(prop, NULL, "type");
2319   RNA_def_property_enum_items(prop, rna_enum_object_greasepencil_modifier_type_items);
2320   RNA_def_property_ui_text(prop, "Type", "");
2321 
2322   /* flags */
2323   prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
2324   RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Realtime);
2325   RNA_def_property_ui_text(prop, "Realtime", "Display modifier in viewport");
2326   RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
2327   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2328   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2329   RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
2330 
2331   prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
2332   RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Render);
2333   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2334   RNA_def_property_ui_text(prop, "Render", "Use modifier during render");
2335   RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
2336   RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
2337 
2338   prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
2339   RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Editmode);
2340   RNA_def_property_ui_text(prop, "Edit Mode", "Display modifier in Edit mode");
2341   RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
2342   RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
2343 
2344   prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
2345   RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
2346   RNA_def_property_boolean_sdna(prop, NULL, "ui_expand_flag", 0);
2347   RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
2348   RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
2349   RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
2350 
2351   /* types */
2352   rna_def_modifier_gpencilnoise(brna);
2353   rna_def_modifier_gpencilsmooth(brna);
2354   rna_def_modifier_gpencilsubdiv(brna);
2355   rna_def_modifier_gpencilsimplify(brna);
2356   rna_def_modifier_gpencilthick(brna);
2357   rna_def_modifier_gpenciloffset(brna);
2358   rna_def_modifier_gpenciltint(brna);
2359   rna_def_modifier_gpenciltime(brna);
2360   rna_def_modifier_gpencilcolor(brna);
2361   rna_def_modifier_gpencilarray(brna);
2362   rna_def_modifier_gpencilbuild(brna);
2363   rna_def_modifier_gpencilopacity(brna);
2364   rna_def_modifier_gpencillattice(brna);
2365   rna_def_modifier_gpencilmirror(brna);
2366   rna_def_modifier_gpencilhook(brna);
2367   rna_def_modifier_gpencilarmature(brna);
2368   rna_def_modifier_gpencilmultiply(brna);
2369   rna_def_modifier_gpenciltexture(brna);
2370 }
2371 
2372 #endif
2373