protected void preDraw(Graphics2D G, Camera camera) {
		saveTransform = G.getTransform();

		Point2D.Float relativeHeading = null;
		if (m_showHeading && (m_heading != null)) {
			relativeHeading = new Point2D.Float.Float(
					m_heading.x - x,
					m_heading.y - y);

			// absolute drawing in the screen coordinate system
			Point headingPt = camera.worldToScreen(m_heading.x, m_heading.y);
			G.setColor(Color.cyan);
			G.drawString(fmt.format(relativeHeading.distance(0, 0)),
					headingPt.x, headingPt.y);
		}

		// absolute drawing in the world system
		Point screenPt = camera.worldToScreen(x, y);

		drawTransform.setToIdentity();
		drawTransform.translate(screenPt.x, screenPt.y);
		drawTransform.scale(camera.getInverseScale(), camera.getInverseScale());
		G.setTransform(drawTransform);

		if (m_showHeading && (m_heading != null)) {
			s_compass.drawHeading(relativeHeading, G, camera);
		}

		// drawing in the object relative coordinate system
		drawTransform.rotate(theta);
		G.setTransform(drawTransform);

		if (selected) {
			drawSelectionCompass(G, camera);
		}
	}