\hypertarget{classOpenVolumeMesh_1_1NormalAttrib}{}\section{Open\+Volume\+Mesh\+:\+:Normal\+Attrib$<$ Geom\+KernelT $>$ Class Template Reference}
\label{classOpenVolumeMesh_1_1NormalAttrib}\index{Open\+Volume\+Mesh\+::\+Normal\+Attrib$<$ Geom\+Kernel\+T $>$@{Open\+Volume\+Mesh\+::\+Normal\+Attrib$<$ Geom\+Kernel\+T $>$}}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a1da418d04bb8ce30ba7c170afab43eb6}\label{classOpenVolumeMesh_1_1NormalAttrib_a1da418d04bb8ce30ba7c170afab43eb6}} 
{\bfseries Normal\+Attrib} (Geom\+KernelT \&\+\_\+kernel)
\item 
void \hyperlink{classOpenVolumeMesh_1_1NormalAttrib_aeb82cd60c514a8f462e36c600cc0919a}{update\+\_\+vertex\+\_\+normals} ()
\begin{DoxyCompactList}\small\item\em A simple heuristic to estimate the vertex normals. \end{DoxyCompactList}\item 
void \hyperlink{classOpenVolumeMesh_1_1NormalAttrib_a28176aa0d1c7b3025eff5b4fcf1b303b}{update\+\_\+face\+\_\+normals} ()
\begin{DoxyCompactList}\small\item\em Compute face normals. \end{DoxyCompactList}\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_ac1fa0b231adee13e5bbc88c3d12257d8}\label{classOpenVolumeMesh_1_1NormalAttrib_ac1fa0b231adee13e5bbc88c3d12257d8}} 
const Geom\+Kernel\+T\+::\+PointT \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Vertex\+Handle} \&\+\_\+h) const
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a91d1157fb3a9084fc04316d211e36670}\label{classOpenVolumeMesh_1_1NormalAttrib_a91d1157fb3a9084fc04316d211e36670}} 
const Geom\+Kernel\+T\+::\+PointT \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Face\+Handle} \&\+\_\+h) const
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a4e7830da0effc7b2cdb6fdc06dc3afa6}\label{classOpenVolumeMesh_1_1NormalAttrib_a4e7830da0effc7b2cdb6fdc06dc3afa6}} 
const Geom\+Kernel\+T\+::\+PointT {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Half\+Face\+Handle} \&\+\_\+h) const
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a0acff25d91130c156f9db4b1067eb44a}\label{classOpenVolumeMesh_1_1NormalAttrib_a0acff25d91130c156f9db4b1067eb44a}} 
Geom\+Kernel\+T\+::\+PointT \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Vertex\+Handle} \&\+\_\+h)
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_ae3146d12f937f576fe1b346becc6c749}\label{classOpenVolumeMesh_1_1NormalAttrib_ae3146d12f937f576fe1b346becc6c749}} 
Geom\+Kernel\+T\+::\+PointT \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Face\+Handle} \&\+\_\+h)
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a9361d9f19f95a8ab30ca4a05e101a596}\label{classOpenVolumeMesh_1_1NormalAttrib_a9361d9f19f95a8ab30ca4a05e101a596}} 
Geom\+Kernel\+T\+::\+PointT {\bfseries operator\mbox{[}$\,$\mbox{]}} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Half\+Face\+Handle} \&\+\_\+h)
\end{DoxyCompactItemize}
\subsection*{Private Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_aac55aab676976a842a1965fd1f0a3e5a}\label{classOpenVolumeMesh_1_1NormalAttrib_aac55aab676976a842a1965fd1f0a3e5a}} 
void {\bfseries compute\+\_\+vertex\+\_\+normal} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Vertex\+Handle} \&\+\_\+vh)
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a7c908dc6ec752427bdf28b35667f906e}\label{classOpenVolumeMesh_1_1NormalAttrib_a7c908dc6ec752427bdf28b35667f906e}} 
void {\bfseries compute\+\_\+face\+\_\+normal} (const \hyperlink{classOpenVolumeMesh_1_1HandleT}{Face\+Handle} \&\+\_\+fh)
\end{DoxyCompactItemize}
\subsection*{Private Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a008e42bf5663bc0219f1a1e09b3c06b1}\label{classOpenVolumeMesh_1_1NormalAttrib_a008e42bf5663bc0219f1a1e09b3c06b1}} 
Geom\+KernelT \& {\bfseries kernel\+\_\+}
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a5c0f686f1e16cdd3d4039526159589db}\label{classOpenVolumeMesh_1_1NormalAttrib_a5c0f686f1e16cdd3d4039526159589db}} 
\hyperlink{classOpenVolumeMesh_1_1PropertyTT}{Vertex\+PropertyT}$<$ typename Geom\+Kernel\+T\+::\+PointT $>$ {\bfseries v\+\_\+normals\+\_\+}
\item 
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a397a3c732c3a123a5a057638535765d7}\label{classOpenVolumeMesh_1_1NormalAttrib_a397a3c732c3a123a5a057638535765d7}} 
\hyperlink{classOpenVolumeMesh_1_1PropertyTT}{Face\+PropertyT}$<$ typename Geom\+Kernel\+T\+::\+PointT $>$ {\bfseries f\+\_\+normals\+\_\+}
\end{DoxyCompactItemize}


