private void drawParticleFeeders(Graphics2D g) {
		List<ParticleFeeder> particleFeeders = model.getParticleFeeders();
		if (particleFeeders.isEmpty())
			return;
		Stroke oldStroke = g.getStroke();
		Color oldColor = g.getColor();
		Symbol.ParticleFeederIcon s = new Symbol.ParticleFeederIcon(Color.GRAY, Color.WHITE, false);
		s.setStroke(moderateStroke);
		float w = ParticleFeeder.RELATIVE_WIDTH * model.getLx();
		float h = ParticleFeeder.RELATIVE_HEIGHT * model.getLy();
		s.setIconWidth((int) (w * getHeight() / (xmax - xmin))); // use view height to set icon dimension so that the icon doesn't get distorted
		s.setIconHeight((int) (h * getHeight() / (ymax - ymin)));
		int x, y;
		float rx, ry;
		synchronized (particleFeeders) {
			for (ParticleFeeder pf : particleFeeders) {
				Rectangle2D.Float r = (Rectangle2D.Float) pf.getShape();
				r.x = pf.getX() - w * 0.5f;
				r.y = pf.getY() - h * 0.5f;
				r.width = w;
				r.height = h;
				rx = (pf.getX() - xmin) / (xmax - xmin);
				ry = (pf.getY() - ymin) / (ymax - ymin);
				if (rx >= 0 && rx < 1 && ry >= 0 && ry < 1) {
					x = (int) (rx * getWidth() - 0.5f * s.getIconWidth());
					y = (int) (ry * getHeight() - 0.5f * s.getIconHeight());
					if (pf.getLabel() != null)
						centerString(pf.getLabel(), g, x, y, false);
					s.setColor(pf.getColor());
					s.paintIcon(this, g, x, y);
				}
			}
		}
		g.setStroke(oldStroke);
		g.setColor(oldColor);
	}