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


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

Inheritance diagram for Open\+Mesh\+:\+:Poly\+MeshT$<$ Kernel $>$\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=1.485411cm]{a08776}
\end{center}
\end{figure}
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{a08780}{Point\+Is3\+D\+Tag}
\item 
struct \hyperlink{a08784}{Point\+Is\+Not3\+D\+Tag}
\end{DoxyCompactItemize}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_aee8e212a032787407e4a543031840063}\label{a08776_aee8e212a032787407e4a543031840063}} 
typedef \hyperlink{a08776}{Poly\+MeshT}$<$ Kernel $>$ \hyperlink{a08776_aee8e212a032787407e4a543031840063}{This}
\begin{DoxyCompactList}\small\item\em Self type. Used to specify iterators/circulators. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a0fc18e13d70825938274e3faf7b55e01}\label{a08776_a0fc18e13d70825938274e3faf7b55e01}} 
typedef Kernel\+::\+Vertex\+Handle \hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle}
\begin{DoxyCompactList}\small\item\em Handle for referencing the corresponding item. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_ac364b18ba6ed17e4e6a6551787b2e2a3}\label{a08776_ac364b18ba6ed17e4e6a6551787b2e2a3}} 
typedef Kernel\+::\+Halfedge\+Handle {\bfseries Halfedge\+Handle}
\item 
\mbox{\Hypertarget{a08776_a1e3309b66b4cb3bf22b6229f20375ef2}\label{a08776_a1e3309b66b4cb3bf22b6229f20375ef2}} 
typedef Kernel\+::\+Edge\+Handle {\bfseries Edge\+Handle}
\item 
\mbox{\Hypertarget{a08776_ab4c0e43573d85661542b22cb4f4a1d11}\label{a08776_ab4c0e43573d85661542b22cb4f4a1d11}} 
typedef Kernel\+::\+Face\+Handle {\bfseries Face\+Handle}
\item 
\mbox{\Hypertarget{a08776_afb18d53e36e53e024c8506cd3c961096}\label{a08776_afb18d53e36e53e024c8506cd3c961096}} 
typedef Kernel\+::\+Vertex\+Iter {\bfseries Vertex\+Iter}
\item 
\mbox{\Hypertarget{a08776_ae40d2dfe0d226e49d869481bbd40a911}\label{a08776_ae40d2dfe0d226e49d869481bbd40a911}} 
typedef Kernel\+::\+Halfedge\+Iter {\bfseries Halfedge\+Iter}
\item 
\mbox{\Hypertarget{a08776_ac5250dba0f527b19bfa665a288b5d63d}\label{a08776_ac5250dba0f527b19bfa665a288b5d63d}} 
typedef Kernel\+::\+Edge\+Iter {\bfseries Edge\+Iter}
\item 
\mbox{\Hypertarget{a08776_a34402ff0bd674fbad2685df22eecde64}\label{a08776_a34402ff0bd674fbad2685df22eecde64}} 
typedef Kernel\+::\+Face\+Iter {\bfseries Face\+Iter}
\item 
\mbox{\Hypertarget{a08776_acbad7fb3cfb4bad77153b9a8530a402f}\label{a08776_acbad7fb3cfb4bad77153b9a8530a402f}} 
typedef Kernel\+::\+Const\+Vertex\+Iter {\bfseries Const\+Vertex\+Iter}
\item 
\mbox{\Hypertarget{a08776_a85c57baa38e7e3d07bd7f3c7f194b354}\label{a08776_a85c57baa38e7e3d07bd7f3c7f194b354}} 
typedef Kernel\+::\+Const\+Halfedge\+Iter {\bfseries Const\+Halfedge\+Iter}
\item 
\mbox{\Hypertarget{a08776_aca72b40b26d4c76dfaec5e4191bdaa31}\label{a08776_aca72b40b26d4c76dfaec5e4191bdaa31}} 
typedef Kernel\+::\+Const\+Edge\+Iter {\bfseries Const\+Edge\+Iter}
\item 
\mbox{\Hypertarget{a08776_a0a371650bb71152018ea1f3f570b465b}\label{a08776_a0a371650bb71152018ea1f3f570b465b}} 
typedef Kernel\+::\+Const\+Face\+Iter {\bfseries Const\+Face\+Iter}
\end{DoxyCompactItemize}
\begin{Indent}\textbf{ Mesh Items}\par
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_a15372f27edf521d8e9028e2abccae342}\label{a08776_a15372f27edf521d8e9028e2abccae342}} 
typedef Kernel\+::\+Scalar \hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar}
\begin{DoxyCompactList}\small\item\em Scalar type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}\label{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}} 
typedef Kernel\+::\+Point \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point}
\begin{DoxyCompactList}\small\item\em Coordinate type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a3570fd132d1ac589b380485cf59c9e0b}\label{a08776_a3570fd132d1ac589b380485cf59c9e0b}} 
typedef Kernel\+::\+Normal \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal}
\begin{DoxyCompactList}\small\item\em Normal type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_af0d8129bf1a819c468c6edcb13b5203b}\label{a08776_af0d8129bf1a819c468c6edcb13b5203b}} 
typedef Kernel\+::\+Color \hyperlink{a08776_af0d8129bf1a819c468c6edcb13b5203b}{Color}
\begin{DoxyCompactList}\small\item\em Color type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_af6526fbc3e7f3a1e98a5543b9563b021}\label{a08776_af6526fbc3e7f3a1e98a5543b9563b021}} 
typedef Kernel\+::\+Tex\+Coord1D \hyperlink{a08776_af6526fbc3e7f3a1e98a5543b9563b021}{Tex\+Coord1D}
\begin{DoxyCompactList}\small\item\em Tex\+Coord1D type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a4ae59536e97b43444c4f1622c645ebaf}\label{a08776_a4ae59536e97b43444c4f1622c645ebaf}} 
typedef Kernel\+::\+Tex\+Coord2D \hyperlink{a08776_a4ae59536e97b43444c4f1622c645ebaf}{Tex\+Coord2D}
\begin{DoxyCompactList}\small\item\em Tex\+Coord2D type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a5ec24476d2513efe71ddd1255a2ca444}\label{a08776_a5ec24476d2513efe71ddd1255a2ca444}} 
typedef Kernel\+::\+Tex\+Coord3D \hyperlink{a08776_a5ec24476d2513efe71ddd1255a2ca444}{Tex\+Coord3D}
\begin{DoxyCompactList}\small\item\em Tex\+Coord3D type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a03e6fd1a2fc91d4144374fd28dfbecee}\label{a08776_a03e6fd1a2fc91d4144374fd28dfbecee}} 
typedef Kernel\+::\+Vertex \hyperlink{a08776_a03e6fd1a2fc91d4144374fd28dfbecee}{Vertex}
\begin{DoxyCompactList}\small\item\em Vertex type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a249b0c195a81eeab341f7f73089d157e}\label{a08776_a249b0c195a81eeab341f7f73089d157e}} 
typedef Kernel\+::\+Halfedge \hyperlink{a08776_a249b0c195a81eeab341f7f73089d157e}{Halfedge}
\begin{DoxyCompactList}\small\item\em Halfedge type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_ab2ccdc42b7b25cf35915d3639fc461b2}\label{a08776_ab2ccdc42b7b25cf35915d3639fc461b2}} 
typedef Kernel\+::\+Edge \hyperlink{a08776_ab2ccdc42b7b25cf35915d3639fc461b2}{Edge}
\begin{DoxyCompactList}\small\item\em Edge type. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a71e1e8eaabeb24eca04237931b4bea26}\label{a08776_a71e1e8eaabeb24eca04237931b4bea26}} 
typedef Kernel\+::\+Face \hyperlink{a08776_a71e1e8eaabeb24eca04237931b4bea26}{Face}
\begin{DoxyCompactList}\small\item\em Face type. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}\textbf{ Mesh Circulators}\par
{\em Refer to Open\+Mesh\+::\+Mesh\+::\+Iterators or \hyperlink{mesh_iterators}{Mesh Iterators and Circulators} for documentation. }\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_adc7d422e2ce13141e8291f7d29f7ecef}\label{a08776_adc7d422e2ce13141e8291f7d29f7ecef}} 
typedef Kernel\+::\+Vertex\+Vertex\+Iter \hyperlink{a08776_adc7d422e2ce13141e8291f7d29f7ecef}{Vertex\+Vertex\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a6549eda743520c8a7aa3dfe6a37b2468}\label{a08776_a6549eda743520c8a7aa3dfe6a37b2468}} 
typedef Kernel\+::\+Vertex\+O\+Halfedge\+Iter \hyperlink{a08776_a6549eda743520c8a7aa3dfe6a37b2468}{Vertex\+O\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a437621f3901a93d0ebf8cdceac8e2939}\label{a08776_a437621f3901a93d0ebf8cdceac8e2939}} 
typedef Kernel\+::\+Vertex\+I\+Halfedge\+Iter \hyperlink{a08776_a437621f3901a93d0ebf8cdceac8e2939}{Vertex\+I\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a68dd0d2773f837cbfb525d7208dedde0}\label{a08776_a68dd0d2773f837cbfb525d7208dedde0}} 
typedef Kernel\+::\+Vertex\+Edge\+Iter \hyperlink{a08776_a68dd0d2773f837cbfb525d7208dedde0}{Vertex\+Edge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a1ebe8b94ca30db3af44c809ab3ee7247}\label{a08776_a1ebe8b94ca30db3af44c809ab3ee7247}} 
typedef Kernel\+::\+Vertex\+Face\+Iter \hyperlink{a08776_a1ebe8b94ca30db3af44c809ab3ee7247}{Vertex\+Face\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a3c65ec045ac0126b3ea7264cee26aa1b}\label{a08776_a3c65ec045ac0126b3ea7264cee26aa1b}} 
typedef Kernel\+::\+Face\+Vertex\+Iter \hyperlink{a08776_a3c65ec045ac0126b3ea7264cee26aa1b}{Face\+Vertex\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_aeca99c6cd952038e80b37c848035af73}\label{a08776_aeca99c6cd952038e80b37c848035af73}} 
typedef Kernel\+::\+Face\+Halfedge\+Iter \hyperlink{a08776_aeca99c6cd952038e80b37c848035af73}{Face\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a04a30000943150f98db373a3317760af}\label{a08776_a04a30000943150f98db373a3317760af}} 
typedef Kernel\+::\+Face\+Edge\+Iter \hyperlink{a08776_a04a30000943150f98db373a3317760af}{Face\+Edge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a98618ca3fd3eec347bb5b02410a5e1e6}\label{a08776_a98618ca3fd3eec347bb5b02410a5e1e6}} 
typedef Kernel\+::\+Face\+Face\+Iter \hyperlink{a08776_a98618ca3fd3eec347bb5b02410a5e1e6}{Face\+Face\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a17a73f876343905c8b37b947e9152ac8}\label{a08776_a17a73f876343905c8b37b947e9152ac8}} 
typedef Kernel\+::\+Const\+Vertex\+Vertex\+Iter \hyperlink{a08776_a17a73f876343905c8b37b947e9152ac8}{Const\+Vertex\+Vertex\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_acf4b52db4b0198a91a02c06003623bfb}\label{a08776_acf4b52db4b0198a91a02c06003623bfb}} 
typedef Kernel\+::\+Const\+Vertex\+O\+Halfedge\+Iter \hyperlink{a08776_acf4b52db4b0198a91a02c06003623bfb}{Const\+Vertex\+O\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a7221db878118b37611454a13f1754a08}\label{a08776_a7221db878118b37611454a13f1754a08}} 
typedef Kernel\+::\+Const\+Vertex\+I\+Halfedge\+Iter \hyperlink{a08776_a7221db878118b37611454a13f1754a08}{Const\+Vertex\+I\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a9ccd0ce4fff127b13eb80fafefda0d0a}\label{a08776_a9ccd0ce4fff127b13eb80fafefda0d0a}} 
typedef Kernel\+::\+Const\+Vertex\+Edge\+Iter \hyperlink{a08776_a9ccd0ce4fff127b13eb80fafefda0d0a}{Const\+Vertex\+Edge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a61167f0a130e599b909cc8629a6dca2a}\label{a08776_a61167f0a130e599b909cc8629a6dca2a}} 
typedef Kernel\+::\+Const\+Vertex\+Face\+Iter \hyperlink{a08776_a61167f0a130e599b909cc8629a6dca2a}{Const\+Vertex\+Face\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a23b20f8208bae0aa1b344cac48c1f635}\label{a08776_a23b20f8208bae0aa1b344cac48c1f635}} 
typedef Kernel\+::\+Const\+Face\+Vertex\+Iter \hyperlink{a08776_a23b20f8208bae0aa1b344cac48c1f635}{Const\+Face\+Vertex\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a1b0729c26d7cf8f123c344a3b81d353c}\label{a08776_a1b0729c26d7cf8f123c344a3b81d353c}} 
typedef Kernel\+::\+Const\+Face\+Halfedge\+Iter \hyperlink{a08776_a1b0729c26d7cf8f123c344a3b81d353c}{Const\+Face\+Halfedge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a5e15960d27e6d40646260109f5910b5b}\label{a08776_a5e15960d27e6d40646260109f5910b5b}} 
typedef Kernel\+::\+Const\+Face\+Edge\+Iter \hyperlink{a08776_a5e15960d27e6d40646260109f5910b5b}{Const\+Face\+Edge\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_af081cbe692a0563c1ce08735f4b3491e}\label{a08776_af081cbe692a0563c1ce08735f4b3491e}} 
typedef Kernel\+::\+Const\+Face\+Face\+Iter \hyperlink{a08776_af081cbe692a0563c1ce08735f4b3491e}{Const\+Face\+Face\+Iter}
\begin{DoxyCompactList}\small\item\em Circulator. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_a4acbc73f0f0f4f55fd688b64a22a2a85}\label{a08776_a4acbc73f0f0f4f55fd688b64a22a2a85}} 
{\footnotesize template$<$typename T $>$ }\\{\bfseries Poly\+MeshT} (const T \&t)
\item 
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776_aee07d968ddfbb6376a7f7712ae1a73c4}{new\+\_\+vertex} ()
\begin{DoxyCompactList}\small\item\em Adds a new default-\/initialized vertex. \end{DoxyCompactList}\item 
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Adds a new vertex initialized to a custom position. \end{DoxyCompactList}\item 
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776_a8787adda36a734b33fa578f9c50bb2f3}{new\+\_\+vertex\+\_\+dirty} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\item 
\mbox{\Hypertarget{a08776_ac0577d7120881533e6e3af635382ba82}\label{a08776_ac0577d7120881533e6e3af635382ba82}} 
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776_ac0577d7120881533e6e3af635382ba82}{add\+\_\+vertex} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Alias for \hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex(const Point\&)}. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_ad2b584d9b8cf0f168be8d536fc593ec0}\label{a08776_ad2b584d9b8cf0f168be8d536fc593ec0}} 
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776_ad2b584d9b8cf0f168be8d536fc593ec0}{add\+\_\+vertex\+\_\+dirty} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Alias for \hyperlink{a08776_a8787adda36a734b33fa578f9c50bb2f3}{new\+\_\+vertex\+\_\+dirty()}. \end{DoxyCompactList}\item 
void \hyperlink{a08776_aae070e1f6f0df8885d85b48916e043b5}{calc\+\_\+edge\+\_\+vector} (Edge\+Handle \+\_\+eh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+edge\+\_\+vec) const
\item 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_a9c41a7e7c5c21683e89128d526d224d6}{calc\+\_\+edge\+\_\+vector} (Edge\+Handle \+\_\+eh) const
\item 
void \hyperlink{a08776_a1898718c80e93e8579d30b61cfd29e83}{calc\+\_\+edge\+\_\+vector} (Halfedge\+Handle \+\_\+heh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+edge\+\_\+vec) const
\item 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_ad6182b437be445cb682f25d105de4e13}{calc\+\_\+edge\+\_\+vector} (Halfedge\+Handle \+\_\+heh) const
\item 
\mbox{\Hypertarget{a08776_a7d170b57c860a510e4d430efc873f1a0}\label{a08776_a7d170b57c860a510e4d430efc873f1a0}} 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} {\bfseries calc\+\_\+edge\+\_\+length} (Edge\+Handle \+\_\+eh) const
\item 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776_aea5a895c076f3e8ce17a5b82df1b4752}{calc\+\_\+edge\+\_\+length} (Halfedge\+Handle \+\_\+heh) const
\item 
\mbox{\Hypertarget{a08776_ada9e865f77dda5a394622a49f7b96563}\label{a08776_ada9e865f77dda5a394622a49f7b96563}} 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} {\bfseries calc\+\_\+edge\+\_\+sqr\+\_\+length} (Edge\+Handle \+\_\+eh) const
\item 
\mbox{\Hypertarget{a08776_a9dd2e211b61a147b6e90ce4dbf616269}\label{a08776_a9dd2e211b61a147b6e90ce4dbf616269}} 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} {\bfseries calc\+\_\+edge\+\_\+sqr\+\_\+length} (Halfedge\+Handle \+\_\+heh) const
\item 
\hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \hyperlink{a08776_adc46bbba1ed1b6b591f2d7747c05a586}{calc\+\_\+edge\+\_\+midpoint} (Halfedge\+Handle \+\_\+heh) const
\item 
\hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \hyperlink{a08776_a3fdf02683a7d1055f8d88e179ea3fd3f}{calc\+\_\+edge\+\_\+midpoint} (Edge\+Handle \+\_\+eh) const
\item 
void \hyperlink{a08776_a96377dfb9dca48a0648b5c0698795e1a}{calc\+\_\+sector\+\_\+vectors} (Halfedge\+Handle \+\_\+in\+\_\+heh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+vec0, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+vec1) const
\item 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776_a5d3d49f23d5be7cebd2107a6363bcedd}{calc\+\_\+sector\+\_\+angle} (Halfedge\+Handle \+\_\+in\+\_\+heh) const
\item 
void \hyperlink{a08776_ace85d620312f88395ae3b737f2abaece}{calc\+\_\+sector\+\_\+normal} (Halfedge\+Handle \+\_\+in\+\_\+heh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+sector\+\_\+normal) const
\item 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776_a4babf1e8370fcb01b07596819ac167dc}{calc\+\_\+sector\+\_\+area} (Halfedge\+Handle \+\_\+in\+\_\+heh) const
\item 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776_afe704b0dc13787fbc73913a39d168d53}{calc\+\_\+dihedral\+\_\+angle\+\_\+fast} (Halfedge\+Handle \+\_\+heh) const
\item 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776_ab8cd3845b89840da203e1347f68516f2}{calc\+\_\+dihedral\+\_\+angle\+\_\+fast} (Edge\+Handle \+\_\+eh) const
\item 
\mbox{\Hypertarget{a08776_a6ebf165bf54cb04edcf1a9ab9da6b8f4}\label{a08776_a6ebf165bf54cb04edcf1a9ab9da6b8f4}} 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} {\bfseries calc\+\_\+dihedral\+\_\+angle} (Halfedge\+Handle \+\_\+heh) const
\item 
\mbox{\Hypertarget{a08776_a31902d81a7069fdc6148c713626b53e0}\label{a08776_a31902d81a7069fdc6148c713626b53e0}} 
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} {\bfseries calc\+\_\+dihedral\+\_\+angle} (Edge\+Handle \+\_\+eh) const
\item 
unsigned int \hyperlink{a08776_a5a52366a97b3c87ab3473c476f221e22}{find\+\_\+feature\+\_\+edges} (\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \+\_\+angle\+\_\+tresh=Open\+Mesh\+::deg\+\_\+to\+\_\+rad(44.\+0))
\item 
\mbox{\Hypertarget{a08776_af0bd67ac6c4c3fa8707191dcf28b7649}\label{a08776_af0bd67ac6c4c3fa8707191dcf28b7649}} 
void \hyperlink{a08776_af0bd67ac6c4c3fa8707191dcf28b7649}{split} (Face\+Handle \+\_\+fh, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\begin{DoxyCompactList}\small\item\em Face split (= 1-\/to-\/n split) \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a48712f39ad55c72ab48bf1127b6113bf}\label{a08776_a48712f39ad55c72ab48bf1127b6113bf}} 
void {\bfseries split} (Face\+Handle \+\_\+fh, \hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\item 
\mbox{\Hypertarget{a08776_ac198e4c43d5baf73b85557eaa48cc722}\label{a08776_ac198e4c43d5baf73b85557eaa48cc722}} 
void {\bfseries split} (Edge\+Handle \+\_\+eh, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p)
\item 
\mbox{\Hypertarget{a08776_adf9763c2328f9c70113da70f8fdc60c4}\label{a08776_adf9763c2328f9c70113da70f8fdc60c4}} 
void {\bfseries split} (Edge\+Handle \+\_\+eh, \hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\end{DoxyCompactItemize}
\begin{Indent}\textbf{ Normal vector computation}\par
\begin{DoxyCompactItemize}
\item 
void \hyperlink{a08776_a601f21014e50bd5a2243b0e4849c9c14}{update\+\_\+normals} ()
\begin{DoxyCompactList}\small\item\em Compute normals for all primitives. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_ab7b40ea47b87d63d3f7a4a448b2a5a8d}\label{a08776_ab7b40ea47b87d63d3f7a4a448b2a5a8d}} 
void \hyperlink{a08776_ab7b40ea47b87d63d3f7a4a448b2a5a8d}{update\+\_\+normal} (Face\+Handle \+\_\+fh)
\begin{DoxyCompactList}\small\item\em Update normal for face \+\_\+fh. \end{DoxyCompactList}\item 
void \hyperlink{a08776_a5677ec057717fece1bc3c7abbf93cbdf}{update\+\_\+face\+\_\+normals} ()
\begin{DoxyCompactList}\small\item\em Update normal vectors for all faces. \end{DoxyCompactList}\item 
virtual \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_a76730c9a65bfd6cf23972baa191a40cd}{calc\+\_\+face\+\_\+normal} (Face\+Handle \+\_\+fh) const
\item 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_a42bbd1939fb7e02ff36cd0fa9060b107}{calc\+\_\+face\+\_\+normal} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p0, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p1, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+p2) const
\item 
\mbox{\Hypertarget{a08776_a06df10e18858333ad0e7cf2ccb8b2109}\label{a08776_a06df10e18858333ad0e7cf2ccb8b2109}} 
void \hyperlink{a08776_a06df10e18858333ad0e7cf2ccb8b2109}{calc\+\_\+face\+\_\+centroid} (Face\+Handle \+\_\+fh, \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&\+\_\+pt) const
\begin{DoxyCompactList}\small\item\em calculates the average of the vertices defining \+\_\+fh \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a491e64d85f209fa74191fd96fe8f45cd}\label{a08776_a491e64d85f209fa74191fd96fe8f45cd}} 
\hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \hyperlink{a08776_a491e64d85f209fa74191fd96fe8f45cd}{calc\+\_\+face\+\_\+centroid} (Face\+Handle \+\_\+fh) const
\begin{DoxyCompactList}\small\item\em Computes and returns the average of the vertices defining \+\_\+gh. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_ac98934e64388f212e03a66b39d0ee137}\label{a08776_ac98934e64388f212e03a66b39d0ee137}} 
void \hyperlink{a08776_ac98934e64388f212e03a66b39d0ee137}{update\+\_\+normal} (Halfedge\+Handle \+\_\+heh, const double \+\_\+feature\+\_\+angle=0.\+8)
\begin{DoxyCompactList}\small\item\em Update normal for halfedge \+\_\+heh. \end{DoxyCompactList}\item 
void \hyperlink{a08776_a58045f9fafc6239077c747afdd8f852d}{update\+\_\+halfedge\+\_\+normals} (const double \+\_\+feature\+\_\+angle=0.\+8)
\begin{DoxyCompactList}\small\item\em Update normal vectors for all halfedges. \end{DoxyCompactList}\item 
virtual \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_a5c3bb9993fc45ec3ca26d677017f32f3}{calc\+\_\+halfedge\+\_\+normal} (Halfedge\+Handle \+\_\+heh, const double \+\_\+feature\+\_\+angle=0.\+8) const
\begin{DoxyCompactList}\small\item\em Calculate halfedge normal for one specific halfedge. \end{DoxyCompactList}\item 
bool \hyperlink{a08776_a98e626927ab0d71cef18df58be2e212e}{is\+\_\+estimated\+\_\+feature\+\_\+edge} (Halfedge\+Handle \+\_\+heh, const double \+\_\+feature\+\_\+angle) const
\item 
\mbox{\Hypertarget{a08776_a8f33200ba959d2d68e62d0cdf0afe322}\label{a08776_a8f33200ba959d2d68e62d0cdf0afe322}} 
void \hyperlink{a08776_a8f33200ba959d2d68e62d0cdf0afe322}{update\+\_\+normal} (\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh)
\begin{DoxyCompactList}\small\item\em Update normal for vertex \+\_\+vh. \end{DoxyCompactList}\item 
void \hyperlink{a08776_acbf60ccc42cb484ba2911bda8277551c}{update\+\_\+vertex\+\_\+normals} ()
\begin{DoxyCompactList}\small\item\em Update normal vectors for all vertices. \end{DoxyCompactList}\item 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776_aff1c0021e05ecba42d7b960add51757c}{calc\+\_\+vertex\+\_\+normal} (\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh) const
\begin{DoxyCompactList}\small\item\em Calculate vertex normal for one specific vertex. \end{DoxyCompactList}\item 
void \hyperlink{a08776_a274a5ec813ccbd19c775740df6bae995}{calc\+\_\+vertex\+\_\+normal\+\_\+fast} (\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+n) const
\item 
void \hyperlink{a08776_a2873b741c59a9d3f3a7eb61f996017e0}{calc\+\_\+vertex\+\_\+normal\+\_\+correct} (\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+n) const
\begin{DoxyCompactList}\small\item\em Compute normals for all primitives. \end{DoxyCompactList}\item 
void \hyperlink{a08776_ac18dd8b978ee432fae67524b3a181c14}{calc\+\_\+vertex\+\_\+normal\+\_\+loop} (\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \+\_\+vh, \hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&\+\_\+n) const
\begin{DoxyCompactList}\small\item\em Compute normals for all primitives. \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_a93f4a8a2663ddc21a3a959c8801ff550}\label{a08776_a93f4a8a2663ddc21a3a959c8801ff550}} 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} {\bfseries calc\+\_\+face\+\_\+normal\+\_\+impl} (Face\+Handle, \hyperlink{a08780}{Point\+Is3\+D\+Tag}) const
\item 
\mbox{\Hypertarget{a08776_a8568fabe357aabc66fdd52076115cb31}\label{a08776_a8568fabe357aabc66fdd52076115cb31}} 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} {\bfseries calc\+\_\+face\+\_\+normal\+\_\+impl} (Face\+Handle, \hyperlink{a08784}{Point\+Is\+Not3\+D\+Tag}) const
\item 
\mbox{\Hypertarget{a08776_af3425c5287ef97a1c33fe71cf7faa8cc}\label{a08776_af3425c5287ef97a1c33fe71cf7faa8cc}} 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} {\bfseries calc\+\_\+face\+\_\+normal\+\_\+impl} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, \hyperlink{a08780}{Point\+Is3\+D\+Tag}) const
\item 
\mbox{\Hypertarget{a08776_adf0d32d56ff1b27f5a5c0a26ccf09a3f}\label{a08776_adf0d32d56ff1b27f5a5c0a26ccf09a3f}} 
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} {\bfseries calc\+\_\+face\+\_\+normal\+\_\+impl} (const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&, \hyperlink{a08784}{Point\+Is\+Not3\+D\+Tag}) const
\end{DoxyCompactItemize}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{a08776_ad300a1d0393bdbf31ea65885e21e1c58}\label{a08776_ad300a1d0393bdbf31ea65885e21e1c58}} 
enum \{ {\bfseries Is\+Poly\+Mesh} = 1
 \}\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT} (This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT}) \end{DoxyCompactList}
