\hypertarget{classPoseT}{}\section{PoseT$<$ PointT $>$ Class Template Reference}
\label{classPoseT}\index{Pose\+T$<$ Point\+T $>$@{Pose\+T$<$ Point\+T $>$}}


A general pose, used to store the frames of the animation.  




{\ttfamily \#include $<$Type-\/\+Skeleton/\+Object\+Types/\+Skeleton/\+Pose\+T.\+hh$>$}

\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{classPoseT_a5a9d4e97c56496891eb33790585dde36}{PoseT} (\hyperlink{classSkeletonT}{SkeletonT}$<$ Point $>$ $\ast$\+\_\+skeleton)
\begin{DoxyCompactList}\small\item\em Constructor. \end{DoxyCompactList}\item 
\hyperlink{classPoseT_ae35c56f35d46493438aa4253234d3cf6}{PoseT} (const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$ \&\+\_\+other)
\begin{DoxyCompactList}\small\item\em Copy Constructor. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classPoseT_a706a4caa1db574b4c3ee0beeca6ac366}\label{classPoseT_a706a4caa1db574b4c3ee0beeca6ac366}} 
virtual \hyperlink{classPoseT_a706a4caa1db574b4c3ee0beeca6ac366}{$\sim$\+PoseT} ()
\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}\textbf{ Pose editing}\par
{\em \label{classPoseT_PoseEditing}%
\Hypertarget{classPoseT_PoseEditing}%
 These methods update the other coordinate systems, changing the local coordinates will also change the global and vice versa. }\begin{DoxyCompactItemize}
\item 
const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT_a455324176656c9d454038d82b650ac83}{local\+Matrix} (unsigned int \+\_\+joint) const
\begin{DoxyCompactList}\small\item\em Returns the local matrix for the given joint. \end{DoxyCompactList}\item 
void \hyperlink{classPoseT_a09a23fe006d4efaadc71d3e731a205a6}{set\+Local\+Matrix} (unsigned int \+\_\+joint, const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \&\+\_\+local, bool \+\_\+keep\+Local\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em Sets the local coordinate system. \end{DoxyCompactList}\item 
\hyperlink{classOpenMesh_1_1VectorT}{Vector} \hyperlink{classPoseT_aac5274f01beab1731d92aa2c4f6675f2}{local\+Translation} (unsigned int \+\_\+joint)
\begin{DoxyCompactList}\small\item\em Returns the local translation vector. \end{DoxyCompactList}\item 
void \hyperlink{classPoseT_a7903b555811eafb67204e829bd286d95}{set\+Local\+Translation} (unsigned int \+\_\+joint, const \hyperlink{classOpenMesh_1_1VectorT}{Vector} \&\+\_\+position, bool \+\_\+keep\+Local\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em Sets the local translation vector. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classPoseT_a1163b2f893bdf26c244733ad194fe0d1}\label{classPoseT_a1163b2f893bdf26c244733ad194fe0d1}} 
\hyperlink{classACG_1_1Matrix4x4T}{Matrix} \hyperlink{classPoseT_a1163b2f893bdf26c244733ad194fe0d1}{local\+Matrix\+Inv} (unsigned int \+\_\+joint) const
\begin{DoxyCompactList}\small\item\em Simply returns the inverse of the local matrix. \end{DoxyCompactList}\item 
const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT_a81732ebc523c08d8b510b7fc9b24e4ef}{global\+Matrix} (unsigned int \+\_\+joint) const
\begin{DoxyCompactList}\small\item\em Returns the global matrix for the given joint. \end{DoxyCompactList}\item 
void \hyperlink{classPoseT_abb3b80190a71cedef449b0e28669de32}{set\+Global\+Matrix} (unsigned int \+\_\+joint, const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \&\+\_\+global, bool \+\_\+keep\+Global\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em Sets the global coordinate system. \end{DoxyCompactList}\item 
\hyperlink{classOpenMesh_1_1VectorT}{Vector} \hyperlink{classPoseT_ac6c29e6e544e09a06a3ff17554125fe8}{global\+Translation} (unsigned int \+\_\+joint)
\begin{DoxyCompactList}\small\item\em Returns the global translation vector. \end{DoxyCompactList}\item 
void \hyperlink{classPoseT_a4ea35b6a61485ed152ba2f3e9ca010d3}{set\+Global\+Translation} (unsigned int \+\_\+joint, const \hyperlink{classOpenMesh_1_1VectorT}{Vector} \&\+\_\+position, bool \+\_\+keep\+Global\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em Sets the global translation vector. \end{DoxyCompactList}\item 
virtual \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \hyperlink{classPoseT_afe038094d58d7dcc87b7a79e9d26f08f}{global\+Matrix\+Inv} (unsigned int \+\_\+joint) const
\begin{DoxyCompactList}\small\item\em Simply returns the inverse of the global matrix. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}\textbf{ Synchronization}\par
{\em Use these methods to keep the pose in sync with the number (and indices) of the joints. }\begin{DoxyCompactItemize}
\item 
virtual void \hyperlink{classPoseT_ae39d34898359c8dd715be2721b2bfb28}{insert\+Joint\+At} (size\+\_\+t \+\_\+index)
\begin{DoxyCompactList}\small\item\em Called by the skeleton/animation as a new joint is inserted. \end{DoxyCompactList}\item 
virtual void \hyperlink{classPoseT_a8158f5108aa89f7e45040940ab121404}{remove\+Joint\+At} (size\+\_\+t \+\_\+index)
\begin{DoxyCompactList}\small\item\em Called by the skeleton/animation as a joint is removed. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}\textbf{ Unified Matrices}\par
{\em \label{classPoseT_UnifiedMatrices}%
\Hypertarget{classPoseT_UnifiedMatrices}%
 Use these methods to gain access to the precalculations performed by this derivation. }\begin{DoxyCompactItemize}
