Freestyle: New options for sorting to arrange the stacking order of lines.
[blender-staging.git] / source / blender / makesrna / intern / rna_linestyle.c
index 140a2db597e15ff1739697f12af4d4a8e34127f9..e97f3c2b4188bb8643912ded7da64c0a918cfd0c 100644 (file)
@@ -179,22 +179,34 @@ static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr)
 
 static char *rna_LineStyle_color_modifier_path(PointerRNA *ptr)
 {
-       return BLI_sprintfN("color_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name);
+       LineStyleModifier *m = (LineStyleModifier *)ptr->data;
+       char name_esc[sizeof(m->name) * 2];
+       BLI_strescape(name_esc, m->name, sizeof(name_esc));
+       return BLI_sprintfN("color_modifiers[\"%s\"]", name_esc);
 }
 
 static char *rna_LineStyle_alpha_modifier_path(PointerRNA *ptr)
 {
-       return BLI_sprintfN("alpha_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name);
+       LineStyleModifier *m = (LineStyleModifier *)ptr->data;
+       char name_esc[sizeof(m->name) * 2];
+       BLI_strescape(name_esc, m->name, sizeof(name_esc));
+       return BLI_sprintfN("alpha_modifiers[\"%s\"]", name_esc);
 }
 
 static char *rna_LineStyle_thickness_modifier_path(PointerRNA *ptr)
 {
-       return BLI_sprintfN("thickness_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name);
+       LineStyleModifier *m = (LineStyleModifier *)ptr->data;
+       char name_esc[sizeof(m->name) * 2];
+       BLI_strescape(name_esc, m->name, sizeof(name_esc));
+       return BLI_sprintfN("thickness_modifiers[\"%s\"]", name_esc);
 }
 
 static char *rna_LineStyle_geometry_modifier_path(PointerRNA *ptr)
 {
-       return BLI_sprintfN("geometry_modifiers[\"%s\"]", ((LineStyleModifier *)ptr->data)->name);
+       LineStyleModifier *m = (LineStyleModifier *)ptr->data;
+       char name_esc[sizeof(m->name) * 2];
+       BLI_strescape(name_esc, m->name, sizeof(name_esc));
+       return BLI_sprintfN("geometry_modifiers[\"%s\"]", name_esc);
 }
 
 static void rna_LineStyleColorModifier_name_set(PointerRNA *ptr, const char *value)
@@ -242,7 +254,7 @@ static void rna_LineStyleGeometryModifier_name_set(PointerRNA *ptr, const char *
 #include "BLI_math.h"
 
 static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modifier_type_items,
-                                         char *set_name_func, int blend, int color)
+                                         const char *set_name_func, const bool blend, const bool color)
 {
        PropertyRNA *prop;
 
@@ -253,7 +265,7 @@ static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modi
                {LS_VALUE_SUB, "SUBTRACT", 0, "Subtract", ""},
                {LS_VALUE_MULT, "MULTIPLY", 0, "Multiply", ""},
                {LS_VALUE_DIV, "DIVIDE", 0, "Divide", ""},
-               {LS_VALUE_DIFF, "DIFFERENCE", 0, "Divide", ""},
+               {LS_VALUE_DIFF, "DIFFERENCE", 0, "Difference", ""},
                {LS_VALUE_MIN, "MININUM", 0, "Minimum", ""}, 
                {LS_VALUE_MAX, "MAXIMUM", 0, "Maximum", ""}, 
                {0, NULL, 0, NULL, NULL}
@@ -298,25 +310,25 @@ static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modi
 static void rna_def_color_modifier(StructRNA *srna)
 {
        rna_def_modifier_type_common(srna, linestyle_color_modifier_type_items,
-                                    "rna_LineStyleColorModifier_name_set", TRUE, TRUE);
+                                    "rna_LineStyleColorModifier_name_set", true, true);
 }
 
 static void rna_def_alpha_modifier(StructRNA *srna)
 {
        rna_def_modifier_type_common(srna, linestyle_alpha_modifier_type_items,
-                                    "rna_LineStyleAlphaModifier_name_set", TRUE, FALSE);
+                                    "rna_LineStyleAlphaModifier_name_set", true, false);
 }
 
 static void rna_def_thickness_modifier(StructRNA *srna)
 {
        rna_def_modifier_type_common(srna, linestyle_thickness_modifier_type_items,
-                                    "rna_LineStyleThicknessModifier_name_set", TRUE, FALSE);
+                                    "rna_LineStyleThicknessModifier_name_set", true, false);
 }
 
 static void rna_def_geometry_modifier(StructRNA *srna)
 {
        rna_def_modifier_type_common(srna, linestyle_geometry_modifier_type_items,
-                                    "rna_LineStyleGeometryModifier_name_set", FALSE, FALSE);
+                                    "rna_LineStyleGeometryModifier_name_set", false, false);
 }
 
 static void rna_def_modifier_color_ramp_common(StructRNA *srna, int range)
