Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/freestyle/style_modules/parameter_editor.py121
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py123
-rw-r--r--source/blender/blenkernel/intern/linestyle.c45
-rw-r--r--source/blender/blenloader/intern/readfile.c50
-rw-r--r--source/blender/blenloader/intern/writefile.c18
-rw-r--r--source/blender/makesdna/DNA_linestyle_types.h58
-rw-r--r--source/blender/makesrna/RNA_access.h3
-rw-r--r--source/blender/makesrna/intern/rna_linestyle.c155
8 files changed, 463 insertions, 110 deletions
diff --git a/release/scripts/freestyle/style_modules/parameter_editor.py b/release/scripts/freestyle/style_modules/parameter_editor.py
index d5f9fc4a251..2a9ce6c77c4 100644
--- a/release/scripts/freestyle/style_modules/parameter_editor.py
+++ b/release/scripts/freestyle/style_modules/parameter_editor.py
@@ -278,6 +278,115 @@ class ThicknessDistanceFromObjectShader(CurveMappingModifier):
c = self.blend_curve(a, b)
attr.setThickness(c/2, c/2)
+# Material modifiers
+
+def iter_material_color(stroke, material_attr):
+ func = MaterialF0D()
+ it = stroke.strokeVerticesBegin()
+ while not it.isEnd():
+ material = func(it.castToInterface0DIterator())
+ if material_attr == "DIFF":
+ color = (material.diffuseR(),
+ material.diffuseG(),
+ material.diffuseB())
+ elif material_attr == "SPEC":
+ color = (material.specularR(),
+ material.specularG(),
+ material.specularB())
+ else:
+ raise ValueError("unexpected material attribute: " + material_attr)
+ yield it, color
+ it.increment()
+
+def iter_material_value(stroke, material_attr):
+ func = MaterialF0D()
+ it = stroke.strokeVerticesBegin()
+ while not it.isEnd():
+ material = func(it.castToInterface0DIterator())
+ if material_attr == "DIFF":
+ r = material.diffuseR()
+ g = material.diffuseG()
+ b = material.diffuseB()
+ t = 0.35 * r + 0.45 * r + 0.2 * b
+ elif material_attr == "DIFF_R":
+ t = material.diffuseR()
+ elif material_attr == "DIFF_G":
+ t = material.diffuseG()
+ elif material_attr == "DIFF_B":
+ t = material.diffuseB()
+ elif material_attr == "SPEC":
+ r = material.specularR()
+ g = material.specularG()
+ b = material.specularB()
+ t = 0.35 * r + 0.45 * r + 0.2 * b
+ elif material_attr == "SPEC_R":
+ t = material.specularR()
+ elif material_attr == "SPEC_G":
+ t = material.specularG()
+ elif material_attr == "SPEC_B":
+ t = material.specularB()
+ elif material_attr == "SPEC_HARDNESS":
+ t = material.shininess()
+ elif material_attr == "ALPHA":
+ t = material.diffuseA()
+ else:
+ raise ValueError("unexpected material attribute: " + material_attr)
+ yield it, t
+ it.increment()
+
+class ColorMaterialShader(ColorRampModifier):
+ def __init__(self, blend, influence, ramp, material_attr, use_ramp):
+ ColorRampModifier.__init__(self, blend, influence, ramp)
+ self.__material_attr = material_attr
+ self.__use_ramp = use_ramp
+ def getName(self):
+ return "ColorMaterialShader"
+ def shade(self, stroke):
+ if self.__material_attr in ["DIFF", "SPEC"] and not self.__use_ramp:
+ for it, b in iter_material_color(stroke, self.__material_attr):
+ attr = it.getObject().attribute()
+ a = attr.getColorRGB()
+ c = self.blend_ramp(a, b)
+ attr.setColor(c)
+ else:
+ for it, t in iter_material_value(stroke, self.__material_attr):
+ attr = it.getObject().attribute()
+ a = attr.getColorRGB()
+ b = self.evaluate(t)
+ c = self.blend_ramp(a, b)
+ attr.setColor(c)
+
+class AlphaMaterialShader(CurveMappingModifier):
+ def __init__(self, blend, influence, mapping, invert, curve, material_attr):
+ CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
+ self.__material_attr = material_attr
+ def getName(self):
+ return "AlphaMaterialShader"
+ def shade(self, stroke):
+ for it, t in iter_material_value(stroke, self.__material_attr):
+ attr = it.getObject().attribute()
+ a = attr.getAlpha()
+ b = self.evaluate(t)
+ c = self.blend_curve(a, b)
+ attr.setAlpha(c)
+
+class ThicknessMaterialShader(CurveMappingModifier):
+ def __init__(self, blend, influence, mapping, invert, curve, material_attr, value_min, value_max):
+ CurveMappingModifier.__init__(self, blend, influence, mapping, invert, curve)
+ self.__material_attr = material_attr
+ self.__value_min = value_min
+ self.__value_max = value_max
+ def getName(self):
+ return "ThicknessMaterialShader"
+ def shade(self, stroke):
+ for it, t in iter_material_value(stroke, self.__material_attr):
+ attr = it.getObject().attribute()
+ a = attr.getThicknessRL()
+ a = a[0] + a[1]
+ b = self.__value_min + self.evaluate(t) * (self.__value_max - self.__value_min)
+ c = self.blend_curve(a, b)
+ attr.setThickness(c/2, c/2)
+
# Predicates and helper functions
class QuantitativeInvisibilityRangeUP1D(UnaryPredicate1D):
@@ -660,6 +769,10 @@ def process(layer_name, lineset_name):
shaders_list.append(ColorDistanceFromObjectShader(
m.blend, m.influence, m.color_ramp, m.target,
m.range_min, m.range_max))
+ elif m.type == "MATERIAL":
+ shaders_list.append(ColorMaterialShader(
+ m.blend, m.influence, m.color_ramp, m.material_attr,
+ m.use_ramp))
for m in linestyle.alpha_modifiers:
if not m.use:
continue
@@ -674,6 +787,10 @@ def process(layer_name, lineset_name):
shaders_list.append(AlphaDistanceFromObjectShader(
m.blend, m.influence, m.mapping, m.invert, m.curve, m.target,
m.range_min, m.range_max))
+ elif m.type == "MATERIAL":
+ shaders_list.append(AlphaMaterialShader(
+ m.blend, m.influence, m.mapping, m.invert, m.curve,
+ m.material_attr))
for m in linestyle.thickness_modifiers:
if not m.use:
continue
@@ -689,6 +806,10 @@ def process(layer_name, lineset_name):
shaders_list.append(ThicknessDistanceFromObjectShader(
m.blend, m.influence, m.mapping, m.invert, m.curve, m.target,
m.range_min, m.range_max, m.value_min, m.value_max))
+ elif m.type == "MATERIAL":
+ shaders_list.append(ThicknessMaterialShader(
+ m.blend, m.influence, m.mapping, m.invert, m.curve,
+ m.material_attr, m.value_min, m.value_max))
if linestyle.caps == "ROUND":
shaders_list.append(RoundCapShader())
elif linestyle.caps == "SQUARE":
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 11f9f838d61..4cff04c72b5 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -319,6 +319,35 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
sub.operator("scene.freestyle_modifier_move", icon='TRIA_DOWN', text="").direction = 'DOWN'
row.operator("scene.freestyle_modifier_remove", icon='X', text="")
+ def draw_modifier_common(self, box, modifier):
+ row = box.row()
+ row.prop(modifier, "blend", text="")
+ row.prop(modifier, "influence")
+
+ def draw_modifier_color_ramp_common(self, box, modifier, has_range):
+ box.template_color_ramp(modifier, "color_ramp", expand=True)
+ if has_range:
+ row = box.row(align=True)
+ row.prop(modifier, "range_min")
+ row.prop(modifier, "range_max")
+
+ def draw_modifier_curve_common(self, box, modifier, has_range, has_value):
+ row = box.row()
+ row.prop(modifier, "mapping", text="")
+ sub = row.column()
+ sub.prop(modifier, "invert")
+ if modifier.mapping == "CURVE":
+ sub.enabled = False
+ box.template_curve_mapping(modifier, "curve")
+ if has_range:
+ row = box.row(align=True)
+ row.prop(modifier, "range_min")
+ row.prop(modifier, "range_max")
+ if has_value:
+ row = box.row(align=True)
+ row.prop(modifier, "value_min")
+ row.prop(modifier, "value_max")
+
def draw_color_modifier(self, context, modifier):
layout = self.layout
@@ -326,16 +355,31 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
self.draw_modifier_box_header(col.box(), modifier)
if modifier.expanded:
box = col.box()
- row = box.row()
- row.prop(modifier, "blend", text="")
- row.prop(modifier, "influence")
- if modifier.type == "DISTANCE_FROM_OBJECT":
+ self.draw_modifier_common(box, modifier)
+
+ if modifier.type == "ALONG_STROKE":
+ self.draw_modifier_color_ramp_common(box, modifier, False)
+
+ elif modifier.type == "DISTANCE_FROM_OBJECT":
box.prop(modifier, "target")
- box.template_color_ramp(modifier, "color_ramp", expand=True)
- if modifier.type not in ["ALONG_STROKE"]:
- row = box.row(align=True)
- row.prop(modifier, "range_min")
- row.prop(modifier, "range_max")
+ self.draw_modifier_color_ramp_common(box, modifier, True)
+
+ elif modifier.type == "DISTANCE_FROM_CAMERA":
+ self.draw_modifier_color_ramp_common(box, modifier, True)
+
+ elif modifier.type == "MATERIAL":
+ row = box.row()
+ row.prop(modifier, "material_attr", text="")
+ sub = row.column()
+ sub.prop(modifier, "use_ramp")
+ if modifier.material_attr in ["DIFF", "SPEC"]:
+ sub.enabled = True
+ show_ramp = modifier.use_ramp
+ else:
+ sub.enabled = False
+ show_ramp = True
+ if show_ramp:
+ self.draw_modifier_color_ramp_common(box, modifier, False)
def draw_alpha_modifier(self, context, modifier):
layout = self.layout
@@ -344,22 +388,21 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
self.draw_modifier_box_header(col.box(), modifier)
if modifier.expanded:
box = col.box()
- row = box.row()
- row.prop(modifier, "blend", text="")
- row.prop(modifier, "influence")
- if modifier.type == "DISTANCE_FROM_OBJECT":
+ self.draw_modifier_common(box, modifier)
+
+ if modifier.type == "ALONG_STROKE":
+ self.draw_modifier_curve_common(box, modifier, False, False)
+
+ elif modifier.type == "DISTANCE_FROM_OBJECT":
box.prop(modifier, "target")
- row = box.row()
- row.prop(modifier, "mapping", text="")
- sub = row.column()
- sub.prop(modifier, "invert")
- if modifier.mapping == "CURVE":
- sub.enabled = False
- box.template_curve_mapping(modifier, "curve")
- if modifier.type not in ["ALONG_STROKE"]:
- row = box.row(align=True)
- row.prop(modifier, "range_min")
- row.prop(modifier, "range_max")
+ self.draw_modifier_curve_common(box, modifier, True, False)
+
+ elif modifier.type == "DISTANCE_FROM_CAMERA":
+ self.draw_modifier_curve_common(box, modifier, True, False)
+
+ elif modifier.type == "MATERIAL":
+ box.prop(modifier, "material_attr", text="")
+ self.draw_modifier_curve_common(box, modifier, False, False)
def draw_thickness_modifier(self, context, modifier):
layout = self.layout
@@ -368,25 +411,21 @@ class RENDER_PT_freestyle_linestyle(RenderButtonsPanel, bpy.types.Panel):
self.draw_modifier_box_header(col.box(), modifier)
if modifier.expanded:
box = col.box()
- row = box.row()
- row.prop(modifier, "blend", text="")
- row.prop(modifier, "influence")
- if modifier.type == "DISTANCE_FROM_OBJECT":
+ self.draw_modifier_common(box, modifier)
+
+ if modifier.type == "ALONG_STROKE":
+ self.draw_modifier_curve_common(box, modifier, False, True)
+
+ elif modifier.type == "DISTANCE_FROM_OBJECT":
box.prop(modifier, "target")
- row = box.row()
- row.prop(modifier, "mapping", text="")
- sub = row.column()
- sub.prop(modifier, "invert")
- if modifier.mapping == "CURVE":
- sub.enabled = False
- box.template_curve_mapping(modifier, "curve")
- if modifier.type not in ["ALONG_STROKE"]:
- row = box.row(align=True)
- row.prop(modifier, "range_min")
- row.prop(modifier, "range_max")
- row = box.row(align=True)
- row.prop(modifier, "value_min")
- row.prop(modifier, "value_max")
+ self.draw_modifier_curve_common(box, modifier, True, True)
+
+ elif modifier.type == "DISTANCE_FROM_CAMERA":
+ self.draw_modifier_curve_common(box, modifier, True, True)
+
+ elif modifier.type == "MATERIAL":
+ box.prop(modifier, "material_attr", text="")
+ self.draw_modifier_curve_common(box, modifier, False, True)
def draw(self, context):
layout = self.layout
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index f6f8378cebc..76371af3b8f 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -51,7 +51,8 @@ static char *modifier_name[LS_MODIFIER_NUM] = {
NULL,
"Along Stroke",
"Distance from Camera",
- "Distance from Object"};
+ "Distance from Object",
+ "Material"};
static void default_linestyle_settings(FreestyleLineStyle *linestyle)
{
@@ -120,7 +121,8 @@ int FRS_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, int type)
0,
sizeof(LineStyleColorModifier_AlongStroke),
sizeof(LineStyleColorModifier_DistanceFromCamera),
- sizeof(LineStyleColorModifier_DistanceFromObject)
+ sizeof(LineStyleColorModifier_DistanceFromObject),
+ sizeof(LineStyleColorModifier_Material)
};
LineStyleModifier *m;
@@ -147,6 +149,11 @@ int FRS_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, int type)
((LineStyleColorModifier_DistanceFromObject *)m)->range_min = 0.0f;
((LineStyleColorModifier_DistanceFromObject *)m)->range_max = 10000.0f;
break;
+ case LS_MODIFIER_MATERIAL:
+ ((LineStyleColorModifier_Material *)m)->blend = MA_RAMP_BLEND;
+ ((LineStyleColorModifier_Material *)m)->color_ramp = add_colorband(1);
+ ((LineStyleColorModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_DIFF;
+ break;
default:
return -1; /* unknown modifier type */
}
@@ -167,6 +174,9 @@ void FRS_remove_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyl
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
MEM_freeN(((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp);
break;
+ case LS_MODIFIER_MATERIAL:
+ MEM_freeN(((LineStyleColorModifier_Material *)m)->color_ramp);
+ break;
}
BLI_freelinkN(&linestyle->color_modifiers, m);
}
@@ -177,7 +187,8 @@ int FRS_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, int type)
0,
sizeof(LineStyleAlphaModifier_AlongStroke),
sizeof(LineStyleAlphaModifier_DistanceFromCamera),
- sizeof(LineStyleAlphaModifier_DistanceFromObject)
+ sizeof(LineStyleAlphaModifier_DistanceFromObject),
+ sizeof(LineStyleAlphaModifier_Material)
};
LineStyleModifier *m;
@@ -204,6 +215,11 @@ int FRS_add_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, int type)
((LineStyleAlphaModifier_DistanceFromObject *)m)->range_min = 0.0f;
((LineStyleAlphaModifier_DistanceFromObject *)m)->range_max = 10000.0f;
break;
+ case LS_MODIFIER_MATERIAL:
+ ((LineStyleAlphaModifier_Material *)m)->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ((LineStyleAlphaModifier_Material *)m)->blend = LS_VALUE_BLEND;
+ ((LineStyleAlphaModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_DIFF;
+ break;
default:
return -1; /* unknown modifier type */
}
@@ -224,6 +240,9 @@ void FRS_remove_linestyle_alpha_modifier(FreestyleLineStyle *linestyle, LineStyl
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
curvemapping_free(((LineStyleAlphaModifier_DistanceFromObject *)m)->curve);
break;
+ case LS_MODIFIER_MATERIAL:
+ curvemapping_free(((LineStyleAlphaModifier_Material *)m)->curve);
+ break;
}
BLI_freelinkN(&linestyle->alpha_modifiers, m);
}
@@ -234,7 +253,8 @@ int FRS_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, int type
0,
sizeof(LineStyleThicknessModifier_AlongStroke),
sizeof(LineStyleThicknessModifier_DistanceFromCamera),
- sizeof(LineStyleThicknessModifier_DistanceFromObject)
+ sizeof(LineStyleThicknessModifier_DistanceFromObject),
+ sizeof(LineStyleThicknessModifier_Material)
};
LineStyleModifier *m;
@@ -267,6 +287,13 @@ int FRS_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, int type
((LineStyleThicknessModifier_DistanceFromObject *)m)->value_min = 0.0f;
((LineStyleThicknessModifier_DistanceFromObject *)m)->value_max = 1.0f;
break;
+ case LS_MODIFIER_MATERIAL:
+ ((LineStyleThicknessModifier_Material *)m)->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ((LineStyleThicknessModifier_Material *)m)->blend = LS_VALUE_BLEND;
+ ((LineStyleThicknessModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_DIFF;
+ ((LineStyleThicknessModifier_Material *)m)->value_min = 0.0f;
+ ((LineStyleThicknessModifier_Material *)m)->value_max = 1.0f;
+ break;
default:
return -1; /* unknown modifier type */
}
@@ -287,6 +314,9 @@ void FRS_remove_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, Line
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
curvemapping_free(((LineStyleThicknessModifier_DistanceFromObject *)m)->curve);
break;
+ case LS_MODIFIER_MATERIAL:
+ curvemapping_free(((LineStyleThicknessModifier_Material *)m)->curve);
+ break;
}
BLI_freelinkN(&linestyle->thickness_modifiers, m);
}
@@ -333,6 +363,9 @@ void FRS_list_modifier_color_ramps(FreestyleLineStyle *linestyle, ListBase *list
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
color_ramp = ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp;
break;
+ case LS_MODIFIER_MATERIAL:
+ color_ramp = ((LineStyleColorModifier_Material *)m)->color_ramp;
+ break;
default:
continue;
}
@@ -360,6 +393,10 @@ char *FRS_path_from_ID_to_color_ramp(FreestyleLineStyle *linestyle, ColorBand *c
if (color_ramp == ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp)
goto found;
break;
+ case LS_MODIFIER_MATERIAL:
+ if (color_ramp == ((LineStyleColorModifier_Material *)m)->color_ramp)
+ goto found;
+ break;
}
}
printf("FRS_path_from_ID_to_color_ramp: No color ramps correspond to the given pointer.\n");
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index e40b9312ba2..cbfcfe441f9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5662,21 +5662,33 @@ static void lib_link_linestyle(FileData *fd, Main *main)
if (linestyle->id.properties) IDP_LibLinkProperty(linestyle->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
if (linestyle->adt) lib_link_animdata(fd, &linestyle->id, linestyle->adt);
for (m = linestyle->color_modifiers.first; m; m = m->next) {
- if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
- LineStyleColorModifier_DistanceFromObject *cm = (LineStyleColorModifier_DistanceFromObject *)m;
- cm->target = newlibadr(fd, linestyle->id.lib, cm->target);
+ switch (m->type) {
+ case LS_MODIFIER_DISTANCE_FROM_OBJECT:
+ {
+ LineStyleColorModifier_DistanceFromObject *cm = (LineStyleColorModifier_DistanceFromObject *)m;
+ cm->target = newlibadr(fd, linestyle->id.lib, cm->target);
+ }
+ break;
}
}
for (m = linestyle->alpha_modifiers.first; m; m = m->next){
- if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
- LineStyleAlphaModifier_DistanceFromObject *am = (LineStyleAlphaModifier_DistanceFromObject *)m;
- am->target = newlibadr(fd, linestyle->id.lib, am->target);
+ switch (m->type) {
+ case LS_MODIFIER_DISTANCE_FROM_OBJECT:
+ {
+ LineStyleAlphaModifier_DistanceFromObject *am = (LineStyleAlphaModifier_DistanceFromObject *)m;
+ am->target = newlibadr(fd, linestyle->id.lib, am->target);
+ }
+ break;
}
}
for (m = linestyle->thickness_modifiers.first; m; m = m->next){
- if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
- LineStyleThicknessModifier_DistanceFromObject *tm = (LineStyleThicknessModifier_DistanceFromObject *)m;
- tm->target = newlibadr(fd, linestyle->id.lib, tm->target);
+ switch (m->type) {
+ case LS_MODIFIER_DISTANCE_FROM_OBJECT:
+ {
+ LineStyleThicknessModifier_DistanceFromObject *tm = (LineStyleThicknessModifier_DistanceFromObject *)m;
+ tm->target = newlibadr(fd, linestyle->id.lib, tm->target);
+ }
+ break;
}
}
}
@@ -5705,6 +5717,12 @@ static void direct_link_linestyle_color_modifier(FileData *fd, LineStyleModifier
m->color_ramp = newdataadr(fd, m->color_ramp);
}
break;
+ case LS_MODIFIER_MATERIAL:
+ {
+ LineStyleColorModifier_Material *m = (LineStyleColorModifier_Material *)modifier;
+ m->color_ramp = newdataadr(fd, m->color_ramp);
+ }
+ break;
}
}
@@ -5732,6 +5750,13 @@ static void direct_link_linestyle_alpha_modifier(FileData *fd, LineStyleModifier
direct_link_curvemapping(fd, m->curve);
}
break;
+ case LS_MODIFIER_MATERIAL:
+ {
+ LineStyleAlphaModifier_Material *m = (LineStyleAlphaModifier_Material *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
}
}
@@ -5759,6 +5784,13 @@ static void direct_link_linestyle_thickness_modifier(FileData *fd, LineStyleModi
direct_link_curvemapping(fd, m->curve);
}
break;
+ case LS_MODIFIER_MATERIAL:
+ {
+ LineStyleThicknessModifier_Material *m = (LineStyleThicknessModifier_Material *)modifier;
+ m->curve = newdataadr(fd, m->curve);
+ direct_link_curvemapping(fd, m->curve);
+ }
+ break;
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 793eecf2574..4bb350914bc 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2450,6 +2450,9 @@ static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
struct_name = "LineStyleColorModifier_DistanceFromObject";
break;
+ case LS_MODIFIER_MATERIAL:
+ struct_name = "LineStyleColorModifier_Material";
+ break;
default:
struct_name = "LineStyleColorModifier"; // this should not happen
}
@@ -2466,6 +2469,9 @@ static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp);
break;
+ case LS_MODIFIER_MATERIAL:
+ writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Material *)m)->color_ramp);
+ break;
}
}
}
@@ -2486,6 +2492,9 @@ static void write_linestyle_alpha_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
struct_name = "LineStyleAlphaModifier_DistanceFromObject";
break;
+ case LS_MODIFIER_MATERIAL:
+ struct_name = "LineStyleAlphaModifier_Material";
+ break;
default:
struct_name = "LineStyleAlphaModifier"; // this should not happen
}
@@ -2502,6 +2511,9 @@ static void write_linestyle_alpha_modifiers(WriteData *wd, ListBase *modifiers)
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
write_curvemapping(wd, ((LineStyleAlphaModifier_DistanceFromObject *)m)->curve);
break;
+ case LS_MODIFIER_MATERIAL:
+ write_curvemapping(wd, ((LineStyleAlphaModifier_Material *)m)->curve);
+ break;
}
}
}
@@ -2522,6 +2534,9 @@ static void write_linestyle_thickness_modifiers(WriteData *wd, ListBase *modifie
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
struct_name = "LineStyleThicknessModifier_DistanceFromObject";
break;
+ case LS_MODIFIER_MATERIAL:
+ struct_name = "LineStyleThicknessModifier_Material";
+ break;
default:
struct_name = "LineStyleThicknessModifier"; // this should not happen
}
@@ -2538,6 +2553,9 @@ static void write_linestyle_thickness_modifiers(WriteData *wd, ListBase *modifie
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
write_curvemapping(wd, ((LineStyleThicknessModifier_DistanceFromObject *)m)->curve);
break;
+ case LS_MODIFIER_MATERIAL:
+ write_curvemapping(wd, ((LineStyleThicknessModifier_Material *)m)->curve);
+ break;
}
}
}
diff --git a/source/blender/makesdna/DNA_linestyle_types.h b/source/blender/makesdna/DNA_linestyle_types.h
index 88e44294ed4..75662b9cd10 100644
--- a/source/blender/makesdna/DNA_linestyle_types.h
+++ b/source/blender/makesdna/DNA_linestyle_types.h
@@ -47,16 +47,20 @@ typedef struct LineStyleModifier {
int pad;
} LineStyleModifier;
-/* LineStyleColorModifier::type */
+/* LineStyleModifier::type */
#define LS_MODIFIER_ALONG_STROKE 1
#define LS_MODIFIER_DISTANCE_FROM_CAMERA 2
#define LS_MODIFIER_DISTANCE_FROM_OBJECT 3
-#define LS_MODIFIER_NUM 4
+#define LS_MODIFIER_MATERIAL 4
+#define LS_MODIFIER_NUM 5
-/* LineStyleColorModifier::flags */
+/* LineStyleModifier::flags */
#define LS_MODIFIER_ENABLED 1
#define LS_MODIFIER_EXPANDED 2
+/* flags (for color) */
+#define LS_MODIFIER_USE_RAMP 1
+
/* flags (for alpha & thickness) */
#define LS_MODIFIER_USE_CURVE 1
#define LS_MODIFIER_INVERT 2
@@ -170,6 +174,54 @@ typedef struct LineStyleThicknessModifier_DistanceFromObject {
} LineStyleThicknessModifier_DistanceFromObject;
+/* Material modifiers */
+
+/* mat_attr */
+#define LS_MODIFIER_MATERIAL_DIFF 1
+#define LS_MODIFIER_MATERIAL_DIFF_R 2
+#define LS_MODIFIER_MATERIAL_DIFF_G 3
+#define LS_MODIFIER_MATERIAL_DIFF_B 4
+#define LS_MODIFIER_MATERIAL_SPEC 5
+#define LS_MODIFIER_MATERIAL_SPEC_R 6
+#define LS_MODIFIER_MATERIAL_SPEC_G 7
+#define LS_MODIFIER_MATERIAL_SPEC_B 8
+#define LS_MODIFIER_MATERIAL_SPEC_HARD 9
+#define LS_MODIFIER_MATERIAL_ALPHA 10
+
+typedef struct LineStyleColorModifier_Material {
+ struct LineStyleModifier modifier;
+
+ struct ColorBand *color_ramp;
+ int blend;
+ int flags;
+ int mat_attr;
+ int pad;
+
+} LineStyleColorModifier_Material;
+
+typedef struct LineStyleAlphaModifier_Material {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int blend;
+ int flags;
+ int mat_attr;
+ int pad;
+
+} LineStyleAlphaModifier_Material;
+
+typedef struct LineStyleThicknessModifier_Material {
+ struct LineStyleModifier modifier;
+
+ struct CurveMapping *curve;
+ int blend;
+ int flags;
+ float value_min, value_max;
+ int mat_attr;
+ int pad;
+
+} LineStyleThicknessModifier_Material;
+
/* FreestyleLineStyle::panel */
#define LS_PANEL_COLOR 1
#define LS_PANEL_ALPHA 2
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index ae7ecacc56b..28c5ea3f314 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -285,15 +285,18 @@ extern StructRNA RNA_LineStyleAlphaModifier;
extern StructRNA RNA_LineStyleAlphaModifier_AlongStroke;
extern StructRNA RNA_LineStyleAlphaModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleAlphaModifier_DistanceFromObject;
+extern StructRNA RNA_LineStyleAlphaModifier_Material;
extern StructRNA RNA_LineStyleColorModifier;
extern StructRNA RNA_LineStyleColorModifier_AlongStroke;
extern StructRNA RNA_LineStyleColorModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleColorModifier_DistanceFromObject;
+extern StructRNA RNA_LineStyleColorModifier_Material;
extern StructRNA RNA_LineStyleModifier;
extern StructRNA RNA_LineStyleThicknessModifier;
extern StructRNA RNA_LineStyleThicknessModifier_AlongStroke;
extern StructRNA RNA_LineStyleThicknessModifier_DistanceFromCamera;
extern StructRNA RNA_LineStyleThicknessModifier_DistanceFromObject;
+extern StructRNA RNA_LineStyleThicknessModifier_Material;
extern StructRNA RNA_LockedTrackConstraint;
extern StructRNA RNA_Macro;
extern StructRNA RNA_MagicTexture;
diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c
index 63968bd481c..79c69868067 100644
--- a/source/blender/makesrna/intern/rna_linestyle.c
+++ b/source/blender/makesrna/intern/rna_linestyle.c
@@ -40,18 +40,21 @@ EnumPropertyItem linestyle_color_modifier_type_items[] ={
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
+ {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
{0, NULL, 0, NULL, NULL}};
EnumPropertyItem linestyle_alpha_modifier_type_items[] ={
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
+ {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
{0, NULL, 0, NULL, NULL}};
EnumPropertyItem linestyle_thickness_modifier_type_items[] ={
{LS_MODIFIER_ALONG_STROKE, "ALONG_STROKE", ICON_MODIFIER, "Along Stroke", ""},
{LS_MODIFIER_DISTANCE_FROM_CAMERA, "DISTANCE_FROM_CAMERA", ICON_MODIFIER, "Distance from Camera", ""},
{LS_MODIFIER_DISTANCE_FROM_OBJECT, "DISTANCE_FROM_OBJECT", ICON_MODIFIER, "Distance from Object", ""},
+ {LS_MODIFIER_MATERIAL, "MATERIAL", ICON_MODIFIER, "Material", ""},
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
@@ -67,6 +70,8 @@ static StructRNA *rna_LineStyle_color_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleColorModifier_DistanceFromCamera;
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
return &RNA_LineStyleColorModifier_DistanceFromObject;
+ case LS_MODIFIER_MATERIAL:
+ return &RNA_LineStyleColorModifier_Material;
default:
return &RNA_LineStyleColorModifier;
}
@@ -83,6 +88,8 @@ static StructRNA *rna_LineStyle_alpha_modifier_refine(struct PointerRNA *ptr)
return &RNA_LineStyleAlphaModifier_DistanceFromCamera;
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
return &RNA_LineStyleAlphaModifier_DistanceFromObject;
+ case LS_MODIFIER_MATERIAL:
+ return &RNA_LineStyleAlphaModifier_Material;
default:
return &RNA_LineStyleAlphaModifier;
}
@@ -99,6 +106,8 @@ static StructRNA *rna_LineStyle_thickness_modifier_refine(struct PointerRNA *ptr
return &RNA_LineStyleThicknessModifier_DistanceFromCamera;
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
return &RNA_LineStyleThicknessModifier_DistanceFromObject;
+ case LS_MODIFIER_MATERIAL:
+ return &RNA_LineStyleThicknessModifier_Material;
default:
return &RNA_LineStyleThicknessModifier;
}
@@ -123,10 +132,42 @@ static char *rna_LineStyle_thickness_modifier_path(PointerRNA *ptr)
#include "DNA_material_types.h"
-static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modifier_type_items)
+static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modifier_type_items, int color)
{
PropertyRNA *prop;
+ static EnumPropertyItem color_blend_items[] = {
+ {MA_RAMP_BLEND, "MIX", 0, "Mix", ""},
+ {MA_RAMP_ADD, "ADD", 0, "Add", ""},
+ {MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""},
+ {MA_RAMP_SUB, "SUBTRACT", 0, "Subtract", ""},
+ {MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""},
+ {MA_RAMP_DIV, "DIVIDE", 0, "Divide", ""},
+ {MA_RAMP_DIFF, "DIFFERENCE", 0, "Difference", ""},
+ {MA_RAMP_DARK, "DARKEN", 0, "Darken", ""},
+ {MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""},
+ {MA_RAMP_OVERLAY, "OVERLAY", 0, "Overlay", ""},
+ {MA_RAMP_DODGE, "DODGE", 0, "Dodge", ""},
+ {MA_RAMP_BURN, "BURN", 0, "Burn", ""},
+ {MA_RAMP_HUE, "HUE", 0, "Hue", ""},
+ {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""},
+ {MA_RAMP_VAL, "VALUE", 0, "Value", ""},
+ {MA_RAMP_COLOR, "COLOR", 0, "Color", ""},
+ {MA_RAMP_SOFT, "SOFT LIGHT", 0, "Soft Light", ""},
+ {MA_RAMP_LINEAR, "LINEAR LIGHT", 0, "Linear Light", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+ static EnumPropertyItem value_blend_items[] = {
+ {LS_VALUE_BLEND, "MIX", 0, "Mix", ""},
+ {LS_VALUE_ADD, "ADD", 0, "Add", ""},
+ {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_MIN, "MININUM", 0, "Minimum", ""},
+ {LS_VALUE_MAX, "MAXIMUM", 0, "Maximum", ""},
+ {0, NULL, 0, NULL, NULL}};
+
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "modifier.type");
RNA_def_property_enum_items(prop, modifier_type_items);
@@ -139,6 +180,12 @@ static void rna_def_modifier_type_common(StructRNA *srna, EnumPropertyItem *modi
RNA_def_property_update(prop, NC_SCENE, NULL);
RNA_def_struct_name_property(srna, prop);
+ prop= RNA_def_property(srna, "blend", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "blend");
+ RNA_def_property_enum_items(prop, (color) ? color_blend_items : value_blend_items);
+ RNA_def_property_ui_text(prop, "Blend", "Specify how the modifier value is blended into the base value.");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
prop= RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "modifier.influence");
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -156,56 +203,29 @@ 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_def_modifier_type_common(srna, linestyle_color_modifier_type_items, 1);
}
static void rna_def_alpha_modifier(StructRNA *srna)
{
- rna_def_modifier_type_common(srna, linestyle_alpha_modifier_type_items);
+ rna_def_modifier_type_common(srna, linestyle_alpha_modifier_type_items, 0);
}
static void rna_def_thickness_modifier(StructRNA *srna)
{
- rna_def_modifier_type_common(srna, linestyle_thickness_modifier_type_items);
+ rna_def_modifier_type_common(srna, linestyle_thickness_modifier_type_items, 0);
}
-static void rna_def_modifier_color_common(StructRNA *srna, int range)
+static void rna_def_modifier_color_ramp_common(StructRNA *srna, int range)
{
PropertyRNA *prop;
- static EnumPropertyItem ramp_blend_items[] = {
- {MA_RAMP_BLEND, "MIX", 0, "Mix", ""},
- {MA_RAMP_ADD, "ADD", 0, "Add", ""},
- {MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""},
- {MA_RAMP_SUB, "SUBTRACT", 0, "Subtract", ""},
- {MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""},
- {MA_RAMP_DIV, "DIVIDE", 0, "Divide", ""},
- {MA_RAMP_DIFF, "DIFFERENCE", 0, "Difference", ""},
- {MA_RAMP_DARK, "DARKEN", 0, "Darken", ""},
- {MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""},
- {MA_RAMP_OVERLAY, "OVERLAY", 0, "Overlay", ""},
- {MA_RAMP_DODGE, "DODGE", 0, "Dodge", ""},
- {MA_RAMP_BURN, "BURN", 0, "Burn", ""},
- {MA_RAMP_HUE, "HUE", 0, "Hue", ""},
- {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""},
- {MA_RAMP_VAL, "VALUE", 0, "Value", ""},
- {MA_RAMP_COLOR, "COLOR", 0, "Color", ""},
- {MA_RAMP_SOFT, "SOFT LIGHT", 0, "Soft Light", ""},
- {MA_RAMP_LINEAR, "LINEAR LIGHT", 0, "Linear Light", ""},
- {0, NULL, 0, NULL, NULL}};
-
prop= RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "color_ramp");
RNA_def_property_struct_type(prop, "ColorRamp");
RNA_def_property_ui_text(prop, "Color Ramp", "Color ramp used to change line color.");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "blend", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "blend");
- RNA_def_property_enum_items(prop, ramp_blend_items);
- RNA_def_property_ui_text(prop, "Ramp Blend", "Specify how the color ramp and line color are blended.");
- RNA_def_property_update(prop, NC_SCENE, NULL);
-
if (range) {
prop= RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "range_min");
@@ -228,17 +248,6 @@ static void rna_def_modifier_curve_common(StructRNA *srna, int range, int value)
{LS_MODIFIER_USE_CURVE, "CURVE", 0, "Curve", "Use curve mapping."},
{0, NULL, 0, NULL, NULL}};
- static EnumPropertyItem value_blend_items[] = {
- {LS_VALUE_BLEND, "MIX", 0, "Mix", ""},
- {LS_VALUE_ADD, "ADD", 0, "Add", ""},
- {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_MIN, "MININUM", 0, "Minimum", ""},
- {LS_VALUE_MAX, "MAXIMUM", 0, "Maximum", ""},
- {0, NULL, 0, NULL, NULL}};
-
prop= RNA_def_property(srna, "mapping", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flags");
RNA_def_property_enum_items(prop, mapping_items);
@@ -256,12 +265,6 @@ static void rna_def_modifier_curve_common(StructRNA *srna, int range, int value)
RNA_def_property_ui_text(prop, "Curve", "Curve used for the curve mapping.");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "blend", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "blend");
- RNA_def_property_enum_items(prop, value_blend_items);
- RNA_def_property_ui_text(prop, "Blend", "Specify how the mapping value and property value are blended.");
- RNA_def_property_update(prop, NC_SCENE, NULL);
-
if (range) {
prop= RNA_def_property(srna, "range_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "range_min");
@@ -287,6 +290,31 @@ static void rna_def_modifier_curve_common(StructRNA *srna, int range, int value)
}
}
+static void rna_def_modifier_material_common(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ static EnumPropertyItem mat_attr_items[] = {
+ {LS_MODIFIER_MATERIAL_DIFF, "DIFF", 0, "Diffuse", ""},
+ {LS_MODIFIER_MATERIAL_DIFF_R, "DIFF_R", 0, "Diffuse Red", ""},
+ {LS_MODIFIER_MATERIAL_DIFF_G, "DIFF_G", 0, "Diffuse Green", ""},
+ {LS_MODIFIER_MATERIAL_DIFF_B, "DIFF_B", 0, "Diffuse Blue", ""},
+ {LS_MODIFIER_MATERIAL_SPEC, "SPEC", 0, "Specular", ""},
+ {LS_MODIFIER_MATERIAL_SPEC_R, "SPEC_R", 0, "Specular Red", ""},
+ {LS_MODIFIER_MATERIAL_SPEC_G, "SPEC_G", 0, "Specular Green", ""},
+ {LS_MODIFIER_MATERIAL_SPEC_B, "SPEC_B", 0, "Specular Blue", ""},
+ {LS_MODIFIER_MATERIAL_SPEC_HARD, "SPEC_HARD", 0, "Specular Hardness", ""},
+ {LS_MODIFIER_MATERIAL_ALPHA, "ALPHA", 0, "Alpha", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+ prop= RNA_def_property(srna, "material_attr", 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.");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
+}
+
static void rna_def_linestyle_modifiers(BlenderRNA *brna)
{
StructRNA *srna;
@@ -306,17 +334,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_common(srna, 0);
+ rna_def_modifier_color_ramp_common(srna, 0);
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_common(srna, 1);
+ rna_def_modifier_color_ramp_common(srna, 1);
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_common(srna, 1);
+ rna_def_modifier_color_ramp_common(srna, 1);
prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "target");
@@ -325,6 +353,17 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured.");
RNA_def_property_update(prop, NC_SCENE, NULL);
+ srna= RNA_def_struct(brna, "LineStyleColorModifier_Material", "LineStyleColorModifier");
+ 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, 0);
+
+ prop= RNA_def_property(srna, "use_ramp", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", LS_MODIFIER_USE_RAMP);
+ RNA_def_property_ui_text(prop, "Ramp", "Use color ramp to map the BW average into an RGB color.");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
/* alpha transparency modifiers */
srna= RNA_def_struct(brna, "LineStyleAlphaModifier", "LineStyleModifier");
@@ -355,6 +394,12 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured.");
RNA_def_property_update(prop, NC_SCENE, NULL);
+ srna= RNA_def_struct(brna, "LineStyleAlphaModifier_Material", "LineStyleAlphaModifier");
+ 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, 0, 0);
+
/* line thickness modifiers */
srna= RNA_def_struct(brna, "LineStyleThicknessModifier", "LineStyleModifier");
@@ -385,6 +430,12 @@ static void rna_def_linestyle_modifiers(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target", "Target object from which the distance is measured.");
RNA_def_property_update(prop, NC_SCENE, NULL);
+ srna= RNA_def_struct(brna, "LineStyleThicknessModifier_Material", "LineStyleThicknessModifier");
+ 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, 0, 1);
+
}
static void rna_def_linestyle(BlenderRNA *brna)