svn merge ^/trunk/blender -r41226:41227 .
[blender.git] / source / blender / modifiers / intern / MOD_displace.c
index 4e60150e339e7c3a2098a383f22af619cebfe613..5bb8f0aefbf4ca201ac25c195a8a1286f0daf68b 100644 (file)
@@ -1,34 +1,32 @@
 /*
-* $Id$
-*
-* ***** BEGIN GPL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software  Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-* The Original Code is Copyright (C) 2005 by the Blender Foundation.
-* All rights reserved.
-*
-* Contributor(s): Daniel Dunbar
-*                 Ton Roosendaal,
-*                 Ben Batt,
-*                 Brecht Van Lommel,
-*                 Campbell Barton
-*
-* ***** END GPL LICENSE BLOCK *****
-*
-*/
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software  Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2005 by the Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Daniel Dunbar
+ *                 Ton Roosendaal,
+ *                 Ben Batt,
+ *                 Brecht Van Lommel,
+ *                 Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
 
 /** \file blender/modifiers/intern/MOD_displace.c
  *  \ingroup modifiers
@@ -40,6 +38,7 @@
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
+#include "BLI_string.h"
 
 
 #include "BKE_cdderivedmesh.h"
@@ -75,11 +74,11 @@ static void copyData(ModifierData *md, ModifierData *target)
        tdmd->texture = dmd->texture;
        tdmd->strength = dmd->strength;
        tdmd->direction = dmd->direction;
-       strncpy(tdmd->defgrp_name, dmd->defgrp_name, 32);
+       BLI_strncpy(tdmd->defgrp_name, dmd->defgrp_name, 32);
        tdmd->midlevel = dmd->midlevel;
        tdmd->texmapping = dmd->texmapping;
        tdmd->map_object = dmd->map_object;
-       strncpy(tdmd->uvlayer_name, dmd->uvlayer_name, 32);
+       BLI_strncpy(tdmd->uvlayer_name, dmd->uvlayer_name, 32);
 }
 
 static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
@@ -134,6 +133,12 @@ static void foreachIDLink(ModifierData *md, Object *ob,
        foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
 }
 
+static void foreachTexLink(ModifierData *md, Object *ob,
+                                          TexWalkFunc walk, void *userData)
+{
+       walk(userData, ob, md, "texture");
+}
+
 static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
 {
        DisplaceModifierData *dmd = (DisplaceModifierData*) md;
@@ -169,7 +174,7 @@ static void displaceModifier_do(
 {
        int i;
        MVert *mvert;
-       MDeformVert *dvert = NULL;
+       MDeformVert *dvert;
        int defgrp_index;
        float (*tex_co)[3];
        float weight= 1.0f; /* init value unused but some compilers may complain */
@@ -177,11 +182,8 @@ static void displaceModifier_do(
        if(!dmd->texture) return;
        if(dmd->strength == 0.0f) return;
 
-       defgrp_index = defgroup_name_index(ob, dmd->defgrp_name);
-
        mvert = CDDM_get_verts(dm);
-       if(defgrp_index >= 0)
-               dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+       modifier_get_vgroup(ob, dm, dmd->defgrp_name, &dvert, &defgrp_index);
 
        tex_co = MEM_callocN(sizeof(*tex_co) * numVerts,
                                 "displaceModifier_do tex_co");
@@ -287,4 +289,5 @@ ModifierTypeInfo modifierType_Displace = {
        /* dependsOnNormals */  dependsOnNormals,
        /* foreachObjectLink */ foreachObjectLink,
        /* foreachIDLink */     foreachIDLink,
+       /* foreachTexLink */    foreachTexLink,
 };