\hypertarget{a01340}{\section{Open\+Mesh\+:\+:Tri\+Mesh\+T$<$ Kernel $>$ Class Template Reference}
\label{a01340}\index{Open\+Mesh\+::\+Tri\+Mesh\+T$<$ Kernel $>$@{Open\+Mesh\+::\+Tri\+Mesh\+T$<$ Kernel $>$}}
}


{\ttfamily \#include $<$Open\+Mesh/\+Mesh/\+Tri\+Mesh\+T.\+hh$>$}

Inheritance diagram for Open\+Mesh\+:\+:Tri\+Mesh\+T$<$ Kernel $>$\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=1.485411cm]{a01340}
\end{center}
\end{figure}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01340_a9c100c0d3cd57f15cde3983d40479dfc}{typedef \hyperlink{a01340}{Tri\+Mesh\+T}$<$ Kernel $>$ {\bfseries This}}\label{a01340_a9c100c0d3cd57f15cde3983d40479dfc}

\item 
\hypertarget{a01340_af88176f1c8ee011e6810c2fee45b9867}{typedef \hyperlink{a00994}{Poly\+Mesh\+T}$<$ Kernel $>$ {\bfseries Poly\+Mesh}}\label{a01340_af88176f1c8ee011e6810c2fee45b9867}

\item 
\hypertarget{a01340_ae5a18e7e6ecd7922b819fdba481aece9}{typedef \hyperlink{a00994_a15372f27edf521d8e9028e2abccae342}{Poly\+Mesh\+::\+Scalar} {\bfseries Scalar}}\label{a01340_ae5a18e7e6ecd7922b819fdba481aece9}

\item 
\hypertarget{a01340_a14a6d5d560a5ad227227293ea72506d8}{typedef \hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Poly\+Mesh\+::\+Point} {\bfseries Point}}\label{a01340_a14a6d5d560a5ad227227293ea72506d8}

\item 
\hypertarget{a01340_a3a1d5b56d622db8a228d52f3b6d4f988}{typedef \hyperlink{a00994_a3570fd132d1ac589b380485cf59c9e0b}{Poly\+Mesh\+::\+Normal} {\bfseries Normal}}\label{a01340_a3a1d5b56d622db8a228d52f3b6d4f988}

\item 
\hypertarget{a01340_ac83512505fbeec4bc2ce9e27f6524ead}{typedef \hyperlink{a00994_af0d8129bf1a819c468c6edcb13b5203b}{Poly\+Mesh\+::\+Color} {\bfseries Color}}\label{a01340_ac83512505fbeec4bc2ce9e27f6524ead}

\item 
\hypertarget{a01340_ab2af5da0570446c0994a22b0c59d8c46}{typedef \hyperlink{a00994_af6526fbc3e7f3a1e98a5543b9563b021}{Poly\+Mesh\+::\+Tex\+Coord1\+D} {\bfseries Tex\+Coord1\+D}}\label{a01340_ab2af5da0570446c0994a22b0c59d8c46}

\item 
\hypertarget{a01340_a48317ec39a58609066b3aae8a498ba9d}{typedef \hyperlink{a00994_a4ae59536e97b43444c4f1622c645ebaf}{Poly\+Mesh\+::\+Tex\+Coord2\+D} {\bfseries Tex\+Coord2\+D}}\label{a01340_a48317ec39a58609066b3aae8a498ba9d}

\item 
\hypertarget{a01340_a706ffcd34ab624e621bf52db0740aaff}{typedef \hyperlink{a00994_a5ec24476d2513efe71ddd1255a2ca444}{Poly\+Mesh\+::\+Tex\+Coord3\+D} {\bfseries Tex\+Coord3\+D}}\label{a01340_a706ffcd34ab624e621bf52db0740aaff}

\item 
\hypertarget{a01340_a5424dcc6bea33cfbf12d7e540e5559dc}{typedef \hyperlink{a00994_a03e6fd1a2fc91d4144374fd28dfbecee}{Poly\+Mesh\+::\+Vertex} {\bfseries Vertex}}\label{a01340_a5424dcc6bea33cfbf12d7e540e5559dc}

