From 6395184c7d0180c4defbe3f8efae8ee0e67b57da Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Sun, 25 May 2014 15:50:54 +0000 Subject: add massInfo and linkInfo messages svn path=/trunk/externals/pmpd/; revision=17315 --- pmpd2d_stat.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) (limited to 'pmpd2d_stat.c') diff --git a/pmpd2d_stat.c b/pmpd2d_stat.c index da4df05..260b14d 100644 --- a/pmpd2d_stat.c +++ b/pmpd2d_stat.c @@ -889,3 +889,216 @@ void pmpd2d_linkLengthSpeedStd(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) outlet_anything(x->main_outlet, gensym("linkLengthSpeedStd"),3 , std_out); } +void pmpd2d_massInfo(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) +{ + t_atom info[11]; + int i, j; + + if (argc==0) + { + for(i=0; i < x->nb_mass; i++) + { + SETFLOAT(&(info[0]), i); + SETSYMBOL(&(info[1]), x->mass[i].Id); + SETFLOAT(&(info[2]), x->mass[i].mobile); + SETFLOAT(&(info[3]), 1/x->mass[i].invM); + SETFLOAT(&(info[4]), x->mass[i].D2); + SETFLOAT(&(info[5]), x->mass[i].posX); + SETFLOAT(&(info[6]), x->mass[i].posY); + SETFLOAT(&(info[7]), x->mass[i].speedX); + SETFLOAT(&(info[8]), x->mass[i].speedY); + SETFLOAT(&(info[9]), x->mass[i].forceX); + SETFLOAT(&(info[10]), x->mass[i].forceY); + outlet_anything(x->main_outlet, gensym("massInfo"), 11, info); + } + SETFLOAT(&(info[0]), x->nb_mass); + outlet_anything(x->main_outlet, gensym("massNumber"), 1, info); + } + else if ((argc==1) && (argv[0].a_type == A_SYMBOL)) + { + j=0; + for(i=0; i < x->nb_mass; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->mass[j].Id) + { + SETFLOAT(&(info[0]), i); + SETSYMBOL(&(info[1]), x->mass[i].Id); + SETFLOAT(&(info[2]), x->mass[i].mobile); + SETFLOAT(&(info[3]), 1/(x->mass[i].invM)); + SETFLOAT(&(info[4]), x->mass[i].D2); + SETFLOAT(&(info[5]), x->mass[i].posX); + SETFLOAT(&(info[6]), x->mass[i].posY); + SETFLOAT(&(info[7]), x->mass[i].speedX); + SETFLOAT(&(info[8]), x->mass[i].speedY); + SETFLOAT(&(info[9]), x->mass[i].forceX); + SETFLOAT(&(info[10]), x->mass[i].forceY); + outlet_anything(x->main_outlet, gensym("massInfo"), 11, info); + j++; + } + } + SETFLOAT(&(info[0]), j); + outlet_anything(x->main_outlet, gensym("massNumber"), 1, info); + } + else if ((argc==1) && (argv[0].a_type == A_FLOAT)) + { + i=(int)atom_getfloatarg(0, argc, argv); + i=max(i,0); + i=min(i,x->nb_mass-1); + + SETFLOAT(&(info[0]), i); + SETSYMBOL(&(info[1]), x->mass[i].Id); + SETFLOAT(&(info[2]), x->mass[i].mobile); + SETFLOAT(&(info[3]), 1/x->mass[i].invM); + SETFLOAT(&(info[4]), x->mass[i].D2); + SETFLOAT(&(info[5]), x->mass[i].posX); + SETFLOAT(&(info[6]), x->mass[i].posY); + SETFLOAT(&(info[7]), x->mass[i].speedX); + SETFLOAT(&(info[8]), x->mass[i].speedY); + SETFLOAT(&(info[9]), x->mass[i].forceX); + SETFLOAT(&(info[10]), x->mass[i].forceY); + outlet_anything(x->main_outlet, gensym("massInfo"), 11, info); + } +} + +void pmpd2d_linkInfo(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) +{ + t_atom info[14]; + int i, j, k; + + if (argc==0) + { + for(i=0; i < x->nb_link; i++) + { + SETFLOAT(&(info[1]), i); + SETSYMBOL(&(info[2]), x->link[i].Id); + SETFLOAT(&(info[3]), x->link[i].active); + SETFLOAT(&(info[4]), x->link[i].mass1->num); + SETFLOAT(&(info[5]), x->link[i].mass2->num); + SETFLOAT(&(info[6]), x->link[i].K); + SETFLOAT(&(info[7]), x->link[i].D); + + switch(x->link[i].lType) + { + case 0 : + SETSYMBOL(&(info[0]), gensym("link")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + break; + case 1 : + SETSYMBOL(&(info[0]), gensym("tLink")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + SETFLOAT(&(info[12]), x->link[i].VX); + SETFLOAT(&(info[13]), x->link[i].VY); + outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info); + break; + case 2 : + SETSYMBOL(&(info[0]), gensym("tabLink")); + SETSYMBOL(&(info[8]), x->link[i].arrayK); + SETFLOAT(&(info[9]), x->link[i].K_L); + SETSYMBOL(&(info[10]), x->link[i].arrayD); + SETFLOAT(&(info[11]), x->link[i].D_L); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + } + } + SETFLOAT(&(info[0]), x->nb_link); + outlet_anything(x->main_outlet, gensym("linkNumber"), 1, info); + } + else if ((argc==1) && (argv[0].a_type == A_SYMBOL)) + { + j=0; + for(i=0; i < x->nb_link; i++) + { + if (atom_getsymbolarg(0,argc,argv) == x->link[j].Id) + { + SETFLOAT(&(info[1]), i); + SETSYMBOL(&(info[2]), x->link[i].Id); + SETFLOAT(&(info[3]), x->link[i].active); + SETFLOAT(&(info[4]), x->link[i].mass1->num); + SETFLOAT(&(info[5]), x->link[i].mass2->num); + SETFLOAT(&(info[6]), x->link[i].K); + SETFLOAT(&(info[7]), x->link[i].D); + + switch(x->link[i].lType) + { + case 0 : + SETSYMBOL(&(info[0]), gensym("link")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + break; + case 1 : + SETSYMBOL(&(info[0]), gensym("tLink")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + SETFLOAT(&(info[12]), x->link[i].VX); + SETFLOAT(&(info[13]), x->link[i].VY); + outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info); + break; + case 2 : + SETSYMBOL(&(info[0]), gensym("tabLink")); + SETSYMBOL(&(info[8]), x->link[i].arrayK); + SETFLOAT(&(info[9]), x->link[i].K_L); + SETSYMBOL(&(info[10]), x->link[i].arrayD); + SETFLOAT(&(info[11]), x->link[i].D_L); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + } + } + j++; + } + SETFLOAT(&(info[0]), j); + outlet_anything(x->main_outlet, gensym("linkNumber"), 1, info); + } + else if ((argc==1) && (argv[0].a_type == A_FLOAT)) + { + i=(int)atom_getfloatarg(0, argc, argv); + i=max(i,0); + i=min(i,x->nb_link-1); + + SETFLOAT(&(info[1]), i); + SETSYMBOL(&(info[2]), x->link[i].Id); + SETFLOAT(&(info[3]), x->link[i].active); + SETFLOAT(&(info[4]), x->link[i].mass1->num); + SETFLOAT(&(info[5]), x->link[i].mass2->num); + SETFLOAT(&(info[6]), x->link[i].K); + SETFLOAT(&(info[7]), x->link[i].D); + + switch(x->link[i].lType) + { + case 0 : + SETSYMBOL(&(info[0]), gensym("link")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + break; + case 1 : + SETSYMBOL(&(info[0]), gensym("tLink")); + SETFLOAT(&(info[8]), x->link[i].Pow); + SETFLOAT(&(info[9]), x->link[i].L); + SETFLOAT(&(info[10]), x->link[i].Lmin); + SETFLOAT(&(info[11]), x->link[i].Lmax); + SETFLOAT(&(info[12]), x->link[i].VX); + SETFLOAT(&(info[13]), x->link[i].VY); + outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info); + break; + case 2 : + SETSYMBOL(&(info[0]), gensym("tabLink")); + SETSYMBOL(&(info[8]), x->link[i].arrayK); + SETFLOAT(&(info[9]), x->link[i].K_L); + SETSYMBOL(&(info[10]), x->link[i].arrayD); + SETFLOAT(&(info[11]), x->link[i].D_L); + outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info); + } + } +} -- cgit v1.2.1