\hypertarget{classOpenMesh_1_1PropertyManager}{}\section{Open\+Mesh\+:\+:Property\+Manager$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$ Class Template Reference}
\label{classOpenMesh_1_1PropertyManager}\index{Open\+Mesh\+::\+Property\+Manager$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$@{Open\+Mesh\+::\+Property\+Manager$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$}}


{\ttfamily \#include $<$Open\+Flipper/libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Core/\+Utils/\+Property\+Manager.\+hh$>$}

\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structOpenMesh_1_1PropertyManager_1_1StorageT}{StorageT}
\item 
struct \hyperlink{structOpenMesh_1_1PropertyManager_1_1StorageT_3_01PropertyManager2_00_01MPropHandleT_3_01Value_01_4_01_4}{Storage\+T$<$ Property\+Manager2, M\+Prop\+Handle\+T$<$ Value $>$ $>$}
\end{DoxyCompactItemize}
\subsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a43cd91aff2a4679615a351547898a99e}\label{classOpenMesh_1_1PropertyManager_a43cd91aff2a4679615a351547898a99e}} 
using {\bfseries Value} = typename P\+R\+O\+P\+T\+Y\+P\+E\+::\+Value
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a56847f3fd1e0b725bd4326a08a5f0bb0}\label{classOpenMesh_1_1PropertyManager_a56847f3fd1e0b725bd4326a08a5f0bb0}} 
using {\bfseries value\+\_\+type} = typename P\+R\+O\+P\+T\+Y\+P\+E\+::value\+\_\+type
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_aa4d8bd73d83e7003bb8ca46bc9f104d3}\label{classOpenMesh_1_1PropertyManager_aa4d8bd73d83e7003bb8ca46bc9f104d3}} 
using {\bfseries Handle} = typename P\+R\+O\+P\+T\+Y\+P\+E\+::\+Handle
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_abbb322dd2b935ce4dbdc35ec67296873}\label{classOpenMesh_1_1PropertyManager_abbb322dd2b935ce4dbdc35ec67296873}} 
using {\bfseries Self} = \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ab1ad2faa836ee1221771679314981c7d}\label{classOpenMesh_1_1PropertyManager_ab1ad2faa836ee1221771679314981c7d}} 
using {\bfseries Reference} = typename P\+R\+O\+P\+T\+Y\+P\+E\+::reference
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a20b2470cbf08a5985aa47116b0a8b6c6}\label{classOpenMesh_1_1PropertyManager_a20b2470cbf08a5985aa47116b0a8b6c6}} 
using {\bfseries Const\+Reference} = typename P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_ac7f78f29721539053647cc3e00bca638}{O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED} (\char`\"{}Use the constructor without parameter \textquotesingle{}existing\textquotesingle{} instead. Check for existance with \hyperlink{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}{has\+Property}\char`\"{}) Property\+Manager(\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a628a30bf55164b87ccb6ddaeaab99475}\label{classOpenMesh_1_1PropertyManager_a628a30bf55164b87ccb6ddaeaab99475}} 
const char bool {\bfseries retain\+\_\+} (existing)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ac75fee7dad837974431ae2b7d090c734}\label{classOpenMesh_1_1PropertyManager_ac75fee7dad837974431ae2b7d090c734}} 
const char bool {\bfseries name\+\_\+} (propname)
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{Property\+Manager} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_a2a8ee99088e9730f51367b431d325aee}{Property\+Manager} (const Value \&initial\+\_\+value, \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_a87d05b80c8e2abe588624c25520822bf}{Property\+Manager} (const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh)
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_a8c4a25a0252e0f0f7de16007410f2b8c}{Property\+Manager} (const Value \&initial\+\_\+value, const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh)
\item 
\hyperlink{classOpenMesh_1_1PropertyManager_ab99f400195c4284bfde18e16570d4e9b}{Property\+Manager} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, P\+R\+O\+P\+T\+Y\+PE property\+\_\+handle)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a4b9db615da76068d1f6ab071e7aa19c2}\label{classOpenMesh_1_1PropertyManager_a4b9db615da76068d1f6ab071e7aa19c2}} 
{\bfseries Property\+Manager} (const \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} \&rhs)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a49e9ac5ce52d0e430efe6ead12ccffbc}\label{classOpenMesh_1_1PropertyManager_a49e9ac5ce52d0e430efe6ead12ccffbc}} 
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} \& {\bfseries operator=} (const \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} \&rhs)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a1ac1f21a36640158de02c8dffbf81ff0}\label{classOpenMesh_1_1PropertyManager_a1ac1f21a36640158de02c8dffbf81ff0}} 
void {\bfseries swap} (\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} \&rhs)
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a9535daa19510a51a0b7071ded8120453}\label{classOpenMesh_1_1PropertyManager_a9535daa19510a51a0b7071ded8120453}} 
bool {\bfseries is\+Valid} () const
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a61deccf62ce3fdb2b4b9c5f242b78d27}\label{classOpenMesh_1_1PropertyManager_a61deccf62ce3fdb2b4b9c5f242b78d27}} 
{\bfseries operator bool} () const
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_acfc2d0c6b76e06a1679239587edd2e01}\label{classOpenMesh_1_1PropertyManager_acfc2d0c6b76e06a1679239587edd2e01}} 
const P\+R\+O\+P\+T\+Y\+PE \& {\bfseries get\+Raw\+Property} () const
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a44cde31cc2c53d5b6bf691c956b626a4}\label{classOpenMesh_1_1PropertyManager_a44cde31cc2c53d5b6bf691c956b626a4}} 
const std\+::string \& {\bfseries get\+Name} () const
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::reference \& \hyperlink{classOpenMesh_1_1PropertyManager_a0d95172f0cee362353cf61870a09b7e7}{operator$\ast$} ()
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \& \hyperlink{classOpenMesh_1_1PropertyManager_a72b64e0da09d2f6ecf31d91df1f03198}{operator$\ast$} () const
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::reference \hyperlink{classOpenMesh_1_1PropertyManager_a54c8a19dfecfc4dea7f7561a99db9f13}{operator\mbox{[}$\,$\mbox{]}} (Handle handle)
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \hyperlink{classOpenMesh_1_1PropertyManager_a28974d3379f7531e964e32356404afe7}{operator\mbox{[}$\,$\mbox{]}} (const Handle \&handle) const
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::reference \hyperlink{classOpenMesh_1_1PropertyManager_aba0aec0d315ac14402c43fcc9543b869}{operator()} (const Handle \&handle=Handle())
\item 
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \hyperlink{classOpenMesh_1_1PropertyManager_a78cc33c7c56360a44a675bd41879fa6b}{operator()} (const Handle \&handle=Handle()) const
\item 
{\footnotesize template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ }\\void \hyperlink{classOpenMesh_1_1PropertyManager_a1c7b5c7063fb137ba9552afd4a0ec77f}{set\+\_\+range} (Handle\+Type\+Iterator begin, Handle\+Type\+Iterator end, const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&value)
\item 
{\footnotesize template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Handle\+Type\+Iterator\+\_\+2 $>$ }\\void \hyperlink{classOpenMesh_1_1PropertyManager_adcbed3201fe66c0764c26d0a44724af1}{copy\+\_\+to} (Handle\+Type\+Iterator begin, Handle\+Type\+Iterator end, \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 $>$ \&dst\+\_\+propmanager, Handle\+Type\+Iterator\+\_\+2 dst\+\_\+begin, Handle\+Type\+Iterator\+\_\+2 dst\+\_\+end) const
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_af3a7ea9b0dee4f0b696f2877615f0cda}\label{classOpenMesh_1_1PropertyManager_af3a7ea9b0dee4f0b696f2877615f0cda}} 
{\footnotesize template$<$typename Range\+Type , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Range\+Type\+\_\+2 $>$ }\\void {\bfseries copy\+\_\+to} (const Range\+Type \&range, \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 $>$ \&dst\+\_\+propmanager, const Range\+Type\+\_\+2 \&dst\+\_\+range) const
\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ad44214212f6edb3407f8b76213bfb4f5}\label{classOpenMesh_1_1PropertyManager_ad44214212f6edb3407f8b76213bfb4f5}} 
static bool {\bfseries property\+Exists} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename Range\+Type , typename Range\+Type\+\_\+2 $>$ }\\static void \hyperlink{classOpenMesh_1_1PropertyManager_a905436f2131ac5811ad43400fb20fb54}{copy} (const char $\ast$prop\+\_\+name, \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&src\+\_\+mesh, const Range\+Type \&src\+\_\+range, \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&dst\+\_\+mesh, const Range\+Type\+\_\+2 \&dst\+\_\+range)
\end{DoxyCompactItemize}
\subsection*{Public Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a723c34ee5e7ad6804cfcb406d381d258}\label{classOpenMesh_1_1PropertyManager_a723c34ee5e7ad6804cfcb406d381d258}} 
const char $\ast$ {\bfseries propname}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ad8a689239937490c47196082a36aeec7}\label{classOpenMesh_1_1PropertyManager_ad8a689239937490c47196082a36aeec7}} 
const char bool {\bfseries existing}\+: mesh\+\_\+(mesh)
\end{DoxyCompactItemize}
\subsection*{Private Types}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ab1d787c8df8ba355a3a2d5240355ece0}\label{classOpenMesh_1_1PropertyManager_ab1d787c8df8ba355a3a2d5240355ece0}} 
using {\bfseries Storage} = \hyperlink{structOpenMesh_1_1PropertyManager_1_1StorageT}{StorageT}$<$ \hyperlink{classOpenMesh_1_1PropertyManager}{Self}, P\+R\+O\+P\+T\+Y\+PE $>$
\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a60b868c3e7616ac8ffa2719b041c8990}\label{classOpenMesh_1_1PropertyManager_a60b868c3e7616ac8ffa2719b041c8990}} 
void {\bfseries delete\+Property} ()
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a6fc96184c522c7707834eba950a577ab}\label{classOpenMesh_1_1PropertyManager_a6fc96184c522c7707834eba950a577ab}} 
\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \& {\bfseries mesh} () const
\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a0dd835c7516b33f425420f4230f01127}\label{classOpenMesh_1_1PropertyManager_a0dd835c7516b33f425420f4230f01127}} 
const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \& {\bfseries mesh\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a57550261a734656d1598028c4b514d81}\label{classOpenMesh_1_1PropertyManager_a57550261a734656d1598028c4b514d81}} 
P\+R\+O\+P\+T\+Y\+PE {\bfseries prop\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a19ccf617fbf1f1d102a93baeb1e54732}\label{classOpenMesh_1_1PropertyManager_a19ccf617fbf1f1d102a93baeb1e54732}} 
bool {\bfseries retain\+\_\+}
\item 
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_aeeea39105b9bc6ee3fa218cd2df00749}\label{classOpenMesh_1_1PropertyManager_aeeea39105b9bc6ee3fa218cd2df00749}} 
std\+::string {\bfseries name\+\_\+}
\end{DoxyCompactItemize}
\subsection*{Related Functions}
(Note that these are not member functions.) \begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename ElementT , typename T $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}{make\+Temporary\+Property} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename ElementT , typename T $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a510b1f70ae8b69d9c4639b74c38eebba}{make\+Temporary\+Property} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh)
\item 
{\footnotesize template$<$typename ElementT , typename T $>$ }\\bool \hyperlink{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}{has\+Property} (const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename ElementT , typename T $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}{get\+Property} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename ElementT , typename T $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ \hyperlink{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}{get\+Or\+Make\+Property} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+PE $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a124b1e945be6f5188a3bfab685018008}{make\+Property\+Manager\+From\+New} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename MeshT  = int$>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a6a0a645ca6dc88a5d315e9a151c5d61b}{make\+Property\+Manager\+From\+Existing} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename MeshT  = int$>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$ \hyperlink{classOpenMesh_1_1PropertyManager_acbe75e98e92fe82e86ee8105a68108d5}{make\+Property\+Manager\+From\+Existing\+Or\+New} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a30e18639a7573eaa6295e26c33c48109}{make\+Property\+Manager\+From\+Existing\+Or\+New} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname, const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE \&begin, const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE \&end, const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&init\+\_\+value)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+R\+A\+N\+GE , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a18ca68cb05137e40cf43a2b0096c92db}{make\+Property\+Manager\+From\+Existing\+Or\+New} (\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&mesh, const char $\ast$propname, const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+R\+A\+N\+GE \&range, const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&init\+\_\+value)
\item 
{\footnotesize template$<$typename MeshT $>$ }\\\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ \hyperlink{structOpenMesh_1_1VPropHandleT}{Open\+Mesh\+::\+V\+Prop\+HandleT}$<$ typename Mesh\+T\+::\+Point $>$ $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a624c702d7caca52693790995d4e7e36a}{get\+Points\+Property} (MeshT \&mesh)
\item 
{\footnotesize template$<$typename MeshT $>$ }\\\hyperlink{classOpenMesh_1_1ConstPropertyViewer}{Const\+Property\+Viewer}$<$ \hyperlink{structOpenMesh_1_1VPropHandleT}{Open\+Mesh\+::\+V\+Prop\+HandleT}$<$ typename Mesh\+T\+::\+Point $>$ $>$ \hyperlink{classOpenMesh_1_1PropertyManager_a2c29dc453a6bbe9a580f0dd2b1c5215c}{get\+Points\+Property} (const MeshT \&mesh)
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$\newline
class Open\+Mesh\+::\+Property\+Manager$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$}