\item 
const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT_a376947cb0e4897f7f727b7c6ccfa73d5}{unified\+Matrix} (size\+\_\+t \+\_\+joint)
\begin{DoxyCompactList}\small\item\em Returns the unified matrix. \end{DoxyCompactList}\item 
const \hyperlink{classACG_1_1QuaternionT}{Quaternion} \& \hyperlink{classPoseT_aa9fe1cc5d8d23cf5211782a79c2a79a3}{unified\+Rotation} (size\+\_\+t \+\_\+joint)
\begin{DoxyCompactList}\small\item\em Returns a quaternion holding the rotational part of the unified matrix. \end{DoxyCompactList}\item 
const \hyperlink{classACG_1_1DualQuaternionT}{Dual\+Quaternion} \& \hyperlink{classPoseT_ae6d72cd37467c56a0f1c8de215a315e8}{unified\+Dual\+Quaternion} (size\+\_\+t \+\_\+joint)
\begin{DoxyCompactList}\small\item\em Returns a dual quaternion holding the unified matrix represented as dual quaternion. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Protected Types}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classPoseT_af368c240c2973962daac54ae7e3d27cf}\label{classPoseT_af368c240c2973962daac54ae7e3d27cf}} 
typedef PointT {\bfseries Point}
\item 
\mbox{\Hypertarget{classPoseT_a468709dd74920ce080dc720ce4cf7746}\label{classPoseT_a468709dd74920ce080dc720ce4cf7746}} 
typedef Point\+::value\+\_\+type {\bfseries Scalar}
\item 
\mbox{\Hypertarget{classPoseT_a62dfae59bca4fb29396e574bdd1bdd3d}\label{classPoseT_a62dfae59bca4fb29396e574bdd1bdd3d}} 
typedef \hyperlink{classOpenMesh_1_1VectorT}{A\+C\+G\+::\+VectorT}$<$ Scalar, 3 $>$ {\bfseries Vector}
\item 
\mbox{\Hypertarget{classPoseT_aae6c6b4a485383840861edc586e525b7}\label{classPoseT_aae6c6b4a485383840861edc586e525b7}} 
typedef \hyperlink{classACG_1_1Matrix4x4T}{A\+C\+G\+::\+Matrix4x4T}$<$ Scalar $>$ {\bfseries Matrix}
\item 
\mbox{\Hypertarget{classPoseT_abb89ad9dccf2ce4882fe185be6c482c2}\label{classPoseT_abb89ad9dccf2ce4882fe185be6c482c2}} 
typedef \hyperlink{classACG_1_1QuaternionT}{A\+C\+G\+::\+QuaternionT}$<$ Scalar $>$ {\bfseries Quaternion}
\item 
\mbox{\Hypertarget{classPoseT_a4473520e3f92ef7c3cbf2e0530eff809}\label{classPoseT_a4473520e3f92ef7c3cbf2e0530eff809}} 
typedef \hyperlink{classACG_1_1DualQuaternionT}{A\+C\+G\+::\+Dual\+QuaternionT}$<$ Scalar $>$ {\bfseries Dual\+Quaternion}
\end{DoxyCompactItemize}
\subsection*{Protected Member Functions}
\begin{Indent}\textbf{ Coordinate system update methods}\par
{\em These methods propagate the change in one of the coordinate systems into the other. This will keep intact the children nodes\textquotesingle{} positions per default (by recursively updating all children.). This behavior can be influenced via the \+\_\+keep\+Child\+Positions parameter. }\begin{DoxyCompactItemize}
\item 
void \hyperlink{classPoseT_a68d06c15d3e7bd5030b479fa18b2bcad}{update\+From\+Local} (size\+\_\+t \+\_\+joint, bool \+\_\+keep\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em This method propagates the change in the local coordinate system to the global system and all children. \end{DoxyCompactList}\item 
void \hyperlink{classPoseT_a62e312478e64ae306d1bb71d2d0c7a39}{update\+From\+Global} (size\+\_\+t \+\_\+joint, bool \+\_\+keep\+Child\+Positions=true)
\begin{DoxyCompactList}\small\item\em This method propagates the change in the global coordinate system to the local system and all children. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Protected Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classPoseT_a190ff4824527354641dc543e24c33e68}\label{classPoseT_a190ff4824527354641dc543e24c33e68}} 
\hyperlink{classSkeletonT}{SkeletonT}$<$ PointT $>$ $\ast$ \hyperlink{classPoseT_a190ff4824527354641dc543e24c33e68}{skeleton\+\_\+}
\begin{DoxyCompactList}\small\item\em a pointer to the skeleton \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classPoseT_a9af0b6c3af4272a9d5460a60018eb452}\label{classPoseT_a9af0b6c3af4272a9d5460a60018eb452}} 
std\+::vector$<$ \hyperlink{classACG_1_1Matrix4x4T}{Matrix} $>$ \hyperlink{classPoseT_a9af0b6c3af4272a9d5460a60018eb452}{local\+\_\+}
\begin{DoxyCompactList}\small\item\em the pose in local coordinates \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classPoseT_a0c76f19d55d359415d220ce62b922aeb}\label{classPoseT_a0c76f19d55d359415d220ce62b922aeb}} 
std\+::vector$<$ \hyperlink{classACG_1_1Matrix4x4T}{Matrix} $>$ \hyperlink{classPoseT_a0c76f19d55d359415d220ce62b922aeb}{global\+\_\+}
\begin{DoxyCompactList}\small\item\em the pose in global coordinates \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classPoseT_af63a7e93df27e04e95444220d88de4fa}\label{classPoseT_af63a7e93df27e04e95444220d88de4fa}} 
std\+::vector$<$ \hyperlink{classACG_1_1Matrix4x4T}{Matrix} $>$ \hyperlink{classPoseT_af63a7e93df27e04e95444220d88de4fa}{unified\+\_\+}
\begin{DoxyCompactList}\small\item\em the global pose matrix left-\/multiplied to the inverse global reference matrix\+: $ M_{pose} \cdot M^{-1}_{reference} $ \end{DoxyCompactList}\item 
std\+::vector$<$ \hyperlink{classACG_1_1DualQuaternionT}{Dual\+Quaternion} $>$ \hyperlink{classPoseT_a83f6b4ed724159f2a28db5de68ca06a6}{unified\+Dual\+Quaternion\+\_\+}
\end{DoxyCompactItemize}
\subsection*{Friends}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classPoseT_a9c68027d454364bb949026efa3c2df9a}\label{classPoseT_a9c68027d454364bb949026efa3c2df9a}} 
{\footnotesize template$<$typename $>$ }\\class {\bfseries SkeletonT}
\item 
\mbox{\Hypertarget{classPoseT_abc60cfa7b53cea6a967cf23baabf58a9}\label{classPoseT_abc60cfa7b53cea6a967cf23baabf58a9}} 
{\footnotesize template$<$typename $>$ }\\class {\bfseries AnimationT}
\item 
\mbox{\Hypertarget{classPoseT_afa541f8158246f2d1f3fc8822d774ea3}\label{classPoseT_afa541f8158246f2d1f3fc8822d774ea3}} 
{\footnotesize template$<$typename $>$ }\\class {\bfseries Frame\+AnimationT}
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$typename PointT$>$\newline
class Pose\+T$<$ Point\+T $>$}