@@ -330,19 +342,19 @@ static void rna_def_modifier_color_ramp_common(StructRNA *srna, int range)
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
        if (range) {
-               prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_NONE);
+               prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_DISTANCE);
                RNA_def_property_float_sdna(prop, NULL, "range_min");
                RNA_def_property_ui_text(prop, "Range Min", "Lower bound of the input range the mapping is applied");
                RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-               prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_NONE);
+               prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_DISTANCE);
                RNA_def_property_float_sdna(prop, NULL, "range_max");
                RNA_def_property_ui_text(prop, "Range Max", "Upper bound of the input range the mapping is applied");
                RNA_def_property_update(prop, NC_LINESTYLE, NULL);
        }
 }
 
-static void rna_def_modifier_curve_common(StructRNA *srna, int range, int value)
+static void rna_def_modifier_curve_common(StructRNA *srna, bool range, bool value)
 {
        PropertyRNA *prop;
 
@@ -370,12 +382,12 @@ static void rna_def_modifier_curve_common(StructRNA *srna, int range, int value)
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
        if (range) {
-               prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_NONE);
+               prop = RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_DISTANCE);
                RNA_def_property_float_sdna(prop, NULL, "range_min");
                RNA_def_property_ui_text(prop, "Range Min", "Lower bound of the input range the mapping is applied");
                RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-               prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_NONE);
+               prop = RNA_def_property(srna, "range_max", PROP_FLOAT, PROP_DISTANCE);
                RNA_def_property_float_sdna(prop, NULL, "range_max");
                RNA_def_property_ui_text(prop, "Range Max", "Upper bound of the input range the mapping is applied");
                RNA_def_property_update(prop, NC_LINESTYLE, NULL);
@@ -412,7 +424,7 @@ static void rna_def_modifier_material_common(StructRNA *srna)
                {0, NULL, 0, NULL, NULL}
        };
 
-       prop = RNA_def_property(srna, "material_attr", PROP_ENUM, PROP_NONE);
+       prop = RNA_def_property(srna, "material_attribute", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "mat_attr");
        RNA_def_property_enum_items(prop, mat_attr_items);
        RNA_def_property_ui_text(prop, "Material Attribute", "Specify which material attribute is used");
@@ -455,17 +467,17 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        srna = RNA_def_struct(brna, "LineStyleColorModifier_AlongStroke", "LineStyleColorModifier");
        RNA_def_struct_ui_text(srna, "Along Stroke", "Change line color along stroke");
        rna_def_color_modifier(srna);
-       rna_def_modifier_color_ramp_common(srna, FALSE);
+       rna_def_modifier_color_ramp_common(srna, false);
 
        srna = RNA_def_struct(brna, "LineStyleColorModifier_DistanceFromCamera", "LineStyleColorModifier");
        RNA_def_struct_ui_text(srna, "Distance from Camera", "Change line color based on the distance from the camera");
        rna_def_color_modifier(srna);