\item 
\mbox{\Hypertarget{a08776_ace66adf9b060d76ab16dfc38c959e9a4}\label{a08776_ace66adf9b060d76ab16dfc38c959e9a4}} 
enum \{ {\bfseries Is\+Tri\+Mesh} = 0
 \}\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT} (This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT}) \end{DoxyCompactList}
\item 
\mbox{\Hypertarget{a08776_ac317b3cb6c4bbee869440ec859d49c81}\label{a08776_ac317b3cb6c4bbee869440ec859d49c81}} 
using \hyperlink{a08776_ac317b3cb6c4bbee869440ec859d49c81}{Connectivity\+Tag} = \hyperlink{a08792}{Poly\+Connectivity\+Tag}
\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT} (This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT}) \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a33d15d135e70be103b2d1c96e15b378c}\label{a08776_a33d15d135e70be103b2d1c96e15b378c}} 
static constexpr bool \hyperlink{a08776_a33d15d135e70be103b2d1c96e15b378c}{is\+\_\+polymesh} ()
\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT} (This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT}) \end{DoxyCompactList}\item 
\mbox{\Hypertarget{a08776_a928ad49d12f4429692dbb6be5d8ef393}\label{a08776_a928ad49d12f4429692dbb6be5d8ef393}} 
static constexpr bool \hyperlink{a08776_a928ad49d12f4429692dbb6be5d8ef393}{is\+\_\+trimesh} ()
\begin{DoxyCompactList}\small\item\em Determine whether this is a \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT} (This function does not check the per face vertex count! It only checks if the datatype is \hyperlink{a08776}{Poly\+MeshT} or \hyperlink{a08816}{Tri\+MeshT}) \end{DoxyCompactList}\end{DoxyCompactItemize}


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