\item 
\hypertarget{a01340_ad373f5831f42565decb4676ebe391260}{typedef \hyperlink{a00994_a249b0c195a81eeab341f7f73089d157e}{Poly\+Mesh\+::\+Halfedge} {\bfseries Halfedge}}\label{a01340_ad373f5831f42565decb4676ebe391260}

\item 
\hypertarget{a01340_a77a46486d2bc61b581f3109b54b20547}{typedef \hyperlink{a00994_ab2ccdc42b7b25cf35915d3639fc461b2}{Poly\+Mesh\+::\+Edge} {\bfseries Edge}}\label{a01340_a77a46486d2bc61b581f3109b54b20547}

\item 
\hypertarget{a01340_a9c11e44b195699ba5a04300dc144e1a1}{typedef \hyperlink{a00994_a71e1e8eaabeb24eca04237931b4bea26}{Poly\+Mesh\+::\+Face} {\bfseries Face}}\label{a01340_a9c11e44b195699ba5a04300dc144e1a1}

\item 
\hypertarget{a01340_a1c3aaa72e7b91c783bb2eae3a1f2ea94}{typedef \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Poly\+Mesh\+::\+Vertex\+Handle} {\bfseries Vertex\+Handle}}\label{a01340_a1c3aaa72e7b91c783bb2eae3a1f2ea94}

\item 
\hypertarget{a01340_ae6d1bec87e4d2f873a62cc973ef59334}{typedef Poly\+Mesh\+::\+Halfedge\+Handle {\bfseries Halfedge\+Handle}}\label{a01340_ae6d1bec87e4d2f873a62cc973ef59334}

\item 
\hypertarget{a01340_ad4ce9ca98ffbdd4c3ceb4b2dd4994d78}{typedef Poly\+Mesh\+::\+Edge\+Handle {\bfseries Edge\+Handle}}\label{a01340_ad4ce9ca98ffbdd4c3ceb4b2dd4994d78}

\item 
\hypertarget{a01340_a40363bb1ef029386804cace3a977cba5}{typedef Poly\+Mesh\+::\+Face\+Handle {\bfseries Face\+Handle}}\label{a01340_a40363bb1ef029386804cace3a977cba5}

\item 
\hypertarget{a01340_af68a43c302ddf7cd03afd3f15b1e418f}{typedef Poly\+Mesh\+::\+Vertex\+Iter {\bfseries Vertex\+Iter}}\label{a01340_af68a43c302ddf7cd03afd3f15b1e418f}

\item 
\hypertarget{a01340_af58eee90c98af8a65555aa5a06c3c58e}{typedef Poly\+Mesh\+::\+Const\+Vertex\+Iter {\bfseries Const\+Vertex\+Iter}}\label{a01340_af58eee90c98af8a65555aa5a06c3c58e}

\item 
\hypertarget{a01340_ad1db69a2f5a77398242bcdc1d599ac0f}{typedef Poly\+Mesh\+::\+Edge\+Iter {\bfseries Edge\+Iter}}\label{a01340_ad1db69a2f5a77398242bcdc1d599ac0f}

\item 
\hypertarget{a01340_ac0449a37c41c890554836881796f2e27}{typedef Poly\+Mesh\+::\+Const\+Edge\+Iter {\bfseries Const\+Edge\+Iter}}\label{a01340_ac0449a37c41c890554836881796f2e27}

\item 
\hypertarget{a01340_ad85df069c548bf28cb2b8aee87c75945}{typedef Poly\+Mesh\+::\+Face\+Iter {\bfseries Face\+Iter}}\label{a01340_ad85df069c548bf28cb2b8aee87c75945}

\item 
\hypertarget{a01340_a1f3aa52f1f630f16a77dd9c34e4afe05}{typedef Poly\+Mesh\+::\+Const\+Face\+Iter {\bfseries Const\+Face\+Iter}}\label{a01340_a1f3aa52f1f630f16a77dd9c34e4afe05}