-       rna_def_modifier_color_ramp_common(srna, TRUE);
+       rna_def_modifier_color_ramp_common(srna, true);
 
        srna = RNA_def_struct(brna, "LineStyleColorModifier_DistanceFromObject", "LineStyleColorModifier");
        RNA_def_struct_ui_text(srna, "Distance from Object", "Change line color based on the distance from an object");
        rna_def_color_modifier(srna);
-       rna_def_modifier_color_ramp_common(srna, TRUE);
+       rna_def_modifier_color_ramp_common(srna, true);
 
        prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "target");
@@ -478,7 +490,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_struct_ui_text(srna, "Material", "Change line color based on a material attribute");
        rna_def_color_modifier(srna);
        rna_def_modifier_material_common(srna);
-       rna_def_modifier_color_ramp_common(srna, FALSE);
+       rna_def_modifier_color_ramp_common(srna, false);
 
        prop = RNA_def_property(srna, "use_ramp", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_USE_RAMP);
@@ -496,19 +508,19 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        srna = RNA_def_struct(brna, "LineStyleAlphaModifier_AlongStroke", "LineStyleAlphaModifier");
        RNA_def_struct_ui_text(srna, "Along Stroke", "Change alpha transparency along stroke");
        rna_def_alpha_modifier(srna);
-       rna_def_modifier_curve_common(srna, FALSE, FALSE);
+       rna_def_modifier_curve_common(srna, false, false);
 
        srna = RNA_def_struct(brna, "LineStyleAlphaModifier_DistanceFromCamera", "LineStyleAlphaModifier");
        RNA_def_struct_ui_text(srna, "Distance from Camera",
                               "Change alpha transparency based on the distance from the camera");
        rna_def_alpha_modifier(srna);
-       rna_def_modifier_curve_common(srna, TRUE, FALSE);
+       rna_def_modifier_curve_common(srna, true, false);
 
-       srna= RNA_def_struct(brna, "LineStyleAlphaModifier_DistanceFromObject", "LineStyleAlphaModifier");
+       srna = RNA_def_struct(brna, "LineStyleAlphaModifier_DistanceFromObject", "LineStyleAlphaModifier");
        RNA_def_struct_ui_text(srna, "Distance from Object",
                               "Change alpha transparency based on the distance from an object");
        rna_def_alpha_modifier(srna);
-       rna_def_modifier_curve_common(srna, TRUE, FALSE);
+       rna_def_modifier_curve_common(srna, true, false);
 
        prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "target");
@@ -521,7 +533,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_struct_ui_text(srna, "Material", "Change alpha transparency based on a material attribute");
        rna_def_alpha_modifier(srna);
        rna_def_modifier_material_common(srna);
-       rna_def_modifier_curve_common(srna, FALSE, FALSE);
+       rna_def_modifier_curve_common(srna, false, false);
 
        /* line thickness modifiers */
 
@@ -534,17 +546,17 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        srna = RNA_def_struct(brna, "LineStyleThicknessModifier_AlongStroke", "LineStyleThicknessModifier");
        RNA_def_struct_ui_text(srna, "Along Stroke", "Change line thickness along stroke");
        rna_def_thickness_modifier(srna);
-       rna_def_modifier_curve_common(srna, FALSE, TRUE);
+       rna_def_modifier_curve_common(srna, false, true);
 
        srna = RNA_def_struct(brna, "LineStyleThicknessModifier_DistanceFromCamera", "LineStyleThicknessModifier");
        RNA_def_struct_ui_text(srna, "Distance from Camera", "Change line thickness based on the distance from the camera");
        rna_def_thickness_modifier(srna);
-       rna_def_modifier_curve_common(srna, TRUE, TRUE);
+       rna_def_modifier_curve_common(srna, true, true);
 
        srna = RNA_def_struct(brna, "LineStyleThicknessModifier_DistanceFromObject", "LineStyleThicknessModifier");
        RNA_def_struct_ui_text(srna, "Distance from Object", "Change line thickness based on the distance from an object");
        rna_def_thickness_modifier(srna);