Base type for a polygonal mesh.

This is the base class for a polygonal mesh. It is parameterized by a mesh kernel that is given as a template argument. This class inherits all methods from its mesh kernel.


\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{a06170}{Predefined Mesh Types} 
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{mesh_type}{Specifying your My\+Mesh} 
\end{DoxySeeAlso}


Definition at line 90 of file Poly\+Mesh\+T.\+hh.



\subsection{Member Function Documentation}
\mbox{\Hypertarget{a08776_afe704b0dc13787fbc73913a39d168d53}\label{a08776_afe704b0dc13787fbc73913a39d168d53}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+dihedral\+\_\+angle\+\_\+fast@{calc\+\_\+dihedral\+\_\+angle\+\_\+fast}}
\index{calc\+\_\+dihedral\+\_\+angle\+\_\+fast@{calc\+\_\+dihedral\+\_\+angle\+\_\+fast}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+dihedral\+\_\+angle\+\_\+fast()}{calc\_dihedral\_angle\_fast()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+dihedral\+\_\+angle\+\_\+fast (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

calculates the dihedral angle on the halfedge \+\_\+heh \begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces 
\end{DoxyAttention}


Definition at line 504 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_ab8cd3845b89840da203e1347f68516f2}\label{a08776_ab8cd3845b89840da203e1347f68516f2}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+dihedral\+\_\+angle\+\_\+fast@{calc\+\_\+dihedral\+\_\+angle\+\_\+fast}}
\index{calc\+\_\+dihedral\+\_\+angle\+\_\+fast@{calc\+\_\+dihedral\+\_\+angle\+\_\+fast}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+dihedral\+\_\+angle\+\_\+fast()}{calc\_dihedral\_angle\_fast()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+dihedral\+\_\+angle\+\_\+fast (\begin{DoxyParamCaption}\item[{Edge\+Handle}]{\+\_\+eh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

calculates the dihedral angle on the edge \+\_\+eh \begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces 
\end{DoxyAttention}


Definition at line 525 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_aea5a895c076f3e8ce17a5b82df1b4752}\label{a08776_aea5a895c076f3e8ce17a5b82df1b4752}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+length@{calc\+\_\+edge\+\_\+length}}
\index{calc\+\_\+edge\+\_\+length@{calc\+\_\+edge\+\_\+length}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+length()}{calc\_edge\_length()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+length (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the length of the edge \+\_\+heh 

Definition at line 396 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_adc46bbba1ed1b6b591f2d7747c05a586}\label{a08776_adc46bbba1ed1b6b591f2d7747c05a586}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+midpoint@{calc\+\_\+edge\+\_\+midpoint}}
\index{calc\+\_\+edge\+\_\+midpoint@{calc\+\_\+edge\+\_\+midpoint}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+midpoint()}{calc\_edge\_midpoint()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+midpoint (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the midpoint of the halfedge \+\_\+heh, defined by the positions of the two incident vertices 

Definition at line 411 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a3fdf02683a7d1055f8d88e179ea3fd3f}\label{a08776_a3fdf02683a7d1055f8d88e179ea3fd3f}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+midpoint@{calc\+\_\+edge\+\_\+midpoint}}
\index{calc\+\_\+edge\+\_\+midpoint@{calc\+\_\+edge\+\_\+midpoint}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+midpoint()}{calc\_edge\_midpoint()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+midpoint (\begin{DoxyParamCaption}\item[{Edge\+Handle}]{\+\_\+eh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the midpoint of the edge \+\_\+eh, defined by the positions of the two incident vertices 

Definition at line 420 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_aae070e1f6f0df8885d85b48916e043b5}\label{a08776_aae070e1f6f0df8885d85b48916e043b5}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}}
\index{calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+vector()}{calc\_edge\_vector()}\hspace{0.1cm}{\footnotesize\ttfamily [1/4]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+vector (\begin{DoxyParamCaption}\item[{Edge\+Handle}]{\+\_\+eh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+edge\+\_\+vec }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the edge vector as the vector defined by the halfedge with id \#0 (see below) 

Definition at line 363 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a9c41a7e7c5c21683e89128d526d224d6}\label{a08776_a9c41a7e7c5c21683e89128d526d224d6}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}}
\index{calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+vector()}{calc\_edge\_vector()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+vector (\begin{DoxyParamCaption}\item[{Edge\+Handle}]{\+\_\+eh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the edge vector as the vector defined by the halfedge with id \#0 (see below) 

Definition at line 370 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a1898718c80e93e8579d30b61cfd29e83}\label{a08776_a1898718c80e93e8579d30b61cfd29e83}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}}
\index{calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+vector()}{calc\_edge\_vector()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+vector (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+edge\+\_\+vec }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the edge vector as the difference of the the points defined by to\+\_\+vertex\+\_\+handle() and from\+\_\+vertex\+\_\+handle() 

Definition at line 377 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_ad6182b437be445cb682f25d105de4e13}\label{a08776_ad6182b437be445cb682f25d105de4e13}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}}
\index{calc\+\_\+edge\+\_\+vector@{calc\+\_\+edge\+\_\+vector}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+edge\+\_\+vector()}{calc\_edge\_vector()}\hspace{0.1cm}{\footnotesize\ttfamily [4/4]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+edge\+\_\+vector (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Calculates the edge vector as the difference of the the points defined by to\+\_\+vertex\+\_\+handle() and from\+\_\+vertex\+\_\+handle() 

Definition at line 384 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a76730c9a65bfd6cf23972baa191a40cd}\label{a08776_a76730c9a65bfd6cf23972baa191a40cd}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}}
\index{calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+face\+\_\+normal()}{calc\_face\_normal()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
\hyperlink{a08776}{Poly\+MeshT}$<$ Kernel $>$\+::\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+face\+\_\+normal (\begin{DoxyParamCaption}\item[{Face\+Handle}]{\+\_\+fh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}

Calculate normal vector for face \+\_\+fh. 

Reimplemented in \hyperlink{a08816_a34d9ca17136124593dcc494cfaccdfe5}{Open\+Mesh\+::\+Tri\+Mesh\+T$<$ Kernel $>$}.



Definition at line 97 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a42bbd1939fb7e02ff36cd0fa9060b107}\label{a08776_a42bbd1939fb7e02ff36cd0fa9060b107}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}}
\index{calc\+\_\+face\+\_\+normal@{calc\+\_\+face\+\_\+normal}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+face\+\_\+normal()}{calc\_face\_normal()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
\hyperlink{a08776}{Poly\+MeshT}$<$ Kernel $>$\+::\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+face\+\_\+normal (\begin{DoxyParamCaption}\item[{const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&}]{\+\_\+p0,  }\item[{const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&}]{\+\_\+p1,  }\item[{const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&}]{\+\_\+p2 }\end{DoxyParamCaption}) const}