\item 
\hypertarget{a01340_a7ea62f6576107df5ac1c5a9af670cd07}{typedef \hyperlink{a00994_adc7d422e2ce13141e8291f7d29f7ecef}{Poly\+Mesh\+::\+Vertex\+Vertex\+Iter} {\bfseries Vertex\+Vertex\+Iter}}\label{a01340_a7ea62f6576107df5ac1c5a9af670cd07}

\item 
\hypertarget{a01340_ad84e76b927f8f6da62b35bb0063877fc}{typedef \\*
\hyperlink{a00994_a6549eda743520c8a7aa3dfe6a37b2468}{Poly\+Mesh\+::\+Vertex\+O\+Halfedge\+Iter} {\bfseries Vertex\+O\+Halfedge\+Iter}}\label{a01340_ad84e76b927f8f6da62b35bb0063877fc}

\item 
\hypertarget{a01340_a7ddf8f2f64228231e89283b357a7dea8}{typedef \\*
\hyperlink{a00994_a437621f3901a93d0ebf8cdceac8e2939}{Poly\+Mesh\+::\+Vertex\+I\+Halfedge\+Iter} {\bfseries Vertex\+I\+Halfedge\+Iter}}\label{a01340_a7ddf8f2f64228231e89283b357a7dea8}

\item 
\hypertarget{a01340_a48f959a6cebf70802b333858c3526ab5}{typedef \hyperlink{a00994_a68dd0d2773f837cbfb525d7208dedde0}{Poly\+Mesh\+::\+Vertex\+Edge\+Iter} {\bfseries Vertex\+Edge\+Iter}}\label{a01340_a48f959a6cebf70802b333858c3526ab5}

\item 
\hypertarget{a01340_a33cad613da1433a52da13a2f1f5d1ae1}{typedef \hyperlink{a00994_a1ebe8b94ca30db3af44c809ab3ee7247}{Poly\+Mesh\+::\+Vertex\+Face\+Iter} {\bfseries Vertex\+Face\+Iter}}\label{a01340_a33cad613da1433a52da13a2f1f5d1ae1}

\item 
\hypertarget{a01340_a4e249ad7d47c0fcb9a284168a36114d0}{typedef \hyperlink{a00994_a3c65ec045ac0126b3ea7264cee26aa1b}{Poly\+Mesh\+::\+Face\+Vertex\+Iter} {\bfseries Face\+Vertex\+Iter}}\label{a01340_a4e249ad7d47c0fcb9a284168a36114d0}

\item 
\hypertarget{a01340_af7bb54254319a2ddeca075f702fdb029}{typedef \hyperlink{a00994_aeca99c6cd952038e80b37c848035af73}{Poly\+Mesh\+::\+Face\+Halfedge\+Iter} {\bfseries Face\+Halfedge\+Iter}}\label{a01340_af7bb54254319a2ddeca075f702fdb029}

\item 
\hypertarget{a01340_a8a0d0ca83b1260bc77591bb9d5b27842}{typedef \hyperlink{a00994_a04a30000943150f98db373a3317760af}{Poly\+Mesh\+::\+Face\+Edge\+Iter} {\bfseries Face\+Edge\+Iter}}\label{a01340_a8a0d0ca83b1260bc77591bb9d5b27842}

\item 
\hypertarget{a01340_a4df73bdf778afcabffa4d1ef7c4b9efc}{typedef \hyperlink{a00994_a98618ca3fd3eec347bb5b02410a5e1e6}{Poly\+Mesh\+::\+Face\+Face\+Iter} {\bfseries Face\+Face\+Iter}}\label{a01340_a4df73bdf778afcabffa4d1ef7c4b9efc}

\item 
\hypertarget{a01340_ad3546ddb617f0bdadab9446d587d7b46}{typedef \\*
\hyperlink{a00994_a17a73f876343905c8b37b947e9152ac8}{Poly\+Mesh\+::\+Const\+Vertex\+Vertex\+Iter} {\bfseries Const\+Vertex\+Vertex\+Iter}}\label{a01340_ad3546ddb617f0bdadab9446d587d7b46}

