@Override
	public void paint(Graphics g) {
		g2d = (Graphics2D) g;
		List<Point>[] paths = figur.gibPointLists();
		List<Point>[] paths2D = ListOf3DPointsTo2DPoints(paths);
		for (int i = 0; i < paths2D.length; i++) {
			List<Point> path = paths2D[i];
			GeneralPath gp = new GeneralPath();
			gp.moveTo(this.getWidth() / 20, this.getHeight() - this.getHeight()
					/ 20);
			final int factor = 100;
			final int offset = 100;
			Iterator<Point> it = path.iterator();
			Iterator<Point> iter = paths[i].iterator();
			Point p = path.get(0);
			gp.moveTo(factor * (p.getX() * p.getZ()) + offset, this.getHeight()
					- (factor * (p.getY() * p.getZ())) - offset);
			if (!p.isControlPoint())
				g2d.drawString(
						paths[i].get(0).getString(),
						(float) (factor * (p.getX() * p.getZ()) + offset + 8),
						(float) (this.getHeight()
								- (factor * (p.getY() * p.getZ())) - offset) - 1);
			while (it.hasNext()) {
				Point po = it.next();
				if (!po.isControlPoint()) {
					gp.lineTo(factor * (po.getX() * po.getZ()) + offset,
							this.getHeight()
									- (factor * (po.getY() * po.getZ()))
									- offset);
					g2d.drawString(iter.next().getString(), (float) (factor
							* (po.getX() * po.getZ()) + offset + 8),
							(float) (this.getHeight()
									- (factor * (po.getY() * po.getZ()))
									- offset - 1));
				} else {
					if (it.hasNext()) {
						Point po2 = it.next();
						gp.quadTo(
								factor * (po.getX() * po.getZ()) + offset,
								this.getHeight()
										- (factor * (po.getY() * po.getZ()))
										- offset,
								factor * (po2.getX() * po2.getZ()) + offset,
								this.getHeight()
										- (factor * (po2.getY() * po2.getZ()))
										- offset);
						iter.next();
						g2d.drawString(
								iter.next().getString(),
								(float) (factor * (po2.getX() * po2.getZ())
										+ offset + 8),
								(float) (this.getHeight()
										- (factor * (po2.getY() * po2.getZ()))
										- offset - 1));
					}
				}
			}
			gp.closePath();
			g2d.draw(gp);
		}
	}