Update of /cvsroot/pure-data/externals/nusmuk/msd3D In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30071/msd3D
Modified Files: filet.pd help-msd3D.pd main.cpp Log Message: MSD Version 0.02
Index: main.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/nusmuk/msd3D/main.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** main.cpp 15 Apr 2005 18:14:27 -0000 1.2 --- main.cpp 20 Apr 2005 15:33:15 -0000 1.3 *************** *** 107,111 ****
// --------------------------------------------------------------- RESET ! void m_reset() { --- 107,111 ----
// --------------------------------------------------------------- RESET ! // ---------------------------------------------------------------------- void m_reset() { *************** *** 127,131 ****
// -------------------------------------------------------------- COMPUTE ! void m_bang() { --- 127,131 ----
// -------------------------------------------------------------- COMPUTE ! // ----------------------------------------------------------------------- void m_bang() { *************** *** 136,161 **** for (i=0; i<nb_link; i++) { // compute link forces ! distance = sqrt(pow(link[i]->mass1->posX-link[i]->mass2->posX,2) + ! pow(link[i]->mass1->posY-link[i]->mass2->posY,2) + pow(link[i]->mass1->posZ-link[i]->mass2->posZ,2)); ! F = link[i]->K1 * (distance - link[i]->longueur) ; // F = k1(x1-x2) ! F += link[i]->D1 * (distance - link[i]->distance_old) ; // F = F + D1(v1-v2) if (distance != 0) { ! Fx = F * (link[i]->mass1->posX - link[i]->mass2->posX)/distance; ! Fy = F * (link[i]->mass1->posY - link[i]->mass2->posY)/distance; ! Fz = F * (link[i]->mass1->posZ - link[i]->mass2->posZ)/distance; } ! link[i]->mass1->forceX -= Fx; ! link[i]->mass1->forceX -= link[i]->D2*link[i]->mass1->speedX; ! link[i]->mass2->forceX += Fx; ! link[i]->mass2->forceX -= link[i]->D2*link[i]->mass2->speedX; ! link[i]->mass1->forceY -= Fy; ! link[i]->mass1->forceY -= link[i]->D2*link[i]->mass1->speedY; ! link[i]->mass2->forceY += Fy; ! link[i]->mass2->forceY -= link[i]->D2*link[i]->mass2->speedY; ! link[i]->mass1->forceZ -= Fz; ! link[i]->mass1->forceZ -= link[i]->D2*link[i]->mass1->speedZ; ! link[i]->mass2->forceZ += Fz; ! link[i]->mass2->forceZ -= link[i]->D2*link[i]->mass2->speedZ; ! link[i]->distance_old = distance; }
--- 136,161 ---- for (i=0; i<nb_link; i++) { // compute link forces ! distance = sqrt(pow(link[i]->mass1->posX-link[i]->mass2->posX,2) + pow(link[i]->mass1->posY ! -link[i]->mass2->posY,2) + pow(link[i]->mass1->posZ-link[i]->mass2->posZ,2)); // L[n] ! F = link[i]->K1 * (distance - link[i]->longueur) ; // F = K1(L[n] - L[0]) ! F += link[i]->D1 * (distance - link[i]->distance_old) ; // F = F + D1(L[n] - L[n-1]) if (distance != 0) { ! Fx = F * (link[i]->mass1->posX - link[i]->mass2->posX)/distance; // Fx[n] = F * Lx[n]/L[n] ! Fy = F * (link[i]->mass1->posY - link[i]->mass2->posY)/distance; // Fy[n] = F * Ly[n]/L[n] ! Fz = F * (link[i]->mass1->posZ - link[i]->mass2->posZ)/distance; // Fy[n] = F * Lz[n]/L[n] } ! link[i]->mass1->forceX -= Fx; // Fx1[n] = -Fx ! link[i]->mass1->forceX -= link[i]->D2*link[i]->mass1->speedX; // Fx1[n] = Fx1[n] - D2 * vx1[n-1] ! link[i]->mass2->forceX += Fx; // Fx2[n] = Fx ! link[i]->mass2->forceX -= link[i]->D2*link[i]->mass2->speedX; // Fx2[n] = Fx2[n] - D2 * vx2[n-1] ! link[i]->mass1->forceY -= Fy; // Fy1[n] = -Fy ! link[i]->mass1->forceY -= link[i]->D2*link[i]->mass1->speedY; // Fy1[n] = Fy1[n] - D2 * vy1[n-1] ! link[i]->mass2->forceY += Fy; // Fy2[n] = Fy ! link[i]->mass2->forceY -= link[i]->D2*link[i]->mass2->speedY; // Fy2[n] = Fy2[n] - D2 * vy2[n-1] ! link[i]->mass1->forceZ -= Fz; // Fz1[n] = -Fz ! link[i]->mass1->forceZ -= link[i]->D2*link[i]->mass1->speedZ; // Fz1[n] = Fz1[n] - D2 * vz1[n-1] ! link[i]->mass2->forceZ += Fz; // Fz2[n] = Fz ! link[i]->mass2->forceZ -= link[i]->D2*link[i]->mass2->speedZ; // Fz2[n] = Fz2[n] - D2 * vz2[n-1] ! link[i]->distance_old = distance; // L[n-1] = L[n] }
*************** *** 163,177 **** // compute new masses position only if mobile = 1 if (mass[i]->mobile == 1) { ! X_new = mass[i]->forceX * mass[i]->invM + 2*mass[i]->posX - mass[i]->posX2; ! mass[i]->posX2 = mass[i]->posX; ! mass[i]->posX = max(min(X_new,Xmax),Xmin); mass[i]->speedX = mass[i]->posX - mass[i]->posX2; // vx[n] = x[n] - x[n-1] ! Y_new = mass[i]->forceY * mass[i]->invM + 2*mass[i]->posY - mass[i]->posY2; ! mass[i]->posY2 = mass[i]->posY; ! mass[i]->posY = max(min(Y_new,Ymax),Ymin); mass[i]->speedY = mass[i]->posY - mass[i]->posY2; // vy[n] = y[n] - y[n-1] ! Z_new = mass[i]->forceZ * mass[i]->invM + 2*mass[i]->posZ - mass[i]->posZ2; ! mass[i]->posZ2 = mass[i]->posZ; ! mass[i]->posZ = max(min(Z_new,Zmax),Zmin); mass[i]->speedZ = mass[i]->posZ - mass[i]->posZ2; // vz[n] = z[n] - z[n-1] } --- 163,177 ---- // compute new masses position only if mobile = 1 if (mass[i]->mobile == 1) { ! X_new = mass[i]->forceX * mass[i]->invM + 2*mass[i]->posX - mass[i]->posX2; // x[n] =Fx[n]/M+2x[n]-x[n-1] ! mass[i]->posX2 = mass[i]->posX; // x[n-2] = x[n-1] ! mass[i]->posX = max(min(X_new,Xmax),Xmin); // x[n-1] = x[n] mass[i]->speedX = mass[i]->posX - mass[i]->posX2; // vx[n] = x[n] - x[n-1] ! Y_new = mass[i]->forceY * mass[i]->invM + 2*mass[i]->posY - mass[i]->posY2; // y[n] =Fy[n]/M+2y[n]-y[n-1] ! mass[i]->posY2 = mass[i]->posY; // y[n-2] = y[n-1] ! mass[i]->posY = max(min(Y_new,Ymax),Ymin); // y[n-1] = y[n] mass[i]->speedY = mass[i]->posY - mass[i]->posY2; // vy[n] = y[n] - y[n-1] ! Z_new = mass[i]->forceZ * mass[i]->invM + 2*mass[i]->posZ - mass[i]->posZ2; // x[n] =Fx[n]/M+2x[n]-x[n-1] ! mass[i]->posZ2 = mass[i]->posZ; // z[n-2] = z[n-1] ! mass[i]->posZ = max(min(Z_new,Zmax),Zmin); // z[n-1] = z[n] mass[i]->speedZ = mass[i]->posZ - mass[i]->posZ2; // vz[n] = z[n] - z[n-1] } *************** *** 189,193 ****
// -------------------------------------------------------------- MASSES ! void m_mass(int argc,t_atom *argv) // add a mass --- 189,193 ----
// -------------------------------------------------------------- MASSES ! // ---------------------------------------------------------------------- void m_mass(int argc,t_atom *argv) // add a mass *************** *** 197,220 **** t_float M;
! mass[nb_mass] = new t_mass; // new pointer ! mass[nb_mass]->Id = GetSymbol(argv[0]); // Id mass[nb_mass]->mobile = GetInt(argv[1]); // mobile if (GetFloat(argv[2])==0) M=1; else M = GetFloat(argv[2]); ! mass[nb_mass]->invM = 1/(M); // invM mass[nb_mass]->speedX = 0; // vx[n] ! mass[nb_mass]->posX = GetFloat(argv[3]); // x(n] mass[nb_mass]->posX2 = GetFloat(argv[3]); // x[n-1] mass[nb_mass]->forceX = 0; // Fx[n] mass[nb_mass]->speedY = 0; // vy[n] ! mass[nb_mass]->posY = GetFloat(argv[4]); // y[n] mass[nb_mass]->posY2 = GetFloat(argv[4]); // y[n-1] mass[nb_mass]->forceY = 0; // Fz[n] mass[nb_mass]->speedZ = 0; // vz[n] ! mass[nb_mass]->posZ = GetFloat(argv[5]); // z[n] mass[nb_mass]->posZ2 = GetFloat(argv[5]); // z[n-1] mass[nb_mass]->forceZ = 0; // Fz[n] ! mass[nb_mass]->nbr = id_mass; // id_nbr nb_mass++ ; id_mass++; --- 197,220 ---- t_float M;
! mass[nb_mass] = new t_mass; // new mass ! mass[nb_mass]->Id = GetSymbol(argv[0]); // Id mass[nb_mass]->mobile = GetInt(argv[1]); // mobile if (GetFloat(argv[2])==0) M=1; else M = GetFloat(argv[2]); ! mass[nb_mass]->invM = 1/(M); // 1/M mass[nb_mass]->speedX = 0; // vx[n] ! mass[nb_mass]->posX = GetFloat(argv[3]); // x[n] mass[nb_mass]->posX2 = GetFloat(argv[3]); // x[n-1] mass[nb_mass]->forceX = 0; // Fx[n] mass[nb_mass]->speedY = 0; // vy[n] ! mass[nb_mass]->posY = GetFloat(argv[4]); // y[n] mass[nb_mass]->posY2 = GetFloat(argv[4]); // y[n-1] mass[nb_mass]->forceY = 0; // Fz[n] mass[nb_mass]->speedZ = 0; // vz[n] ! mass[nb_mass]->posZ = GetFloat(argv[5]); // z[n] mass[nb_mass]->posZ2 = GetFloat(argv[5]); // z[n-1] mass[nb_mass]->forceZ = 0; // Fz[n] ! mass[nb_mass]->nbr = id_mass; // id number nb_mass++ ; id_mass++; *************** *** 347,350 **** --- 347,351 ---- t_atom sortie[7], aux[nb_link]; + // Delete associated links for (i=0; i<nb_link;i++) { if (link[i]->mass1->nbr == GetInt(argv[0]) || link[i]->mass2->nbr == GetInt(argv[0])) { *************** *** 357,361 **** m_delete_link(1,&aux[i]);
! for (i=0; i<nb_mass;i++) if (mass[i]->nbr == GetInt(argv[0])) { --- 358,362 ---- m_delete_link(1,&aux[i]);
! // Delete mass for (i=0; i<nb_mass;i++) if (mass[i]->nbr == GetInt(argv[0])) { *************** *** 368,372 **** SetFloat((sortie[6]),mass[i]->posZ); delete mass[i]; ! mass[i] = mass[nb_mass-1]; nb_mass--; ToOutAnything(1,S_Mass_deleted,7,sortie); --- 369,373 ---- SetFloat((sortie[6]),mass[i]->posZ); delete mass[i]; ! mass[i] = mass[nb_mass-1]; // copy last mass indeed nb_mass--; ToOutAnything(1,S_Mass_deleted,7,sortie); *************** *** 411,416 **** Zmin = GetFloat(argv[0]); } - // -------------------------------------------------------------- LINKS
void m_link(int argc,t_atom *argv) // add a link --- 412,418 ---- Zmin = GetFloat(argv[0]); }
+ // -------------------------------------------------------------- LINKS + // --------------------------------------------------------------------- void m_link(int argc,t_atom *argv) // add a link *************** *** 420,438 **** t_int i;
! link[nb_link] = new t_link; ! link[nb_link]->Id = GetSymbol(argv[0]); for (i=0; i<nb_mass;i++) ! if (mass[i]->nbr==GetInt(argv[1])) link[nb_link]->mass1 = mass[i]; ! else if(mass[i]->nbr==GetInt(argv[2])) link[nb_link]->mass2 = mass[i]; ! link[nb_link]->K1 = GetFloat(argv[3]); ! link[nb_link]->D1 = GetFloat(argv[4]); ! link[nb_link]->D2 = GetFloat(argv[5]); ! link[nb_link]->longx = link[nb_link]->mass1->posX - link[nb_link]->mass2->posX; ! link[nb_link]->longy = link[nb_link]->mass1->posY - link[nb_link]->mass2->posY; ! link[nb_link]->longz = link[nb_link]->mass1->posZ - link[nb_link]->mass2->posZ; link[nb_link]->longueur = sqrt( pow(link[nb_link]->longx,2) + pow(link[nb_link]->longy,2) + pow(link[nb_link]->longz,2)); ! link[nb_link]->nbr = id_link; link[nb_link]->distance_old = link[nb_link]->longueur; nb_link++; --- 422,440 ---- t_int i;
! link[nb_link] = new t_link; // new link ! link[nb_link]->Id = GetSymbol(argv[0]); // ID for (i=0; i<nb_mass;i++) ! if (mass[i]->nbr==GetInt(argv[1])) // pointer on mass 1 link[nb_link]->mass1 = mass[i]; ! else if(mass[i]->nbr==GetInt(argv[2])) // pointer on mass 2 link[nb_link]->mass2 = mass[i]; ! link[nb_link]->K1 = GetFloat(argv[3]); // K1 ! link[nb_link]->D1 = GetFloat(argv[4]); // D1 ! link[nb_link]->D2 = GetFloat(argv[5]); // D2 ! link[nb_link]->longx = link[nb_link]->mass1->posX - link[nb_link]->mass2->posX; // Lx[0] ! link[nb_link]->longy = link[nb_link]->mass1->posY - link[nb_link]->mass2->posY; // Ly[0] ! link[nb_link]->longz = link[nb_link]->mass1->posZ - link[nb_link]->mass2->posZ; // Lz[0] link[nb_link]->longueur = sqrt( pow(link[nb_link]->longx,2) + pow(link[nb_link]->longy,2) + pow(link[nb_link]->longz,2)); ! link[nb_link]->nbr = id_link; // id number link[nb_link]->distance_old = link[nb_link]->longueur; nb_link++; *************** *** 501,505 **** void m_setD(int argc,t_atom *argv) { ! // set damping of link(s) named Id t_int i; const t_symbol *sym = GetSymbol(argv[0]); --- 503,507 ---- void m_setD(int argc,t_atom *argv) { ! // set viscosity of link(s) named Id t_int i; const t_symbol *sym = GetSymbol(argv[0]); *************** *** 541,545 **** SetFloat((sortie[6]),link[i]->D2); delete link[i]; ! link[i]=link[nb_link-1]; nb_link--; ToOutAnything(1,S_Link_deleted,7,sortie); --- 543,547 ---- SetFloat((sortie[6]),link[i]->D2); delete link[i]; ! link[i]=link[nb_link-1]; // copy last link nb_link--; ToOutAnything(1,S_Link_deleted,7,sortie); *************** *** 548,554 **** }
- // -------------------------------------------------------------- GET ! void m_get(int argc,t_atom *argv) // get attributes --- 550,555 ---- }
// -------------------------------------------------------------- GET ! // ------------------------------------------------------------------- void m_get(int argc,t_atom *argv) // get attributes *************** *** 795,799 ****
// -------------------------------------------------------------- GLOBAL VARIABLES ! t_link * link[nb_max_link]; t_mass * mass[nb_max_mass]; --- 796,800 ----
// -------------------------------------------------------------- GLOBAL VARIABLES ! // -------------------------------------------------------------------------------- t_link * link[nb_max_link]; t_mass * mass[nb_max_mass]; *************** *** 802,808 ****
// -------------------------------------------------------------- SETUP ! private:
const static t_symbol *S_Reset; const static t_symbol *S_Mass; --- 803,810 ----
// -------------------------------------------------------------- SETUP ! // --------------------------------------------------------------------- private:
+ // static symbols const static t_symbol *S_Reset; const static t_symbol *S_Mass;
Index: filet.pd =================================================================== RCS file: /cvsroot/pure-data/externals/nusmuk/msd3D/filet.pd,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** filet.pd 12 Apr 2005 16:34:32 -0000 1.1 --- filet.pd 20 Apr 2005 15:33:15 -0000 1.2 *************** *** 21,27 **** #X obj 381 153 - 1; #X obj 387 340 moses; - #X obj 46 257 * $3; #X obj 46 280 + $1; - #X obj 176 256 * $4; #X obj 176 278 + $2; #X obj 46 234 mod $6; --- 21,25 ---- *************** *** 44,52 **** #X obj 473 395 + $6; #X obj 521 313 - 1; ! #X msg 54 359 mass filet 1 80 $1 $2 50; #X connect 1 0 5 0; ! #X connect 1 0 43 0; #X connect 2 0 5 1; ! #X connect 2 0 28 0; #X connect 3 0 6 0; #X connect 4 0 7 0; --- 42,52 ---- #X obj 473 395 + $6; #X obj 521 313 - 1; ! #X msg 54 359 mass filet 1 80 $1 $2 0; ! #X obj 46 257 * $3; ! #X obj 176 256 * $4; #X connect 1 0 5 0; ! #X connect 1 0 41 0; #X connect 2 0 5 1; ! #X connect 2 0 26 0; #X connect 3 0 6 0; #X connect 4 0 7 0; *************** *** 61,70 **** #X connect 9 0 7 1; #X connect 9 0 17 1; ! #X connect 10 0 25 0; ! #X connect 10 1 26 0; ! #X connect 11 0 44 0; #X connect 12 0 15 0; #X connect 13 0 9 0; ! #X connect 13 0 33 0; #X connect 14 0 13 0; #X connect 15 0 16 0; --- 61,70 ---- #X connect 9 0 7 1; #X connect 9 0 17 1; ! #X connect 10 0 23 0; ! #X connect 10 1 24 0; ! #X connect 11 0 42 0; #X connect 12 0 15 0; #X connect 13 0 9 0; ! #X connect 13 0 31 0; #X connect 14 0 13 0; #X connect 15 0 16 0; *************** *** 73,106 **** #X connect 17 0 18 0; #X connect 18 0 17 1; ! #X connect 18 0 37 0; #X connect 19 0 16 1; ! #X connect 20 0 34 0; ! #X connect 21 0 22 0; ! #X connect 22 0 11 0; ! #X connect 23 0 24 0; ! #X connect 24 0 11 1; ! #X connect 25 0 21 0; ! #X connect 26 0 23 0; ! #X connect 28 0 20 1; ! #X connect 29 0 20 0; ! #X connect 30 0 38 0; ! #X connect 31 0 32 1; ! #X connect 32 0 36 0; ! #X connect 33 0 1 0; ! #X connect 33 1 2 0; ! #X connect 34 0 35 0; ! #X connect 35 0 32 0; ! #X connect 36 0 0 0; ! #X connect 37 0 29 0; ! #X connect 37 1 31 0; ! #X connect 37 1 35 1; ! #X connect 37 2 30 0; ! #X connect 37 3 42 0; ! #X connect 37 3 41 1; ! #X connect 38 0 40 0; ! #X connect 39 0 36 0; ! #X connect 40 0 41 0; ! #X connect 41 0 39 0; ! #X connect 42 0 39 1; ! #X connect 43 0 38 1; ! #X connect 44 0 0 0; --- 73,106 ---- #X connect 17 0 18 0; #X connect 18 0 17 1; ! #X connect 18 0 35 0; #X connect 19 0 16 1; ! #X connect 20 0 32 0; ! #X connect 21 0 11 0; ! #X connect 22 0 11 1; ! #X connect 23 0 43 0; ! #X connect 24 0 44 0; ! #X connect 26 0 20 1; ! #X connect 27 0 20 0; ! #X connect 28 0 36 0; ! #X connect 29 0 30 1; ! #X connect 30 0 34 0; ! #X connect 31 0 1 0; ! #X connect 31 1 2 0; ! #X connect 32 0 33 0; ! #X connect 33 0 30 0; ! #X connect 34 0 0 0; ! #X connect 35 0 27 0; ! #X connect 35 1 29 0; ! #X connect 35 1 33 1; ! #X connect 35 2 28 0; ! #X connect 35 3 40 0; ! #X connect 35 3 39 1; ! #X connect 36 0 38 0; ! #X connect 37 0 34 0; ! #X connect 38 0 39 0; ! #X connect 39 0 37 0; ! #X connect 40 0 37 1; ! #X connect 41 0 36 1; ! #X connect 42 0 0 0; ! #X connect 43 0 21 0; ! #X connect 44 0 22 0;
Index: help-msd3D.pd =================================================================== RCS file: /cvsroot/pure-data/externals/nusmuk/msd3D/help-msd3D.pd,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** help-msd3D.pd 12 Apr 2005 16:34:32 -0000 1.1 --- help-msd3D.pd 20 Apr 2005 15:33:15 -0000 1.2 *************** *** 1,83 **** ! #N canvas 0 0 743 844 10; ! #X obj 17 9 cnv 15 610 305 empty empty CREATION 20 12 0 14 -262131 -66577 0; ! #X msg 34 38 reset; ! #X text 204 69 Add a mass; ! #X text 290 70 $1 : Id (symbol); ! #X text 289 90 $2 : fixed or mobile (0/1); ! #X text 289 108 $3 : mass; ! #X text 289 146 $1 : Id (symbol); ! #X text 201 146 Add a link; ! #X text 288 166 $2 : creation No of mass1; ! #X text 288 184 $3 : creation No of mass2; ! #X text 287 202 $4 : rigidity; ! #X text 206 39 Delete all masses and links; ! #X text 287 220 $5 : viscosity; ! #X text 287 237 $6 : damping; ! #X obj 17 319 cnv 15 610 60 empty empty COMPUTATION 20 12 0 14 -261689 -66577 0; ! #X msg 37 348 bang; ! #X text 190 348 Compute new masses positions; ! #X obj 16 383 cnv 15 610 220 empty empty DYNAMIC_SETTING 20 12 0 14 -262131 -66577 0; ! #X msg 124 405 setD $1 $2; ! #X text 309 423 $1 : Id (symbol); ! #X text 309 441 $2 : New value; ! #X msg 42 405 setK $1 $2; ! #X text 305 477 $1 : Id (symbol); ! #X text 305 495 $2 : New value; ! #X text 353 532 $1 : Id (symbol); ! #X text 353 550 $2 : New value; ! #X msg 42 457 posX $1 $2; ! #X text 305 459 Set position of mass(es); ! #X text 352 515 Add force on mass(es); ! #X msg 40 516 forceX $1 $2; ! #X msg 210 405 setD2 $1 $2; ! #X text 309 405 Set rigidity , viscosity or damping of link(s); ! #X obj 15 612 cnv 15 610 198 empty empty GET_ATTRIBUTES 20 12 0 14 -261689 -66577 0; ! #X msg 101 639 massePosL; ! #X msg 101 667 masseForcesL; ! #X text 202 639 output all masses positions in a list on outlet No 1; ! #X text 201 668 output all masses forces in a list on outlet No 1; ! #X msg 100 705 get $1 $2; ! #X text 203 706 Get specific attribute; ! #X text 203 731 $1 : Attribute type ( massesPos / massesSpeeds / massesForces / linksPos ); ! #X text 203 768 $2 : Id (symbol or creations numbers); ! #X msg 31 146 link $1 $2 $3 $4 $5 $6; ! #X msg 30 253 deleteMass $1; ! #X text 195 255 Delete a mass and associated links; ! #X text 285 272 $1 : Creation No of mass; ! #X msg 29 289 deleteLink $1; ! #X text 194 291 Delete a link; ! #X text 295 291 $1 : Creation No of link; ! #X msg 98 788 infosL; ! #X text 201 788 Get infos on all masses and links on outlet No 2; ! #X text 302 588 $1 : Value; ! #X msg 135 515 forceY $1 $2; ! #X msg 123 457 posY $1 $2; ! #X msg 39 568 Xmin $1 , Xmax $1 , Ymin $1 , Ymax $1; ! #X text 302 571 Set minimimum and maximum of masses positions; ! #X msg 34 69 mass $1 $2 $3 $4 $5 $6; ! #X text 289 126 $4 , $5 , $6 : position; ! #X msg 123 457 posY $1 $2; ! #X msg 204 457 posZ $1 $2; ! #X msg 229 515 forceZ $1 $2; ! #X obj -12 816 msd3D; ! #X msg 39 586 Zmin $1 , Zmax $1; ! #X connect 1 0 60 0; ! #X connect 15 0 60 0; ! #X connect 21 0 60 0; ! #X connect 26 0 60 0; ! #X connect 29 0 60 0; ! #X connect 33 0 60 0; ! #X connect 34 0 60 0; ! #X connect 37 0 60 0; ! #X connect 41 0 60 0; ! #X connect 42 0 60 0; ! #X connect 45 0 60 0; ! #X connect 48 0 60 0; ! #X connect 53 0 60 0; ! #X connect 55 0 60 0; --- 1,176 ---- ! #N canvas 0 0 467 396 10; ! #N canvas 271 52 742 843 masses 0; ! #X obj 62 154 cnv 15 610 180 empty empty CREATION 20 12 0 14 -262131 -66577 0; ! #X msg 79 183 reset; ! #X text 249 214 Add a mass; ! #X text 335 215 $1 : Id (symbol); ! #X text 334 235 $2 : fixed or mobile (0/1); ! #X text 334 253 $3 : mass; ! #X text 251 184 Delete all masses and links; ! #X obj 62 338 cnv 15 610 60 empty empty COMPUTATION 20 12 0 14 -261689 -66577 0; ! #X msg 82 367 bang; ! #X text 235 367 Compute new masses positions; ! #X obj 61 403 cnv 15 610 210 empty empty DYNAMIC_SETTING 20 12 0 14 -262131 -66577 0; ! #X text 350 449 $1 : Id (symbol); ! #X text 350 467 $2 : New value; ! #X text 348 503 $1 : Id (symbol); ! #X text 348 521 $2 : New value; ! #X msg 87 429 posX $1 $2; ! #X text 350 431 Set position of mass(es); ! #X text 347 486 Add force on mass(es); ! #X msg 82 480 forceX $1 $2; ! #X obj 61 617 cnv 15 610 198 empty empty GET_ATTRIBUTES 20 12 0 14 -261689 -66577 0; ! #X msg 147 644 massePosL; ! #X msg 147 672 masseForcesL; ! #X text 248 644 output all masses positions in a list on outlet No 1; ! #X text 247 673 output all masses forces in a list on outlet No 1; ! #X msg 146 710 get $1 $2; ! #X text 249 711 Get specific attribute; ! #X text 249 736 $1 : Attribute type ( massesPos / massesSpeeds / massesForces / linksPos ); ! #X text 249 773 $2 : Id (symbol or creations numbers); ! #X msg 79 290 deleteMass $1; ! #X text 248 292 Delete a mass and associated links; ! #X text 338 309 $1 : Creation No of mass; ! #X msg 144 793 infosL; ! #X text 247 793 Get infos on all masses and links on outlet No 2; ! #X text 347 555 $1 : Value; ! #X text 73 22 MASSES :; ! #X text 66 69 They got only one physical parameter , the value of ! their; ! #X text 67 83 mass. They can be mobile or fixed , in this case forces ! ; ! #X text 67 54 The msd masses are the principals objects of the model. ! ; ! #X text 66 97 applied on them automatically , by links , or manually ! , by; ! #X text 67 112 messages , don't do anything.; ! #X msg 81 578 setMobile $1 , setFixed $1; ! #X text 345 578 Change mobile parameter; ! #X text 345 594 $1 : Creation No of mass; ! #X msg 166 429 posY $1 $2; ! #X msg 174 480 forceY $1 $2; ! #X text 347 538 Set minimimum and maximum X , Y of masses; ! #X msg 83 525 Xmin $1 , Xmax $1 , Ymin $1 , Ymax $1; ! #X msg 79 214 mass $1 $2 $3 $4 $5 $6; ! #X text 334 271 $4 , $5 , $6 : initial position; ! #X msg 246 429 posZ $1 $2; ! #X msg 83 503 forceZ $1 $2; ! #X msg 83 548 Zmin $1 , Zmax $1; ! #X obj 33 821 msd3D; ! #X connect 1 0 52 0; ! #X connect 8 0 52 0; ! #X connect 15 0 52 0; ! #X connect 18 0 52 0; ! #X connect 20 0 52 0; ! #X connect 21 0 52 0; ! #X connect 24 0 52 0; ! #X connect 28 0 52 0; ! #X connect 31 0 52 0; ! #X connect 40 0 52 0; ! #X connect 46 0 52 0; ! #X connect 47 0 52 0; ! #X restore 158 305 pd masses; ! #N canvas 222 83 808 841 links 0; ! #X obj 62 250 cnv 15 610 305 empty empty CREATION 20 12 0 14 -262131 ! -66577 0; ! #X msg 79 279 reset; ! #X text 338 308 $1 : Id (symbol); ! #X text 250 308 Add a link; ! #X text 337 328 $2 : creation No of mass1; ! #X text 337 346 $3 : creation No of mass2; ! #X text 336 364 $4 : rigidity; ! #X text 251 280 Delete all masses and links; ! #X text 336 382 $5 : viscosity; ! #X text 336 399 $6 : damping; ! #X obj 61 561 cnv 15 610 82 empty empty DYNAMIC_SETTING 20 12 0 14 ! -262131 -66577 0; ! #X msg 172 583 setD $1 $2; ! #X text 354 601 $1 : Id (symbol); ! #X text 354 619 $2 : New value; ! #X msg 87 583 setK $1 $2; ! #X msg 255 583 setD2 $1 $2; ! #X text 354 583 Set rigidity , viscosity or damping of link(s); ! #X obj 60 650 cnv 15 610 140 empty empty GET_ATTRIBUTES 20 12 0 14 ! -261689 -66577 0; ! #X msg 75 679 get $1 $2; ! #X text 237 680 Get specific attribute; ! #X text 237 705 $1 : Attribute type ( massesPos / massesSpeeds / massesForces ! / linksPos ); ! #X text 237 742 $2 : Id (symbol or creations numbers); ! #X msg 78 308 link $1 $2 $3 $4 $5 $6; ! #X msg 74 532 deleteLink $1; ! #X text 239 534 Delete a link; ! #X text 340 534 $1 : Creation No of link; ! #X msg 73 762 infosL; ! #X text 236 762 Get infos on all masses and links on outlet No 2; ! #X msg 73 423 iLink $1 $2 $3 $4 $5 $6; ! #X text 338 308 $1 : Id (symbol); ! #X text 250 308 Add a link; ! #X text 337 328 $2 : creation No of mass1; ! #X text 337 346 $3 : creation No of mass2; ! #X text 336 364 $4 : rigidity; ! #X text 336 382 $5 : viscosity; ! #X text 336 399 $6 : damping; ! #X text 410 422 $1 : Id (symbol); ! #X text 409 478 $4 : rigidity; ! #X text 409 496 $5 : viscosity; ! #X text 409 513 $6 : damping; ! #X text 410 422 $1 : Id (symbol); ! #X text 409 478 $4 : rigidity; ! #X text 409 496 $5 : viscosity; ! #X text 409 513 $6 : damping; ! #X text 248 423 Add an interactor link; ! #X text 94 52 LINKS :; ! #X text 71 91 parameters : length , rigidity , viscosity and damping. ! ; ! #X text 72 78 Links connect masses two by two. They got 4 physicals ! ; ! #X text 70 134 the two masses at the creation.; ! #X text 71 120 message. The lenght is initialised to the distance between ! ; ! #X text 71 106 Rigidity , viscosity and damping are defined by the ! creation; ! #X text 409 442 $2 : Id (symbol) of masses type 1; ! #X text 409 460 $3 : Id (symbol) of masses type 2; ! #X text 70 148 Interactor links are links between mutiples masses , ! instead; ! #X text 70 161 of creation number , the masses linked are defined ! with; ! #X text 69 175 their Id.; ! #X obj 33 821 msd3D; ! #X connect 1 0 56 0; ! #X connect 14 0 56 0; ! #X connect 18 0 56 0; ! #X connect 22 0 56 0; ! #X connect 23 0 56 0; ! #X connect 26 0 56 0; ! #X connect 28 0 56 0; ! #X restore 160 335 pd links; ! #X text 12 305 HELP on masses --->; ! #X text 11 336 HELP on links --->; ! #X text -50 110 There are 4 types of messages for msd :; ! #X text -49 74 It is designed to implement particules physical model ! in PD.The model is based on two elements type : mass and link.; ! #X obj -50 125 cnv 15 420 30 empty empty empty 20 12 0 14 -262131 -66577 ! 0; ! #X obj -50 158 cnv 15 420 30 empty empty empty 20 12 0 14 -261689 -66577 ! 0; ! #X obj -50 191 cnv 15 420 30 empty empty empty 20 12 0 14 -262131 -66577 ! 0; ! #X obj -50 224 cnv 15 420 30 empty empty empty 20 12 0 14 -261689 -66577 ! 0; ! #X text -47 132 CREATION : To create the model masses and links.; ! #X text -47 197 DYNAMIC SETTING : To set the model parameters dynamically. ! ; ! #X text -47 230 ATTRIBUTES : To get the model parameters.; ! #X text -47 159 COMPUTATION : To compute the new model state based ! on previous instant.; ! #X text 32 16 MSD3D : mass - spring - damper model; ! #X text -48 61 MSD3D is the 3D object of the msd objects collection. ! ;