[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29501] branches/render25: Warp Modifier ( render branch only)

Campbell Barton ideasman42 at gmail.com
Thu Jun 17 03:06:11 CEST 2010


Revision: 29501
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29501
Author:   campbellbarton
Date:     2010-06-17 03:06:10 +0200 (Thu, 17 Jun 2010)

Log Message:
-----------
Warp Modifier (render branch only)
Use 2 objects to warp verts from one objects space into another, option for curve fallof, vgroup and textures.
Similar to hooks but the verts are not fixed.

made this modifier share code with displace.

Modified Paths:
--------------
    branches/render25/release/scripts/ui/properties_data_modifier.py
    branches/render25/source/blender/blenkernel/intern/deform.c
    branches/render25/source/blender/blenloader/intern/readfile.c
    branches/render25/source/blender/blenloader/intern/writefile.c
    branches/render25/source/blender/editors/interface/interface_templates.c
    branches/render25/source/blender/makesdna/DNA_modifier_types.h
    branches/render25/source/blender/makesrna/RNA_access.h
    branches/render25/source/blender/makesrna/intern/rna_modifier.c
    branches/render25/source/blender/modifiers/MOD_modifiertypes.h
    branches/render25/source/blender/modifiers/intern/MOD_displace.c
    branches/render25/source/blender/modifiers/intern/MOD_util.c
    branches/render25/source/blender/modifiers/intern/MOD_util.h

Added Paths:
-----------
    branches/render25/source/blender/modifiers/intern/MOD_warp.c

Modified: branches/render25/release/scripts/ui/properties_data_modifier.py
===================================================================
--- branches/render25/release/scripts/ui/properties_data_modifier.py	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/release/scripts/ui/properties_data_modifier.py	2010-06-17 01:06:10 UTC (rev 29501)
@@ -708,6 +708,49 @@
             sub.prop(md, "scale_x", text="Scale X")
             sub.prop(md, "scale_y", text="Scale Y")
 
+    def WARP(self, layout, ob, md, wide_ui):
+        use_falloff = (md.falloff_type != 'NONE')
+        split = layout.split()
+        
+        col = split.column()
+        col.label(text="From:")
+        col.prop(md, "object_from", text="")
+
+        col.prop(md, "use_volume_preserve")
+
+        col = split.column()
+        col.label(text="To:")
+        col.prop(md, "object_to", text="")
+        col.prop_object(md, "vertex_group", ob, "vertex_groups", text="")
+
+        col = layout.column()
+        
+        row = col.row(align=True)
+        row.prop(md, "strength")
+        if use_falloff:
+            row.prop(md, "falloff_radius")
+        
+        col.prop(md, "falloff_type")
+        if use_falloff:
+            if md.falloff_type == 'CURVE':
+                col.template_curve_mapping(md, "falloff_curve")
+
+        # 2 new columns
+        split = layout.split()
+        col = split.column()
+        col.label(text="Texture:")
+        col.prop(md, "texture", text="")
+        
+        col = split.column()
+        col.label(text="Texture Coordinates:")
+        col.prop(md, "texture_coordinates", text="")
+        
+        if md.texture_coordinates == 'OBJECT':
+            layout.prop(md, "texture_coordinate_object", text="Object")
+        elif md.texture_coordinates == 'UV' and ob.type == 'MESH':
+            layout.prop_object(md, "uv_layer", ob.data, "uv_textures")
+        
+
     def WAVE(self, layout, ob, md, wide_ui):
         split = layout.split()
 

Modified: branches/render25/source/blender/blenkernel/intern/deform.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/deform.c	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/blenkernel/intern/deform.c	2010-06-17 01:06:10 UTC (rev 29501)
@@ -41,7 +41,11 @@
 #include "DNA_meshdata_types.h"
 #include "DNA_object_types.h"
 
+#include "DNA_mesh_types.h"
+#include "DNA_lattice_types.h"
+
 #include "BKE_deform.h"
+#include "BKE_utildefines.h"
 
 #include "BLI_blenlib.h"
 
@@ -531,3 +535,31 @@
 
 	return dv->dw+(dv->totweight-1);
 }
