[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52987] trunk/blender: UV Warp Modifier:

Campbell Barton ideasman42 at gmail.com
Fri Dec 14 05:07:37 CET 2012


Revision: 52987
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52987
Author:   campbellbarton
Date:     2012-12-14 04:07:30 +0000 (Fri, 14 Dec 2012)
Log Message:
-----------
UV Warp Modifier:
Based on patch [#30837] UV Offset Modifier
by Pawel Kowal (pkowal)

- Allows you to setup a transformation between objects to apply to UV coords.
- Option to select which axis apply to U/V.
- Option to select the UV center (needed for transformations that scale or rotate).
- Uses from/to objects in a similar way to the Warp modifier.
- Vertex group can be used to adjust influence.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    trunk/blender/source/blender/editors/space_outliner/outliner_draw.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/modifiers/CMakeLists.txt
    trunk/blender/source/blender/modifiers/MOD_modifiertypes.h
    trunk/blender/source/blender/modifiers/intern/MOD_util.c

Added Paths:
-----------
    trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-12-14 01:52:08 UTC (rev 52986)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_modifier.py	2012-12-14 04:07:30 UTC (rev 52987)
@@ -1032,5 +1032,47 @@
     def TRIANGULATE(self, layout, ob, md):
         layout.prop(md, "use_beauty")
 
+    def UV_WARP(self, layout, ob, md):
+        split = layout.split()
+        col = split.column()
+        col.prop(md, "center");
+
+        col = split.column()
+        col.label(text="UV Axis:")
+        col.prop(md, "axis_u", text="");
+        col.prop(md, "axis_v", text="");
+
+        split = layout.split()
+        col = split.column()
+        col.label(text="From:")
+        col.prop(md, "object_from", text="")
+
+        col = split.column()
+        col.label(text="To:")
+        col.prop(md, "object_to", text="")
+
+        split = layout.split()
+        col = split.column()
+        obj = md.object_from
+        if obj and obj.type == 'ARMATURE':
+            col.label(text="Bone:")
+            col.prop_search(md, "bone_from", obj.data, "bones", text="")
+
+        col = split.column()
+        obj = md.object_to
+        if obj and obj.type == 'ARMATURE':
+            col.label(text="Bone:")
+            col.prop_search(md, "bone_to", obj.data, "bones", text="")
+
+        split = layout.split()
+
+        col = split.column()
+        col.label(text="Vertex Group:")
+        col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
+
+        col = split.column()
+        col.label(text="UV Map:")
+        col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)

Modified: trunk/blender/source/blender/editors/space_outliner/outliner_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner_draw.c	2012-12-14 01:52:08 UTC (rev 52986)
+++ trunk/blender/source/blender/editors/space_outliner/outliner_draw.c	2012-12-14 04:07:30 UTC (rev 52987)
@@ -996,6 +996,7 @@
 					case eModifierType_Array:
 						UI_icon_draw(x, y, ICON_MOD_ARRAY); break;
 					case eModifierType_UVProject:
+					case eModifierType_UVWarp:  /* TODO, get own icon */
 						UI_icon_draw(x, y, ICON_MOD_UVPROJECT); break;
 					case eModifierType_Displace:
 						UI_icon_draw(x, y, ICON_MOD_DISPLACE); break;

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2012-12-14 01:52:08 UTC (rev 52986)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2012-12-14 04:07:30 UTC (rev 52987)
@@ -76,7 +76,8 @@
 	eModifierType_Remesh            = 41,
 	eModifierType_Skin              = 42,
 	eModifierType_LaplacianSmooth   = 43,
-	eModifierType_Triangulate		= 44,
+	eModifierType_Triangulate       = 44,
+	eModifierType_UVWarp          = 45,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1140,4 +1141,20 @@
 	short flag, repeat;
 } LaplacianSmoothModifierData;
 
-#endif
+typedef struct UVWarpModifierData {
+	ModifierData modifier;
+
+	char axis_u, axis_v;
+	char pad[6];
+	float center[2];       /* used for rotate/scale */
+
+	struct Object *object_src;  /* source */
+	char bone_src[64];     /* optional name of bone target, MAX_ID_NAME-2 */
+	struct Object *object_dst;  /* target */
+	char bone_dst[64];     /* optional name of bone target, MAX_ID_NAME-2 */
+
+	char vgroup_name[64];   /* optional vertexgroup name, MAX_VGROUP_NAME */
+	char uvlayer_name[64];  /* MAX_CUSTOMDATA_LAYER_NAME */
+} UVWarpModifierData;
+
+#endif  /* __DNA_MODIFIER_TYPES_H__ */

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h	2012-12-14 01:52:08 UTC (rev 52986)
+++ trunk/blender/source/blender/makesrna/RNA_access.h	2012-12-14 04:07:30 UTC (rev 52987)
@@ -587,6 +587,7 @@
 extern StructRNA RNA_TransformSequence;
 extern StructRNA RNA_UILayout;
 extern StructRNA RNA_UIListItem;
