Revision: 15370
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15370
Author:   jaguarandi
Date:     2008-06-27 18:45:37 +0200 (Fri, 27 Jun 2008)

Log Message:
-----------
Modifications on simple modifier
+Added limits on bend
+button to create an empty and make child of object
+empty is now relative to object

Modified Paths:
--------------
    branches/soc-2008-jaguarandi/source/blender/blenkernel/BKE_simple_deform.h
    branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c
    
branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.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/BKE_simple_deform.h
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/blenkernel/BKE_simple_deform.h  
2008-06-27 13:02:12 UTC (rev 15369)
+++ branches/soc-2008-jaguarandi/source/blender/blenkernel/BKE_simple_deform.h  
2008-06-27 16:45:37 UTC (rev 15370)
@@ -33,8 +33,7 @@
 struct DerivedMesh;
 struct SimpleDeformModifierData;
 
-/* struct DerivedMesh *simpledeformModifier_do(struct SimpleDeformModifierData 
*smd, struct Object *ob, struct DerivedMesh *dm, int useRenderParams, int 
isFinalCalc); */
-void SimpleDeformModifier_do(SimpleDeformModifierData *smd, float 
(*vertexCos)[3], int numVerts);
+void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, 
float (*vertexCos)[3], int numVerts);
 
 #endif
 

Modified: 
branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c    
2008-06-27 13:02:12 UTC (rev 15369)
+++ branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/modifier.c    
2008-06-27 16:45:37 UTC (rev 15370)
@@ -101,6 +101,7 @@
 #include "depsgraph_private.h"
 #include "BKE_bmesh.h"
 #include "BKE_shrinkwrap.h"
+#include "BKE_simple_deform.h"
 
 #include "LOD_DependKludge.h"
 #include "LOD_decimation.h"
@@ -7284,9 +7285,11 @@
 {
        SimpleDeformModifierData *smd = (SimpleDeformModifierData*) md;
 
-       smd->mode = 0;
+       smd->mode = MOD_SIMPLEDEFORM_MODE_TWIST;
        smd->origin = 0;
-       smd->factor[0] = 1.0;
+       smd->factor[0] = 0.35;
+       smd->factor[1] = -1000.0;
+       smd->factor[2] =  1000.0;
 }
 
 static void simpledeformModifier_copyData(ModifierData *md, ModifierData 
*target)
@@ -7301,12 +7304,12 @@
 
 static void simpledeformModifier_deformVerts(ModifierData *md, Object *ob, 
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
-       SimpleDeformModifier_do((SimpleDeformModifierData*)md, vertexCos, 
numVerts);
+       SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, 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);
+       SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, vertexCos, 
numVerts);
 }
 
 static void simpledeformModifier_foreachObjectLink(ModifierData *md, Object 
*ob, void (*walk)(void *userData, Object *ob, Object **obpoin), void *userData)

Modified: 
branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c
===================================================================
--- 
branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c   
    2008-06-27 13:02:12 UTC (rev 15369)
+++ 
branches/soc-2008-jaguarandi/source/blender/blenkernel/intern/simple_deform.c   
    2008-06-27 16:45:37 UTC (rev 15370)
@@ -38,16 +38,26 @@
 #include <math.h>
 
 
-static void simpleDeform_tapper(const float factor, float *co)
+
+
+static void simpleDeform_tapperXY(const float factor, float *co)
 {
        float x = co[0], y = co[1], z = co[2];
 
        co[0] = x*(1.0f + z*factor);
+       co[1] = y*(1.0f + z*factor);
+       co[2] = z;
+}
+
+static void simpleDeform_tapperX(const float factor, float *co)
+{
+       float x = co[0], y = co[1], z = co[2];
+
+       co[0] = x*(1.0f + z*factor);
        co[1] = y;
        co[2] = z;
 }
 
-
 static void simpleDeform_twist(const float factor, float *co)
 {
        float x = co[0], y = co[1], z = co[2];
@@ -59,41 +69,51 @@
        co[0] = x*cost - y*sint;
        co[1] = x*sint + y*cost;
        co[2] = z;
+
 }
 
