\hypertarget{a01035}{\section{Open\+Mesh\+:\+:Property\+Manager$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ Class Template Reference}
\label{a01035}\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 $<$libs\+\_\+required/\+Open\+Mesh/src/\+Open\+Mesh/\+Core/\+Utils/\+Property\+Manager.\+hh$>$}

\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
class \hyperlink{a01054}{Proxy}
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{a01035_ab669f9c2efb6f9ad356c7c653a8de40c}{Property\+Manager} (Mesh\+T \&mesh, const char $\ast$propname, bool existing=false)
\item 
\hypertarget{a01035_a1ac1f21a36640158de02c8dffbf81ff0}{void {\bfseries swap} (\hyperlink{a01035}{Property\+Manager} \&rhs)}\label{a01035_a1ac1f21a36640158de02c8dffbf81ff0}

\item 
\hypertarget{a01035_aadff95006916f9722cf242e1f8b7c44f}{bool {\bfseries is\+Valid} () const }\label{a01035_aadff95006916f9722cf242e1f8b7c44f}

\item 
\hypertarget{a01035_a68249a83130af9d9280337122f1a9c38}{{\bfseries operator bool} () const }\label{a01035_a68249a83130af9d9280337122f1a9c38}

\item 
\hypertarget{a01035_a1d3001846b8eda580d8c49ec9584842c}{const P\+R\+O\+P\+T\+Y\+P\+E \& {\bfseries get\+Raw\+Property} () const }\label{a01035_a1d3001846b8eda580d8c49ec9584842c}

\item 
\hypertarget{a01035_afde2956bb020674329a6e3a0bb280850}{const std\+::string \& {\bfseries get\+Name} () const }\label{a01035_afde2956bb020674329a6e3a0bb280850}

\item 
\hypertarget{a01035_a93300708a513021609ff03ffdcc12e56}{Mesh\+T \& {\bfseries get\+Mesh} () const }\label{a01035_a93300708a513021609ff03ffdcc12e56}

\item 
\hypertarget{a01035_a9915ccbeea2a78ce68f7ee9432fe10b6}{{\bfseries operator Proxy} ()}\label{a01035_a9915ccbeea2a78ce68f7ee9432fe10b6}

\item 
\hypertarget{a01035_ac6ddf364a994ad862070dfdb8cbdf620}{\hyperlink{a01054}{Proxy} {\bfseries move} ()}\label{a01035_ac6ddf364a994ad862070dfdb8cbdf620}

\item 
\hypertarget{a01035_aefc965e7287262872137602a092da5de}{{\bfseries Property\+Manager} (\hyperlink{a01054}{Proxy} p)}\label{a01035_aefc965e7287262872137602a092da5de}

\item 
\hypertarget{a01035_a01ba8c3df63d76589b170e34ae72972b}{\hyperlink{a01035}{Property\+Manager} \& {\bfseries operator=} (\hyperlink{a01054}{Proxy} p)}\label{a01035_a01ba8c3df63d76589b170e34ae72972b}

\item 
\hypertarget{a01035_a17cb0e6fd5f3a334140fde962ee0ca6a}{\hyperlink{a01054}{Proxy} {\bfseries duplicate} (const char $\ast$clone\+\_\+name)}\label{a01035_a17cb0e6fd5f3a334140fde962ee0ca6a}