Calculate normal vector for face (\+\_\+p0, \+\_\+p1, \+\_\+p2). 

Definition at line 173 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a5c3bb9993fc45ec3ca26d677017f32f3}\label{a08776_a5c3bb9993fc45ec3ca26d677017f32f3}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+halfedge\+\_\+normal@{calc\+\_\+halfedge\+\_\+normal}}
\index{calc\+\_\+halfedge\+\_\+normal@{calc\+\_\+halfedge\+\_\+normal}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+halfedge\+\_\+normal()}{calc\_halfedge\_normal()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
\hyperlink{a08776}{Poly\+MeshT}$<$ Kernel $>$\+::\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+halfedge\+\_\+normal (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh,  }\item[{const double}]{\+\_\+feature\+\_\+angle = {\ttfamily 0.8} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [virtual]}}



Calculate halfedge normal for one specific halfedge. 

Calculate normal vector for halfedge \+\_\+heh.

\begin{DoxyNote}{Note}
Face normals have to be computed first!
\end{DoxyNote}
\begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces and vertices. Call request\+\_\+face\+\_\+normals() and request\+\_\+halfedge\+\_\+normals() before using it!
\end{DoxyAttention}

\begin{DoxyParams}{Parameters}
{\em \+\_\+heh} & Handle of the halfedge \\
\hline
{\em \+\_\+feature\+\_\+angle} & If the dihedral angle across this edge is greater than this value, the edge is considered as a feature edge (angle in radians) \\
\hline
\end{DoxyParams}