-       rna_def_modifier_curve_common(srna, TRUE, TRUE);
+       rna_def_modifier_curve_common(srna, true, true);
 
        prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "target");
@@ -557,7 +569,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_struct_ui_text(srna, "Material", "Change line thickness based on a material attribute");
        rna_def_thickness_modifier(srna);
        rna_def_modifier_material_common(srna);
-       rna_def_modifier_curve_common(srna, FALSE, TRUE);
+       rna_def_modifier_curve_common(srna, false, true);
 
        srna = RNA_def_struct(brna, "LineStyleThicknessModifier_Calligraphy", "LineStyleThicknessModifier");
        RNA_def_struct_ui_text(srna, "Calligraphy",
@@ -569,14 +581,14 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Orientation", "Angle of the main direction");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "min_thickness", PROP_FLOAT, PROP_NONE);
+       prop = RNA_def_property(srna, "thickness_min", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "min_thickness");
        RNA_def_property_range(prop, 0.0f, 10000.0f);
        RNA_def_property_ui_text(prop, "Min Thickness",
                                 "Minimum thickness in the direction perpendicular to the main direction");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "max_thickness", PROP_FLOAT, PROP_NONE);
+       prop = RNA_def_property(srna, "thickness_max", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "max_thickness");
        RNA_def_property_range(prop, 0.0f, 10000.0f);
        RNA_def_property_ui_text(prop, "Max Thickness", "Maximum thickness in the main direction");
@@ -597,6 +609,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
 
        prop = RNA_def_property(srna, "sampling", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "sampling");
+       RNA_def_property_range(prop, 0.0f, 10000.0f);
        RNA_def_property_ui_text(prop, "Sampling", "New sampling value to be used for subsequent modifiers");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
@@ -610,7 +623,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_property_float_sdna(prop, NULL, "error");
        RNA_def_property_ui_text(prop, "Error",
                                 "Maximum distance allowed between the new Bezier curve and the "
-                                "original backbone geometry)");
+                                "original backbone geometry");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
        srna = RNA_def_struct(brna, "LineStyleGeometryModifier_SinusDisplacement", "LineStyleGeometryModifier");
@@ -656,7 +669,7 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Smooth", "If true, the spatial noise is smooth");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "pure_random", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_pure_random", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_SPATIAL_NOISE_PURERANDOM);
        RNA_def_property_ui_text(prop, "Pure Random", "If true, the spatial noise does not show any coherence");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
@@ -835,11 +848,13 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
 
        prop = RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "scale_x");
+       RNA_def_property_flag(prop, PROP_PROPORTIONAL);
        RNA_def_property_ui_text(prop, "Scale X", "Scaling factor that is applied along the X axis");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
        prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "scale_y");
+       RNA_def_property_flag(prop, PROP_PROPORTIONAL);
        RNA_def_property_ui_text(prop, "Scale Y", "Scaling factor that is applied along the Y axis");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
@@ -877,7 +892,9 @@ static void rna_def_linestyle(BlenderRNA *brna)
                {LS_PANEL_ALPHA, "ALPHA", 0, "Alpha", "Show the panel for alpha transparency options"},
                {LS_PANEL_THICKNESS, "THICKNESS", 0, "Thickness", "Show the panel for line thickness options"},
                {LS_PANEL_GEOMETRY, "GEOMETRY", 0, "Geometry", "Show the panel for stroke geometry options"},
+#if 0 /* hidden for now */
                {LS_PANEL_MISC, "MISC", 0, "Misc", "Show the panel for miscellaneous options"},