\item 
void \hyperlink{a01035_aa388e739951640a7c432b49e5232cb84}{retain} (bool do\+Retain=true)
\begin{DoxyCompactList}\small\item\em Disable lifecycle management for this property. \end{DoxyCompactList}\item 
P\+R\+O\+P\+T\+Y\+P\+E \& \hyperlink{a01035_a0175f913ec495b7b9699a4a4d0993814}{operator$\ast$} ()
\item 
const P\+R\+O\+P\+T\+Y\+P\+E \& \hyperlink{a01035_a4be682eda73e7d95dea85743d0dcb892}{operator$\ast$} () const 
\item 
{\footnotesize template$<$typename Handle\+Type $>$ }\\P\+R\+O\+P\+T\+Y\+P\+E\+::reference \hyperlink{a01035_a982d39e7eeac8383b3c899b029698496}{operator\mbox{[}$\,$\mbox{]}} (const Handle\+Type \&handle)
\item 
{\footnotesize template$<$typename Handle\+Type $>$ }\\P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference \hyperlink{a01035_a2287c607f3766aa910f08730e52f1c40}{operator\mbox{[}$\,$\mbox{]}} (const Handle\+Type \&handle) const 
\item 
{\footnotesize template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+U\+E $>$ }\\void \hyperlink{a01035_a1c7b5c7063fb137ba9552afd4a0ec77f}{set\+\_\+range} (Handle\+Type\+Iterator begin, Handle\+Type\+Iterator end, const P\+R\+O\+P\+\_\+\+V\+A\+L\+U\+E \&value)
\item 
{\footnotesize template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Mesh\+T\+\_\+2 , typename Handle\+Type\+Iterator\+\_\+2 $>$ }\\void \hyperlink{a01035_a140f50f3a9a09f72244f94782b663559}{copy\+\_\+to} (Handle\+Type\+Iterator begin, Handle\+Type\+Iterator end, \hyperlink{a01035}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2, Mesh\+T\+\_\+2 $>$ \&dst\+\_\+propmanager, Handle\+Type\+Iterator\+\_\+2 dst\+\_\+begin, Handle\+Type\+Iterator\+\_\+2 dst\+\_\+end) const 
\item 
\hypertarget{a01035_a5002360ab489e39915209ab5036e32e8}{{\footnotesize template$<$typename Range\+Type , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Mesh\+T\+\_\+2 , typename Range\+Type\+\_\+2 $>$ }\\void {\bfseries copy\+\_\+to} (const Range\+Type \&range, \hyperlink{a01035}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2, Mesh\+T\+\_\+2 $>$ \&dst\+\_\+propmanager, const Range\+Type\+\_\+2 \&dst\+\_\+range) const }\label{a01035_a5002360ab489e39915209ab5036e32e8}

\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01035_aab5979a603a7f4e2603c5342dda2de30}{static bool {\bfseries property\+Exists} (Mesh\+T \&mesh, const char $\ast$propname)}\label{a01035_aab5979a603a7f4e2603c5342dda2de30}

\item 
static \hyperlink{a01054}{Proxy} \hyperlink{a01035_adcef81e060c6dc8a10a7ed1a7fb01869}{create\+If\+Not\+Exists} (Mesh\+T \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename Range\+Type , typename Mesh\+T\+\_\+2 , typename Range\+Type\+\_\+2 $>$ }\\static void \hyperlink{a01035_aadbc2e85d8471cf8915a720aac6e5a7b}{copy} (const char $\ast$prop\+\_\+name, Mesh\+T \&src\+\_\+mesh, const Range\+Type \&src\+\_\+range, Mesh\+T\+\_\+2 \&dst\+\_\+mesh, const Range\+Type\+\_\+2 \&dst\+\_\+range)
\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\hyperlink{a01035_ada0ea7bb5b0b22d529b836dd4198a309}{Property\+Manager} (const \hyperlink{a01035}{Property\+Manager} \&)
\item 
\hyperlink{a01035}{Property\+Manager} \& \hyperlink{a01035_aa1492f8a40f29cfb1892cf4f783aa925}{operator=} (const \hyperlink{a01035}{Property\+Manager} \&)
\item 
\hypertarget{a01035_a60b868c3e7616ac8ffa2719b041c8990}{void {\bfseries delete\+Property} ()}\label{a01035_a60b868c3e7616ac8ffa2719b041c8990}

\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\hypertarget{a01035_ac91d69a7b5510d1a608e5e6047feb428}{Mesh\+T $\ast$ {\bfseries mesh\+\_\+}}\label{a01035_ac91d69a7b5510d1a608e5e6047feb428}

\item 
\hypertarget{a01035_a57550261a734656d1598028c4b514d81}{P\+R\+O\+P\+T\+Y\+P\+E {\bfseries prop\+\_\+}}\label{a01035_a57550261a734656d1598028c4b514d81}

