[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15341] branches/soc-2008-jaguarandi/ source/blender: Adding initial SimpleModifier (bend, taper, twist)

André Pinto andresusanopinto at gmail.com
Tue Jun 24 14:04:27 CEST 2008


Revision: 15341
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15341
Author:   jaguarandi
Date:     2008-06-24 14:04:27 +0200 (Tue, 24 Jun 2008)

Log Message:
-----------
Adding initial SimpleModifier (bend,taper,twist)

(I might only touch this code again late on the week :S, so here is a tmp commit)

Modified Paths:
--------------
    branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c
    branches/soc-2008-jaguarandi/source/blender/makesdna/DNA_modifier_types.h
    branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c

Modified: branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c	2008-06-24 09:49:29 UTC (rev 15340)
+++ branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c	2008-06-24 12:04:27 UTC (rev 15341)
@@ -7279,7 +7279,51 @@
 		dag_add_relation(forest, dag_get_node(forest, smd->cutPlane), obNode, DAG_RL_OB_DATA | DAG_RL_DATA_DATA, "Shrinkwrap Modifier");
 }
 
+/* SimpleDeform */
+static void simpledeformModifier_initData(ModifierData *md)
+{
+	SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
 
+	smd->mode = 0;
+	smd->origin = 0;
+	smd->factor[0] = 1.0;
+}
+
+static void simpledeformModifier_copyData(ModifierData *md, ModifierData *target)
+{
+	SimpleDeformModifierData *smd  = (SimpleDeformModifierData*)md;
+	SimpleDeformModifierData *tsmd = (SimpleDeformModifierData*)target;
+
+	tsmd->mode	= smd->mode;
+	tsmd->origin= smd->origin;
+	memcpy(tsmd->factor, smd->factor, sizeof(tsmd->factor));
+}
+
+static void simpledeformModifier_deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+	SimpleDeformModifier_do((SimpleDeformModifierData*)md, vertexCos, numVerts);
+}
+
+static void simpledeformModifier_deformVertsEM(ModifierData *md, Object *ob, EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+	SimpleDeformModifier_do((SimpleDeformModifierData*)md, vertexCos, numVerts);
+}
+
+static void simpledeformModifier_foreachObjectLink(ModifierData *md, Object *ob, void (*walk)(void *userData, Object *ob, Object **obpoin), void *userData)
+{
+	SimpleDeformModifierData *smd  = (SimpleDeformModifierData*)md;
+	walk(userData, ob, &smd->origin);
+}
+
+static void simpledeformModifier_updateDepgraph(ModifierData *md, DagForest *forest, Object *ob, DagNode *obNode)
+{
+	SimpleDeformModifierData *smd  = (SimpleDeformModifierData*)md;
+
+	if (smd->origin)
+		dag_add_relation(forest, dag_get_node(forest, smd->origin), obNode, DAG_RL_OB_DATA, "SimpleDeform Modifier");
+}
+
+
 /***/
 
 static ModifierTypeInfo typeArr[NUM_MODIFIER_TYPES];
@@ -7615,6 +7659,19 @@
 		mti->applyModifierEM = shrinkwrapModifier_applyModifierEM;
 		mti->updateDepgraph = shrinkwrapModifier_updateDepgraph;
 
+		mti = INIT_TYPE(SimpleDeform);
+		mti->type = eModifierTypeType_OnlyDeform;
+		mti->flags = eModifierTypeFlag_AcceptsMesh
+				| eModifierTypeFlag_SupportsEditmode
+				| eModifierTypeFlag_EnableInEditmode;
+		mti->initData = simpledeformModifier_initData;
+		mti->copyData = simpledeformModifier_copyData;
+		mti->deformVerts = simpledeformModifier_deformVerts;
+		mti->deformVertsEM = simpledeformModifier_deformVertsEM;
+		mti->foreachObjectLink = simpledeformModifier_foreachObjectLink;
+		mti->updateDepgraph = simpledeformModifier_updateDepgraph;
+
+
 		typeArrInit = 0;
 #undef INIT_TYPE
 	}

Modified: branches/soc-2008-jaguarandi/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/makesdna/DNA_modifier_types.h	2008-06-24 09:49:29 UTC (rev 15340)
+++ branches/soc-2008-jaguarandi/source/blender/makesdna/DNA_modifier_types.h	2008-06-24 12:04:27 UTC (rev 15341)
@@ -36,6 +36,7 @@
 	eModifierType_Collision,
 	eModifierType_Bevel,
 	eModifierType_Shrinkwrap,
+	eModifierType_SimpleDeform,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -518,4 +519,14 @@
 #define MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE	(1<<3)
 #define MOD_SHRINKWRAP_CULL_TARGET_BACKFACE		(1<<4)
 
+typedef struct SimpleDeformModifierData {
+	ModifierData modifier;
+
+	struct Object *origin;	/* object to control the origin of modifier space coordinates */
+	float factor[4];		/* factors to control simple deforms */
+	char mode;
+	char pad[7];
+
+} SimpleDeformModifierData;
+
 #endif

Modified: branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c	2008-06-24 09:49:29 UTC (rev 15340)
+++ branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c	2008-06-24 12:04:27 UTC (rev 15341)
@@ -1831,6 +1831,8 @@
 			height = 86;
 			if (smd->shrinkType == MOD_SHRINKWRAP_NORMAL)
 				height += 19*7;
+		} else if (md->type==eModifierType_SimpleDeform) {
+				height += 19*2;
 		}
 							/* roundbox 4 free variables: corner-rounding, nop, roundbox type, shade */
 		uiDefBut(block, ROUNDBOX, 0, "", x-10, y-height-2, width, height-2, NULL, 5.0, 0.0, 12, 40, ""); 
@@ -2474,8 +2476,16 @@
 			uiDefIDPoinBut(block, modifier_testMeshObj, ID_OB, B_CHANGEDEP, "Ob: ",	lx, (cy-=19), buttonWidth,19, &smd->target, "Target to shrink to");
 			uiDefButF(block, NUM, B_MODIFIER_RECALC, "Offset:",	lx,(cy-=19),buttonWidth,19, &smd->keptDist, 0.0f, 100.0f, 1.0f, 0, "Specify distance to kept from the target");
 			uiBlockEndAlign(block);
+		} else if (md->type==eModifierType_SimpleDeform) {
+			SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
+			char simpledeform_typemenu[]="Deform type%t|Taper %x0|Twist %x1|Bend %x2|Shear %x3";
+
+			uiDefButS(block, MENU, B_MODIFIER_RECALC, simpledeform_typemenu, lx,(cy-=19),buttonWidth,19, &smd->mode, 0, 0, 0, 0, "Selects type of deform");
+			uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_CHANGEDEP, "Ob: ",	lx, (cy-=19), buttonWidth,19, &smd->origin, "Origin of modifier space coordinates");
+			uiDefButF(block, NUM, B_MODIFIER_RECALC, "Factor:",	lx,(cy-=19),buttonWidth,19, &smd->factor[0], -1000.0f, 1000.0f, 1.0f, 0, "Deform Factor");
 		}
 
+
 		uiBlockEndAlign(block);
 
 		y-=height;





More information about the Bf-blender-cvs mailing list