[Tex/LaTex] What would be a fast, flexible way to draw a labelled diagram with many cones, circles and lines

diagramstikz-pgf

I want to make some diagrams that look like the following:

I have considered TikZ for this purpose, but it appears to be more involved than I would like for creating many diagrams like this that I'd change a lot. I don't really have the time to obsess over coordinates and so on. Is there some sensible way to use TikZ to produce a picture like this? Is there a high-level infrastructure that can produce TikZ images using a graphical interface? Is there some faster way of coding diagrams like this?

Here's what code for one unlabelled, uncolored cone might look like in TikZ:

\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}

\begin{tikzpicture}
\draw[dashed] (0,0) arc (170:10:2cm and 0.4cm) coordinate[pos=0] (a);
\draw (0,0) arc (-170:-10:2cm and 0.4cm) coordinate (b);
\draw (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b);
\end{tikzpicture}

\end{document}

Best Answer

You can start with something like this:

\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}

\tikzset{
pics/cone/.style args={#1}{
  code={
    \draw [fill=#1!10,thick,join=round](0,0) -- (3,-.5) -- (3,.5) --cycle;
    \draw [fill=#1!10,thick](3,0) ellipse (.25 and .5);
    \draw [thick,fill=#1!70](0,0)--(2.5,0);
    \path (2.5,0)[fill=#1!70] circle [radius=.2cm];
  }
}
}

\begin{tikzpicture}[thick]
\node [circle,minimum size=1cm,fill=yellow]{};
\draw (0,0)--(2,1) (0,0)--(-2,1)--(-4,0) (0,0)--(0,-2);

\path (2,1)  pic {cone=red};
\path (0,-2) pic [rotate=-60]{cone=red};
\path (0,-2) pic [rotate=-100]{cone=red};
\path (-2,1) pic [rotate=150]{cone=red};
\path (-4,0) pic [rotate=190,scale=.7]{cone=green};
\path (-4,0) pic [rotate=220,scale=.7]{cone=green};

\end{tikzpicture}    
\end{document}

enter image description here


EDIT: example extended

enter image description here

\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}

\tikzset{
    pics/jet/.style args={#1}{
        % default rotation: 0 degrees (jet progressing to right)
        code={
            \draw [fill=#1!30, thick,join=round](0, 0) -- (3, -.5) -- (3, .5) --cycle;
            \draw [fill=#1!30, thick](3, 0) ellipse (.25 and .5);
            \draw [thick, fill=#1!90](0, 0)--(2.5, 0);
            \path (2.5, 0)[fill=#1!90] circle [radius=.2cm];
        }
    }
}

\begin{tikzpicture}[thick]

\node [circle, minimum size=1cm, fill=yellow]{};

\draw (0, 0)--(2, 1) (0, 0)--(-2, 1)--(-3, 0) (0, 0)--(0, -2) (2, 1)--(3, 3);

\node at (-3, 0) [circle, minimum size=0.7cm, fill=blue!60]{};
\node at (3, 3) [circle, minimum size=0.7cm, fill=blue!60]{};

\draw (3, 3)--(3.5, 4);

\node at (3.5, 4) [circle, minimum size=0.5cm, fill=orange]{};

\draw[dotted] (3, 3)--(4, 3.5);

\path (2, 1)  pic {jet=red};
\path (0, -2) pic [rotate=-60] {jet=red};
\path (0, -2) pic [rotate=-100] {jet=red};
\path (-2, 1) pic [rotate=140] {jet=red};
\path (-3, 0) pic [rotate=210, scale=.7]{jet=green};
\path (-3, 0) pic [rotate=240, scale=.7]{jet=green};

\node[label={\Large ${l^{-}}$}] at (3.5, 4) {};
\node[label={right:\Large ${\bar{\nu}}$}] at (4, 3.5) {};
\node[label={right:\Large ${W^{-}}$}, xshift=0.2cm, yshift=-0.2cm] at (3, 3) {};
\node[label={below:\Large ${\bar{b}}$}, yshift=-0.3cm] at (4, 1) {};
\node[label={right:\Large ${\bar{b}}$}, xshift=-0.3cm, yshift=0.3cm] at (2, -4) {};
\node[label={left:\Large ${b}$}, xshift=0.2cm] at (-1, -4) {};
\node[label={left:\Large ${\bar{q}}$}] at (-3, -2) {};
\node[label={left:\Large ${q}$}] at (-4, 0) {};
\node[label={above:\Large ${W^{+}}$}, yshift=0.3cm] at (-3, 0) {};
\node[label={left:\Large ${b}$}] at (-3, 3) {};
\node[label={left:\Large ${t}$}] at (-0.8, 1) {};
\node[label={left:\Large ${\bar{t}}$}] at (1.5, 1) {};
\node[label={left:\Large ${H}$}] at (0, -1) {};

\end{tikzpicture}
\end{document}