\item 
\hypertarget{a01035_a19ccf617fbf1f1d102a93baeb1e54732}{bool {\bfseries retain\+\_\+}}\label{a01035_a19ccf617fbf1f1d102a93baeb1e54732}

\item 
\hypertarget{a01035_aeeea39105b9bc6ee3fa218cd2df00749}{std\+::string {\bfseries name\+\_\+}}\label{a01035_aeeea39105b9bc6ee3fa218cd2df00749}

\end{DoxyCompactItemize}
\subsection*{Related Functions}
(Note that these are not member functions.) \begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ }\\\hyperlink{a01035}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ \hyperlink{a01035_a6a48e0a7e2115953158298617626bd87}{make\+Property\+Manager\+From\+New} (Mesh\+T \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ }\\\hyperlink{a01035}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ \hyperlink{a01035_a867447f5f0bef7f7e1566c0f1dfa4e51}{make\+Property\+Manager\+From\+Existing} (Mesh\+T \&mesh, const char $\ast$propname)
\item 
{\footnotesize template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ }\\\hyperlink{a01035}{Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ \hyperlink{a01035_ade542fc7505f5988782515b8d9873408}{make\+Property\+Manager\+From\+Existing\+Or\+New} (Mesh\+T \&mesh, const char $\ast$propname)
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$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's value.

For C++11, it is recommended to use the factory functions make\+Property\+Manager\+From\+New, make\+Property\+Manager\+From\+Existing, make\+Property\+Manager\+From\+Existing\+Or\+New to construct a \hyperlink{a01035}{Property\+Manager}, e.\+g.


\begin{DoxyCode}
TriMesh mesh;
\textcolor{keyword}{auto} visited = makePropertyManagerFromNew<VPropHandleT<bool>>(mesh, \textcolor{stringliteral}{"
      visited.plugin-example.i8.informatik.rwth-aachen.de"});

\textcolor{keywordflow}{for} (\textcolor{keyword}{auto} vh : mesh.vertices()) \{
    \textcolor{keywordflow}{if} (!visited[vh]) \{
        visitComponent(mesh, vh, visited);
    \}
\}
\end{DoxyCode}


For C++98, it is usually more convenient to use the constructor explicitly, i.\+e.


\begin{DoxyCode}
TriMesh mesh;
PropertyManager<VPropHandleT<bool>, TriMesh> visited(mesh, \textcolor{stringliteral}{"
      visited.plugin-example.i8.informatik.rwth-aachen.de"});

\textcolor{keywordflow}{for} (TriMesh::VertexIter vh\_it = mesh.begin(); ... ; ...) \{
    \textcolor{keywordflow}{if} (!visited[*vh\_it]) \{
        visitComponent(mesh, *vh\_it, visited);
    \}
\}
\end{DoxyCode}
 

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



\subsection{Constructor \& Destructor Documentation}
\hypertarget{a01035_ada0ea7bb5b0b22d529b836dd4198a309}{\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[{Property\+Manager}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::{\bf Property\+Manager} (
\begin{DoxyParamCaption}
\item[{const {\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ \&}]{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01035_ada0ea7bb5b0b22d529b836dd4198a309}
Noncopyable because there aren't no straightforward copy semantics. \hypertarget{a01035_ab669f9c2efb6f9ad356c7c653a8de40c}{\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[{Property\+Manager}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::{\bf Property\+Manager} (
\begin{DoxyParamCaption}
\item[{Mesh\+T \&}]{mesh, }
\item[{const char $\ast$}]{propname, }
\item[{bool}]{existing = {\ttfamily false}}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_ab669f9c2efb6f9ad356c7c653a8de40c}
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{a01035}{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{a01035_adcef81e060c6dc8a10a7ed1a7fb01869}{Property\+Manager\+::create\+If\+Not\+Exists}, \hyperlink{a01035_a6a48e0a7e2115953158298617626bd87}{make\+Property\+Manager\+From\+New}, \hyperlink{a01035_a867447f5f0bef7f7e1566c0f1dfa4e51}{make\+Property\+Manager\+From\+Existing}, \hyperlink{a01035_ade542fc7505f5988782515b8d9873408}{make\+Property\+Manager\+From\+Existing\+Or\+New} 
\end{DoxySeeAlso}


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



\subsection{Member Function Documentation}
\hypertarget{a01035_aadbc2e85d8471cf8915a720aac6e5a7b}{\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!copy@{copy}}
\index{copy@{copy}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection[{copy}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ template$<$typename Range\+Type , typename Mesh\+T\+\_\+2 , typename Range\+Type\+\_\+2 $>$ static void {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::copy (
\begin{DoxyParamCaption}
\item[{const char $\ast$}]{prop\+\_\+name, }
\item[{Mesh\+T \&}]{src\+\_\+mesh, }
\item[{const Range\+Type \&}]{src\+\_\+range, }
\item[{Mesh\+T\+\_\+2 \&}]{dst\+\_\+mesh, }
\item[{const Range\+Type\+\_\+2 \&}]{dst\+\_\+range}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{a01035_aadbc2e85d8471cf8915a720aac6e5a7b}
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'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 405 of file Property\+Manager.\+hh.

\hypertarget{a01035_a140f50f3a9a09f72244f94782b663559}{\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[{copy\+\_\+to}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2 , typename Mesh\+T\+\_\+2 , typename Handle\+Type\+Iterator\+\_\+2 $>$ void {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::copy\+\_\+to (
\begin{DoxyParamCaption}
\item[{Handle\+Type\+Iterator}]{begin, }
\item[{Handle\+Type\+Iterator}]{end, }
\item[{{\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E\+\_\+2, Mesh\+T\+\_\+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]}}}\label{a01035_a140f50f3a9a09f72244f94782b663559}
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 372 of file Property\+Manager.\+hh.

\hypertarget{a01035_adcef81e060c6dc8a10a7ed1a7fb01869}{\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!create\+If\+Not\+Exists@{create\+If\+Not\+Exists}}
\index{create\+If\+Not\+Exists@{create\+If\+Not\+Exists}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection[{create\+If\+Not\+Exists}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ static {\bf Proxy} {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::create\+If\+Not\+Exists (
\begin{DoxyParamCaption}
\item[{Mesh\+T \&}]{mesh, }
\item[{const char $\ast$}]{propname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}}\label{a01035_adcef81e060c6dc8a10a7ed1a7fb01869}
Create a property manager for the supplied property and mesh. If the property doesn't exist, it is created. In any case, lifecycle management is disabled.

\begin{DoxySeeAlso}{See also}
\hyperlink{a01035_ade542fc7505f5988782515b8d9873408}{make\+Property\+Manager\+From\+Existing\+Or\+New} 
\end{DoxySeeAlso}


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

\hypertarget{a01035_a0175f913ec495b7b9699a4a4d0993814}{\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[{operator$\ast$}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ P\+R\+O\+P\+T\+Y\+P\+E\& {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::operator$\ast$ (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_a0175f913ec495b7b9699a4a4d0993814}
Access the encapsulated property. 

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

\hypertarget{a01035_a4be682eda73e7d95dea85743d0dcb892}{\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[{operator$\ast$}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ const P\+R\+O\+P\+T\+Y\+P\+E\& {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::operator$\ast$ (
\begin{DoxyParamCaption}
{}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_a4be682eda73e7d95dea85743d0dcb892}
Access the encapsulated property. 

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

\hypertarget{a01035_aa1492f8a40f29cfb1892cf4f783aa925}{\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!operator=@{operator=}}
\index{operator=@{operator=}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection[{operator=}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ {\bf Property\+Manager}\& {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::operator= (
\begin{DoxyParamCaption}
\item[{const {\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ \&}]{}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [private]}}}\label{a01035_aa1492f8a40f29cfb1892cf4f783aa925}
Noncopyable because there aren't no straightforward copy semantics. \hypertarget{a01035_a982d39e7eeac8383b3c899b029698496}{\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[{operator[]}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ template$<$typename Handle\+Type $>$ P\+R\+O\+P\+T\+Y\+P\+E\+::reference {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::operator\mbox{[}$\,$\mbox{]} (
\begin{DoxyParamCaption}
\item[{const Handle\+Type \&}]{handle}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_a982d39e7eeac8383b3c899b029698496}
Enables convenient access to the encapsulated property.

For a usage example see this class' documentation.


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


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

\hypertarget{a01035_a2287c607f3766aa910f08730e52f1c40}{\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[{operator[]}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ template$<$typename Handle\+Type $>$ P\+R\+O\+P\+T\+Y\+P\+E\+::const\+\_\+reference {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::operator\mbox{[}$\,$\mbox{]} (
\begin{DoxyParamCaption}
\item[{const Handle\+Type \&}]{handle}
\end{DoxyParamCaption}
) const\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_a2287c607f3766aa910f08730e52f1c40}
Enables convenient access to the encapsulated property.

For a usage example see this class' documentation.


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


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

\hypertarget{a01035_aa388e739951640a7c432b49e5232cb84}{\index{Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}!retain@{retain}}
\index{retain@{retain}!Open\+Mesh\+::\+Property\+Manager@{Open\+Mesh\+::\+Property\+Manager}}
\subsubsection[{retain}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ void {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::retain (
\begin{DoxyParamCaption}
\item[{bool}]{do\+Retain = {\ttfamily true}}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_aa388e739951640a7c432b49e5232cb84}


Disable lifecycle management for this property. 

If this method is called, the encapsulated property will not be deleted upon destruction of the \hyperlink{a01035}{Property\+Manager} instance. 

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

\hypertarget{a01035_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[{set\+\_\+range}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E, typename Mesh\+T$>$ template$<$typename Handle\+Type\+Iterator , typename P\+R\+O\+P\+\_\+\+V\+A\+L\+U\+E $>$ void {\bf Open\+Mesh\+::\+Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$\+::set\+\_\+range (
\begin{DoxyParamCaption}
\item[{Handle\+Type\+Iterator}]{begin, }
\item[{Handle\+Type\+Iterator}]{end, }
\item[{const P\+R\+O\+P\+\_\+\+V\+A\+L\+U\+E \&}]{value}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}}}\label{a01035_a1c7b5c7063fb137ba9552afd4a0ec77f}
Conveniently set the property for an entire range of values.

Examples\+: 
\begin{DoxyCode}
MeshT mesh;
PropertyManager<VPropHandleT<double>, MeshT> 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 350 of file Property\+Manager.\+hh.



\subsection{Friends And Related Function Documentation}
\hypertarget{a01035_a867447f5f0bef7f7e1566c0f1dfa4e51}{\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[{make\+Property\+Manager\+From\+Existing}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ {\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ make\+Property\+Manager\+From\+Existing (
\begin{DoxyParamCaption}
\item[{Mesh\+T \&}]{mesh, }
\item[{const char $\ast$}]{propname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [related]}}}\label{a01035_a867447f5f0bef7f7e1566c0f1dfa4e51}
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 454 of file Property\+Manager.\+hh.

\hypertarget{a01035_ade542fc7505f5988782515b8d9873408}{\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[{make\+Property\+Manager\+From\+Existing\+Or\+New}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ {\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ make\+Property\+Manager\+From\+Existing\+Or\+New (
\begin{DoxyParamCaption}
\item[{Mesh\+T \&}]{mesh, }
\item[{const char $\ast$}]{propname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [related]}}}\label{a01035_ade542fc7505f5988782515b8d9873408}
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 465 of file Property\+Manager.\+hh.

\hypertarget{a01035_a6a48e0a7e2115953158298617626bd87}{\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[{make\+Property\+Manager\+From\+New}]{\setlength{\rightskip}{0pt plus 5cm}template$<$typename P\+R\+O\+P\+T\+Y\+P\+E , typename Mesh\+T $>$ {\bf Property\+Manager}$<$ P\+R\+O\+P\+T\+Y\+P\+E, Mesh\+T $>$ make\+Property\+Manager\+From\+New (
\begin{DoxyParamCaption}
\item[{Mesh\+T \&}]{mesh, }
\item[{const char $\ast$}]{propname}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [related]}}}\label{a01035_a6a48e0a7e2115953158298617626bd87}
Creates a new property whose lifecycle is managed by the returned \hyperlink{a01035}{Property\+Manager}.

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

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



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