\item 
\hypertarget{a01340_a243fa328c92868581def7a543ab0aeb6}{typedef \\*
\hyperlink{a00994_acf4b52db4b0198a91a02c06003623bfb}{Poly\+Mesh\+::\+Const\+Vertex\+O\+Halfedge\+Iter} {\bfseries Const\+Vertex\+O\+Halfedge\+Iter}}\label{a01340_a243fa328c92868581def7a543ab0aeb6}

\item 
\hypertarget{a01340_a0f68492bab9b1523cd8c2e5999dd2b3a}{typedef \\*
\hyperlink{a00994_a7221db878118b37611454a13f1754a08}{Poly\+Mesh\+::\+Const\+Vertex\+I\+Halfedge\+Iter} {\bfseries Const\+Vertex\+I\+Halfedge\+Iter}}\label{a01340_a0f68492bab9b1523cd8c2e5999dd2b3a}

\item 
\hypertarget{a01340_a6d70887d930f3010e15a3accb50fcd95}{typedef \\*
\hyperlink{a00994_a9ccd0ce4fff127b13eb80fafefda0d0a}{Poly\+Mesh\+::\+Const\+Vertex\+Edge\+Iter} {\bfseries Const\+Vertex\+Edge\+Iter}}\label{a01340_a6d70887d930f3010e15a3accb50fcd95}

\item 
\hypertarget{a01340_a96e8c8580ea0c951a6998dc52b3f5f51}{typedef \\*
\hyperlink{a00994_a61167f0a130e599b909cc8629a6dca2a}{Poly\+Mesh\+::\+Const\+Vertex\+Face\+Iter} {\bfseries Const\+Vertex\+Face\+Iter}}\label{a01340_a96e8c8580ea0c951a6998dc52b3f5f51}

\item 
\hypertarget{a01340_a58190c14ce7f49afb8065f611bf7963f}{typedef \\*
\hyperlink{a00994_a23b20f8208bae0aa1b344cac48c1f635}{Poly\+Mesh\+::\+Const\+Face\+Vertex\+Iter} {\bfseries Const\+Face\+Vertex\+Iter}}\label{a01340_a58190c14ce7f49afb8065f611bf7963f}

\item 
\hypertarget{a01340_a0820fc6833fe65fc4391e57961132ca2}{typedef \\*
\hyperlink{a00994_a1b0729c26d7cf8f123c344a3b81d353c}{Poly\+Mesh\+::\+Const\+Face\+Halfedge\+Iter} {\bfseries Const\+Face\+Halfedge\+Iter}}\label{a01340_a0820fc6833fe65fc4391e57961132ca2}

\item 
\hypertarget{a01340_adf806d19316e7b8873bee8998e6020ea}{typedef \hyperlink{a00994_a5e15960d27e6d40646260109f5910b5b}{Poly\+Mesh\+::\+Const\+Face\+Edge\+Iter} {\bfseries Const\+Face\+Edge\+Iter}}\label{a01340_adf806d19316e7b8873bee8998e6020ea}

\item 
\hypertarget{a01340_a861858082ceb9782ccd5669c5b18da62}{typedef \hyperlink{a00994_af081cbe692a0563c1ce08735f4b3491e}{Poly\+Mesh\+::\+Const\+Face\+Face\+Iter} {\bfseries Const\+Face\+Face\+Iter}}\label{a01340_a861858082ceb9782ccd5669c5b18da62}

\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01340_a13a27eb1994c2e288f404f5305834c3e}{\hyperlink{a01340_a13a27eb1994c2e288f404f5305834c3e}{Tri\+Mesh\+T} ()}\label{a01340_a13a27eb1994c2e288f404f5305834c3e}

\begin{DoxyCompactList}\small\item\em Default constructor. \end{DoxyCompactList}\item 
\hypertarget{a01340_a9e84b7ff5a5dabd8136a1bbb72a54399}{virtual \hyperlink{a01340_a9e84b7ff5a5dabd8136a1bbb72a54399}{$\sim$\+Tri\+Mesh\+T} ()}\label{a01340_a9e84b7ff5a5dabd8136a1bbb72a54399}

