[PD-cvs] externals/nusmuk/msd2D help-msd2D.pd, 1.1, 1.2 main.cpp, 1.2, 1.3

Nicolas Montgermont nimon at users.sourceforge.net
Wed Apr 20 17:33:17 CEST 2005


Update of /cvsroot/pure-data/externals/nusmuk/msd2D
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30071/msd2D

Modified Files:
	help-msd2D.pd main.cpp 
Log Message:
MSD Version 0.02


Index: main.cpp
===================================================================
RCS file: /cvsroot/pure-data/externals/nusmuk/msd2D/main.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** main.cpp	15 Apr 2005 18:13:57 -0000	1.2
--- main.cpp	20 Apr 2005 15:33:14 -0000	1.3
***************
*** 102,105 ****
--- 102,106 ----
  
  // ---------------------------------------------------------------  RESET 
+ // ----------------------------------------------------------------------
  
  	void m_reset() 
***************
*** 122,125 ****
--- 123,127 ----
  
  // --------------------------------------------------------------  COMPUTE 
+ // -----------------------------------------------------------------------
  
  	void m_bang()
***************
*** 132,151 ****
  		// 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));
! 			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;
  			}
! 			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]->distance_old = distance;
  		}
  
--- 134,153 ----
  		// 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));		// L[n] = sqrt( (x1-x2)² +(y1-y2)²)
! 			F  = link[i]->K1 * (distance - link[i]->longueur) ;			// F[n] = k1 (L[n] - L[0])
! 			F += link[i]->D1 * (distance - link[i]->distance_old) ;			// F[n] = F[n] + D1 (L[n] - L[n-1])
  			if (distance != 0) 	{
! 				Fx = F * (link[i]->mass1->posX - link[i]->mass2->posX)/distance; // Fx = F * Lx[n]/L[n]
! 				Fy = F * (link[i]->mass1->posY - link[i]->mass2->posY)/distance; // Fy = F * Ly[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;	// Fy1[n] = Fy1[n] - D2 * vy1[n-1]
! 			link[i]->distance_old = distance;				// L[n-1] = L[n]
  		}
  
***************
*** 153,164 ****
  		// 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);			// x = x + v
! 				mass[i]->speedX = mass[i]->posX - mass[i]->posX2;	// v = v + F/M
! 				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);			// x = x + v
! 				mass[i]->speedY = mass[i]->posY - mass[i]->posY2;	// v = v + F/M
  				}
  
--- 155,166 ----
  		// 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; // x[n] =Fx[n]/M+2x[n]-x[n-1]
! 				mass[i]->posY2 = mass[i]->posY;				// x[n-2] = x[n-1]
! 				mass[i]->posY = max(min(Y_new,Ymax),Ymin);		// x[n-1] = x[n]
! 				mass[i]->speedY = mass[i]->posY - mass[i]->posY2;	// vx[n] = x[n] - x[n-1]
  				}
  
***************
*** 166,186 ****
  		// clear forces
  			mass[i]->out_forceX = mass[i]->forceX;
! 			mass[i]->forceX = 0;
  			mass[i]->out_forceY = mass[i]->forceY;
! 			mass[i]->forceY = 0;
  		}
  	}
  
  // --------------------------------------------------------------  MASSES
  
  	void m_mass(int argc,t_atom *argv) 
  	// add a mass
! 	// Id, nbr, mobile, invM, speedX, posX, forceX
  	{
  		t_atom sortie[6], aux[2];
  		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)
--- 168,189 ----
  		// clear forces
  			mass[i]->out_forceX = mass[i]->forceX;
! 			mass[i]->forceX = 0;						// Fx[n] = 0
  			mass[i]->out_forceY = mass[i]->forceY;
! 			mass[i]->forceY = 0;						// Fy[n] = 0
  		}
  	}
  
  // --------------------------------------------------------------  MASSES
+ // ----------------------------------------------------------------------
  
  	void m_mass(int argc,t_atom *argv) 
  	// add a mass
! 	// Id, nbr, mobile, invM, speedX Y, posX Y, forceX Y
  	{
  		t_atom sortie[6], aux[2];
  		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)