A general pose, used to store the frames of the animation. 

Definition at line 58 of file Pose\+T.\+hh.



\subsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{classPoseT_a5a9d4e97c56496891eb33790585dde36}\label{classPoseT_a5a9d4e97c56496891eb33790585dde36}} 
\index{PoseT@{PoseT}!PoseT@{PoseT}}
\index{PoseT@{PoseT}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{Pose\+T()}{PoseT()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
\hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classPoseT}{PoseT} (\begin{DoxyParamCaption}\item[{\hyperlink{classSkeletonT}{SkeletonT}$<$ Point $>$ $\ast$}]{\+\_\+skeleton }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}}



Constructor. 

Constructor for a new pose.

The pose will automatically be equipped with the right number of fields for the joints stored in the skeleton. Just fill them with data.


\begin{DoxyParams}{Parameters}
{\em \+\_\+skeleton} & The skeleton that owns this pose \\
\hline
\end{DoxyParams}


Definition at line 59 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_ae35c56f35d46493438aa4253234d3cf6}\label{classPoseT_ae35c56f35d46493438aa4253234d3cf6}} 
\index{PoseT@{PoseT}!PoseT@{PoseT}}
\index{PoseT@{PoseT}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{Pose\+T()}{PoseT()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename PointT$>$ \\
\hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classPoseT}{PoseT} (\begin{DoxyParamCaption}\item[{const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$ \&}]{\+\_\+other }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [explicit]}}