This class is intended to manage the lifecycle of properties. It also defines convenience operators to access the encapsulated property\textquotesingle{}s value.

It is recommended to use the factory functions \hyperlink{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}{make\+Temporary\+Property()}, \hyperlink{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}{get\+Property()}, and \hyperlink{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}{get\+Or\+Make\+Property()} to construct a \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}, e.\+g.

Note that the second template parameter is depcretated.


\begin{DoxyCode}
\{
    TriMesh mesh;
    \textcolor{keyword}{auto} visited = makeTemporaryProperty<VertexHandle, bool>(mesh);

    \textcolor{keywordflow}{for} (\textcolor{keyword}{auto} vh : mesh.vertices()) \{
        \textcolor{keywordflow}{if} (!visited[vh]) \{
            visitComponent(mesh, vh, visited);
        \}
    \}
    \textcolor{comment}{// The property is automatically removed at the end of the scope}
\}
\end{DoxyCode}
 

Definition at line 80 of file Property\+Manager.\+hh.



\subsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}\label{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!Property\+Manager@{Property\+Manager}}
\index{Property\+Manager@{Property\+Manager}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{Property\+Manager()}{PropertyManager()}\hspace{0.1cm}{\footnotesize\ttfamily [1/5]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Constructor.

Asks for a property with name propname and creates one if none exists. Lifetime is not managed.


\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which to create the property. \\
\hline
{\em propname} & The name of the property. \\
\hline
\end{DoxyParams}


Definition at line 178 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a2a8ee99088e9730f51367b431d325aee}\label{classOpenMesh_1_1PropertyManager_a2a8ee99088e9730f51367b431d325aee}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!Property\+Manager@{Property\+Manager}}
\index{Property\+Manager@{Property\+Manager}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{Property\+Manager()}{PropertyManager()}\hspace{0.1cm}{\footnotesize\ttfamily [2/5]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} (\begin{DoxyParamCaption}\item[{const Value \&}]{initial\+\_\+value,  }\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Constructor.

Asks for a property with name propname and creates one if none exists. Lifetime is not managed.


\begin{DoxyParams}{Parameters}
{\em initial\+\_\+value} & If the proeprty is newly created, it will be initialized with initial\+\_\+value. If the property already existed, nothing is changes. \\
\hline
{\em mesh} & The mesh on which to create the property. \\
\hline
{\em propname} & The name of the property. \\
\hline
\end{DoxyParams}


Definition at line 194 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a87d05b80c8e2abe588624c25520822bf}\label{classOpenMesh_1_1PropertyManager_a87d05b80c8e2abe588624c25520822bf}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!Property\+Manager@{Property\+Manager}}
\index{Property\+Manager@{Property\+Manager}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{Property\+Manager()}{PropertyManager()}\hspace{0.1cm}{\footnotesize\ttfamily [3/5]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} (\begin{DoxyParamCaption}\item[{const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Constructor.

Create an anonymous property. Lifetime is managed.


\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which to create the property. \\
\hline
\end{DoxyParams}


Definition at line 208 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a8c4a25a0252e0f0f7de16007410f2b8c}\label{classOpenMesh_1_1PropertyManager_a8c4a25a0252e0f0f7de16007410f2b8c}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!Property\+Manager@{Property\+Manager}}
\index{Property\+Manager@{Property\+Manager}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{Property\+Manager()}{PropertyManager()}\hspace{0.1cm}{\footnotesize\ttfamily [4/5]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} (\begin{DoxyParamCaption}\item[{const Value \&}]{initial\+\_\+value,  }\item[{const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Constructor.

Create an anonymous property. Lifetime is managed.


\begin{DoxyParams}{Parameters}
{\em initial\+\_\+value} & The property will be initialized with initial\+\_\+value. \\
\hline
{\em mesh} & The mesh on which to create the property. \\
\hline
\end{DoxyParams}


Definition at line 220 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ab99f400195c4284bfde18e16570d4e9b}\label{classOpenMesh_1_1PropertyManager_ab99f400195c4284bfde18e16570d4e9b}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!Property\+Manager@{Property\+Manager}}
\index{Property\+Manager@{Property\+Manager}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{Property\+Manager()}{PropertyManager()}\hspace{0.1cm}{\footnotesize\ttfamily [5/5]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{P\+R\+O\+P\+T\+Y\+PE}]{property\+\_\+handle }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Constructor.

Create a wrapper around an existing property. Lifetime is not managed.


\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which to create the property. \\
\hline
{\em property\+\_\+handle} & Handle to an existing property that should be wrapped. \\
\hline
\end{DoxyParams}


Definition at line 233 of file Property\+Manager.\+hh.



\subsection{Member Function Documentation}
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a905436f2131ac5811ad43400fb20fb54}\label{classOpenMesh_1_1PropertyManager_a905436f2131ac5811ad43400fb20fb54}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!copy@{copy}}
\index{copy@{copy}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{copy()}{copy()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
template$<$typename Range\+Type , typename Range\+Type\+\_\+2 $>$ \\
static void \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::copy (\begin{DoxyParamCaption}\item[{const char $\ast$}]{prop\+\_\+name,  }\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{src\+\_\+mesh,  }\item[{const Range\+Type \&}]{src\+\_\+range,  }\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{dst\+\_\+mesh,  }\item[{const Range\+Type\+\_\+2 \&}]{dst\+\_\+range }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}

Copy the values of a property from a source range to a target range. The source range must not be smaller than the target range.


\begin{DoxyParams}{Parameters}
{\em prop\+\_\+name} & Name of the property to copy. Must exist on the source mesh. Will be created on the target mesh if it doesn\textquotesingle{}t exist.\\
\hline
{\em src\+\_\+mesh} & Source mesh from which to copy. \\
\hline
{\em src\+\_\+range} & Source range which to copy. Must not be smaller than dst\+\_\+range. \\
\hline
{\em dst\+\_\+mesh} & Destination mesh on which to copy. \\
\hline
{\em dst\+\_\+range} & Destination range. \\
\hline
\end{DoxyParams}


Definition at line 568 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_adcbed3201fe66c0764c26d0a44724af1}\label{classOpenMesh_1_1PropertyManager_adcbed3201fe66c0764c26d0a44724af1}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!copy\+\_\+to@{copy\+\_\+to}}
\index{copy\+\_\+to@{copy\+\_\+to}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{copy\+\_\+to()}{copy\_to()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Handle\+Type\+Iterator\+\_\+2 $>$ \\
void \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::copy\+\_\+to (\begin{DoxyParamCaption}\item[{Handle\+Type\+Iterator}]{begin,  }\item[{Handle\+Type\+Iterator}]{end,  }\item[{\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 $>$ \&}]{dst\+\_\+propmanager,  }\item[{Handle\+Type\+Iterator\+\_\+2}]{dst\+\_\+begin,  }\item[{Handle\+Type\+Iterator\+\_\+2}]{dst\+\_\+end }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Conveniently transfer the values managed by one property manager onto the values managed by a different property manager.


\begin{DoxyParams}{Parameters}
{\em begin} & Start iterator. Needs to dereference to Handle\+Type. Will be used with this property manager. \\
\hline
{\em end} & End iterator. (Exclusive.) Will be used with this property manager. \\
\hline
{\em dst\+\_\+propmanager} & The destination property manager. \\
\hline
{\em dst\+\_\+begin} & Start iterator. Needs to dereference to the Handle\+Type of dst\+\_\+propmanager. Will be used with dst\+\_\+propmanager. \\
\hline
{\em dst\+\_\+end} & End iterator. (Exclusive.) Will be used with dst\+\_\+propmanager. Used to double check the bounds. \\
\hline
\end{DoxyParams}


Definition at line 534 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_ac7f78f29721539053647cc3e00bca638}\label{classOpenMesh_1_1PropertyManager_ac7f78f29721539053647cc3e00bca638}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED@{O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED}}
\index{O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED@{O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+E\+D()}{OM\_DEPRECATED()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::O\+M\+\_\+\+D\+E\+P\+R\+E\+C\+A\+T\+ED (\begin{DoxyParamCaption}\item[{\char`\"{}Use the constructor without parameter \textquotesingle{}existing\textquotesingle{} instead. Check for existance with \hyperlink{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}{has\+Property}\char`\"{}}]{ }\end{DoxyParamCaption}) \&}

\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000013}{Deprecated}]Use a constructor without {\ttfamily existing} and check existance with \hyperlink{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}{has\+Property()} instead.\end{DoxyRefDesc}


Constructor.

Throws an {\ttfamily std\+::runtime\+\_\+error} if {\ttfamily existing} is true and no property named {\ttfamily propname} of the appropriate property type exists.


\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which to create the property. \\
\hline
{\em propname} & The name of the property. \\
\hline
{\em existing} & If false, a new property is created and its lifecycle is managed (i.\+e. the property is deleted upon destruction of the \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} instance). If true, the instance merely acts as a convenience wrapper around an existing property with no lifecycle management whatsoever.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\hyperlink{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}{Property\+Manager\+::get\+Or\+Make\+Property}, \hyperlink{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}{Property\+Manager\+::get\+Property}, \hyperlink{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}{Property\+Manager\+::make\+Temporary\+Property} 
\end{DoxySeeAlso}
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_aba0aec0d315ac14402c43fcc9543b869}\label{classOpenMesh_1_1PropertyManager_aba0aec0d315ac14402c43fcc9543b869}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator()@{operator()}}
\index{operator()@{operator()}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::reference \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator() (\begin{DoxyParamCaption}\item[{const Handle \&}]{handle = {\ttfamily Handle()} }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Enables convenient access to the encapsulated property.

For a usage example see this class\textquotesingle{} documentation.


\begin{DoxyParams}{Parameters}
{\em handle} & A handle of the appropriate handle type. (I.\+e. {\ttfamily \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}} for {\ttfamily \hyperlink{structOpenMesh_1_1VPropHandleT}{V\+Prop\+HandleT}}, etc.) \\
\hline
\end{DoxyParams}


Definition at line 462 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a78cc33c7c56360a44a675bd41879fa6b}\label{classOpenMesh_1_1PropertyManager_a78cc33c7c56360a44a675bd41879fa6b}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator()@{operator()}}
\index{operator()@{operator()}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator()()}{operator()()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator() (\begin{DoxyParamCaption}\item[{const Handle \&}]{handle = {\ttfamily Handle()} }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Enables convenient access to the encapsulated property.

For a usage example see this class\textquotesingle{} documentation.


\begin{DoxyParams}{Parameters}
{\em handle} & A handle of the appropriate handle type. (I.\+e. {\ttfamily \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}} for {\ttfamily \hyperlink{structOpenMesh_1_1VPropHandleT}{V\+Prop\+HandleT}}, etc.) \\
\hline
\end{DoxyParams}


Definition at line 474 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a0d95172f0cee362353cf61870a09b7e7}\label{classOpenMesh_1_1PropertyManager_a0d95172f0cee362353cf61870a09b7e7}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator$\ast$@{operator$\ast$}}
\index{operator$\ast$@{operator$\ast$}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator$\ast$()}{operator*()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::reference\& \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator$\ast$ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Get the mesh corresponding to the property.

If you use \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} without second template parameter (recommended) you need to specify the actual mesh type when using this function, e.\+g.\+: 
\begin{DoxyCode}
   \{
       TriMesh mesh;
       \textcolor{keyword}{auto} visited = VProp<bool>(mesh);
       TriMesh& mesh\_ref = visited.getMesh<TriMesh>();
   \}
  
  /
\textcolor{keyword}{template} <\textcolor{keyword}{typename} MeshType >
\textcolor{keyword}{const} MeshType& \hyperlink{namespacePluginFunctions_a2a95d5995d6311bbf1527b7ebf9bf9b7}{getMesh}()\textcolor{keyword}{ const }\{ \textcolor{keywordflow}{return} \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const }MeshType&\textcolor{keyword}{>}(mesh\_); \}

\textcolor{keyword}{const} MeshT& \hyperlink{namespacePluginFunctions_a2a95d5995d6311bbf1527b7ebf9bf9b7}{getMesh}()\textcolor{keyword}{ const }\{ \textcolor{keywordflow}{return} \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const }MeshT&\textcolor{keyword}{>}(mesh\_); \}


