From 0264220d542fff8b4f1fae9cad9f8b6d595ebf6b Mon Sep 17 00:00:00 2001 From: "N.N." Date: Thu, 9 Aug 2012 12:47:33 +0000 Subject: updated closestMass function with Id svn path=/trunk/externals/pmpd/; revision=16164 --- pmpd2d.c | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'pmpd2d.c') diff --git a/pmpd2d.c b/pmpd2d.c index 451867e..f92b4d4 100644 --- a/pmpd2d.c +++ b/pmpd2d.c @@ -3668,25 +3668,52 @@ void pmpd2d_grabMass(t_pmpd2d *x, t_float posX, t_float posY, t_float grab) } } -void pmpd2d_closestMass(t_pmpd2d *x, t_float posX, t_float posY) +void pmpd2d_closestMass(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv)// t_float posX, t_float posY) { t_float dist, tmp; t_int i; t_atom std_out[3]; - - if ((x->nb_mass > 0)) - { - dist = sqr(x->mass[0].posX - posX) + sqr(x->mass[0].posY - posY); - for (i=1; inb_mass; i++) + + t_float posX, posY; + posX = atom_getfloatarg(0, argc, argv); + posY = atom_getfloatarg(1, argc, argv); + if ( (argc == 3) && (argv[2].a_type == A_SYMBOL) ) + { + //t_symbol *mass_name = atom_getsymbolarg(2, argc, argv); + if ((x->nb_mass > 0)) { - tmp = sqr(x->mass[i].posX - posX) + sqr(x->mass[i].posY - posY); - if (tmp < dist) + dist = 1000000000;//sqr(x->mass[0].posX - posX) + sqr(x->mass[0].posY - posY); + for (i=0; inb_mass; i++) { - dist = tmp; - x->grab_nb= i; + if (atom_getsymbolarg(2,argc,argv) == x->mass[i].Id) + { + tmp = sqr(x->mass[i].posX - posX) + sqr(x->mass[i].posY - posY); + if (tmp < dist) + { + dist = tmp; + x->grab_nb= i; + } + } } } } + else { + if ((x->nb_mass > 0)) + { + dist = sqr(x->mass[0].posX - posX) + sqr(x->mass[0].posY - posY); + for (i=1; inb_mass; i++) + { + tmp = sqr(x->mass[i].posX - posX) + sqr(x->mass[i].posY - posY); + if (tmp < dist) + { + dist = tmp; + x->grab_nb= i; + } + } + } + } + + SETFLOAT(&(std_out[0]),x->grab_nb); SETFLOAT(&(std_out[1]), x->mass[x->grab_nb].posX); SETFLOAT(&(std_out[2]), x->mass[x->grab_nb].posY); @@ -3838,7 +3865,7 @@ void pmpd2d_setup(void) */ class_addmethod(pmpd2d_class, (t_method)pmpd2d_grabMass, gensym("grabMass"), A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT, 0); - class_addmethod(pmpd2d_class, (t_method)pmpd2d_closestMass, gensym("closestMass"), A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_closestMass, gensym("closestMass"), A_GIMME, 0); } -- cgit v1.2.1