public Raster3D(Axis axis, Vector3d origin, int linecount, int distance) {
		final int MAXLENGTH = linecount * distance;

		// FIXME: really ugly, use the Vector inside 'axis'
		switch (axis) {
		case X:
			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x + i * distance, origin.y
						- MAXLENGTH / 2, origin.z);
				Vector3d end = start.copy().add(0, MAXLENGTH, 0);

				cross.add(new Path3D(start, end));
			}

			System.out.println();
			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x - MAXLENGTH / 2,
						origin.y + i * distance, origin.z);
				Vector3d end = start.copy().add(MAXLENGTH, 0, 0);

				line.add(new Path3D(start, end));
			}

			break;
		case Y:
			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x, origin.y - MAXLENGTH
						/ 2, origin.z + i * distance);
				Vector3d end = start.copy().add(0, MAXLENGTH, 0);

				cross.add(new Path3D(start, end));
			}

			System.out.println();
			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x,
						origin.y + i * distance, origin.z - MAXLENGTH / 2);
				Vector3d end = start.copy().add(0, 0, MAXLENGTH);

				line.add(new Path3D(start, end));
			}
			break;
		case Z:

			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x + i * distance,
						origin.y, origin.z - MAXLENGTH / 2);
				Vector3d end = start.copy().add(0, 0, MAXLENGTH);

				cross.add(new Path3D(start, end));
			}

			System.out.println();
			for (int i = -linecount / 2; i <= linecount / 2; i++) {
				Vector3d start = new Vector3d(origin.x - MAXLENGTH / 2,
						origin.y, origin.z + i * distance);
				Vector3d end = start.copy().add(MAXLENGTH, 0, 0);

				line.add(new Path3D(start, end));
			}
			break;
		default:
			break;
		}

	}