\begin{DoxyCompactList}\small\item\em Destructor. \end{DoxyCompactList}\item 
Halfedge\+Handle \hyperlink{a01340_a4868b772cb7a9d7bb8d94854dfb82868}{vertex\+\_\+split} (\hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \+\_\+v0\+\_\+point, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+v1, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vl, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vr)
\begin{DoxyCompactList}\small\item\em Vertex Split\+: inverse operation to collapse(). \end{DoxyCompactList}\item 
Halfedge\+Handle \hyperlink{a01340_ac58e0af86ecd0bbc5e821ecd8c8beaff}{vertex\+\_\+split} (\hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+v0, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+v1, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vl, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vr)
\begin{DoxyCompactList}\small\item\em Vertex Split\+: inverse operation to collapse(). \end{DoxyCompactList}\item 
\hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a01340_a19fac76fcf747206b0610d4d0aeb43dd}{split} (Edge\+Handle \+\_\+eh, const \hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Edge split (= 2-\/to-\/4 split) \end{DoxyCompactList}\item 
\hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a01340_a8622d93c8c0bc604062a97bdecc252ba}{split\+\_\+copy} (Edge\+Handle \+\_\+eh, const \hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Edge split (= 2-\/to-\/4 split) \end{DoxyCompactList}\item 
void \hyperlink{a01340_a00a743cc15f3ff35e41c98090e0f91c8}{split} (Edge\+Handle \+\_\+eh, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\begin{DoxyCompactList}\small\item\em Edge split (= 2-\/to-\/4 split) \end{DoxyCompactList}\item 
void \hyperlink{a01340_ae1dcb76ca7b18678552bb0b65dff3a2c}{split\+\_\+copy} (Edge\+Handle \+\_\+eh, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\begin{DoxyCompactList}\small\item\em Edge split (= 2-\/to-\/4 split) \end{DoxyCompactList}\item 
\hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a01340_a2787095214c517adf68778579d62c3db}{split} (Face\+Handle \+\_\+fh, const \hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). \end{DoxyCompactList}\item 
\hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a01340_a42bfad6e6c80be6e082974dc667d50d2}{split\+\_\+copy} (Face\+Handle \+\_\+fh, const \hyperlink{a00994_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). \end{DoxyCompactList}\item 
void \hyperlink{a01340_a1d3163398fc453736b59e8a3dacf7e45}{split} (Face\+Handle \+\_\+fh, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\begin{DoxyCompactList}\small\item\em Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). \end{DoxyCompactList}\item 
void \hyperlink{a01340_aa2b78682dc013e4c8480a3cab28bb766}{split\+\_\+copy} (Face\+Handle \+\_\+fh, \hyperlink{a00994_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\begin{DoxyCompactList}\small\item\em Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). \end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}{\bf Normal vector computation}\par
\begin{DoxyCompactItemize}
\item 
\hyperlink{a00994_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a01340_a37742193d34c2626c9b9abd6127aa0ab}{calc\+\_\+face\+\_\+normal} (Face\+Handle \+\_\+fh) const 
\end{DoxyCompactItemize}
\end{Indent}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01340_a7adee11e064fad57e5eab6dbb8065295}{enum \{ {\bfseries Is\+Poly\+Mesh} = 0
 \}}\label{a01340_a7adee11e064fad57e5eab6dbb8065295}

\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ( This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ) \end{DoxyCompactList}\item 
\hypertarget{a01340_ae9d804648d84f4dbe48967443655801f}{enum \{ {\bfseries Is\+Tri\+Mesh} = 1
 \}}\label{a01340_ae9d804648d84f4dbe48967443655801f}

\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ( This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ) \end{DoxyCompactList}\item 
\hypertarget{a01340_af9b36f001e125209e176c5955eaae222}{static bool \hyperlink{a01340_af9b36f001e125209e176c5955eaae222}{is\+\_\+polymesh} ()}\label{a01340_af9b36f001e125209e176c5955eaae222}

\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ( This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ) \end{DoxyCompactList}\item 
\hypertarget{a01340_a0b91c544c6a949a8e7f83d99b068b297}{static bool \hyperlink{a01340_a0b91c544c6a949a8e7f83d99b068b297}{is\+\_\+trimesh} ()}\label{a01340_a0b91c544c6a949a8e7f83d99b068b297}

\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ( This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a00994}{Poly\+Mesh\+T} or \hyperlink{a01340}{Tri\+Mesh\+T} ) \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Additional Inherited Members}