Definition at line 307 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a5d3d49f23d5be7cebd2107a6363bcedd}\label{a08776_a5d3d49f23d5be7cebd2107a6363bcedd}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+sector\+\_\+angle@{calc\+\_\+sector\+\_\+angle}}
\index{calc\+\_\+sector\+\_\+angle@{calc\+\_\+sector\+\_\+angle}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+sector\+\_\+angle()}{calc\_sector\_angle()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+sector\+\_\+angle (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+in\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

calculates the sector angle.~\newline
The vertex pointed by \+\_\+in\+\_\+heh defines the sector center The angle will be calculated between the given halfedge and the next halfedge.~\newline
Seen from the center vertex this will be the next halfedge in clockwise direction.~\newline
 N\+O\+TE\+: only boundary concave sectors are treated correctly 

Definition at line 440 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a4babf1e8370fcb01b07596819ac167dc}\label{a08776_a4babf1e8370fcb01b07596819ac167dc}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+sector\+\_\+area@{calc\+\_\+sector\+\_\+area}}
\index{calc\+\_\+sector\+\_\+area@{calc\+\_\+sector\+\_\+area}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+sector\+\_\+area()}{calc\_sector\_area()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+sector\+\_\+area (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+in\+\_\+heh }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

calculates the area of the face sector defined by the angle $<$(\+\_\+in\+\_\+heh,next\+\_\+halfedge(\+\_\+in\+\_\+heh)) N\+O\+TE\+: special cases (e.\+g. concave sectors) are not handled correctly 

Definition at line 495 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_ace85d620312f88395ae3b737f2abaece}\label{a08776_ace85d620312f88395ae3b737f2abaece}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+sector\+\_\+normal@{calc\+\_\+sector\+\_\+normal}}
\index{calc\+\_\+sector\+\_\+normal@{calc\+\_\+sector\+\_\+normal}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+sector\+\_\+normal()}{calc\_sector\_normal()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+sector\+\_\+normal (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+in\+\_\+heh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+sector\+\_\+normal }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

calculates the normal (non-\/normalized) of the face sector defined by the angle $<$(\+\_\+in\+\_\+heh,next\+\_\+halfedge(\+\_\+in\+\_\+heh)) 

Definition at line 485 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a96377dfb9dca48a0648b5c0698795e1a}\label{a08776_a96377dfb9dca48a0648b5c0698795e1a}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+sector\+\_\+vectors@{calc\+\_\+sector\+\_\+vectors}}
\index{calc\+\_\+sector\+\_\+vectors@{calc\+\_\+sector\+\_\+vectors}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+sector\+\_\+vectors()}{calc\_sector\_vectors()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+sector\+\_\+vectors (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+in\+\_\+heh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+vec0,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+vec1 }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

defines a consistent representation of a sector geometry\+: the halfedge \+\_\+in\+\_\+heh defines the sector orientation the vertex pointed by \+\_\+in\+\_\+heh defines the sector center \+\_\+vec0 and \+\_\+vec1 are resp. the first and the second vectors defining the sector 

Definition at line 429 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_aff1c0021e05ecba42d7b960add51757c}\label{a08776_aff1c0021e05ecba42d7b960add51757c}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+vertex\+\_\+normal@{calc\+\_\+vertex\+\_\+normal}}
\index{calc\+\_\+vertex\+\_\+normal@{calc\+\_\+vertex\+\_\+normal}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+vertex\+\_\+normal()}{calc\_vertex\_normal()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
\hyperlink{a08776}{Poly\+MeshT}$<$ Kernel $>$\+::\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+vertex\+\_\+normal (\begin{DoxyParamCaption}\item[{\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle}}]{\+\_\+vh }\end{DoxyParamCaption}) const}



