% lua-tikz3dtools-latex2e-command-definitions.tex
\ProvidesFile{lua-tikz3dtools-latex2e-command-definitions}
\newcommand{\drawpoint}[2][]{
   \begingroup
       \coordinate (@) at (#2);
       \node at (@) [
           circle
           ,minimum size = 2*\tikz@td@gm@pointradius cm
           ,inner sep = 0pt
           ,outer sep = 0pt
           ,fill
           ,/lua-tikz3dtools/geometric-vector/.search also = {/tikz}
           ,/lua-tikz3dtools/geometric-vector/.cd
           ,#1
       ] {};
   \endgroup
}
\newcommand{\drawmark}[1][]{
   \begingroup
       \pgfmathsetmacro{\tikz@td@gm@halfmarklength}{\tikz@td@gm@marklength/2}
       \draw[
           /lua-tikz3dtools/geometric-vector/.search also = {/tikz}
           ,/lua-tikz3dtools/geometric-vector/.cd
           ,#1
       ] (0,-\tikz@td@gm@halfmarklength pt) -- (0,\tikz@td@gm@halfmarklength pt);
   \endgroup
}
\newcommand{\drawvector}[3][]{
   \begingroup
       \tikzset{
           /lua-tikz3dtools/geometric-vector/.search also = {/tikz},
           /lua-tikz3dtools/geometric-vector/.cd,
           #1
       }
       \coordinate (@start) at (#2);
       \ifnum\tikz@td@gm@points=1
           \drawpoint[#1]{@start}
           \draw
               [
                   very thick
                   ,{-Stealth[round]}
                   ,shorten < = \tikz@td@gm@pointradius cm
                   ,/lua-tikz3dtools/geometric-vector/.search also = {/tikz}
                   ,/lua-tikz3dtools/geometric-vector/.cd
                   ,#1
               ] (@start) -- ++(#3);
       \fi
       \ifnum\tikz@td@gm@points=2
           \drawpoint[#1]{@start}
           \draw
               [
                   very thick
                   ,{-Stealth[round]}
                   ,shorten < = \tikz@td@gm@pointradius cm
                   ,shorten > = \tikz@td@gm@pointradius cm
                   ,/lua-tikz3dtools/geometric-vector/.search also = {/tikz}
                   ,/lua-tikz3dtools/geometric-vector/.cd
                   ,#1
               ] (@start) -- ++(#3) coordinate (@end);
           \drawpoint[#1]{@end}
       \fi
       \ifnum\tikz@td@gm@points=0
           \draw
               [
                   very thick
                   ,{-Stealth[round]}
                   ,/lua-tikz3dtools/geometric-vector/.search also = {/tikz}
                   ,/lua-tikz3dtools/geometric-vector/.cd
                   ,#1
               ] (@start) -- ++(#3);
       \fi
       \ifnum\tikz@td@gm@points=3
           \draw
               [
                   very thick
                   ,{-Stealth[round]}
                   ,/lua-tikz3dtools/geometric-vector/.search also = {/tikz}
                   ,/lua-tikz3dtools/geometric-vector/.cd
                   ,#1
               ] (@start) -- ++(#3) coordinate (@end);
           \drawpoint[#1]{@end}
       \fi
       \ifnum\tikz@td@gm@mark=1
           \path
               [
                   decoration = {
                       markings
                       ,mark =
                           between positions \tikz@td@gm@markstart
                           and \tikz@td@gm@markstop
                           step \tikz@td@gm@markstep
                           with {\drawmark}
                   }
                   ,decorate
               ] (#2) -- ++(#3);
       \fi
   \endgroup
}

% Labels a path:
% #2 - Start Coordinate,
% #3 - End Coordinate,
% #4 - Vector (direction),
% #5 - Relative Position along path,
% #6 - Offset coordinate,
% #7 - The label text.
\newcommand{\drawlabel}[7][]{
   \begingroup
   \path
       [
           decoration = {
               markings
               ,mark =
                   at position #4
                   with
                       {
                           \node
                               [
                                   #1
                               ]
                               at (#5,#6) {#7};
                       }
           }
           ,decorate
       ] (#2) -- ++(#3);
   \endgroup
}


\newcommand{\appendprism}[1][]{
   \begingroup
   \tikzset{
       /lua-tikz3dtools/clipped-subspace/plane/.search also = {/lua-tikz3dtools/clipped-subspace},
       /lua-tikz3dtools/clipped-subspace/plane/.cd,
       #1
   }
   % For brevity, assign keys to macros
   \def\xmin{\tikz@td@cs@xmin}
   \def\xmax{\tikz@td@cs@xmax}
   \def\ymin{\tikz@td@cs@ymin}
   \def\ymax{\tikz@td@cs@ymax}
   \def\zmin{\tikz@td@cs@zmin}
   \def\zmax{\tikz@td@cs@zmax}

   % Bottom square edges
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = (1-u)*\xmin + u*\xmax,
       y = \ymin,
       z = \zmin,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmax,
       y = (1-u)*\ymin + u*\ymax,
       z = \zmin,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = (1-u)*\xmax + u*\xmin,
       y = \ymax,
       z = \zmin,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmin,
       y = (1-u)*\ymax + u*\ymin,
       z = \zmin,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]

   % Top square edges
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = (1-u)*\xmin + u*\xmax,
       y = \ymin,
       z = \zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmax,
       y = (1-u)*\ymin + u*\ymax,
       z = \zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = (1-u)*\xmax + u*\xmin,
       y = \ymax,
       z = \zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmin,
       y = (1-u)*\ymax + u*\ymin,
       z = \zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]

   % Vertical edges (pillars)
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmin,
       y = \ymin,
       z = (1-u)*\zmin + u*\zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmax,
       y = \ymin,
       z = (1-u)*\zmin + u*\zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmax,
       y = \ymax,
       z = (1-u)*\zmin + u*\zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \appendcurve[
       u min=0, u max=1, u samples=20,
       x = \xmin,
       y = \ymax,
       z = (1-u)*\zmin + u*\zmax,
       draw options = {draw},
       transformation = \tikz@td@cs@transformation
   ]
   \endgroup
}