\subsection{Detailed Description}
\subsubsection*{template$<$class Kernel$>$class Open\+Mesh\+::\+Tri\+Mesh\+T$<$ Kernel $>$}

Base type for a triangle mesh.

Base type for a triangle mesh, parameterized by a mesh kernel. The mesh inherits all methods from the kernel class and the more general polygonal mesh \hyperlink{a00994}{Poly\+Mesh\+T}. Therefore it provides the same types for items, handles, iterators and so on.


\begin{DoxyParams}{Parameters}
{\em Kernel} & template argument for the mesh kernel \\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
You should use the predefined mesh-\/kernel combinations in \hyperlink{a03405}{Predefined Mesh Types} 
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{mesh_type}{Specifying your My\+Mesh} 

\hyperlink{a00994}{Open\+Mesh\+::\+Poly\+Mesh\+T} 
\end{DoxySeeAlso}


Definition at line 95 of file Tri\+Mesh\+T.\+hh.



\subsection{Member Function Documentation}
\hypertarget{a01340_a37742193d34c2626c9b9abd6127aa0ab}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}}
\index{calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{calc\+\_\+face\+\_\+normal}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel $>$ {\bf Tri\+Mesh\+T}$<$ Kernel $>$\+::{\bf Normal} {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::calc\+\_\+face\+\_\+normal (
\begin{DoxyParamCaption}
\item[{Face\+Handle}]{\+\_\+fh}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily [virtual]}}}\label{a01340_a37742193d34c2626c9b9abd6127aa0ab}
Calculate normal vector for face \+\_\+fh (specialized for Tri\+Mesh). 

Reimplemented from \hyperlink{a00994_aad3b0a3001c7e44714e16442b78583af}{Open\+Mesh\+::\+Poly\+Mesh\+T$<$ Kernel $>$}.



Definition at line 79 of file Tri\+Mesh\+T.\+cc.

