Paste Code
Paste Blends
Paste Images

diff -r .../blenderSVN/source/blender/blenkernel/intern/particle_system.c /home/raul/Documentos/BlenderSPH/blender/source/blender/blenkernel/intern/particle_system.c

static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra, float cfra)
{
ParticleSettings *part = sim->psys->part;
ParticleData *pa = sim->psys->particles + p;
EffectedPoint epoint;
ParticleKey states[5], tkey;
float timestep = psys_get_timestep(sim);
-- float force[3],impulse[3],dx[4][3],dv[4][3];
++ float force[3],impulse[3],dx[4][3],dv[4][3],diff[3];
float dtime=dfra*timestep, time, pa_mass=part->mass, fac, fra=sim->psys->cfra;
int i, steps=1;

.............. in other part of the same function ........

switch(part->integrator){
case PART_INT_EULER:
steps=1;
break;
case PART_INT_MIDPOINT:
steps=2;
break;
case PART_INT_RK4:
steps=4;
break;
++ case PART_INT_VERLET:
++ steps=1;
++ break;
}

.............. in other part of the same function ........

VECADDFAC(pa->state.vel,states->vel,dv[0],1.0f/6.0f);
VECADDFAC(pa->state.vel,pa->state.vel,dv[1],1.0f/3.0f);
VECADDFAC(pa->state.vel,pa->state.vel,dv[2],1.0f/3.0f);
VECADDFAC(pa->state.vel,pa->state.vel,dv[3],1.0f/6.0f);
}
break;

++ case PART_INT_VERLET: /* Verlet integration */
++ VECADDFAC(pa->state.vel,pa->state.vel,force,dtime);
++ VecMulf(pa->state.vel,dtime);
++ VecAddf(pa->state.co,pa->state.co,pa->state.vel);
++ VecSubf(diff,pa->state.co,pa->prev_state.co);
++ VecMulf(diff,1.f/dtime);
++ VECCOPY(pa->state.vel,diff);
++ break;
}
}


diff -r .../blenderSVN/source/blender/makesdna/DNA_particle_types.h /home/raul/Documentos/BlenderSPH/blender/source/blender/makesdna/DNA_particle_types.h

/* part->integrator */
#define PART_INT_EULER 0
#define PART_INT_MIDPOINT 1
#define PART_INT_RK4 2
++ #define PART_INT_VERLET 3


diff -r .../blenderSVN/source/blender/makesrna/intern/rna_particle.c /home/raul/Documentos/BlenderSPH/blender/source/blender/makesrna/intern/rna_particle.c

static EnumPropertyItem integrator_type_items[] = {
{PART_INT_EULER, "EULER", 0, "Euler", ""},
{PART_INT_MIDPOINT, "MIDPOINT", 0, "Midpoint", ""},
{PART_INT_RK4, "RK4", 0, "RK4", ""},
++ {PART_INT_VERLET, "VERLET", 0, "Verlet", ""},
{0, NULL, 0, NULL, NULL}
};

  1.  
  2. diff -r .../blenderSVN/source/blender/blenkernel/intern/particle_system.c /home/raul/Documentos/BlenderSPH/blender/source/blender/blenkernel/intern/particle_system.c
  3.  
  4. static void apply_particle_forces(ParticleSimulationData *sim, int p, float dfra, float cfra)
  5. {
  6.         ParticleSettings *part = sim->psys->part;
  7.         ParticleData *pa = sim->psys->particles + p;
  8.         EffectedPoint epoint;
  9.         ParticleKey states[5], tkey;
  10.         float timestep = psys_get_timestep(sim);
  11. --      float force[3],impulse[3],dx[4][3],dv[4][3];
  12. ++      float force[3],impulse[3],dx[4][3],dv[4][3],diff[3];
  13.         float dtime=dfra*timestep, time, pa_mass=part->mass, fac, fra=sim->psys->cfra;
  14.         int i, steps=1;
  15.  
  16. .............. in other part of the same function ........
  17.  
  18. switch(part->integrator){
  19.                 case PART_INT_EULER:
  20.                         steps=1;
  21.                         break;
  22.                 case PART_INT_MIDPOINT:
  23.                         steps=2;
  24.                         break;
  25.                 case PART_INT_RK4:
  26.                         steps=4;
  27.                         break;
  28. ++              case PART_INT_VERLET:
  29. ++                      steps=1;
  30. ++                      break;
  31.         }
  32.        
  33. .............. in other part of the same function ........
  34.  
  35.         VECADDFAC(pa->state.vel,states->vel,dv[0],1.0f/6.0f);
  36.                                                 VECADDFAC(pa->state.vel,pa->state.vel,dv[1],1.0f/3.0f);
  37.                                                 VECADDFAC(pa->state.vel,pa->state.vel,dv[2],1.0f/3.0f);
  38.                                                 VECADDFAC(pa->state.vel,pa->state.vel,dv[3],1.0f/6.0f);
  39.                                 }  
  40.                                 break;
  41.  
  42. ++                      case PART_INT_VERLET:   /* Verlet integration */
  43. ++                             VECADDFAC(pa->state.vel,pa->state.vel,force,dtime);
  44. ++                             VecMulf(pa->state.vel,dtime);
  45. ++                             VecAddf(pa->state.co,pa->state.co,pa->state.vel);                                                                                                                                       
  46. ++                             VecSubf(diff,pa->state.co,pa->prev_state.co);                                           
  47. ++                             VecMulf(diff,1.f/dtime);
  48. ++                             VECCOPY(pa->state.vel,diff);     
  49. ++                             break;
  50.                 }
  51.         }
  52.  
  53.  
  54. diff -r .../blenderSVN/source/blender/makesdna/DNA_particle_types.h /home/raul/Documentos/BlenderSPH/blender/source/blender/makesdna/DNA_particle_types.h
  55.  
  56.   /* part->integrator */
  57.   #define PART_INT_EULER                0
  58.   #define PART_INT_MIDPOINT     1
  59.   #define PART_INT_RK4          2
  60. ++  #define PART_INT_VERLET         3
  61.  
  62.  
  63. diff -r .../blenderSVN/source/blender/makesrna/intern/rna_particle.c /home/raul/Documentos/BlenderSPH/blender/source/blender/makesrna/intern/rna_particle.c
  64.  
  65.         static EnumPropertyItem integrator_type_items[] = {
  66.                 {PART_INT_EULER, "EULER", 0, "Euler", ""},
  67.                 {PART_INT_MIDPOINT, "MIDPOINT", 0, "Midpoint", ""},
  68.                 {PART_INT_RK4, "RK4", 0, "RK4", ""},
  69. ++              {PART_INT_VERLET, "VERLET", 0, "Verlet", ""},
  70.                 {0, NULL, 0, NULL, NULL}
  71.         };
  72.  
  73.  
go to heaven