Building w/o Python works again
[blender.git] / source / blender / makesrna / intern / rna_linestyle.c
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Blender Foundation (2008).
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/makesrna/intern/rna_linestyle.c
24  *  \ingroup RNA
25  */
26
27 #include <stdio.h>
28 #include <stdlib.h>
29
30 #include "BLI_utildefines.h"
31 #include "BLI_string_utils.h"
32
33 #include "RNA_define.h"
34 #include "RNA_enum_types.h"
35
36 #include "rna_internal.h"
37
38 #include "DNA_linestyle_types.h"
39 #include "DNA_material_types.h"
40 #include "DNA_texture_types.h"
41
42 #include "WM_types.h"
43 #include "WM_api.h"
44
45 EnumPropertyItem rna_enum_linestyle_color_modifier_type_items[] = {
46         {LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
47         {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
48         {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
49         {LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
50         {LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
51         {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
52         {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
53         {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
54         {0, NULL, 0, NULL, NULL}
55 };
56
57 EnumPropertyItem rna_enum_linestyle_alpha_modifier_type_items[] = {
58         {LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
59         {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
60         {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
61         {LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
62         {LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
63         {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
64         {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
65         {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
66         {0, NULL, 0, NULL, NULL}
67 };
68
69 EnumPropertyItem rna_enum_linestyle_thickness_modifier_type_items[] = {
70         {LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
71         {LS_MODIFIER_CALLIGRAPHY, "CALLIGRAPHY", ICON_MODIFIER, "Calligraphy", ""},
72         {LS_MODIFIER_CREASE_ANGLE, "CREASE_ANGLE", ICON_MODIFIER, "Crease Angle", ""},
73         {LS_MODIFIER_CURVATURE_3D, "CURVATURE_3D", ICON_MODIFIER, "Curvature 3D", ""},
74         {LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
75         {LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
76         {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
77         {LS_MODIFIER_NOISE, "NOISE", ICON_MODIFIER, "Noise", ""},
78         {LS_MODIFIER_TANGENT, "TANGENT", ICON_MODIFIER, "Tangent", ""},
79         {0, NULL, 0, NULL, NULL}
80 };
81
82 EnumPropertyItem rna_enum_linestyle_geometry_modifier_type_items[] = {
83         {LS_MODIFIER_2D_OFFSET, "2D_OFFSET", ICON_MODIFIER, "2D Offset", ""},
84         {LS_MODIFIER_2D_TRANSFORM, "2D_TRANSFORM", ICON_MODIFIER, "2D Transform", ""},
85         {LS_MODIFIER_BACKBONE_STRETCHER, "BACKBONE_STRETCHER", ICON_MODIFIER, "Backbone Stretcher", ""},
86         {LS_MODIFIER_BEZIER_CURVE, "BEZIER_CURVE", ICON_MODIFIER, "Bezier Curve", ""},
87         {LS_MODIFIER_BLUEPRINT, "BLUEPRINT", ICON_MODIFIER, "Blueprint", ""},
88         {LS_MODIFIER_GUIDING_LINES, "GUIDING_LINES", ICON_MODIFIER, "Guiding Lines", ""},
89         {LS_MODIFIER_PERLIN_NOISE_1D, "PERLIN_NOISE_1D", ICON_MODIFIER, "Perlin Noise 1D", ""},
90         {LS_MODIFIER_PERLIN_NOISE_2D, "PERLIN_NOISE_2D", ICON_MODIFIER, "Perlin Noise 2D", ""},
91         {LS_MODIFIER_POLYGONIZATION, "POLYGONIZATION", ICON_MODIFIER, "Polygonization", ""},
92         {LS_MODIFIER_SAMPLING, "SAMPLING", ICON_MODIFIER, "Sampling", ""},
93         {LS_MODIFIER_SIMPLIFICATION, "SIMPLIFICATION", ICON_MODIFIER, "Simplification", ""},
94         {LS_MODIFIER_SINUS_DISPLACEMENT, "SINUS_DISPLACEMENT", ICON_MODIFIER, "Sinus Displacement", ""},
95         {LS_MODIFIER_SPATIAL_NOISE, "SPATIAL_NOISE", ICON_MODIFIER, "Spatial Noise", ""},
96         {LS_MODIFIER_TIP_REMOVER, "TIP_REMOVER", ICON_MODIFIER, "Tip Remover", ""},
97         {0, NULL, 0, NULL, NULL}
98 };
99
100 #ifdef RNA_RUNTIME
101
102 #include "BKE_linestyle.h"
103 #include "BKE_texture.h"
104 #include "BKE_depsgraph.h"
105
106 #include "ED_node.h"
107
108 #include "RNA_access.h"
109
110 static StructRNA *rna_LineStyle_color_modifier_refine(struct PointerRNA *ptr)
111 {
112         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
113
114         switch (m->type) {
115                 case LS_MODIFIER_ALONG_STROKE:
116                         return &RNA_LineStyleColorModifier_AlongStroke;
117                 case LS_MODIFIER_DISTANCE_FROM_CAMERA:
118                         return &RNA_LineStyleColorModifier_DistanceFromCamera;
119                 case LS_MODIFIER_DISTANCE_FROM_OBJECT:
120                         return &RNA_LineStyleColorModifier_DistanceFromObject;
121                 case LS_MODIFIER_MATERIAL:
122                         return &RNA_LineStyleColorModifier_Material;
123                 case LS_MODIFIER_TANGENT:
124                         return &RNA_LineStyleColorModifier_Tangent;
125                 case LS_MODIFIER_NOISE:
126                         return &RNA_LineStyleColorModifier_Noise;
127                 case LS_MODIFIER_CREASE_ANGLE:
128                         return &RNA_LineStyleColorModifier_CreaseAngle;
129                 case LS_MODIFIER_CURVATURE_3D:
130                         return &RNA_LineStyleColorModifier_Curvature_3D;
131                 default:
132                         return &RNA_LineStyleColorModifier;
133         }
134 }
135
136 static StructRNA *rna_LineStyle_alpha_modifier_refine(struct PointerRNA *ptr)
137 {
138         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
139
140         switch (m->type) {
141                 case LS_MODIFIER_ALONG_STROKE:
142                         return &RNA_LineStyleAlphaModifier_AlongStroke;
143                 case LS_MODIFIER_DISTANCE_FROM_CAMERA:
144                         return &RNA_LineStyleAlphaModifier_DistanceFromCamera;
145                 case LS_MODIFIER_DISTANCE_FROM_OBJECT:
146                         return &RNA_LineStyleAlphaModifier_DistanceFromObject;
147                 case LS_MODIFIER_MATERIAL:
148                         return &RNA_LineStyleAlphaModifier_Material;
149                 case LS_MODIFIER_TANGENT:
150                         return &RNA_LineStyleAlphaModifier_Tangent;
151                 case LS_MODIFIER_NOISE:
152                         return &RNA_LineStyleAlphaModifier_Noise;
153                 case LS_MODIFIER_CREASE_ANGLE:
154                         return &RNA_LineStyleAlphaModifier_CreaseAngle;
155                 case LS_MODIFIER_CURVATURE_3D:
156                         return &RNA_LineStyleAlphaModifier_Curvature_3D;
157                 default:
158                         return &RNA_LineStyleAlphaModifier;
159         }
160 }
161
162 static StructRNA *rna_LineStyle_thickness_modifier_refine(struct PointerRNA *ptr)
163 {
164         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
165
166         switch (m->type) {
167                 case LS_MODIFIER_ALONG_STROKE:
168                         return &RNA_LineStyleThicknessModifier_AlongStroke;
169                 case LS_MODIFIER_DISTANCE_FROM_CAMERA:
170                         return &RNA_LineStyleThicknessModifier_DistanceFromCamera;
171                 case LS_MODIFIER_DISTANCE_FROM_OBJECT:
172                         return &RNA_LineStyleThicknessModifier_DistanceFromObject;
173                 case LS_MODIFIER_MATERIAL:
174                         return &RNA_LineStyleThicknessModifier_Material;
175                 case LS_MODIFIER_CALLIGRAPHY:
176                         return &RNA_LineStyleThicknessModifier_Calligraphy;
177                 case LS_MODIFIER_TANGENT:
178                         return &RNA_LineStyleThicknessModifier_Tangent;
179                 case LS_MODIFIER_NOISE:
180                         return &RNA_LineStyleThicknessModifier_Noise;
181                 case LS_MODIFIER_CREASE_ANGLE:
182                         return &RNA_LineStyleThicknessModifier_CreaseAngle;
183                 case LS_MODIFIER_CURVATURE_3D:
184                         return &RNA_LineStyleThicknessModifier_Curvature_3D;
185                 default:
186                         return &RNA_LineStyleThicknessModifier;
187         }
188 }
189
190 static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr)
191 {
192         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
193
194         switch (m->type) {
195                 case LS_MODIFIER_SAMPLING:
196                         return &RNA_LineStyleGeometryModifier_Sampling;
197                 case LS_MODIFIER_BEZIER_CURVE:
198                         return &RNA_LineStyleGeometryModifier_BezierCurve;
199                 case LS_MODIFIER_SINUS_DISPLACEMENT:
200                         return &RNA_LineStyleGeometryModifier_SinusDisplacement;
201                 case LS_MODIFIER_SPATIAL_NOISE:
202                         return &RNA_LineStyleGeometryModifier_SpatialNoise;
203                 case LS_MODIFIER_PERLIN_NOISE_1D:
204                         return &RNA_LineStyleGeometryModifier_PerlinNoise1D;
205                 case LS_MODIFIER_PERLIN_NOISE_2D:
206                         return &RNA_LineStyleGeometryModifier_PerlinNoise2D;
207                 case LS_MODIFIER_BACKBONE_STRETCHER:
208                         return &RNA_LineStyleGeometryModifier_BackboneStretcher;
209                 case LS_MODIFIER_TIP_REMOVER:
210                         return &RNA_LineStyleGeometryModifier_TipRemover;
211                 case LS_MODIFIER_POLYGONIZATION:
212                         return &RNA_LineStyleGeometryModifier_Polygonalization;
213                 case LS_MODIFIER_GUIDING_LINES:
214                         return &RNA_LineStyleGeometryModifier_GuidingLines;
215                 case LS_MODIFIER_BLUEPRINT:
216                         return &RNA_LineStyleGeometryModifier_Blueprint;
217                 case LS_MODIFIER_2D_OFFSET:
218                         return &RNA_LineStyleGeometryModifier_2DOffset;
219                 case LS_MODIFIER_2D_TRANSFORM:
220                         return &RNA_LineStyleGeometryModifier_2DTransform;
221                 case LS_MODIFIER_SIMPLIFICATION:
222                         return &RNA_LineStyleGeometryModifier_Simplification;
223                 default:
224                         return &RNA_LineStyleGeometryModifier;
225         }
226 }
227
228 static char *rna_LineStyle_color_modifier_path(PointerRNA *ptr)
229 {
230         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
231         char name_esc[sizeof(m->name) * 2];
232         BLI_strescape(name_esc, m->name, sizeof(name_esc));
233         return BLI_sprintfN("color_modifiers[\"%s\"]", name_esc);
234 }
235
236 static char *rna_LineStyle_alpha_modifier_path(PointerRNA *ptr)
237 {
238         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
239         char name_esc[sizeof(m->name) * 2];
240         BLI_strescape(name_esc, m->name, sizeof(name_esc));
241         return BLI_sprintfN("alpha_modifiers[\"%s\"]", name_esc);
242 }
243
244 static char *rna_LineStyle_thickness_modifier_path(PointerRNA *ptr)
245 {
246         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
247         char name_esc[sizeof(m->name) * 2];
248         BLI_strescape(name_esc, m->name, sizeof(name_esc));
249         return BLI_sprintfN("thickness_modifiers[\"%s\"]", name_esc);
250 }
251
252 static char *rna_LineStyle_geometry_modifier_path(PointerRNA *ptr)
253 {
254         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
255         char name_esc[sizeof(m->name) * 2];
256         BLI_strescape(name_esc, m->name, sizeof(name_esc));
257         return BLI_sprintfN("geometry_modifiers[\"%s\"]", name_esc);
258 }
259
260 static void rna_LineStyleColorModifier_name_set(PointerRNA *ptr, const char *value)
261 {
262         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
263         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
264
265         BLI_strncpy_utf8(m->name, value, sizeof(m->name));
266         BLI_uniquename(&linestyle->color_modifiers, m, "ColorModifier", '.',
267                        offsetof(LineStyleModifier, name), sizeof(m->name));
268 }
269
270 static void rna_LineStyleAlphaModifier_name_set(PointerRNA *ptr, const char *value)
271 {
272         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
273         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
274
275         BLI_strncpy_utf8(m->name, value, sizeof(m->name));
276         BLI_uniquename(&linestyle->alpha_modifiers, m, "AlphaModifier", '.',
277                        offsetof(LineStyleModifier, name), sizeof(m->name));
278 }
279
280 static void rna_LineStyleThicknessModifier_name_set(PointerRNA *ptr, const char *value)
281 {
282         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
283         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
284
285         BLI_strncpy_utf8(m->name, value, sizeof(m->name));
286         BLI_uniquename(&linestyle->thickness_modifiers, m, "ThicknessModifier", '.',
287                        offsetof(LineStyleModifier, name), sizeof(m->name));
288 }
289
290 static void rna_LineStyleGeometryModifier_name_set(PointerRNA *ptr, const char *value)
291 {
292         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
293         LineStyleModifier *m = (LineStyleModifier *)ptr->data;
294
295         BLI_strncpy_utf8(m->name, value, sizeof(m->name));
296         BLI_uniquename(&linestyle->geometry_modifiers, m, "GeometryModifier", '.',
297                        offsetof(LineStyleModifier, name), sizeof(m->name));
298 }
299
300 static void rna_LineStyle_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
301 {
302         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
303         rna_iterator_array_begin(iter, (void *)linestyle->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
304 }
305
306 static PointerRNA rna_LineStyle_active_texture_get(PointerRNA *ptr)
307 {
308         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
309         Tex *tex;
310
311         tex = give_current_linestyle_texture(linestyle);
312         return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
313 }
314
315 static void rna_LineStyle_active_texture_set(PointerRNA *ptr, PointerRNA value)
316 {
317         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
318
319         set_current_linestyle_texture(linestyle, value.data);
320 }
321
322 static void rna_LineStyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
323 {
324         FreestyleLineStyle *linestyle = ptr->id.data;
325
326         DAG_id_tag_update(&linestyle->id, 0);
327         WM_main_add_notifier(NC_LINESTYLE, linestyle);
328 }
329
330 static void rna_LineStyle_use_nodes_update(bContext *C, PointerRNA *ptr)
331 {
332         FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->data;
333
334         if (linestyle->use_nodes && linestyle->nodetree == NULL)
335                 BKE_linestyle_default_shader(C, linestyle);
336
337         rna_LineStyle_update(CTX_data_main(C), CTX_data_scene(C), ptr);
338 }
339
340 static LineStyleModifier *rna_LineStyle_color_modifier_add(FreestyleLineStyle *linestyle, ReportList *reports,
341                                                            const char *name, int type)
342 {
343         LineStyleModifier *modifier = BKE_linestyle_color_modifier_add(linestyle, name, type);
344
345         if (!modifier) {
346                 BKE_report(reports, RPT_ERROR, "Failed to add the color modifier");
347                 return NULL;
348         }
349
350         DAG_id_tag_update(&linestyle->id, 0);
351         WM_main_add_notifier(NC_LINESTYLE, linestyle);
352
353         return modifier;
354 }
355
356 static void rna_LineStyle_color_modifier_remove(FreestyleLineStyle *linestyle, ReportList *reports,
357                                                 PointerRNA *modifier_ptr)
358 {
359         LineStyleModifier *modifier = modifier_ptr->data;
360
361         if (BKE_linestyle_color_modifier_remove(linestyle, modifier) == -1) {
362                 BKE_reportf(reports, RPT_ERROR, "Color modifier '%s' could not be removed", modifier->name);
363                 return;
364         }
365
366         RNA_POINTER_INVALIDATE(modifier_ptr);
367
368         DAG_id_tag_update(&linestyle->id, 0);
369         WM_main_add_notifier(NC_LINESTYLE, linestyle);
370 }
371
372 static LineStyleModifier *rna_LineStyle_alpha_modifier_add(FreestyleLineStyle *linestyle, ReportList *reports,
373                                                            const char *name, int type)
374 {
375         LineStyleModifier *modifier = BKE_linestyle_alpha_modifier_add(linestyle, name, type);
376
377         if (!modifier) {
378                 BKE_report(reports, RPT_ERROR, "Failed to add the alpha modifier");
379                 return NULL;
380         }
381
382         DAG_id_tag_update(&linestyle->id, 0);
383         WM_main_add_notifier(NC_LINESTYLE, linestyle);
384
385         return modifier;
386 }
387
388 static void rna_LineStyle_alpha_modifier_remove(FreestyleLineStyle *linestyle, ReportList *reports,
389                                                 PointerRNA *modifier_ptr)
390 {
391         LineStyleModifier *modifier = modifier_ptr->data;
392
393         if (BKE_linestyle_alpha_modifier_remove(linestyle, modifier) == -1) {
394                 BKE_reportf(reports, RPT_ERROR, "Alpha modifier '%s' could not be removed", modifier->name);
395                 return;
396         }
397
398         RNA_POINTER_INVALIDATE(modifier_ptr);
399
400         DAG_id_tag_update(&linestyle->id, 0);
401         WM_main_add_notifier(NC_LINESTYLE, linestyle);
402 }
403
404 static LineStyleModifier *rna_LineStyle_thickness_modifier_add(FreestyleLineStyle *linestyle, ReportList *reports,
405                                                                const char *name, int type)
406 {
407         LineStyleModifier *modifier = BKE_linestyle_thickness_modifier_add(linestyle, name, type);
408
409         if (!modifier) {
410                 BKE_report(reports, RPT_ERROR, "Failed to add the thickness modifier");
411                 return NULL;
412         }
413
414         DAG_id_tag_update(&linestyle->id, 0);
415         WM_main_add_notifier(NC_LINESTYLE, linestyle);
416
417         return modifier;
418 }
419
420 static void rna_LineStyle_thickness_modifier_remove(FreestyleLineStyle *linestyle, ReportList *reports,
421                                                     PointerRNA *modifier_ptr)
422 {
423         LineStyleModifier *modifier = modifier_ptr->data;
424
425         if (BKE_linestyle_thickness_modifier_remove(linestyle, modifier) == -1) {
426                 BKE_reportf(reports, RPT_ERROR, "Thickness modifier '%s' could not be removed", modifier->name);
427                 return;
428         }
429
430         RNA_POINTER_INVALIDATE(modifier_ptr);
431
432         DAG_id_tag_update(&linestyle->id, 0);
433         WM_main_add_notifier(NC_LINESTYLE, linestyle);
434 }
435
436 static LineStyleModifier *rna_LineStyle_geometry_modifier_add(FreestyleLineStyle *linestyle, ReportList *reports,
437                                                               const char *name, int type)
438 {
439         LineStyleModifier *modifier = BKE_linestyle_geometry_modifier_add(linestyle, name, type);
440
441         if (!modifier) {
442                 BKE_report(reports, RPT_ERROR, "Failed to add the geometry modifier");
443                 return NULL;
444         }
445
446         DAG_id_tag_update(&linestyle->id, 0);
447         WM_main_add_notifier(NC_LINESTYLE, linestyle);
448
449         return modifier;
450 }
451
452 static void rna_LineStyle_geometry_modifier_remove(FreestyleLineStyle *linestyle, ReportList *reports,
453                                                    PointerRNA *modifier_ptr)
454 {
455         LineStyleModifier *modifier = modifier_ptr->data;
456
457         if (BKE_linestyle_geometry_modifier_remove(linestyle, modifier) == -1) {
458                 BKE_reportf(reports, RPT_ERROR, "Geometry modifier '%s' could not be removed", modifier->name);
459                 return;
460         }
461
462         RNA_POINTER_INVALIDATE(modifier_ptr);
463
464         DAG_id_tag_update(&linestyle->id, 0);
465         WM_main_add_notifier(NC_LINESTYLE, linestyle);
466 }
467
468 #else
469
470 #include "BLI_math.h"
471
472 static void rna_def_linestyle_mtex(BlenderRNA *brna)
473 {
474         StructRNA *srna;
475         PropertyRNA *prop;
476
477         static EnumPropertyItem texco_items[] = {
478                 {TEXCO_WINDOW, "WINDOW", 0, "Window", "Use screen coordinates as texture coordinates"},
479                 {TEXCO_GLOB, "GLOBAL", 0, "Global", "Use global coordinates for the texture coordinates"},
480                 {TEXCO_STROKE, "ALONG_STROKE", 0, "Along stroke", "Use stroke length for texture coordinates"},
481                 {TEXCO_ORCO, "ORCO", 0, "Generated", "Use the original undeformed coordinates of the object"},
482                 {0, NULL, 0, NULL, NULL}
483         };
484
485         static EnumPropertyItem prop_mapping_items[] = {
486                 {MTEX_FLAT, "FLAT", 0, "Flat", "Map X and Y coordinates directly"},
487                 {MTEX_CUBE, "CUBE", 0, "Cube", "Map using the normal vector"},
488                 {MTEX_TUBE, "TUBE", 0, "Tube", "Map with Z as central axis"},
489                 {MTEX_SPHERE, "SPHERE", 0, "Sphere", "Map with Z as central axis"},
490                 {0, NULL, 0, NULL, NULL}
491         };
492
493         static EnumPropertyItem prop_x_mapping_items[] = {
494                 {0, "NONE", 0, "None", ""},
495                 {1, "X", 0, "X", ""},
496                 {2, "Y", 0, "Y", ""},
497                 {3, "Z", 0, "Z", ""},
498                 {0, NULL, 0, NULL, NULL}
499         };
500
501         static EnumPropertyItem prop_y_mapping_items[] = {
502                 {0, "NONE", 0, "None", ""},
503                 {1, "X", 0, "X", ""},
504                 {2, "Y", 0, "Y", ""},
505                 {3, "Z", 0, "Z", ""},
506                 {0, NULL, 0, NULL, NULL}
507         };
508
509         static EnumPropertyItem prop_z_mapping_items[] = {
510                 {0, "NONE", 0, "None", ""},
511                 {1, "X", 0, "X", ""},
512                 {2, "Y", 0, "Y", ""},
513                 {3, "Z", 0, "Z", ""},
514                 {0, NULL, 0, NULL, NULL}
515         };
516
517         srna = RNA_def_struct(brna, "LineStyleTextureSlot", "TextureSlot");
518         RNA_def_struct_sdna(srna, "MTex");
519         RNA_def_struct_ui_text(srna, "LineStyle Texture Slot", "Texture slot for textures in a LineStyle data-block");
520
521         prop = RNA_def_property(srna, "mapping_x", PROP_ENUM, PROP_NONE);
522         RNA_def_property_enum_sdna(prop, NULL, "projx");
523         RNA_def_property_enum_items(prop, prop_x_mapping_items);
524         RNA_def_property_ui_text(prop, "X Mapping", "");
525         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
526
527         prop = RNA_def_property(srna, "mapping_y", PROP_ENUM, PROP_NONE);
528         RNA_def_property_enum_sdna(prop, NULL, "projy");
529         RNA_def_property_enum_items(prop, prop_y_mapping_items);
530         RNA_def_property_ui_text(prop, "Y Mapping", "");
531         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
532
533         prop = RNA_def_property(srna, "mapping_z", PROP_ENUM, PROP_NONE);
534         RNA_def_property_enum_sdna(prop, NULL, "projz");
535         RNA_def_property_enum_items(prop, prop_z_mapping_items);
536         RNA_def_property_ui_text(prop, "Z Mapping", "");
537         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
538
539         prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
540         RNA_def_property_enum_items(prop, prop_mapping_items);
541         RNA_def_property_ui_text(prop, "Mapping", "");
542         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
543
544         /* map to */
545         prop = RNA_def_property(srna, "use_map_color_diffuse", PROP_BOOLEAN, PROP_NONE);
546         RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL);
547         RNA_def_property_ui_text(prop, "Diffuse Color", "The texture affects basic color of the stroke");
548         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
549
550         prop = RNA_def_property(srna, "use_map_alpha", PROP_BOOLEAN, PROP_NONE);
551         RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_ALPHA);
552         RNA_def_property_ui_text(prop, "Alpha", "The texture affects the alpha value");
553         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
554
555         prop = RNA_def_property(srna, "use_tips", PROP_BOOLEAN, PROP_NONE);
556         RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_TIPS);
557         RNA_def_property_ui_text(prop, "Use Tips", "Lower half of the texture is for tips of the stroke");
558         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
559
560         prop = RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
561         RNA_def_property_enum_sdna(prop, NULL, "texco");
562         RNA_def_property_enum_items(prop, texco_items);
563         RNA_def_property_ui_text(prop, "Texture Coordinates",
564                                  "Texture coordinates used to map the texture onto the background");
565         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
566
567         prop = RNA_def_property(srna, "alpha_factor", PROP_FLOAT, PROP_NONE);
568         RNA_def_property_float_sdna(prop, NULL, "alphafac");
569         RNA_def_property_ui_range(prop, -1, 1, 10, 3);
570         RNA_def_property_ui_text(prop, "Alpha Factor", "Amount texture affects alpha");
571         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
572
573         prop = RNA_def_property(srna, "diffuse_color_factor", PROP_FLOAT, PROP_NONE);
574         RNA_def_property_float_sdna(prop, NULL, "colfac");
575         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
576         RNA_def_property_ui_text(prop, "Diffuse Color Factor", "Amount texture affects diffuse color");
577         RNA_def_property_update(prop, 0, "rna_LineStyle_update");
578 }
579
580 static void rna_def_modifier_type_common(
581         StructRNA *srna, EnumPropertyItem *modifier_type_items,
582         const char *set_name_func, const bool blend, const bool color)
583 {
584         PropertyRNA *prop;
585
586         /* TODO: Check this is not already defined somewhere else, e.g. in nodes... */
587         static EnumPropertyItem value_blend_items[] = {
588                 {LS_VALUE_BLEND, "MIX", 0, "Mix", ""},
589                 {LS_VALUE_ADD, "ADD", 0, "Add", ""},
590                 {LS_VALUE_SUB, "SUBTRACT", 0, "Subtract", ""},
591                 {LS_VALUE_MULT, "MULTIPLY", 0, "Multiply", ""},
592                 {LS_VALUE_DIV, "DIVIDE", 0, "Divide", ""},
593                 {LS_VALUE_DIFF, "DIFFERENCE", 0, "Difference", ""},
594                 {LS_VALUE_MIN, "MININUM", 0, "Minimum", ""},
595                 {LS_VALUE_MAX, "MAXIMUM", 0, "Maximum", ""},
596                 {0, NULL, 0, NULL, NULL}
597         };
598
599         prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
600         RNA_def_property_enum_sdna(prop, NULL, "modifier.type");
601         RNA_def_property_enum_items(prop, modifier_type_items);
602         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
603         RNA_def_property_ui_text(prop, "Modifier Type", "Type of the modifier");
604
605         prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
606         RNA_def_property_string_sdna(prop, NULL, "modifier.name");
607         RNA_def_property_string_funcs(prop, NULL, NULL, set_name_func);
608         RNA_def_property_ui_text(prop, "Modifier Name", "Name of the modifier");
609         RNA_def_property_update(prop, NC_LINESTYLE, NULL);
610         RNA_def_struct_name_property(srna, prop);
611
612         if (blend) {
613                 prop = RNA_def_property(srna, "blend", PROP_ENUM, PROP_NONE);
614                 RNA_def_property_enum_sdna(prop, NULL, "modifier.blend");
615                 RNA_def_property_enum_items(prop, (color) ? rna_enum_ramp_blend_items : value_blend_items);
616                 RNA_def_property_ui_text(prop, "Blend", "Specify how the modifier value is blended into the base value");
617                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
618
619                 prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
620                 RNA_def_property_float_sdna(prop, NULL, "modifier.influence");
621                 RNA_def_property_range(prop, 0.0f, 1.0f);
622                 RNA_def_property_ui_text(prop, "Influence", "Influence factor by which the modifier changes the property");
623                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
624         }
625
626         prop = RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
627         RNA_def_property_boolean_sdna(prop, NULL, "modifier.flags", LS_MODIFIER_ENABLED);
628         RNA_def_property_ui_text(prop, "Use", "Enable or disable this modifier during stroke rendering");
629         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
630
631         prop = RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
632         RNA_def_property_boolean_sdna(prop, NULL, "modifier.flags", LS_MODIFIER_EXPANDED);
633         RNA_def_property_ui_text(prop, "Expanded", "True if the modifier tab is expanded");
634 }
635
636 static void rna_def_color_modifier(StructRNA *srna)
637 {
638         rna_def_modifier_type_common(srna, rna_enum_linestyle_color_modifier_type_items,
639                                      "rna_LineStyleColorModifier_name_set", true, true);
640 }
641
642 static void rna_def_alpha_modifier(StructRNA *srna)
643 {
644         rna_def_modifier_type_common(srna, rna_enum_linestyle_alpha_modifier_type_items,
645                                      "rna_LineStyleAlphaModifier_name_set", true, false);
646 }
647
648 static void rna_def_thickness_modifier(StructRNA *srna)
649 {
650         rna_def_modifier_type_common(srna, rna_enum_linestyle_thickness_modifier_type_items,
651                                      "rna_LineStyleThicknessModifier_name_set", true, false);
652 }
653
654 static void rna_def_geometry_modifier(StructRNA *srna)
655 {
656         rna_def_modifier_type_common(srna, rna_enum_linestyle_geometry_modifier_type_items,
657                                      "rna_LineStyleGeometryModifier_name_set", false, false);
658 }
659
660 static void rna_def_modifier_color_ramp_common(StructRNA *srna, int range)
661 {
662         PropertyRNA *prop;
663
664         prop = RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NONE);
665         RNA_def_property_pointer_sdna(prop, NULL, "color_ramp");
666         RNA_def_property_struct_type(prop, "ColorRamp");
667         RNA_def_property_ui_text(prop, "Color Ramp", "Color ramp used to change line color");
668         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
669
670         if (range) {
671                 prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_DISTANCE);
672                 RNA_def_property_float_sdna(prop, NULL, "range_min");
673                 RNA_def_property_ui_text(prop, "Range Min", "Lower bound of the input range the mapping is applied");
674                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
675
676                 prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_DISTANCE);
677                 RNA_def_property_float_sdna(prop, NULL, "range_max");
678                 RNA_def_property_ui_text(prop, "Range Max", "Upper bound of the input range the mapping is applied");
679                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
680         }
681 }
682
683 static void rna_def_modifier_curve_common(StructRNA *srna, bool range, bool value)
684 {
685         PropertyRNA *prop;
686
687         static EnumPropertyItem mapping_items[] = {
688                 {0, "LINEAR", 0, "Linear", "Use linear mapping"},
689                 {LS_MODIFIER_USE_CURVE, "CURVE", 0, "Curve", "Use curve mapping"},
690                 {0, NULL, 0, NULL, NULL}
691         };
692
693         prop = RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
694         RNA_def_property_enum_bitflag_sdna(prop, NULL, "flags");
695         RNA_def_property_enum_items(prop, mapping_items);
696         RNA_def_property_ui_text(prop, "Mapping", "Select the mapping type");
697         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
698
699         prop = RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
700         RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_INVERT);
701         RNA_def_property_ui_text(prop, "Invert", "Invert the fade-out direction of the linear mapping");
702         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
703
704         prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
705         RNA_def_property_pointer_sdna(prop, NULL, "curve");
706         RNA_def_property_struct_type(prop, "CurveMapping");
707         RNA_def_property_ui_text(prop, "Curve", "Curve used for the curve mapping");
708         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
709
710         if (range) {
711                 prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_DISTANCE);
712                 RNA_def_property_float_sdna(prop, NULL, "range_min");
713                 RNA_def_property_ui_text(prop, "Range Min", "Lower bound of the input range the mapping is applied");
714                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
715
716                 prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_DISTANCE);
717                 RNA_def_property_float_sdna(prop, NULL, "range_max");
718                 RNA_def_property_ui_text(prop, "Range Max", "Upper bound of the input range the mapping is applied");
719                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
720         }
721
722         if (value) {
723                 prop = RNA_def_property(srna, "value_min", PROP_FLOAT, PROP_NONE);
724                 RNA_def_property_float_sdna(prop, NULL, "value_min");
725                 RNA_def_property_ui_text(prop, "Value Min", "Minimum output value of the mapping");
726                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
727
728                 prop = RNA_def_property(srna, "value_max", PROP_FLOAT, PROP_NONE);
729                 RNA_def_property_float_sdna(prop, NULL, "value_max");
730                 RNA_def_property_ui_text(prop, "Value Max", "Maximum output value of the mapping");
731                 RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
732         }
733 }
734
735 static void rna_def_modifier_material_common(StructRNA *srna)
736 {
737         PropertyRNA *prop;
738
739         static EnumPropertyItem mat_attr_items[] = {
740                 {LS_MODIFIER_MATERIAL_LINE, "LINE", 0, "Line Color", ""},
741                 {LS_MODIFIER_MATERIAL_LINE_R, "LINE_R", 0, "Line Color Red", ""},
742                 {LS_MODIFIER_MATERIAL_LINE_G, "LINE_G", 0, "Line Color Green", ""},
743                 {LS_MODIFIER_MATERIAL_LINE_B, "LINE_B", 0, "Line Color Blue", ""},
744                 {LS_MODIFIER_MATERIAL_LINE_A, "LINE_A", 0, "Line Color Alpha", ""},
745                 {LS_MODIFIER_MATERIAL_DIFF, "DIFF", 0, "Diffuse Color", ""},
746                 {LS_MODIFIER_MATERIAL_DIFF_R, "DIFF_R", 0, "Diffuse Color Red", ""},
747                 {LS_MODIFIER_MATERIAL_DIFF_G, "DIFF_G", 0, "Diffuse Color Green", ""},
748                 {LS_MODIFIER_MATERIAL_DIFF_B, "DIFF_B", 0, "Diffuse Color Blue", ""},
749                 {LS_MODIFIER_MATERIAL_SPEC, "SPEC", 0, "Specular Color", ""},
750                 {LS_MODIFIER_MATERIAL_SPEC_R, "SPEC_R", 0, "Specular Color Red", ""},
751                 {LS_MODIFIER_MATERIAL_SPEC_G, "SPEC_G", 0, "Specular Color Green", ""},
752                 {LS_MODIFIER_MATERIAL_SPEC_B, "SPEC_B", 0, "Specular Color Blue", ""},
753                 {LS_MODIFIER_MATERIAL_SPEC_HARD, "SPEC_HARD", 0, "Specular Hardness", ""},
754                 {LS_MODIFIER_MATERIAL_ALPHA, "ALPHA", 0, "Alpha Transparency", ""},
755                 {0, NULL, 0, NULL, NULL}
756         };
757
758         prop = RNA_def_property(srna, "material_attribute", PROP_ENUM, PROP_NONE);
759         RNA_def_property_enum_sdna(prop, NULL, "mat_attr");
760         RNA_def_property_enum_items(prop, mat_attr_items);
761         RNA_def_property_ui_text(prop, "Material Attribute", "Specify which material attribute is used");
762         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
763
764 }
765
766 static void rna_def_linestyle_modifiers(BlenderRNA *brna)
767 {
768         StructRNA *srna;
769         PropertyRNA *prop;
770
771         static EnumPropertyItem blueprint_shape_items[] = {
772                 {LS_MODIFIER_BLUEPRINT_CIRCLES, "CIRCLES", 0, "Circles", "Draw a blueprint using circular contour strokes"},
773                 {LS_MODIFIER_BLUEPRINT_ELLIPSES, "ELLIPSES", 0, "Ellipses", "Draw a blueprint using elliptic contour strokes"},
774                 {LS_MODIFIER_BLUEPRINT_SQUARES, "SQUARES", 0, "Squares", "Draw a blueprint using square contour strokes"},
775                 {0, NULL, 0, NULL, NULL}
776         };
777
778         static EnumPropertyItem transform_pivot_items[] = {
779                 {LS_MODIFIER_2D_TRANSFORM_PIVOT_CENTER, "CENTER", 0, "Stroke Center", ""},
780                 {LS_MODIFIER_2D_TRANSFORM_PIVOT_START, "START", 0, "Stroke Start", ""},
781                 {LS_MODIFIER_2D_TRANSFORM_PIVOT_END, "END", 0, "Stroke End", ""},
782                 {LS_MODIFIER_2D_TRANSFORM_PIVOT_PARAM, "PARAM", 0, "Stroke Point Parameter", ""},
783                 {LS_MODIFIER_2D_TRANSFORM_PIVOT_ABSOLUTE, "ABSOLUTE", 0, "Absolute 2D Point", ""},
784                 {0, NULL, 0, NULL, NULL}
785         };
786
787         srna = RNA_def_struct(brna, "LineStyleModifier", NULL);
788         RNA_def_struct_ui_text(srna, "Line Style Modifier", "Base type to define modifiers");
789
790         /* line color modifiers */
791
792         srna = RNA_def_struct(brna, "LineStyleColorModifier", "LineStyleModifier");
793         RNA_def_struct_sdna(srna, "LineStyleModifier");
794         RNA_def_struct_refine_func(srna, "rna_LineStyle_color_modifier_refine");
795         RNA_def_struct_path_func(srna, "rna_LineStyle_color_modifier_path");
796         RNA_def_struct_ui_text(srna, "Line Style Color Modifier", "Base type to define line color modifiers");
797
798         srna = RNA_def_struct(brna, "LineStyleColorModifier_AlongStroke", "LineStyleColorModifier");
799         RNA_def_struct_ui_text(srna, "Along Stroke", "Change line color along stroke");
800         rna_def_color_modifier(srna);
801         rna_def_modifier_color_ramp_common(srna, false);
802
803         srna = RNA_def_struct(brna, "LineStyleColorModifier_DistanceFromCamera", "LineStyleColorModifier");
804         RNA_def_struct_ui_text(srna, "Distance from Camera", "Change line color based on the distance from the camera");
805         rna_def_color_modifier(srna);
806         rna_def_modifier_color_ramp_common(srna, true);
807
808         srna = RNA_def_struct(brna, "LineStyleColorModifier_DistanceFromObject", "LineStyleColorModifier");
809         RNA_def_struct_ui_text(srna, "Distance from Object", "Change line color based on the distance from an object");
810         rna_def_color_modifier(srna);
811         rna_def_modifier_color_ramp_common(srna, true);
812
813         prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
814         RNA_def_property_pointer_sdna(prop, NULL, "target");
815         RNA_def_property_struct_type(prop, "Object");
816         RNA_def_property_flag(prop, PROP_EDITABLE);
817         RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured");
818         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
819
820         srna = RNA_def_struct(brna, "LineStyleColorModifier_Material", "LineStyleColorModifier");
821         RNA_def_struct_ui_text(srna, "Material", "Change line color based on a material attribute");
822         rna_def_color_modifier(srna);
823         rna_def_modifier_material_common(srna);
824         rna_def_modifier_color_ramp_common(srna, false);
825
826         prop = RNA_def_property(srna, "use_ramp", PROP_BOOLEAN, PROP_NONE);
827         RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_USE_RAMP);
828         RNA_def_property_ui_text(prop, "Ramp", "Use color ramp to map the BW average into an RGB color");
829         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
830
831         srna = RNA_def_struct(brna, "LineStyleColorModifier_Tangent", "LineStyleColorModifier");
832         RNA_def_struct_ui_text(srna, "Tangent", "Change line color based on the direction of a stroke");
833         rna_def_color_modifier(srna);
834         rna_def_modifier_color_ramp_common(srna, false);
835
836         srna = RNA_def_struct(brna, "LineStyleColorModifier_Noise", "LineStyleColorModifier");
837         RNA_def_struct_ui_text(srna, "Noise", "Change line color based on random noise");
838         rna_def_color_modifier(srna);
839         rna_def_modifier_color_ramp_common(srna, false);
840
841         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
842         RNA_def_property_float_sdna(prop, NULL, "amplitude");
843         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
844         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
845
846         prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
847         RNA_def_property_float_sdna(prop, NULL, "period");
848         RNA_def_property_ui_text(prop, "Period", "Period of the noise");
849         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
850
851         prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
852         RNA_def_property_int_sdna(prop, NULL, "seed");
853         RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
854         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
855
856         srna = RNA_def_struct(brna, "LineStyleColorModifier_CreaseAngle", "LineStyleColorModifier");
857         RNA_def_struct_ui_text(srna, "Crease Angle", "Change line color based on the underlying crease angle");
858         rna_def_color_modifier(srna);
859         rna_def_modifier_color_ramp_common(srna, false);
860
861         prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
862         RNA_def_property_float_sdna(prop, NULL, "min_angle");
863         RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
864         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
865
866         prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
867         RNA_def_property_float_sdna(prop, NULL, "max_angle");
868         RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
869         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
870
871         srna = RNA_def_struct(brna, "LineStyleColorModifier_Curvature_3D", "LineStyleColorModifier");
872         RNA_def_struct_ui_text(srna, "Curvature 3D",
873                                "Change line color based on the radial curvature of 3D mesh surfaces");
874         rna_def_color_modifier(srna);
875         rna_def_modifier_color_ramp_common(srna, false);
876
877         prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
878         RNA_def_property_float_sdna(prop, NULL, "min_curvature");
879         RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
880         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
881
882         prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
883         RNA_def_property_float_sdna(prop, NULL, "max_curvature");
884         RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
885         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
886
887         /* alpha transparency modifiers */
888
889         srna = RNA_def_struct(brna, "LineStyleAlphaModifier", "LineStyleModifier");
890         RNA_def_struct_sdna(srna, "LineStyleModifier");
891         RNA_def_struct_refine_func(srna, "rna_LineStyle_alpha_modifier_refine");
892         RNA_def_struct_path_func(srna, "rna_LineStyle_alpha_modifier_path");
893         RNA_def_struct_ui_text(srna, "Line Style Alpha Modifier", "Base type to define alpha transparency modifiers");
894
895         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_AlongStroke", "LineStyleAlphaModifier");
896         RNA_def_struct_ui_text(srna, "Along Stroke", "Change alpha transparency along stroke");
897         rna_def_alpha_modifier(srna);
898         rna_def_modifier_curve_common(srna, false, false);
899
900         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_DistanceFromCamera", "LineStyleAlphaModifier");
901         RNA_def_struct_ui_text(srna, "Distance from Camera",
902                                "Change alpha transparency based on the distance from the camera");
903         rna_def_alpha_modifier(srna);
904         rna_def_modifier_curve_common(srna, true, false);
905
906         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_DistanceFromObject", "LineStyleAlphaModifier");
907         RNA_def_struct_ui_text(srna, "Distance from Object",
908                                "Change alpha transparency based on the distance from an object");
909         rna_def_alpha_modifier(srna);
910         rna_def_modifier_curve_common(srna, true, false);
911
912         prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
913         RNA_def_property_pointer_sdna(prop, NULL, "target");
914         RNA_def_property_struct_type(prop, "Object");
915         RNA_def_property_flag(prop, PROP_EDITABLE);
916         RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured");
917         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
918
919         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Material", "LineStyleAlphaModifier");
920         RNA_def_struct_ui_text(srna, "Material", "Change alpha transparency based on a material attribute");
921         rna_def_alpha_modifier(srna);
922         rna_def_modifier_material_common(srna);
923         rna_def_modifier_curve_common(srna, false, false);
924
925         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Tangent", "LineStyleAlphaModifier");
926         RNA_def_struct_ui_text(srna, "Tangent", "Alpha transparency based on the direction of the stroke");
927         rna_def_alpha_modifier(srna);
928         rna_def_modifier_curve_common(srna, false, false);
929
930         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Noise", "LineStyleAlphaModifier");
931         RNA_def_struct_ui_text(srna, "Noise", "Alpha transparency based on random noise");
932         rna_def_alpha_modifier(srna);
933         rna_def_modifier_curve_common(srna, false, false);
934
935         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
936         RNA_def_property_float_sdna(prop, NULL, "amplitude");
937         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
938         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
939
940         prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
941         RNA_def_property_float_sdna(prop, NULL, "period");
942         RNA_def_property_ui_text(prop, "Period", "Period of the noise");
943         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
944
945         prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
946         RNA_def_property_int_sdna(prop, NULL, "seed");
947         RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
948         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
949
950         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_CreaseAngle", "LineStyleAlphaModifier");
951         RNA_def_struct_ui_text(srna, "Crease Angle",
952                                "Alpha transparency based on the angle between two adjacent faces");
953         rna_def_alpha_modifier(srna);
954         rna_def_modifier_curve_common(srna, false, false);
955
956         prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
957         RNA_def_property_float_sdna(prop, NULL, "min_angle");
958         RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
959         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
960
961         prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
962         RNA_def_property_float_sdna(prop, NULL, "max_angle");
963         RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
964         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
965
966         srna = RNA_def_struct(brna, "LineStyleAlphaModifier_Curvature_3D", "LineStyleAlphaModifier");
967         RNA_def_struct_ui_text(srna, "Curvature 3D",
968                                "Alpha transparency based on the radial curvature of 3D mesh surfaces");
969         rna_def_alpha_modifier(srna);
970         rna_def_modifier_curve_common(srna, false, false);
971
972         prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
973         RNA_def_property_float_sdna(prop, NULL, "min_curvature");
974         RNA_def_property_range(prop, 0.0f, 10000.0f);
975         RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
976         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
977
978         prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
979         RNA_def_property_float_sdna(prop, NULL, "max_curvature");
980         RNA_def_property_range(prop, 0.0f, 10000.0f);
981         RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
982         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
983
984         /* line thickness modifiers */
985         srna = RNA_def_struct(brna, "LineStyleThicknessModifier", "LineStyleModifier");
986         RNA_def_struct_sdna(srna, "LineStyleModifier");
987         RNA_def_struct_refine_func(srna, "rna_LineStyle_thickness_modifier_refine");
988         RNA_def_struct_path_func(srna, "rna_LineStyle_thickness_modifier_path");
989         RNA_def_struct_ui_text(srna, "Line Style Thickness Modifier", "Base type to define line thickness modifiers");
990
991         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Tangent", "LineStyleThicknessModifier");
992         RNA_def_struct_ui_text(srna, "Tangent", "Thickness based on the direction of the stroke");
993         rna_def_thickness_modifier(srna);
994         rna_def_modifier_curve_common(srna, false, false);
995
996         prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
997         RNA_def_property_float_sdna(prop, NULL, "min_thickness");
998         RNA_def_property_range(prop, 0.0f, 10000.0f);
999         RNA_def_property_ui_text(prop, "Min Thickness",
1000                                  "Minimum thickness");
1001         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1002
1003         prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
1004         RNA_def_property_float_sdna(prop, NULL, "max_thickness");
1005         RNA_def_property_range(prop, 0.0f, 10000.0f);
1006         RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
1007         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1008
1009         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_AlongStroke", "LineStyleThicknessModifier");
1010         RNA_def_struct_ui_text(srna, "Along Stroke", "Change line thickness along stroke");
1011         rna_def_thickness_modifier(srna);
1012         rna_def_modifier_curve_common(srna, false, true);
1013
1014         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_DistanceFromCamera", "LineStyleThicknessModifier");
1015         RNA_def_struct_ui_text(srna, "Distance from Camera", "Change line thickness based on the distance from the camera");
1016         rna_def_thickness_modifier(srna);
1017         rna_def_modifier_curve_common(srna, true, true);
1018
1019         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_DistanceFromObject", "LineStyleThicknessModifier");
1020         RNA_def_struct_ui_text(srna, "Distance from Object", "Change line thickness based on the distance from an object");
1021         rna_def_thickness_modifier(srna);
1022         rna_def_modifier_curve_common(srna, true, true);
1023
1024         prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
1025         RNA_def_property_pointer_sdna(prop, NULL, "target");
1026         RNA_def_property_struct_type(prop, "Object");
1027         RNA_def_property_flag(prop, PROP_EDITABLE);
1028         RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured");
1029         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1030
1031         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Material", "LineStyleThicknessModifier");
1032         RNA_def_struct_ui_text(srna, "Material", "Change line thickness based on a material attribute");
1033         rna_def_thickness_modifier(srna);
1034         rna_def_modifier_material_common(srna);
1035         rna_def_modifier_curve_common(srna, false, true);
1036
1037         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Calligraphy", "LineStyleThicknessModifier");
1038         RNA_def_struct_ui_text(srna, "Calligraphy",
1039                                "Change line thickness so that stroke looks like made with a calligraphic pen");
1040         rna_def_thickness_modifier(srna);
1041
1042         prop = RNA_def_property(srna, "orientation", PROP_FLOAT, PROP_ANGLE);
1043         RNA_def_property_float_sdna(prop, NULL, "orientation");
1044         RNA_def_property_ui_text(prop, "Orientation", "Angle of the main direction");
1045         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1046
1047         prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
1048         RNA_def_property_float_sdna(prop, NULL, "min_thickness");
1049         RNA_def_property_range(prop, 0.0f, 10000.0f);
1050         RNA_def_property_ui_text(prop, "Min Thickness",
1051                                  "Minimum thickness in the direction perpendicular to the main direction");
1052         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1053
1054         prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
1055         RNA_def_property_float_sdna(prop, NULL, "max_thickness");
1056         RNA_def_property_range(prop, 0.0f, 10000.0f);
1057         RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness in the main direction");
1058         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1059
1060         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Noise", "LineStyleThicknessModifier");
1061         RNA_def_struct_ui_text(srna, "Noise", "Line thickness based on random noise");
1062         rna_def_thickness_modifier(srna);
1063
1064         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
1065         RNA_def_property_float_sdna(prop, NULL, "amplitude");
1066         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the noise");
1067         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1068
1069         prop = RNA_def_property(srna, "period", PROP_FLOAT, PROP_NONE);
1070         RNA_def_property_float_sdna(prop, NULL, "period");
1071         RNA_def_property_ui_text(prop, "Period", "Period of the noise");
1072         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1073
1074         prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
1075         RNA_def_property_int_sdna(prop, NULL, "seed");
1076         RNA_def_property_ui_text(prop, "Seed", "Seed for the noise generation");
1077         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1078
1079         prop = RNA_def_property(srna, "use_asymmetric", PROP_BOOLEAN, PROP_NONE);
1080         RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_THICKNESS_ASYMMETRIC);
1081         RNA_def_property_ui_text(prop, "Asymmetric", "Allow thickness to be assigned asymmetrically");
1082         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1083
1084         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Curvature_3D", "LineStyleThicknessModifier");
1085         RNA_def_struct_ui_text(srna, "Curvature 3D",
1086                                "Line thickness based on the radial curvature of 3D mesh surfaces");
1087         rna_def_thickness_modifier(srna);
1088         rna_def_modifier_curve_common(srna, false, false);
1089
1090         prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
1091         RNA_def_property_float_sdna(prop, NULL, "min_thickness");
1092         RNA_def_property_range(prop, 0.0f, 10000.0f);
1093         RNA_def_property_ui_text(prop, "Min Thickness", "Minimum thickness");
1094         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1095
1096         prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
1097         RNA_def_property_float_sdna(prop, NULL, "max_thickness");
1098         RNA_def_property_range(prop, 0.0f, 10000.0f);
1099         RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
1100         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1101
1102         prop = RNA_def_property(srna, "curvature_min", PROP_FLOAT, PROP_NONE);
1103         RNA_def_property_float_sdna(prop, NULL, "min_curvature");
1104         RNA_def_property_range(prop, 0.0f, 10000.0f);
1105         RNA_def_property_ui_text(prop, "Min Curvature", "Minimum Curvature");
1106         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1107
1108         prop = RNA_def_property(srna, "curvature_max", PROP_FLOAT, PROP_NONE);
1109         RNA_def_property_float_sdna(prop, NULL, "max_curvature");
1110         RNA_def_property_range(prop, 0.0f, 10000.0f);
1111         RNA_def_property_ui_text(prop, "Max Curvature", "Maximum Curvature");
1112         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1113
1114         srna = RNA_def_struct(brna, "LineStyleThicknessModifier_CreaseAngle", "LineStyleThicknessModifier");
1115         RNA_def_struct_ui_text(srna, "Crease Angle",
1116                                "Line thickness based on the angle between two adjacent faces");
1117         rna_def_thickness_modifier(srna);
1118         rna_def_modifier_curve_common(srna, false, false);
1119
1120         prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
1121         RNA_def_property_float_sdna(prop, NULL, "min_angle");
1122         RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle to modify thickness");
1123         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1124
1125         prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
1126         RNA_def_property_float_sdna(prop, NULL, "max_angle");
1127         RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle to modify thickness");
1128         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1129
1130         prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
1131         RNA_def_property_float_sdna(prop, NULL, "min_thickness");
1132         RNA_def_property_range(prop, 0.0f, 10000.0f);
1133         RNA_def_property_ui_text(prop, "Min Thickness", "Minimum thickness");
1134         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1135
1136         prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
1137         RNA_def_property_float_sdna(prop, NULL, "max_thickness");
1138         RNA_def_property_range(prop, 0.0f, 10000.0f);
1139         RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness");
1140         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1141
1142         /* geometry modifiers */
1143
1144         srna = RNA_def_struct(brna, "LineStyleGeometryModifier", "LineStyleModifier");
1145         RNA_def_struct_sdna(srna, "LineStyleModifier");
1146         RNA_def_struct_refine_func(srna, "rna_LineStyle_geometry_modifier_refine");
1147         RNA_def_struct_path_func(srna, "rna_LineStyle_geometry_modifier_path");
1148         RNA_def_struct_ui_text(srna, "Line Style Geometry Modifier", "Base type to define stroke geometry modifiers");
1149
1150         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_Sampling", "LineStyleGeometryModifier");
1151         RNA_def_struct_ui_text(srna, "Sampling",
1152                                "Specify a new sampling value that determines the resolution of stroke polylines");
1153         rna_def_geometry_modifier(srna);
1154
1155         prop = RNA_def_property(srna, "sampling", PROP_FLOAT, PROP_NONE);
1156         RNA_def_property_float_sdna(prop, NULL, "sampling");
1157         RNA_def_property_range(prop, 0.0f, 10000.0f);
1158         RNA_def_property_ui_text(prop, "Sampling", "New sampling value to be used for subsequent modifiers");
1159         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1160
1161         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_BezierCurve", "LineStyleGeometryModifier");
1162         RNA_def_struct_ui_text(srna, "Bezier Curve",
1163                                "Replace stroke backbone geometry by a Bezier curve approximation of the "
1164                                "original backbone geometry");
1165         rna_def_geometry_modifier(srna);
1166
1167         prop = RNA_def_property(srna, "error", PROP_FLOAT, PROP_NONE);
1168         RNA_def_property_float_sdna(prop, NULL, "error");
1169         RNA_def_property_ui_text(prop, "Error",
1170                                  "Maximum distance allowed between the new Bezier curve and the "
1171                                  "original backbone geometry");
1172         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1173
1174         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_SinusDisplacement", "LineStyleGeometryModifier");
1175         RNA_def_struct_ui_text(srna, "Sinus Displacement", "Add sinus displacement to stroke backbone geometry");
1176         rna_def_geometry_modifier(srna);
1177
1178         prop = RNA_def_property(srna, "wavelength", PROP_FLOAT, PROP_NONE);
1179         RNA_def_property_float_sdna(prop, NULL, "wavelength");
1180         RNA_def_property_ui_text(prop, "Wavelength", "Wavelength of the sinus displacement");
1181         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1182
1183         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
1184         RNA_def_property_float_sdna(prop, NULL, "amplitude");
1185         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the sinus displacement");
1186         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1187
1188         prop = RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
1189         RNA_def_property_float_sdna(prop, NULL, "phase");
1190         RNA_def_property_ui_text(prop, "Phase", "Phase of the sinus displacement");
1191         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1192
1193         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_SpatialNoise", "LineStyleGeometryModifier");
1194         RNA_def_struct_ui_text(srna, "Spatial Noise", "Add spatial noise to stroke backbone geometry");
1195         rna_def_geometry_modifier(srna);
1196
1197         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
1198         RNA_def_property_float_sdna(prop, NULL, "amplitude");
1199         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the spatial noise");
1200         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1201
1202         prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
1203         RNA_def_property_float_sdna(prop, NULL, "scale");
1204         RNA_def_property_ui_text(prop, "Scale", "Scale of the spatial noise");
1205         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1206
1207         prop = RNA_def_property(srna, "octaves", PROP_INT, PROP_UNSIGNED);
1208         RNA_def_property_int_sdna(prop, NULL, "octaves");
1209         RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the spatial noise)");
1210         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1211
1212         prop = RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
1213         RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_SPATIAL_NOISE_SMOOTH);
1214         RNA_def_property_ui_text(prop, "Smooth", "If true, the spatial noise is smooth");
1215         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1216
1217         prop = RNA_def_property(srna, "use_pure_random", PROP_BOOLEAN, PROP_NONE);
1218         RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_SPATIAL_NOISE_PURERANDOM);
1219         RNA_def_property_ui_text(prop, "Pure Random", "If true, the spatial noise does not show any coherence");
1220         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1221
1222         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_PerlinNoise1D", "LineStyleGeometryModifier");
1223         RNA_def_struct_ui_text(srna, "Perlin Noise 1D", "Add one-dimensional Perlin noise to stroke backbone geometry");
1224         rna_def_geometry_modifier(srna);
1225
1226         prop = RNA_def_property(srna, "frequency", PROP_FLOAT, PROP_NONE);
1227         RNA_def_property_float_sdna(prop, NULL, "frequency");
1228         RNA_def_property_ui_text(prop, "Frequency", "Frequency of the Perlin noise");
1229         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1230
1231         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
1232         RNA_def_property_float_sdna(prop, NULL, "amplitude");
1233         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the Perlin noise");
1234         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1235
1236         prop = RNA_def_property(srna, "octaves", PROP_INT, PROP_UNSIGNED);
1237         RNA_def_property_int_sdna(prop, NULL, "octaves");
1238         RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise)");
1239         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1240
1241         prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
1242         RNA_def_property_float_sdna(prop, NULL, "angle");
1243         RNA_def_property_ui_text(prop, "Angle", "Displacement direction");
1244         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1245
1246         prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
1247         RNA_def_property_int_sdna(prop, NULL, "seed");
1248         RNA_def_property_ui_text(prop, "Seed",
1249                                  "Seed for random number generation (if negative, time is used as a seed instead)");
1250         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1251
1252         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_PerlinNoise2D", "LineStyleGeometryModifier");
1253         RNA_def_struct_ui_text(srna, "Perlin Noise 2D", "Add two-dimensional Perlin noise to stroke backbone geometry");
1254         rna_def_geometry_modifier(srna);
1255
1256         prop = RNA_def_property(srna, "frequency", PROP_FLOAT, PROP_NONE);
1257         RNA_def_property_float_sdna(prop, NULL, "frequency");
1258         RNA_def_property_ui_text(prop, "Frequency", "Frequency of the Perlin noise");
1259         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1260
1261         prop = RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
1262         RNA_def_property_float_sdna(prop, NULL, "amplitude");
1263         RNA_def_property_ui_text(prop, "Amplitude", "Amplitude of the Perlin noise");
1264         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1265
1266         prop = RNA_def_property(srna, "octaves", PROP_INT, PROP_UNSIGNED);
1267         RNA_def_property_int_sdna(prop, NULL, "octaves");
1268         RNA_def_property_ui_text(prop, "Octaves", "Number of octaves (i.e., the amount of detail of the Perlin noise)");
1269         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1270
1271         prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
1272         RNA_def_property_float_sdna(prop, NULL, "angle");
1273         RNA_def_property_ui_text(prop, "Angle", "Displacement direction");
1274         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1275
1276         prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
1277         RNA_def_property_int_sdna(prop, NULL, "seed");
1278         RNA_def_property_ui_text(prop, "Seed",
1279                                  "Seed for random number generation (if negative, time is used as a seed instead)");
1280         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1281
1282         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_BackboneStretcher", "LineStyleGeometryModifier");
1283         RNA_def_struct_ui_text(srna, "Backbone Stretcher", "Stretch the beginning and the end of stroke backbone");
1284         rna_def_geometry_modifier(srna);
1285
1286         prop = RNA_def_property(srna, "backbone_length", PROP_FLOAT, PROP_NONE);
1287         RNA_def_property_float_sdna(prop, NULL, "backbone_length");
1288         RNA_def_property_ui_text(prop, "Backbone Length", "Amount of backbone stretching");
1289         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1290
1291         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_TipRemover", "LineStyleGeometryModifier");
1292         RNA_def_struct_ui_text(srna, "Tip Remover",
1293                                "Remove a piece of stroke at the beginning and the end of stroke backbone");
1294         rna_def_geometry_modifier(srna);
1295
1296         prop = RNA_def_property(srna, "tip_length", PROP_FLOAT, PROP_NONE);
1297         RNA_def_property_float_sdna(prop, NULL, "tip_length");
1298         RNA_def_property_ui_text(prop, "Tip Length", "Length of tips to be removed");
1299         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1300
1301         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_Polygonalization", "LineStyleGeometryModifier");
1302         RNA_def_struct_ui_text(srna, "Polygonalization", "Modify the stroke geometry so that it looks more 'polygonal'");
1303         rna_def_geometry_modifier(srna);
1304
1305         prop = RNA_def_property(srna, "error", PROP_FLOAT, PROP_NONE);
1306         RNA_def_property_float_sdna(prop, NULL, "error");
1307         RNA_def_property_ui_text(prop, "Error",
1308                                  "Maximum distance between the original stroke and its polygonal approximation");
1309         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1310
1311         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_GuidingLines", "LineStyleGeometryModifier");
1312         RNA_def_struct_ui_text(srna, "Guiding Lines",
1313                                "Modify the stroke geometry so that it corresponds to its main direction line");
1314         rna_def_geometry_modifier(srna);
1315
1316         prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
1317         RNA_def_property_float_sdna(prop, NULL, "offset");
1318         RNA_def_property_ui_text(prop, "Offset",
1319                                  "Displacement that is applied to the main direction line along its normal");
1320         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1321
1322         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_Blueprint", "LineStyleGeometryModifier");
1323         RNA_def_struct_ui_text(srna, "Blueprint",
1324                                "Produce a blueprint using circular, elliptic, and square contour strokes");
1325         rna_def_geometry_modifier(srna);
1326
1327         prop = RNA_def_property(srna, "shape", PROP_ENUM, PROP_NONE);
1328         RNA_def_property_enum_bitflag_sdna(prop, NULL, "flags");
1329         RNA_def_property_enum_items(prop, blueprint_shape_items);
1330         RNA_def_property_ui_text(prop, "Shape", "Select the shape of blueprint contour strokes");
1331         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1332
1333         prop = RNA_def_property(srna, "rounds", PROP_INT, PROP_UNSIGNED);
1334         RNA_def_property_int_sdna(prop, NULL, "rounds");
1335         RNA_def_property_range(prop, 1, 1000);
1336         RNA_def_property_ui_text(prop, "Rounds", "Number of rounds in contour strokes");
1337         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1338
1339         prop = RNA_def_property(srna, "backbone_length", PROP_FLOAT, PROP_NONE);
1340         RNA_def_property_float_sdna(prop, NULL, "backbone_length");
1341         RNA_def_property_ui_text(prop, "Backbone Length", "Amount of backbone stretching");
1342         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1343
1344         prop = RNA_def_property(srna, "random_radius", PROP_INT, PROP_UNSIGNED);
1345         RNA_def_property_int_sdna(prop, NULL, "random_radius");
1346         RNA_def_property_ui_text(prop, "Random Radius", "Randomness of the radius");
1347         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1348
1349         prop = RNA_def_property(srna, "random_center", PROP_INT, PROP_UNSIGNED);
1350         RNA_def_property_int_sdna(prop, NULL, "random_center");
1351         RNA_def_property_ui_text(prop, "Random Center", "Randomness of the center");
1352         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1353
1354         prop = RNA_def_property(srna, "random_backbone", PROP_INT, PROP_UNSIGNED);
1355         RNA_def_property_int_sdna(prop, NULL, "random_backbone");
1356         RNA_def_property_ui_text(prop, "Random Backbone", "Randomness of the backbone stretching");
1357         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1358
1359         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_2DOffset", "LineStyleGeometryModifier");
1360         RNA_def_struct_ui_text(srna, "2D Offset", "Add two-dimensional offsets to stroke backbone geometry");
1361         rna_def_geometry_modifier(srna);
1362
1363         prop = RNA_def_property(srna, "start", PROP_FLOAT, PROP_NONE);
1364         RNA_def_property_float_sdna(prop, NULL, "start");
1365         RNA_def_property_ui_text(prop, "Start", "Displacement that is applied from the beginning of the stroke");
1366         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1367
1368         prop = RNA_def_property(srna, "end", PROP_FLOAT, PROP_NONE);
1369         RNA_def_property_float_sdna(prop, NULL, "end");
1370         RNA_def_property_ui_text(prop, "End", "Displacement that is applied from the end of the stroke");
1371         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1372
1373         prop = RNA_def_property(srna, "x", PROP_FLOAT, PROP_NONE);
1374         RNA_def_property_float_sdna(prop, NULL, "x");
1375         RNA_def_property_ui_text(prop, "X", "Displacement that is applied to the X coordinates of stroke vertices");
1376         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1377
1378         prop = RNA_def_property(srna, "y", PROP_FLOAT, PROP_NONE);
1379         RNA_def_property_float_sdna(prop, NULL, "y");
1380         RNA_def_property_ui_text(prop, "Y", "Displacement that is applied to the Y coordinates of stroke vertices");
1381         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1382
1383         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_2DTransform", "LineStyleGeometryModifier");
1384         RNA_def_struct_ui_text(srna, "2D Transform",
1385                                "Apply two-dimensional scaling and rotation to stroke backbone geometry");
1386         rna_def_geometry_modifier(srna);
1387
1388         prop = RNA_def_property(srna, "pivot", PROP_ENUM, PROP_NONE);
1389         RNA_def_property_enum_sdna(prop, NULL, "pivot");
1390         RNA_def_property_enum_items(prop, transform_pivot_items);
1391         RNA_def_property_ui_text(prop, "Pivot", "Pivot of scaling and rotation operations");
1392         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1393
1394         prop = RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
1395         RNA_def_property_float_sdna(prop, NULL, "scale_x");
1396         RNA_def_property_flag(prop, PROP_PROPORTIONAL);
1397         RNA_def_property_ui_text(prop, "Scale X", "Scaling factor that is applied along the X axis");
1398         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1399
1400         prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
1401         RNA_def_property_float_sdna(prop, NULL, "scale_y");
1402         RNA_def_property_flag(prop, PROP_PROPORTIONAL);
1403         RNA_def_property_ui_text(prop, "Scale Y", "Scaling factor that is applied along the Y axis");
1404         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1405
1406         prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
1407         RNA_def_property_float_sdna(prop, NULL, "angle");
1408         RNA_def_property_ui_text(prop, "Rotation Angle", "Rotation angle");
1409         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1410
1411         prop = RNA_def_property(srna, "pivot_u", PROP_FLOAT, PROP_FACTOR);
1412         RNA_def_property_float_sdna(prop, NULL, "pivot_u");
1413         RNA_def_property_range(prop, 0.f, 1.f);
1414         RNA_def_property_ui_text(prop, "Stroke Point Parameter",
1415                                  "Pivot in terms of the stroke point parameter u (0 <= u <= 1)");
1416         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1417
1418         prop = RNA_def_property(srna, "pivot_x", PROP_FLOAT, PROP_NONE);
1419         RNA_def_property_float_sdna(prop, NULL, "pivot_x");
1420         RNA_def_property_ui_text(prop, "Pivot X", "2D X coordinate of the absolute pivot");
1421         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1422
1423         prop = RNA_def_property(srna, "pivot_y", PROP_FLOAT, PROP_NONE);
1424         RNA_def_property_float_sdna(prop, NULL, "pivot_y");
1425         RNA_def_property_ui_text(prop, "Pivot Y", "2D Y coordinate of the absolute pivot");
1426         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1427
1428         srna = RNA_def_struct(brna, "LineStyleGeometryModifier_Simplification", "LineStyleGeometryModifier");
1429         RNA_def_struct_ui_text(srna, "Simplification", "Simplify the stroke set");
1430         rna_def_geometry_modifier(srna);
1431
1432         prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE);
1433         RNA_def_property_float_sdna(prop, NULL, "tolerance");
1434         RNA_def_property_ui_text(prop, "Tolerance", "Distance below which segments will be merged");
1435         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1436 }
1437
1438 static void rna_def_freestyle_color_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
1439 {
1440         StructRNA *srna;
1441         FunctionRNA *func;
1442         PropertyRNA *parm;
1443
1444         RNA_def_property_srna(cprop, "LineStyleColorModifiers");
1445         srna = RNA_def_struct(brna, "LineStyleColorModifiers", NULL);
1446         RNA_def_struct_sdna(srna, "FreestyleLineStyle");
1447         RNA_def_struct_ui_text(srna, "Color Modifiers", "Color modifiers for changing line colors");
1448
1449         func = RNA_def_function(srna, "new", "rna_LineStyle_color_modifier_add");
1450         RNA_def_function_ui_description(func, "Add a color modifier to line style");
1451         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1452         parm = RNA_def_string(func, "name", "ColorModifier", 0, "", "New name for the color modifier (not unique)");
1453         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1454         parm = RNA_def_enum(func, "type", rna_enum_linestyle_color_modifier_type_items, 0, "", "Color modifier type to add");
1455         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1456         parm = RNA_def_pointer(func, "modifier", "LineStyleColorModifier", "", "Newly added color modifier");
1457         RNA_def_function_return(func, parm);
1458
1459         func = RNA_def_function(srna, "remove", "rna_LineStyle_color_modifier_remove");
1460         RNA_def_function_ui_description(func, "Remove a color modifier from line style");
1461         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1462         parm = RNA_def_pointer(func, "modifier", "LineStyleColorModifier", "", "Color modifier to remove");
1463         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1464         RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
1465 }
1466
1467 static void rna_def_freestyle_alpha_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
1468 {
1469         StructRNA *srna;
1470         FunctionRNA *func;
1471         PropertyRNA *parm;
1472
1473         RNA_def_property_srna(cprop, "LineStyleAlphaModifiers");
1474         srna = RNA_def_struct(brna, "LineStyleAlphaModifiers", NULL);
1475         RNA_def_struct_sdna(srna, "FreestyleLineStyle");
1476         RNA_def_struct_ui_text(srna, "Alpha Modifiers", "Alpha modifiers for changing line alphas");
1477
1478         func = RNA_def_function(srna, "new", "rna_LineStyle_alpha_modifier_add");
1479         RNA_def_function_ui_description(func, "Add a alpha modifier to line style");
1480         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1481         parm = RNA_def_string(func, "name", "AlphaModifier", 0, "", "New name for the alpha modifier (not unique)");
1482         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1483         parm = RNA_def_enum(func, "type", rna_enum_linestyle_alpha_modifier_type_items, 0, "", "Alpha modifier type to add");
1484         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1485         parm = RNA_def_pointer(func, "modifier", "LineStyleAlphaModifier", "", "Newly added alpha modifier");
1486         RNA_def_function_return(func, parm);
1487
1488         func = RNA_def_function(srna, "remove", "rna_LineStyle_alpha_modifier_remove");
1489         RNA_def_function_ui_description(func, "Remove a alpha modifier from line style");
1490         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1491         parm = RNA_def_pointer(func, "modifier", "LineStyleAlphaModifier", "", "Alpha modifier to remove");
1492         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1493         RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
1494 }
1495
1496 static void rna_def_freestyle_thickness_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
1497 {
1498         StructRNA *srna;
1499         FunctionRNA *func;
1500         PropertyRNA *parm;
1501
1502         RNA_def_property_srna(cprop, "LineStyleThicknessModifiers");
1503         srna = RNA_def_struct(brna, "LineStyleThicknessModifiers", NULL);
1504         RNA_def_struct_sdna(srna, "FreestyleLineStyle");
1505         RNA_def_struct_ui_text(srna, "Thickness Modifiers", "Thickness modifiers for changing line thickness");
1506
1507         func = RNA_def_function(srna, "new", "rna_LineStyle_thickness_modifier_add");
1508         RNA_def_function_ui_description(func, "Add a thickness modifier to line style");
1509         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1510         parm = RNA_def_string(func, "name", "ThicknessModifier", 0, "", "New name for the thickness modifier (not unique)");
1511         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1512         parm = RNA_def_enum(func, "type", rna_enum_linestyle_thickness_modifier_type_items, 0,
1513                             "", "Thickness modifier type to add");
1514         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1515         parm = RNA_def_pointer(func, "modifier", "LineStyleThicknessModifier", "", "Newly added thickness modifier");
1516         RNA_def_function_return(func, parm);
1517
1518         func = RNA_def_function(srna, "remove", "rna_LineStyle_thickness_modifier_remove");
1519         RNA_def_function_ui_description(func, "Remove a thickness modifier from line style");
1520         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1521         parm = RNA_def_pointer(func, "modifier", "LineStyleThicknessModifier", "", "Thickness modifier to remove");
1522         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1523         RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
1524 }
1525
1526 static void rna_def_freestyle_geometry_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
1527 {
1528         StructRNA *srna;
1529         FunctionRNA *func;
1530         PropertyRNA *parm;
1531
1532         RNA_def_property_srna(cprop, "LineStyleGeometryModifiers");
1533         srna = RNA_def_struct(brna, "LineStyleGeometryModifiers", NULL);
1534         RNA_def_struct_sdna(srna, "FreestyleLineStyle");
1535         RNA_def_struct_ui_text(srna, "Geometry Modifiers", "Geometry modifiers for changing line geometries");
1536
1537         func = RNA_def_function(srna, "new", "rna_LineStyle_geometry_modifier_add");
1538         RNA_def_function_ui_description(func, "Add a geometry modifier to line style");
1539         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1540         parm = RNA_def_string(func, "name", "GeometryModifier", 0, "", "New name for the geometry modifier (not unique)");
1541         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1542         parm = RNA_def_enum(func, "type", rna_enum_linestyle_geometry_modifier_type_items, 0,
1543                             "", "Geometry modifier type to add");
1544         RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
1545         parm = RNA_def_pointer(func, "modifier", "LineStyleGeometryModifier", "", "Newly added geometry modifier");
1546         RNA_def_function_return(func, parm);
1547
1548         func = RNA_def_function(srna, "remove", "rna_LineStyle_geometry_modifier_remove");
1549         RNA_def_function_ui_description(func, "Remove a geometry modifier from line style");
1550         RNA_def_function_flag(func, FUNC_USE_REPORTS);
1551         parm = RNA_def_pointer(func, "modifier", "LineStyleGeometryModifier", "", "Geometry modifier to remove");
1552         RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
1553         RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
1554 }
1555
1556 static void rna_def_linestyle(BlenderRNA *brna)
1557 {
1558         StructRNA *srna;
1559         PropertyRNA *prop;
1560
1561         static EnumPropertyItem panel_items[] = {
1562                 {LS_PANEL_STROKES, "STROKES", 0, "Strokes", "Show the panel for stroke construction"},
1563                 {LS_PANEL_COLOR, "COLOR", 0, "Color", "Show the panel for line color options"},
1564                 {LS_PANEL_ALPHA, "ALPHA", 0, "Alpha", "Show the panel for alpha transparency options"},
1565                 {LS_PANEL_THICKNESS, "THICKNESS", 0, "Thickness", "Show the panel for line thickness options"},
1566                 {LS_PANEL_GEOMETRY, "GEOMETRY", 0, "Geometry", "Show the panel for stroke geometry options"},
1567                 {LS_PANEL_TEXTURE, "TEXTURE", 0, "Texture", "Show the panel for stroke texture options"},
1568 #if 0 /* hidden for now */
1569                 {LS_PANEL_MISC, "MISC", 0, "Misc", "Show the panel for miscellaneous options"},
1570 #endif
1571                 {0, NULL, 0, NULL, NULL}
1572         };
1573         static EnumPropertyItem chaining_items[] = {
1574                 {LS_CHAINING_PLAIN, "PLAIN", 0, "Plain", "Plain chaining"},
1575                 {LS_CHAINING_SKETCHY, "SKETCHY", 0, "Sketchy", "Sketchy chaining with a multiple touch"},
1576                 {0, NULL, 0, NULL, NULL}
1577         };
1578         static EnumPropertyItem cap_items[] = {
1579                 {LS_CAPS_BUTT, "BUTT", 0, "Butt", "Butt cap (flat)"},
1580                 {LS_CAPS_ROUND, "ROUND", 0, "Round", "Round cap (half-circle)"},
1581                 {LS_CAPS_SQUARE, "SQUARE", 0, "Square", "Square cap (flat and extended)"},
1582                 {0, NULL, 0, NULL, NULL}
1583         };
1584         static EnumPropertyItem thickness_position_items[] = {
1585                 {LS_THICKNESS_CENTER, "CENTER", 0, "Center", "Silhouettes and border edges are centered along stroke geometry"},
1586                 {LS_THICKNESS_INSIDE, "INSIDE", 0, "Inside", "Silhouettes and border edges are drawn inside of stroke geometry"},
1587                 {LS_THICKNESS_OUTSIDE, "OUTSIDE", 0, "Outside", "Silhouettes and border edges are drawn outside of stroke geometry"},
1588                 {LS_THICKNESS_RELATIVE, "RELATIVE", 0, "Relative", "Silhouettes and border edges are shifted by a user-defined ratio"},
1589                 {0, NULL, 0, NULL, NULL}
1590         };
1591         static EnumPropertyItem sort_key_items[] = {
1592                 {LS_SORT_KEY_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", 0, "Distance from Camera", "Sort by distance from camera (closer lines lie on top of further lines)"},
1593                 {LS_SORT_KEY_2D_LENGTH, "2D_LENGTH", 0, "2D Length", "Sort by curvilinear 2D length (longer lines lie on top of shorter lines)"},
1594                 {LS_SORT_KEY_PROJECTED_X, "PROJECTED_X", 0, "Projected X", "Sort by the projected X value in the image coordinate system"},
1595                 {LS_SORT_KEY_PROJECTED_Y, "PROJECTED_Y", 0, "Projected Y", "Sort by the projected Y value in the image coordinate system"},
1596                 {0, NULL, 0, NULL, NULL}
1597         };
1598         static EnumPropertyItem sort_order_items[] = {
1599                 {0, "DEFAULT", 0, "Default", "Default order of the sort key"},
1600                 {LS_REVERSE_ORDER, "REVERSE", 0, "Reverse", "Reverse order"},
1601                 {0, NULL, 0, NULL, NULL}
1602         };
1603         static EnumPropertyItem integration_type_items[] = {
1604                 {LS_INTEGRATION_MEAN, "MEAN", 0, "Mean", "The value computed for the chain is the mean of the values obtained for chain vertices"},
1605                 {LS_INTEGRATION_MIN, "MIN", 0, "Min", "The value computed for the chain is the minimum of the values obtained for chain vertices"},
1606                 {LS_INTEGRATION_MAX, "MAX", 0, "Max", "The value computed for the chain is the maximum of the values obtained for chain vertices"},
1607                 {LS_INTEGRATION_FIRST, "FIRST", 0, "First", "The value computed for the chain is the value obtained for the first chain vertex"},
1608                 {LS_INTEGRATION_LAST, "LAST", 0, "Last", "The value computed for the chain is the value obtained for the last chain vertex"},
1609                 {0, NULL, 0, NULL, NULL}
1610         };
1611
1612         srna = RNA_def_struct(brna, "FreestyleLineStyle", "ID");
1613         RNA_def_struct_ui_text(srna, "Freestyle Line Style", "Freestyle line style, reusable by multiple line sets");
1614         RNA_def_struct_ui_icon(srna, ICON_LINE_DATA);
1615
1616         rna_def_mtex_common(brna, srna, "rna_LineStyle_mtex_begin", "rna_LineStyle_active_texture_get",
1617                             "rna_LineStyle_active_texture_set", NULL, "LineStyleTextureSlot", "LineStyleTextureSlots",
1618                             "rna_LineStyle_update", "rna_LineStyle_update");
1619
1620         prop = RNA_def_property(srna, "panel", PROP_ENUM, PROP_NONE);
1621         RNA_def_property_enum_bitflag_sdna(prop, NULL, "panel");
1622         RNA_def_property_enum_items(prop, panel_items);
1623         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
1624         RNA_def_property_ui_text(prop, "Panel", "Select the property panel to be shown");
1625
1626         prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1627         RNA_def_property_float_sdna(prop, NULL, "r");
1628         RNA_def_property_array(prop, 3);
1629         RNA_def_property_ui_text(prop, "Color", "Base line color, possibly modified by line color modifiers");
1630         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1631
1632         prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_FACTOR);
1633         RNA_def_property_float_sdna(prop, NULL, "alpha");
1634         RNA_def_property_range(prop, 0.0f, 1.0f);
1635         RNA_def_property_ui_text(prop, "Alpha Transparency",
1636                                  "Base alpha transparency, possibly modified by alpha transparency modifiers");
1637         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1638
1639         prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_NONE);
1640         RNA_def_property_float_sdna(prop, NULL, "thickness");
1641         RNA_def_property_range(prop, 0.0f, 10000.0f);
1642         RNA_def_property_ui_text(prop, "Thickness", "Base line thickness, possibly modified by line thickness modifiers");
1643         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1644
1645         prop = RNA_def_property(srna, "thickness_position", PROP_ENUM, PROP_NONE);
1646         RNA_def_property_enum_bitflag_sdna(prop, NULL, "thickness_position");
1647         RNA_def_property_enum_items(prop, thickness_position_items);
1648         RNA_def_property_ui_text(prop, "Thickness Position",
1649                                        "Thickness position of silhouettes and border edges (applicable when plain chaining is used with the Same Object option)");
1650         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1651
1652         prop = RNA_def_property(srna, "thickness_ratio", PROP_FLOAT, PROP_FACTOR);
1653         RNA_def_property_float_sdna(prop, NULL, "thickness_ratio");
1654         RNA_def_property_range(prop, 0.f, 1.f);
1655         RNA_def_property_ui_text(prop, "Thickness Ratio",
1656                                  "A number between 0 (inside) and 1 (outside) specifying the relative position of "
1657                                  "stroke thickness");
1658         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1659
1660         prop = RNA_def_property(srna, "color_modifiers", PROP_COLLECTION, PROP_NONE);
1661         RNA_def_property_collection_sdna(prop, NULL, "color_modifiers", NULL);
1662         RNA_def_property_struct_type(prop, "LineStyleColorModifier");
1663         RNA_def_property_ui_text(prop, "Color Modifiers", "List of line color modifiers");
1664         rna_def_freestyle_color_modifiers(brna, prop);
1665
1666         prop = RNA_def_property(srna, "alpha_modifiers", PROP_COLLECTION, PROP_NONE);
1667         RNA_def_property_collection_sdna(prop, NULL, "alpha_modifiers", NULL);
1668         RNA_def_property_struct_type(prop, "LineStyleAlphaModifier");
1669         RNA_def_property_ui_text(prop, "Alpha Modifiers", "List of alpha transparency modifiers");
1670         rna_def_freestyle_alpha_modifiers(brna, prop);
1671
1672         prop = RNA_def_property(srna, "thickness_modifiers", PROP_COLLECTION, PROP_NONE);
1673         RNA_def_property_collection_sdna(prop, NULL, "thickness_modifiers", NULL);
1674         RNA_def_property_struct_type(prop, "LineStyleThicknessModifier");
1675         RNA_def_property_ui_text(prop, "Thickness Modifiers", "List of line thickness modifiers");
1676         rna_def_freestyle_thickness_modifiers(brna, prop);
1677
1678         prop = RNA_def_property(srna, "geometry_modifiers", PROP_COLLECTION, PROP_NONE);
1679         RNA_def_property_collection_sdna(prop, NULL, "geometry_modifiers", NULL);
1680         RNA_def_property_struct_type(prop, "LineStyleGeometryModifier");
1681         RNA_def_property_ui_text(prop, "Geometry Modifiers", "List of stroke geometry modifiers");
1682         rna_def_freestyle_geometry_modifiers(brna, prop);
1683
1684         prop = RNA_def_property(srna, "use_chaining", PROP_BOOLEAN, PROP_NONE);
1685         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", LS_NO_CHAINING);
1686         RNA_def_property_ui_text(prop, "Chaining", "Enable chaining of feature edges");
1687         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1688
1689         prop = RNA_def_property(srna, "chaining", PROP_ENUM, PROP_NONE);
1690         RNA_def_property_enum_sdna(prop, NULL, "chaining");
1691         RNA_def_property_enum_items(prop, chaining_items);
1692         RNA_def_property_ui_text(prop, "Chaining Method", "Select the way how feature edges are jointed to form chains");
1693         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1694
1695         prop = RNA_def_property(srna, "rounds", PROP_INT, PROP_UNSIGNED);
1696         RNA_def_property_int_sdna(prop, NULL, "rounds");
1697         RNA_def_property_range(prop, 1, 1000);
1698         RNA_def_property_ui_text(prop, "Rounds", "Number of rounds in a sketchy multiple touch");
1699         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1700
1701         prop = RNA_def_property(srna, "use_same_object", PROP_BOOLEAN, PROP_NONE);
1702         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_SAME_OBJECT);
1703         RNA_def_property_ui_text(prop, "Same Object", "If true, only feature edges of the same object are joined");
1704         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1705
1706         prop = RNA_def_property(srna, "use_split_length", PROP_BOOLEAN, PROP_NONE);
1707         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_SPLIT_LENGTH);
1708         RNA_def_property_ui_text(prop, "Use Split Length", "Enable chain splitting by curvilinear 2D length");
1709         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1710
1711         prop = RNA_def_property(srna, "split_length", PROP_FLOAT, PROP_NONE);
1712         RNA_def_property_float_sdna(prop, NULL, "split_length");
1713         RNA_def_property_range(prop, 0.0f, 10000.0f);
1714         RNA_def_property_ui_text(prop, "Split Length", "Curvilinear 2D length for chain splitting");
1715         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1716
1717         prop = RNA_def_property(srna, "use_angle_min", PROP_BOOLEAN, PROP_NONE);
1718         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MIN_2D_ANGLE);
1719         RNA_def_property_ui_text(prop, "Use Min 2D Angle",
1720                                  "Split chains at points with angles smaller than the minimum 2D angle");
1721         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1722
1723         prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
1724         RNA_def_property_float_sdna(prop, NULL, "min_angle");
1725         RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
1726         RNA_def_property_ui_text(prop, "Min 2D Angle", "Minimum 2D angle for splitting chains");
1727         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1728
1729         prop = RNA_def_property(srna, "use_angle_max", PROP_BOOLEAN, PROP_NONE);
1730         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MAX_2D_ANGLE);
1731         RNA_def_property_ui_text(prop, "Use Max 2D Angle",
1732                                  "Split chains at points with angles larger than the maximum 2D angle");
1733         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1734
1735         prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
1736         RNA_def_property_float_sdna(prop, NULL, "max_angle");
1737         RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
1738         RNA_def_property_ui_text(prop, "Max 2D Angle", "Maximum 2D angle for splitting chains");
1739         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1740
1741         prop = RNA_def_property(srna, "use_length_min", PROP_BOOLEAN, PROP_NONE);
1742         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MIN_2D_LENGTH);
1743         RNA_def_property_ui_text(prop, "Use Min 2D Length", "Enable the selection of chains by a minimum 2D length");
1744         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1745
1746         prop = RNA_def_property(srna, "length_min", PROP_FLOAT, PROP_NONE);
1747         RNA_def_property_float_sdna(prop, NULL, "min_length");
1748         RNA_def_property_range(prop, 0.0f, 10000.0f);
1749         RNA_def_property_ui_text(prop, "Min 2D Length", "Minimum curvilinear 2D length for the selection of chains");
1750         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1751
1752         prop = RNA_def_property(srna, "use_length_max", PROP_BOOLEAN, PROP_NONE);
1753         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MAX_2D_LENGTH);
1754         RNA_def_property_ui_text(prop, "Use Max 2D Length", "Enable the selection of chains by a maximum 2D length");
1755         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1756
1757         prop = RNA_def_property(srna, "length_max", PROP_FLOAT, PROP_NONE);
1758         RNA_def_property_float_sdna(prop, NULL, "max_length");
1759         RNA_def_property_range(prop, 0.0f, 10000.0f);
1760         RNA_def_property_ui_text(prop, "Max 2D Length", "Maximum curvilinear 2D length for the selection of chains");
1761         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1762
1763         prop = RNA_def_property(srna, "use_chain_count", PROP_BOOLEAN, PROP_NONE);
1764         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_CHAIN_COUNT);
1765         RNA_def_property_ui_text(prop, "Use Chain Count", "Enable the selection of first N chains");
1766         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1767
1768         prop = RNA_def_property(srna, "chain_count", PROP_INT, PROP_UNSIGNED);
1769         RNA_def_property_int_sdna(prop, NULL, "chain_count");
1770         RNA_def_property_ui_text(prop, "Chain Count", "Chain count for the selection of first N chains");
1771         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1772
1773         prop = RNA_def_property(srna, "use_split_pattern", PROP_BOOLEAN, PROP_NONE);
1774         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_SPLIT_PATTERN);
1775         RNA_def_property_ui_text(prop, "Use Split Pattern", "Enable chain splitting by dashed line patterns");
1776         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1777
1778         prop = RNA_def_property(srna, "split_dash1", PROP_INT, PROP_UNSIGNED);
1779         RNA_def_property_int_sdna(prop, NULL, "split_dash1");
1780         RNA_def_property_range(prop, 0, USHRT_MAX);
1781         RNA_def_property_ui_text(prop, "Split Dash 1", "Length of the 1st dash for splitting");
1782         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1783
1784         prop = RNA_def_property(srna, "split_gap1", PROP_INT, PROP_UNSIGNED);
1785         RNA_def_property_int_sdna(prop, NULL, "split_gap1");
1786         RNA_def_property_range(prop, 0, USHRT_MAX);
1787         RNA_def_property_ui_text(prop, "Split Gap 1", "Length of the 1st gap for splitting");
1788         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1789
1790         prop = RNA_def_property(srna, "split_dash2", PROP_INT, PROP_UNSIGNED);
1791         RNA_def_property_int_sdna(prop, NULL, "split_dash2");
1792         RNA_def_property_range(prop, 0, USHRT_MAX);
1793         RNA_def_property_ui_text(prop, "Split Dash 2", "Length of the 2nd dash for splitting");
1794         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1795
1796         prop = RNA_def_property(srna, "split_gap2", PROP_INT, PROP_UNSIGNED);
1797         RNA_def_property_int_sdna(prop, NULL, "split_gap2");
1798         RNA_def_property_range(prop, 0, USHRT_MAX);
1799         RNA_def_property_ui_text(prop, "Split Gap 2", "Length of the 2nd gap for splitting");
1800         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1801
1802         prop = RNA_def_property(srna, "split_dash3", PROP_INT, PROP_UNSIGNED);
1803         RNA_def_property_int_sdna(prop, NULL, "split_dash3");
1804         RNA_def_property_range(prop, 0, USHRT_MAX);
1805         RNA_def_property_ui_text(prop, "Split Dash 3", "Length of the 3rd dash for splitting");
1806         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1807
1808         prop = RNA_def_property(srna, "split_gap3", PROP_INT, PROP_UNSIGNED);
1809         RNA_def_property_int_sdna(prop, NULL, "split_gap3");
1810         RNA_def_property_range(prop, 0, USHRT_MAX);
1811         RNA_def_property_ui_text(prop, "Split Gap 3", "Length of the 3rd gap for splitting");
1812         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1813
1814         prop = RNA_def_property(srna, "material_boundary", PROP_BOOLEAN, PROP_NONE);
1815         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MATERIAL_BOUNDARY);
1816         RNA_def_property_ui_text(prop, "Material Boundary", "If true, chains of feature edges are split at material boundaries");
1817         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1818
1819         prop = RNA_def_property(srna, "use_sorting", PROP_BOOLEAN, PROP_NONE);
1820         RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", LS_NO_SORTING);
1821         RNA_def_property_ui_text(prop, "Sorting", "Arrange the stacking order of strokes");
1822         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1823
1824         prop = RNA_def_property(srna, "sort_key", PROP_ENUM, PROP_NONE);
1825         RNA_def_property_enum_sdna(prop, NULL, "sort_key");
1826         RNA_def_property_enum_items(prop, sort_key_items);
1827         RNA_def_property_ui_text(prop, "Sort Key", "Select the sort key to determine the stacking order of chains");
1828         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1829
1830         prop = RNA_def_property(srna, "sort_order", PROP_ENUM, PROP_NONE);
1831         RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
1832         RNA_def_property_enum_items(prop, sort_order_items);
1833         RNA_def_property_ui_text(prop, "Sort Order", "Select the sort order");
1834         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1835
1836         prop = RNA_def_property(srna, "integration_type", PROP_ENUM, PROP_NONE);
1837         RNA_def_property_enum_sdna(prop, NULL, "integration_type");
1838         RNA_def_property_enum_items(prop, integration_type_items);
1839         RNA_def_property_ui_text(prop, "Integration Type", "Select the way how the sort key is computed for each chain");
1840         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1841
1842         prop = RNA_def_property(srna, "use_dashed_line", PROP_BOOLEAN, PROP_NONE);
1843         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_DASHED_LINE);
1844         RNA_def_property_ui_text(prop, "Dashed Line", "Enable or disable dashed line");
1845         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1846
1847         prop = RNA_def_property(srna, "caps", PROP_ENUM, PROP_NONE);
1848         RNA_def_property_enum_bitflag_sdna(prop, NULL, "caps");
1849         RNA_def_property_enum_items(prop, cap_items);
1850         RNA_def_property_ui_text(prop, "Caps", "Select the shape of both ends of strokes");
1851         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1852
1853         prop = RNA_def_property(srna, "dash1", PROP_INT, PROP_UNSIGNED);
1854         RNA_def_property_int_sdna(prop, NULL, "dash1");
1855         RNA_def_property_range(prop, 0, USHRT_MAX);
1856         RNA_def_property_ui_text(prop, "Dash 1", "Length of the 1st dash for dashed lines");
1857         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1858
1859         prop = RNA_def_property(srna, "gap1", PROP_INT, PROP_UNSIGNED);
1860         RNA_def_property_int_sdna(prop, NULL, "gap1");
1861         RNA_def_property_range(prop, 0, USHRT_MAX);
1862         RNA_def_property_ui_text(prop, "Gap 1", "Length of the 1st gap for dashed lines");
1863         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1864
1865         prop = RNA_def_property(srna, "dash2", PROP_INT, PROP_UNSIGNED);
1866         RNA_def_property_int_sdna(prop, NULL, "dash2");
1867         RNA_def_property_range(prop, 0, USHRT_MAX);
1868         RNA_def_property_ui_text(prop, "Dash 2", "Length of the 2nd dash for dashed lines");
1869         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1870
1871         prop = RNA_def_property(srna, "gap2", PROP_INT, PROP_UNSIGNED);
1872         RNA_def_property_int_sdna(prop, NULL, "gap2");
1873         RNA_def_property_range(prop, 0, USHRT_MAX);
1874         RNA_def_property_ui_text(prop, "Gap 2", "Length of the 2nd gap for dashed lines");
1875         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1876
1877         prop = RNA_def_property(srna, "dash3", PROP_INT, PROP_UNSIGNED);
1878         RNA_def_property_int_sdna(prop, NULL, "dash3");
1879         RNA_def_property_range(prop, 0, USHRT_MAX);
1880         RNA_def_property_ui_text(prop, "Dash 3", "Length of the 3rd dash for dashed lines");
1881         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1882
1883         prop = RNA_def_property(srna, "gap3", PROP_INT, PROP_UNSIGNED);
1884         RNA_def_property_int_sdna(prop, NULL, "gap3");
1885         RNA_def_property_range(prop, 0, USHRT_MAX);
1886         RNA_def_property_ui_text(prop, "Gap 3", "Length of the 3rd gap for dashed lines");
1887         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1888
1889         prop = RNA_def_property(srna, "use_texture", PROP_BOOLEAN, PROP_NONE);
1890         RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_TEXTURE);
1891         RNA_def_property_ui_text(prop, "Use Textures", "Enable or disable textured strokes");
1892         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1893
1894         prop = RNA_def_property(srna, "texture_spacing", PROP_FLOAT, PROP_FACTOR);
1895         RNA_def_property_float_sdna(prop, NULL, "texstep");
1896         RNA_def_property_range(prop, 0.01f, 100.0f);
1897         RNA_def_property_ui_text(prop, "Texture spacing", "Spacing for textures along stroke length");
1898         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_update");
1899
1900         /* anim */
1901         rna_def_animdata_common(srna);
1902
1903         /* nodes */
1904         prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
1905         RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
1906         RNA_def_property_ui_text(prop, "Node Tree", "Node tree for node-based shaders");
1907
1908         prop = RNA_def_property(srna, "use_nodes", PROP_BOOLEAN, PROP_NONE);
1909         RNA_def_property_boolean_sdna(prop, NULL, "use_nodes", 1);
1910         RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
1911         RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
1912         RNA_def_property_ui_text(prop, "Use Nodes", "Use shader nodes for the line style");
1913         RNA_def_property_update(prop, NC_LINESTYLE, "rna_LineStyle_use_nodes_update");
1914 }
1915
1916 void RNA_def_linestyle(BlenderRNA *brna)
1917 {
1918         rna_def_linestyle_modifiers(brna);
1919         rna_def_linestyle(brna);
1920         rna_def_linestyle_mtex(brna);
1921 }
1922
1923 #endif