public IEntityImage createFile(String... dotStrings) throws IOException, InterruptedException {

		dotStringFactory = new DotStringFactory(colorSequence, stringBounder, dotData);
		shapeMap = new HashMap<IEntity, Shape>();

		printGroups(null);
		printEntities(getUnpackagedEntities());

		// final Map<Link, Line> lineMap = new HashMap<Link, Line>();

		for (Link link : dotData.getLinks()) {
			final String shapeUid1 = getShapeUid(link.getEntity1());
			final String shapeUid2 = getShapeUid(link.getEntity2());

			String ltail = null;
			if (shapeUid1.startsWith(Cluster.CENTER_ID)) {
				ltail = getCluster(link.getEntity1().getParent()).getClusterId();
			}
			String lhead = null;
			if (shapeUid2.startsWith(Cluster.CENTER_ID)) {
				lhead = getCluster(link.getEntity2().getParent()).getClusterId();
			}
			final FontConfiguration labelFont = new FontConfiguration(dotData.getSkinParam().getFont(
					FontParam.ACTIVITY_ARROW, null), HtmlColor.BLACK);

			final Line line = new Line(shapeUid1, shapeUid2, link, colorSequence, ltail, lhead, dotData.getSkinParam(),
					stringBounder, labelFont);
			// lineMap.put(link, line);
			dotStringFactory.addLine(line);

			if (link.getEntity1().getType() == EntityType.NOTE && onlyOneLink(link.getEntity1())) {
				final Shape shape = shapeMap.get(link.getEntity1());
				((EntityImageNote) shape.getImage()).setOpaleLine(line, shape);
				line.setOpale(true);
			} else if (link.getEntity2().getType() == EntityType.NOTE && onlyOneLink(link.getEntity2())) {
				final Shape shape = shapeMap.get(link.getEntity2());
				((EntityImageNote) shape.getImage()).setOpaleLine(line, shape);
				line.setOpale(true);
			}
		}

		if (dotStringFactory.illegalDotExe()) {
			return error(dotStringFactory.getDotExe());
		}

		final Dimension2D dim = Dimension2DDouble.delta(dotStringFactory.solve(dotStrings), 10);
		final HtmlColor border;
		if (dotData.getUmlDiagramType() == UmlDiagramType.STATE) {
			border = getColor(ColorParam.stateBorder, null);
		} else {
			border = getColor(ColorParam.packageBorder, null);
		}
		final SvekResult result = new SvekResult(dim, dotData, dotStringFactory, border);
		result.moveSvek(6, 0);
		return result;

	}