+
+/* returns true if the id type supports weights */
+int defvert_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot)
+{
+	if(id) {
+		switch(GS(id->name)) {
+			case ID_ME:
+			{
+				Mesh *me = (Mesh *)id;
+				*dvert_arr= me->dvert;
+				*dvert_tot= me->totvert;
+				return TRUE;
+			}
+			case ID_LT:
+			{
+				Lattice *lt= (Lattice *)id;
+				lt= (lt->editlatt)? lt->editlatt: lt;
+				*dvert_arr= lt->dvert;
+				*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
+				return TRUE;
+			}
+		}
+	}
+
+	*dvert_arr= NULL;
+	*dvert_tot= 0;
+	return FALSE;
+}

Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/blenloader/intern/readfile.c	2010-06-17 01:06:10 UTC (rev 29501)
@@ -3944,6 +3944,13 @@
 						SWITCH_INT(mmd->bindcos[a])
 			}
 		}
+		else if (md->type==eModifierType_Warp) {
+			WarpModifierData *tmd = (WarpModifierData *) md;
+
+			tmd->curfalloff= newdataadr(fd, tmd->curfalloff);
+			if(tmd->curfalloff)
+				direct_link_curvemapping(fd, tmd->curfalloff);
+		}
 	}
 }
 

Modified: branches/render25/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/writefile.c	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/blenloader/intern/writefile.c	2010-06-17 01:06:10 UTC (rev 29501)
@@ -1240,6 +1240,12 @@
 			writestruct(wd, DATA, "MDefInfluence", mmd->totinfluence, mmd->dyninfluences);
 			writedata(wd, DATA, sizeof(int)*mmd->totvert, mmd->dynverts);
 		}
+		else if (md->type==eModifierType_Warp) {
+			WarpModifierData *tmd = (WarpModifierData*) md;
+			if(tmd->curfalloff) {
+				write_curvemapping(wd, tmd->curfalloff);
+			}
+		}
 	}
 }
 

Modified: branches/render25/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/render25/source/blender/editors/interface/interface_templates.c	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/editors/interface/interface_templates.c	2010-06-17 01:06:10 UTC (rev 29501)
@@ -1863,6 +1863,11 @@
 
 	/* curve itself */
 	size= uiLayoutGetWidth(layout);
+
+	// XXX: workaround for modifier panel
+	if(size <= 0)
+		size = 120;
+
 	row= uiLayoutRow(layout, 0);
 	uiDefBut(block, BUT_CURVE, 0, "", 0, 0, size, MIN2(size, 200), cumap, 0.0f, 1.0f, bg, 0, "");
 

Modified: branches/render25/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_modifier_types.h	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/makesdna/DNA_modifier_types.h	2010-06-17 01:06:10 UTC (rev 29501)
@@ -66,6 +66,7 @@
 	eModifierType_ShapeKey,
 	eModifierType_Solidify,
 	eModifierType_Screw,
+	eModifierType_Warp,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -99,6 +100,18 @@
 	eSubsurfModifierFlag_SubsurfUv = (1<<3)
 } SubsurfModifierFlag;
 
+/* not a real modifier */
+typedef struct MappingInfoModifierData {
+	ModifierData modifier;
+
+	struct Tex *texture;
+	struct Object *map_object;
+	char uvlayer_name[32];
+	int uvlayer_tmp;
+	int texmapping;
+} MappingInfoModifierData;
+
+
 typedef struct SubsurfModifierData {
 	ModifierData modifier;
 
@@ -279,18 +292,22 @@
 	int type;  /* domain, inflow, outflow, ... */
 } SmokeModifierData;
 
+
 typedef struct DisplaceModifierData {
 	ModifierData modifier;
 
+	/* keep in sync with MappingInfoModifierData */
 	struct Tex *texture;
+	struct Object *map_object;
+	char uvlayer_name[32];
+	int uvlayer_tmp;
+	int texmapping;
+	int pad10;
+
 	float strength;
 	int direction;
 	char defgrp_name[32];
 	float midlevel;
-	int texmapping;
-	struct Object *map_object;
-	char uvlayer_name[32];
-	int uvlayer_tmp, pad;
 } DisplaceModifierData;
 
 /* DisplaceModifierData->direction */
@@ -722,5 +739,41 @@
 #define MOD_SCREW_OBJECT_OFFSET	(1<<2)
 // #define MOD_SCREW_OBJECT_ANGLE	(1<<4)
 