+#endif
                {0, NULL, 0, NULL, NULL}
        };
        static EnumPropertyItem chaining_items[] = {
@@ -895,13 +912,31 @@ static void rna_def_linestyle(BlenderRNA *brna)
                {LS_THICKNESS_CENTER, "CENTER", 0, "Center", "Stroke is centered along stroke geometry"},
                {LS_THICKNESS_INSIDE, "INSIDE", 0, "Inside", "Stroke is drawn inside stroke geometry"},
                {LS_THICKNESS_OUTSIDE, "OUTSIDE", 0, "Outside", "Stroke is drawn outside stroke geometry"},
-               {LS_THICKNESS_RELATIVE, "RELATIVE", 0, "Relative", "Stroke thinkness is split by a user-defined ratio"},
+               {LS_THICKNESS_RELATIVE, "RELATIVE", 0, "Relative", "Stroke thickness is split by a user-defined ratio"},
+               {0, NULL, 0, NULL, NULL}
+       };
+       static EnumPropertyItem sort_key_items[] = {
+               {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)"},
+               {LS_SORT_KEY_2D_LENGTH, "2D_LENGTH", 0, "2D Length", "Sort by curvilinear 2D length (longer lines lie on top of shorter lines)"},
+               {0, NULL, 0, NULL, NULL}
+       };
+       static EnumPropertyItem sort_order_items[] = {
+               {0, "DEFAULT", 0, "Default", "Default order of the sort key"},
+               {LS_REVERSE_ORDER, "REVERSE", 0, "Reverse", "Reverse order"},
+               {0, NULL, 0, NULL, NULL}
+       };
+       static EnumPropertyItem integration_type_items[] = {
+               {LS_INTEGRATION_MEAN, "MEAN", 0, "Mean", "The value computed for the chain is the mean of the values obtained for chain vertices"},
+               {LS_INTEGRATION_MIN, "MIN", 0, "Min", "The value computed for the chain is the minimum of the values obtained for chain vertices"},
+               {LS_INTEGRATION_MAX, "MAX", 0, "Max", "The value computed for the chain is the maximum of the values obtained for chain vertices"},
+               {LS_INTEGRATION_FIRST, "FIRST", 0, "First", "The value computed for the chain is the value obtained for the first chain vertex"},
+               {LS_INTEGRATION_LAST, "LAST", 0, "Last", "The value computed for the chain is the value obtained for the last chain vertex"},
                {0, NULL, 0, NULL, NULL}
        };
 
        srna = RNA_def_struct(brna, "FreestyleLineStyle", "ID");
        RNA_def_struct_ui_text(srna, "Freestyle Line Style", "Freestyle line style, reusable by multiple line sets");
-       RNA_def_struct_ui_icon(srna, ICON_BRUSH_DATA); /* FIXME: use a proper icon */
+       RNA_def_struct_ui_icon(srna, ICON_LINE_DATA);
 
        prop = RNA_def_property(srna, "panel", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_bitflag_sdna(prop, NULL, "panel");
@@ -950,7 +985,7 @@ static void rna_def_linestyle(BlenderRNA *brna)
        prop = RNA_def_property(srna, "alpha_modifiers", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "alpha_modifiers", NULL);
        RNA_def_property_struct_type(prop, "LineStyleAlphaModifier");
-       RNA_def_property_ui_text(prop, "Alpha Modifiers", "List of alpha trancparency modifiers");
+       RNA_def_property_ui_text(prop, "Alpha Modifiers", "List of alpha transparency modifiers");
 
        prop = RNA_def_property(srna, "thickness_modifiers", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "thickness_modifiers", NULL);
@@ -979,7 +1014,7 @@ static void rna_def_linestyle(BlenderRNA *brna)
        RNA_def_property_struct_type(prop, "LineStyleGeometryModifier");
        RNA_def_property_ui_text(prop, "Geometry Modifiers", "List of stroke geometry modifiers");
 
-       prop = RNA_def_property(srna, "same_object", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_same_object", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_SAME_OBJECT);
        RNA_def_property_ui_text(prop, "Same Object", "If true, only feature edges of the same object are joined");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
@@ -995,47 +1030,47 @@ static void rna_def_linestyle(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Split Length", "Curvilinear 2D length for chain splitting");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "use_min_angle", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_angle_min", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MIN_2D_ANGLE);
        RNA_def_property_ui_text(prop, "Use Min 2D Angle",
                                 "Split chains at points with angles smaller than the minimum 2D angle");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "min_angle", PROP_FLOAT, PROP_ANGLE);
+       prop = RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_ANGLE);
        RNA_def_property_float_sdna(prop, NULL, "min_angle");
        RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
        RNA_def_property_ui_text(prop, "Min 2D Angle", "Minimum 2D angle for splitting chains");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "use_max_angle", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_angle_max", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MAX_2D_ANGLE);
        RNA_def_property_ui_text(prop, "Use Max 2D Angle",
                                 "Split chains at points with angles larger than the maximum 2D angle");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "max_angle", PROP_FLOAT, PROP_ANGLE);
