public Fabric( int x, int y, int pointMassCountX, int pointMassCountY, int linkLength, int linkStrength, Render ren ){
		
		// construct pointMasses in an array, and then copy into allPointMasses
		PointMass[][] pointMassArray = new PointMass[pointMassCountX][pointMassCountY];
		
		int xPos;
		int yPos;
	
		Random r = new Random();
		
		for ( int xi = 0; xi < pointMassCountX; xi++ ){
			for( int yi = 0; yi < pointMassCountY; yi++ ){
				xPos = x + (linkLength*xi);
				yPos = y + (linkLength*yi);
				
				pointMassArray[xi][yi] = new PointMass( xPos, yPos, 0, 0, new Color( r.nextInt() ) );
				if( yi == 0 ){
					pointMassArray[xi][yi].setPin( true );
				}
			}
		}
		
		allPointMasses = new LinkedList<PointMass>();
		
		for( PointMass[] subArray : pointMassArray ){
			for( PointMass p : subArray ){
				allPointMasses.add(p);
			}
		}
		
		allLinks = new LinkedList<Link>();
		// construct all of the links and add them to the list of allLinks
		for ( int xi = 0; xi < pointMassCountX; xi++ ){
			for ( int yi = 0; yi < pointMassCountY; yi++ ){
				
				if( xi != 0 ){
					allLinks.add( new Link( pointMassArray[xi][yi], pointMassArray[xi-1][yi], linkLength, linkStrength ) );
				}
				if( yi != 0 ){
					allLinks.add( new Link( pointMassArray[xi][yi], pointMassArray[xi][yi-1], linkLength, linkStrength ) );
				}
				
			}
		}
	}