From 463fdb985d6be2c4875aff2d8c5febb0e69d875a Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Wed, 23 Feb 2011 11:57:38 +0000 Subject: add messages svn path=/trunk/externals/pmpd/; revision=14953 --- pmpd-help.pd | 32 +- pmpd.c | 192 ++++++++---- pmpd2d.c | 743 ++++++++++++++++++++++++++++++++++++--------- pmpd3d.c | 959 ++++++++++++++++++++++++++++++++++++++++++++++------------- 4 files changed, 1501 insertions(+), 425 deletions(-) diff --git a/pmpd-help.pd b/pmpd-help.pd index 3bfc6a9..10fd679 100644 --- a/pmpd-help.pd +++ b/pmpd-help.pd @@ -311,7 +311,7 @@ messages.; #X text 101 420 Messages - Different messages are used to control the msd object. They are of three types :; #X text 9 641 CATEGORY: control; -#N canvas 331 59 1139 731 dynamic 0; +#N canvas 318 62 1139 731 dynamic 0; #X obj 5 3 cnv 15 550 15 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 10 85 cnv 15 130 580 empty empty empty 20 12 0 14 -233017 -66577 @@ -453,24 +453,15 @@ linksPos / linksPosName ); 0; #X obj 602 137 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577 0; -#X msg 630 228 massesSpeedsT \$1; -#X msg 630 198 massesForcesT \$1; -#X msg 630 170 massesPosT \$1; -#X text 769 170 Output all masses positions in a table (\$1 = table -name); -#X text 764 199 Output all forces applied on masses in a table (\$1 -= table name); -#X text 768 229 Output all speeds of the masses in a table (\$1 = table -name); #X obj 608 278 cnv 15 150 270 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 602 258 cnv 15 590 15 empty empty empty 20 12 0 14 -158509 -66577 0; #X text 605 258 statistics :; -#X msg 624 291 massesPosMean; +#X msg 613 291 massesPosMean; #X text 768 307 \$1 : none or Id; #X text 605 137 Tables :; -#X msg 625 329 massesPosStd \$1; +#X msg 614 329 massesPosStd \$1; #X text 770 344 \$1 : none or Id; #X text 764 291 output the average position of masses; #X text 765 328 output the standard deviation of masses position; @@ -482,10 +473,19 @@ name); #X text 769 516 \$1 : none or Id; #X text 764 463 output the average position of masses; #X text 764 500 output the standard deviation of masses position; -#X msg 624 416 massesForcesStd \$1; -#X msg 624 378 massesForcesMean; -#X msg 625 465 massesSpeedsMean; -#X msg 624 501 massesSpeedsStd \$1; +#X msg 613 416 massesForcesStd \$1; +#X msg 613 378 massesForcesMean; +#X msg 614 465 massesSpeedsMean; +#X msg 613 501 massesSpeedsStd \$1; +#X msg 610 170 massesPosT \$1 (\$2); +#X msg 610 198 massesForcesT \$1 (\$2); +#X msg 611 228 massesSpeedsT \$1 (\$2); +#X text 769 170 Output all masses positions in a table (\$1 = table +name \, \$2 (optional): Masses Id); +#X text 768 198 Output all forces applied on masses in a table (\$1 += table name \, \$2 (optional): Masses Id); +#X text 768 229 Output all speeds of the masses in a table (\$1 = table +name \, \$2 (optional): Masses Id); #X restore 12 499 pd attributes______; #X text 9 651 KEYWORDS: physical model mass spring damper link; #X text 111 619 01_msdtest.pd; diff --git a/pmpd.c b/pmpd.c index b9b2b85..8c56c11 100644 --- a/pmpd.c +++ b/pmpd.c @@ -1073,70 +1073,154 @@ void pmpd_massesSpeedsL(t_pmpd *x) outlet_anything(x->main_outlet, gensym("massesSpeedsL"),x->nb_mass , pos_list); } -void pmpd_massesPosT(t_pmpd *x, t_symbol *tab_name) +void pmpd_massesPosT(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd_massesSpeedsT(t_pmpd *x, t_symbol *tab_name) +void pmpd_massesSpeedsT(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd_massesForcesT(t_pmpd *x, t_symbol *tab_name) +void pmpd_massesForcesT(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceX; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd_massesPosMean(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) @@ -1484,16 +1568,16 @@ void pmpd_setup(void) class_addmethod(pmpd_class, (t_method)pmpd_massesPosL, gensym("massesPosL"), 0); class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsL, gensym("massesSpeedsL"), 0); class_addmethod(pmpd_class, (t_method)pmpd_massesForcesL, gensym("massesForcesL"), 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesPosT, gensym("massesPosT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsT, gensym("massesSpeedsT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesForcesT, gensym("massesForcesT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesPosT, gensym("massesPosT"), A_GIMME, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsT, gensym("massesSpeedsT"),A_GIMME, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesForcesT, gensym("massesForcesT"),A_GIMME, 0); class_addmethod(pmpd_class, (t_method)pmpd_massesPosL, gensym("massesPosXL"), 0); class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsL, gensym("massesSpeedsXL"), 0); class_addmethod(pmpd_class, (t_method)pmpd_massesForcesL, gensym("massesForcesXL"), 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesPosT, gensym("massesPosXT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsT, gensym("massesSpeedsXT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd_class, (t_method)pmpd_massesForcesT, gensym("massesForcesXT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesPosT, gensym("massesPosXT"), A_GIMME, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesSpeedsT, gensym("massesSpeedsXT"),A_GIMME, 0); + class_addmethod(pmpd_class, (t_method)pmpd_massesForcesT, gensym("massesForcesXT"),A_GIMME, 0); class_addmethod(pmpd_class, (t_method)pmpd_massesPosMean, gensym("massesPosMean"), A_GIMME, 0); class_addmethod(pmpd_class, (t_method)pmpd_massesPosStd, gensym("massesPosStd"),A_GIMME, 0); diff --git a/pmpd2d.c b/pmpd2d.c index b21a2a6..fe35cd9 100644 --- a/pmpd2d.c +++ b/pmpd2d.c @@ -1485,70 +1485,154 @@ void pmpd2d_massesSpeedsXL(t_pmpd2d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsXL"),x->nb_mass , pos_list); } -void pmpd2d_massesPosXT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesPosXT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesSpeedsXT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesSpeedsXT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesForcesXT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesForcesXT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceX; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd2d_massesPosYL(t_pmpd2d *x) @@ -1587,70 +1671,154 @@ void pmpd2d_massesSpeedsYL(t_pmpd2d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsYL"),x->nb_mass , pos_list); } -void pmpd2d_massesPosYT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesPosYT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesSpeedsYT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesSpeedsYT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesForcesYT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesForcesYT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceY; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd2d_massesPosL(t_pmpd2d *x) @@ -1692,73 +1860,349 @@ void pmpd2d_massesSpeedsL(t_pmpd2d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsL"),2*x->nb_mass , pos_list); } -void pmpd2d_massesPosT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesPosT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/2); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].posX; - vec[2*i+1].w_float = x->mass[i].posY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-1)/2); + for (i=0; i < taille_max ; i++) + { + vec[2*i ].w_float = x->mass[i].posX; + vec[2*i+1].w_float = x->mass[i].posY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-1) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posX; + i++; + vec[i].w_float = x->mass[j].posY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesSpeedsT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesSpeedsT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/2); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].speedX; - vec[2*i+1].w_float = x->mass[i].speedY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-1)/2); + for (i=0; i < taille_max ; i++) + { + vec[2*i ].w_float = x->mass[i].speedX; + vec[2*i+1].w_float = x->mass[i].speedY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-1) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedX; + i++; + vec[i].w_float = x->mass[j].speedY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd2d_massesForcesT(t_pmpd2d *x, t_symbol *tab_name) +void pmpd2d_massesForcesT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/2); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].forceX; - vec[2*i+1].w_float = x->mass[i].forceY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-1)/2); + for (i=0; i < taille_max ; i++) + { + vec[2*i ].w_float = x->mass[i].forceX; + vec[2*i+1].w_float = x->mass[i].forceY; + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-1) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceX; + i++; + vec[i].w_float = x->mass[j].forceY; + i++; + } + j++; + } + garray_redraw(a); } - garray_redraw(a); + } +} + +void pmpd2d_massesPosNormL(t_pmpd2d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i < x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].posX)+sqr(x->mass[i].posY))); + } + outlet_anything(x->main_outlet, gensym("massesPosNormL"),x->nb_mass , pos_list); +} + +void pmpd2d_massesForcesNormL(t_pmpd2d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i< x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].forceX)+sqr(x->mass[i].forceY))); + } + outlet_anything(x->main_outlet, gensym("massesForcesNormL"),x->nb_mass , pos_list); +} + +void pmpd2d_massesSpeedsNormL(t_pmpd2d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i< x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].speedX)+sqr(x->mass[i].speedY))); } + outlet_anything(x->main_outlet, gensym("massesSpeedsNormL"),x->nb_mass , pos_list); +} + +void pmpd2d_massesPosNormT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].posX)+sqr(x->mass[i].posY)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].posX)+sqr(x->mass[j].posY)); + i++; + } + j++; + } + garray_redraw(a); + } + } +} + +void pmpd2d_massesSpeedsNormT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].speedX)+sqr(x->mass[i].speedY)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].speedX)+sqr(x->mass[j].speedY)); + i++; + } + j++; + } + garray_redraw(a); + } + } +} + +void pmpd2d_massesForcesNormT(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].forceX)+sqr(x->mass[i].forceY)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].forceX)+sqr(x->mass[j].forceY)); + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd2d_massesPosMean(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) @@ -2223,6 +2667,13 @@ void pmpd2d_setup(void) class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesSpeedsYT, gensym("massesSpeedsYT"),A_DEFSYMBOL, 0); class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesForcesYT, gensym("massesForcesYT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesPosNormL, gensym("massesPosNormL"), 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesSpeedsNormL, gensym("massesSpeedsNormL"), 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesForcesNormL, gensym("massesForcesNormL"), 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesPosNormT, gensym("massesPosNormT"), A_GIMME, 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesSpeedsNormT, gensym("massesSpeedsNormT"), A_GIMME, 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesForcesNormT, gensym("massesForcesNormT"), A_GIMME, 0); + class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesPosMean, gensym("massesPosMean"), A_GIMME, 0); class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesPosStd, gensym("massesPosStd"),A_GIMME, 0); class_addmethod(pmpd2d_class, (t_method)pmpd2d_massesForcesMean,gensym("massesForcesMean"), A_GIMME, 0); diff --git a/pmpd3d.c b/pmpd3d.c index 4a84a4d..51e668a 100644 --- a/pmpd3d.c +++ b/pmpd3d.c @@ -1678,70 +1678,154 @@ void pmpd3d_massesSpeedsXL(t_pmpd3d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsXL"),x->nb_mass , pos_list); } -void pmpd3d_massesPosXT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesPosXT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesSpeedsXT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesSpeedsXT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedX; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesForcesXT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesForcesXT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceX; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceX; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceX; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd3d_massesPosYL(t_pmpd3d *x) @@ -1780,70 +1864,154 @@ void pmpd3d_massesSpeedsYL(t_pmpd3d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsYL"),x->nb_mass , pos_list); } -void pmpd3d_massesPosYT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesPosYT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesSpeedsYT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesSpeedsYT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedY; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesForcesYT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesForcesYT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceY; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceY; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceY; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd3d_massesPosZL(t_pmpd3d *x) @@ -1882,70 +2050,154 @@ void pmpd3d_massesSpeedsZL(t_pmpd3d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsZL"),x->nb_mass , pos_list); } -void pmpd3d_massesPosZT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesPosZT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].posZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].posZ; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posZ; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesSpeedsZT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesSpeedsZT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].speedZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].speedZ; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedZ; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesForcesZT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesForcesZT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[i].w_float = x->mass[i].forceZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = x->mass[i].forceZ; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceZ; + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd3d_massesPosL(t_pmpd3d *x) @@ -1990,76 +2242,358 @@ void pmpd3d_massesSpeedsL(t_pmpd3d *x) outlet_anything(x->main_outlet, gensym("massesSpeedsL"),3*x->nb_mass , pos_list); } -void pmpd3d_massesPosT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesPosT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/3); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].posX; - vec[2*i+1].w_float = x->mass[i].posY; - vec[2*i+2].w_float = x->mass[i].posZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-2)/3); + for (i=0; i < taille_max ; i++) + { + vec[3*i ].w_float = x->mass[i].posX; + vec[3*i+1].w_float = x->mass[i].posY; + vec[3*i+2].w_float = x->mass[i].posZ; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-2) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].posX; + i++; + vec[i].w_float = x->mass[j].posY; + i++; + vec[i].w_float = x->mass[j].posZ; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesSpeedsT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesSpeedsT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/3); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].speedX; - vec[2*i+1].w_float = x->mass[i].speedY; - vec[2*i+2].w_float = x->mass[i].speedZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-2)/3); + for (i=0; i < taille_max ; i++) + { + vec[3*i ].w_float = x->mass[i].speedX; + vec[3*i+1].w_float = x->mass[i].speedY; + vec[3*i+2].w_float = x->mass[i].speedZ; + } + garray_redraw(a); } - garray_redraw(a); - } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-2) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].speedX; + i++; + vec[i].w_float = x->mass[j].speedY; + i++; + vec[i].w_float = x->mass[j].speedZ; + i++; + } + j++; + } + garray_redraw(a); + } + } } -void pmpd3d_massesForcesT(t_pmpd3d *x, t_symbol *tab_name) +void pmpd3d_massesForcesT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) { - int i, vecsize; + int i, j, vecsize; t_garray *a; - t_word *vec; - - if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) - pd_error(x, "%s: no such array", tab_name->s_name); - else if (!garray_getfloatwords(a, &vecsize, &vec)) - pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); - else - { - int taille_max = x->nb_mass; - taille_max = min(taille_max, vecsize/3); - for (i=0; i < taille_max ; i++) + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else { - vec[2*i ].w_float = x->mass[i].forceX; - vec[2*i+1].w_float = x->mass[i].forceY; - vec[2*i+1].w_float = x->mass[i].forceZ; + int taille_max = x->nb_mass; + taille_max = min(taille_max, (vecsize-2)/3); + for (i=0; i < taille_max ; i++) + { + vec[3*i ].w_float = x->mass[i].forceX; + vec[3*i+1].w_float = x->mass[i].forceY; + vec[3*i+2].w_float = x->mass[i].forceZ; + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize-2) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = x->mass[j].forceX; + i++; + vec[i].w_float = x->mass[j].forceY; + i++; + vec[i].w_float = x->mass[j].forceZ; + i++; + } + j++; + } + garray_redraw(a); } - garray_redraw(a); + } +} + +void pmpd3d_massesPosNormL(t_pmpd3d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i < x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].posX)+sqr(x->mass[i].posY)+sqr(x->mass[i].posZ))); + } + outlet_anything(x->main_outlet, gensym("massesPosNormL"),x->nb_mass , pos_list); +} + +void pmpd3d_massesForcesNormL(t_pmpd3d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i< x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].forceX)+sqr(x->mass[i].forceY)+sqr(x->mass[i].forceZ))); + } + outlet_anything(x->main_outlet, gensym("massesForcesNormL"),x->nb_mass , pos_list); +} + +void pmpd3d_massesSpeedsNormL(t_pmpd3d *x) +{ + int i; + t_atom pos_list[x->nb_mass]; + + for (i=0; i< x->nb_mass; i++) + { + SETFLOAT(&(pos_list[i]),sqrt(sqr(x->mass[i].speedX)+sqr(x->mass[i].speedY)+sqr(x->mass[i].speedZ))); } + outlet_anything(x->main_outlet, gensym("massesSpeedsNormL"),x->nb_mass , pos_list); +} + +void pmpd3d_massesPosNormT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].posX)+sqr(x->mass[i].posY)+sqr(x->mass[i].posZ)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].posX)+sqr(x->mass[j].posY)+sqr(x->mass[i].posZ)); + i++; + } + j++; + } + garray_redraw(a); + } + } +} + +void pmpd3d_massesSpeedsNormT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].speedX)+sqr(x->mass[i].speedY)+sqr(x->mass[i].speedZ)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].speedX)+sqr(x->mass[j].speedY)+sqr(x->mass[i].speedZ)); + i++; + } + j++; + } + garray_redraw(a); + } + } +} + +void pmpd3d_massesForcesNormT(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) +{ + int i, j, vecsize; + t_garray *a; + t_word *vec; + + if ( (argc==1) & (argv[0].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + int taille_max = x->nb_mass; + taille_max = min(taille_max, vecsize); + for (i=0; i < taille_max ; i++) + { + vec[i].w_float = sqrt(sqr(x->mass[i].forceX)+sqr(x->mass[i].forceY)+sqr(x->mass[i].forceZ)); + } + garray_redraw(a); + } + } + else + if ( (argc==2) & (argv[0].a_type == A_SYMBOL) & (argv[1].a_type == A_SYMBOL) ) + { + t_symbol *tab_name = atom_getsymbolarg(0, argc, argv); + if (!(a = (t_garray *)pd_findbyclass(tab_name, garray_class))) + pd_error(x, "%s: no such array", tab_name->s_name); + else if (!garray_getfloatwords(a, &vecsize, &vec)) + pd_error(x, "%s: bad template for tabwrite", tab_name->s_name); + else + { + i = 0; + j = 0; + while ((i < vecsize) & (j < x->nb_mass)) + { + if (atom_getsymbolarg(1,argc,argv) == x->mass[j].Id) + { + vec[i].w_float = sqrt(sqr(x->mass[j].forceX)+sqr(x->mass[j].forceY)+sqr(x->mass[i].forceZ)); + i++; + } + j++; + } + garray_redraw(a); + } + } } void pmpd3d_massesPosMean(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv) @@ -2560,30 +3094,37 @@ void pmpd3d_setup(void) class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosL, gensym("massesPosL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsL, gensym("massesSpeedsL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesL, gensym("massesForcesL"), 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosT, gensym("massesPosT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsT, gensym("massesSpeedsT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesT, gensym("massesForcesT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosT, gensym("massesPosT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsT, gensym("massesSpeedsT"),A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesT, gensym("massesForcesT"),A_GIMME, 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosXL, gensym("massesPosXL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsXL, gensym("massesSpeedsXL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesXL, gensym("massesForcesXL"), 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosXT, gensym("massesPosXT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsXT, gensym("massesSpeedsXT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesXT, gensym("massesForcesXT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosXT, gensym("massesPosXT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsXT, gensym("massesSpeedsXT"),A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesXT, gensym("massesForcesXT"),A_GIMME, 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosYL, gensym("massesPosYL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsYL, gensym("massesSpeedsYL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesYL, gensym("massesForcesYL"), 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosYT, gensym("massesPosYT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsYT, gensym("massesSpeedsYT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesYT, gensym("massesForcesYT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosYT, gensym("massesPosYT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsYT, gensym("massesSpeedsYT"),A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesYT, gensym("massesForcesYT"),A_GIMME, 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosZL, gensym("massesPosZL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsZL, gensym("massesSpeedsZL"), 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesZL, gensym("massesForcesZL"), 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosZT, gensym("massesPosZT"), A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsZT, gensym("massesSpeedsZT"),A_DEFSYMBOL, 0); - class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesZT, gensym("massesForcesZT"),A_DEFSYMBOL, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosZT, gensym("massesPosZT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsZT, gensym("massesSpeedsZT"),A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesZT, gensym("massesForcesZT"),A_GIMME, 0); + + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosNormL, gensym("massesPosNormL"), 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsNormL, gensym("massesSpeedsNormL"), 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesNormL, gensym("massesForcesNormL"), 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosNormT, gensym("massesPosNormT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesSpeedsNormT, gensym("massesSpeedsNormT"), A_GIMME, 0); + class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesForcesNormT, gensym("massesForcesNormT"), A_GIMME, 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosMean, gensym("massesPosMean"), A_GIMME, 0); class_addmethod(pmpd3d_class, (t_method)pmpd3d_massesPosStd, gensym("massesPosStd"),A_GIMME, 0); -- cgit v1.2.1