aboutsummaryrefslogtreecommitdiff
path: root/pmpd3d_stat.c
diff options
context:
space:
mode:
Diffstat (limited to 'pmpd3d_stat.c')
-rw-r--r--pmpd3d_stat.c224
1 files changed, 224 insertions, 0 deletions
diff --git a/pmpd3d_stat.c b/pmpd3d_stat.c
index 6f25cbe..3e03c05 100644
--- a/pmpd3d_stat.c
+++ b/pmpd3d_stat.c
@@ -1023,3 +1023,227 @@ void pmpd3d_linkLengthSpeedStd(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv)
outlet_anything(x->main_outlet, gensym("linkLengthSpeedStd"),4 , std_out);
}
+
+
+void pmpd3d_massInfo(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_atom info[14];
+ int i, j;
+
+ if (argc==0)
+ {
+ for(i=0; i < x->nb_mass; i++)
+ {
+ SETFLOAT(&(info[0]), i);
+ SETSYMBOL(&(info[1]), x->mass[i].Id);
+ SETFLOAT(&(info[2]), x->mass[i].mobile);
+ SETFLOAT(&(info[3]), 1/x->mass[i].invM);
+ SETFLOAT(&(info[4]), x->mass[i].D2);
+ SETFLOAT(&(info[5]), x->mass[i].posX);
+ SETFLOAT(&(info[6]), x->mass[i].posY);
+ SETFLOAT(&(info[7]), x->mass[i].posZ);
+ SETFLOAT(&(info[8]), x->mass[i].speedX);
+ SETFLOAT(&(info[9]), x->mass[i].speedY);
+ SETFLOAT(&(info[10]), x->mass[i].speedZ);
+ SETFLOAT(&(info[11]), x->mass[i].forceX);
+ SETFLOAT(&(info[12]), x->mass[i].forceY);
+ SETFLOAT(&(info[13]), x->mass[i].forceZ);
+ outlet_anything(x->main_outlet, gensym("massInfo"), 14, info);
+ }
+ SETFLOAT(&(info[0]), x->nb_mass);
+ outlet_anything(x->main_outlet, gensym("massNumber"), 1, info);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_SYMBOL))
+ {
+ j=0;
+ for(i=0; i < x->nb_mass; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->mass[j].Id)
+ {
+ SETFLOAT(&(info[0]), i);
+ SETSYMBOL(&(info[1]), x->mass[i].Id);
+ SETFLOAT(&(info[2]), x->mass[i].mobile);
+ SETFLOAT(&(info[3]), 1/x->mass[i].invM);
+ SETFLOAT(&(info[4]), x->mass[i].D2);
+ SETFLOAT(&(info[5]), x->mass[i].posX);
+ SETFLOAT(&(info[6]), x->mass[i].posY);
+ SETFLOAT(&(info[7]), x->mass[i].posZ);
+ SETFLOAT(&(info[8]), x->mass[i].speedX);
+ SETFLOAT(&(info[9]), x->mass[i].speedY);
+ SETFLOAT(&(info[10]), x->mass[i].speedZ);
+ SETFLOAT(&(info[11]), x->mass[i].forceX);
+ SETFLOAT(&(info[12]), x->mass[i].forceY);
+ SETFLOAT(&(info[13]), x->mass[i].forceZ);
+ outlet_anything(x->main_outlet, gensym("massInfo"), 14, info);
+ j++;
+ }
+ }
+ SETFLOAT(&(info[0]), j);
+ outlet_anything(x->main_outlet, gensym("massNumber"), 1, info);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_FLOAT))
+ {
+ i=(int)atom_getfloatarg(0, argc, argv);
+ i=max(i,0);
+ i=min(i,x->nb_mass-1);
+
+ SETFLOAT(&(info[0]), i);
+ SETSYMBOL(&(info[1]), x->mass[i].Id);
+ SETFLOAT(&(info[2]), x->mass[i].mobile);
+ SETFLOAT(&(info[3]), 1/x->mass[i].invM);
+ SETFLOAT(&(info[4]), x->mass[i].D2);
+ SETFLOAT(&(info[5]), x->mass[i].posX);
+ SETFLOAT(&(info[6]), x->mass[i].posY);
+ SETFLOAT(&(info[7]), x->mass[i].posZ);
+ SETFLOAT(&(info[8]), x->mass[i].speedX);
+ SETFLOAT(&(info[9]), x->mass[i].speedY);
+ SETFLOAT(&(info[10]), x->mass[i].speedZ);
+ SETFLOAT(&(info[11]), x->mass[i].forceX);
+ SETFLOAT(&(info[12]), x->mass[i].forceY);
+ SETFLOAT(&(info[13]), x->mass[i].forceZ);
+ outlet_anything(x->main_outlet, gensym("massInfo"), 14, info);
+ }
+}
+
+void pmpd3d_linkInfo(t_pmpd3d *x, t_symbol *s, int argc, t_atom *argv)
+{
+ t_atom info[14];
+ int i, j, k;
+
+ if (argc==0)
+ {
+ for(i=0; i < x->nb_link; i++)
+ {
+ SETFLOAT(&(info[1]), i);
+ SETSYMBOL(&(info[2]), x->link[i].Id);
+ SETFLOAT(&(info[3]), x->link[i].active);
+ SETFLOAT(&(info[4]), x->link[i].mass1->num);
+ SETFLOAT(&(info[5]), x->link[i].mass2->num);
+ SETFLOAT(&(info[6]), x->link[i].K);
+ SETFLOAT(&(info[7]), x->link[i].D);
+
+ switch(x->link[i].lType)
+ {
+ case 0 :
+ SETSYMBOL(&(info[0]), gensym("link"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ break;
+ case 1 :
+ SETSYMBOL(&(info[0]), gensym("tLink"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ SETFLOAT(&(info[12]), x->link[i].VX);
+ SETFLOAT(&(info[13]), x->link[i].VY);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info);
+ break;
+ case 2 :
+ SETSYMBOL(&(info[0]), gensym("tabLink"));
+ SETSYMBOL(&(info[8]), x->link[i].arrayK);
+ SETFLOAT(&(info[9]), x->link[i].K_L);
+ SETSYMBOL(&(info[10]), x->link[i].arrayD);
+ SETFLOAT(&(info[11]), x->link[i].D_L);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ }
+ }
+ SETFLOAT(&(info[0]), x->nb_link);
+ outlet_anything(x->main_outlet, gensym("linkNumber"), 1, info);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_SYMBOL))
+ {
+ j=0;
+ for(i=0; i < x->nb_link; i++)
+ {
+ if (atom_getsymbolarg(0,argc,argv) == x->link[j].Id)
+ {
+ SETFLOAT(&(info[1]), i);
+ SETSYMBOL(&(info[2]), x->link[i].Id);
+ SETFLOAT(&(info[3]), x->link[i].active);
+ SETFLOAT(&(info[4]), x->link[i].mass1->num);
+ SETFLOAT(&(info[5]), x->link[i].mass2->num);
+ SETFLOAT(&(info[6]), x->link[i].K);
+ SETFLOAT(&(info[7]), x->link[i].D);
+
+ switch(x->link[i].lType)
+ {
+ case 0 :
+ SETSYMBOL(&(info[0]), gensym("link"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ break;
+ case 1 :
+ SETSYMBOL(&(info[0]), gensym("tLink"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ SETFLOAT(&(info[12]), x->link[i].VX);
+ SETFLOAT(&(info[13]), x->link[i].VY);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info);
+ break;
+ case 2 :
+ SETSYMBOL(&(info[0]), gensym("tabLink"));
+ SETSYMBOL(&(info[8]), x->link[i].arrayK);
+ SETFLOAT(&(info[9]), x->link[i].K_L);
+ SETSYMBOL(&(info[10]), x->link[i].arrayD);
+ SETFLOAT(&(info[11]), x->link[i].D_L);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ }
+ }
+ j++;
+ }
+ SETFLOAT(&(info[0]), j);
+ outlet_anything(x->main_outlet, gensym("linkNumber"), 1, info);
+ }
+ else if ((argc==1) && (argv[0].a_type == A_FLOAT))
+ {
+ i=(int)atom_getfloatarg(0, argc, argv);
+ i=max(i,0);
+ i=min(i,x->nb_link-1);
+
+ SETFLOAT(&(info[1]), i);
+ SETSYMBOL(&(info[2]), x->link[i].Id);
+ SETFLOAT(&(info[3]), x->link[i].active);
+ SETFLOAT(&(info[4]), x->link[i].mass1->num);
+ SETFLOAT(&(info[5]), x->link[i].mass2->num);
+ SETFLOAT(&(info[6]), x->link[i].K);
+ SETFLOAT(&(info[7]), x->link[i].D);
+
+ switch(x->link[i].lType)
+ {
+ case 0 :
+ SETSYMBOL(&(info[0]), gensym("link"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ break;
+ case 1 :
+ SETSYMBOL(&(info[0]), gensym("tLink"));
+ SETFLOAT(&(info[8]), x->link[i].Pow);
+ SETFLOAT(&(info[9]), x->link[i].L);
+ SETFLOAT(&(info[10]), x->link[i].Lmin);
+ SETFLOAT(&(info[11]), x->link[i].Lmax);
+ SETFLOAT(&(info[12]), x->link[i].VX);
+ SETFLOAT(&(info[13]), x->link[i].VY);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 14, info);
+ break;
+ case 2 :
+ SETSYMBOL(&(info[0]), gensym("tabLink"));
+ SETSYMBOL(&(info[8]), x->link[i].arrayK);
+ SETFLOAT(&(info[9]), x->link[i].K_L);
+ SETSYMBOL(&(info[10]), x->link[i].arrayD);
+ SETFLOAT(&(info[11]), x->link[i].D_L);
+ outlet_anything(x->main_outlet, gensym("linkInfo"), 12, info);
+ }
+ }
+}