What is the best way to draw one arrow surrounded by two circular arrows (see image below). This is very easy to do when you have a small number of nodes, especially so when the arrows go from one anchor (ie. south east) to another anchor (ie. north west). Things become more complex when you have >10 incoming arrow triples. What's the most painless way to have the desired affect, without having to hard code the coordinates.
Here is a diagram I have drawn (MWE below) and you can see of the ones I have manually connected, nodes 2 and 4 look the best, but they are still a little too close. Nodes 1 and 3 I have intentionally botched to make a point: if one does not explicitly state the source coordinates, the line will be automatically placed at some location (in this case south of node 1, slightly east, or vice versa for Node 3). Node 5 shows how the default configuration is less than ideal, and node 6 shows that it completely failed.
Are there any experts out there that could tell me what I am doing wrong?
MWE:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri,calc,shadows}
\begin{document}
\begin{tikzpicture}[
parent/.style={%
rounded corners,
thick,
draw=red!75,
fill=red!20,
thick,
inner ysep=2pt,
inner xsep=2pt,
minimum width = 4cm,
minimum height = 1.5cm,
align=center
},
child/.style={%
rounded corners,
thick,
draw=blue!90,
fill=blue!35,
thick,
inner ysep=2pt,
inner xsep=2pt,
minimum width = 4cm,
minimum height = 1.5cm,
align=center
},
grandchild/.style={%
rounded corners,
thick,
draw=green!90,
fill=green!35,
thick,
inner ysep=2pt,
inner xsep=2pt,
minimum width = 4cm,
minimum height = 1.5cm,
align=center
},
line/.style={%
semithick,
->,
shorten >=1pt,
>=stealth'
},
call/.style={%
blue,
semithick,
->,
shorten >=1pt,
>=stealth'
},
return/.style={%
red,
semithick,
->,
shorten >=1pt,
>=stealth'
}]
\node[child] (child) {Child};
\node[parent] at (-6,3) (parent 1) {Node 1\\I have manually\\connected this one};
\node[parent] at (0,3) (parent 2) {Node 2\\I have manually\\connected this one};
\node[parent] at (6,3) (parent 3) {Node 3\\I have manually\\connected this one};
\node[parent] at (-6,-3) (grandchild 1) {Node 4\\I have manually\\connected this one};
\node[parent] at (0,-3) (grandchild 2) {Node 5\\I have NOT manually\\connacted this one};
\node[parent] at (6,-3) (grandchild 3) {Node 6\\I have NOT manually\\connacted this one};
%draw three lines from each parent to each child
\draw [line] (parent 1) -- (child.north west);
\draw [line] (parent 2) -- (child);
\draw [line] (parent 3) -- (child.north east);
%draw three lines from each parent to each child
\draw [line] (grandchild 1.north east) -- (child.south west);
\draw [line] (grandchild 2) -- (child);
\draw [line] (grandchild 3.north west) -- (child.south east);
%Arrows to and from the child class to parent 1
%This denotes the call (green) and return (red) flows
\draw [call] (child.north west) to [auto,bend left] (parent 1.south) ;
\draw [return] (parent 1.east) to [bend left] (child.north west);
%Arrows to and from the child class to parent 2
%This denotes the call (green) and return (red) flows
\draw [call] (child.north) to [auto,bend left] (parent 2.south) ;
\draw [return] (parent 2.south) to [bend left] (child.north);
%Arrows to and from the child class to parent 3
%This denotes the call (green) and return (red) flows
\draw [call] (child.north east) to [auto,bend left] (parent 3.west) ;
\draw [return] (parent 3.south) to [bend left] (child.north east);
%Arrows to and from the child class to first grandchild
%This denotes the call (green) and return (red) flows
\draw [call] (child.south west) to [auto,bend left] (grandchild 1.north east) ;
\draw [return] (grandchild 1.north east) to [bend left] (child.south west);
%Arrows to and from the child class to second grandchild
%This denotes the call (green) and return (red) flows
\draw [call] (child) to [auto,bend left] (grandchild 2) ;
\draw [return] (grandchild 2) to [bend left] (child);
%Arrows to and from the child class to third grandchild
%This denotes the call (green) and return (red) flows
\draw [call] (child) to [auto,bend left] (grandchild 3) ;
\draw [return] (grandchild 3) to [bend left] (child);
\end{tikzpicture}
\end{document}
chamfered rectangle
shape option for parents and grandchilds. Also I would not use reserved keys if I won't be using the tree structure explicitly. Lastly you are loading almost every possible library out there and you might not need most of them for this purpose..tex
file and I forgot to edit it for the MWE.tree
structures. So if you happen to have some sort of a tree( which seems so) the name clash can cause further problems. That's what I wanted to draw your attention to.