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.
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.
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.
17 /** \file \ingroup RNA
25 #include "DNA_armature_types.h"
26 #include "DNA_cachefile_types.h"
27 #include "DNA_mesh_types.h"
28 #include "DNA_gpencil_modifier_types.h"
29 #include "DNA_object_types.h"
30 #include "DNA_object_force_types.h"
31 #include "DNA_scene_types.h"
33 #include "MEM_guardedalloc.h"
37 #include "BLT_translation.h"
39 #include "BKE_animsys.h"
40 #include "BKE_data_transfer.h"
41 #include "BKE_dynamicpaint.h"
42 #include "BKE_effect.h"
43 #include "BKE_mesh_mapping.h"
44 #include "BKE_mesh_remap.h"
45 #include "BKE_multires.h"
46 #include "BKE_smoke.h" /* For smokeModifier_free & smokeModifier_createType */
48 #include "RNA_access.h"
49 #include "RNA_define.h"
50 #include "RNA_enum_types.h"
52 #include "rna_internal.h"
57 const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = {
58 {0, "", 0, N_("Generate"), "" },
59 {eGpencilModifierType_Array, "GP_ARRAY", ICON_MOD_ARRAY, "Array", "Create array of duplicate instances"},
60 {eGpencilModifierType_Build, "GP_BUILD", ICON_MOD_BUILD, "Build", "Create duplication of strokes"},
61 {eGpencilModifierType_Mirror, "GP_MIRROR", ICON_MOD_MIRROR, "Mirror", "Duplicate strokes like a mirror"},
62 {eGpencilModifierType_Simplify, "GP_SIMPLIFY", ICON_MOD_SIMPLIFY, "Simplify", "Simplify stroke reducing number of points"},
63 {eGpencilModifierType_Subdiv, "GP_SUBDIV", ICON_MOD_SUBSURF, "Subdivide", "Subdivide stroke adding more control points"},
64 {0, "", 0, N_("Deform"), "" },
65 {eGpencilModifierType_Armature, "GP_ARMATURE", ICON_MOD_ARMATURE, "Armature", "Deform stroke points using armature object"},
66 {eGpencilModifierType_Hook, "GP_HOOK", ICON_HOOK, "Hook", "Deform stroke points using objects"},
67 {eGpencilModifierType_Lattice, "GP_LATTICE", ICON_MOD_LATTICE, "Lattice", "Deform strokes using lattice"},
68 {eGpencilModifierType_Noise, "GP_NOISE", ICON_MOD_NOISE, "Noise", "Add noise to strokes"},
69 {eGpencilModifierType_Offset, "GP_OFFSET", ICON_MOD_OFFSET, "Offset", "Change stroke location, rotation or scale"},
70 {eGpencilModifierType_Smooth, "GP_SMOOTH", ICON_MOD_SMOOTH, "Smooth", "Smooth stroke"},
71 {eGpencilModifierType_Thick, "GP_THICK", ICON_MOD_THICKNESS, "Thickness", "Change stroke thickness"},
72 {eGpencilModifierType_Time, "GP_TIME", ICON_MOD_TIME, "Time Offset", "Offset keyframes"},
73 {0, "", 0, N_("Color"), "" },
74 {eGpencilModifierType_Color, "GP_COLOR", ICON_MOD_HUE_SATURATION, "Hue/Saturation", "Apply changes to stroke colors"},
75 {eGpencilModifierType_Opacity, "GP_OPACITY", ICON_MOD_OPACITY, "Opacity", "Opacity of the strokes"},
76 {eGpencilModifierType_Tint, "GP_TINT", ICON_MOD_TINT, "Tint", "Tint strokes with new color"},
77 {0, NULL, 0, NULL, NULL},
81 static const EnumPropertyItem modifier_modify_color_items[] = {
82 {GP_MODIFY_COLOR_BOTH, "BOTH", 0, "Both", "Modify fill and stroke colors"},
83 {GP_MODIFY_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
84 {GP_MODIFY_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
85 {0, NULL, 0, NULL, NULL},
88 static const EnumPropertyItem modifier_gphook_falloff_items[] = {
89 {eGPHook_Falloff_None, "NONE", 0, "No Falloff", ""},
90 {eGPHook_Falloff_Curve, "CURVE", 0, "Curve", ""},
91 {eGPHook_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
92 {eGPHook_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
93 {eGPHook_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
94 {eGPHook_Falloff_InvSquare, "INVERSE_SQUARE", ICON_ROOTCURVE, "Inverse Square", ""},
95 {eGPHook_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
96 {eGPHook_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
97 {eGPHook_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
98 {0, NULL, 0, NULL, NULL},
101 static const EnumPropertyItem rna_enum_time_mode_items[] = {
102 {GP_TIME_MODE_NORMAL, "NORMAL", 0, "Normal", "Apply offset in normal animation direction"},
103 {GP_TIME_MODE_REVERSE, "REVERSE", 0, "Reverse", "Apply offset in reverse animation direction"},
104 {GP_TIME_MODE_FIX, "FIX", 0, "Fixed Frame", "Keep frame and do not change with time"},
105 {0, NULL, 0, NULL, NULL},
112 #include "DNA_particle_types.h"
113 #include "DNA_curve_types.h"
114 #include "DNA_smoke_types.h"
116 #include "BKE_cachefile.h"
117 #include "BKE_context.h"
118 #include "BKE_gpencil_modifier.h"
119 #include "BKE_object.h"
120 #include "BKE_gpencil.h"
122 #include "DEG_depsgraph.h"
123 #include "DEG_depsgraph_build.h"
125 static StructRNA *rna_GpencilModifier_refine(struct PointerRNA *ptr)
127 GpencilModifierData *md = (GpencilModifierData *)ptr->data;
129 switch ((GpencilModifierType)md->type) {
130 case eGpencilModifierType_Noise:
131 return &RNA_NoiseGpencilModifier;
132 case eGpencilModifierType_Subdiv:
133 return &RNA_SubdivGpencilModifier;
134 case eGpencilModifierType_Simplify:
135 return &RNA_SimplifyGpencilModifier;
136 case eGpencilModifierType_Thick:
137 return &RNA_ThickGpencilModifier;
138 case eGpencilModifierType_Tint:
139 return &RNA_TintGpencilModifier;
140 case eGpencilModifierType_Time:
141 return &RNA_TimeGpencilModifier;
142 case eGpencilModifierType_Color:
143 return &RNA_ColorGpencilModifier;
144 case eGpencilModifierType_Array:
145 return &RNA_ArrayGpencilModifier;
146 case eGpencilModifierType_Build:
147 return &RNA_BuildGpencilModifier;
148 case eGpencilModifierType_Opacity:
149 return &RNA_OpacityGpencilModifier;
150 case eGpencilModifierType_Lattice:
151 return &RNA_LatticeGpencilModifier;
152 case eGpencilModifierType_Mirror:
153 return &RNA_MirrorGpencilModifier;
154 case eGpencilModifierType_Smooth:
155 return &RNA_SmoothGpencilModifier;
156 case eGpencilModifierType_Hook:
157 return &RNA_HookGpencilModifier;
158 case eGpencilModifierType_Offset:
159 return &RNA_OffsetGpencilModifier;
160 case eGpencilModifierType_Armature:
161 return &RNA_ArmatureGpencilModifier;
163 case eGpencilModifierType_None:
164 case NUM_GREASEPENCIL_MODIFIER_TYPES:
165 return &RNA_GpencilModifier;
168 return &RNA_GpencilModifier;
171 static void rna_GpencilModifier_name_set(PointerRNA *ptr, const char *value)
173 GpencilModifierData *gmd = ptr->data;
174 char oldname[sizeof(gmd->name)];
176 /* make a copy of the old name first */
177 BLI_strncpy(oldname, gmd->name, sizeof(gmd->name));
179 /* copy the new name into the name slot */
180 BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
182 /* make sure the name is truly unique */
184 Object *ob = ptr->id.data;
185 BKE_gpencil_modifier_unique_name(&ob->greasepencil_modifiers, gmd);
188 /* fix all the animation data which may link to this */
189 BKE_animdata_fix_paths_rename_all(NULL, "grease_pencil_modifiers", oldname, gmd->name);
192 static char *rna_GpencilModifier_path(PointerRNA *ptr)
194 GpencilModifierData *gmd = ptr->data;
195 char name_esc[sizeof(gmd->name) * 2];
197 BLI_strescape(name_esc, gmd->name, sizeof(name_esc));
198 return BLI_sprintfN("grease_pencil_modifiers[\"%s\"]", name_esc);
201 static void rna_GpencilModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
203 DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
204 WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
207 static void rna_GpencilModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
209 rna_GpencilModifier_update(bmain, scene, ptr);
210 DEG_relations_tag_update(bmain);
215 #define RNA_GP_MOD_VGROUP_NAME_SET(_type, _prop) \
216 static void rna_##_type##GpencilModifier_##_prop##_set(PointerRNA *ptr, const char *value) \
218 _type##GpencilModifierData *tmd = (_type##GpencilModifierData *)ptr->data; \
219 rna_object_vgroup_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
222 RNA_GP_MOD_VGROUP_NAME_SET(Noise, vgname);
223 RNA_GP_MOD_VGROUP_NAME_SET(Thick, vgname);
224 RNA_GP_MOD_VGROUP_NAME_SET(Opacity, vgname);
225 RNA_GP_MOD_VGROUP_NAME_SET(Lattice, vgname);
226 RNA_GP_MOD_VGROUP_NAME_SET(Smooth, vgname);
227 RNA_GP_MOD_VGROUP_NAME_SET(Hook, vgname);
228 RNA_GP_MOD_VGROUP_NAME_SET(Offset, vgname);
229 RNA_GP_MOD_VGROUP_NAME_SET(Armature, vgname);
231 #undef RNA_GP_MOD_VGROUP_NAME_SET
235 static void greasepencil_modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
237 Object *ob = value.data;
239 if (!self || ob != self) {
240 if (!ob || type == OB_EMPTY || ob->type == type) {
241 id_lib_extern((ID *)ob);
247 #define RNA_GP_MOD_OBJECT_SET(_type, _prop, _obtype) \
248 static void rna_##_type##GpencilModifier_##_prop##_set(PointerRNA *ptr, PointerRNA value) \
250 _type##GpencilModifierData *tmd = (_type##GpencilModifierData *)ptr->data; \
251 greasepencil_modifier_object_set(ptr->id.data, &tmd->_prop, _obtype, value); \
254 RNA_GP_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
255 RNA_GP_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
256 RNA_GP_MOD_OBJECT_SET(Mirror, object, OB_EMPTY);
258 #undef RNA_GP_MOD_OBJECT_SET
260 static void rna_HookGpencilModifier_object_set(PointerRNA *ptr, PointerRNA value)
262 HookGpencilModifierData *hmd = ptr->data;
263 Object *ob = (Object *)value.data;
266 id_lib_extern((ID *)ob);
267 BKE_object_modifier_gpencil_hook_reset(ob, hmd);
270 static void rna_TimeModifier_start_frame_set(PointerRNA *ptr, int value)
272 TimeGpencilModifierData *tmd = ptr->data;
273 CLAMP(value, MINFRAME, MAXFRAME);
276 if (tmd->sfra >= tmd->efra) {
277 tmd->efra = MIN2(tmd->sfra, MAXFRAME);
281 static void rna_TimeModifier_end_frame_set(PointerRNA *ptr, int value)
283 TimeGpencilModifierData *tmd = ptr->data;
284 CLAMP(value, MINFRAME, MAXFRAME);
287 if (tmd->sfra >= tmd->efra) {
288 tmd->sfra = MAX2(tmd->efra, MINFRAME);
294 static void rna_def_modifier_gpencilnoise(BlenderRNA *brna)
299 srna = RNA_def_struct(brna, "NoiseGpencilModifier", "GpencilModifier");
300 RNA_def_struct_ui_text(srna, "Noise Modifier", "Noise effect modifier");
301 RNA_def_struct_sdna(srna, "NoiseGpencilModifierData");
302 RNA_def_struct_ui_icon(srna, ICON_MOD_NOISE);
304 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
305 RNA_def_property_string_sdna(prop, NULL, "layername");
306 RNA_def_property_ui_text(prop, "Layer", "Layer name");
307 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
309 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
310 RNA_def_property_string_sdna(prop, NULL, "vgname");
311 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
312 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_NoiseGpencilModifier_vgname_set");
313 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
315 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
316 RNA_def_property_float_sdna(prop, NULL, "factor");
317 RNA_def_property_range(prop, 0, 30.0);
318 RNA_def_property_ui_text(prop, "Factor", "Amount of noise to apply");
319 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
321 prop = RNA_def_property(srna, "random", PROP_BOOLEAN, PROP_NONE);
322 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_USE_RANDOM);
323 RNA_def_property_ui_text(prop, "Random", "Use random values");
324 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
326 prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
327 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_LOCATION);
328 RNA_def_property_ui_text(prop, "Affect Position", "The modifier affects the position of the point");
329 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
331 prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
332 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_STRENGTH);
333 RNA_def_property_ui_text(prop, "Affect Strength", "The modifier affects the color strength of the point");
334 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
336 prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
337 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_THICKNESS);
338 RNA_def_property_ui_text(prop, "Affect Thickness", "The modifier affects the thickness of the point");
339 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
341 prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
342 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_UV);
343 RNA_def_property_ui_text(prop, "Affect UV", "The modifier affects the UV rotation factor of the point");
344 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
346 prop = RNA_def_property(srna, "full_stroke", PROP_BOOLEAN, PROP_NONE);
347 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_FULL_STROKE);
348 RNA_def_property_ui_text(prop, "Full Stroke", "The noise moves the stroke as a whole, not point by point");
349 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
351 prop = RNA_def_property(srna, "move_extreme", PROP_BOOLEAN, PROP_NONE);
352 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOVE_EXTREME);
353 RNA_def_property_ui_text(prop, "Move Extremes", "The noise moves the stroke extreme points");
354 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
356 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
357 RNA_def_property_int_sdna(prop, NULL, "pass_index");
358 RNA_def_property_range(prop, 0, 100);
359 RNA_def_property_ui_text(prop, "Pass", "Pass index");
360 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
362 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
363 RNA_def_property_int_sdna(prop, NULL, "step");
364 RNA_def_property_range(prop, 1, 100);
365 RNA_def_property_ui_text(prop, "Step", "Number of frames before recalculate random values again");
366 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
368 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
369 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_LAYER);
370 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
371 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
373 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
374 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_PASS);
375 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
376 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
378 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
379 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_VGROUP);
380 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
381 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
383 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
384 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
385 RNA_def_property_range(prop, 0, 100);
386 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
387 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
389 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
390 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_LAYERPASS);
391 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
392 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
395 static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna)
400 srna = RNA_def_struct(brna, "SmoothGpencilModifier", "GpencilModifier");
401 RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smooth effect modifier");
402 RNA_def_struct_sdna(srna, "SmoothGpencilModifierData");
403 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
405 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
406 RNA_def_property_string_sdna(prop, NULL, "layername");
407 RNA_def_property_ui_text(prop, "Layer", "Layer name");
408 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
410 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
411 RNA_def_property_string_sdna(prop, NULL, "vgname");
412 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
413 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SmoothGpencilModifier_vgname_set");
414 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
416 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
417 RNA_def_property_float_sdna(prop, NULL, "factor");
418 RNA_def_property_range(prop, 0, 2);
419 RNA_def_property_ui_text(prop, "Factor", "Amount of smooth to apply");
420 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
422 prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
423 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_LOCATION);
424 RNA_def_property_ui_text(prop, "Affect Position", "The modifier affects the position of the point");
425 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
427 prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
428 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_STRENGTH);
429 RNA_def_property_ui_text(prop, "Affect Strength", "The modifier affects the color strength of the point");
430 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
432 prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
433 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_THICKNESS);
434 RNA_def_property_ui_text(prop, "Affect Thickness", "The modifier affects the thickness of the point");
435 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
437 prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
438 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_MOD_UV);
439 RNA_def_property_ui_text(prop, "Affect UV", "The modifier affects the UV rotation factor of the point");
440 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
442 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
443 RNA_def_property_int_sdna(prop, NULL, "pass_index");
444 RNA_def_property_range(prop, 0, 100);
445 RNA_def_property_ui_text(prop, "Pass", "Pass index");
446 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
448 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
449 RNA_def_property_int_sdna(prop, NULL, "step");
450 RNA_def_property_range(prop, 1, 10);
451 RNA_def_property_ui_text(prop, "Step", "Number of times to apply smooth (high numbers can reduce fps)");
452 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
454 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
455 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_LAYER);
456 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
457 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
459 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
460 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_PASS);
461 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
462 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
464 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
465 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_VGROUP);
466 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
467 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
469 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
470 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
471 RNA_def_property_range(prop, 0, 100);
472 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
473 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
475 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
476 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_LAYERPASS);
477 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
478 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
481 static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna)
486 srna = RNA_def_struct(brna, "SubdivGpencilModifier", "GpencilModifier");
487 RNA_def_struct_ui_text(srna, "Subdivision Modifier", "Subdivide Stroke modifier");
488 RNA_def_struct_sdna(srna, "SubdivGpencilModifierData");
489 RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
491 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
492 RNA_def_property_string_sdna(prop, NULL, "layername");
493 RNA_def_property_ui_text(prop, "Layer", "Layer name");
494 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
496 prop = RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
497 RNA_def_property_int_sdna(prop, NULL, "level");
498 RNA_def_property_range(prop, 0, 5);
499 RNA_def_property_ui_text(prop, "Level", "Number of subdivisions");
500 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
502 prop = RNA_def_property(srna, "simple", PROP_BOOLEAN, PROP_NONE);
503 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_SIMPLE);
504 RNA_def_property_ui_text(prop, "Simple", "The modifier only add control points");
505 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
507 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
508 RNA_def_property_int_sdna(prop, NULL, "pass_index");
509 RNA_def_property_range(prop, 0, 100);
510 RNA_def_property_ui_text(prop, "Pass", "Pass index");
511 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
513 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
514 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_LAYER);
515 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
516 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
518 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
519 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_PASS);
520 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
521 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
523 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
524 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
525 RNA_def_property_range(prop, 0, 100);
526 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
527 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
529 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
530 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_LAYERPASS);
531 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
532 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
535 static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
540 static EnumPropertyItem prop_gpencil_simplify_mode_items[] = {
541 {GP_SIMPLIFY_FIXED, "FIXED", ICON_IPO_CONSTANT, "Fixed",
542 "Delete alternative vertices in the stroke, except extremes"},
543 {GP_SIMPLIFY_ADAPTIVE, "ADAPTIVE", ICON_IPO_EASE_IN_OUT, "Adaptive",
544 "Use a RDP algorithm to simplify" },
545 {0, NULL, 0, NULL, NULL},
548 srna = RNA_def_struct(brna, "SimplifyGpencilModifier", "GpencilModifier");
549 RNA_def_struct_ui_text(srna, "Simplify Modifier", "Simplify Stroke modifier");
550 RNA_def_struct_sdna(srna, "SimplifyGpencilModifierData");
551 RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLIFY);
553 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
554 RNA_def_property_string_sdna(prop, NULL, "layername");
555 RNA_def_property_ui_text(prop, "Layer", "Layer name");
556 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
558 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
559 RNA_def_property_float_sdna(prop, NULL, "factor");
560 RNA_def_property_range(prop, 0, 100.0);
561 RNA_def_property_ui_range(prop, 0, 100.0, 1.0f, 3);
562 RNA_def_property_ui_text(prop, "Factor", "Factor of Simplify");
563 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
565 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
566 RNA_def_property_int_sdna(prop, NULL, "pass_index");
567 RNA_def_property_range(prop, 0, 100);
568 RNA_def_property_ui_text(prop, "Pass", "Pass index");
569 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
571 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
572 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_LAYER);
573 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
574 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
576 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
577 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_PASS);
578 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
579 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
581 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
582 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
583 RNA_def_property_range(prop, 0, 100);
584 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
585 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
587 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
588 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_LAYERPASS);
589 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
590 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
593 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
594 RNA_def_property_enum_items(prop, prop_gpencil_simplify_mode_items);
595 RNA_def_property_ui_text(prop, "Mode", "How simplify the stroke");
596 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
598 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
599 RNA_def_property_int_sdna(prop, NULL, "step");
600 RNA_def_property_range(prop, 1, 50);
601 RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply simplify");
602 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
605 static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
610 srna = RNA_def_struct(brna, "ThickGpencilModifier", "GpencilModifier");
611 RNA_def_struct_ui_text(srna, "Thick Modifier", "Subdivide and Smooth Stroke modifier");
612 RNA_def_struct_sdna(srna, "ThickGpencilModifierData");
613 RNA_def_struct_ui_icon(srna, ICON_MOD_THICKNESS);
615 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
616 RNA_def_property_string_sdna(prop, NULL, "layername");
617 RNA_def_property_ui_text(prop, "Layer", "Layer name");
618 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
620 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
621 RNA_def_property_string_sdna(prop, NULL, "vgname");
622 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
623 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ThickGpencilModifier_vgname_set");
624 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
626 prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
627 RNA_def_property_int_sdna(prop, NULL, "thickness");
628 RNA_def_property_range(prop, -100, 500);
629 RNA_def_property_ui_text(prop, "Thickness", "Factor of thickness change");
630 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
632 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
633 RNA_def_property_int_sdna(prop, NULL, "pass_index");
634 RNA_def_property_range(prop, 0, 100);
635 RNA_def_property_ui_text(prop, "Pass", "Pass index");
636 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
638 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
639 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_LAYER);
640 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
641 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
643 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
644 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_PASS);
645 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
646 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
648 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
649 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_VGROUP);
650 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
651 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
653 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
654 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
655 RNA_def_property_range(prop, 0, 100);
656 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
657 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
659 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
660 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_LAYERPASS);
661 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
662 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
664 prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
665 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_CUSTOM_CURVE);
666 RNA_def_property_ui_text(prop, "Custom Curve", "Use a custom curve to define thickness changes");
667 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
669 prop = RNA_def_property(srna, "normalize_thickness", PROP_BOOLEAN, PROP_NONE);
670 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_NORMALIZE);
671 RNA_def_property_ui_text(prop, "Normalize", "Normalize the full stroke to modifier thickness");
672 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
674 prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
675 RNA_def_property_pointer_sdna(prop, NULL, "curve_thickness");
676 RNA_def_property_ui_text(prop, "Curve", "Custom Thickness Curve");
677 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
680 static void rna_def_modifier_gpenciloffset(BlenderRNA *brna)
685 srna = RNA_def_struct(brna, "OffsetGpencilModifier", "GpencilModifier");
686 RNA_def_struct_ui_text(srna, "Offset Modifier", "Offset Stroke modifier");
687 RNA_def_struct_sdna(srna, "OffsetGpencilModifierData");
688 RNA_def_struct_ui_icon(srna, ICON_MOD_OFFSET);
690 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
691 RNA_def_property_string_sdna(prop, NULL, "layername");
692 RNA_def_property_ui_text(prop, "Layer", "Layer name");
693 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
695 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
696 RNA_def_property_string_sdna(prop, NULL, "vgname");
697 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
698 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_OffsetGpencilModifier_vgname_set");
699 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
701 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
702 RNA_def_property_int_sdna(prop, NULL, "pass_index");
703 RNA_def_property_range(prop, 0, 100);
704 RNA_def_property_ui_text(prop, "Pass", "Pass index");
705 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
707 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
708 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_LAYER);
709 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
710 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
712 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
713 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_PASS);
714 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
715 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
717 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
718 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_VGROUP);
719 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
720 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
722 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
723 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
724 RNA_def_property_range(prop, 0, 100);
725 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
726 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
728 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
729 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_LAYERPASS);
730 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
731 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
733 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
734 RNA_def_property_float_sdna(prop, NULL, "loc");
735 RNA_def_property_ui_text(prop, "Location", "Values for change location");
736 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
737 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
739 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
740 RNA_def_property_float_sdna(prop, NULL, "rot");
741 RNA_def_property_ui_text(prop, "Rotation", "Values for changes in rotation");
742 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
743 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
745 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
746 RNA_def_property_float_sdna(prop, NULL, "scale");
747 RNA_def_property_ui_text(prop, "Scale", "Values for changes in scale");
748 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
749 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
752 static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
757 srna = RNA_def_struct(brna, "TintGpencilModifier", "GpencilModifier");
758 RNA_def_struct_ui_text(srna, "Tint Modifier", "Tint Stroke Color modifier");
759 RNA_def_struct_sdna(srna, "TintGpencilModifierData");
760 RNA_def_struct_ui_icon(srna, ICON_COLOR);
762 prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
763 RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
764 RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
765 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
767 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
768 RNA_def_property_string_sdna(prop, NULL, "layername");
769 RNA_def_property_ui_text(prop, "Layer", "Layer name");
770 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
772 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
773 RNA_def_property_range(prop, 0.0, 1.0);
774 RNA_def_property_float_sdna(prop, NULL, "rgb");
775 RNA_def_property_array(prop, 3);
776 RNA_def_property_ui_text(prop, "Color", "Color used for tinting");
777 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
779 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
780 RNA_def_property_float_sdna(prop, NULL, "factor");
781 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 3);
782 RNA_def_property_ui_text(prop, "Factor", "Factor for mixing color");
783 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
785 prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE);
786 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_CREATE_COLORS);
787 RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material");
788 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
790 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
791 RNA_def_property_int_sdna(prop, NULL, "pass_index");
792 RNA_def_property_range(prop, 0, 100);
793 RNA_def_property_ui_text(prop, "Pass", "Pass index");
794 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
796 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
797 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_LAYER);
798 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
799 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
801 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
802 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_PASS);
803 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
804 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
806 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
807 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
808 RNA_def_property_range(prop, 0, 100);
809 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
810 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
812 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
813 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_LAYERPASS);
814 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
815 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
818 static void rna_def_modifier_gpenciltime(BlenderRNA *brna)
823 srna = RNA_def_struct(brna, "TimeGpencilModifier", "GpencilModifier");
824 RNA_def_struct_ui_text(srna, "Time Offset Modifier", "Time offset modifier");
825 RNA_def_struct_sdna(srna, "TimeGpencilModifierData");
826 RNA_def_struct_ui_icon(srna, ICON_MOD_TIME);
828 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
829 RNA_def_property_enum_sdna(prop, NULL, "mode");
830 RNA_def_property_enum_items(prop, rna_enum_time_mode_items);
831 RNA_def_property_ui_text(prop, "Mode", "");
832 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
834 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
835 RNA_def_property_string_sdna(prop, NULL, "layername");
836 RNA_def_property_ui_text(prop, "Layer", "Layer name");
837 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
839 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
840 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_INVERT_LAYER);
841 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
842 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
844 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
845 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
846 RNA_def_property_range(prop, 0, 100);
847 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
848 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
850 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
851 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_INVERT_LAYERPASS);
852 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
853 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
855 prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
856 RNA_def_property_int_sdna(prop, NULL, "offset");
857 RNA_def_property_range(prop, -INT_MAX, INT_MAX);
858 RNA_def_property_ui_text(prop, "Frame Offset",
859 "Number of frames to offset original keyframe number or frame to fix");
860 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
862 prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
863 RNA_def_property_float_sdna(prop, NULL, "frame_scale");
864 RNA_def_property_range(prop, 0.001f, 100.0f);
865 RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
866 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
868 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
869 RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
870 RNA_def_property_int_sdna(prop, NULL, "sfra");
871 RNA_def_property_int_funcs(prop, NULL, "rna_TimeModifier_start_frame_set", NULL);
872 RNA_def_property_range(prop, MINFRAME, MAXFRAME);
873 RNA_def_property_int_default(prop, 1);
874 RNA_def_property_ui_text(prop, "Start Frame", "First frame of the range");
875 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
877 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
878 RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
879 RNA_def_property_int_sdna(prop, NULL, "efra");
880 RNA_def_property_int_funcs(prop, NULL, "rna_TimeModifier_end_frame_set", NULL);
881 RNA_def_property_range(prop, MINFRAME, MAXFRAME);
882 RNA_def_property_int_default(prop, 250);
883 RNA_def_property_ui_text(prop, "End Frame", "Final frame of the range");
884 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
886 prop = RNA_def_property(srna, "use_keep_loop", PROP_BOOLEAN, PROP_NONE);
887 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_KEEP_LOOP);
888 RNA_def_property_ui_text(prop, "Keep Loop",
889 "Retiming end frames and move to start of animation to keep loop");
890 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
892 prop = RNA_def_property(srna, "use_custom_frame_range", PROP_BOOLEAN, PROP_NONE);
893 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TIME_CUSTOM_RANGE);
894 RNA_def_property_ui_text(prop, "Custom Range",
895 "Define a custom range of frames to use in modifier");
896 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
899 static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
904 srna = RNA_def_struct(brna, "ColorGpencilModifier", "GpencilModifier");
905 RNA_def_struct_ui_text(srna, "Hue/Saturation Modifier", "Change Hue/Saturation modifier");
906 RNA_def_struct_sdna(srna, "ColorGpencilModifierData");
907 RNA_def_struct_ui_icon(srna, ICON_MOD_TINT);
909 prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
910 RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
911 RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
912 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
914 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
915 RNA_def_property_string_sdna(prop, NULL, "layername");
916 RNA_def_property_ui_text(prop, "Layer", "Layer name");
917 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
919 prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
920 RNA_def_property_range(prop, 0.0, 2.0);
921 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
922 RNA_def_property_float_sdna(prop, NULL, "hsv[0]");
923 RNA_def_property_ui_text(prop, "Hue", "Color Hue");
924 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
926 prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
927 RNA_def_property_range(prop, 0.0, 2.0);
928 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
929 RNA_def_property_float_sdna(prop, NULL, "hsv[1]");
930 RNA_def_property_ui_text(prop, "Saturation", "Color Saturation");
931 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
933 prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
934 RNA_def_property_range(prop, 0.0, 2.0);
935 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
936 RNA_def_property_float_sdna(prop, NULL, "hsv[2]");
937 RNA_def_property_ui_text(prop, "Value", "Color Value");
938 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
940 prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE);
941 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_CREATE_COLORS);
942 RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material");
943 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
945 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
946 RNA_def_property_int_sdna(prop, NULL, "pass_index");
947 RNA_def_property_range(prop, 0, 100);
948 RNA_def_property_ui_text(prop, "Pass", "Pass index");
949 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
951 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
952 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_LAYER);
953 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
954 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
956 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
957 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_PASS);
958 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
959 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
961 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
962 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
963 RNA_def_property_range(prop, 0, 100);
964 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
965 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
967 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
968 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_LAYERPASS);
969 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
970 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
973 static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
978 srna = RNA_def_struct(brna, "OpacityGpencilModifier", "GpencilModifier");
979 RNA_def_struct_ui_text(srna, "Opacity Modifier", "Opacity of Strokes modifier");
980 RNA_def_struct_sdna(srna, "OpacityGpencilModifierData");
981 RNA_def_struct_ui_icon(srna, ICON_MOD_OPACITY);
983 prop = RNA_def_property(srna, "modify_color", PROP_ENUM, PROP_NONE);
984 RNA_def_property_enum_items(prop, modifier_modify_color_items); /* share the enum */
985 RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected");
986 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
988 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
989 RNA_def_property_string_sdna(prop, NULL, "layername");
990 RNA_def_property_ui_text(prop, "Layer", "Layer name");
991 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
993 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
994 RNA_def_property_string_sdna(prop, NULL, "vgname");
995 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
996 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_OpacityGpencilModifier_vgname_set");
997 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
999 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
1000 RNA_def_property_float_sdna(prop, NULL, "factor");
1001 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 3);
1002 RNA_def_property_ui_text(prop, "Factor", "Factor of Opacity");
1003 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1005 prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE);
1006 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_CREATE_COLORS);
1007 RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material");
1008 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1010 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1011 RNA_def_property_int_sdna(prop, NULL, "pass_index");
1012 RNA_def_property_range(prop, 0, 100);
1013 RNA_def_property_ui_text(prop, "Pass", "Pass index");
1014 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1016 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1017 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_LAYER);
1018 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1019 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1021 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1022 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_PASS);
1023 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1024 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1026 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1027 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_VGROUP);
1028 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
1029 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1031 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1032 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1033 RNA_def_property_range(prop, 0, 100);
1034 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1035 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1037 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1038 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_LAYERPASS);
1039 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1040 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1043 static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
1048 srna = RNA_def_struct(brna, "ArrayGpencilModifier", "GpencilModifier");
1049 RNA_def_struct_ui_text(srna, "Instance Modifier", "Create grid of duplicate instances");
1050 RNA_def_struct_sdna(srna, "ArrayGpencilModifierData");
1051 RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
1053 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1054 RNA_def_property_string_sdna(prop, NULL, "layername");
1055 RNA_def_property_ui_text(prop, "Layer", "Layer name");
1056 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1058 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1059 RNA_def_property_int_sdna(prop, NULL, "pass_index");
1060 RNA_def_property_range(prop, 0, 100);
1061 RNA_def_property_ui_text(prop, "Pass", "Pass index");
1062 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1064 prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
1065 RNA_def_property_range(prop, 1, INT_MAX);
1066 RNA_def_property_ui_range(prop, 1, 50, 1, -1);
1067 RNA_def_property_ui_text(prop, "Count", "Number of items");
1068 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1070 /* Offset parameters */
1071 prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
1072 RNA_def_property_pointer_sdna(prop, NULL, "object");
1073 RNA_def_property_ui_text(prop, "Object Offset",
1074 "Use the location and rotation of another object to determine the distance and "
1075 "rotational change between arrayed items");
1076 RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1077 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1079 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
1080 RNA_def_property_float_sdna(prop, NULL, "offset");
1081 RNA_def_property_ui_text(prop, "Offset", "Value for the distance between items");
1082 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1083 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1085 prop = RNA_def_property(srna, "shift", PROP_FLOAT, PROP_TRANSLATION);
1086 RNA_def_property_float_sdna(prop, NULL, "shift");
1087 RNA_def_property_ui_text(prop, "Shift", "Shiftiness value");
1088 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1089 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1091 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
1092 RNA_def_property_float_sdna(prop, NULL, "rot");
1093 RNA_def_property_ui_text(prop, "Rotation", "Value for changes in rotation");
1094 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1095 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1097 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
1098 RNA_def_property_float_sdna(prop, NULL, "scale");
1099 RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
1100 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1101 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1103 prop = RNA_def_property(srna, "random_rot", PROP_BOOLEAN, PROP_NONE);
1104 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_ROT);
1105 RNA_def_property_ui_text(prop, "Random Rotation", "Use random factors for rotation");
1106 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1108 prop = RNA_def_property(srna, "rot_factor", PROP_FLOAT, PROP_NONE);
1109 RNA_def_property_float_sdna(prop, NULL, "rnd_rot");
1110 RNA_def_property_ui_text(prop, "Rotation Factor", "Random factor for rotation");
1111 RNA_def_property_range(prop, -10.0, 10.0);
1112 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1114 prop = RNA_def_property(srna, "random_scale", PROP_BOOLEAN, PROP_NONE);
1115 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_SIZE);
1116 RNA_def_property_ui_text(prop, "Random Scale", "Use random factors for scale");
1117 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1119 prop = RNA_def_property(srna, "scale_factor", PROP_FLOAT, PROP_NONE);
1120 RNA_def_property_float_sdna(prop, NULL, "rnd_size");
1121 RNA_def_property_ui_text(prop, "Scale Factor", "Random factor for scale");
1122 RNA_def_property_range(prop, -10.0, 10.0);
1123 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1125 prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
1126 RNA_def_property_int_sdna(prop, NULL, "mat_rpl");
1127 RNA_def_property_range(prop, 0, INT_MAX);
1128 RNA_def_property_ui_text(prop, "Material", "Index of the material used for generated strokes (0 keep original material)");
1129 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1131 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1132 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_LAYER);
1133 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1134 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1136 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1137 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_PASS);
1138 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1139 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1141 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1142 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1143 RNA_def_property_range(prop, 0, 100);
1144 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1145 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1147 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1148 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_LAYERPASS);
1149 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1150 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1152 prop = RNA_def_property(srna, "keep_on_top", PROP_BOOLEAN, PROP_NONE);
1153 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_KEEP_ONTOP);
1154 RNA_def_property_ui_text(prop, "Keep On Top",
1155 "Keep the original stroke in front of new instances (only affect by layer)");
1156 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1159 static void rna_def_modifier_gpencilbuild(BlenderRNA *brna)
1161 static EnumPropertyItem prop_gpencil_build_mode_items[] = {
1162 {GP_BUILD_MODE_SEQUENTIAL, "SEQUENTIAL", ICON_PARTICLE_POINT, "Sequential",
1163 "Strokes appear/disappear one after the other, but only a single one changes at a time"},
1164 {GP_BUILD_MODE_CONCURRENT, "CONCURRENT", ICON_PARTICLE_TIP, "Concurrent",
1165 "Multiple strokes appear/disappear at once"},
1166 {0, NULL, 0, NULL, NULL},
1169 static EnumPropertyItem prop_gpencil_build_transition_items[] = {
1170 {GP_BUILD_TRANSITION_GROW, "GROW", 0, "Grow",
1171 "Show points in the order they occur in each stroke "
1172 "(e.g. for animating lines being drawn)"},
1173 {GP_BUILD_TRANSITION_SHRINK, "SHRINK", 0, "Shrink",
1174 "Hide points from the end of each stroke to the start "
1175 "(e.g. for animating lines being erased)"},
1176 {GP_BUILD_TRANSITION_FADE, "FADE", 0, "Fade",
1177 "Hide points in the order they occur in each stroke "
1178 "(e.g. for animating ink fading or vanishing after getting drawn)"},
1179 {0, NULL, 0, NULL, NULL},
1182 static EnumPropertyItem prop_gpencil_build_time_align_items[] = {
1183 {GP_BUILD_TIMEALIGN_START, "START", 0, "Align Start",
1184 "All strokes start at same time (i.e. short strokes finish earlier)"},
1185 {GP_BUILD_TIMEALIGN_END, "END", 0, "Align End",
1186 "All strokes end at same time (i.e. short strokes start later)"},
1187 {0, NULL, 0, NULL, NULL},
1193 srna = RNA_def_struct(brna, "BuildGpencilModifier", "GpencilModifier");
1194 RNA_def_struct_ui_text(srna, "Build Modifier", "Animate strokes appearing and disappearing");
1195 RNA_def_struct_sdna(srna, "BuildGpencilModifierData");
1196 RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
1199 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1200 RNA_def_property_enum_items(prop, prop_gpencil_build_mode_items);
1201 RNA_def_property_ui_text(prop, "Mode", "How many strokes are being animated at a time");
1202 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1205 prop = RNA_def_property(srna, "transition", PROP_ENUM, PROP_NONE);
1206 RNA_def_property_enum_items(prop, prop_gpencil_build_transition_items);
1207 RNA_def_property_ui_text(prop, "Transition", "How are strokes animated (i.e. are they appearing or disappearing)");
1208 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1211 /* Transition Onset Delay + Length */
1212 prop = RNA_def_property(srna, "start_delay", PROP_FLOAT, PROP_NONE);
1213 RNA_def_property_float_sdna(prop, NULL, "start_delay");
1214 RNA_def_property_ui_text(prop, "Start Delay", "Number of frames after each GP keyframe before the modifier has any effect");
1215 RNA_def_property_range(prop, 0, MAXFRAMEF);
1216 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
1217 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1219 prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE);
1220 RNA_def_property_float_sdna(prop, NULL, "length");
1221 RNA_def_property_ui_text(prop, "Length",
1222 "Maximum number of frames that the build effect can run for "
1223 "(unless another GP keyframe occurs before this time has elapsed)");
1224 RNA_def_property_range(prop, 1, MAXFRAMEF);
1225 RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
1226 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1229 /* Concurrent Mode Settings */
1230 prop = RNA_def_property(srna, "concurrent_time_alignment", PROP_ENUM, PROP_NONE);
1231 RNA_def_property_enum_sdna(prop, NULL, "time_alignment");
1232 RNA_def_property_enum_items(prop, prop_gpencil_build_time_align_items);
1233 RNA_def_property_ui_text(prop, "Time Alignment", "When should strokes start to appear/disappear");
1234 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1239 prop = RNA_def_property(srna, "use_restrict_frame_range", PROP_BOOLEAN, PROP_NONE);
1240 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_RESTRICT_TIME);
1241 RNA_def_property_ui_text(prop, "Restrict Frame Range", "Only modify strokes during the specified frame range");
1242 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1244 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
1245 RNA_def_property_float_sdna(prop, NULL, "start_frame");
1246 RNA_def_property_ui_text(prop, "Start Frame", "Start Frame (when Restrict Frame Range is enabled)");
1247 RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
1248 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1250 prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
1251 RNA_def_property_float_sdna(prop, NULL, "end_frame");
1252 RNA_def_property_ui_text(prop, "End Frame", "End Frame (when Restrict Frame Range is enabled)");
1253 RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
1254 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1257 /* Filters - Layer */
1258 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1259 RNA_def_property_string_sdna(prop, NULL, "layername");
1260 RNA_def_property_ui_text(prop, "Layer", "Layer name");
1261 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1263 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1264 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_INVERT_LAYER);
1265 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1266 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1268 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1269 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1270 RNA_def_property_range(prop, 0, 100);
1271 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1272 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1274 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1275 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BUILD_INVERT_LAYERPASS);
1276 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1277 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1280 static void rna_def_modifier_gpencillattice(BlenderRNA *brna)
1285 srna = RNA_def_struct(brna, "LatticeGpencilModifier", "GpencilModifier");
1286 RNA_def_struct_ui_text(srna, "Lattice Modifier", "Change stroke using lattice to deform modifier");
1287 RNA_def_struct_sdna(srna, "LatticeGpencilModifierData");
1288 RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
1290 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1291 RNA_def_property_string_sdna(prop, NULL, "layername");
1292 RNA_def_property_ui_text(prop, "Layer", "Layer name");
1293 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1295 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1296 RNA_def_property_string_sdna(prop, NULL, "vgname");
1297 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1298 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_LatticeGpencilModifier_vgname_set");
1299 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1301 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1302 RNA_def_property_int_sdna(prop, NULL, "pass_index");
1303 RNA_def_property_range(prop, 0, 100);
1304 RNA_def_property_ui_text(prop, "Pass", "Pass index");
1305 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1307 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1308 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_LAYER);
1309 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1310 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1312 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1313 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_PASS);
1314 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1315 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1317 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1318 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_VGROUP);
1319 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
1320 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1322 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1323 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1324 RNA_def_property_range(prop, 0, 100);
1325 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1326 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1328 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1329 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_LAYERPASS);
1330 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1331 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1333 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1334 RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
1335 RNA_def_property_pointer_funcs(prop, NULL, "rna_LatticeGpencilModifier_object_set", NULL, "rna_Lattice_object_poll");
1336 RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1337 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1339 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
1340 RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
1341 RNA_def_property_ui_range(prop, 0, 1, 10, 2);
1342 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
1343 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1346 static void rna_def_modifier_gpencilmirror(BlenderRNA *brna)
1351 srna = RNA_def_struct(brna, "MirrorGpencilModifier", "GpencilModifier");
1352 RNA_def_struct_ui_text(srna, "Mirror Modifier", "Change stroke using lattice to deform modifier");
1353 RNA_def_struct_sdna(srna, "MirrorGpencilModifierData");
1354 RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
1356 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1357 RNA_def_property_string_sdna(prop, NULL, "layername");
1358 RNA_def_property_ui_text(prop, "Layer", "Layer name");
1359 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1361 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1362 RNA_def_property_int_sdna(prop, NULL, "pass_index");
1363 RNA_def_property_range(prop, 0, 100);
1364 RNA_def_property_ui_text(prop, "Pass", "Pass index");
1365 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1367 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1368 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYER);
1369 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1370 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1372 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1373 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_PASS);
1374 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1375 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1377 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1378 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1379 RNA_def_property_range(prop, 0, 100);
1380 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1381 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1383 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1384 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_LAYERPASS);
1385 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1386 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1388 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1389 RNA_def_property_ui_text(prop, "Object", "Object used as center");
1390 RNA_def_property_pointer_funcs(prop, NULL, "rna_MirrorGpencilModifier_object_set", NULL, NULL);
1391 RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1392 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1394 prop = RNA_def_property(srna, "clip", PROP_BOOLEAN, PROP_NONE);
1395 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_CLIPPING);
1396 RNA_def_property_ui_text(prop, "Clip", "Clip points");
1397 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1399 prop = RNA_def_property(srna, "x_axis", PROP_BOOLEAN, PROP_NONE);
1400 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_X);
1401 RNA_def_property_ui_text(prop, "X", "Mirror this axis");
1402 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1404 prop = RNA_def_property(srna, "y_axis", PROP_BOOLEAN, PROP_NONE);
1405 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_Y);
1406 RNA_def_property_ui_text(prop, "Y", "Mirror this axis");
1407 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1409 prop = RNA_def_property(srna, "z_axis", PROP_BOOLEAN, PROP_NONE);
1410 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_AXIS_Z);
1411 RNA_def_property_ui_text(prop, "Z", "Mirror this axis");
1412 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1415 static void rna_def_modifier_gpencilhook(BlenderRNA *brna)
1420 srna = RNA_def_struct(brna, "HookGpencilModifier", "GpencilModifier");
1421 RNA_def_struct_ui_text(srna, "Hook Modifier", "Hook modifier to modify the location of stroke points");
1422 RNA_def_struct_sdna(srna, "HookGpencilModifierData");
1423 RNA_def_struct_ui_icon(srna, ICON_HOOK);
1425 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1426 RNA_def_property_ui_text(prop, "Object", "Parent Object for hook, also recalculates and clears offset");
1427 RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1428 RNA_def_property_pointer_funcs(prop, NULL, "rna_HookGpencilModifier_object_set", NULL, NULL);
1429 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1431 prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
1432 RNA_def_property_string_sdna(prop, NULL, "subtarget");
1433 RNA_def_property_ui_text(prop, "Sub-Target",
1434 "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
1435 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1437 prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE);
1438 RNA_def_property_string_sdna(prop, NULL, "layername");
1439 RNA_def_property_ui_text(prop, "Layer", "Layer name");
1440 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1442 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1443 RNA_def_property_string_sdna(prop, NULL, "vgname");
1444 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
1445 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_HookGpencilModifier_vgname_set");
1446 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1448 prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
1449 RNA_def_property_int_sdna(prop, NULL, "pass_index");
1450 RNA_def_property_range(prop, 0, 100);
1451 RNA_def_property_ui_text(prop, "Pass", "Pass index");
1452 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1454 prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE);
1455 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_LAYER);
1456 RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
1457 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1459 prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
1460 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_PASS);
1461 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1462 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1464 prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE);
1465 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_VGROUP);
1466 RNA_def_property_ui_text(prop, "Inverse VertexGroup", "Inverse filter");
1467 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1469 prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE);
1470 RNA_def_property_int_sdna(prop, NULL, "layer_pass");
1471 RNA_def_property_range(prop, 0, 100);
1472 RNA_def_property_ui_text(prop, "Pass", "Layer pass index");
1473 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1475 prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE);
1476 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_LAYERPASS);
1477 RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
1478 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1480 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
1481 RNA_def_property_float_sdna(prop, NULL, "force");
1482 RNA_def_property_range(prop, 0, 1);
1483 RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
1484 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1486 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
1487 RNA_def_property_enum_items(prop, modifier_gphook_falloff_items); /* share the enum */
1488 RNA_def_property_ui_text(prop, "Falloff Type", "");
1489 RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE); /* Abusing id_curve :/ */
1490 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1492 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
1493 RNA_def_property_float_sdna(prop, NULL, "falloff");
1494 RNA_def_property_range(prop, 0, FLT_MAX);
1495 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
1496 RNA_def_property_ui_text(prop, "Radius", "If not zero, the distance from the hook where influence ends");
1497 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1499 prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
1500 RNA_def_property_pointer_sdna(prop, NULL, "curfalloff");
1501 RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
1502 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1504 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
1505 RNA_def_property_float_sdna(prop, NULL, "cent");
1506 RNA_def_property_ui_text(prop, "Hook Center", "");
1507 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1509 prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
1510 RNA_def_property_float_sdna(prop, NULL, "parentinv");
1511 RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4);
1512 RNA_def_property_ui_text(prop, "Matrix", "Reverse the transformation between this object and its target");
1513 RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_GpencilModifier_update");
1515 prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
1516 RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_UNIFORM_SPACE);
1517 RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
1518 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1521 static void rna_def_modifier_gpencilarmature(BlenderRNA *brna)
1526 srna = RNA_def_struct(brna, "ArmatureGpencilModifier", "GpencilModifier");
1527 RNA_def_struct_ui_text(srna, "Armature Modifier", "Change stroke using armature to deform modifier");
1528 RNA_def_struct_sdna(srna, "ArmatureGpencilModifierData");
1529 RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
1531 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
1532 RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
1533 RNA_def_property_pointer_funcs(prop, NULL, "rna_ArmatureGpencilModifier_object_set", NULL, "rna_Armature_object_poll");
1534 RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
1535 RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
1536 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1538 prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
1539 RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE);
1540 RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
1541 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1543 prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
1544 RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP);
1545 RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
1546 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1548 prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
1549 RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
1550 RNA_def_property_ui_text(prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
1551 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1553 #if 0 /* GPXX keep disabled now */
1554 prop = RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
1555 RNA_def_property_boolean_sdna(prop, NULL, "multi", 0);
1556 RNA_def_property_ui_text(prop, "Multi Modifier",
1557 "Use same input as previous modifier, and mix results using overall vgroup");
1558 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1561 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
1562 RNA_def_property_string_sdna(prop, NULL, "vgname");
1563 RNA_def_property_ui_text(prop, "Vertex Group",
1564 "Name of Vertex Group which determines influence of modifier per point");
1565 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ArmatureGpencilModifier_vgname_set");
1566 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1568 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
1569 RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP);
1570 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
1571 RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
1574 void RNA_def_greasepencil_modifier(BlenderRNA *brna)
1580 srna = RNA_def_struct(brna, "GpencilModifier", NULL);
1581 RNA_def_struct_ui_text(srna, "GpencilModifier", "Modifier affecting the grease pencil object");
1582 RNA_def_struct_refine_func(srna, "rna_GpencilModifier_refine");
1583 RNA_def_struct_path_func(srna, "rna_GpencilModifier_path");
1584 RNA_def_struct_sdna(srna, "GpencilModifierData");
1587 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1588 RNA_def_property_string_funcs(prop, NULL, NULL, "rna_GpencilModifier_name_set");
1589 RNA_def_property_ui_text(prop, "Name", "Modifier name");
1590 RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, NULL);
1591 RNA_def_struct_name_property(srna, prop);
1594 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1595 RNA_def_property_clear_flag(prop, PROP_EDITABLE);
1596 RNA_def_property_enum_sdna(prop, NULL, "type");
1597 RNA_def_property_enum_items(prop, rna_enum_object_greasepencil_modifier_type_items);
1598 RNA_def_property_ui_text(prop, "Type", "");
1601 prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
1602 RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Realtime);
1603 RNA_def_property_ui_text(prop, "Realtime", "Display modifier in viewport");
1604 RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
1605 RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
1606 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1607 RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
1609 prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
1610 RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Render);
1611 RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
1612 RNA_def_property_ui_text(prop, "Render", "Use modifier during render");
1613 RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
1614 RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, NULL);
1616 prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
1617 RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Editmode);
1618 RNA_def_property_ui_text(prop, "Edit Mode", "Display modifier in Edit mode");
1619 RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
1620 RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
1622 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
1623 RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Expanded);
1624 RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
1625 RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
1626 RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
1629 rna_def_modifier_gpencilnoise(brna);
1630 rna_def_modifier_gpencilsmooth(brna);
1631 rna_def_modifier_gpencilsubdiv(brna);
1632 rna_def_modifier_gpencilsimplify(brna);
1633 rna_def_modifier_gpencilthick(brna);
1634 rna_def_modifier_gpenciloffset(brna);
1635 rna_def_modifier_gpenciltint(brna);
1636 rna_def_modifier_gpenciltime(brna);
1637 rna_def_modifier_gpencilcolor(brna);
1638 rna_def_modifier_gpencilinstance(brna);
1639 rna_def_modifier_gpencilbuild(brna);
1640 rna_def_modifier_gpencilopacity(brna);
1641 rna_def_modifier_gpencillattice(brna);
1642 rna_def_modifier_gpencilmirror(brna);
1643 rna_def_modifier_gpencilhook(brna);
1644 rna_def_modifier_gpencilarmature(brna);