svn merge -r 12478:12495 https://svn.blender.org/svnroot/bf-blender/trunk/blender
authorDaniel Genrich <daniel.genrich@gmx.net>
Tue, 6 Nov 2007 12:10:59 +0000 (12:10 +0000)
committerDaniel Genrich <daniel.genrich@gmx.net>
Tue, 6 Nov 2007 12:10:59 +0000 (12:10 +0000)
1  2 
source/blender/blenkernel/intern/modifier.c
source/blender/makesdna/DNA_modifier_types.h
source/blender/src/buttons_editing.c
source/blender/src/transform_conversions.c

index 22692f503e1797b744e4f09fef657f103c00541b,8e60964c28deb7bba2e1deff62d4b236f08dac3f..531cd78b3b20295728210a713586e8d0c0b1d6bb
@@@ -5379,86 -5142,10 +5385,87 @@@ static void meshdeformModifier_deformVe
  
        meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
  
-       dm->release(dm);
+       if(dm != derivedData)
+               dm->release(dm);
  }
  
 +
 +/* PointCache - example DONT USE SERIOUSLY */
 +static void pointCacheModifier_initData(ModifierData *md)
 +{
 +      PointCacheModifierData *pcm= (PointCacheModifierData*) md;
 +
 +      pcm->mode= ePointCache_Read; /* read */
 +}
 +static void pointCacheModifier_freeData(ModifierData *md)
 +{
 +      PointCacheModifierData *pcm = (PointCacheModifierData*) md;
 +}
 +static void pointCacheModifier_copyData(ModifierData *md, ModifierData *target)
 +{
 +      PointCacheModifierData *pcm= (PointCacheModifierData*) md;
 +      PointCacheModifierData *tpcm= (PointCacheModifierData*) target;
 +
 +      tpcm->mode = pcm->mode;
 +}
 +static int pointCacheModifier_dependsOnTime(ModifierData *md) 
 +{
 +      return 1;
 +}
 +CustomDataMask pointCacheModifier_requiredDataMask(ModifierData *md)
 +{
 +      PointCacheModifierData *pcm= (PointCacheModifierData*) md;
 +      CustomDataMask dataMask = 0;
 +      return dataMask;
 +}
 +
 +static void pointCacheModifier_deformVerts(
 +                                         ModifierData *md, Object *ob, DerivedMesh *derivedData,
 +      float (*vertexCos)[3], int numVerts)
 +{
 +      PointCacheModifierData *pcm = (PointCacheModifierData*) md;
 +
 +      FILE *fp = NULL;
 +      int i;
 +      int stack_index = modifiers_indexInObject(ob, md);
 +      int totvert;
 +      MVert *mvert, *mv;
 +      
 +      DerivedMesh *dm;
 +
 +      if(derivedData) dm = CDDM_copy(derivedData);
 +      else if(ob->type==OB_MESH) dm = CDDM_from_mesh(ob->data, ob);
 +      else return;
 +
 +      CDDM_apply_vert_coords(dm, vertexCos);
 +      CDDM_calc_normals(dm);
 +      
 +      mvert = mv = dm->getVertArray(dm);
 +      totvert = dm->getNumVerts(dm);
 +                      
 +      if (pcm->mode == ePointCache_Read) {
 +              fp = PTCache_id_fopen((ID *)ob, 'w', G.scene->r.cfra, stack_index);
 +              if (!fp) return;
 +              for (mv=mvert, i=0; i<totvert; mv++, i++) {
 +                      fwrite(&mv->co, sizeof(float), 3, fp);
 +              }
 +              fclose(fp);
 +      } else if (pcm->mode == ePointCache_Write) {
 +              float pt[3];
 +              fp = PTCache_id_fopen((ID *)ob, 'r', G.scene->r.cfra, stack_index);
 +              if (!fp) return;
 +              for (mv=mvert, i=0; i<totvert; mv++, i++) {
 +                      float *co = vertexCos[i];
 +                      if ((fread(co, sizeof(float), 3, fp)) != 3) {
 +                              break;
 +                      }
 +              }
 +              fclose(fp);
 +      }
 +      
 +      if(!derivedData) dm->release(dm);
 +}
 +
  /***/
  
  static ModifierTypeInfo typeArr[NUM_MODIFIER_TYPES];
Simple merge