Copy Constructor. 

Copy constructor.

Creates an independent copy of the given pose. 

Definition at line 76 of file Pose\+T\+\_\+impl.\+hh.



\subsection{Member Function Documentation}
\mbox{\Hypertarget{classPoseT_a81732ebc523c08d8b510b7fc9b24e4ef}\label{classPoseT_a81732ebc523c08d8b510b7fc9b24e4ef}} 
\index{PoseT@{PoseT}!global\+Matrix@{global\+Matrix}}
\index{global\+Matrix@{global\+Matrix}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{global\+Matrix()}{globalMatrix()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::global\+Matrix (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Returns the global matrix for the given joint. 

global matrix manipulation the global matrix represents a joints orientation/translation in global coordinates

The global Matrix defines the transformation from bone coordinates back into global world coordinates.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The global matrix, relative to world coordinates 
\end{DoxyReturn}


Definition at line 193 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_afe038094d58d7dcc87b7a79e9d26f08f}\label{classPoseT_afe038094d58d7dcc87b7a79e9d26f08f}} 
\index{PoseT@{PoseT}!global\+Matrix\+Inv@{global\+Matrix\+Inv}}
\index{global\+Matrix\+Inv@{global\+Matrix\+Inv}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{global\+Matrix\+Inv()}{globalMatrixInv()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
\hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1Matrix4x4T}{Matrix} \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::global\+Matrix\+Inv (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}



Simply returns the inverse of the global matrix. 

The inverse of the global Matrix defines the transformation from global world coordinates in the currently active pose into bone coordinates. 

Definition at line 267 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_ac6c29e6e544e09a06a3ff17554125fe8}\label{classPoseT_ac6c29e6e544e09a06a3ff17554125fe8}} 
\index{PoseT@{PoseT}!global\+Translation@{global\+Translation}}
\index{global\+Translation@{global\+Translation}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{global\+Translation()}{globalTranslation()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
\hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classOpenMesh_1_1VectorT}{Vector} \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::global\+Translation (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Returns the global translation vector. 


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The global translation vector (the 4th column in the global matrix) 
\end{DoxyReturn}


Definition at line 227 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_ae39d34898359c8dd715be2721b2bfb28}\label{classPoseT_ae39d34898359c8dd715be2721b2bfb28}} 
\index{PoseT@{PoseT}!insert\+Joint\+At@{insert\+Joint\+At}}
\index{insert\+Joint\+At@{insert\+Joint\+At}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{insert\+Joint\+At()}{insertJointAt()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::insert\+Joint\+At (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}



Called by the skeleton/animation as a new joint is inserted. 

To keep the vectors storing the matrices for the joints in sync with the joints a new entry has to be inserted in exactly the same place if a new joint is added to the skeleton. This is done here. Derived classes have to overwrite this method to keep their data members in sync as well. Always call the base class method first.


\begin{DoxyParams}{Parameters}
{\em \+\_\+index} & The new joint is inserted at this position. Insert new joints at the end by passing \hyperlink{classSkeletonT_a115ce9e0148b31f8e66eea56cada1208}{Skeleton\+T$<$$>$\+::joint\+Count()} as parameter. \\
\hline
\end{DoxyParams}


Definition at line 281 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a455324176656c9d454038d82b650ac83}\label{classPoseT_a455324176656c9d454038d82b650ac83}} 
\index{PoseT@{PoseT}!local\+Matrix@{local\+Matrix}}
\index{local\+Matrix@{local\+Matrix}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{local\+Matrix()}{localMatrix()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::local\+Matrix (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}



Returns the local matrix for the given joint. 

local matrix manipulation the local matrix represents a joints orientation/translation in the coordinate frame of the parent joint


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The local matrix, relative to the parents coordinate system 
\end{DoxyReturn}


Definition at line 104 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_aac5274f01beab1731d92aa2c4f6675f2}\label{classPoseT_aac5274f01beab1731d92aa2c4f6675f2}} 
\index{PoseT@{PoseT}!local\+Translation@{local\+Translation}}
\index{local\+Translation@{local\+Translation}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{local\+Translation()}{localTranslation()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
\hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classOpenMesh_1_1VectorT}{Vector} \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::local\+Translation (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Returns the local translation vector. 

The local translation vector describes the translation from the origin of the parent joint coordinate system to the origin of the local joint coordinate system in local coordinates.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The local translation vector (the 4th column in the local matrix) 
\end{DoxyReturn}


Definition at line 139 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a8158f5108aa89f7e45040940ab121404}\label{classPoseT_a8158f5108aa89f7e45040940ab121404}} 
\index{PoseT@{PoseT}!remove\+Joint\+At@{remove\+Joint\+At}}
\index{remove\+Joint\+At@{remove\+Joint\+At}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{remove\+Joint\+At()}{removeJointAt()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::remove\+Joint\+At (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}



Called by the skeleton/animation as a joint is removed. 

To keep the vectors storing the matrices for the joints in sync with the joints exactly the same entry has to be removed as a joint is removed from the skeleton. This is done here. Derived classes have to overwrite this method to keep their data members in sync as well. Always call the base class method first.


\begin{DoxyParams}{Parameters}
{\em \+\_\+index} & The new joint is inserted at this position. Insert new joints at the end by passing \hyperlink{classSkeletonT_a115ce9e0148b31f8e66eea56cada1208}{Skeleton\+T$<$$>$\+::joint\+Count()} as parameter. \\
\hline
\end{DoxyParams}


Definition at line 298 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_abb3b80190a71cedef449b0e28669de32}\label{classPoseT_abb3b80190a71cedef449b0e28669de32}} 
\index{PoseT@{PoseT}!set\+Global\+Matrix@{set\+Global\+Matrix}}
\index{set\+Global\+Matrix@{set\+Global\+Matrix}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{set\+Global\+Matrix()}{setGlobalMatrix()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::set\+Global\+Matrix (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint,  }\item[{const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \&}]{\+\_\+global,  }\item[{bool}]{\+\_\+keep\+Global\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})}



