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

Reply via email to