***************
*** 196,200 ****
  		mass[nb_mass]->posY2 = GetFloat(argv[4]);	// y[n-1]
  		mass[nb_mass]->forceY = 0;			// Fy[n]
! 		mass[nb_mass]->nbr = id_mass;			// id_nbr
  		nb_mass++ ;
  		id_mass++;
--- 199,203 ----
  		mass[nb_mass]->posY2 = GetFloat(argv[4]);	// y[n-1]
  		mass[nb_mass]->forceY = 0;			// Fy[n]
! 		mass[nb_mass]->nbr = id_mass;			// id number
  		nb_mass++ ;
  		id_mass++;
***************
*** 298,301 ****
--- 301,305 ----
  	t_atom sortie[6], 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]))	{
***************
*** 308,312 ****
  		m_delete_link(1,&aux[i]);
  
! 
  	for (i=0; i<nb_mass;i++)
  		if (mass[i]->nbr == GetAInt(argv[0]))	{
--- 312,316 ----
  		m_delete_link(1,&aux[i]);
  
! 	// delete mass
  	for (i=0; i<nb_mass;i++)
  		if (mass[i]->nbr == GetAInt(argv[0]))	{
***************
*** 328,332 ****
  	void m_Xmax(int argc,t_atom *argv) 
  	{
! 	// set damping of link(s) named Id
  	Xmax = GetFloat(argv[0]);
  	}
--- 332,336 ----
  	void m_Xmax(int argc,t_atom *argv) 
  	{
! 	// set X max
  	Xmax = GetFloat(argv[0]);
  	}
***************
*** 334,338 ****
  	void m_Ymax(int argc,t_atom *argv) 
  	{
! 	// set damping of link(s) named Id
  	Ymax = GetFloat(argv[0]);
  	}
--- 338,342 ----
  	void m_Ymax(int argc,t_atom *argv) 
  	{
! 	// set Y max
  	Ymax = GetFloat(argv[0]);
  	}
***************
*** 340,344 ****
  	void m_Xmin(int argc,t_atom *argv) 
  	{
! 	// set damping of link(s) named Id
  	Xmin = GetFloat(argv[0]);
  	}
--- 344,348 ----
  	void m_Xmin(int argc,t_atom *argv) 
  	{
! 	// set X min
  	Xmin = GetFloat(argv[0]);
  	}
***************
*** 346,354 ****
  	void m_Ymin(int argc,t_atom *argv) 
  	{
! 	// set damping of link(s) named Id
  	Ymin = GetFloat(argv[0]);
  	}
  
  // --------------------------------------------------------------  LINKS 
  
  	void m_link(int argc,t_atom *argv) 
--- 350,359 ----
  	void m_Ymin(int argc,t_atom *argv) 
  	{
! 	// set Y min
  	Ymin = GetFloat(argv[0]);
  	}
  
  // --------------------------------------------------------------  LINKS 
+ // ---------------------------------------------------------------------
  
  	void m_link(int argc,t_atom *argv) 
***************
*** 359,377 ****
  		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==GetAInt(argv[1]))
  				link[nb_link]->mass1 = mass[i];
! 			else if(mass[i]->nbr==GetAInt(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]->longueur = sqrt( pow(link[nb_link]->longx,2) + pow(link[nb_link]->longy,2));
! 		link[nb_link]->nbr = id_link;
! 		link[nb_link]->distance_old = link[nb_link]->longueur;
  		nb_link++;
  		id_link++;
--- 364,382 ----
  		t_int i;
  
! 		link[nb_link] = new t_link;			// new link
  		link[nb_link]->Id = GetSymbol(argv[0]);
  		for (i=0; i<nb_mass;i++)
! 			if (mass[i]->nbr==GetAInt(argv[1]))	// pointer on mass 1
  				link[nb_link]->mass1 = mass[i];
! 			else if(mass[i]->nbr==GetAInt(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]->longueur = sqrt( pow(link[nb_link]->longx,2) + pow(link[nb_link]->longy,2)); // L[0] = sq( Lx[0]²+Ly[0]²)
! 		link[nb_link]->nbr = id_link;			// id number
! 		link[nb_link]->distance_old = link[nb_link]->longueur;// L[n-1]
  		nb_link++;
  		id_link++;
***************
*** 416,420 ****
  					SetFloat((arglist[1]),mass[imass1[i]]->nbr);
  					SetFloat((arglist[2]),mass[imass2[j]]->nbr);
! 					SetFloat((arglist[3]),GetAInt(argv[3]));
  					SetFloat((arglist[4]),GetFloat(argv[4]));
  					SetFloat((arglist[5]),GetFloat(argv[5]));
--- 421,425 ----
  					SetFloat((arglist[1]),mass[imass1[i]]->nbr);
  					SetFloat((arglist[2]),mass[imass2[j]]->nbr);
! 					SetFloat((arglist[3]),GetFloat(argv[3]));
  					SetFloat((arglist[4]),GetFloat(argv[4]));
  					SetFloat((arglist[5]),GetFloat(argv[5]));
***************
*** 438,442 ****
  	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]);
--- 443,447 ----
  	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]);
