`3dtools` is prepared for that, at least to some degree. You can use the `after hidden` and `after visible` hooks, which only get executed if the plane is visible or hidden. And then it makes sense to avoid repetition by defining styles that do all this for you.
```
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,3dtools}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=120,theta=70},line cap=butt,
line join=round,c/.style={circle,fill,inner sep=1pt},
declare function={a=3;}]
\path
(a,-a,-a) coordinate (A)
(a,a,-a) coordinate (B)
(-a,a,-a) coordinate (C)
(-a,-a,-a) coordinate (D)
(a,-a,a) coordinate (E)
(a,a,a) coordinate (F)
(-a,a,a) coordinate (G)
(-a,-a,a) coordinate (H)
(0,0,0) coordinate (O)
[3d coordinate={(M)=0.5*(A) + 0.5*(H)},3d coordinate={(N)=0.5*(B) + 0.5*(G)},3d coordinate={(P)=0.5*(C) + 0.5*(H)},,3d coordinate={(Q)=0.5*(A) + 0.5*(F)} ];
\tikzset{3d/polyhedron/.cd,cr/.code n args={5}{\tikzset{3d/define orthonormal dreibein={A={(#2)},B={(#3)},C={(#4)}}}
\begin{scope}[x={(ex)},y={(ey)},z={(ez)}]
\draw[#1] ($0.25*(#2)+0.25*(#3)+0.25*(#4)+0.25*(#5)$)
circle;
\end{scope}
},4gon with circle/.style n args={5}{
after hidden/.code={
\tikzset{3d/polyhedron/cr={3d/hidden,radius=a,#1}{#2}{#3}{#4}{#5}}
},
after visible/.code={
\tikzset{3d/polyhedron/cr={3d/visible,radius=a,#1}{#2}{#3}{#4}{#5}}
},
draw face with corners={{(#2)},{(#3)},{(#4)},{(#5)}},
after hidden/.code={},after visible/.code={},
}
}
\tikzset{3d/polyhedron/.cd,O={(O)},
back/.style={3d/polyhedron/complete dashes,fill=none},
fore/.style={3d/visible,fill=none},
4gon with circle={}{D}{C}{G}{H},
4gon with circle={red}{B}{C}{G}{F},
4gon with circle={blue}{E}{F}{G}{H},
4gon with circle={green!60!black}{A}{B}{C}{D},
4gon with circle={magenta}{A}{B}{F}{E},
4gon with circle={cyan}{A}{E}{H}{D},
%draw face with corners={{(D)},{(C)},{(G)},{(H)}},
%draw face with corners={{(B)},{(C)},{(G)},{(F)}},
%draw face with corners={{(E)},{(F)},{(G)},{(H)}},
%draw face with corners={{(A)},{(B)},{(C)},{(D)}},
%draw face with corners={{(A)},{(B)},{(F)},{(E)}},
%draw face with corners={{(A)},{(E)},{(H)},{(D)}}
}
\path foreach \p/\g in {A/-90,B/-90,C/0,D/0,E/90,F/90,G/0,H/90}{(\p)node[c]{}+(\g:2.5mm) node{$\p$}};
\end{tikzpicture}
\end{document}
```
![Screen Shot 2021-05-25 at 6.50.25 PM.png](/image?hash=01e4d47ce5d36b14e38eccbde72f56087ada0f234764e9639aabf89bead3f62d)