Added simple UI to configure some shrinkwrap modifier properties (simple commit to...
authorAndre Susano Pinto <andresusanopinto@gmail.com>
Wed, 23 Apr 2008 12:44:10 +0000 (12:44 +0000)
committerAndre Susano Pinto <andresusanopinto@gmail.com>
Wed, 23 Apr 2008 12:44:10 +0000 (12:44 +0000)
source/blender/blenkernel/intern/modifier.c
source/blender/makesdna/DNA_modifier_types.h
source/blender/src/buttons_editing.c

index 0cd6035b9dc53e8571913be8d9d75871dad9bb15..8903bfd310605ad7581384075c7d3b36f44c54fe 100644 (file)
@@ -6970,6 +6970,17 @@ static void meshdeformModifier_deformVertsEM(
                dm->release(dm);
 }
 
+
+/* Shrinkwrap */
+
+static DerivedMesh *shrinkwrapModifier_applyModifier(
+               ModifierData *md, Object *ob, DerivedMesh *derivedData,
+  int useRenderParams, int isFinalCalc)
+{
+       return derivedData;
+}
+
+
 /***/
 
 static ModifierTypeInfo typeArr[NUM_MODIFIER_TYPES];
@@ -7290,6 +7301,12 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
                mti->requiredDataMask = explodeModifier_requiredDataMask;
                mti->applyModifier = explodeModifier_applyModifier;
 
+               mti = INIT_TYPE(Shrinkwrap);
+               mti->type = eModifierTypeType_Constructive;
+               mti->flags = eModifierTypeFlag_AcceptsMesh
+                               | eModifierTypeFlag_SupportsMapping;
+               mti->applyModifier = shrinkwrapModifier_applyModifier;
+
                typeArrInit = 0;
 #undef INIT_TYPE
        }
index b7b438174747b0a7d8be78c38c81e9932826438a..416bb58ab531c5d570354759016f2a6518adb4a7 100644 (file)
@@ -35,6 +35,7 @@ typedef enum ModifierType {
        eModifierType_Cloth,
        eModifierType_Collision,
        eModifierType_Bevel,
+       eModifierType_Shrinkwrap,
        NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -488,4 +489,17 @@ typedef struct ExplodeModifierData {
        float protect;
 } ExplodeModifierData;
 
+typedef struct ShrinkwrapModifierData {
+       ModifierData modifier;
+
+       char name[32];                  /* optional vertexgroup name */
+       short shrinkType;               /* shrink type projection */
+       short pad[3];
+} ShrinkwrapModifierData;
+
+/* Shrinkwrap->shrinkType */
+#define MOD_SHRINKWRAP_NEAREST 0
+#define MOD_SHRINKWRAP_NORMAL  1
+
+
 #endif
index f1c356a0a778737460f8c64798dbac9adb4a7393..8f1b8e56df7f5ebd6567e9789296144113fec073 100644 (file)
@@ -1820,6 +1820,8 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
                        height = 94;
                } else if (md->type==eModifierType_Explode) {
                        height = 94;
+               } else if (md->type==eModifierType_Shrinkwrap) {
+                       height = 48;
                }
                                                        /* 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, ""); 
@@ -2432,6 +2434,14 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
                        uiDefButBitS(block, TOG, eExplodeFlag_Unborn, B_MODIFIER_RECALC, "Unborn",      lx, (cy-=19), buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are unborn");
                        uiDefButBitS(block, TOG, eExplodeFlag_Alive, B_MODIFIER_RECALC, "Alive",        lx+buttonWidth/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are alive");
                        uiDefButBitS(block, TOG, eExplodeFlag_Dead, B_MODIFIER_RECALC, "Dead",  lx+buttonWidth*2/3, cy, buttonWidth/3,19, &emd->flag, 0, 0, 0, 0, "Show mesh when particles are dead");
+               } else if (md->type==eModifierType_Shrinkwrap) {
+                       ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
+
+                       char shrinktypemenu[]="Shrinkwrap type%t|nearest point %x0|normal projection %x1";
+                       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.");
+
+                       but=uiDefBut(block, TEX, B_MODIFIER_RECALC, "VGroup: ",         lx, (cy-=19), buttonWidth,19, &smd->name, 0.0, 31.0, 0, 0, "Vertex Group name");
+                       uiButSetCompleteFunc(but, autocomplete_vgroup, (void *)ob);
                }
 
                uiBlockEndAlign(block);