***************
*** 478,482 ****
  			SetFloat((sortie[6]),link[i]->D2);
  			delete link[i];
! 			link[i]=link[nb_link-1];
  			nb_link--;
  			ToOutAnything(1,S_Link_deleted,7,sortie);
--- 483,487 ----
  			SetFloat((sortie[6]),link[i]->D2);
  			delete link[i];
! 			link[i]=link[nb_link-1];	// copy last link instead
  			nb_link--;
  			ToOutAnything(1,S_Link_deleted,7,sortie);
***************
*** 487,491 ****
  
  // --------------------------------------------------------------  GET 
! 
  	void m_get(int argc,t_atom *argv)
  	// get attributes
--- 492,496 ----
  
  // --------------------------------------------------------------  GET 
! // -------------------------------------------------------------------
  	void m_get(int argc,t_atom *argv)
  	// get attributes
***************
*** 499,503 ****
  		if (argc == 1)
  		{
! 			if (auxtype == S_massesPos)// get all masses positions
  				for (i=0; i<nb_mass; i++)
  				{
--- 504,508 ----
  		if (argc == 1)
  		{
! 			if (auxtype == S_massesPos)		// get all masses positions
  				for (i=0; i<nb_mass; i++)
  				{
***************
*** 506,510 ****
  					ToOutAnything(0,S_massesPos,2,sortie);
  				}
! 			else if (auxtype == S_massesForces)// get all masses forces
  				for (i=0; i<nb_mass; i++)
  				{
--- 511,515 ----
  					ToOutAnything(0,S_massesPos,2,sortie);
  				}
! 			else if (auxtype == S_massesForces)	// get all masses forces
  				for (i=0; i<nb_mass; i++)
  				{
***************
*** 513,517 ****
  					ToOutAnything(0,S_massesForces,2,sortie);
  				}
! 			else if (auxtype == S_linksPos)// get all links positions
  				for (i=0; i<nb_link; i++)
  				{
--- 518,522 ----
  					ToOutAnything(0,S_massesForces,2,sortie);
  				}
! 			else if (auxtype == S_linksPos)		// get all links positions
  				for (i=0; i<nb_link; i++)
  				{
***************
*** 522,526 ****
  					ToOutAnything(0,S_linksPos,4,sortie);
  				}
! 			else 		// get all masses speeds
  				for (i=0; i<nb_mass; i++)
  				{
--- 527,531 ----
  					ToOutAnything(0,S_linksPos,4,sortie);
  				}
! 			else 					// get all masses speeds
  				for (i=0; i<nb_mass; i++)
  				{
***************
*** 530,534 ****
  				}
  		}
! 		else if (auxtype == S_massesPos) // get mass positions
  		{
  			if (auxarg == 0) // No
--- 535,539 ----
  				}
  		}
! 		else if (auxtype == S_massesPos) 		// get mass positions
  		{
  			if (auxarg == 0) // No
***************
*** 560,564 ****
  			}
  		}
! 		else if (auxtype == S_massesForces)			 // get mass forces
  		{
  			if (auxarg == 0) // No
--- 565,569 ----
  			}
  		}
! 		else if (auxtype == S_massesForces)		// get mass forces
  		{
  			if (auxarg == 0) // No
***************
*** 590,594 ****
  			}
  		}