\hypertarget{a01340_a19fac76fcf747206b0610d4d0aeb43dd}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split@{split}}
\index{split@{split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ {\bf Vertex\+Handle} {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split (
\begin{DoxyParamCaption}
\item[{Edge\+Handle}]{\+\_\+eh, }
\item[{const {\bf Point} \&}]{\+\_\+p}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a19fac76fcf747206b0610d4d0aeb43dd}


Edge split (= 2-\/to-\/4 split) 

The properties of the new edges will be undefined!


\begin{DoxyParams}{Parameters}
{\em \+\_\+eh} & Edge handle that should be splitted \\
\hline
{\em \+\_\+p} & New point position that will be inserted at the edge \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Vertex handle of the newly added vertex 
\end{DoxyReturn}


Definition at line 266 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a00a743cc15f3ff35e41c98090e0f91c8}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split@{split}}
\index{split@{split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ void {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split (
\begin{DoxyParamCaption}
\item[{Edge\+Handle}]{\+\_\+eh, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vh}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a00a743cc15f3ff35e41c98090e0f91c8}


Edge split (= 2-\/to-\/4 split) 

The properties of the new edges will be undefined!


\begin{DoxyParams}{Parameters}
{\em \+\_\+eh} & Edge handle that should be splitted \\
\hline
{\em \+\_\+vh} & Vertex handle that will be inserted at the edge \\
\hline
\end{DoxyParams}


Definition at line 293 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a2787095214c517adf68778579d62c3db}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split@{split}}
\index{split@{split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ {\bf Vertex\+Handle} {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split (
\begin{DoxyParamCaption}
\item[{Face\+Handle}]{\+\_\+fh, }
\item[{const {\bf Point} \&}]{\+\_\+p}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a2787095214c517adf68778579d62c3db}


Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). 

The properties of the new faces will be undefined!


\begin{DoxyParams}{Parameters}
{\em \+\_\+fh} & Face handle that should be splitted \\
\hline
{\em \+\_\+p} & New point position that will be inserted in the face\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Vertex handle of the new vertex 
\end{DoxyReturn}


Definition at line 321 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a1d3163398fc453736b59e8a3dacf7e45}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split@{split}}
\index{split@{split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ void {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split (
\begin{DoxyParamCaption}
\item[{Face\+Handle}]{\+\_\+fh, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vh}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a1d3163398fc453736b59e8a3dacf7e45}


Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). 

The properties of the new faces will be undefined!


\begin{DoxyParams}{Parameters}
{\em \+\_\+fh} & Face handle that should be splitted \\
\hline
{\em \+\_\+vh} & Vertex handle that will be inserted at the face \\
\hline
\end{DoxyParams}


Definition at line 343 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a8622d93c8c0bc604062a97bdecc252ba}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split\+\_\+copy@{split\+\_\+copy}}
\index{split\+\_\+copy@{split\+\_\+copy}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split\+\_\+copy}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ {\bf Vertex\+Handle} {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split\+\_\+copy (
\begin{DoxyParamCaption}
\item[{Edge\+Handle}]{\+\_\+eh, }
\item[{const {\bf Point} \&}]{\+\_\+p}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a8622d93c8c0bc604062a97bdecc252ba}


Edge split (= 2-\/to-\/4 split) 

The properties of the new edges will be adjusted to the properties of the original edge


\begin{DoxyParams}{Parameters}
{\em \+\_\+eh} & Edge handle that should be splitted \\
\hline
{\em \+\_\+p} & New point position that will be inserted at the edge \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Vertex handle of the newly added vertex 
\end{DoxyReturn}


Definition at line 280 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_ae1dcb76ca7b18678552bb0b65dff3a2c}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split\+\_\+copy@{split\+\_\+copy}}
\index{split\+\_\+copy@{split\+\_\+copy}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split\+\_\+copy}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ void {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split\+\_\+copy (
\begin{DoxyParamCaption}
\item[{Edge\+Handle}]{\+\_\+eh, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vh}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_ae1dcb76ca7b18678552bb0b65dff3a2c}


Edge split (= 2-\/to-\/4 split) 

The properties of the new edges will be adjusted to the properties of the original edge


\begin{DoxyParams}{Parameters}
{\em \+\_\+eh} & Edge handle that should be splitted \\
\hline
{\em \+\_\+vh} & Vertex handle that will be inserted at the edge \\
\hline
\end{DoxyParams}


Definition at line 306 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a42bfad6e6c80be6e082974dc667d50d2}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split\+\_\+copy@{split\+\_\+copy}}
\index{split\+\_\+copy@{split\+\_\+copy}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split\+\_\+copy}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ {\bf Vertex\+Handle} {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split\+\_\+copy (
\begin{DoxyParamCaption}
\item[{Face\+Handle}]{\+\_\+fh, }
\item[{const {\bf Point} \&}]{\+\_\+p}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a42bfad6e6c80be6e082974dc667d50d2}


Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). 

The properties of the new faces will be adjusted to the properties of the original face


\begin{DoxyParams}{Parameters}
{\em \+\_\+fh} & Face handle that should be splitted \\
\hline
{\em \+\_\+p} & New point position that will be inserted in the face\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Vertex handle of the new vertex 
\end{DoxyReturn}