+typedef struct WarpModifierData {
+	ModifierData modifier;
 
+	/* keep in sync with MappingInfoModifierData */
+	struct Tex *texture;
+	struct Object *map_object;
+	char uvlayer_name[32];
+	int uvlayer_tmp;
+	int texmapping;
+	int pad10;
+
+	float strength;
+
+	struct Object *object_from;
+	struct Object *object_to;
+	struct CurveMapping *curfalloff;
+	char defgrp_name[32];			/* optional vertexgroup name */
+	float falloff_radius;
+	char flag; /* not used yet */
+	char falloff_type;
+	char pad[2];
+} WarpModifierData;
+
+#define MOD_WARP_VOLUME_PRESERVE 1
+
+typedef enum {
+	eWarp_Falloff_None =		0,
+	eWarp_Falloff_Curve =		1,
+	eWarp_Falloff_Sharp =		2, /* PROP_SHARP */
+	eWarp_Falloff_Smooth =		3, /* PROP_SMOOTH */
+	eWarp_Falloff_Root =		4, /* PROP_ROOT */
+	eWarp_Falloff_Linear =		5, /* PROP_LIN */
+	eWarp_Falloff_Const =		6, /* PROP_CONST */
+	eWarp_Falloff_Sphere =		7, /* PROP_SPHERE */
+	/* PROP_RANDOM not used */
+} WarpModifierFalloff;
+
 #endif

Modified: branches/render25/source/blender/makesrna/RNA_access.h
===================================================================
--- branches/render25/source/blender/makesrna/RNA_access.h	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/makesrna/RNA_access.h	2010-06-17 01:06:10 UTC (rev 29501)
@@ -499,6 +499,7 @@
 extern StructRNA RNA_TextureNodeValToRGB;
 extern StructRNA RNA_TextureNodeViewer;
 extern StructRNA RNA_TextureSlot;
+extern StructRNA RNA_WarpModifier;
 extern StructRNA RNA_Theme;
 extern StructRNA RNA_ThemeAudioWindow;
 extern StructRNA RNA_ThemeBoneColorSet;

Modified: branches/render25/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_modifier.c	2010-06-16 23:57:44 UTC (rev 29500)
+++ branches/render25/source/blender/makesrna/intern/rna_modifier.c	2010-06-17 01:06:10 UTC (rev 29501)
@@ -72,6 +72,7 @@
 	{eModifierType_Shrinkwrap, "SHRINKWRAP", ICON_MOD_SHRINKWRAP, "Shrinkwrap", ""},
 	{eModifierType_SimpleDeform, "SIMPLE_DEFORM", ICON_MOD_SIMPLEDEFORM, "Simple Deform", ""},
 	{eModifierType_Smooth, "SMOOTH", ICON_MOD_SMOOTH, "Smooth", ""},
+	{eModifierType_Warp, "WARP", ICON_MOD_SUBSURF, "Warp", ""},
 	{eModifierType_Wave, "WAVE", ICON_MOD_WAVE, "Wave", ""},
 	{0, "", 0, "Simulate", ""},
 	{eModifierType_Cloth, "CLOTH", ICON_MOD_CLOTH, "Cloth", ""},
@@ -169,6 +170,8 @@
 			return &RNA_SolidifyModifier;
 		case eModifierType_Screw:
 			return &RNA_ScrewModifier;
+		case eModifierType_Warp:
+			return &RNA_WarpModifier;
 		default:
 			return &RNA_Modifier;
 	}
@@ -336,7 +339,7 @@
 	rna_object_vgroup_name_set(ptr, value, smd->defgrp_name, sizeof(smd->defgrp_name));
 }
 
-static void rna_DisplaceModifier_uvlayer_set(PointerRNA *ptr, const char *value)
+static void rna_MappingInfo_uvlayer_set(PointerRNA *ptr, const char *value)
 {
 	DisplaceModifierData *smd= (DisplaceModifierData*)ptr->data;
 	rna_object_uvlayer_name_set(ptr, value, smd->uvlayer_name, sizeof(smd->uvlayer_name));
@@ -354,6 +357,12 @@
 	rna_object_uvlayer_name_set(ptr, value, wmd->uvlayer_name, sizeof(wmd->uvlayer_name));
 }
 
+static void RNA_WarpModifier_vgroup_set(PointerRNA *ptr, const char *value)
+{
+	WarpModifierData *tmd= (WarpModifierData*)ptr->data;
+	rna_object_vgroup_name_set(ptr, value, tmd->defgrp_name, sizeof(tmd->defgrp_name));
+}
+
 static void rna_MultiresModifier_level_range(PointerRNA *ptr, int *min, int *max)
 {
 	MultiresModifierData *mmd = (MultiresModifierData*)ptr->data;
@@ -567,6 +576,107 @@
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
+
+static void rna_def_modifier_generic_map_info(StructRNA *srna)
+{
+	static EnumPropertyItem prop_texture_coordinates_items[] = {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list