Calculate vertex normal for one specific vertex. 

Calculate normal vector for vertex \+\_\+vh by averaging normals of adjacent faces.

\begin{DoxyNote}{Note}
Face normals have to be computed first!
\end{DoxyNote}
\begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces and vertices. Call request\+\_\+face\+\_\+normals() and request\+\_\+vertex\+\_\+normals() before using it!
\end{DoxyAttention}

\begin{DoxyParams}{Parameters}
{\em \+\_\+vh} & Handle of the vertex \\
\hline
\end{DoxyParams}


Definition at line 391 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a2873b741c59a9d3f3a7eb61f996017e0}\label{a08776_a2873b741c59a9d3f3a7eb61f996017e0}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+vertex\+\_\+normal\+\_\+correct@{calc\+\_\+vertex\+\_\+normal\+\_\+correct}}
\index{calc\+\_\+vertex\+\_\+normal\+\_\+correct@{calc\+\_\+vertex\+\_\+normal\+\_\+correct}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+vertex\+\_\+normal\+\_\+correct()}{calc\_vertex\_normal\_correct()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+vertex\+\_\+normal\+\_\+correct (\begin{DoxyParamCaption}\item[{\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle}}]{\+\_\+vh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+n }\end{DoxyParamCaption}) const}



Compute normals for all primitives. 