Definition at line 333 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_aa2b78682dc013e4c8480a3cab28bb766}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!split\+\_\+copy@{split\+\_\+copy}}
\index{split\+\_\+copy@{split\+\_\+copy}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{split\+\_\+copy}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ void {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::split\+\_\+copy (
\begin{DoxyParamCaption}
\item[{Face\+Handle}]{\+\_\+fh, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vh}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_aa2b78682dc013e4c8480a3cab28bb766}


Face split (= 1-\/to-\/3 split, calls corresponding \hyperlink{a00994}{Poly\+Mesh\+T} function). 

The properties of the new faces will be adjusted to the properties of the original face


\begin{DoxyParams}{Parameters}
{\em \+\_\+fh} & Face handle that should be splitted \\
\hline
{\em \+\_\+vh} & Vertex handle that will be inserted at the face \\
\hline
\end{DoxyParams}


Definition at line 353 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_a4868b772cb7a9d7bb8d94854dfb82868}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!vertex\+\_\+split@{vertex\+\_\+split}}
\index{vertex\+\_\+split@{vertex\+\_\+split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{vertex\+\_\+split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ Halfedge\+Handle {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::vertex\+\_\+split (
\begin{DoxyParamCaption}
\item[{{\bf Point}}]{\+\_\+v0\+\_\+point, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+v1, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vl, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vr}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_a4868b772cb7a9d7bb8d94854dfb82868}


Vertex Split\+: inverse operation to collapse(). 

Insert the new vertex at position v0. The vertex will be added as the inverse of the vertex split. The faces above the split will be correctly attached to the two new edges

Before\+: v\+\_\+l v0 v\+\_\+r x x x \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / x v1

After\+: v\+\_\+l v0 v\+\_\+r x-\/-\/-\/---x-\/-\/-\/---x \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / $|$/ x v1


\begin{DoxyParams}{Parameters}
{\em \+\_\+v0\+\_\+point} & Point position for the new point \\
\hline
{\em \+\_\+v1} & Vertex that will be split \\
\hline
{\em \+\_\+vl} & Left vertex handle \\
\hline
{\em \+\_\+vr} & Right vertex handle \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Newly inserted halfedge 
\end{DoxyReturn}


Definition at line 213 of file Tri\+Mesh\+T.\+hh.

\hypertarget{a01340_ac58e0af86ecd0bbc5e821ecd8c8beaff}{\index{Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}!vertex\+\_\+split@{vertex\+\_\+split}}
\index{vertex\+\_\+split@{vertex\+\_\+split}!Open\+Mesh\+::\+Tri\+Mesh\+T@{Open\+Mesh\+::\+Tri\+Mesh\+T}}
\subsubsection[{vertex\+\_\+split}]{\setlength{\rightskip}{0pt plus 5cm}template$<$class Kernel$>$ Halfedge\+Handle {\bf Open\+Mesh\+::\+Tri\+Mesh\+T}$<$ Kernel $>$\+::vertex\+\_\+split (
\begin{DoxyParamCaption}
\item[{{\bf Vertex\+Handle}}]{\+\_\+v0, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+v1, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vl, }
\item[{{\bf Vertex\+Handle}}]{\+\_\+vr}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01340_ac58e0af86ecd0bbc5e821ecd8c8beaff}


Vertex Split\+: inverse operation to collapse(). 

Insert the new vertex at position v0. The vertex will be added as the inverse of the vertex split. The faces above the split will be correctly attached to the two new edges

Before\+: v\+\_\+l v0 v\+\_\+r x x x \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / \textbackslash{} / x v1

After\+: v\+\_\+l v0 v\+\_\+r x-\/-\/-\/---x-\/-\/-\/---x \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / \textbackslash{} $\vert$ / $|$/ x v1


\begin{DoxyParams}{Parameters}
{\em \+\_\+v0} & Vertex handle for the newly inserted point (Input has to be unconnected!) \\
\hline
{\em \+\_\+v1} & Vertex that will be split \\
\hline
{\em \+\_\+vl} & Left vertex handle \\
\hline
{\em \+\_\+vr} & Right vertex handle \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Newly inserted halfedge 
\end{DoxyReturn}


Definition at line 253 of file Tri\+Mesh\+T.\+hh.



The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Core/\+Mesh/Tri\+Mesh\+T.\+hh\item 
libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Core/\+Mesh/Tri\+Mesh\+T.\+cc\end{DoxyCompactItemize}
