aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Henry <nusmuk@users.sourceforge.net>2011-02-23 11:57:38 +0000
committerCyrille Henry <nusmuk@users.sourceforge.net>2011-02-23 11:57:38 +0000
commit463fdb985d6be2c4875aff2d8c5febb0e69d875a (patch)
tree0385b1373b191b48a6b6ed26266dcbdf4332b721
parentc3f1a99d1d22f945dc8996ac6fb25bb2fe72b3ac (diff)
add messages
svn path=/trunk/externals/pmpd/; revision=14953
-rw-r--r--pmpd-help.pd32
-rw-r--r--pmpd.c192
-rw-r--r--pmpd2d.c743
-rw-r--r--pmpd3d.c959
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);