I often see difficult when I try to draw dashed lines automatically. This picture drew bisector plane of two planes. How to draw it?

![phan_giac.png](/image?hash=d9796d1e8216d2589edb1e10a777c49ac39d743a3c35c74217cf49665b740268)
There is a new feature in [3dtools](https://github.com/marmotghost/tikz-3dtools): 3d/draw ordered paths. It draws paths, which the user has to save with save named path, in a given order but uses clips and inverted clips to distinguish between hidden and visible stretches. It is designed to work for (plane) polygons and, more generally, closed curves, but since a clip along a single straight line does not do anything it can also be used for single straight lines. It draws the object in the order it is given them, i.e. does *not* attempt to do any automatic 3d ordering. But it allows one to avoid some repetition.

In this example we use the planes and some lines for these paths.

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3dtools}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=50,theta=70},
line join=round, line cap=round,
declare function={a=3;b=2.7;alpha=20;},same bounding box=A]
\path
(0,0,0) coordinate[label=left:{$O$}] (P_0)
(-a/2,0,0) coordinate (P_1)
(a/2,0,0) coordinate (P_2)
(0,a,0) coordinate (A_0)
(-a/2,a,0) coordinate (A_1)
(a/2,a,0) coordinate (A_2)
(0,{a*cos(alpha/2)},{a*sin(alpha/2)}) coordinate (B_0)
(-a/2,{a*cos(alpha/2)},{a*sin(alpha/2)}) coordinate (B_1)
(a/2,{a*cos(alpha/2)},{a*sin(alpha/2)}) coordinate (B_2)
(0,{b*cos(alpha/2)},{b*sin(alpha/2)}) coordinate (B)
(0,{a*cos(alpha)},{a*sin(alpha)}) coordinate (C_0)
(-a/2,{a*cos(alpha)},{a*sin(alpha)}) coordinate (C_1)
(a/2,{a*cos(alpha)},{a*sin(alpha)}) coordinate (C_2);
\foreach \X in {A,B,C}
{\path[save named path=p\X] (P_1) -- (P_2) -- (\X_2) -- (\X_1) -- cycle;
\path[save named path=l\X] (P_0) -- (\X_0);}
\foreach \X in {A,C}
{\tikzset{3d/plane through={(P_1) and (P_2) and (\X_1) named p\X}}
\path[/tikz/3d/project={(B) on p\X}] coordinate (B_\X);
\path[save named path=lB\X] (B) -- (B_\X);}
\pgfmathsetmacro{\nA}{TDunit("(A_1)-(P_1)x(P_2)-(P_1)")}
\pgfmathsetmacro{\nC}{TDunit("(C_1)-(P_1)x(P_1)-(P_2)")}
\pgfmathtruncatemacro{\itest}{screendepth(\nA)>screendepth(\nC)?1:0}
\ifnum\itest=1
\tikzset{3d/draw ordered paths={pC,lC,lBC,pB,lB,lBA,pA,lA}}
\else
\tikzset{3d/draw ordered paths={pA,lA,lBA,pB,lB,lBC,pC,lC}}
\fi
\end{tikzpicture}
\end{document}

![Screen Shot 2021-04-25 at 8.03.38 PM.png](/image?hash=844d0154ccec49062712eb841a349e154d894ed7761579dcd0c2f4198473d153)