\subsection{Detailed Description}
\subsubsection*{template$<$class Geom\+KernelT$>$\newline
class Open\+Volume\+Mesh\+::\+Normal\+Attrib$<$ Geom\+Kernel\+T $>$}



Definition at line 55 of file Normal\+Attrib.\+hh.



\subsection{Member Function Documentation}
\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_a28176aa0d1c7b3025eff5b4fcf1b303b}\label{classOpenVolumeMesh_1_1NormalAttrib_a28176aa0d1c7b3025eff5b4fcf1b303b}} 
\index{Open\+Volume\+Mesh\+::\+Normal\+Attrib@{Open\+Volume\+Mesh\+::\+Normal\+Attrib}!update\+\_\+face\+\_\+normals@{update\+\_\+face\+\_\+normals}}
\index{update\+\_\+face\+\_\+normals@{update\+\_\+face\+\_\+normals}!Open\+Volume\+Mesh\+::\+Normal\+Attrib@{Open\+Volume\+Mesh\+::\+Normal\+Attrib}}
\subsubsection{\texorpdfstring{update\+\_\+face\+\_\+normals()}{update\_face\_normals()}}
{\footnotesize\ttfamily template$<$class Geom\+KernelT $>$ \\
void \hyperlink{classOpenVolumeMesh_1_1NormalAttrib}{Open\+Volume\+Mesh\+::\+Normal\+Attrib}$<$ Geom\+KernelT $>$\+::update\+\_\+face\+\_\+normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Compute face normals. 

This is accomplished by taking two adjacent half-\/edges that are incident to the faces and compute their cross product. Note that this method looses accuracy in case the faces in question is not planar. 

Definition at line 76 of file Normal\+Attrib\+T\+\_\+impl.\+hh.

\mbox{\Hypertarget{classOpenVolumeMesh_1_1NormalAttrib_aeb82cd60c514a8f462e36c600cc0919a}\label{classOpenVolumeMesh_1_1NormalAttrib_aeb82cd60c514a8f462e36c600cc0919a}} 
\index{Open\+Volume\+Mesh\+::\+Normal\+Attrib@{Open\+Volume\+Mesh\+::\+Normal\+Attrib}!update\+\_\+vertex\+\_\+normals@{update\+\_\+vertex\+\_\+normals}}
\index{update\+\_\+vertex\+\_\+normals@{update\+\_\+vertex\+\_\+normals}!Open\+Volume\+Mesh\+::\+Normal\+Attrib@{Open\+Volume\+Mesh\+::\+Normal\+Attrib}}
\subsubsection{\texorpdfstring{update\+\_\+vertex\+\_\+normals()}{update\_vertex\_normals()}}
{\footnotesize\ttfamily template$<$class Geom\+KernelT $>$ \\
void \hyperlink{classOpenVolumeMesh_1_1NormalAttrib}{Open\+Volume\+Mesh\+::\+Normal\+Attrib}$<$ Geom\+KernelT $>$\+::update\+\_\+vertex\+\_\+normals (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



A simple heuristic to estimate the vertex normals. 

This function takes the vertices\textquotesingle{} surrounding outside face normals into account and computes an average out of it. 

Definition at line 60 of file Normal\+Attrib\+T\+\_\+impl.\+hh.



The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
Type-\/\+Open\+Volume\+Mesh/libs/\+Open\+Volume\+Mesh/src/\+Open\+Volume\+Mesh/\+Attribs/Normal\+Attrib.\+hh\item 
Type-\/\+Open\+Volume\+Mesh/libs/\+Open\+Volume\+Mesh/src/\+Open\+Volume\+Mesh/\+Attribs/Normal\+Attrib\+T\+\_\+impl.\+hh\end{DoxyCompactItemize}
