private void drawHeatFluxSensors(Graphics2D g) {
		List<HeatFluxSensor> heatFluxSensors = model.getHeatFluxSensors();
		if (heatFluxSensors.isEmpty())
			return;
		g.setStroke(thinStroke);
		Symbol.HeatFluxSensor s = new Symbol.HeatFluxSensor(false);
		float w = HeatFluxSensor.RELATIVE_WIDTH * model.getLx();
		float h = HeatFluxSensor.RELATIVE_HEIGHT * model.getLy();
		s.setIconWidth((int) (w * getHeight() / (xmax - xmin))); // use view height to set icon dimension so that the sensor doesn't get distorted
		s.setIconHeight((int) (h * getHeight() / (ymax - ymin)));
		float iconW2 = s.getIconWidth() * 0.5f;
		float iconH2 = s.getIconHeight() * 0.5f;
		g.setFont(sensorReadingFont);
		int x, y;
		float rx, ry;
		String str;
		synchronized (heatFluxSensors) {
			for (HeatFluxSensor f : heatFluxSensors) {
				Rectangle2D.Float r = (Rectangle2D.Float) f.getShape();
				r.width = w;
				r.height = h;
				rx = (f.getX() - xmin) / (xmax - xmin);
				ry = (f.getY() - ymin) / (ymax - ymin);
				if (rx >= 0 && rx < 1 && ry >= 0 && ry < 1) {
					x = (int) (rx * getWidth() - iconW2);
					y = (int) (ry * getHeight() - iconH2);
					str = HEAT_FLUX_FORMAT.format(f.getValue()) + "W/m" + '\u00B2';
					if (f.getAngle() != 0)
						g.rotate(-f.getAngle(), x + s.wSymbol / 2, y + s.hSymbol / 2);
					centerString(str, g, (int) (x + iconW2), y - 5, true);
					if (f.getLabel() != null)
						centerString(f.getLabel(), g, (int) (x + iconW2), y + s.getIconHeight() + 12, false);
					s.paintIcon(this, g, x, y);
					if (f.getAngle() != 0)
						g.rotate(f.getAngle(), x + s.wSymbol / 2, y + s.hSymbol / 2);
				}
			}
		}
	}