This is a ruler-and-compass construction (although, of course, TikZ calculates coordinates).
The through library is used to draw circles at a point through a point.
The calc library is used to find intersections of two circles via the intersection cs. Unfortunately, this is functionality is not documented in the manual.
You can use it either implicitly:
intersection <sol> of <first line/node> and <second line/node>
where (the optional) <sol> is either 1 or 2, i.e. the first or the second solution shall be returned and where <first line/node> is either the name of a node (of shape circle) or a line specification in the form of <c1>--<c2>. The same is true for <second line/node>.
The explicit specification is
intersection cs: first line/node=<first line/node>,
second line/node=<second line/node>,
solution=<1 or 2>
with the same parameters as above, however the lines need to be in the form of (<c1>)--(<c2>).
I've used both versions in the code below.
With a style like
\tikzset{
perpendic between/.style args={#1 and #2}{
overlay,
insert path={
coordinate (middle of #1 and #2) at ($(#1)!.5!(#2)$)
coordinate (perp-#1-#2) at ($(middle of #1 and #2)!1cm!90:(#1)$)}}}
We can do
% perpendics to ABC
\path [perpendic between/.list={B and C, C and A, A and B}]
% find intersection of two perpendics: center of circumcircle of ABC
coordinate (circ-BCA) at (intersection cs: first line={(middle of B and C)--(perp-B-C)},
second line={(middle of C and A)--(perp-C-A)});
% draw perpendics
\path[thin,blue!50] (circ-BCA) edge (middle of B and C)
edge (middle of C and A)
edge (middle of A and B);
% draw circumcircle of ABC
\node[overlay,draw=blue, at=(circ-BCA), circle through=(A)] {};
and get the circumcircle of ABC.
Obviously, we could package this in another style like incircle of=B-C-D or circumcircle of=A-B-C. That's just more insert paths.
Code
\documentclass[tikz]{standalone}
\usetikzlibrary{calc,through}
\tikzset{
bisec from/.style args={#1 onto #2--#3}{
overlay,
insert path={
node[at=(#1), circle through=(#2)] (@#1-through-#2) {}
coordinate (@#1-through-#2-to-#3) at (intersection of @#1-through-#2 and #1--#3)
node[at=(#2), circle through=(@#1-through-#2-to-#3)] (@#2-circle) {}
node[at=(@#1-through-#2-to-#3), circle through=(#2)] (@#3-circle) {}
coordinate (#1 onto #2-#3) at (intersection of @#2-circle and @#3-circle)
coordinate (bisec-#1) at (intersection of #1--#1 onto #2-#3 and #3--#2)}}}
\begin{document}
\begin{tikzpicture}[thick]
\coordinate[label=below left:$C$] (C) at (-2,0);
\coordinate[label=below right:$A$](A) at (8,0);
\coordinate[label=above left:$B$] (B) at (0,7);
\coordinate[label=above right:$D$](D) at ($(A)!(C)!(B)$);
\draw (A) -- (B) -- (C) -- cycle;
\draw (C) -- (D);
% find point on opposite side where bisec meets
\path [bisec from/.list={C onto D--B, D onto B--C, B onto C--D}]
% find intersection of two bisecs: center of incircle
coordinate (incircle-BCD) at (intersection cs: first line={(B)--(bisec-B)},
second line={(C)--(bisec-C)})
% center of incircle projected on one side
coordinate (incircle-BCD-point) at ($(B)!(incircle-BCD)!(D)$);
% draw bisecs
\draw[thin,red!50] (C) -- (bisec-C) (D) -- (bisec-D) (B) -- (bisec-B);
% incircle
\node[draw=red, at=(incircle-BCD), circle through=(incircle-BCD-point)]{};
% circumcircle of BCD
\node[overlay,draw=red!50!black, at=($(B)!.5!(C)$), circle through=(D)]{};
\end{tikzpicture}
\end{document}
Output
