From 262cfb59d3822b54e3a9ece22b2cb0bc04342a36 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 13 Jun 2010 13:56:13 +0000 Subject: [PATCH] solidify rim material option, use the next material slot for rim faces. a bit arbitrary but with most cases where solidify is used in durian we get UV texture stretching since there is no way to access the newly created size faces this gives us a way to switch out the material on the rim. --- release/scripts/ui/properties_data_modifier.py | 9 +++++---- source/blender/makesdna/DNA_modifier_types.h | 1 + source/blender/makesrna/intern/rna_modifier.c | 7 +++++++ source/blender/modifiers/intern/MOD_solidify.c | 6 ++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/release/scripts/ui/properties_data_modifier.py b/release/scripts/ui/properties_data_modifier.py index 8e85b7dfb97..c93b4289116 100644 --- a/release/scripts/ui/properties_data_modifier.py +++ b/release/scripts/ui/properties_data_modifier.py @@ -643,13 +643,14 @@ class DATA_PT_modifiers(DataButtonsPanel): colsub.active = (md.vertex_group is not "") colsub.prop(md, "invert", text="Invert") - if wide_ui: - col.label(text="") - - col.prop(md, "use_rim") col.prop(md, "use_even_offset") col.prop(md, "use_quality_normals") + col.prop(md, "use_rim") + colsub = col.column() + colsub.active = md.use_rim + colsub.prop(md, "use_rim_material") + # col = layout.column() # col.label(text="Vertex Group:") # col.prop_object(md, "vertex_group", ob, "vertex_groups", text="") diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 51f23ef210f..528f06882a2 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -703,6 +703,7 @@ typedef struct SolidifyModifierData { #define MOD_SOLIDIFY_EVEN (1<<1) #define MOD_SOLIDIFY_NORMAL_CALC (1<<2) #define MOD_SOLIDIFY_VGROUP_INV (1<<3) +#define MOD_SOLIDIFY_RIM_MATERIAL (1<<4) typedef struct ScrewModifierData { ModifierData modifier; diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index c30cbadaf2a..05088da56a6 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -2104,6 +2104,11 @@ static void rna_def_modifier_solidify(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_RIM); RNA_def_property_ui_text(prop, "Fill Rim", "Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "use_rim_material", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_RIM_MATERIAL); + RNA_def_property_ui_text(prop, "Rim Material", "Use in the next material for rim faces"); + RNA_def_property_update(prop, 0, "rna_Modifier_update"); prop= RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_EVEN); @@ -2119,6 +2124,8 @@ static void rna_def_modifier_solidify(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_VGROUP_INV); RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence"); RNA_def_property_update(prop, 0, "rna_Modifier_update"); + + } static void rna_def_modifier_screw(BlenderRNA *brna) diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c index 72907f5a2ee..1eb8f288006 100644 --- a/source/blender/modifiers/intern/MOD_solidify.c +++ b/source/blender/modifiers/intern/MOD_solidify.c @@ -514,6 +514,8 @@ static DerivedMesh *applyModifier(ModifierData *md, float (*edge_vert_nos)[3]= MEM_callocN(sizeof(float) * numVerts * 3, "solidify_edge_nos"); float nor[3]; #endif + /* maximum value -1, so we have room to increase */ + const short mat_nr_shift= (smd->flag & MOD_SOLIDIFY_RIM_MATERIAL) ? ob->totcol-1 : -1; const unsigned char crease_rim= smd->crease_rim * 255.0f; const unsigned char crease_outer= smd->crease_outer * 255.0f; @@ -572,6 +574,10 @@ static DerivedMesh *applyModifier(ModifierData *md, mf->v3= ed->v1 + numVerts; mf->v4= ed->v2 + numVerts; } + + /* use the next material index if option enabled */ + if(mf->mat_nr < mat_nr_shift) + mf->mat_nr++; if(crease_outer) ed->crease= crease_outer;