Sets the global coordinate system. 

The global Matrix defines the transformation from bone coordinates back into global world coordinates. The change will automatically be propagated to all children. Also the local matrices will be updated.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
{\em \+\_\+global} & The new global matrix \\
\hline
{\em \+\_\+keep\+Global\+Child\+Positions} & Do the children stay at the same position or do they move with their parent joint \\
\hline
\end{DoxyParams}


Definition at line 211 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a4ea35b6a61485ed152ba2f3e9ca010d3}\label{classPoseT_a4ea35b6a61485ed152ba2f3e9ca010d3}} 
\index{PoseT@{PoseT}!set\+Global\+Translation@{set\+Global\+Translation}}
\index{set\+Global\+Translation@{set\+Global\+Translation}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{set\+Global\+Translation()}{setGlobalTranslation()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::set\+Global\+Translation (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint,  }\item[{const \hyperlink{classOpenMesh_1_1VectorT}{Vector} \&}]{\+\_\+position,  }\item[{bool}]{\+\_\+keep\+Global\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})}



Sets the global translation vector. 

The matrix is otherwise not modified. The change is automatically propagated to all children. Also the local coordinate frames will be updated.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
{\em \+\_\+position} & The new global translation vector \\
\hline
{\em \+\_\+keep\+Global\+Child\+Positions} & Do the children stay at the same position or do they move with their parent joint \\
\hline
\end{DoxyParams}


