diff options
-rw-r--r-- | release/scripts/freestyle/style_modules/parameter_editor.py | 121 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_render.py | 123 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 45 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 50 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 18 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_linestyle_types.h | 58 | ||||
-rw-r--r-- | source/blender/makesrna/RNA_access.h | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_linestyle.c | 155 |
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) |