Calls \hyperlink{a08776_a5677ec057717fece1bc3c7abbf93cbdf}{update\+\_\+face\+\_\+normals()} , \hyperlink{a08776_a58045f9fafc6239077c747afdd8f852d}{update\+\_\+halfedge\+\_\+normals()} and \hyperlink{a08776_acbf60ccc42cb484ba2911bda8277551c}{update\+\_\+vertex\+\_\+normals()} if the normals (i.\+e. the properties) exist.

\begin{DoxyNote}{Note}
Face normals are required to compute vertex and halfedge normals! 
\end{DoxyNote}


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

\mbox{\Hypertarget{a08776_a274a5ec813ccbd19c775740df6bae995}\label{a08776_a274a5ec813ccbd19c775740df6bae995}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+vertex\+\_\+normal\+\_\+fast@{calc\+\_\+vertex\+\_\+normal\+\_\+fast}}
\index{calc\+\_\+vertex\+\_\+normal\+\_\+fast@{calc\+\_\+vertex\+\_\+normal\+\_\+fast}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+vertex\+\_\+normal\+\_\+fast()}{calc\_vertex\_normal\_fast()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+vertex\+\_\+normal\+\_\+fast (\begin{DoxyParamCaption}\item[{\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle}}]{\+\_\+vh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+n }\end{DoxyParamCaption}) const}

Different methods for calculation of the normal at \+\_\+vh\+:
\begin{DoxyItemize}
\item ...\+\_\+fast -\/ the default one -\/ the same as calc vertex\+\_\+normal()
\begin{DoxyItemize}
\item needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces
\end{DoxyItemize}
\item ...\+\_\+correct -\/ works properly for non-\/triangular meshes
\begin{DoxyItemize}
\item does not need any attributes
\end{DoxyItemize}
\item ...\+\_\+loop -\/ calculates loop surface normals
\begin{DoxyItemize}
\item does not need any attributes 
\end{DoxyItemize}
\end{DoxyItemize}

Definition at line 405 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_ac18dd8b978ee432fae67524b3a181c14}\label{a08776_ac18dd8b978ee432fae67524b3a181c14}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!calc\+\_\+vertex\+\_\+normal\+\_\+loop@{calc\+\_\+vertex\+\_\+normal\+\_\+loop}}
\index{calc\+\_\+vertex\+\_\+normal\+\_\+loop@{calc\+\_\+vertex\+\_\+normal\+\_\+loop}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{calc\+\_\+vertex\+\_\+normal\+\_\+loop()}{calc\_vertex\_normal\_loop()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::calc\+\_\+vertex\+\_\+normal\+\_\+loop (\begin{DoxyParamCaption}\item[{\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle}}]{\+\_\+vh,  }\item[{\hyperlink{a08776_a3570fd132d1ac589b380485cf59c9e0b}{Normal} \&}]{\+\_\+n }\end{DoxyParamCaption}) const}



Compute normals for all primitives. 

Calls \hyperlink{a08776_a5677ec057717fece1bc3c7abbf93cbdf}{update\+\_\+face\+\_\+normals()} , \hyperlink{a08776_a58045f9fafc6239077c747afdd8f852d}{update\+\_\+halfedge\+\_\+normals()} and \hyperlink{a08776_acbf60ccc42cb484ba2911bda8277551c}{update\+\_\+vertex\+\_\+normals()} if the normals (i.\+e. the properties) exist.

\begin{DoxyNote}{Note}
Face normals are required to compute vertex and halfedge normals! 
\end{DoxyNote}


