\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{calc}

\usepackage{bm}
\renewcommand{\vec}[1]{\bm{#1}}
\newcommand*{\uveci}{\bm{\hat{\mkern-1mu \textit{\bfseries\i} \mkern1.5mu}}}
\newcommand*{\uvecj}{\bm{\hat{\textit{\bfseries\j} \mkern1.5mu}}}
\DeclareRobustCommand{\uvec}[1]{{
  \ifcsname uvec\detokenize{#1}\endcsname
    \csname uvec#1\endcsname
  \else
    \bm{\hat{#1}}
  \fi
}}

\pagestyle{empty}

\begin{document}

% Parameters for figures

\pgfmathsetmacro{\XP}{0.4}
\pgfmathsetmacro{\YP}{0.75}
\pgfmathsetmacro{\alphavec}{15}
\pgfmathsetmacro{\betavec}{20}
\pgfmathsetmacro{\gammavec}{30}
\pgfmathsetmacro{\veclength}{1}
\pgfmathsetmacro{\ijkveclength}{0.5}
\pgfmathsetmacro{\angledist}{0.75}
\pgfmathsetmacro{\circleradius}{0.4}
\pgfmathsetmacro{\GC}{0.2}
\pgfmathsetmacro{\holedist}{0.2}
\pgfmathsetmacro{\holeradius}{0.11}

% Colors for figures

\colorlet{Ocolor}{black}
\colorlet{Pcolor}{red!90!black}
\colorlet{acolor}{green!50!black}
\colorlet{bcolor}{blue!80!black}
\colorlet{icolor}{purple!60!black}

\tdplotsetmaincoords{60}{120}
\begin{tikzpicture}[scale=5,tdplot_main_coords]

  % Global coordinate system

  \coordinate (O) at (0,0,0);
  \node[anchor=south east,color=Ocolor] at (O){$O$};
  \draw[thick,color=Ocolor,->] (0,0,0) -- (\veclength,0,0) node[anchor=north east]{$X$};
  \draw[thick,color=Ocolor,->] (0,0,0) -- (0,\veclength,0) node[anchor=west]{$Y$};
  \draw[thick,color=Ocolor,->] (0,0,0) -- (0,0,\veclength) node[anchor=south]{$Z$};

  % Coordinate P

  \coordinate (P) at (\XP,\YP,0);
  \node[anchor=north west] at (P){$P$};
  \draw[dashed,color=Pcolor] (O) -- (\XP/2,0,0) node[anchor=east]{$X_P$} -- (\XP,0,0);
  \draw[dashed,color=Pcolor] (\XP,0,0) -- (\XP,\YP/2,0) node[anchor=north]{$Y_P$} -- (P);

  % I,J,K vectors at P

  \tdplotsetrotatedcoords{0}{0}{0}
  \tdplotsetrotatedcoordsorigin{(P)}
  \draw[thick,tdplot_rotated_coords,color=Pcolor,->] (0,0,0) -- (\veclength,0,0) node[anchor=north east]{$\uvec{I}$};
  \draw[thick,tdplot_rotated_coords,color=Pcolor,->] (0,0,0) -- (0,\veclength,0) node[anchor=west]{$\uvec{J}$};
  \draw[thick,tdplot_rotated_coords,color=Pcolor,->] (0,0,0) -- (0,0,\veclength)
  node[anchor=south,color=black]{${\color{Pcolor} \uvec{K}} = {\color{acolor} \uvec{a_3}}$};

  % a1,a2,a3 vectors

  \tdplotsetrotatedcoords{\alphavec}{0}{0}
  \tdplotsetrotatedcoordsorigin{(P)}
  \draw[thick,tdplot_rotated_coords,color=acolor,->] (0,0,0) -- (\veclength,0,0) node[anchor=east]{$\uvec{a_1}$};
  \draw[thick,tdplot_rotated_coords,color=acolor,->] (0,0,0) -- (0,\veclength,0)
  node[anchor=west,color=black]{${\color{acolor} \uvec{a_2}} = {\color{bcolor} \uvec{b_2}}$};
  \draw[dashed,thick,tdplot_rotated_coords,color=acolor,->] (0,0,0) -- (0,0,\veclength);
  \tdplotdrawarc[color=acolor,->]{(P)}{\angledist}{0}{\alphavec}{anchor=north}{$\alpha$}
  \tdplotdrawarc[color=acolor,->]{(P)}{\angledist}{90}{90+\alphavec}{anchor=east}{$\alpha$}

  % Find point C

  \tdplotsetcoord{C_P}{\circleradius}{\betavec}{\alphavec}
  \coordinate (C) at ($(P) + (C_P)$);

  % beta angle measurement arc
  \tdplotsetthetaplanecoords{\alphavec}
  \tdplotdrawarc[tdplot_rotated_coords,color=bcolor,->]{(P)}{\angledist}{0}{\betavec}{anchor=south}{$\beta$}

  % circle and hole
  % note that i=z, j=x, and k=y

  \tdplotsetrotatedcoords{\alphavec}{90+\betavec}{90+\gammavec}
  \tdplotsetrotatedcoordsorigin{(C)}

  \begin{scope}[transparency group]
    \draw[thick,tdplot_rotated_coords,even odd rule,fill=gray,fill opacity=0.7] (C) circle[radius=\circleradius]
    (C) + (0,-\holedist,0) circle[radius=\holeradius] node[opaque,anchor=west]{$H$};
  \end{scope}
  \draw (C) node[anchor=north east]{$C$};

  % center of gravity circle

  % upper right
  \begin{scope}
    \clip[tdplot_rotated_coords] (0,\GC,0) -- (0,\GC+\circleradius,0) -- (\circleradius,\GC+\circleradius,0) -- (\circleradius,\GC,0) -- cycle;
    \draw[thick,tdplot_rotated_coords,fill=white] (C) + (0,\GC,0) circle[radius=0.05];
  \end{scope}
  % upper left
  \begin{scope}
    \clip[tdplot_rotated_coords] (0,\GC,0) -- (0,\GC+\circleradius,0) -- (-\circleradius,\GC+\circleradius,0) -- (-\circleradius,\GC,0) -- cycle;
    \draw[thick,tdplot_rotated_coords,fill=black] (C) + (0,\GC,0) circle[radius=0.05];
  \end{scope}
  % lower right
  \begin{scope}
    \clip[tdplot_rotated_coords] (0,\GC,0) -- (0,\GC-\circleradius,0) -- (\circleradius,\GC-\circleradius,0) -- (\circleradius,\GC,0) -- cycle;
    \draw[thick,tdplot_rotated_coords,fill=black] (C) + (0,\GC,0) circle[radius=0.05];
  \end{scope}
  % lower left
  \begin{scope}
    \clip[tdplot_rotated_coords] (0,\GC,0) -- (0,\GC-\circleradius,0) -- (-\circleradius,\GC-\circleradius,0) -- (-\circleradius,\GC,0) -- cycle;
    \draw[thick,tdplot_rotated_coords,fill=white] (C) + (0,\GC,0) circle[radius=0.05];
  \end{scope}
  \path[tdplot_rotated_coords] (C) + (0,\GC,0) node[anchor=north east,inner sep=5pt]{$G$};

  % b1,b2,b3 vectors

  \tdplotsetthetaplanecoords{\alphavec}
  \tdplotdrawarc[tdplot_rotated_coords,color=bcolor,->]{(P)}{\angledist}{90}{90+\betavec}{anchor=north east}{$\beta$}

  \tdplotsetrotatedcoords{\alphavec}{\betavec}{0}
  \tdplotsetrotatedcoordsorigin{(P)}
  \draw[thick,tdplot_rotated_coords,color=bcolor,->] (0,0,0) -- (\veclength,0,0) node[anchor=north]{$\uvec{b_1}$};
  \draw[dashed,thick,tdplot_rotated_coords,color=bcolor,->] (0,0,0) -- (0,\veclength,0);
  \draw[thick,tdplot_rotated_coords,color=bcolor,->] (0,0,0) -- (0,0,\veclength) node[anchor=south]{$\uvec{b_3}$};

  % b1,b2 vectors centered about C

  \tdplotsetrotatedcoords{\alphavec}{\betavec}{0}
  \tdplotsetrotatedcoordsorigin{(C)}
  \draw[thick,tdplot_rotated_coords,color=bcolor,->] (0,0,0) -- (\ijkveclength,0,0);
  \draw[thick,tdplot_rotated_coords,color=bcolor,->] (0,0,0) -- (0,\ijkveclength,0) node[anchor=west]{$\uvec{b_2}$};

  % i,j,k vectors
  % note that i=z, j=x, and k=y

  \tdplotsetrotatedcoords{\alphavec}{90+\betavec}{90+\gammavec}
  \tdplotsetrotatedcoordsorigin{(C)}
  \begin{scope}[transparency group]
    \path[tdplot_rotated_coords] (0,0,\ijkveclength)
    node[anchor=north,color=white,fill=white,opacity=0.6]{$\uvec{b_1} = \uvec{i}$};
  \end{scope}
  \draw[dashed,thick,tdplot_rotated_coords,color=icolor,->] (0,0,0) -- (0,0,\ijkveclength)
  node[anchor=north,color=black]{${\color{bcolor} \uvec{b_1}} = {\color{icolor} \uvec{i}}$};
  \draw[thick,tdplot_rotated_coords,color=icolor,->] (0,0,0) -- (\ijkveclength,0,0) node[anchor=west]{$\uvec{j}$};
  \draw[thick,tdplot_rotated_coords,color=icolor,->] (0,0,0) -- (0,\ijkveclength,0) node[anchor=south]{$\uvec{k}$};
  \path[tdplot_rotated_coords,color=icolor] (C) + (90-\gammavec/2:\angledist-\circleradius) node[anchor=south,inner sep=6pt]{$\gamma$};
  \draw[tdplot_rotated_coords,color=icolor,->] (C) + (90-\gammavec:\angledist-\circleradius) arc (90-\gammavec:90:\angledist-\circleradius);
  \path[tdplot_rotated_coords,color=icolor] (C) + (-\gammavec/2:\angledist-\circleradius) node[anchor=east,inner sep=6pt]{$\gamma$};
  \draw[tdplot_rotated_coords,color=icolor,->] (C) + (-\gammavec:\angledist-\circleradius) arc (-\gammavec:0:\angledist-\circleradius);

  % centers of circles

  \draw[tdplot_rotated_coords] ($(C) + (0,0.03,0)$) -- ++(0,-0.06,0);
  \draw[tdplot_rotated_coords] ($(C) + (0.03,0,0)$) -- ++(-0.06,0,0);
  \draw[tdplot_rotated_coords] ($(C) + (0,-\holedist+0.03,0)$) -- ++(0,-0.06,0);
  \draw[tdplot_rotated_coords] ($(C) + (0.03,-\holedist,0)$) -- ++(-0.06,0,0);

\end{tikzpicture}

\end{document}
