[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