Added two stroke geometry modifiers: Parameterization and Guiding Lines.

This commit is contained in:
Tamito Kajiyama 2011-11-01 09:47:41 +00:00
parent 12f2c06d34
commit ac6bdfb653
7 changed files with 82 additions and 2 deletions

@ -977,6 +977,12 @@ def process(layer_name, lineset_name):
elif m.type == "TIP_REMOVER":
shaders_list.append(TipRemoverShader(
m.tip_length))
elif m.type == "POLYGONIZATION":
shaders_list.append(PolygonalizationShader(
m.error))
elif m.type == "GUIDING_LINES":
shaders_list.append(GuidingLinesShader(
m.offset))
color = linestyle.color
shaders_list.append(ConstantColorShader(color.r, color.g, color.b, linestyle.alpha))
shaders_list.append(ConstantThicknessShader(linestyle.thickness))

@ -544,6 +544,12 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, Panel):
elif modifier.type == "TIP_REMOVER":
box.prop(modifier, "tip_length")
elif modifier.type == "POLYGONIZATION":
box.prop(modifier, "error")
elif modifier.type == "GUIDING_LINES":
box.prop(modifier, "offset")
def draw(self, context):
layout = self.layout

@ -61,7 +61,9 @@ static char *modifier_name[LS_MODIFIER_NUM] = {
"Perlin Noise 2D",
"Backbone Stretcher",
"Tip Remover",
"Calligraphy"};
"Calligraphy",
"Polygonalization",
"Guiding Lines"};
static void default_linestyle_settings(FreestyleLineStyle *linestyle)
{
@ -390,6 +392,12 @@ int FRS_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type)
case LS_MODIFIER_TIP_REMOVER:
size = sizeof(LineStyleGeometryModifier_TipRemover);
break;
case LS_MODIFIER_POLYGONIZATION:
size = sizeof(LineStyleGeometryModifier_Polygonalization);
break;
case LS_MODIFIER_GUIDING_LINES:
size = sizeof(LineStyleGeometryModifier_GuidingLines);
break;
default:
return -1; /* unknown modifier type */
}
@ -432,6 +440,12 @@ int FRS_add_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, int type)
case LS_MODIFIER_TIP_REMOVER:
((LineStyleGeometryModifier_TipRemover *)m)->tip_length = 10.0;
break;
case LS_MODIFIER_POLYGONIZATION:
((LineStyleGeometryModifier_Polygonalization *)m)->error = 10.0;
break;
case LS_MODIFIER_GUIDING_LINES:
((LineStyleGeometryModifier_GuidingLines *)m)->offset = 0.0;
break;
}
add_to_modifier_list(&linestyle->geometry_modifiers, m);
return 0;
@ -456,6 +470,10 @@ void FRS_remove_linestyle_geometry_modifier(FreestyleLineStyle *linestyle, LineS
break;
case LS_MODIFIER_TIP_REMOVER:
break;
case LS_MODIFIER_POLYGONIZATION:
break;
case LS_MODIFIER_GUIDING_LINES:
break;
}
BLI_freelinkN(&linestyle->geometry_modifiers, m);
}

@ -2674,6 +2674,12 @@ static void write_linestyle_geometry_modifiers(WriteData *wd, ListBase *modifier
case LS_MODIFIER_TIP_REMOVER:
struct_name = "LineStyleGeometryModifier_TipRemover";
break;
case LS_MODIFIER_POLYGONIZATION:
struct_name = "LineStyleGeometryModifier_Polygonalization";
break;
case LS_MODIFIER_GUIDING_LINES:
struct_name = "LineStyleGeometryModifier_GuidingLines";
break;
default:
struct_name = "LineStyleGeometryModifier"; // this should not happen
}