Definition at line 249 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a09a23fe006d4efaadc71d3e731a205a6}\label{classPoseT_a09a23fe006d4efaadc71d3e731a205a6}} 
\index{PoseT@{PoseT}!set\+Local\+Matrix@{set\+Local\+Matrix}}
\index{set\+Local\+Matrix@{set\+Local\+Matrix}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{set\+Local\+Matrix()}{setLocalMatrix()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::set\+Local\+Matrix (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint,  }\item[{const \hyperlink{classACG_1_1Matrix4x4T}{Matrix} \&}]{\+\_\+local,  }\item[{bool}]{\+\_\+keep\+Local\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})}



Sets the local coordinate system. 

The change will automatically be propagated to all children. Also the global matrices will be updated.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
{\em \+\_\+local} & The new local matrix \\
\hline
{\em \+\_\+keep\+Local\+Child\+Positions} & If true, the positions of the children will be kept \\
\hline
\end{DoxyParams}


Definition at line 120 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a7903b555811eafb67204e829bd286d95}\label{classPoseT_a7903b555811eafb67204e829bd286d95}} 
\index{PoseT@{PoseT}!set\+Local\+Translation@{set\+Local\+Translation}}
\index{set\+Local\+Translation@{set\+Local\+Translation}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{set\+Local\+Translation()}{setLocalTranslation()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::set\+Local\+Translation (\begin{DoxyParamCaption}\item[{unsigned int}]{\+\_\+joint,  }\item[{const \hyperlink{classOpenMesh_1_1VectorT}{Vector} \&}]{\+\_\+position,  }\item[{bool}]{\+\_\+keep\+Local\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})}



Sets the local translation vector. 

The matrix is otherwise not modified. The change is automatically propagated to all children. Also the global coordinate frames will be updated.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
{\em \+\_\+position} & The new local translation vector \\
\hline
{\em \+\_\+keep\+Local\+Child\+Positions} & If true, the positions of the children will be kept \\
\hline
\end{DoxyParams}


Definition at line 161 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_ae6d72cd37467c56a0f1c8de215a315e8}\label{classPoseT_ae6d72cd37467c56a0f1c8de215a315e8}} 
\index{PoseT@{PoseT}!unified\+Dual\+Quaternion@{unified\+Dual\+Quaternion}}
\index{unified\+Dual\+Quaternion@{unified\+Dual\+Quaternion}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{unified\+Dual\+Quaternion()}{unifiedDualQuaternion()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1DualQuaternionT}{Dual\+Quaternion} \& \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::unified\+Dual\+Quaternion (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+joint }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Returns a dual quaternion holding the unified matrix represented as dual quaternion. 

This is used by the Dual Quaternion blend skinning.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The rotational part of the unified matrix 
\end{DoxyReturn}


Definition at line 431 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a376947cb0e4897f7f727b7c6ccfa73d5}\label{classPoseT_a376947cb0e4897f7f727b7c6ccfa73d5}} 
\index{PoseT@{PoseT}!unified\+Matrix@{unified\+Matrix}}
\index{unified\+Matrix@{unified\+Matrix}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{unified\+Matrix()}{unifiedMatrix()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1Matrix4x4T}{Matrix} \& \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::unified\+Matrix (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+joint }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Returns the unified matrix. 

The unified matrix stores \[ M_{unified} = M_{pose} \cdot M^{-1}_{reference} \] speeding up the calculation of the vertices in the current pose \[ v_{pose} = M_{pose} \cdot M^{-1}_{reference} \cdot v_{reference} \] The matrix \[ M^{-1}_{reference} \] transforms a point of the skin in global coordinates when the skeleton is in the reference pose to local bone coordinates. The Matrix \[ M_{pose} \] takes a point in bone coordinates and transforms it back into global coordinates. As the matrix is given by a skeleton in a different pose, the points in local coordinates will therefore follow the skeleton. \[ v_{pose} = M_{unified} \cdot v_{reference} \]


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}


