From 3efe550f03e2fd226b01d251110b25ba85a4d1e4 Mon Sep 17 00:00:00 2001 From: Cyrille Henry Date: Fri, 16 Jan 2015 17:28:08 +0000 Subject: set messages now accept 2 float as Id svn path=/trunk/externals/pmpd/; revision=17411 --- pmpd2d-help.pd | 12 +++- pmpd2d_set.c | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 205 insertions(+), 20 deletions(-) diff --git a/pmpd2d-help.pd b/pmpd2d-help.pd index d90b4a9..28450e9 100644 --- a/pmpd2d-help.pd +++ b/pmpd2d-help.pd @@ -1,4 +1,4 @@ -#N canvas 263 234 572 750 10; +#N canvas 261 239 572 750 10; #X declare -lib Gem; #X obj 4 309 cnv 15 550 15 empty empty empty 20 12 0 14 -158509 -66577 0; @@ -506,7 +506,7 @@ filter on link id is possible; #X text 184 174 output a message for every link :; #X text 213 190 linkLength symbolId number lengthX lengthY length; #X restore 12 466 pd links_attributes ___; -#N canvas 274 160 935 531 creation____________ 0; +#N canvas 272 165 935 531 creation____________ 0; #X obj 5 75 cnv 15 450 15 empty empty empty 20 12 0 14 -158509 -66577 0; #X obj 5 3 cnv 15 900 15 empty empty empty 20 12 0 14 -233017 -66577 @@ -577,7 +577,7 @@ the model. Messages create links and masses or destroy them.; links. They work as general links but their calculation is made following a vector.; #X restore 12 407 pd creation____________; -#N canvas 92 162 1031 818 dynamic 0; +#N canvas 90 90 1077 895 dynamic 0; #X obj 5 3 cnv 15 900 15 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 10 85 cnv 15 150 670 empty empty empty 20 12 0 14 -233017 -66577 @@ -706,6 +706,12 @@ uses this argument as the value applied to all masses (or links); #X msg 484 227 addL \$1 \$2 [\$3]; #X text 611 207 Set initial lenght of link(s) / add value to link length ; +#X text 529 822 Set messages can also accept 2 float for mass / link +Id :; +#X msg 603 841 setK 1 200 0.3; +#X text 533 841 exemple :; +#X text 536 863 will set rigidity of all link from number 1 to number +200 to 0.3, f 65; #X restore 12 427 pd dynamic settings ___; #X text 112 658 54_pmpd2dtest.pd; #X obj 325 272 print; diff --git a/pmpd2d_set.c b/pmpd2d_set.c index d958bda..eecf730 100644 --- a/pmpd2d_set.c +++ b/pmpd2d_set.c @@ -1,6 +1,7 @@ void pmpd2d_setK(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -12,6 +13,16 @@ void pmpd2d_setK(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].K = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].K = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_link; i++) @@ -66,7 +77,8 @@ void pmpd2d_setK(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setD(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -78,6 +90,16 @@ void pmpd2d_setD(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].D = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].D = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_link; i++) @@ -133,7 +155,8 @@ void pmpd2d_setD(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setPow(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -145,6 +168,16 @@ void pmpd2d_setPow(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].Pow = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].Pow = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_link; i++) @@ -199,7 +232,8 @@ void pmpd2d_setPow(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setDEnv(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -211,6 +245,16 @@ void pmpd2d_setDEnv(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].D2 = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->mass[i].D2 = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_mass; i++) @@ -272,7 +316,8 @@ void pmpd2d_setDEnv(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setDEnvOffset(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -284,6 +329,16 @@ void pmpd2d_setDEnvOffset(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].D2offset = atom_getfloatarg(0, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->mass[i].D2offset = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_mass; i++) @@ -345,7 +400,8 @@ void pmpd2d_setDEnvOffset(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -357,6 +413,16 @@ void pmpd2d_setL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].L = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].L = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { // set a class of link to a specific length for (i=0; i< x->nb_link; i++) @@ -427,7 +493,8 @@ void pmpd2d_setL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_addL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i, offset; + int tmp, end, i, offset; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -439,6 +506,16 @@ void pmpd2d_addL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].L += atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].L += valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { // set a class of link to a specific length for (i=0; i< x->nb_link; i++) @@ -509,7 +586,8 @@ void pmpd2d_addL(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setLCurrent(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, i, end; + t_float valeur; if ( ( argc == 1 ) && ( argv[0].a_type == A_FLOAT ) ) { // set a link to it's current length @@ -533,6 +611,16 @@ void pmpd2d_setLCurrent(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) i = max(0, min( x->nb_link-1, i)); x->link[i].L = mix(x->link[i].L,x->link[i].distance,atom_getfloatarg(1, argc, argv)); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->link[i].L = mix(x->link[i].L,x->link[i].distance,valeur); + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { // set a class of link to a mix between it's curent length and it's size for (i=0; i< x->nb_link; i++) @@ -547,7 +635,9 @@ void pmpd2d_setLCurrent(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setLKTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; + t_float valeur; + t_float K_l = atom_getfloatarg(1, argc, argv); if (K_l <= 0) K_l = 1; if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) @@ -556,6 +646,17 @@ void pmpd2d_setLKTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].K_L = K_l; } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + if (valeur <= 0) valeur = 1; + for (i=tmp; i<=end; i++) + x->link[i].K_L = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_link; i++) @@ -570,7 +671,9 @@ void pmpd2d_setLKTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setLDTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; + t_float valeur; + t_float D_l = atom_getfloatarg(1, argc, argv); if (D_l <= 0) D_l = 1; if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) @@ -579,6 +682,17 @@ void pmpd2d_setLDTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].D_L = D_l; } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + if (valeur <= 0) valeur = 1; + for (i=tmp; i<=end; i++) + x->link[i].D_L = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_link; i++) @@ -593,7 +707,7 @@ void pmpd2d_setLDTab(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setLinkId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_SYMBOL ) ) { @@ -601,6 +715,15 @@ void pmpd2d_setLinkId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].Id = atom_getsymbolarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_SYMBOL ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + for (i=tmp; i<=end; i++) + x->link[i].Id = atom_getsymbolarg(1, argc, argv); + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_link; i++) @@ -615,7 +738,7 @@ void pmpd2d_setLinkId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setMassId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_SYMBOL ) ) { @@ -623,6 +746,15 @@ void pmpd2d_setMassId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].Id = atom_getsymbolarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_SYMBOL ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + for (i=tmp; i<=end; i++) + x->mass[i].Id = atom_getsymbolarg(1, argc, argv); + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_mass; i++) @@ -637,7 +769,7 @@ void pmpd2d_setMassId(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setFixed(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 1) && (argv[0].a_type == A_FLOAT ) ) { @@ -645,6 +777,15 @@ void pmpd2d_setFixed(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].mobile = 0; } + else if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + for (i=tmp; i<=end; i++) + x->mass[i].mobile = 0; + } else if ( (argc == 1) && (argv[0].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_mass; i++) @@ -659,7 +800,7 @@ void pmpd2d_setFixed(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setMobile(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 1) && (argv[0].a_type == A_FLOAT ) ) { @@ -667,6 +808,15 @@ void pmpd2d_setMobile(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].mobile = 1; } + else if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + for (i=tmp; i<=end; i++) + x->mass[i].mobile = 0; + } else if ( (argc == 1) && (argv[0].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_mass; i++) @@ -827,7 +977,7 @@ void pmpd2d_setActivei(t_pmpd2d *x, int i) void pmpd2d_setActive(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 1) && ( argv[0].a_type == A_FLOAT ) ) { @@ -835,6 +985,15 @@ void pmpd2d_setActive(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); pmpd2d_setActivei(x,tmp); } + else if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + for (i=tmp; i<=end; i++) + pmpd2d_setActivei(x,i); + } else if ( (argc == 1) && ( argv[0].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_link; i++) @@ -856,7 +1015,7 @@ void pmpd2d_setActive(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_setInactive(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { - int tmp, i; + int tmp, end, i; if ( (argc == 1) && ( argv[0].a_type == A_FLOAT ) ) { @@ -864,6 +1023,15 @@ void pmpd2d_setInactive(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_link-1, tmp)); x->link[tmp].active = 0; } + else if ( (argc == 2) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_link-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_link-1, end)); + for (i=tmp; i<=end; i++) + x->link[i].active = 0; + } else if ( (argc == 1) && ( argv[0].a_type == A_SYMBOL ) ) { for (i=0; i< x->nb_link; i++) @@ -1127,7 +1295,8 @@ void pmpd2d_posY(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) void pmpd2d_overdamp(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) { // set the overdamped factor to a mass - t_int tmp, i; + t_int tmp, end, i; + t_float valeur; t_garray *a; int npoints, n; t_word *vec; @@ -1139,6 +1308,16 @@ void pmpd2d_overdamp(t_pmpd2d *x, t_symbol *s, int argc, t_atom *argv) tmp = max(0, min( x->nb_mass-1, tmp)); x->mass[tmp].overdamp = atom_getfloatarg(1, argc, argv); } + else if ( (argc == 3) && ( argv[0].a_type == A_FLOAT ) && ( argv[1].a_type == A_FLOAT ) && ( argv[2].a_type == A_FLOAT ) ) + { + tmp = atom_getfloatarg(0, argc, argv); + tmp = max(0, min( x->nb_mass-1, tmp)); + end = atom_getfloatarg(1, argc, argv); + end = max(tmp, min( x->nb_mass-1, end)); + valeur = atom_getfloatarg(2, argc, argv); + for (i=tmp; i<=end; i++) + x->mass[i].overdamp = valeur; + } else if ( (argc == 2) && ( argv[0].a_type == A_SYMBOL ) && ( argv[1].a_type == A_FLOAT ) ) { for (i=0; i< x->nb_mass; i++) -- cgit v1.2.1