@ -62,7 +62,9 @@ typedef struct LineStyleModifier {
#define LS_MODIFIER_BACKBONE_STRETCHER 11
#define LS_MODIFIER_TIP_REMOVER 12
#define LS_MODIFIER_CALLIGRAPHY 13
#define LS_MODIFIER_NUM 14
#define LS_MODIFIER_POLYGONIZATION 14
#define LS_MODIFIER_GUIDING_LINES 15
#define LS_MODIFIER_NUM 16
/* LineStyleModifier::flags */
#define LS_MODIFIER_ENABLED 1
@ -295,6 +297,22 @@ typedef struct LineStyleGeometryModifier_TipRemover {
} LineStyleGeometryModifier_TipRemover;
typedef struct LineStyleGeometryModifier_Polygonalization {
struct LineStyleModifier modifier;
float error;
int pad;
} LineStyleGeometryModifier_Polygonalization;
typedef struct LineStyleGeometryModifier_GuidingLines {
struct LineStyleModifier modifier;
float offset;
int pad;
} LineStyleGeometryModifier_GuidingLines;
/* Calligraphic thickness modifier */
typedef struct LineStyleThicknessModifier_Calligraphy {

@ -298,8 +298,10 @@ extern StructRNA RNA_LineStyleColorModifier_Material;
extern StructRNA RNA_LineStyleGeometryModifier;
extern StructRNA RNA_LineStyleGeometryModifier_BackboneStretcher;
extern StructRNA RNA_LineStyleGeometryModifier_BezierCurve;
extern StructRNA RNA_LineStyleGeometryModifier_GuidingLines;
extern StructRNA RNA_LineStyleGeometryModifier_PerlinNoise1D;
extern StructRNA RNA_LineStyleGeometryModifier_PerlinNoise2D;
extern StructRNA RNA_LineStyleGeometryModifier_Polygonalization;
extern StructRNA RNA_LineStyleGeometryModifier_Sampling;
extern StructRNA RNA_LineStyleGeometryModifier_SinusDisplacement;
extern StructRNA RNA_LineStyleGeometryModifier_SpatialNoise;

@ -67,6 +67,8 @@ EnumPropertyItem linestyle_geometry_modifier_type_items[] ={
{LS_MODIFIER_PERLIN_NOISE_2D, "PERLIN_NOISE_2D", ICON_MODIFIER, "Perlin Noise 2D", ""},
{LS_MODIFIER_BACKBONE_STRETCHER, "BACKBONE_STRETCHER", ICON_MODIFIER, "Backbone Stretcher", ""},
{LS_MODIFIER_TIP_REMOVER, "TIP_REMOVER", ICON_MODIFIER, "Tip Remover", ""},
{LS_MODIFIER_POLYGONIZATION, "POLYGONIZATION", ICON_MODIFIER, "Polygonization", ""},
{LS_MODIFIER_GUIDING_LINES, "GUIDING_LINES", ICON_MODIFIER, "Guiding Lines", ""},
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
@ -148,6 +150,10 @@ static StructRNA *rna_LineStyle_geometry_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleGeometryModifier_BackboneStretcher;
case LS_MODIFIER_TIP_REMOVER:
return &RNA_LineStyleGeometryModifier_TipRemover;
case LS_MODIFIER_POLYGONIZATION:
return &RNA_LineStyleGeometryModifier_Polygonalization;
case LS_MODIFIER_GUIDING_LINES:
return &RNA_LineStyleGeometryModifier_GuidingLines;
default:
return &RNA_LineStyleGeometryModifier;
}
@ -659,6 +665,24 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tip Length", "Length of tips to be removed");
RNA_def_property_update(prop, NC_SCENE, NULL);
srna= RNA_def_struct(brna, "LineStyleGeometryModifier_Polygonalization", "LineStyleGeometryModifier");
RNA_def_struct_ui_text(srna, "Polygonalization", "Modify the stroke geometry so that it looks more \"polygonal\"");
rna_def_geometry_modifier(srna);
prop= RNA_def_property(srna, "error", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "error");
RNA_def_property_ui_text(prop, "Error", "Maximum distance between the original stroke and its polygonal approximation");
RNA_def_property_update(prop, NC_SCENE, NULL);
srna= RNA_def_struct(brna, "LineStyleGeometryModifier_GuidingLines", "LineStyleGeometryModifier");
RNA_def_struct_ui_text(srna, "Guiding Lines", "Modify the stroke geometry so that it corresponds to its main direction line");
rna_def_geometry_modifier(srna);
prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Offset", "Displacement that is applied to the main direction line along its normal");
RNA_def_property_update(prop, NC_SCENE, NULL);
}
static void rna_def_linestyle(BlenderRNA *brna)