-static void simpleDeform_bend(const float factor, float *co)
+static void simpleDeform_bend(const float factor, const float axis_limit[2], 
float *co)
 {
        float x = co[0], y = co[1], z = co[2];
 
        float x0 = 0.0f;
-       float theta = (x - x0)*factor;
-       float sint = sin(theta);
-       float cost = cos(theta);
+       float theta = x*factor, sint, cost;
 
-       co[0] = -sint*(y-1.0f/factor) + x0;
-       co[1] =  cost*(y-1.0f/factor) + 1.0f/factor;
-       co[2] =  z;
-}
+       if(x > axis_limit[1])
+       {
+               x0 = axis_limit[1] - x;
+               x = axis_limit[1];
+       }
+       else if(x < axis_limit[0])
+       {
+               x0 = axis_limit[0] - x;
+               x = axis_limit[0];
+       }
 
-static void simpleDeform_shear(const float factor, float *co)
-{
-       float x = co[0], y = co[1], z = co[2];
+       theta = x*factor;
+       sint = sin(theta);
+       cost = cos(theta);
 
-       co[0] = x + factor;
-       co[1] = y;
-       co[2] = z;
+       co[0] = -y*sint - cost*x0;
+       co[1] =  y*cost - sint*x0;
+       co[2] =  z;
 }
 
 /* simple deform modifier */
-void SimpleDeformModifier_do(SimpleDeformModifierData *smd, float 
(*vertexCos)[3], int numVerts)
+void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, 
float (*vertexCos)[3], int numVerts)
 {
        float (*ob2mod)[4] = NULL, (*mod2ob)[4] = NULL;
+       float tmp[2][4][4];
+
        if(smd->origin)
        {
-               Mat4Invert(smd->origin->imat, smd->origin->obmat);      
//inverse is outdated
+               //inverse is outdated
+               Mat4Invert(smd->origin->imat, smd->origin->obmat);
 
-               ob2mod = smd->origin->imat;
-               mod2ob = smd->origin->obmat;
+               ob2mod = tmp[0];
+               mod2ob = tmp[1];
+               Mat4MulSerie(ob2mod, smd->origin->imat, ob->obmat, 0, 0, 0, 0, 
0, 0);
+               Mat4Invert(mod2ob, ob2mod);
        }
 
 
@@ -104,10 +124,10 @@
 
                switch(smd->mode)
                {
-                       case 0: simpleDeform_tapper     (smd->factor[0], 
*vertexCos); break;
-                       case 1: simpleDeform_twist      (smd->factor[0], 
*vertexCos); break;
-                       case 2: simpleDeform_bend       (smd->factor[0], 
*vertexCos); break;
-                       case 3: simpleDeform_shear      (smd->factor[0], 
*vertexCos); break;
+                       case MOD_SIMPLEDEFORM_MODE_TWIST:               
simpleDeform_twist(smd->factor[0], *vertexCos); break;
+                       case MOD_SIMPLEDEFORM_MODE_BEND:                
simpleDeform_bend(smd->factor[0], smd->factor+1, *vertexCos); break;
+                       case MOD_SIMPLEDEFORM_MODE_TAPER_X:             
simpleDeform_tapperX (smd->factor[0], *vertexCos); break;
+                       case MOD_SIMPLEDEFORM_MODE_TAPER_XY:    
simpleDeform_tapperXY(smd->factor[0], *vertexCos); break;
                }
 
                if(mod2ob)

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-27 13:02:12 UTC (rev 15369)
+++ branches/soc-2008-jaguarandi/source/blender/makesdna/DNA_modifier_types.h   
2008-06-27 16:45:37 UTC (rev 15370)
@@ -529,4 +529,9 @@
 
 } SimpleDeformModifierData;
 
+#define MOD_SIMPLEDEFORM_MODE_TWIST            1
+#define MOD_SIMPLEDEFORM_MODE_BEND             2
+#define MOD_SIMPLEDEFORM_MODE_TAPER_X  3
+#define MOD_SIMPLEDEFORM_MODE_TAPER_XY 4
+
 #endif