\hyperlink{classOpenMesh_1_1PropertyManager_ac7f78f29721539053647cc3e00bca638}{OM\_DEPRECATED}(\textcolor{stringliteral}{"retain no longer has any effect. Instead, named properties are always retained,
       while unnamed ones are not."})
void retain(\textcolor{keywordtype}{bool} = true) \{\}

\hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager}(PropertyManager &&rhs)
  :
    mesh\_(rhs.mesh\_),
    prop\_(rhs.prop\_),
    retain\_(rhs.retain\_),
    name\_(rhs.name\_)
\{
  \textcolor{keywordflow}{if} (!rhs.retain\_)
    rhs.prop\_.invalidate(); \textcolor{comment}{// only invalidate unnamed properties}
\}

\hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager}& operator=(PropertyManager&& rhs)
\{
    \textcolor{keywordflow}{if} ((&mesh\_ != &rhs.mesh\_) || (prop\_ != rhs.prop\_))
    \{
      \textcolor{keywordflow}{if} (rhs.retain\_)
      \{
        \textcolor{comment}{// retained properties cannot be invalidated. Copy instead}
        Storage::copy(rhs, *\textcolor{keyword}{this});
      \}
      \textcolor{keywordflow}{else}
      \{
        \textcolor{comment}{// swap the data stored in the properties}
        Storage::swap(rhs, *\textcolor{keyword}{this});
        \textcolor{comment}{// remove the property from rhs}
        rhs.mesh().remove\_property(rhs.prop\_);
        \textcolor{comment}{// invalidate prop\_}
        rhs.prop\_.invalidate();
      \}
    \}
    \textcolor{keywordflow}{return} *\textcolor{keyword}{this};
\}

\textcolor{keyword}{static} \hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager} createIfNotExists(PolyConnectivity &mesh, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *propname) \{
    \textcolor{keywordflow}{return} \hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager}(mesh, propname);
\}

\textcolor{keyword}{template}<\textcolor{keyword}{typename} PROP\_VALUE, \textcolor{keyword}{typename} ITERATOR\_TYPE>
\textcolor{keyword}{static} \hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager} createIfNotExists(PolyConnectivity &mesh, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *propname,
        \textcolor{keyword}{const} ITERATOR\_TYPE &begin, \textcolor{keyword}{const} ITERATOR\_TYPE &end,
        \textcolor{keyword}{const} PROP\_VALUE &init\_value) \{
    \textcolor{keyword}{const} \textcolor{keywordtype}{bool} exists = propertyExists(mesh, propname);
    \hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager} pm(mesh, propname, exists);
    pm.retain();
    \textcolor{keywordflow}{if} (!exists)
        pm.set\_range(begin, end, init\_value);
    \textcolor{keywordflow}{return} std::move(pm);
\}

\textcolor{keyword}{template}<\textcolor{keyword}{typename} PROP\_VALUE, \textcolor{keyword}{typename} ITERATOR\_RANGE>
\textcolor{keyword}{static} \hyperlink{classOpenMesh_1_1PropertyManager_afd9bdea74cd82fba4cac786ce5f4b6af}{PropertyManager} createIfNotExists(PolyConnectivity &mesh, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *propname,
        \textcolor{keyword}{const} ITERATOR\_RANGE &range, \textcolor{keyword}{const} PROP\_VALUE &init\_value) \{
    \textcolor{keywordflow}{return} createIfNotExists(
            mesh, propname, range.begin(), range.end(), init\_value);
\}


\end{DoxyCode}


\begin{DoxyNote}{Note}
This method is only used for mesh properties. 
\end{DoxyNote}


Definition at line 413 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a72b64e0da09d2f6ecf31d91df1f03198}\label{classOpenMesh_1_1PropertyManager_a72b64e0da09d2f6ecf31d91df1f03198}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator$\ast$@{operator$\ast$}}
\index{operator$\ast$@{operator$\ast$}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator$\ast$()}{operator*()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference\& \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator$\ast$ (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Access the value of the encapsulated mesh property.

Example\+: 
\begin{DoxyCode}
PolyMesh m;
\textcolor{keyword}{auto} description = getProperty<void, std::string>(m, \textcolor{stringliteral}{"description"});
std::cout << *description << std::endl;
\end{DoxyCode}


\begin{DoxyNote}{Note}
This method is only used for mesh properties. 
\end{DoxyNote}


Definition at line 429 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a54c8a19dfecfc4dea7f7561a99db9f13}\label{classOpenMesh_1_1PropertyManager_a54c8a19dfecfc4dea7f7561a99db9f13}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator\mbox{[}\mbox{]}@{operator[]}}
\index{operator\mbox{[}\mbox{]}@{operator[]}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::reference \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{Handle}]{handle }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Enables convenient access to the encapsulated property.