+       prop = RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_ANGLE);
        RNA_def_property_float_sdna(prop, NULL, "max_angle");
        RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
        RNA_def_property_ui_text(prop, "Max 2D Angle", "Maximum 2D angle for splitting chains");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "use_min_length", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_length_min", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MIN_2D_LENGTH);
        RNA_def_property_ui_text(prop, "Use Min 2D Length", "Enable the selection of chains by a minimum 2D length");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "min_length", PROP_FLOAT, PROP_NONE);
+       prop = RNA_def_property(srna, "length_min", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "min_length");
        RNA_def_property_range(prop, 0.0f, 10000.0f);
        RNA_def_property_ui_text(prop, "Min 2D Length", "Minimum curvilinear 2D length for the selection of chains");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "use_max_length", PROP_BOOLEAN, PROP_NONE);
+       prop = RNA_def_property(srna, "use_length_max", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_MAX_2D_LENGTH);
        RNA_def_property_ui_text(prop, "Use Max 2D Length", "Enable the selection of chains by a maximum 2D length");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
-       prop = RNA_def_property(srna, "max_length", PROP_FLOAT, PROP_NONE);
+       prop = RNA_def_property(srna, "length_max", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "max_length");
        RNA_def_property_range(prop, 0.0f, 10000.0f);
        RNA_def_property_ui_text(prop, "Max 2D Length", "Maximum curvilinear 2D length for the selection of chains");
@@ -1087,6 +1122,29 @@ static void rna_def_linestyle(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Material Boundary", "If true, chains of feature edges are split at material boundaries");
        RNA_def_property_update(prop, NC_LINESTYLE, NULL);
 
+       prop = RNA_def_property(srna, "use_sorting", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", LS_NO_SORTING);
+       RNA_def_property_ui_text(prop, "Sorting", "Arrange the stacking order of strokes");
+       RNA_def_property_update(prop, NC_LINESTYLE, NULL);
+
+       prop = RNA_def_property(srna, "sort_key", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "sort_key");
+       RNA_def_property_enum_items(prop, sort_key_items);
+       RNA_def_property_ui_text(prop, "Sort Key", "Select the sort key to determine the stacking order of chains");
+       RNA_def_property_update(prop, NC_LINESTYLE, NULL);
+
+       prop = RNA_def_property(srna, "sort_order", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
+       RNA_def_property_enum_items(prop, sort_order_items);
+       RNA_def_property_ui_text(prop, "Sort Order", "Select the sort order");
+       RNA_def_property_update(prop, NC_LINESTYLE, NULL);
+
+       prop = RNA_def_property(srna, "integration_type", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "integration_type");
+       RNA_def_property_enum_items(prop, integration_type_items);
+       RNA_def_property_ui_text(prop, "Integration Type", "Select the way how the sort key is computed for each chain");
+       RNA_def_property_update(prop, NC_LINESTYLE, NULL);
+
        prop = RNA_def_property(srna, "use_dashed_line", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", LS_DASHED_LINE);
        RNA_def_property_ui_text(prop, "Dashed Line", "Enable or disable dashed line");