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;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs