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
path: root/source
diff options
context:
space:
mode:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-07-25 03:29:19 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2011-07-25 03:29:19 +0400
commit0a9094a8e30c86945a428d35d21fc683261cfe5c (patch)
treed49763f5084a723ec83250e2ee8414895b13058c /source
parentce03ec4b866a3e1a6f19a266bf2c38c2c4b4afd0 (diff)
New line style modifiers for changing line color, alpha transparency, and
line thickness based on object materials. Accessible material attributes are diffuse color, specular color, specular hardness, and alpha.
Diffstat (limited to 'source')
-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
6 files changed, 261 insertions, 68 deletions
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)