For a usage example see this class\textquotesingle{} documentation.


\begin{DoxyParams}{Parameters}
{\em handle} & A handle of the appropriate handle type. (I.\+e. {\ttfamily \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}} for {\ttfamily \hyperlink{structOpenMesh_1_1VPropHandleT}{V\+Prop\+HandleT}}, etc.) \\
\hline
\end{DoxyParams}


Definition at line 440 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a28974d3379f7531e964e32356404afe7}\label{classOpenMesh_1_1PropertyManager_a28974d3379f7531e964e32356404afe7}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator\mbox{[}\mbox{]}@{operator[]}}
\index{operator\mbox{[}\mbox{]}@{operator[]}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{operator[]()}{operator[]()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::operator\mbox{[}$\,$\mbox{]} (\begin{DoxyParamCaption}\item[{const Handle \&}]{handle }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}

Enables convenient access to the encapsulated property.

For a usage example see this class\textquotesingle{} documentation.


\begin{DoxyParams}{Parameters}
{\em handle} & A handle of the appropriate handle type. (I.\+e. {\ttfamily \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}} for {\ttfamily \hyperlink{structOpenMesh_1_1VPropHandleT}{V\+Prop\+HandleT}}, etc.) \\
\hline
\end{DoxyParams}


Definition at line 451 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a1c7b5c7063fb137ba9552afd4a0ec77f}\label{classOpenMesh_1_1PropertyManager_a1c7b5c7063fb137ba9552afd4a0ec77f}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!set\+\_\+range@{set\+\_\+range}}
\index{set\+\_\+range@{set\+\_\+range}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{set\+\_\+range()}{set\_range()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE, typename MeshT = int$>$ \\
template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ \\
void \hyperlink{classOpenMesh_1_1PropertyManager}{Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$\+::set\+\_\+range (\begin{DoxyParamCaption}\item[{Handle\+Type\+Iterator}]{begin,  }\item[{Handle\+Type\+Iterator}]{end,  }\item[{const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&}]{value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}

Conveniently set the property for an entire range of values.

Examples\+: 
\begin{DoxyCode}
MeshT mesh;
PropertyManager<VPropHandleT<double>> distance(
    mesh, \textcolor{stringliteral}{"distance.plugin-example.i8.informatik.rwth-aachen.de"});
distance.set\_range(
    mesh.vertices\_begin(), mesh.vertices\_end(),
    std::numeric\_limits<double>::infinity());
\end{DoxyCode}
 or 
\begin{DoxyCode}
MeshT::VertexHandle vh;
distance.set\_range(
    mesh.vv\_begin(vh), mesh.vv\_end(vh),
    std::numeric\_limits<double>::infinity());
\end{DoxyCode}



\begin{DoxyParams}{Parameters}
{\em begin} & Start iterator. Needs to dereference to Handle\+Type. \\
\hline
{\em end} & End iterator. (Exclusive.) \\
\hline
{\em value} & The value the range will be set to. \\
\hline
\end{DoxyParams}


Definition at line 504 of file Property\+Manager.\+hh.



\subsection{Friends And Related Function Documentation}
\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}\label{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!get\+Or\+Make\+Property@{get\+Or\+Make\+Property}}
\index{get\+Or\+Make\+Property@{get\+Or\+Make\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{get\+Or\+Make\+Property()}{getOrMakeProperty()}}
{\footnotesize\ttfamily template$<$typename ElementT , typename T $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ get\+Or\+Make\+Property (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Obtains a handle to a named property if it exists or creates a new one otherwise.

Used for creating or accessing permanent properties.

Example\+: 
\begin{DoxyCode}
PolyMesh m;
\{
    \textcolor{keyword}{auto} is\_quad = getOrMakeProperty<FaceHandle, bool>(m, \textcolor{stringliteral}{"is\_quad"});
    \textcolor{keywordflow}{for} (\textcolor{keyword}{auto}& fh : m.faces()) \{
        is\_quad[fh] = (m.valence(fh) == 4);
    \}
    \textcolor{comment}{// The property remains on the mesh after the end of the scope.}
\}
\{
    \textcolor{comment}{// Retrieve the property from the previous scope.}
    \textcolor{keyword}{auto} is\_quad = getOrMakeProperty<FaceHandle, bool>(m, \textcolor{stringliteral}{"is\_quad"});
    \textcolor{comment}{// Use is\_quad here.}
\}
\end{DoxyCode}



\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which the property is created \\
\hline
{\em propname} & The name of the created property \\
\hline
\end{DoxyParams}

\begin{DoxyTemplParams}{Template Parameters}
{\em ElementT} & Element type of the created property, e.\+g. \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}, \hyperlink{structOpenMesh_1_1HalfedgeHandle}{Halfedge\+Handle}, etc. \\
\hline
{\em T} & Value type of the created property, e.\+g., {\ttfamily double}, {\ttfamily int}, etc. \\
\hline
\end{DoxyTemplParams}
\begin{DoxyReturn}{Returns}
A \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} wrapping the property 
\end{DoxyReturn}


Definition at line 791 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a624c702d7caca52693790995d4e7e36a}\label{classOpenMesh_1_1PropertyManager_a624c702d7caca52693790995d4e7e36a}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!get\+Points\+Property@{get\+Points\+Property}}
\index{get\+Points\+Property@{get\+Points\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{get\+Points\+Property()}{getPointsProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename MeshT $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ \hyperlink{structOpenMesh_1_1VPropHandleT}{Open\+Mesh\+::\+V\+Prop\+HandleT}$<$ typename Mesh\+T\+::\+Point $>$ $>$ get\+Points\+Property (\begin{DoxyParamCaption}\item[{MeshT \&}]{mesh }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Returns a convenience wrapper around the points property of a mesh. 

Definition at line 895 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a2c29dc453a6bbe9a580f0dd2b1c5215c}\label{classOpenMesh_1_1PropertyManager_a2c29dc453a6bbe9a580f0dd2b1c5215c}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!get\+Points\+Property@{get\+Points\+Property}}
\index{get\+Points\+Property@{get\+Points\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{get\+Points\+Property()}{getPointsProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename MeshT $>$ \\
\hyperlink{classOpenMesh_1_1ConstPropertyViewer}{Const\+Property\+Viewer}$<$ \hyperlink{structOpenMesh_1_1VPropHandleT}{Open\+Mesh\+::\+V\+Prop\+HandleT}$<$ typename Mesh\+T\+::\+Point $>$ $>$ get\+Points\+Property (\begin{DoxyParamCaption}\item[{const MeshT \&}]{mesh }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Returns a convenience wrapper around the points property of a mesh that only allows const access. 

Definition at line 904 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}\label{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!get\+Property@{get\+Property}}
\index{get\+Property@{get\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{get\+Property()}{getProperty()}}
{\footnotesize\ttfamily template$<$typename ElementT , typename T $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ get\+Property (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Obtains a handle to a named property.

Example\+: 
\begin{DoxyCode}
PolyMesh m;
\{
    \textcolor{keywordflow}{try} \{
        \textcolor{keyword}{auto} is\_quad = getProperty<FaceHandle, bool>(m, \textcolor{stringliteral}{"is\_quad"});
        \textcolor{comment}{// Use is\_quad here.}
    \}
    \textcolor{keywordflow}{catch} (\textcolor{keyword}{const} std::runtime\_error& e) \{
        \textcolor{comment}{// There is no is\_quad face property on the mesh.}
    \}
\}
\end{DoxyCode}


\begin{DoxyPrecond}{Precondition}
Property with the name {\ttfamily propname} of matching type exists. 
\end{DoxyPrecond}

\begin{DoxyExceptions}{Exceptions}
{\em std\+::runtime\+\_\+error} & if no property with the name {\ttfamily propname} of matching type exists. \\
\hline
\end{DoxyExceptions}

\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which the property is created \\
\hline
{\em propname} & The name of the created property \\
\hline
\end{DoxyParams}

\begin{DoxyTemplParams}{Template Parameters}
{\em ElementT} & Element type of the created property, e.\+g. \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}, \hyperlink{structOpenMesh_1_1HalfedgeHandle}{Halfedge\+Handle}, etc. \\
\hline
{\em T} & Value type of the created property, e.\+g., {\ttfamily double}, {\ttfamily int}, etc. \\
\hline
\end{DoxyTemplParams}
\begin{DoxyReturn}{Returns}
A \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} wrapping the property 
\end{DoxyReturn}


Definition at line 750 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}\label{classOpenMesh_1_1PropertyManager_a552b239c7cfa69ce7163417787cf37bf}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!has\+Property@{has\+Property}}
\index{has\+Property@{has\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{has\+Property()}{hasProperty()}}
{\footnotesize\ttfamily template$<$typename ElementT , typename T $>$ \\
bool has\+Property (\begin{DoxyParamCaption}\item[{const \hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Tests whether a property with the given element type, value type, and name is present on the given mesh.


\begin{DoxyItemize}
\item Example\+: 
\begin{DoxyCode}
PolyMesh m;
\textcolor{keywordflow}{if} (hasProperty<FaceHandle, bool>(m, \textcolor{stringliteral}{"is\_quad"})) \{
    \textcolor{comment}{// We now know the property exists: getProperty won't throw.}
    \textcolor{keyword}{auto} is\_quad = getProperty<FaceHandle, bool>(m, \textcolor{stringliteral}{"is\_quad"});
    \textcolor{comment}{// Use is\_quad here.}
\}
\end{DoxyCode}

\end{DoxyItemize}


\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh in question \\
\hline
{\em propname} & The property name of the expected property \\
\hline
\end{DoxyParams}

\begin{DoxyTemplParams}{Template Parameters}
{\em ElementT} & Element type of the expected property, e.\+g. \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}, \hyperlink{structOpenMesh_1_1HalfedgeHandle}{Halfedge\+Handle}, etc. \\
\hline
{\em T} & Value type of the expected property, e.\+g., {\ttfamily double}, {\ttfamily int}, etc. \\
\hline
{\em MeshT} & Type of the mesh. Can often be inferred from {\ttfamily mesh} \\
\hline
\end{DoxyTemplParams}


Definition at line 716 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a6a0a645ca6dc88a5d315e9a151c5d61b}\label{classOpenMesh_1_1PropertyManager_a6a0a645ca6dc88a5d315e9a151c5d61b}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Property\+Manager\+From\+Existing@{make\+Property\+Manager\+From\+Existing}}
\index{make\+Property\+Manager\+From\+Existing@{make\+Property\+Manager\+From\+Existing}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Property\+Manager\+From\+Existing()}{makePropertyManagerFromExisting()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename MeshT  = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$ make\+Property\+Manager\+From\+Existing (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000011}{Deprecated}]Use \hyperlink{classOpenMesh_1_1PropertyManager_a8d0e0ad75218837f7ab7bff87fd6f24d}{get\+Property()} instead.\end{DoxyRefDesc}


Creates a non-\/owning wrapper for an existing mesh property (no lifecycle management).

Intended for convenient access.

\begin{DoxyPrecond}{Precondition}
Property with the name {\ttfamily propname} of matching type exists. 
\end{DoxyPrecond}

\begin{DoxyExceptions}{Exceptions}
{\em std\+::runtime\+\_\+error} & if no property with the name {\ttfamily propname} of matching type exists. \\
\hline
\end{DoxyExceptions}


Definition at line 825 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_acbe75e98e92fe82e86ee8105a68108d5}\label{classOpenMesh_1_1PropertyManager_acbe75e98e92fe82e86ee8105a68108d5}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}}
\index{make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Property\+Manager\+From\+Existing\+Or\+New()}{makePropertyManagerFromExistingOrNew()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename MeshT  = int$>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE, MeshT $>$ make\+Property\+Manager\+From\+Existing\+Or\+New (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000012}{Deprecated}]Use \hyperlink{classOpenMesh_1_1PropertyManager_add87d369da580fe875ce77472d80f336}{get\+Or\+Make\+Property()} instead.\end{DoxyRefDesc}


Creates a non-\/owning wrapper for a mesh property (no lifecycle management). If the given property does not exist, it is created.

Intended for creating or accessing persistent properties. 

Definition at line 840 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a30e18639a7573eaa6295e26c33c48109}\label{classOpenMesh_1_1PropertyManager_a30e18639a7573eaa6295e26c33c48109}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}}
\index{make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Property\+Manager\+From\+Existing\+Or\+New()}{makePropertyManagerFromExistingOrNew()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ make\+Property\+Manager\+From\+Existing\+Or\+New (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname,  }\item[{const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE \&}]{begin,  }\item[{const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+T\+Y\+PE \&}]{end,  }\item[{const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&}]{init\+\_\+value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Like the two parameter version of \hyperlink{classOpenMesh_1_1PropertyManager_acbe75e98e92fe82e86ee8105a68108d5}{make\+Property\+Manager\+From\+Existing\+Or\+New()} except it initializes the property with the specified value over the specified range if it needs to be created. If the property already exists, this function has the exact same effect as the two parameter version.

Creates a non-\/owning wrapper for a mesh property (no lifecycle management). If the given property does not exist, it is created.

Intended for creating or accessing persistent properties. 

Definition at line 859 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a18ca68cb05137e40cf43a2b0096c92db}\label{classOpenMesh_1_1PropertyManager_a18ca68cb05137e40cf43a2b0096c92db}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}}
\index{make\+Property\+Manager\+From\+Existing\+Or\+New@{make\+Property\+Manager\+From\+Existing\+Or\+New}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Property\+Manager\+From\+Existing\+Or\+New()}{makePropertyManagerFromExistingOrNew()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE , typename I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+R\+A\+N\+GE , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+UE $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ make\+Property\+Manager\+From\+Existing\+Or\+New (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname,  }\item[{const I\+T\+E\+R\+A\+T\+O\+R\+\_\+\+R\+A\+N\+GE \&}]{range,  }\item[{const P\+R\+O\+P\+\_\+\+V\+A\+L\+UE \&}]{init\+\_\+value }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Like the two parameter version of \hyperlink{classOpenMesh_1_1PropertyManager_acbe75e98e92fe82e86ee8105a68108d5}{make\+Property\+Manager\+From\+Existing\+Or\+New()} except it initializes the property with the specified value over the specified range if it needs to be created. If the property already exists, this function has the exact same effect as the two parameter version.

Creates a non-\/owning wrapper for a mesh property (no lifecycle management). If the given property does not exist, it is created.

Intended for creating or accessing persistent properties. 

Definition at line 881 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a124b1e945be6f5188a3bfab685018008}\label{classOpenMesh_1_1PropertyManager_a124b1e945be6f5188a3bfab685018008}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Property\+Manager\+From\+New@{make\+Property\+Manager\+From\+New}}
\index{make\+Property\+Manager\+From\+New@{make\+Property\+Manager\+From\+New}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Property\+Manager\+From\+New()}{makePropertyManagerFromNew()}}
{\footnotesize\ttfamily template$<$typename P\+R\+O\+P\+T\+Y\+PE $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+PE $>$ make\+Property\+Manager\+From\+New (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000010}{Deprecated}]Use \hyperlink{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}{make\+Temporary\+Property()} instead.\end{DoxyRefDesc}


Creates a new property whose lifecycle is managed by the returned \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}.

Intended for temporary properties. Shadows any existing properties of matching name and type. 

Definition at line 806 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}\label{classOpenMesh_1_1PropertyManager_a7c72dc50f42e6e4ee36d29cd29ceae85}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Temporary\+Property@{make\+Temporary\+Property}}
\index{make\+Temporary\+Property@{make\+Temporary\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Temporary\+Property()}{makeTemporaryProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
{\footnotesize\ttfamily template$<$typename ElementT , typename T $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ make\+Temporary\+Property (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh,  }\item[{const char $\ast$}]{propname }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

\begin{DoxyRefDesc}{Deprecated}
\item[\hyperlink{deprecated__deprecated000009}{Deprecated}]Temporary properties should not have a name.\end{DoxyRefDesc}


Creates a new property whose lifetime is limited to the current scope.

Used for temporary properties. Shadows any existing properties of matching name and type.

Example\+: 
\begin{DoxyCode}
PolyMesh m;
\{
    \textcolor{keyword}{auto} is\_quad = makeTemporaryProperty<FaceHandle, bool>(m);
    \textcolor{keywordflow}{for} (\textcolor{keyword}{auto}& fh : m.faces()) \{
        is\_quad[fh] = (m.valence(fh) == 4);
    \}
    \textcolor{comment}{// The property is automatically removed from the mesh at the end of the scope.}
\}
\end{DoxyCode}



\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which the property is created \\
\hline
{\em propname} & (optional) The name of the created property \\
\hline
\end{DoxyParams}

\begin{DoxyTemplParams}{Template Parameters}
{\em ElementT} & Element type of the created property, e.\+g. \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}, \hyperlink{structOpenMesh_1_1HalfedgeHandle}{Halfedge\+Handle}, etc. \\
\hline
{\em T} & Value type of the created property, e.\+g., {\ttfamily double}, {\ttfamily int}, etc. \\
\hline
\end{DoxyTemplParams}
\begin{DoxyReturn}{Returns}
A \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} handling the lifecycle of the property 
\end{DoxyReturn}


Definition at line 658 of file Property\+Manager.\+hh.

\mbox{\Hypertarget{classOpenMesh_1_1PropertyManager_a510b1f70ae8b69d9c4639b74c38eebba}\label{classOpenMesh_1_1PropertyManager_a510b1f70ae8b69d9c4639b74c38eebba}} 
\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!make\+Temporary\+Property@{make\+Temporary\+Property}}
\index{make\+Temporary\+Property@{make\+Temporary\+Property}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection{\texorpdfstring{make\+Temporary\+Property()}{makeTemporaryProperty()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
{\footnotesize\ttfamily template$<$typename ElementT , typename T $>$ \\
\hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager}$<$ typename \hyperlink{structOpenMesh_1_1HandleToPropHandle}{Handle\+To\+Prop\+Handle}$<$ ElementT, T $>$\+::type $>$ make\+Temporary\+Property (\begin{DoxyParamCaption}\item[{\hyperlink{classOpenMesh_1_1PolyConnectivity}{Poly\+Connectivity} \&}]{mesh }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [related]}}

Creates a new property whose lifetime is limited to the current scope.

Used for temporary properties. Shadows any existing properties of matching name and type.

Example\+: 
\begin{DoxyCode}
PolyMesh m;
\{
    \textcolor{keyword}{auto} is\_quad = makeTemporaryProperty<FaceHandle, bool>(m);
    \textcolor{keywordflow}{for} (\textcolor{keyword}{auto}& fh : m.faces()) \{
        is\_quad[fh] = (m.valence(fh) == 4);
    \}
    \textcolor{comment}{// The property is automatically removed from the mesh at the end of the scope.}
\}
\end{DoxyCode}



\begin{DoxyParams}{Parameters}
{\em mesh} & The mesh on which the property is created \\
\hline
\end{DoxyParams}

\begin{DoxyTemplParams}{Template Parameters}
{\em ElementT} & Element type of the created property, e.\+g. \hyperlink{structOpenMesh_1_1VertexHandle}{Vertex\+Handle}, \hyperlink{structOpenMesh_1_1HalfedgeHandle}{Halfedge\+Handle}, etc. \\
\hline
{\em T} & Value type of the created property, e.\+g., {\ttfamily double}, {\ttfamily int}, etc. \\
\hline
\end{DoxyTemplParams}
\begin{DoxyReturn}{Returns}
A \hyperlink{classOpenMesh_1_1PropertyManager}{Property\+Manager} handling the lifecycle of the property 
\end{DoxyReturn}


Definition at line 688 of file Property\+Manager.\+hh.



The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
\item 
Open\+Flipper/libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Core/\+Utils/Property\+Manager.\+hh\end{DoxyCompactItemize}
