\hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT}{}\section{Open\+Mesh\+:\+:Subdivider\+:\+:Uniform\+:\+:LoopT$<$ Mesh\+Type, Real\+Type $>$ Class Template Reference}
\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT}\index{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+Loop\+T$<$ Mesh\+Type, Real\+Type $>$@{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+Loop\+T$<$ Mesh\+Type, Real\+Type $>$}}


{\ttfamily \#include $<$Open\+Flipper/libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Tools/\+Subdivider/\+Uniform/\+Loop\+T.\+hh$>$}

Inheritance diagram for Open\+Mesh\+:\+:Subdivider\+:\+:Uniform\+:\+:LoopT$<$ Mesh\+Type, Real\+Type $>$\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=3.000000cm]{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT}
\end{center}
\end{figure}
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_1_1compute__weight}{compute\+\_\+weight}
\end{DoxyCompactItemize}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_afe44bd5448376edf698f1822a61cf67e}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_afe44bd5448376edf698f1822a61cf67e}} 
typedef Real\+Type {\bfseries real\+\_\+t}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a858ea22190434f0736bbfb7927ceb283}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a858ea22190434f0736bbfb7927ceb283}} 
typedef Mesh\+Type {\bfseries mesh\+\_\+t}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a5b20965d17af71925e61e9b3b5f148d0}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a5b20965d17af71925e61e9b3b5f148d0}} 
typedef \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1SubdividerT}{SubdividerT}$<$ mesh\+\_\+t, real\+\_\+t $>$ {\bfseries parent\+\_\+t}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a5a443b049ae4cb724e5dcb3e6ba82f1b}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a5a443b049ae4cb724e5dcb3e6ba82f1b}} 
typedef std\+::pair$<$ real\+\_\+t, real\+\_\+t $>$ {\bfseries weight\+\_\+t}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a447c19a1c964a954478d67a7daa0b911}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a447c19a1c964a954478d67a7daa0b911}} 
typedef std\+::vector$<$ std\+::pair$<$ real\+\_\+t, real\+\_\+t $>$ $>$ {\bfseries weights\+\_\+t}
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aba580ee4f23583fe2f36974ef741380e}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aba580ee4f23583fe2f36974ef741380e}} 
{\bfseries LoopT} (mesh\+\_\+t \&\+\_\+m)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a79f3444bbaa77e670176162ce1216527}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a79f3444bbaa77e670176162ce1216527}} 
const char $\ast$ \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a79f3444bbaa77e670176162ce1216527}{name} () const override
\begin{DoxyCompactList}\small\item\em Return name of subdivision algorithm. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ab51fd2e6ad14e5572fdc2955ac89aab9}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ab51fd2e6ad14e5572fdc2955ac89aab9}} 
void \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ab51fd2e6ad14e5572fdc2955ac89aab9}{init\+\_\+weights} (size\+\_\+t \+\_\+max\+\_\+valence=50)
\begin{DoxyCompactList}\small\item\em Pre-\/compute weights. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ad0eb94e38c4476e2c877bb399b4cf59d}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ad0eb94e38c4476e2c877bb399b4cf59d}} 
bool \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_ad0eb94e38c4476e2c877bb399b4cf59d}{prepare} (mesh\+\_\+t \&\+\_\+m) override
\begin{DoxyCompactList}\small\item\em Prepare mesh, e.\+g. add properties. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a12842704ee107a1cd92603709c9d5908}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a12842704ee107a1cd92603709c9d5908}} 
bool \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a12842704ee107a1cd92603709c9d5908}{cleanup} (mesh\+\_\+t \&\+\_\+m) override
\begin{DoxyCompactList}\small\item\em Cleanup mesh after usage, e.\+g. remove added properties. \end{DoxyCompactList}\item 
bool \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_af811a514d9e562f946cecbdb9259fbd0}{subdivide} (mesh\+\_\+t \&\+\_\+m, size\+\_\+t \+\_\+n, const bool \+\_\+update\+\_\+points=true) override
\begin{DoxyCompactList}\small\item\em Subdivide mesh {\ttfamily \+\_\+m} {\ttfamily \+\_\+n} times. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_adbd163c53b594b84d6e3083d5fba07d0}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_adbd163c53b594b84d6e3083d5fba07d0}} 
void {\bfseries split\+\_\+face} (mesh\+\_\+t \&\+\_\+m, const typename mesh\+\_\+t\+::\+Face\+Handle \&\+\_\+fh)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a0f56fbbf3ddc216d4525e49db373e222}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a0f56fbbf3ddc216d4525e49db373e222}} 
void {\bfseries corner\+\_\+cutting} (mesh\+\_\+t \&\+\_\+m, const typename mesh\+\_\+t\+::\+Halfedge\+Handle \&\+\_\+he)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aef21c881d7dbe13c38b9c932f13b284a}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aef21c881d7dbe13c38b9c932f13b284a}} 
void {\bfseries split\+\_\+edge} (mesh\+\_\+t \&\+\_\+m, const typename mesh\+\_\+t\+::\+Edge\+Handle \&\+\_\+eh)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aba80588f758276c9d71e1aa239a3dca2}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_aba80588f758276c9d71e1aa239a3dca2}} 
void {\bfseries compute\+\_\+midpoint} (mesh\+\_\+t \&\+\_\+m, const typename mesh\+\_\+t\+::\+Edge\+Handle \&\+\_\+eh)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a8b0f26cad886ee193bc4b0ff044efea9}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a8b0f26cad886ee193bc4b0ff044efea9}} 
void {\bfseries smooth} (mesh\+\_\+t \&\+\_\+m, const typename mesh\+\_\+t\+::\+Vertex\+Handle \&\+\_\+vh)
\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a52827d65464283e50efc6dee9cf97658}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a52827d65464283e50efc6dee9cf97658}} 
\hyperlink{structOpenMesh_1_1VPropHandleT}{Open\+Mesh\+::\+V\+Prop\+HandleT}$<$ typename mesh\+\_\+t\+::\+Point $>$ {\bfseries vp\+\_\+pos\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a28562568cc8a6a963afc305d342124bb}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a28562568cc8a6a963afc305d342124bb}} 
\hyperlink{structOpenMesh_1_1EPropHandleT}{Open\+Mesh\+::\+E\+Prop\+HandleT}$<$ typename mesh\+\_\+t\+::\+Point $>$ {\bfseries ep\+\_\+pos\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a8611896a8c6172579912840357f8301b}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a8611896a8c6172579912840357f8301b}} 
weights\+\_\+t {\bfseries weights\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a541c6e9b90bb6f17120c00382c52201a}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a541c6e9b90bb6f17120c00382c52201a}} 
const real\+\_\+t {\bfseries \+\_\+1over8}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a0f67186f7eff7e8deaf04d852c26a701}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_a0f67186f7eff7e8deaf04d852c26a701}} 
const real\+\_\+t {\bfseries \+\_\+3over8}
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$typename Mesh\+Type, typename Real\+Type = double$>$\newline
class Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+Loop\+T$<$ Mesh\+Type, Real\+Type $>$}