+extern StructRNA RNA_UVWarpModifier;
 extern StructRNA RNA_UVProjectModifier;
 extern StructRNA RNA_UVProjector;
 extern StructRNA RNA_UnitSettings;

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-12-14 01:52:08 UTC (rev 52986)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2012-12-14 04:07:30 UTC (rev 52987)
@@ -59,6 +59,7 @@
 EnumPropertyItem modifier_type_items[] = {
 	{0, "", 0, N_("Modify"), ""},
 	{eModifierType_UVProject, "UV_PROJECT", ICON_MOD_UVPROJECT, "UV Project", ""},
+	{eModifierType_UVWarp, "UV_WARP", ICON_MOD_UVPROJECT, "UV Warp", ""},
 	{eModifierType_WeightVGEdit, "VERTEX_WEIGHT_EDIT", ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Edit", ""},
 	{eModifierType_WeightVGMix, "VERTEX_WEIGHT_MIX", ICON_MOD_VERTEX_WEIGHT, "Vertex Weight Mix", ""},
 	{eModifierType_WeightVGProximity, "VERTEX_WEIGHT_PROXIMITY", ICON_MOD_VERTEX_WEIGHT,
@@ -129,7 +130,7 @@
 {
 	ModifierData *md = (ModifierData *)ptr->data;
 
-	switch (md->type) {
+	switch ((ModifierType)md->type) {
 		case eModifierType_Subsurf:
 			return &RNA_SubsurfModifier;
 		case eModifierType_Lattice:
@@ -216,9 +217,16 @@
 			return &RNA_LaplacianSmoothModifier;
 		case eModifierType_Triangulate:
 			return &RNA_TriangulateModifier;
-		default:
+		case eModifierType_UVWarp:
+			return &RNA_UVWarpModifier;
+		/* Default */
+		case eModifierType_None:
+		case eModifierType_ShapeKey:
+		case NUM_MODIFIER_TYPES:
 			return &RNA_Modifier;
 	}
+
+	return &RNA_Modifier;
 }
 
 static void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
@@ -738,6 +746,18 @@
 	md->bevel_angle = (int)value;
 }
 
+static void rna_UVWarpModifier_vgroup_set(PointerRNA *ptr, const char *value)
+{
+	UVWarpModifierData *umd = (UVWarpModifierData*)ptr->data;
+	rna_object_vgroup_name_set(ptr, value, umd->vgroup_name, sizeof(umd->vgroup_name));
+}
+
+static void rna_UVWarpModifier_uvlayer_set(PointerRNA *ptr, const char *value)
+{
+	UVWarpModifierData *umd = (UVWarpModifierData*)ptr->data;
+	rna_object_uvlayer_name_set(ptr, value, umd->uvlayer_name, sizeof(umd->uvlayer_name));
+}
+
 #else
 
 static PropertyRNA *rna_def_property_subdivision_common(StructRNA *srna, const char type[])
@@ -2773,6 +2793,75 @@
 #endif
 }
 
+static void rna_def_modifier_uvwarp(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	static EnumPropertyItem uvwarp_axis[] = {
+		{0, "X", 0, "X", ""},
+		{1, "Y", 0, "Y", ""},
+		{2, "Z", 0, "Z", ""},
+		{0, NULL, 0, NULL, NULL}
+	};
+
+	srna = RNA_def_struct(brna, "UVWarpModifier", "Modifier");
+	RNA_def_struct_ui_text(srna, "UVWarp Modifier", "Add target position to uv coordinates");
+	RNA_def_struct_sdna(srna, "UVWarpModifierData");
+	RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
+
+	prop = RNA_def_property(srna, "axis_u", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "axis_u");
+	RNA_def_property_enum_items(prop, uvwarp_axis);
+	RNA_def_property_ui_text(prop, "U-Axis", "Pole axis for rotation");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "axis_v", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_sdna(prop, NULL, "axis_v");
+	RNA_def_property_enum_items(prop, uvwarp_axis);
+	RNA_def_property_ui_text(prop, "V-Axis", "Pole axis for rotation");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "center");
+	RNA_def_property_ui_text(prop, "UV Center", "Center point for rotate/scale");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "object_src");
+	RNA_def_property_ui_text(prop, "Target", "Object defining offset");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+
+	prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "bone_src");
+	RNA_def_property_ui_text(prop, "Sub-Target", "Bone defining offset");
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+
+	prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "object_dst");
+	RNA_def_property_ui_text(prop, "Target", "Object defining offset");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+
+	prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "bone_dst");
+	RNA_def_property_ui_text(prop, "Sub-Target", "Bone defining offset");
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
+
+	prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "vgroup_name");
+	RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
+	RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UVWarpModifier_vgroup_set");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+	prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
+	RNA_def_property_ui_text(prop, "UV Layer", "UV Layer name");
+	RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UVWarpModifier_uvlayer_set");
+	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+}
+
 static void rna_def_modifier_weightvg_mask(BlenderRNA *UNUSED(brna), StructRNA *srna)
 {
 	static EnumPropertyItem weightvg_mask_tex_map_items[] = {
@@ -3480,6 +3569,7 @@
 	rna_def_modifier_smoke(brna);
 	rna_def_modifier_solidify(brna);
 	rna_def_modifier_screw(brna);
+	rna_def_modifier_uvwarp(brna);
 	rna_def_modifier_weightvgedit(brna);
 	rna_def_modifier_weightvgmix(brna);
 	rna_def_modifier_weightvgproximity(brna);

Modified: trunk/blender/source/blender/modifiers/CMakeLists.txt

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list