From 7d2a7d2cb03f9a238babc6d17949cb89d64d02ec Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Wed, 1 May 2013 16:45:34 +0000 Subject: add all pmpd3d new functionality to pmpd svn path=/trunk/externals/pmpd/; revision=17107 --- pmpd_get.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) (limited to 'pmpd_get.c') diff --git a/pmpd_get.c b/pmpd_get.c index 325e632..51759d6 100644 --- a/pmpd_get.c +++ b/pmpd_get.c @@ -286,3 +286,220 @@ void pmpd_get(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) error("not get attribute"); } +void pmpd_massPos(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_atom toout[3]; + + if ((argc>0)&&(argv[0].a_type == A_FLOAT)) + { + i = atom_getfloatarg(0, argc, argv); + if ( (i>=0) && (inb_mass) ) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].posX); + outlet_anything(x->main_outlet, gensym("massPos"), 3, toout); + } + } + else + if ((argc>0)&&(argv[0].a_type == A_SYMBOL)) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), atom_getsymbolarg(0,argc,argv)); + if ( atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].posX); + outlet_anything(x->main_outlet, gensym("massPos"), 3, toout); + } + } + } + else + if (argc == 0) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].posX); + outlet_anything(x->main_outlet, gensym("massPos"), 3, toout); + } + } +} + +void pmpd_massSpeed(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_atom toout[3]; + + if ((argc>0)&&(argv[0].a_type == A_FLOAT)) + { + i = atom_getfloatarg(0, argc, argv); + if ( (i>=0) && (inb_mass) ) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].speedX); + outlet_anything(x->main_outlet, gensym("massSpeed"), 3, toout); + } + } + else + if ((argc>0)&&(argv[0].a_type == A_SYMBOL)) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), atom_getsymbolarg(0,argc,argv)); + if ( atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].speedX); + outlet_anything(x->main_outlet, gensym("massSpeed"), 3, toout); + } + } + } + else + if (argc == 0) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].speedX); + outlet_anything(x->main_outlet, gensym("massSpeed"), 3, toout); + } + } +} + +void pmpd_massForce(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_atom toout[3]; + + if ((argc>0)&&(argv[0].a_type == A_FLOAT)) + { + i = atom_getfloatarg(0, argc, argv); + if ( (i>=0) && (inb_mass) ) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].forceX); + outlet_anything(x->main_outlet, gensym("massForce"), 3, toout); + } + } + else + if ((argc>0)&&(argv[0].a_type == A_SYMBOL)) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), atom_getsymbolarg(0,argc,argv)); + if ( atom_getsymbolarg(0,argc,argv) == x->mass[i].Id) + { + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].forceX); + outlet_anything(x->main_outlet, gensym("massForce"), 3, toout); + } + } + } + else + if (argc == 0) + { + for (i=0; i< x->nb_mass; i++) + { + SETSYMBOL(&(toout[0]), x->mass[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->mass[i].forceX); + outlet_anything(x->main_outlet, gensym("massForce"), 3, toout); + } + } +} + +void pmpd_linkEnd(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_atom toout[4]; + + if ((argc>0)&&(argv[0].a_type == A_FLOAT)) + { + i = atom_getfloatarg(0, argc, argv); + if ( (i>=0) && (inb_link) ) + { + SETSYMBOL(&(toout[0]), x->link[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->link[i].mass1->posX); + SETFLOAT(&(toout[3]), x->link[i].mass2->posX); + outlet_anything(x->main_outlet, gensym("linkEnd"), 4, toout); + } + } + else + if ((argc>0)&&(argv[0].a_type == A_SYMBOL)) + { + SETSYMBOL(&(toout[0]), atom_getsymbolarg(0,argc,argv)); + for (i=0; i< x->nb_link; i++) + { + if ( atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->link[i].mass1->posX); + SETFLOAT(&(toout[3]), x->link[i].mass2->posX); + outlet_anything(x->main_outlet, gensym("linkEnd"), 4, toout); + } + } + } + else + if (argc == 0) + { + for (i=0; i< x->nb_link; i++) + { + SETSYMBOL(&(toout[0]), x->link[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), x->link[i].mass1->posX); + SETFLOAT(&(toout[3]), x->link[i].mass2->posX); + outlet_anything(x->main_outlet, gensym("linkEnd"), 4, toout); + } + } +} + +void pmpd_linkPos(t_pmpd *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_atom toout[3]; + + if ((argc>0)&&(argv[0].a_type == A_FLOAT)) + { + i = atom_getfloatarg(0, argc, argv); + if ( (i>=0) && (inb_link) ) + { + SETSYMBOL(&(toout[0]), x->link[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), (x->link[i].mass1->posX+x->link[i].mass2->posX)/2); + outlet_anything(x->main_outlet, gensym("linkPos"), 3, toout); + } + } + else + if ((argc>0)&&(argv[0].a_type == A_SYMBOL)) + { + SETSYMBOL(&(toout[0]), atom_getsymbolarg(0,argc,argv)); + for (i=0; i< x->nb_link; i++) + { + if ( atom_getsymbolarg(0,argc,argv) == x->link[i].Id) + { + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), (x->link[i].mass1->posX+x->link[i].mass2->posX)/2); + outlet_anything(x->main_outlet, gensym("linkPos"), 3, toout); + } + } + } + else + if (argc == 0) + { + for (i=0; i< x->nb_link; i++) + { + SETSYMBOL(&(toout[0]), x->link[i].Id); + SETFLOAT(&(toout[1]), i); + SETFLOAT(&(toout[2]), (x->link[i].mass1->posX+x->link[i].mass2->posX)/2); + outlet_anything(x->main_outlet, gensym("linkPos"), 3, toout); + } + } +} -- cgit v1.2.1