Definition at line 397 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_aa9fe1cc5d8d23cf5211782a79c2a79a3}\label{classPoseT_aa9fe1cc5d8d23cf5211782a79c2a79a3}} 
\index{PoseT@{PoseT}!unified\+Rotation@{unified\+Rotation}}
\index{unified\+Rotation@{unified\+Rotation}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{unified\+Rotation()}{unifiedRotation()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
const \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::\hyperlink{classACG_1_1QuaternionT}{Quaternion} \& \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::unified\+Rotation (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+joint }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Returns a quaternion holding the rotational part of the unified matrix. 

This is used by the spherical blend skinning.

The rotational part of the unified matrix is stored in the real part of the dual quaternion


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The joints index, same as for \hyperlink{classSkeletonT_a8785317baea75e0e7315c25a94bdfb67}{Skeleton\+T$<$$>$\+::joint} \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The rotational part of the unified matrix 
\end{DoxyReturn}


Definition at line 415 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a62e312478e64ae306d1bb71d2d0c7a39}\label{classPoseT_a62e312478e64ae306d1bb71d2d0c7a39}} 
\index{PoseT@{PoseT}!update\+From\+Global@{update\+From\+Global}}
\index{update\+From\+Global@{update\+From\+Global}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{update\+From\+Global()}{updateFromGlobal()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::update\+From\+Global (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+joint,  }\item[{bool}]{\+\_\+keep\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}



This method propagates the change in the global coordinate system to the local system and all children. 

Do not overwrite this method, instead overwrite Base\+Pose\+::\+Update\+From\+Global\+Callback. Otherwise the recursion will become a problem.


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The updated joints index \\
\hline
{\em \+\_\+keep\+Child\+Positions} & Do the children stay at the same global position or do they move with their parent joint \\
\hline
\end{DoxyParams}


Definition at line 353 of file Pose\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classPoseT_a68d06c15d3e7bd5030b479fa18b2bcad}\label{classPoseT_a68d06c15d3e7bd5030b479fa18b2bcad}} 
\index{PoseT@{PoseT}!update\+From\+Local@{update\+From\+Local}}
\index{update\+From\+Local@{update\+From\+Local}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{update\+From\+Local()}{updateFromLocal()}}
{\footnotesize\ttfamily template$<$typename PointT $>$ \\
void \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::update\+From\+Local (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{\+\_\+joint,  }\item[{bool}]{\+\_\+keep\+Child\+Positions = {\ttfamily true} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}



This method propagates the change in the local coordinate system to the global system and all children. 


\begin{DoxyParams}{Parameters}
{\em \+\_\+joint} & The updated joints index \\
\hline
{\em \+\_\+keep\+Child\+Positions} & Do the children stay at the same position or do they move with their parent joint \\
\hline
\end{DoxyParams}


Definition at line 315 of file Pose\+T\+\_\+impl.\+hh.



\subsection{Member Data Documentation}
\mbox{\Hypertarget{classPoseT_a83f6b4ed724159f2a28db5de68ca06a6}\label{classPoseT_a83f6b4ed724159f2a28db5de68ca06a6}} 
\index{PoseT@{PoseT}!unified\+Dual\+Quaternion\+\_\+@{unified\+Dual\+Quaternion\+\_\+}}
\index{unified\+Dual\+Quaternion\+\_\+@{unified\+Dual\+Quaternion\+\_\+}!PoseT@{PoseT}}
\subsubsection{\texorpdfstring{unified\+Dual\+Quaternion\+\_\+}{unifiedDualQuaternion\_}}
{\footnotesize\ttfamily template$<$typename PointT$>$ \\
std\+::vector$<$\hyperlink{classACG_1_1DualQuaternionT}{Dual\+Quaternion}$>$ \hyperlink{classPoseT}{PoseT}$<$ PointT $>$\+::unified\+Dual\+Quaternion\+\_\+\hspace{0.3cm}{\ttfamily [protected]}}

Joint\+T\+::\+Pose\+T\+::unified in Dual\+Quaternion representation note\+: the real part of the dual quaternion is the rotation part of the transformation as quaternion 

Definition at line 190 of file Pose\+T.\+hh.



The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
Type-\/\+Skeleton/\+Object\+Types/\+Skeleton/Pose\+T.\+hh\item 
Type-\/\+Skeleton/\+Object\+Types/\+Skeleton/Pose\+T\+\_\+impl.\+hh\end{DoxyCompactItemize}
