public void draw() {
		background(33);
		strokeWeight(3);
		noFill();

		int i = 0;
		for (ConnectionConfig cc : connectionConfigs) {
			if (!cc.upside) {
				pushMatrix();
				translate(0, 226);
			}

			Set<Connection> connections = connectionsList.get(i);
			for (Connection connection : connections) {
				connection.draw();
			}

			if (!cc.upside) {
				popMatrix();
			}

			i++;
		}

		// Draws nodes, and up and down dotted lines
		for (Node node : nodes) {
			node.draw();
		}

		image(titleImg, 24, 24);

		// Draw selected Node
		if (selectedNode != null) {

			// Darken background (arcs arc)
			noStroke();
			fill(0, 140);
			rect(0, 0, width, height);

			float w = min(selectedNode.thumbnail.width, 1000);
			float h = min(selectedNode.thumbnail.height, 600);
			float x = width / 2 - (w / 2);
			float y = height / 2 - (h / 2);

			// Information box (for image plus metadata)
			noStroke();
			fill(127);
			rect(x - 5, y - 5, w + 10, h + 50);
			fill(255);
			textSize(20);
			text(selectedNode.name, x, y + h + 40 - 15);
			textSize(12);
			text(selectedNode.reference, x, y + h + 50 - 10);

			// Large image of arc vis
			selectedNode.drawThumbnail(x, y, w, h);
		}

		if (renderAsPdf) {
			exit();
		}
	}