aboutsummaryrefslogtreecommitdiff
path: root/pmpd.c
diff options
context:
space:
mode:
authorN.N. <nimon@users.sourceforge.net>2012-08-09 12:47:33 +0000
committerN.N. <nimon@users.sourceforge.net>2012-08-09 12:47:33 +0000
commit0264220d542fff8b4f1fae9cad9f8b6d595ebf6b (patch)
treefff28d1c10a4fb7a7a0a9cb247077eac0399264e /pmpd.c
parent68b32efaa58ce0e24bda9eff2d925844407a9012 (diff)
updated closestMass function with Id
svn path=/trunk/externals/pmpd/; revision=16164
Diffstat (limited to 'pmpd.c')
-rw-r--r--pmpd.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/pmpd.c b/pmpd.c
index 5c9f041..f681fb3 100644
--- a/pmpd.c
+++ b/pmpd.c
@@ -1765,25 +1765,50 @@ void pmpd_grabMass(t_pmpd *x, t_float posX, t_float grab)
}
}
-void pmpd_closestMass(t_pmpd *x, t_float posX)
+void pmpd_closestMass(t_pmpd *x, t_symbol *s, int argc, t_atom *argv)
{
t_float dist, tmp;
t_int i;
t_atom std_out[2];
+ t_float posX;
+ posX = atom_getfloatarg(0, argc, argv);
- if ((x->nb_mass > 0))
- {
- dist = x->mass[0].posX - posX;
- for (i=1; i<x->nb_mass; i++)
+ if ( (argc == 2) && (argv[1].a_type == A_SYMBOL) )
+ {
+ //t_symbol *mass_name = atom_getsymbolarg(2, argc, argv);
+ if ((x->nb_mass > 0))
{
- tmp = x->mass[i].posX - posX;
- if (tmp < dist)
+ dist = 1000000000;//sqr(x->mass[0].posX - posX) + sqr(x->mass[0].posY - posY);
+ for (i=0; i<x->nb_mass; i++)
{
- dist = tmp;
- x->grab_nb= i;
+ if (atom_getsymbolarg(1,argc,argv) == x->mass[i].Id)
+ {
+ tmp = x->mass[i].posX - posX;
+ if (tmp < dist)
+ {
+ dist = tmp;
+ x->grab_nb= i;
+ }
+ }
+ }
+ }
+ }
+ else {
+ if ((x->nb_mass > 0))
+ {
+ dist = x->mass[0].posX - posX;
+ for (i=1; i<x->nb_mass; i++)
+ {
+ tmp = x->mass[i].posX - posX;
+ 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);
outlet_anything(x->main_outlet, gensym("closestMass"),2,std_out);
@@ -1893,6 +1918,6 @@ void pmpd_setup(void)
*/
class_addmethod(pmpd_class, (t_method)pmpd_grabMass, gensym("grabMass"), A_DEFFLOAT, A_DEFFLOAT, 0);
- class_addmethod(pmpd_class, (t_method)pmpd_closestMass, gensym("closestMass"), A_DEFFLOAT, 0);
+ class_addmethod(pmpd_class, (t_method)pmpd_closestMass, gensym("closestMass"), A_GIMME, 0);
}