! 		else if (auxtype == S_linksPos)			 // get links positions
  		{
  			if (auxarg == 0) // No
--- 595,599 ----
  			}
  		}
! 		else if (auxtype == S_linksPos)			// get links positions
  		{
  			if (auxarg == 0) // No
***************
*** 624,628 ****
  			}
  		}
! 		else 			 // get mass speeds
  		{
  			if (auxarg == 0) // No
--- 629,633 ----
  			}
  		}
! 		else 			 			// get mass speeds
  		{
  			if (auxarg == 0) // No
***************
*** 672,676 ****
  
  	void m_force_dumpl()
! 	// List of masses positions on first outlet
  	{	
  		t_atom sortie[2*nb_mass];
--- 677,681 ----
  
  	void m_force_dumpl()
! 	// List of masses forces on first outlet
  	{	
  		t_atom sortie[2*nb_mass];
***************
*** 685,689 ****
  
  	void m_info_dumpl()
! 	// List of masses positions on first outlet
  	{	
  		t_atom sortie[7];
--- 690,694 ----
  
  	void m_info_dumpl()
! 	// List of infos on masses and links on  first outlet
  	{	
  		t_atom sortie[7];
***************
*** 714,717 ****
--- 719,723 ----
  
  // --------------------------------------------------------------  GLOBAL VARIABLES 
+ // --------------------------------------------------------------------------------
  
  	t_link * link[nb_max_link];
***************
*** 721,727 ****
--- 727,735 ----
  
  // --------------------------------------------------------------  SETUP
+ // ---------------------------------------------------------------------
  
  private:
  
+ 	// static symbols
  	const static t_symbol *S_Reset;
  	const static t_symbol *S_Mass;

Index: help-msd2D.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/nusmuk/msd2D/help-msd2D.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** help-msd2D.pd	12 Apr 2005 16:34:04 -0000	1.1
--- help-msd2D.pd	20 Apr 2005 15:33:14 -0000	1.2
***************
*** 1,78 ****
! #N canvas 0 0 823 885 10;
! #X obj 51 13 cnv 15 610 305 empty empty CREATION 20 12 0 14 -262131
  -66577 0;
! #X msg 68 42 reset;
! #X text 238 73 Add a mass;
! #X text 324 74 \$1 : Id (symbol);
! #X text 323 94 \$2 : fixed or mobile (0/1);
! #X text 323 112 \$3 : mass;
! #X text 323 150 \$1 : Id (symbol);
! #X text 235 150 Add a link;
! #X text 322 170 \$2 : creation No of mass1;
! #X text 322 188 \$3 : creation No of mass2;
! #X text 321 206 \$4 : rigidity;
! #X text 240 43 Delete all masses and links;
! #X text 321 224 \$5 : viscosity;
! #X text 321 241 \$6 : damping;
! #X obj 51 323 cnv 15 610 60 empty empty COMPUTATION 20 12 0 14 -261689
  -66577 0;
! #X msg 71 352 bang;
! #X text 224 352 Compute new masses positions;
! #X obj 50 387 cnv 15 610 220 empty empty DYNAMIC_SETTING 20 12 0 14
  -262131 -66577 0;
! #X msg 158 409 setD \$1 \$2;
! #X text 343 427 \$1 : Id (symbol);
! #X text 343 445 \$2 : New value;
! #X msg 76 409 setK \$1 \$2;
! #X text 339 481 \$1 : Id (symbol);
! #X text 339 499 \$2 : New value;
! #X text 337 538 \$1 : Id (symbol);
! #X text 337 556 \$2 : New value;
! #X msg 76 461 posX \$1 \$2;
! #X text 339 463 Set position of mass(es);
! #X text 336 521 Add force on mass(es);
! #X msg 74 520 forceX \$1 \$2;
! #X msg 244 409 setD2 \$1 \$2;
! #X text 343 409 Set rigidity \, viscosity or damping of link(s);
! #X obj 49 616 cnv 15 610 198 empty empty GET_ATTRIBUTES 20 12 0 14
  -261689 -66577 0;
! #X msg 135 643 massePosL;
! #X msg 135 671 masseForcesL;
! #X text 236 643 output all masses positions in a list on outlet No
  1;
! #X text 235 672 output all masses forces in a list on outlet No 1;
! #X msg 134 709 get \$1 \$2;
! #X text 237 710 Get specific attribute;
! #X text 237 735 \$1 : Attribute type ( massesPos / massesSpeeds / massesForces
  / linksPos );
! #X text 237 772 \$2 : Id (symbol or creations numbers);
! #X msg 65 150 link \$1 \$2 \$3 \$4 \$5 \$6;
! #X msg 64 257 deleteMass \$1;
! #X text 229 259 Delete a mass and associated links;
! #X text 319 276 \$1 : Creation No of mass;
! #X msg 63 293 deleteLink \$1;
! #X text 228 295 Delete a link;
! #X text 329 295 \$1 : Creation No of link;
! #X msg 132 792 infosL;
! #X text 235 792 Get infos on all masses and links on outlet No 2;
! #X text 336 592 \$1 : Value;
! #X obj 22 820 msd2D;
! #X msg 169 519 forceY \$1 \$2;
! #X msg 158 461 posY \$1 \$2;
! #X msg 68 73 mass \$1 \$2 \$3 \$4 \$5;
! #X text 323 130 \$4 \, \$5 : position;
! #X msg 73 572 Xmin \$1 \, Xmax \$1 \, Ymin \$1 \, Ymax \$1;
! #X text 336 575 Set minimimum and maximum of masses positions;
! #X connect 1 0 51 0;
! #X connect 15 0 51 0;
! #X connect 21 0 51 0;
! #X connect 26 0 51 0;
! #X connect 29 0 51 0;
! #X connect 33 0 51 0;
! #X connect 34 0 51 0;
! #X connect 37 0 51 0;
! #X connect 41 0 51 0;
! #X connect 42 0 51 0;
! #X connect 45 0 51 0;
! #X connect 48 0 51 0;
! #X connect 54 0 51 0;
--- 1,173 ----
! #N canvas 0 0 478 397 10;
! #N canvas 271 52 742 843 masses 1;
! #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 85 485 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 79 214 mass \$1 \$2 \$3 \$4 \$5;
! #X msg 188 430 posY \$1 \$2;
! #X msg 186 486 forceY \$1 \$2;
! #X obj 33 821 msd2D;
! #X text 347 538 Set minimimum and maximum X \, Y of masses;
! #X msg 84 538 Xmin \$1 \, Xmax \$1 \, Ymin \$1 \, Ymax \$1;
! #X text 334 271 \$4 \, \$5 : initial position;
! #X connect 1 0 46 0;
! #X connect 8 0 46 0;
! #X connect 15 0 46 0;
! #X connect 18 0 46 0;
! #X connect 20 0 46 0;
! #X connect 21 0 46 0;
! #X connect 24 0 46 0;
! #X connect 28 0 46 0;
! #X connect 31 0 46 0;
! #X connect 40 0 46 0;
! #X connect 43 0 46 0;
! #X connect 48 0 46 0;
! #X restore 221 312 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 msd2D;
! #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 223 342 pd links;
! #X text 75 312 HELP on masses --->;
! #X text 74 343 HELP on links --->;
! #X text 13 117 There are 4 types of messages for msd :;
! #X text 14 81 It is designed to implement particules physical model
! in PD.The model is based on two elements type : mass and link.;
! #X obj 13 132 cnv 15 420 30 empty empty empty 20 12 0 14 -262131 -66577
! 0;
! #X obj 13 165 cnv 15 420 30 empty empty empty 20 12 0 14 -261689 -66577
! 0;
! #X obj 13 198 cnv 15 420 30 empty empty empty 20 12 0 14 -262131 -66577
! 0;
! #X obj 13 231 cnv 15 420 30 empty empty empty 20 12 0 14 -261689 -66577
! 0;
! #X text 16 139 CREATION : To create the model masses and links.;
! #X text 16 204 DYNAMIC SETTING : To set the model parameters dynamically.
! ;
! #X text 16 237 ATTRIBUTES : To get the model parameters.;
! #X text 16 166 COMPUTATION : To compute the new model state based on
! previous instant.;
! #X text 94 23 MSD2D : mass - spring - damper model;
! #X text 15 68 MSD2D is the 2D object of the msd objects collection.
! ;





More information about the Pd-cvs mailing list