Uniform Loop subdivision algorithm.

Implementation as described in

C. T. Loop, \char`\"{}\+Smooth Subdivision Surfaces Based on Triangles\char`\"{}, M.\+S. Thesis, Department of Mathematics, University of Utah, August 1987. 

Definition at line 91 of file Loop\+T.\+hh.



\subsection{Member Function Documentation}
\mbox{\Hypertarget{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_af811a514d9e562f946cecbdb9259fbd0}\label{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT_af811a514d9e562f946cecbdb9259fbd0}} 
\index{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+LoopT@{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+LoopT}!subdivide@{subdivide}}
\index{subdivide@{subdivide}!Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+LoopT@{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+LoopT}}
\subsubsection{\texorpdfstring{subdivide()}{subdivide()}}
{\footnotesize\ttfamily template$<$typename Mesh\+Type, typename Real\+Type = double$>$ \\
bool \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1LoopT}{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+LoopT}$<$ Mesh\+Type, Real\+Type $>$\+::subdivide (\begin{DoxyParamCaption}\item[{mesh\+\_\+t \&}]{\+\_\+m,  }\item[{size\+\_\+t}]{\+\_\+n,  }\item[{const bool}]{\+\_\+update\+\_\+points = {\ttfamily true} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [override]}, {\ttfamily [protected]}, {\ttfamily [virtual]}}



Subdivide mesh {\ttfamily \+\_\+m} {\ttfamily \+\_\+n} times. 

T\+O\+DO\+:Implement fixed positions 

Implements \hyperlink{classOpenMesh_1_1Subdivider_1_1Uniform_1_1SubdividerT_aacf8b2b63d1512d3c174fbe1781ee311}{Open\+Mesh\+::\+Subdivider\+::\+Uniform\+::\+Subdivider\+T$<$ Mesh\+Type, Real\+Type $>$}.



Definition at line 149 of file Loop\+T.\+hh.



The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
Open\+Flipper/libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Tools/\+Subdivider/\+Uniform/\hyperlink{LoopT_8hh}{Loop\+T.\+hh}\end{DoxyCompactItemize}