Modified: branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c
===================================================================
--- branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c   
2008-06-27 13:02:12 UTC (rev 15369)
+++ branches/soc-2008-jaguarandi/source/blender/src/buttons_editing.c   
2008-06-27 16:45:37 UTC (rev 15370)
@@ -1664,6 +1664,33 @@
        }
        return 0;
 }
+
+static void modifier_link_new_empty(void *pp_empty, void *p_parent)
+{
+       Object **empty = (Object**)pp_empty;
+       Object *parent = (Object*) p_parent;
+
+       /* Add object but witouth chaing layers and or changing active object */
+       Base *base= BASACT, *newbase;
+
+       (*empty) = add_object(OB_EMPTY);
+
+       newbase= BASACT;
+       newbase->lay= base->lay;
+       (*empty)->lay= newbase->lay;
+
+       /* restore, add_object sets active */
+       BASACT= base;
+
+       /* Makes parent relation and positions empty on center of object */
+       (*empty)->partype= PAROBJECT;
+       (*empty)->parent = parent;
+       Mat4CpyMat4( (*empty)->obmat, parent->obmat );
+       Mat4Invert(  (*empty)->parentinv, parent->obmat);
+       apply_obmat( (*empty) );
+       DAG_scene_sort(G.scene);
+}
+
 static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int 
*xco, int *yco, int index, int cageIndex, int lastCageIndex)
 {
        ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -1830,8 +1857,11 @@
                        ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) 
md;
                        height = 86;
                        if (smd->shrinkType == MOD_SHRINKWRAP_NORMAL)
-                               height += 19*7;
+                               height += 19*5;
                } else if (md->type==eModifierType_SimpleDeform) {
+                       SimpleDeformModifierData *smd = 
(SimpleDeformModifierData*) md;
+                       height += 19*3;
+                       if(smd->mode == MOD_SIMPLEDEFORM_MODE_BEND)
                                height += 19*2;
                }
                                                        /* roundbox 4 free 
variables: corner-rounding, nop, roundbox type, shade */
@@ -2460,12 +2490,15 @@
                        uiDefButS(block, MENU, B_MODIFIER_RECALC, 
shrinktypemenu, lx,(cy-=19),buttonWidth,19, &smd->shrinkType, 0, 0, 0, 0, 
"Selects type of shrinkwrap algorithm for target position.");
 
                        if (smd->shrinkType == MOD_SHRINKWRAP_NORMAL){
-                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_ALLOW_DEFAULT_NORMAL, B_MODIFIER_RECALC, "Default normal",      
lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows vertices to 
move in the normal direction");
-                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_ALLOW_INVERTED_NORMAL, B_MODIFIER_RECALC, "Invert normal",      
lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows vertices to 
move in the inverse direction of their normal");
+
+                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_ALLOW_DEFAULT_NORMAL, B_MODIFIER_RECALC, "Default normal",      
lx,(cy-=19),buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows vertices to 
move in the normal direction");
+                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_ALLOW_INVERTED_NORMAL, B_MODIFIER_RECALC, "Invert normal",      
lx + buttonWidth/2,cy,buttonWidth/2,19, &smd->shrinkOpts, 0, 0, 0, 0, "Allows 
vertices to move in the inverse direction of their normal");
+
                                uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_REMOVE_UNPROJECTED_FACES, B_MODIFIER_RECALC, "Remove faces",    
lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Remove faces where 
all vertices haven't been projected");
 
-                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE, B_MODIFIER_RECALC, "Cull frontfaces",    
lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Controls whether a 
vertex can be projected to a front face on target");
-                               uiDefButBitS(block, TOG, 
MOD_SHRINKWRAP_CULL_TARGET_BACKFACE,  B_MODIFIER_RECALC, "Cull backfaces",     
lx,(cy-=19),buttonWidth,19, &smd->shrinkOpts, 0, 0, 0, 0, "Controls whether a 
vertex can be projected to a back face on target");

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to