Definition at line 443 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a5a52366a97b3c87ab3473c476f221e22}\label{a08776_a5a52366a97b3c87ab3473c476f221e22}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!find\+\_\+feature\+\_\+edges@{find\+\_\+feature\+\_\+edges}}
\index{find\+\_\+feature\+\_\+edges@{find\+\_\+feature\+\_\+edges}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{find\+\_\+feature\+\_\+edges()}{find\_feature\_edges()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
uint \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::find\+\_\+feature\+\_\+edges (\begin{DoxyParamCaption}\item[{\hyperlink{a08776_a15372f27edf521d8e9028e2abccae342}{Scalar}}]{\+\_\+angle\+\_\+tresh = {\ttfamily OpenMesh\+:\+:deg\+\_\+to\+\_\+rad(44.0)} }\end{DoxyParamCaption})}

tags an edge as a feature if its dihedral angle is larger than \+\_\+angle\+\_\+tresh returns the number of the found feature edges, requires edge\+\_\+status property 

Definition at line 74 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a98e626927ab0d71cef18df58be2e212e}\label{a08776_a98e626927ab0d71cef18df58be2e212e}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!is\+\_\+estimated\+\_\+feature\+\_\+edge@{is\+\_\+estimated\+\_\+feature\+\_\+edge}}
\index{is\+\_\+estimated\+\_\+feature\+\_\+edge@{is\+\_\+estimated\+\_\+feature\+\_\+edge}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{is\+\_\+estimated\+\_\+feature\+\_\+edge()}{is\_estimated\_feature\_edge()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
bool \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::is\+\_\+estimated\+\_\+feature\+\_\+edge (\begin{DoxyParamCaption}\item[{Halfedge\+Handle}]{\+\_\+heh,  }\item[{const double}]{\+\_\+feature\+\_\+angle }\end{DoxyParamCaption}) const}

identifies feature edges w.\+r.\+t. the minimal dihedral angle for feature edges (in radians) and the status feature tag 

Definition at line 360 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_aee07d968ddfbb6376a7f7712ae1a73c4}\label{a08776_aee07d968ddfbb6376a7f7712ae1a73c4}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!new\+\_\+vertex@{new\+\_\+vertex}}
\index{new\+\_\+vertex@{new\+\_\+vertex}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{new\+\_\+vertex()}{new\_vertex()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::new\+\_\+vertex (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Adds a new default-\/initialized vertex. 

Uses default copy and assignment operator. Use them to assign two meshes of {\bfseries equal} type. If the mesh types vary, use Poly\+Mesh\+T\+::assign() instead. \begin{DoxySeeAlso}{See also}
\hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex(const Point\&)}, \hyperlink{a08776_a8787adda36a734b33fa578f9c50bb2f3}{new\+\_\+vertex\+\_\+dirty()} 
\end{DoxySeeAlso}


Definition at line 201 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a77d36a90d4c207845cf1478aec56c283}\label{a08776_a77d36a90d4c207845cf1478aec56c283}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!new\+\_\+vertex@{new\+\_\+vertex}}
\index{new\+\_\+vertex@{new\+\_\+vertex}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{new\+\_\+vertex()}{new\_vertex()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::new\+\_\+vertex (\begin{DoxyParamCaption}\item[{const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&}]{\+\_\+p }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}



Adds a new vertex initialized to a custom position. 

\begin{DoxySeeAlso}{See also}
\hyperlink{a08776_aee07d968ddfbb6376a7f7712ae1a73c4}{new\+\_\+vertex()}, \hyperlink{a08776_a8787adda36a734b33fa578f9c50bb2f3}{new\+\_\+vertex\+\_\+dirty()} 
\end{DoxySeeAlso}


Definition at line 209 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a8787adda36a734b33fa578f9c50bb2f3}\label{a08776_a8787adda36a734b33fa578f9c50bb2f3}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!new\+\_\+vertex\+\_\+dirty@{new\+\_\+vertex\+\_\+dirty}}
\index{new\+\_\+vertex\+\_\+dirty@{new\+\_\+vertex\+\_\+dirty}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{new\+\_\+vertex\+\_\+dirty()}{new\_vertex\_dirty()}}
{\footnotesize\ttfamily template$<$class Kernel$>$ \\
\hyperlink{a08776_a0fc18e13d70825938274e3faf7b55e01}{Vertex\+Handle} \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::new\+\_\+vertex\+\_\+dirty (\begin{DoxyParamCaption}\item[{const \hyperlink{a08776_aed10fb4dfb536b53a5e20c8f2442eadf}{Point} \&}]{\+\_\+p }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Same as \hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex(const Point\&)} but never shrinks, only enlarges the vertex property vectors.

If you are rebuilding a mesh that you erased with \hyperlink{a08576_a04957ea762a7b0ff4fc3faac13c20fa4}{Array\+Kernel\+::clean()} or \hyperlink{a08576_aeb0af6fdeb2a51da1219cc1ddb84f201}{Array\+Kernel\+::clean\+\_\+keep\+\_\+reservation()} using this method instead of \hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex(const Point \&)} saves reallocation and reinitialization of property memory.

\begin{DoxySeeAlso}{See also}
\hyperlink{a08776_a77d36a90d4c207845cf1478aec56c283}{new\+\_\+vertex(const Point \&)} 
\end{DoxySeeAlso}


Definition at line 227 of file Poly\+Mesh\+T.\+hh.

\mbox{\Hypertarget{a08776_a5677ec057717fece1bc3c7abbf93cbdf}\label{a08776_a5677ec057717fece1bc3c7abbf93cbdf}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!update\+\_\+face\+\_\+normals@{update\+\_\+face\+\_\+normals}}
\index{update\+\_\+face\+\_\+normals@{update\+\_\+face\+\_\+normals}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{update\+\_\+face\+\_\+normals()}{update\_face\_normals()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::update\+\_\+face\+\_\+normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Update normal vectors for all faces. 

\begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces. Call request\+\_\+face\+\_\+normals() before using it! 
\end{DoxyAttention}


Definition at line 277 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a58045f9fafc6239077c747afdd8f852d}\label{a08776_a58045f9fafc6239077c747afdd8f852d}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!update\+\_\+halfedge\+\_\+normals@{update\+\_\+halfedge\+\_\+normals}}
\index{update\+\_\+halfedge\+\_\+normals@{update\+\_\+halfedge\+\_\+normals}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{update\+\_\+halfedge\+\_\+normals()}{update\_halfedge\_normals()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::update\+\_\+halfedge\+\_\+normals (\begin{DoxyParamCaption}\item[{const double}]{\+\_\+feature\+\_\+angle = {\ttfamily 0.8} }\end{DoxyParamCaption})}



Update normal vectors for all halfedges. 

Uses the existing face normals to compute halfedge normals

\begin{DoxyNote}{Note}
Face normals have to be computed first!
\end{DoxyNote}
\begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces and halfedges. Call request\+\_\+face\+\_\+normals() and request\+\_\+halfedge\+\_\+normals() before using it! 
\end{DoxyAttention}


Definition at line 292 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_a601f21014e50bd5a2243b0e4849c9c14}\label{a08776_a601f21014e50bd5a2243b0e4849c9c14}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!update\+\_\+normals@{update\+\_\+normals}}
\index{update\+\_\+normals@{update\+\_\+normals}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{update\+\_\+normals()}{update\_normals()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::update\+\_\+normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Compute normals for all primitives. 

Calls \hyperlink{a08776_a5677ec057717fece1bc3c7abbf93cbdf}{update\+\_\+face\+\_\+normals()} , \hyperlink{a08776_a58045f9fafc6239077c747afdd8f852d}{update\+\_\+halfedge\+\_\+normals()} and \hyperlink{a08776_acbf60ccc42cb484ba2911bda8277551c}{update\+\_\+vertex\+\_\+normals()} if the normals (i.\+e. the properties) exist.

\begin{DoxyNote}{Note}
Face normals are required to compute vertex and halfedge normals! 
\end{DoxyNote}


Definition at line 259 of file Poly\+Mesh\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{a08776_acbf60ccc42cb484ba2911bda8277551c}\label{a08776_acbf60ccc42cb484ba2911bda8277551c}} 
\index{Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}!update\+\_\+vertex\+\_\+normals@{update\+\_\+vertex\+\_\+normals}}
\index{update\+\_\+vertex\+\_\+normals@{update\+\_\+vertex\+\_\+normals}!Open\+Mesh\+::\+Poly\+MeshT@{Open\+Mesh\+::\+Poly\+MeshT}}
\subsubsection{\texorpdfstring{update\+\_\+vertex\+\_\+normals()}{update\_vertex\_normals()}}
{\footnotesize\ttfamily template$<$class Kernel $>$ \\
void \hyperlink{a08776}{Open\+Mesh\+::\+Poly\+MeshT}$<$ Kernel $>$\+::update\+\_\+vertex\+\_\+normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Update normal vectors for all vertices. 

Uses existing face normals to calculate new vertex normals.

\begin{DoxyNote}{Note}
Face normals have to be computed first!
\end{DoxyNote}
\begin{DoxyAttention}{Attention}
Needs the \hyperlink{a06215_ab78a93560926cd2f9958cb028f7ea96da213616dd2e4d9744d863587001a77988}{Attributes\+::\+Normal} attribute for faces and vertices. Call request\+\_\+face\+\_\+normals() and request\+\_\+vertex\+\_\+normals() before using it! 
\end{DoxyAttention}


Definition at line 466 of file Poly\+Mesh\+T\+\_\+impl.\+hh.



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