<reponame>OpenAnimationLibrary/dox
\hypertarget{class_iwa___soap_bubble_fx}{}\doxysection{Iwa\+\_\+\+Soap\+Bubble\+Fx Class Reference}
\label{class_iwa___soap_bubble_fx}\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
Inheritance diagram for Iwa\+\_\+\+Soap\+Bubble\+Fx\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=6.000000cm]{class_iwa___soap_bubble_fx}
\end{center}
\end{figure}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a43218995fa395460297bd3781fde4a8e}{do\+Compute}} (\mbox{\hyperlink{class_t_tile}{TTile}} \&tile, double frame, const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&settings) override
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a19d8844f248a334538d6cc9d21d6e59d}{on\+Obsolete\+Param\+Loaded}} (const std\+::string \&param\+Name) override
\end{DoxyCompactItemize}
\doxysubsection*{Protected Types}
\begin{DoxyCompactItemize}
\item 
enum \{ {\bfseries RENDER\+\_\+\+MODE\+\_\+\+BUBBLE}
, {\bfseries RENDER\+\_\+\+MODE\+\_\+\+THICKNESS}
, {\bfseries RENDER\+\_\+\+MODE\+\_\+\+DEPTH}
 \}
\end{DoxyCompactItemize}
\doxysubsection*{Protected Member Functions}
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} , typename PIXEL $>$ }\\void \mbox{\hyperlink{class_iwa___soap_bubble_fx_aa173969f1e4e591538d69b8c5b30ba40}{convert\+To\+Brightness}} (const \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} src\+Ras, float $\ast$dst, float $\ast$alpha, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim)
\item 
{\footnotesize template$<$typename \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} , typename PIXEL $>$ }\\void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a31fc50aeae5f77767d9130ecd1024e94}{convert\+To\+Raster}} (const \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} ras, float $\ast$thickness\+\_\+map\+\_\+p, float $\ast$depth\+\_\+map\+\_\+p, float $\ast$alpha\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, \mbox{\hyperlink{structfloat3}{float3}} $\ast$bubble\+Color\+\_\+p)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_ae35a57d72a12840d5d839187548a7f1b}{process\+Shape}} (double frame, \mbox{\hyperlink{class_t_tile}{TTile}} \&shape\+\_\+tile, float $\ast$depth\+\_\+map\+\_\+p, float $\ast$alpha\+\_\+map\+\_\+p, USHORT $\ast$region\+Ids\+\_\+p, QList$<$ QRect $>$ \&region\+Bounding\+Rects, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&settings)
\item 
int \mbox{\hyperlink{class_iwa___soap_bubble_fx_afb93c0eeba2add2a5f118885a8caaed6}{do\+\_\+binarize}} (\mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}} src\+Ras, USHORT $\ast$dst\+\_\+p, float thres, float $\ast$distance\+\_\+p, float $\ast$alpha\+\_\+map\+\_\+p, QList$<$ QRect $>$ \&region\+Bounding\+Rects, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_aebe5c1f0641de62aa8e96e7520718282}{do\+\_\+create\+Blur\+Filter}} (float $\ast$dst\+\_\+p, int size, float radius)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a703d15befb39f8e8fad0f8fa0d2b2411}{do\+\_\+apply\+Filter}} (float $\ast$depth\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, float $\ast$distance\+\_\+p, USHORT $\ast$binarized\+\_\+p, float $\ast$blur\+\_\+filter\+\_\+p, int blur\+\_\+filter\+\_\+size, double frame, const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&settings)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_ab09a094cf6e3a10f88a4d1c2942ef9cc}{process\+Noise}} (float $\ast$thickness\+\_\+map\+\_\+p, float $\ast$depth\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, double frame, const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&settings)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a51d5e99141a79d71761a3d931c19db0d}{calc\+\_\+norm\+\_\+angle}} (float $\ast$norm\+\_\+angle\+\_\+p, float $\ast$depth\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, int shrink)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_ac2b1bdbb31f99c9aeab603c75ac75967}{make\+\_\+noise\+\_\+map}} (float $\ast$noise\+\_\+map\+\_\+p, float $\ast$depth\+\_\+map\+\_\+p, float $\ast$norm\+\_\+angle\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, const QList$<$ int $>$ \&noise\+\_\+amount, const QList$<$ QSize $>$ \&noise\+\_\+base\+\_\+resolution, int noise\+\_\+sub\+\_\+depth, float $\ast$noise\+\_\+base)
\item 
float \mbox{\hyperlink{class_iwa___soap_bubble_fx_a2180f84509c04eec7788b9bb0d43c319}{noise\+\_\+interp}} (int left, int right, int bottom, int top, float ratio\+\_\+s, float ratio\+\_\+t, float $\ast$noise\+\_\+layer\+\_\+base, int noise\+\_\+dim\+\_\+x)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a44ee1cf6798ae2dca5cd577c3e2e4897}{add\+\_\+noise}} (float $\ast$thickness\+\_\+map\+\_\+p, float $\ast$depth\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, float $\ast$noise\+\_\+map\+\_\+p, float noise\+\_\+thickness\+\_\+mix\+\_\+ratio, float noise\+\_\+depth\+\_\+mix\+\_\+ratio)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a77f6c488a53dbbab0a49b243324937dc}{do\+\_\+distance\+\_\+transform}} (float $\ast$dst\+\_\+p, USHORT $\ast$binarized\+\_\+p, int region\+Count, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, double frame)
\item 
bool \mbox{\hyperlink{class_iwa___soap_bubble_fx_a23b7787efe2cc3c2918f5e8ebfd7657a}{check\+Cancel\+And\+Release\+Raster}} (const QList$<$ \mbox{\hyperlink{class_t_raster_p_t}{TRaster\+GR8P}} $>$ \&, \mbox{\hyperlink{class_t_tile}{TTile}} \&, const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a81e4504f9d07d12f532bb3aeee996dae}{apply\+Distance\+To\+Alpha}} (float $\ast$distance\+\_\+p, float $\ast$alpha\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, float center\+\_\+opacity)
\item 
void \mbox{\hyperlink{class_iwa___soap_bubble_fx_a95460629d30121662d2d5139da108eaf}{fit\+Thickness\+Patches}} (\mbox{\hyperlink{class_t_smart_pointer_t}{TRasterP}} thick\+Ras, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} thick\+Dim, float $\ast$thickness\+\_\+map\+\_\+p, \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim, USHORT $\ast$region\+Ids\+\_\+p, QList$<$ QRect $>$ \&region\+Bounding\+Rects)
\end{DoxyCompactItemize}
\doxysubsection*{Protected Attributes}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{class_t_raster_fx_port}{TRaster\+Fx\+Port}} \mbox{\hyperlink{class_iwa___soap_bubble_fx_ae4ddfd000ea66b95fae5491a21cedf23}{m\+\_\+shape}}
\item 
\mbox{\hyperlink{class_t_raster_fx_port}{TRaster\+Fx\+Port}} \mbox{\hyperlink{class_iwa___soap_bubble_fx_a639ace2f5f8e2c3e4b6c6afaad47f7d7}{m\+\_\+depth}}
\item 
\mbox{\hyperlink{class_t_int_enum_param_p}{TInt\+Enum\+ParamP}} \mbox{\hyperlink{class_iwa___soap_bubble_fx_a557b99d731890b4ea928e01e9bb58604}{m\+\_\+render\+Mode}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_ad10040d50bf9f968d3565352342f4425}{m\+\_\+binarize\+\_\+threshold}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_af6b9950220a79732c34b004be7a14f0a}{m\+\_\+shape\+\_\+aspect\+\_\+ratio}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a1bbae1604555d5bef6426929392aa58d}{m\+\_\+blur\+\_\+radius}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_ab615dfa01de4264498ebbd0f35c38997}{m\+\_\+blur\+\_\+power}}
\item 
TBool\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_aa4d347aa594eee35c9b6e5ddd203feea}{m\+\_\+multi\+\_\+source}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a514987f136243ee8ba2651b5b816c865}{m\+\_\+center\+\_\+opacity}}
\item 
TBool\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a9e206e1af94cebcc89a79b62ba5b53a4}{m\+\_\+fit\+\_\+thickness}}
\item 
TBool\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a33683b0bf02207e56e95e373beeba754}{m\+\_\+mask\+\_\+center}}
\item 
TInt\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_ad29b0f4011204b087498ecb886a38751}{m\+\_\+normal\+\_\+sample\+\_\+distance}}
\item 
TInt\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a43eeedad2a7fd03abe719733826ba3bb}{m\+\_\+noise\+\_\+sub\+\_\+depth}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a650f4e47e691e8b08893dab2161dd1eb}{m\+\_\+noise\+\_\+resolution\+\_\+s}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a6373c6cd07082a0374404c793e21117d}{m\+\_\+noise\+\_\+resolution\+\_\+t}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a088ee27c56c182ec5f622c74135fe450}{m\+\_\+noise\+\_\+sub\+\_\+composite\+\_\+ratio}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_ae81ca0b39909a620c1646203c4f75278}{m\+\_\+noise\+\_\+evolution}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a140d2ab4c3f76ce781b219a9563538ce}{m\+\_\+noise\+\_\+depth\+\_\+mix\+\_\+ratio}}
\item 
TDouble\+ParamP \mbox{\hyperlink{class_iwa___soap_bubble_fx_a8e50788effead5dd8669d30ca96e758b}{m\+\_\+noise\+\_\+thickness\+\_\+mix\+\_\+ratio}}
\end{DoxyCompactItemize}
\doxysubsection*{Additional Inherited Members}


\doxysubsection{Detailed Description}


\doxysubsection{Member Enumeration Documentation}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a406679590c0084289cd9dce754c43847}\label{class_iwa___soap_bubble_fx_a406679590c0084289cd9dce754c43847}} 
\doxysubsubsection{\texorpdfstring{anonymous enum}{anonymous enum}}
{\footnotesize\ttfamily anonymous enum\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00048 \{ RENDER\_MODE\_BUBBLE, RENDER\_MODE\_THICKNESS, RENDER\_MODE\_DEPTH \};}

\end{DoxyCode}


\doxysubsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a6725494da4746483dd23d2688151b349}\label{class_iwa___soap_bubble_fx_a6725494da4746483dd23d2688151b349}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{Iwa\_SoapBubbleFx()}{Iwa\_SoapBubbleFx()}}
{\footnotesize\ttfamily Iwa\+\_\+\+Soap\+Bubble\+Fx\+::\+Iwa\+\_\+\+Soap\+Bubble\+Fx (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}


\begin{DoxyCode}{0}
\DoxyCodeLine{00068     : \mbox{\hyperlink{class_iwa___spectrum_fx}{Iwa\_SpectrumFx}}()}
\DoxyCodeLine{00069     , m\_renderMode(\textcolor{keyword}{new} \mbox{\hyperlink{class_t_enum_param}{TIntEnumParam}}(RENDER\_MODE\_BUBBLE, \textcolor{stringliteral}{"{}Bubble"{}}))}
\DoxyCodeLine{00070     , m\_binarize\_threshold(0.5)}
\DoxyCodeLine{00071     , m\_shape\_aspect\_ratio(1.0)}
\DoxyCodeLine{00072     , m\_blur\_radius(5.0)}
\DoxyCodeLine{00073     , m\_blur\_power(0.5)}
\DoxyCodeLine{00074     , m\_multi\_source(\textcolor{keyword}{false})}
\DoxyCodeLine{00075     , m\_mask\_center(\textcolor{keyword}{false})  \textcolor{comment}{// obsolete}}
\DoxyCodeLine{00076     , m\_center\_opacity(1.0)}
\DoxyCodeLine{00077     , m\_fit\_thickness(\textcolor{keyword}{false})}
\DoxyCodeLine{00078     , m\_normal\_sample\_distance(1)}
\DoxyCodeLine{00079     , m\_noise\_sub\_depth(3)}
\DoxyCodeLine{00080     , m\_noise\_resolution\_s(18.0)}
\DoxyCodeLine{00081     , m\_noise\_resolution\_t(5.0)}
\DoxyCodeLine{00082     , m\_noise\_sub\_composite\_ratio(0.5)}
\DoxyCodeLine{00083     , m\_noise\_evolution(0.0)}
\DoxyCodeLine{00084     , m\_noise\_depth\_mix\_ratio(0.05)}
\DoxyCodeLine{00085     , m\_noise\_thickness\_mix\_ratio(0.05) \{}
\DoxyCodeLine{00086   \mbox{\hyperlink{class_t_fx_a3926b30b5ec2feda2df6e63b59b16e4a}{removeInputPort}}(\textcolor{stringliteral}{"{}Source"{}});}
\DoxyCodeLine{00087   \mbox{\hyperlink{class_t_fx_a3926b30b5ec2feda2df6e63b59b16e4a}{removeInputPort}}(\textcolor{stringliteral}{"{}Light"{}}); \textcolor{comment}{/* not used */}}
\DoxyCodeLine{00088   \mbox{\hyperlink{class_t_fx_af0ccf8d65934ed9f7a62d3b45ee5f2b6}{addInputPort}}(\textcolor{stringliteral}{"{}Thickness"{}}, m\_input);}
\DoxyCodeLine{00089   \mbox{\hyperlink{class_t_fx_af0ccf8d65934ed9f7a62d3b45ee5f2b6}{addInputPort}}(\textcolor{stringliteral}{"{}Shape"{}}, m\_shape);}
\DoxyCodeLine{00090   \mbox{\hyperlink{class_t_fx_af0ccf8d65934ed9f7a62d3b45ee5f2b6}{addInputPort}}(\textcolor{stringliteral}{"{}Depth"{}}, m\_depth);}
\DoxyCodeLine{00091 }
\DoxyCodeLine{00092   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}renderMode"{}}, m\_renderMode);}
\DoxyCodeLine{00093   m\_renderMode-\/>addItem(RENDER\_MODE\_THICKNESS, \textcolor{stringliteral}{"{}Thickness"{}});}
\DoxyCodeLine{00094   m\_renderMode-\/>addItem(RENDER\_MODE\_DEPTH, \textcolor{stringliteral}{"{}Depth"{}});}
\DoxyCodeLine{00095 }
\DoxyCodeLine{00096   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}binarizeThresold"{}}, m\_binarize\_threshold);}
\DoxyCodeLine{00097   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}shapeAspectRatio"{}}, m\_shape\_aspect\_ratio);}
\DoxyCodeLine{00098   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}blurRadius"{}}, m\_blur\_radius);}
\DoxyCodeLine{00099   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}blurPower"{}}, m\_blur\_power);}
\DoxyCodeLine{00100   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}multiSource"{}}, m\_multi\_source);}
\DoxyCodeLine{00101   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}maskCenter"{}}, m\_mask\_center, \textcolor{keyword}{false}, \textcolor{keyword}{true});  \textcolor{comment}{// obsolete}}
\DoxyCodeLine{00102   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}centerOpacity"{}}, m\_center\_opacity);}
\DoxyCodeLine{00103   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}fitThickness"{}}, m\_fit\_thickness);}
\DoxyCodeLine{00104   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}normalSampleDistance"{}}, m\_normal\_sample\_distance);}
\DoxyCodeLine{00105   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseSubDepth"{}}, m\_noise\_sub\_depth);}
\DoxyCodeLine{00106   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseResolutionS"{}}, m\_noise\_resolution\_s);}
\DoxyCodeLine{00107   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseResolutionT"{}}, m\_noise\_resolution\_t);}
\DoxyCodeLine{00108   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseSubCompositeRatio"{}}, m\_noise\_sub\_composite\_ratio);}
\DoxyCodeLine{00109   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseEvolution"{}}, m\_noise\_evolution);}
\DoxyCodeLine{00110   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseDepthMixRatio"{}}, m\_noise\_depth\_mix\_ratio);}
\DoxyCodeLine{00111   bindParam(\textcolor{keyword}{this}, \textcolor{stringliteral}{"{}noiseThicknessMixRatio"{}}, m\_noise\_thickness\_mix\_ratio);}
\DoxyCodeLine{00112 }
\DoxyCodeLine{00113   m\_binarize\_threshold-\/>setValueRange(0.01, 0.99);}
\DoxyCodeLine{00114   m\_shape\_aspect\_ratio-\/>setValueRange(0.2, 5.0);}
\DoxyCodeLine{00115   m\_blur\_radius-\/>setMeasureName(\textcolor{stringliteral}{"{}fxLength"{}});}
\DoxyCodeLine{00116   m\_blur\_radius-\/>setValueRange(0.0, 25.0);}
\DoxyCodeLine{00117   m\_blur\_power-\/>setValueRange(0.01, 5.0);}
\DoxyCodeLine{00118   m\_center\_opacity-\/>setValueRange(0.0, 1.0);}
\DoxyCodeLine{00119 }
\DoxyCodeLine{00120   m\_normal\_sample\_distance-\/>setValueRange(1, 20);}
\DoxyCodeLine{00121   m\_noise\_sub\_depth-\/>setValueRange(1, 5);}
\DoxyCodeLine{00122   m\_noise\_resolution\_s-\/>setValueRange(1.0, 40.0);}
\DoxyCodeLine{00123   m\_noise\_resolution\_t-\/>setValueRange(1.0, 20.0);}
\DoxyCodeLine{00124   m\_noise\_sub\_composite\_ratio-\/>setValueRange(0.0, 5.0);}
\DoxyCodeLine{00125   m\_noise\_depth\_mix\_ratio-\/>setValueRange(0.0, 1.0);}
\DoxyCodeLine{00126   m\_noise\_thickness\_mix\_ratio-\/>setValueRange(0.0, 1.0);}
\DoxyCodeLine{00127 \}}

\end{DoxyCode}


\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a44ee1cf6798ae2dca5cd577c3e2e4897}\label{class_iwa___soap_bubble_fx_a44ee1cf6798ae2dca5cd577c3e2e4897}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!add\_noise@{add\_noise}}
\index{add\_noise@{add\_noise}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{add\_noise()}{add\_noise()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::add\+\_\+noise (\begin{DoxyParamCaption}\item[{float $\ast$}]{thickness\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{float $\ast$}]{noise\+\_\+map\+\_\+p,  }\item[{float}]{noise\+\_\+thickness\+\_\+mix\+\_\+ratio,  }\item[{float}]{noise\+\_\+depth\+\_\+mix\+\_\+ratio }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00898                                                               \{}
\DoxyCodeLine{00899   \textcolor{keywordtype}{float} one\_minus\_thickness\_ratio = 1.0f -\/ noise\_thickness\_mix\_ratio;}
\DoxyCodeLine{00900   \textcolor{keywordtype}{float} one\_minus\_depth\_ratio     = 1.0f -\/ noise\_depth\_mix\_ratio;}
\DoxyCodeLine{00901   \textcolor{keywordtype}{float}* tmp\_thickness            = thickness\_map\_p;}
\DoxyCodeLine{00902   \textcolor{keywordtype}{float}* tmp\_depth                = depth\_map\_p;}
\DoxyCodeLine{00903   \textcolor{keywordtype}{float}* tmp\_noise                = noise\_map\_p;}
\DoxyCodeLine{00904 }
\DoxyCodeLine{00905   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00906     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx;}
\DoxyCodeLine{00907          i++, tmp\_thickness++, tmp\_depth++, tmp\_noise++) \{}
\DoxyCodeLine{00908       *tmp\_thickness = *tmp\_noise * noise\_thickness\_mix\_ratio +}
\DoxyCodeLine{00909                        *tmp\_thickness * one\_minus\_thickness\_ratio;}
\DoxyCodeLine{00910       *tmp\_depth = *tmp\_noise * noise\_depth\_mix\_ratio +}
\DoxyCodeLine{00911                    *tmp\_depth * one\_minus\_depth\_ratio;}
\DoxyCodeLine{00912     \}}
\DoxyCodeLine{00913   \}}
\DoxyCodeLine{00914 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a81e4504f9d07d12f532bb3aeee996dae}\label{class_iwa___soap_bubble_fx_a81e4504f9d07d12f532bb3aeee996dae}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!applyDistanceToAlpha@{applyDistanceToAlpha}}
\index{applyDistanceToAlpha@{applyDistanceToAlpha}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{applyDistanceToAlpha()}{applyDistanceToAlpha()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::apply\+Distance\+To\+Alpha (\begin{DoxyParamCaption}\item[{float $\ast$}]{distance\+\_\+p,  }\item[{float $\ast$}]{alpha\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{float}]{center\+\_\+opacity }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00985                                                                   \{}
\DoxyCodeLine{00986   \textcolor{keywordtype}{float} da   = 1.0f -\/ center\_opacity;}
\DoxyCodeLine{00987   \textcolor{keywordtype}{float}* d\_p = distance\_p;}
\DoxyCodeLine{00988   \textcolor{keywordtype}{float}* a\_p = alpha\_map\_p;}
\DoxyCodeLine{00989   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx * dim.ly; i++, d\_p++, a\_p++) \{}
\DoxyCodeLine{00990     (*a\_p) *= 1.0f -\/ (*d\_p) * da;}
\DoxyCodeLine{00991   \}}
\DoxyCodeLine{00992 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a51d5e99141a79d71761a3d931c19db0d}\label{class_iwa___soap_bubble_fx_a51d5e99141a79d71761a3d931c19db0d}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!calc\_norm\_angle@{calc\_norm\_angle}}
\index{calc\_norm\_angle@{calc\_norm\_angle}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{calc\_norm\_angle()}{calc\_norm\_angle()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::calc\+\_\+norm\+\_\+angle (\begin{DoxyParamCaption}\item[{float $\ast$}]{norm\+\_\+angle\+\_\+p,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{int}]{shrink }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00777                                                                     \{}
\DoxyCodeLine{00778   \textcolor{keyword}{struct }Locals \{}
\DoxyCodeLine{00779     \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} \_dim;}
\DoxyCodeLine{00780     \textcolor{keyword}{const} \textcolor{keywordtype}{float}* \_depth\_p;}
\DoxyCodeLine{00781     \textcolor{keywordtype}{float} data(\textcolor{keywordtype}{int} x, \textcolor{keywordtype}{int} y) \{}
\DoxyCodeLine{00782       \textcolor{keywordflow}{if} (x < 0 || \_dim.lx <= x || y < 0 || \_dim.ly <= y) \textcolor{keywordflow}{return} 0.0f;}
\DoxyCodeLine{00783       \textcolor{keywordflow}{return} \_depth\_p[y * \_dim.lx + x];}
\DoxyCodeLine{00784     \}}
\DoxyCodeLine{00785   \} locals = \{dim, depth\_map\_p\};}
\DoxyCodeLine{00786 }
\DoxyCodeLine{00787   \textcolor{keywordtype}{int} sampleDistance =}
\DoxyCodeLine{00788       std::max(1, m\_normal\_sample\_distance-\/>getValue() / shrink);}
\DoxyCodeLine{00789   \textcolor{keywordtype}{float}* dst\_p = norm\_angle\_p;}
\DoxyCodeLine{00790 }
\DoxyCodeLine{00791   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00792     \textcolor{keywordtype}{int} sample\_y[2]                  = \{j -\/ sampleDistance, j + sampleDistance\};}
\DoxyCodeLine{00793     \textcolor{keywordflow}{if} (sample\_y[0] < 0) sample\_y[0] = 0;}
\DoxyCodeLine{00794     \textcolor{keywordflow}{if} (sample\_y[1] >= dim.ly) sample\_y[1] = dim.ly -\/ 1;}
\DoxyCodeLine{00795 }
\DoxyCodeLine{00796     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, norm\_angle\_p++) \{}
\DoxyCodeLine{00797       \textcolor{keywordtype}{int} sample\_x[2] = \{i -\/ sampleDistance, i + sampleDistance\};}
\DoxyCodeLine{00798       \textcolor{keywordflow}{if} (sample\_x[1] >= dim.lx) sample\_x[1] = dim.lx -\/ 1;}
\DoxyCodeLine{00799       \textcolor{keywordflow}{if} (sample\_x[0] < 0) sample\_x[0]       = 0;}
\DoxyCodeLine{00800 }
\DoxyCodeLine{00801       \textcolor{keywordtype}{float} gradient[2];}
\DoxyCodeLine{00802       gradient[0] =}
\DoxyCodeLine{00803           (locals.data(sample\_x[0], j) -\/ locals.data(sample\_x[1], j)) /}
\DoxyCodeLine{00804           (\textcolor{keywordtype}{float})(sample\_x[0] -\/ sample\_x[1]);}
\DoxyCodeLine{00805       gradient[1] =}
\DoxyCodeLine{00806           (locals.data(i, sample\_y[0]) -\/ locals.data(i, sample\_y[1])) /}
\DoxyCodeLine{00807           (\textcolor{keywordtype}{float})(sample\_y[0] -\/ sample\_y[1]);}
\DoxyCodeLine{00808 }
\DoxyCodeLine{00809       \textcolor{keywordflow}{if} (gradient[0] == 0.0f \&\& gradient[1] == 0.0f)}
\DoxyCodeLine{00810         *norm\_angle\_p = 0.0f;}
\DoxyCodeLine{00811       \textcolor{keywordflow}{else} \textcolor{comment}{/* normalize value range to 0-\/1 */}}
\DoxyCodeLine{00812         *norm\_angle\_p =}
\DoxyCodeLine{00813             0.5f + std::atan2(gradient[0], gradient[1]) / (2.0f * PI);}
\DoxyCodeLine{00814     \}}
\DoxyCodeLine{00815   \}}
\DoxyCodeLine{00816 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a23b7787efe2cc3c2918f5e8ebfd7657a}\label{class_iwa___soap_bubble_fx_a23b7787efe2cc3c2918f5e8ebfd7657a}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!checkCancelAndReleaseRaster@{checkCancelAndReleaseRaster}}
\index{checkCancelAndReleaseRaster@{checkCancelAndReleaseRaster}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{checkCancelAndReleaseRaster()}{checkCancelAndReleaseRaster()}}
{\footnotesize\ttfamily bool Iwa\+\_\+\+Soap\+Bubble\+Fx\+::check\+Cancel\+And\+Release\+Raster (\begin{DoxyParamCaption}\item[{const QList$<$ \mbox{\hyperlink{class_t_raster_p_t}{TRaster\+GR8P}} $>$ \&}]{allocated\+Ras\+List,  }\item[{\mbox{\hyperlink{class_t_tile}{TTile}} \&}]{tile,  }\item[{const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&}]{settings }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00972                                      \{}
\DoxyCodeLine{00973   \textcolor{keywordflow}{if} (settings.m\_isCanceled \&\& *settings.m\_isCanceled) \{}
\DoxyCodeLine{00974     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < allocatedRasList.size(); i++)}
\DoxyCodeLine{00975       allocatedRasList.at(i)-\/>unlock();}
\DoxyCodeLine{00976     tile.getRaster()-\/>clear();}
\DoxyCodeLine{00977     \textcolor{keywordflow}{return} \textcolor{keyword}{true};}
\DoxyCodeLine{00978   \} \textcolor{keywordflow}{else}}
\DoxyCodeLine{00979     \textcolor{keywordflow}{return} \textcolor{keyword}{false};}
\DoxyCodeLine{00980 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_aa173969f1e4e591538d69b8c5b30ba40}\label{class_iwa___soap_bubble_fx_aa173969f1e4e591538d69b8c5b30ba40}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!convertToBrightness@{convertToBrightness}}
\index{convertToBrightness@{convertToBrightness}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{convertToBrightness()}{convertToBrightness()}}
{\footnotesize\ttfamily template$<$typename \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} , typename PIXEL $>$ \\
void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::convert\+To\+Brightness (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}}}]{src\+Ras,  }\item[{float $\ast$}]{dst,  }\item[{float $\ast$}]{alpha,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00286                                                                           \{}
\DoxyCodeLine{00287   \textcolor{keywordtype}{float}* dst\_p   = dst;}
\DoxyCodeLine{00288   \textcolor{keywordtype}{float}* alpha\_p = alpha;}
\DoxyCodeLine{00289   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00290     PIXEL* pix = srcRas-\/>pixels(j);}
\DoxyCodeLine{00291     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, dst\_p++, pix++) \{}
\DoxyCodeLine{00292       \textcolor{keywordtype}{float} r = (float)pix-\/>r / (\textcolor{keywordtype}{float})PIXEL::maxChannelValue;}
\DoxyCodeLine{00293       \textcolor{keywordtype}{float} g = (float)pix-\/>g / (\textcolor{keywordtype}{float})PIXEL::maxChannelValue;}
\DoxyCodeLine{00294       \textcolor{keywordtype}{float} b = (float)pix-\/>b / (\textcolor{keywordtype}{float})PIXEL::maxChannelValue;}
\DoxyCodeLine{00295       \textcolor{comment}{/* brightness */}}
\DoxyCodeLine{00296       *dst\_p = 0.298912f * r + 0.586611f * g + 0.114478f * b;}
\DoxyCodeLine{00297       \textcolor{keywordflow}{if} (alpha) \{}
\DoxyCodeLine{00298         *alpha\_p = (float)pix-\/>m / (\textcolor{keywordtype}{float})PIXEL::maxChannelValue;}
\DoxyCodeLine{00299         alpha\_p++;}
\DoxyCodeLine{00300       \}}
\DoxyCodeLine{00301     \}}
\DoxyCodeLine{00302   \}}
\DoxyCodeLine{00303 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a31fc50aeae5f77767d9130ecd1024e94}\label{class_iwa___soap_bubble_fx_a31fc50aeae5f77767d9130ecd1024e94}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!convertToRaster@{convertToRaster}}
\index{convertToRaster@{convertToRaster}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{convertToRaster()}{convertToRaster()}}
{\footnotesize\ttfamily template$<$typename \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}} , typename PIXEL $>$ \\
void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::convert\+To\+Raster (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{struct___r_a_s_t_e_r}{RASTER}}}]{ras,  }\item[{float $\ast$}]{thickness\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{alpha\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{\mbox{\hyperlink{structfloat3}{float3}} $\ast$}]{bubble\+Color\+\_\+p }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00310                                                                                \{}
\DoxyCodeLine{00311   \textcolor{keywordtype}{int} renderMode     = m\_renderMode-\/>getValue();}
\DoxyCodeLine{00312   \textcolor{keywordtype}{float}* depth\_p     = depth\_map\_p;}
\DoxyCodeLine{00313   \textcolor{keywordtype}{float}* thickness\_p = thickness\_map\_p;}
\DoxyCodeLine{00314   \textcolor{keywordtype}{float}* alpha\_p     = alpha\_map\_p;}
\DoxyCodeLine{00315   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00316     PIXEL* pix = ras-\/>pixels(j);}
\DoxyCodeLine{00317     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx;}
\DoxyCodeLine{00318          i++, depth\_p++, thickness\_p++, alpha\_p++, pix++) \{}
\DoxyCodeLine{00319       \textcolor{keywordtype}{float} alpha = (*alpha\_p);}
\DoxyCodeLine{00320       \textcolor{keywordflow}{if} (!m\_fit\_thickness-\/>getValue())}
\DoxyCodeLine{00321         alpha *= (float)pix-\/>m / (\textcolor{keywordtype}{float})PIXEL::maxChannelValue;}
\DoxyCodeLine{00322       \textcolor{keywordflow}{if} (alpha == 0.0f) \{ \textcolor{comment}{/* no change for the transparent pixels */}}
\DoxyCodeLine{00323         pix-\/>m = (\textcolor{keyword}{typename} PIXEL::Channel)0;}
\DoxyCodeLine{00324         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00325       \}}
\DoxyCodeLine{00326 }
\DoxyCodeLine{00327       \textcolor{comment}{// thickness and depth render mode}}
\DoxyCodeLine{00328       \textcolor{keywordflow}{if} (renderMode != RENDER\_MODE\_BUBBLE) \{}
\DoxyCodeLine{00329         \textcolor{keywordtype}{float} val = alpha * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00330         pix-\/>m = (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00331                                                ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00332                                                : val);}
\DoxyCodeLine{00333         \textcolor{keywordtype}{float} mapVal =}
\DoxyCodeLine{00334             (renderMode == RENDER\_MODE\_THICKNESS) ? (*thickness\_p) : (*depth\_p);}
\DoxyCodeLine{00335         val = alpha * mapVal * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00336         \textcolor{keyword}{typename} PIXEL::Channel chanVal =}
\DoxyCodeLine{00337             (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00338                                           ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00339                                           : val);}
\DoxyCodeLine{00340         pix-\/>r = chanVal;}
\DoxyCodeLine{00341         pix-\/>g = chanVal;}
\DoxyCodeLine{00342         pix-\/>b = chanVal;}
\DoxyCodeLine{00343         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00344       \}}
\DoxyCodeLine{00345 }
\DoxyCodeLine{00346       \textcolor{keywordtype}{float} coordinate[2];}
\DoxyCodeLine{00347       coordinate[0] = 256.0f * std::min(1.0f, *depth\_p);}
\DoxyCodeLine{00348       coordinate[1] = 256.0f * std::min(1.0f, *thickness\_p);}
\DoxyCodeLine{00349 }
\DoxyCodeLine{00350       \textcolor{keywordtype}{int} neighbors[2][2];}
\DoxyCodeLine{00351 }
\DoxyCodeLine{00352       \textcolor{comment}{/* interpolate sampling */}}
\DoxyCodeLine{00353       \textcolor{keywordflow}{if} (coordinate[0] <= 0.5f)}
\DoxyCodeLine{00354         neighbors[0][0] = 0;}
\DoxyCodeLine{00355       \textcolor{keywordflow}{else}}
\DoxyCodeLine{00356         neighbors[0][0] = (int)std::floor(coordinate[0] -\/ 0.5f);}
\DoxyCodeLine{00357       \textcolor{keywordflow}{if} (coordinate[0] >= 255.5f)}
\DoxyCodeLine{00358         neighbors[0][1] = 255;}
\DoxyCodeLine{00359       \textcolor{keywordflow}{else}}
\DoxyCodeLine{00360         neighbors[0][1] = (int)std::floor(coordinate[0] + 0.5f);}
\DoxyCodeLine{00361       \textcolor{keywordflow}{if} (coordinate[1] <= 0.5f)}
\DoxyCodeLine{00362         neighbors[1][0] = 0;}
\DoxyCodeLine{00363       \textcolor{keywordflow}{else}}
\DoxyCodeLine{00364         neighbors[1][0] = (int)std::floor(coordinate[1] -\/ 0.5f);}
\DoxyCodeLine{00365       \textcolor{keywordflow}{if} (coordinate[1] >= 255.5f)}
\DoxyCodeLine{00366         neighbors[1][1] = 255;}
\DoxyCodeLine{00367       \textcolor{keywordflow}{else}}
\DoxyCodeLine{00368         neighbors[1][1] = (int)std::floor(coordinate[1] + 0.5f);}
\DoxyCodeLine{00369 }
\DoxyCodeLine{00370       \textcolor{keywordtype}{float} interp\_ratio[2];}
\DoxyCodeLine{00371       interp\_ratio[0] = coordinate[0] -\/ 0.5f -\/ std::floor(coordinate[0] -\/ 0.5f);}
\DoxyCodeLine{00372       interp\_ratio[1] = coordinate[1] -\/ 0.5f -\/ std::floor(coordinate[1] -\/ 0.5f);}
\DoxyCodeLine{00373 }
\DoxyCodeLine{00374       \mbox{\hyperlink{structfloat3}{float3}} nColors[4] = \{}
\DoxyCodeLine{00375           bubbleColor\_p[neighbors[0][0] * 256 + neighbors[1][0]],}
\DoxyCodeLine{00376           bubbleColor\_p[neighbors[0][1] * 256 + neighbors[1][0]],}
\DoxyCodeLine{00377           bubbleColor\_p[neighbors[0][0] * 256 + neighbors[1][1]],}
\DoxyCodeLine{00378           bubbleColor\_p[neighbors[0][1] * 256 + neighbors[1][1]]\};}
\DoxyCodeLine{00379 }
\DoxyCodeLine{00380       \mbox{\hyperlink{structfloat3}{float3}} color =}
\DoxyCodeLine{00381           nColors[0] * (1.0f -\/ interp\_ratio[0]) * (1.0f -\/ interp\_ratio[1]) +}
\DoxyCodeLine{00382           nColors[1] * interp\_ratio[0] * (1.0f -\/ interp\_ratio[1]) +}
\DoxyCodeLine{00383           nColors[2] * (1.0f -\/ interp\_ratio[0]) * interp\_ratio[1] +}
\DoxyCodeLine{00384           nColors[3] * interp\_ratio[0] * interp\_ratio[1];}
\DoxyCodeLine{00385 }
\DoxyCodeLine{00386       \textcolor{comment}{/* clamp */}}
\DoxyCodeLine{00387       \textcolor{keywordtype}{float} val = alpha * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00388       pix-\/>m = (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00389                                              ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00390                                              : val);}
\DoxyCodeLine{00391       val    = alpha * color.x * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00392       pix-\/>r = (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00393                                              ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00394                                              : val);}
\DoxyCodeLine{00395       val    = alpha * color.y * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00396       pix-\/>g = (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00397                                              ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00398                                              : val);}
\DoxyCodeLine{00399       val    = alpha * color.z * (float)PIXEL::maxChannelValue + 0.5f;}
\DoxyCodeLine{00400       pix-\/>b = (\textcolor{keyword}{typename} PIXEL::Channel)((val > (\textcolor{keywordtype}{float})PIXEL::maxChannelValue)}
\DoxyCodeLine{00401                                              ? (\textcolor{keywordtype}{float})PIXEL::maxChannelValue}
\DoxyCodeLine{00402                                              : val);}
\DoxyCodeLine{00403     \}}
\DoxyCodeLine{00404   \}}
\DoxyCodeLine{00405 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a703d15befb39f8e8fad0f8fa0d2b2411}\label{class_iwa___soap_bubble_fx_a703d15befb39f8e8fad0f8fa0d2b2411}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!do\_applyFilter@{do\_applyFilter}}
\index{do\_applyFilter@{do\_applyFilter}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{do\_applyFilter()}{do\_applyFilter()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::do\+\_\+apply\+Filter (\begin{DoxyParamCaption}\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{float $\ast$}]{distance\+\_\+p,  }\item[{USHORT $\ast$}]{binarized\+\_\+p,  }\item[{float $\ast$}]{blur\+\_\+filter\+\_\+p,  }\item[{int}]{blur\+\_\+filter\+\_\+size,  }\item[{double}]{frame,  }\item[{const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&}]{settings }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00648                                                                        \{}
\DoxyCodeLine{00649   \textcolor{keywordtype}{float} power = (float)m\_blur\_power-\/>getValue(frame);}
\DoxyCodeLine{00650 }
\DoxyCodeLine{00651   memset(depth\_map\_p, 0, \textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly);}
\DoxyCodeLine{00652 }
\DoxyCodeLine{00653   \textcolor{keywordtype}{int} fil\_margin = (blur\_filter\_size -\/ 1) / 2;}
\DoxyCodeLine{00654   \textcolor{keywordtype}{float}* dst\_p   = depth\_map\_p;}
\DoxyCodeLine{00655   USHORT* bin\_p  = binarized\_p;}
\DoxyCodeLine{00656   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00657     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, dst\_p++, bin\_p++) \{}
\DoxyCodeLine{00658       \textcolor{keywordflow}{if} (*bin\_p == 0) \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00659 }
\DoxyCodeLine{00660       \textcolor{keywordtype}{float}* fil\_p = blur\_filter\_p;}
\DoxyCodeLine{00661       \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} fy = j -\/ fil\_margin; fy <= j + fil\_margin; fy++) \{}
\DoxyCodeLine{00662         \textcolor{keywordflow}{if} (fy < 0 || fy >= dim.ly) \{}
\DoxyCodeLine{00663           fil\_p += blur\_filter\_size;}
\DoxyCodeLine{00664           \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00665         \}}
\DoxyCodeLine{00666         \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} fx = i -\/ fil\_margin; fx <= i + fil\_margin; fx++, fil\_p++) \{}
\DoxyCodeLine{00667           \textcolor{keywordflow}{if} (fx < 0 || fx >= dim.lx) \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00668 }
\DoxyCodeLine{00669           *dst\_p += *fil\_p * distance\_p[fy * dim.lx + fx];}
\DoxyCodeLine{00670         \}}
\DoxyCodeLine{00671       \}}
\DoxyCodeLine{00672       \textcolor{comment}{/* power the value */}}
\DoxyCodeLine{00673       *dst\_p = 1.0f -\/ std::pow(*dst\_p, power);}
\DoxyCodeLine{00674     \}}
\DoxyCodeLine{00675     \textcolor{keywordflow}{if} (settings.m\_isCanceled \&\& *settings.m\_isCanceled) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00676   \}}
\DoxyCodeLine{00677 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_afb93c0eeba2add2a5f118885a8caaed6}\label{class_iwa___soap_bubble_fx_afb93c0eeba2add2a5f118885a8caaed6}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!do\_binarize@{do\_binarize}}
\index{do\_binarize@{do\_binarize}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{do\_binarize()}{do\_binarize()}}
{\footnotesize\ttfamily int Iwa\+\_\+\+Soap\+Bubble\+Fx\+::do\+\_\+binarize (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}}}]{src\+Ras,  }\item[{USHORT $\ast$}]{dst\+\_\+p,  }\item[{float}]{thres,  }\item[{float $\ast$}]{distance\+\_\+p,  }\item[{float $\ast$}]{alpha\+\_\+map\+\_\+p,  }\item[{QList$<$ QRect $>$ \&}]{region\+Bounding\+Rects,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00494                                                    \{}
\DoxyCodeLine{00495   TPixel32::Channel channelThres =}
\DoxyCodeLine{00496       (TPixel32::Channel)(thres * (\textcolor{keywordtype}{float})TPixel32::maxChannelValue);}
\DoxyCodeLine{00497   USHORT* tmp\_p   = dst\_p;}
\DoxyCodeLine{00498   \textcolor{keywordtype}{float}* tmp\_dist = distance\_p;}
\DoxyCodeLine{00499   \textcolor{keywordtype}{float}* alpha\_p  = alpha\_map\_p;}
\DoxyCodeLine{00500   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00501     TPixel32* pix = srcRas-\/>pixels(j);}
\DoxyCodeLine{00502     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, pix++, tmp\_p++, tmp\_dist++, alpha\_p++) \{}
\DoxyCodeLine{00503       (*tmp\_p)    = (pix-\/>m > channelThres) ? 1 : 0;}
\DoxyCodeLine{00504       (*tmp\_dist) = (*tmp\_p == 1) ? INF : 0.0f;}
\DoxyCodeLine{00505       *alpha\_p    = (float)pix-\/>m / (\textcolor{keywordtype}{float})TPixel32::maxChannelValue;}
\DoxyCodeLine{00506     \}}
\DoxyCodeLine{00507   \}}
\DoxyCodeLine{00508 }
\DoxyCodeLine{00509   \textcolor{comment}{// label regions when multi bubble option is on}}
\DoxyCodeLine{00510   \textcolor{keywordflow}{if} (!m\_multi\_source-\/>getValue()) \{}
\DoxyCodeLine{00511     \textcolor{keywordflow}{if} (m\_fit\_thickness-\/>getValue()) \{}
\DoxyCodeLine{00512       regionBoundingRects.append(QRect());}
\DoxyCodeLine{00513       \textcolor{comment}{// calc boundingRect of the bubble}}
\DoxyCodeLine{00514       QPoint topLeft(dim.lx, dim.ly);}
\DoxyCodeLine{00515       QPoint bottomRight(0, 0);}
\DoxyCodeLine{00516       USHORT* tmp\_p = dst\_p;}
\DoxyCodeLine{00517       \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00518         \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_p++) \{}
\DoxyCodeLine{00519           \textcolor{keywordflow}{if} ((*tmp\_p) == 0) \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00520           \textcolor{keywordflow}{if} (topLeft.x() > i) topLeft.setX(i);}
\DoxyCodeLine{00521           \textcolor{keywordflow}{if} (bottomRight.x() < i) bottomRight.setX(i);}
\DoxyCodeLine{00522           \textcolor{keywordflow}{if} (topLeft.y() > j) topLeft.setY(j);}
\DoxyCodeLine{00523           \textcolor{keywordflow}{if} (bottomRight.y() < j) bottomRight.setY(j);}
\DoxyCodeLine{00524         \}}
\DoxyCodeLine{00525       \}}
\DoxyCodeLine{00526       regionBoundingRects.append(QRect(topLeft, bottomRight));}
\DoxyCodeLine{00527     \}}
\DoxyCodeLine{00528 }
\DoxyCodeLine{00529     \textcolor{keywordflow}{return} 1;}
\DoxyCodeLine{00530   \}}
\DoxyCodeLine{00531 }
\DoxyCodeLine{00532   QList<int> lut;}
\DoxyCodeLine{00533   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i      = 0; i < 65536; i++) lut.append(i);}
\DoxyCodeLine{00534   tmp\_p           = dst\_p;}
\DoxyCodeLine{00535   \textcolor{keywordtype}{int} regionCount = 0;}
\DoxyCodeLine{00536   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00537     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_p++) \{}
\DoxyCodeLine{00538       \textcolor{keywordflow}{if} ((*tmp\_p) == 1) \{}
\DoxyCodeLine{00539         \textcolor{keywordtype}{int} up   = (j == 0) ? 0 : *(tmp\_p -\/ dim.lx);}
\DoxyCodeLine{00540         \textcolor{keywordtype}{int} left = (i == 0) ? 0 : *(tmp\_p -\/ 1);}
\DoxyCodeLine{00541         assert(up >= 0 \&\& left >= 0);}
\DoxyCodeLine{00542         \textcolor{keywordflow}{if} (!up \&\& !left) \{}
\DoxyCodeLine{00543           \textcolor{keywordflow}{if} (regionCount < 65535) regionCount++;}
\DoxyCodeLine{00544           (*tmp\_p) = regionCount;}
\DoxyCodeLine{00545         \} \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (up \&\& !left)}
\DoxyCodeLine{00546           (*tmp\_p) = up;}
\DoxyCodeLine{00547         \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!up \&\& left)}
\DoxyCodeLine{00548           (*tmp\_p) = left;}
\DoxyCodeLine{00549         \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (up == left)}
\DoxyCodeLine{00550           (*tmp\_p) = up;}
\DoxyCodeLine{00551         \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (up > left) \{}
\DoxyCodeLine{00552           (*tmp\_p) = left;}
\DoxyCodeLine{00553           lut[up]  = left;}
\DoxyCodeLine{00554         \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{00555           (*tmp\_p)  = up;}
\DoxyCodeLine{00556           lut[left] = up;}
\DoxyCodeLine{00557         \}}
\DoxyCodeLine{00558       \}}
\DoxyCodeLine{00559     \}}
\DoxyCodeLine{00560   \}}
\DoxyCodeLine{00561 }
\DoxyCodeLine{00562   \textcolor{comment}{// organize lut}}
\DoxyCodeLine{00563   QList<int> convIndex;}
\DoxyCodeLine{00564   \textcolor{keywordtype}{int} currentIndex = 0;}
\DoxyCodeLine{00565   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < 65536; i++) \{}
\DoxyCodeLine{00566     \textcolor{keywordflow}{if} (lut.at(i) == i) \{}
\DoxyCodeLine{00567       lut[i] = currentIndex;}
\DoxyCodeLine{00568       currentIndex++;}
\DoxyCodeLine{00569     \} \textcolor{keywordflow}{else}}
\DoxyCodeLine{00570       convIndex.append(i);}
\DoxyCodeLine{00571   \}}
\DoxyCodeLine{00572   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i             = 0; i < convIndex.count(); i++)}
\DoxyCodeLine{00573     lut[convIndex.at(i)] = lut.at(lut.at(convIndex.at(i)));}
\DoxyCodeLine{00574 }
\DoxyCodeLine{00575   \textcolor{comment}{// apply lut}}
\DoxyCodeLine{00576   \textcolor{keywordtype}{int} maxRegionIndex = 0;}
\DoxyCodeLine{00577   tmp\_p              = dst\_p;}
\DoxyCodeLine{00578   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00579     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_p++) \{}
\DoxyCodeLine{00580       (*tmp\_p)                                      = lut[*tmp\_p];}
\DoxyCodeLine{00581       \textcolor{keywordflow}{if} (maxRegionIndex < (*tmp\_p)) maxRegionIndex = (*tmp\_p);}
\DoxyCodeLine{00582     \}}
\DoxyCodeLine{00583   \}}
\DoxyCodeLine{00584 }
\DoxyCodeLine{00585   \textcolor{comment}{// compute bounding boxes of each bubble}}
\DoxyCodeLine{00586   \textcolor{keywordflow}{if} (m\_fit\_thickness-\/>getValue()) \{}
\DoxyCodeLine{00587     regionBoundingRects.append(QRect());}
\DoxyCodeLine{00588     USHORT* tmp\_p = dst\_p;}
\DoxyCodeLine{00589     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00590       \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_p++) \{}
\DoxyCodeLine{00591         \textcolor{keywordtype}{int} rId = (*tmp\_p);}
\DoxyCodeLine{00592         \textcolor{keywordflow}{if} (rId == 0) \textcolor{keywordflow}{continue};}
\DoxyCodeLine{00593         \textcolor{keywordflow}{while} (regionBoundingRects.size() <= rId)}
\DoxyCodeLine{00594           regionBoundingRects.append(QRect());}
\DoxyCodeLine{00595 }
\DoxyCodeLine{00596         \textcolor{keywordflow}{if} (regionBoundingRects.at(rId).isNull())}
\DoxyCodeLine{00597           regionBoundingRects[rId].setRect(i, j, 1, 1);}
\DoxyCodeLine{00598         \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{00599           \textcolor{keywordflow}{if} (regionBoundingRects[rId].left() > i)}
\DoxyCodeLine{00600             regionBoundingRects[rId].setLeft(i);}
\DoxyCodeLine{00601           \textcolor{keywordflow}{if} (regionBoundingRects[rId].right() < i)}
\DoxyCodeLine{00602             regionBoundingRects[rId].setRight(i);}
\DoxyCodeLine{00603           \textcolor{keywordflow}{if} (regionBoundingRects[rId].top() > j)}
\DoxyCodeLine{00604             regionBoundingRects[rId].setTop(j);}
\DoxyCodeLine{00605           \textcolor{keywordflow}{if} (regionBoundingRects[rId].bottom() < j)}
\DoxyCodeLine{00606             regionBoundingRects[rId].setBottom(j);}
\DoxyCodeLine{00607         \}}
\DoxyCodeLine{00608       \}}
\DoxyCodeLine{00609     \}}
\DoxyCodeLine{00610   \}}
\DoxyCodeLine{00611 }
\DoxyCodeLine{00612   \textcolor{keywordflow}{return} maxRegionIndex;}
\DoxyCodeLine{00613 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_aebe5c1f0641de62aa8e96e7520718282}\label{class_iwa___soap_bubble_fx_aebe5c1f0641de62aa8e96e7520718282}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!do\_createBlurFilter@{do\_createBlurFilter}}
\index{do\_createBlurFilter@{do\_createBlurFilter}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{do\_createBlurFilter()}{do\_createBlurFilter()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::do\+\_\+create\+Blur\+Filter (\begin{DoxyParamCaption}\item[{float $\ast$}]{dst\+\_\+p,  }\item[{int}]{size,  }\item[{float}]{radius }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00618                                                          \{}
\DoxyCodeLine{00619   \textcolor{keywordtype}{float} radius2 = radius * radius;}
\DoxyCodeLine{00620   \textcolor{keywordtype}{float}* tmp\_p  = dst\_p;}
\DoxyCodeLine{00621   \textcolor{keywordtype}{float} sum     = 0.0f;}
\DoxyCodeLine{00622   \textcolor{keywordtype}{int} rad       = (size -\/ 1) / 2;}
\DoxyCodeLine{00623   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = -\/rad; j <= rad; j++) \{}
\DoxyCodeLine{00624     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = -\/rad; i <= rad; i++, tmp\_p++) \{}
\DoxyCodeLine{00625       \textcolor{keywordtype}{float} length2 = (float)i * (\textcolor{keywordtype}{float})i + (float)j * (\textcolor{keywordtype}{float})j;}
\DoxyCodeLine{00626       \textcolor{comment}{/* out of range */}}
\DoxyCodeLine{00627       \textcolor{keywordflow}{if} (length2 >= radius2)}
\DoxyCodeLine{00628         *tmp\_p = 0.0f;}
\DoxyCodeLine{00629       \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{00630         \textcolor{comment}{/* normalize distance from the filter center, to 0-\/1 */}}
\DoxyCodeLine{00631         *tmp\_p = 1.0f -\/ std::sqrt(length2) / radius;}
\DoxyCodeLine{00632         sum += *tmp\_p;}
\DoxyCodeLine{00633       \}}
\DoxyCodeLine{00634     \}}
\DoxyCodeLine{00635   \}}
\DoxyCodeLine{00636   \textcolor{comment}{/* normalize */}}
\DoxyCodeLine{00637   tmp\_p = dst\_p;}
\DoxyCodeLine{00638   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < size * size; i++, tmp\_p++) \{}
\DoxyCodeLine{00639     *tmp\_p /= sum;}
\DoxyCodeLine{00640   \}}
\DoxyCodeLine{00641 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a77f6c488a53dbbab0a49b243324937dc}\label{class_iwa___soap_bubble_fx_a77f6c488a53dbbab0a49b243324937dc}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!do\_distance\_transform@{do\_distance\_transform}}
\index{do\_distance\_transform@{do\_distance\_transform}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{do\_distance\_transform()}{do\_distance\_transform()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::do\+\_\+distance\+\_\+transform (\begin{DoxyParamCaption}\item[{float $\ast$}]{dst\+\_\+p,  }\item[{USHORT $\ast$}]{binarized\+\_\+p,  }\item[{int}]{region\+Count,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{double}]{frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00919                                                            \{}
\DoxyCodeLine{00920   \textcolor{keywordtype}{float} ar = (float)m\_shape\_aspect\_ratio-\/>getValue(frame);}
\DoxyCodeLine{00921 }
\DoxyCodeLine{00922   \textcolor{keywordtype}{float}* f = \textcolor{keyword}{new} \textcolor{keywordtype}{float}[std::max(dim.lx, dim.ly)];}
\DoxyCodeLine{00923 }
\DoxyCodeLine{00924   QList<float> max\_val;}
\DoxyCodeLine{00925   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} r = 0; r <= regionCount; r++) max\_val.append(0.0f);}
\DoxyCodeLine{00926 }
\DoxyCodeLine{00927   \textcolor{keywordtype}{float}* tmp\_dst = dst\_p;}
\DoxyCodeLine{00928   \textcolor{comment}{/* transform along rows */}}
\DoxyCodeLine{00929   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00930     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_dst++) \{}
\DoxyCodeLine{00931       f[i] = *tmp\_dst;}
\DoxyCodeLine{00932     \}}
\DoxyCodeLine{00933 }
\DoxyCodeLine{00934     tmp\_dst -\/= dim.lx;}
\DoxyCodeLine{00935 }
\DoxyCodeLine{00936     \textcolor{keywordtype}{float}* d = dt(f, dim.lx);}
\DoxyCodeLine{00937     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, tmp\_dst++) \{}
\DoxyCodeLine{00938       *tmp\_dst = d[i];}
\DoxyCodeLine{00939     \}}
\DoxyCodeLine{00940     \textcolor{keyword}{delete}[] d;}
\DoxyCodeLine{00941   \}}
\DoxyCodeLine{00942   \textcolor{comment}{/* transform along columns */}}
\DoxyCodeLine{00943   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++) \{}
\DoxyCodeLine{00944     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00945       f[j] = dst\_p[j * dim.lx + i];}
\DoxyCodeLine{00946     \}}
\DoxyCodeLine{00947     \textcolor{keywordtype}{float}* d =}
\DoxyCodeLine{00948         dt(f, dim.ly,}
\DoxyCodeLine{00949            ar); \textcolor{comment}{/* ar : taking account of the aspect ratio of the shape */}}
\DoxyCodeLine{00950     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00951       dst\_p[j * dim.lx + i] = d[j];}
\DoxyCodeLine{00952       \textcolor{keywordtype}{int} regionId          = binarized\_p[j * dim.lx + i];}
\DoxyCodeLine{00953       \textcolor{keywordflow}{if} (d[j] > max\_val[regionId]) max\_val[regionId] = d[j];}
\DoxyCodeLine{00954     \}}
\DoxyCodeLine{00955     \textcolor{keyword}{delete}[] d;}
\DoxyCodeLine{00956   \}}
\DoxyCodeLine{00957 }
\DoxyCodeLine{00958   tmp\_dst = dst\_p;}
\DoxyCodeLine{00959   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} r = 0; r <= regionCount; r++) max\_val[r] = std::sqrt(max\_val[r]);}
\DoxyCodeLine{00960 }
\DoxyCodeLine{00961   \textcolor{comment}{/* square root and normalize */}}
\DoxyCodeLine{00962   USHORT* region\_p = binarized\_p;}
\DoxyCodeLine{00963   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx * dim.ly; i++, tmp\_dst++, region\_p++) \{}
\DoxyCodeLine{00964     \textcolor{keywordflow}{if} (max\_val[*region\_p] > 0)}
\DoxyCodeLine{00965       *tmp\_dst = std::sqrt(*tmp\_dst) / max\_val[*region\_p];}
\DoxyCodeLine{00966   \}}
\DoxyCodeLine{00967 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a43218995fa395460297bd3781fde4a8e}\label{class_iwa___soap_bubble_fx_a43218995fa395460297bd3781fde4a8e}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!doCompute@{doCompute}}
\index{doCompute@{doCompute}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{doCompute()}{doCompute()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::do\+Compute (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_t_tile}{TTile}} \&}]{tile,  }\item[{double}]{frame,  }\item[{const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&}]{settings }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}



Implements \mbox{\hyperlink{class_t_raster_fx}{TRaster\+Fx}}.


\begin{DoxyCode}{0}
\DoxyCodeLine{00132                                                                   \{}
\DoxyCodeLine{00133   \textcolor{keywordflow}{if} (!m\_input.isConnected()) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00134   \textcolor{keywordflow}{if} (!m\_shape.isConnected() \&\& !m\_depth.isConnected()) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00135 }
\DoxyCodeLine{00136   \mbox{\hyperlink{class_t_dimension_t}{TDimensionI}} dim(tile.getRaster()-\/>getLx(), tile.getRaster()-\/>getLy());}
\DoxyCodeLine{00137   \mbox{\hyperlink{class_t_rect_t}{TRectD}} bBox(tile.m\_pos, \mbox{\hyperlink{class_t_point_t}{TPointD}}(dim.lx, dim.ly));}
\DoxyCodeLine{00138   QList<TRasterGR8P> allocatedRasList;}
\DoxyCodeLine{00139 }
\DoxyCodeLine{00140   \textcolor{keywordflow}{if} (m\_renderMode-\/>getValue() == RENDER\_MODE\_DEPTH \&\& m\_depth.isConnected()) \{}
\DoxyCodeLine{00141     m\_depth-\/>allocateAndCompute(tile, bBox.getP00(), dim, tile.getRaster(),}
\DoxyCodeLine{00142                                 frame, settings);}
\DoxyCodeLine{00143     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00144   \}}
\DoxyCodeLine{00145 }
\DoxyCodeLine{00146   \textcolor{comment}{/* soap bubble color map */}}
\DoxyCodeLine{00147   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} bubbleColor\_ras(\textcolor{keyword}{sizeof}(\mbox{\hyperlink{structfloat3}{float3}}) * 256 * 256, 1);}
\DoxyCodeLine{00148   bubbleColor\_ras-\/>lock();}
\DoxyCodeLine{00149   allocatedRasList.append(bubbleColor\_ras);}
\DoxyCodeLine{00150   \mbox{\hyperlink{structfloat3}{float3}}* bubbleColor\_p = (\mbox{\hyperlink{structfloat3}{float3}}*)bubbleColor\_ras-\/>getRawData();}
\DoxyCodeLine{00151   \textcolor{keywordflow}{if} (m\_renderMode-\/>getValue() == RENDER\_MODE\_BUBBLE)}
\DoxyCodeLine{00152     calcBubbleMap(bubbleColor\_p, frame, \textcolor{keyword}{true});}
\DoxyCodeLine{00153 }
\DoxyCodeLine{00154   \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00155 }
\DoxyCodeLine{00156   \textcolor{comment}{/* depth map */}}
\DoxyCodeLine{00157   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} depth\_map\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00158   depth\_map\_ras-\/>lock();}
\DoxyCodeLine{00159   allocatedRasList.append(depth\_map\_ras);}
\DoxyCodeLine{00160   \textcolor{keywordtype}{float}* depth\_map\_p = (\textcolor{keywordtype}{float}*)depth\_map\_ras-\/>getRawData();}
\DoxyCodeLine{00161 }
\DoxyCodeLine{00162   \textcolor{comment}{/* alpha map */}}
\DoxyCodeLine{00163   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} alpha\_map\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00164   alpha\_map\_ras-\/>lock();}
\DoxyCodeLine{00165   allocatedRasList.append(alpha\_map\_ras);}
\DoxyCodeLine{00166   \textcolor{keywordtype}{float}* alpha\_map\_p = (\textcolor{keywordtype}{float}*)alpha\_map\_ras-\/>getRawData();}
\DoxyCodeLine{00167 }
\DoxyCodeLine{00168   \textcolor{comment}{/* region indices */}}
\DoxyCodeLine{00169   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} regionIds\_ras(\textcolor{keyword}{sizeof}(USHORT) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00170   regionIds\_ras-\/>lock();}
\DoxyCodeLine{00171   regionIds\_ras-\/>clear();}
\DoxyCodeLine{00172   allocatedRasList.append(regionIds\_ras);}
\DoxyCodeLine{00173   USHORT* regionIds\_p = (USHORT*)regionIds\_ras-\/>getRawData();}
\DoxyCodeLine{00174   QList<QRect> regionBoundingRects;}
\DoxyCodeLine{00175 }
\DoxyCodeLine{00176   \textcolor{comment}{/* if the depth image is connected, use it */}}
\DoxyCodeLine{00177   \textcolor{keywordflow}{if} (m\_depth.isConnected()) \{}
\DoxyCodeLine{00178     \mbox{\hyperlink{class_t_tile}{TTile}} depth\_tile;}
\DoxyCodeLine{00179     m\_depth-\/>allocateAndCompute(depth\_tile, bBox.getP00(), dim,}
\DoxyCodeLine{00180                                 tile.getRaster(), frame, settings);}
\DoxyCodeLine{00181 }
\DoxyCodeLine{00182     \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00183 }
\DoxyCodeLine{00184     \mbox{\hyperlink{class_t_smart_pointer_t}{TRasterP}} depthRas = depth\_tile.getRaster();}
\DoxyCodeLine{00185     depthRas-\/>lock();}
\DoxyCodeLine{00186 }
\DoxyCodeLine{00187     \mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}} depthRas32 = (\mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}})depthRas;}
\DoxyCodeLine{00188     \mbox{\hyperlink{class_t_raster_p_t}{TRaster64P}} depthRas64 = (\mbox{\hyperlink{class_t_raster_p_t}{TRaster64P}})depthRas;}
\DoxyCodeLine{00189     \{}
\DoxyCodeLine{00190       \textcolor{keywordflow}{if} (depthRas32)}
\DoxyCodeLine{00191         convertToBrightness<TRaster32P, TPixel32>(depthRas32, depth\_map\_p,}
\DoxyCodeLine{00192                                                   alpha\_map\_p, dim);}
\DoxyCodeLine{00193       \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (depthRas64)}
\DoxyCodeLine{00194         convertToBrightness<TRaster64P, TPixel64>(depthRas64, depth\_map\_p,}
\DoxyCodeLine{00195                                                   alpha\_map\_p, dim);}
\DoxyCodeLine{00196     \}}
\DoxyCodeLine{00197     depthRas-\/>unlock();}
\DoxyCodeLine{00198 }
\DoxyCodeLine{00199     \textcolor{comment}{// set one region covering whole camera rect}}
\DoxyCodeLine{00200     regionBoundingRects.append(QRect(0, 0, dim.lx, dim.ly));}
\DoxyCodeLine{00201   \}}
\DoxyCodeLine{00202   \textcolor{comment}{/* or, use the shape image to obtain pseudo depth */}}
\DoxyCodeLine{00203   \textcolor{keywordflow}{else} \{ \textcolor{comment}{/* m\_shape.isConnected */}}
\DoxyCodeLine{00204     \textcolor{comment}{/* obtain shape image */}}
\DoxyCodeLine{00205     \mbox{\hyperlink{class_t_tile}{TTile}} shape\_tile;}
\DoxyCodeLine{00206     \{}
\DoxyCodeLine{00207       \mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}} tmp(1, 1);}
\DoxyCodeLine{00208       m\_shape-\/>allocateAndCompute(shape\_tile, bBox.getP00(), dim, tmp, frame,}
\DoxyCodeLine{00209                                   settings);}
\DoxyCodeLine{00210     \}}
\DoxyCodeLine{00211 }
\DoxyCodeLine{00212     \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00213 }
\DoxyCodeLine{00214     processShape(frame, shape\_tile, depth\_map\_p, alpha\_map\_p, regionIds\_p,}
\DoxyCodeLine{00215                  regionBoundingRects, dim, settings);}
\DoxyCodeLine{00216   \}}
\DoxyCodeLine{00217 }
\DoxyCodeLine{00218   \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00219 }
\DoxyCodeLine{00220   \textcolor{comment}{// conpute thickness}}
\DoxyCodeLine{00221   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} thickness\_map\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00222   thickness\_map\_ras-\/>lock();}
\DoxyCodeLine{00223   allocatedRasList.append(thickness\_map\_ras);}
\DoxyCodeLine{00224   \textcolor{keywordtype}{float}* thickness\_map\_p = (\textcolor{keywordtype}{float}*)thickness\_map\_ras-\/>getRawData();}
\DoxyCodeLine{00225 }
\DoxyCodeLine{00226   \mbox{\hyperlink{class_t_smart_pointer_t}{TRasterP}} tileRas = tile.getRaster();}
\DoxyCodeLine{00227   \mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}} ras32 = (\mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}})tileRas;}
\DoxyCodeLine{00228   \mbox{\hyperlink{class_t_raster_p_t}{TRaster64P}} ras64 = (\mbox{\hyperlink{class_t_raster_p_t}{TRaster64P}})tileRas;}
\DoxyCodeLine{00229 }
\DoxyCodeLine{00230   \textcolor{keywordflow}{if} (m\_fit\_thickness-\/>getValue()) \{}
\DoxyCodeLine{00231     \textcolor{comment}{// Get the original bbox of thickness image}}
\DoxyCodeLine{00232     \mbox{\hyperlink{class_t_rect_t}{TRectD}} thickBBox;}
\DoxyCodeLine{00233     m\_input-\/>getBBox(frame, thickBBox, settings);}
\DoxyCodeLine{00234     \textcolor{keywordflow}{if} (thickBBox == TConsts::infiniteRectD)}
\DoxyCodeLine{00235       thickBBox = \mbox{\hyperlink{class_t_rect_t}{TRectD}}(tile.m\_pos, \mbox{\hyperlink{class_t_dimension_t}{TDimensionD}}(tile.getRaster()-\/>getLx(),}
\DoxyCodeLine{00236                                                  tile.getRaster()-\/>getLy()));}
\DoxyCodeLine{00237     \textcolor{comment}{// Compute the thickenss tile.}}
\DoxyCodeLine{00238     \mbox{\hyperlink{class_t_tile}{TTile}} thicknessTile;}
\DoxyCodeLine{00239     \mbox{\hyperlink{class_t_dimension_t}{TDimension}} thickDim(\textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{int}\textcolor{keyword}{>}(thickBBox.getLx() + 0.5),}
\DoxyCodeLine{00240                         \textcolor{keyword}{static\_cast<}\textcolor{keywordtype}{int}\textcolor{keyword}{>}(thickBBox.getLy() + 0.5));}
\DoxyCodeLine{00241     m\_input-\/>allocateAndCompute(thicknessTile, thickBBox.getP00(), thickDim,}
\DoxyCodeLine{00242                                 tile.getRaster(), frame, settings);}
\DoxyCodeLine{00243 }
\DoxyCodeLine{00244     \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00245 }
\DoxyCodeLine{00246     \mbox{\hyperlink{class_t_smart_pointer_t}{TRasterP}} thickRas = thicknessTile.getRaster();}
\DoxyCodeLine{00247 }
\DoxyCodeLine{00248     fitThicknessPatches(thickRas, thickDim, thickness\_map\_p, dim, regionIds\_p,}
\DoxyCodeLine{00249                         regionBoundingRects);}
\DoxyCodeLine{00250   \} \textcolor{keywordflow}{else} \{}
\DoxyCodeLine{00251     \textcolor{comment}{/* compute the thickness input and temporarily store to the tile */}}
\DoxyCodeLine{00252     m\_input-\/>compute(tile, frame, settings);}
\DoxyCodeLine{00253 }
\DoxyCodeLine{00254     \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00255 }
\DoxyCodeLine{00256     \textcolor{keywordflow}{if} (ras32)}
\DoxyCodeLine{00257       convertToBrightness<TRaster32P, TPixel32>(ras32, thickness\_map\_p, \textcolor{keyword}{nullptr},}
\DoxyCodeLine{00258                                                 dim);}
\DoxyCodeLine{00259     \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (ras64)}
\DoxyCodeLine{00260       convertToBrightness<TRaster64P, TPixel64>(ras64, thickness\_map\_p, \textcolor{keyword}{nullptr},}
\DoxyCodeLine{00261                                                 dim);}
\DoxyCodeLine{00262   \}}
\DoxyCodeLine{00263 }
\DoxyCodeLine{00264   \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00265 }
\DoxyCodeLine{00266   \textcolor{comment}{/* process noise */}}
\DoxyCodeLine{00267   processNoise(thickness\_map\_p, depth\_map\_p, dim, frame, settings);}
\DoxyCodeLine{00268 }
\DoxyCodeLine{00269   \textcolor{keywordflow}{if} (checkCancelAndReleaseRaster(allocatedRasList, tile, settings)) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00270 }
\DoxyCodeLine{00271   \textcolor{keywordflow}{if} (ras32)}
\DoxyCodeLine{00272     convertToRaster<TRaster32P, TPixel32>(ras32, thickness\_map\_p, depth\_map\_p,}
\DoxyCodeLine{00273                                           alpha\_map\_p, dim, bubbleColor\_p);}
\DoxyCodeLine{00274   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (ras64)}
\DoxyCodeLine{00275     convertToRaster<TRaster64P, TPixel64>(ras64, thickness\_map\_p, depth\_map\_p,}
\DoxyCodeLine{00276                                           alpha\_map\_p, dim, bubbleColor\_p);}
\DoxyCodeLine{00277 }
\DoxyCodeLine{00278   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < allocatedRasList.size(); i++)}
\DoxyCodeLine{00279     allocatedRasList.at(i)-\/>unlock();}
\DoxyCodeLine{00280 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a95460629d30121662d2d5139da108eaf}\label{class_iwa___soap_bubble_fx_a95460629d30121662d2d5139da108eaf}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!fitThicknessPatches@{fitThicknessPatches}}
\index{fitThicknessPatches@{fitThicknessPatches}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{fitThicknessPatches()}{fitThicknessPatches()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::fit\+Thickness\+Patches (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_t_smart_pointer_t}{TRasterP}}}]{thick\+Ras,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{thick\+Dim,  }\item[{float $\ast$}]{thickness\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{USHORT $\ast$}]{region\+Ids\+\_\+p,  }\item[{QList$<$ QRect $>$ \&}]{region\+Bounding\+Rects }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{01010                                                                               \{}
\DoxyCodeLine{01011   \textcolor{keywordtype}{int} regionCount = regionBoundingRects.size() -\/ 1;}
\DoxyCodeLine{01012 }
\DoxyCodeLine{01013   \textcolor{comment}{// compute resized thickness rasters}}
\DoxyCodeLine{01014   QList<TRasterGR16P> resizedThicks;}
\DoxyCodeLine{01015   resizedThicks.append(\mbox{\hyperlink{class_t_raster_p_t}{TRasterGR16P}}());}
\DoxyCodeLine{01016   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} r = 1; r <= regionCount; r++) \{}
\DoxyCodeLine{01017     QRect regionRect = regionBoundingRects.at(r);}
\DoxyCodeLine{01018     \mbox{\hyperlink{class_t_raster_p_t}{TRaster64P}} resizedThickness(}
\DoxyCodeLine{01019         \mbox{\hyperlink{class_t_dimension_t}{TDimension}}(regionRect.width(), regionRect.height()));}
\DoxyCodeLine{01020     resizedThickness-\/>lock();}
\DoxyCodeLine{01021 }
\DoxyCodeLine{01022     \mbox{\hyperlink{class_t_affine}{TAffine}} aff = \mbox{\hyperlink{class_t_scale}{TScale}}((\textcolor{keywordtype}{double})regionRect.width() / (\textcolor{keywordtype}{double})thickDim.lx,}
\DoxyCodeLine{01023                          (\textcolor{keywordtype}{double})regionRect.height() / (\textcolor{keywordtype}{double})thickDim.ly);}
\DoxyCodeLine{01024 }
\DoxyCodeLine{01025     \textcolor{comment}{// resample the thickenss}}
\DoxyCodeLine{01026     \mbox{\hyperlink{namespace_t_rop_a5e39bc748039afe42001ba44f2d2a073}{TRop::resample}}(resizedThickness, thickRas, aff);}
\DoxyCodeLine{01027 }
\DoxyCodeLine{01028     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} ry = 0; ry < regionRect.height(); ry++) \{}
\DoxyCodeLine{01029       TPixel64* p = resizedThickness-\/>pixels(ry);}
\DoxyCodeLine{01030       \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} rx = 0; rx < regionRect.width(); rx++, p++) \{}
\DoxyCodeLine{01031         \textcolor{keywordtype}{double} val = (double)((*p).r) / (double)(TPixel64::maxChannelValue);}
\DoxyCodeLine{01032       \}}
\DoxyCodeLine{01033     \}}
\DoxyCodeLine{01034 }
\DoxyCodeLine{01035     \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR16P}} thickRas\_gray(}
\DoxyCodeLine{01036         \mbox{\hyperlink{class_t_dimension_t}{TDimension}}(regionRect.width(), regionRect.height()));}
\DoxyCodeLine{01037     thickRas\_gray-\/>lock();}
\DoxyCodeLine{01038     \mbox{\hyperlink{namespace_t_rop_a45a08fb48dd7d33ec629d722081d55c6}{TRop::convert}}(thickRas\_gray, resizedThickness);}
\DoxyCodeLine{01039 }
\DoxyCodeLine{01040     resizedThickness-\/>unlock();}
\DoxyCodeLine{01041     resizedThicks.append(thickRas\_gray);}
\DoxyCodeLine{01042   \}}
\DoxyCodeLine{01043 }
\DoxyCodeLine{01044   \textcolor{keywordtype}{float}* out\_p  = thickness\_map\_p;}
\DoxyCodeLine{01045   USHORT* rId\_p = regionIds\_p;}
\DoxyCodeLine{01046   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{01047     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, out\_p++, rId\_p++) \{}
\DoxyCodeLine{01048       \textcolor{keywordflow}{if} ((*rId\_p) == 0) \{}
\DoxyCodeLine{01049         (*out\_p) = 0.0f;}
\DoxyCodeLine{01050         \textcolor{keywordflow}{continue};}
\DoxyCodeLine{01051       \}}
\DoxyCodeLine{01052       QRect regionBBox = regionBoundingRects.at((\textcolor{keywordtype}{int})(*rId\_p));}
\DoxyCodeLine{01053       QPoint coordInRegion(i -\/ regionBBox.left(), j -\/ regionBBox.top());}
\DoxyCodeLine{01054       \mbox{\hyperlink{class_t_pixel_g_r16}{TPixelGR16}} pix = resizedThicks.at((\textcolor{keywordtype}{int})(*rId\_p))}
\DoxyCodeLine{01055                            -\/>pixels(coordInRegion.y())[coordInRegion.x()];}
\DoxyCodeLine{01056       (*out\_p) = (float)pix.value / (\textcolor{keywordtype}{float})TPixelGR16::maxChannelValue;}
\DoxyCodeLine{01057     \}}
\DoxyCodeLine{01058   \}}
\DoxyCodeLine{01059 }
\DoxyCodeLine{01060   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} r = 1; r <= regionCount; r++) resizedThicks.at(r)-\/>unlock();}
\DoxyCodeLine{01061 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ac2b1bdbb31f99c9aeab603c75ac75967}\label{class_iwa___soap_bubble_fx_ac2b1bdbb31f99c9aeab603c75ac75967}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!make\_noise\_map@{make\_noise\_map}}
\index{make\_noise\_map@{make\_noise\_map}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{make\_noise\_map()}{make\_noise\_map()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::make\+\_\+noise\+\_\+map (\begin{DoxyParamCaption}\item[{float $\ast$}]{noise\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{norm\+\_\+angle\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{const QList$<$ int $>$ \&}]{noise\+\_\+amount,  }\item[{const QList$<$ QSize $>$ \&}]{noise\+\_\+base\+\_\+resolution,  }\item[{int}]{noise\+\_\+sub\+\_\+depth,  }\item[{float $\ast$}]{noise\+\_\+base }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00824                                                                               \{}
\DoxyCodeLine{00825   \textcolor{keywordtype}{float}* dst\_p   = noise\_map\_p;}
\DoxyCodeLine{00826   \textcolor{keywordtype}{float}* depth\_p = depth\_map\_p;}
\DoxyCodeLine{00827   \textcolor{keywordtype}{float}* norm\_p  = norm\_angle\_p;}
\DoxyCodeLine{00828 }
\DoxyCodeLine{00829   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} j = 0; j < dim.ly; j++) \{}
\DoxyCodeLine{00830     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx; i++, dst\_p++, depth\_p++, norm\_p++) \{}
\DoxyCodeLine{00831       \textcolor{comment}{/* Obtain coordinate */}}
\DoxyCodeLine{00832       \textcolor{comment}{/* circumferential direction */}}
\DoxyCodeLine{00833       \textcolor{keywordtype}{float} tmp\_s = (*norm\_p);}
\DoxyCodeLine{00834       \textcolor{comment}{/* distal direction */}}
\DoxyCodeLine{00835       \textcolor{keywordtype}{float} tmp\_t = std::min(1.0f, *depth\_p);}
\DoxyCodeLine{00836 }
\DoxyCodeLine{00837       \textcolor{comment}{/* accumulate noise values */}}
\DoxyCodeLine{00838       *dst\_p                  = 0.0f;}
\DoxyCodeLine{00839       \textcolor{keywordtype}{float}* noise\_layer\_base = noise\_base;}
\DoxyCodeLine{00840       \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} layer = 0; layer < noise\_sub\_depth; layer++) \{}
\DoxyCodeLine{00841         \textcolor{comment}{/* obtain pseudo polar coords */}}
\DoxyCodeLine{00842         QSize reso = noise\_base\_resolution.at(layer);}
\DoxyCodeLine{00843         \textcolor{keywordtype}{float} polar\_s =}
\DoxyCodeLine{00844             tmp\_s * (float)(reso.width()); \textcolor{comment}{/* because it is circumferential */}}
\DoxyCodeLine{00845         \textcolor{keywordtype}{float} polar\_t = tmp\_t * (float)(reso.height() -\/ 1);}
\DoxyCodeLine{00846 }
\DoxyCodeLine{00847         \textcolor{comment}{/* first, compute circumferential position and ratio */}}
\DoxyCodeLine{00848         \textcolor{keywordtype}{int} neighbor\_s[2];}
\DoxyCodeLine{00849         neighbor\_s[0] = (int)std::floor(polar\_s);}
\DoxyCodeLine{00850         neighbor\_s[1] = neighbor\_s[0] + 1;}
\DoxyCodeLine{00851         \textcolor{keywordflow}{if} (neighbor\_s[0] == reso.width()) neighbor\_s[0] = 0;}
\DoxyCodeLine{00852         \textcolor{keywordflow}{if} (neighbor\_s[1] >= reso.width()) neighbor\_s[1] = 0;}
\DoxyCodeLine{00853         \textcolor{keywordtype}{float} ratio\_s = polar\_s -\/ std::floor(polar\_s);}
\DoxyCodeLine{00854 }
\DoxyCodeLine{00855         \textcolor{comment}{/* second, compute distal position and ratio */}}
\DoxyCodeLine{00856         \textcolor{keywordtype}{int} neighbor\_t[2];}
\DoxyCodeLine{00857         neighbor\_t[0] = (int)std::floor(polar\_t);}
\DoxyCodeLine{00858         neighbor\_t[1] = neighbor\_t[0] + 1;}
\DoxyCodeLine{00859         \textcolor{keywordflow}{if} (neighbor\_t[1] == reso.height()) neighbor\_t[1] -\/= 1;}
\DoxyCodeLine{00860         \textcolor{keywordtype}{float} ratio\_t = polar\_t -\/ std::floor(polar\_t);}
\DoxyCodeLine{00861 }
\DoxyCodeLine{00862         *dst\_p += noise\_interp(neighbor\_s[0], neighbor\_s[1], neighbor\_t[0],}
\DoxyCodeLine{00863                                neighbor\_t[1], ratio\_s, ratio\_t,}
\DoxyCodeLine{00864                                noise\_layer\_base, reso.width());}
\DoxyCodeLine{00865 }
\DoxyCodeLine{00866         \textcolor{comment}{/* offset noise pointer */}}
\DoxyCodeLine{00867         noise\_layer\_base += noise\_amount[layer];}
\DoxyCodeLine{00868       \}}
\DoxyCodeLine{00869     \}}
\DoxyCodeLine{00870   \}}
\DoxyCodeLine{00871 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a2180f84509c04eec7788b9bb0d43c319}\label{class_iwa___soap_bubble_fx_a2180f84509c04eec7788b9bb0d43c319}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!noise\_interp@{noise\_interp}}
\index{noise\_interp@{noise\_interp}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{noise\_interp()}{noise\_interp()}}
{\footnotesize\ttfamily float Iwa\+\_\+\+Soap\+Bubble\+Fx\+::noise\+\_\+interp (\begin{DoxyParamCaption}\item[{int}]{left,  }\item[{int}]{right,  }\item[{int}]{bottom,  }\item[{int}]{top,  }\item[{float}]{ratio\+\_\+s,  }\item[{float}]{ratio\+\_\+t,  }\item[{float $\ast$}]{noise\+\_\+layer\+\_\+base,  }\item[{int}]{noise\+\_\+dim\+\_\+x }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00877                                                                                \{}
\DoxyCodeLine{00878   \textcolor{keyword}{struct }Locals \{}
\DoxyCodeLine{00879     \textcolor{keywordtype}{int} \_dim\_x;}
\DoxyCodeLine{00880     \textcolor{keyword}{const} \textcolor{keywordtype}{float}* \_noise\_p;}
\DoxyCodeLine{00881     \textcolor{keywordtype}{float} data(\textcolor{keywordtype}{int} x, \textcolor{keywordtype}{int} y) \{ \textcolor{keywordflow}{return} \_noise\_p[y * \_dim\_x + x]; \}}
\DoxyCodeLine{00882   \} locals = \{noise\_dim\_x, noise\_layer\_base\};}
\DoxyCodeLine{00883 }
\DoxyCodeLine{00884   \textcolor{keywordtype}{float} c\_ratio\_s = (1.0f -\/ cosf(ratio\_s * PI)) * 0.5f;}
\DoxyCodeLine{00885   \textcolor{keywordtype}{float} c\_ratio\_t = (1.0f -\/ cosf(ratio\_t * PI)) * 0.5f;}
\DoxyCodeLine{00886 }
\DoxyCodeLine{00887   \textcolor{keywordflow}{return} locals.data(left, bottom) * (1.0f -\/ c\_ratio\_s) * (1.0f -\/ c\_ratio\_t) +}
\DoxyCodeLine{00888          locals.data(right, bottom) * c\_ratio\_s * (1.0f -\/ c\_ratio\_t) +}
\DoxyCodeLine{00889          locals.data(left, top) * (1.0f -\/ c\_ratio\_s) * c\_ratio\_t +}
\DoxyCodeLine{00890          locals.data(right, top) * c\_ratio\_s * c\_ratio\_t;}
\DoxyCodeLine{00891 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a19d8844f248a334538d6cc9d21d6e59d}\label{class_iwa___soap_bubble_fx_a19d8844f248a334538d6cc9d21d6e59d}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!onObsoleteParamLoaded@{onObsoleteParamLoaded}}
\index{onObsoleteParamLoaded@{onObsoleteParamLoaded}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{onObsoleteParamLoaded()}{onObsoleteParamLoaded()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::on\+Obsolete\+Param\+Loaded (\begin{DoxyParamCaption}\item[{const std\+::string \&}]{param\+Name }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}



Reimplemented from \mbox{\hyperlink{class_t_fx}{TFx}}.


\begin{DoxyCode}{0}
\DoxyCodeLine{00997                                                                        \{}
\DoxyCodeLine{00998   \textcolor{keywordflow}{if} (paramName != \textcolor{stringliteral}{"{}maskCenter"{}}) \textcolor{keywordflow}{return};}
\DoxyCodeLine{00999   \textcolor{comment}{// if "{}mask center"{} was ON, set a key frame to the center opacity in order to}}
\DoxyCodeLine{01000   \textcolor{comment}{// get the same result.}}
\DoxyCodeLine{01001   \textcolor{keywordflow}{if} (m\_mask\_center-\/>getValue()) m\_center\_opacity-\/>setValue(0.0, 0.0);}
\DoxyCodeLine{01002 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ab09a094cf6e3a10f88a4d1c2942ef9cc}\label{class_iwa___soap_bubble_fx_ab09a094cf6e3a10f88a4d1c2942ef9cc}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!processNoise@{processNoise}}
\index{processNoise@{processNoise}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{processNoise()}{processNoise()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::process\+Noise (\begin{DoxyParamCaption}\item[{float $\ast$}]{thickness\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{double}]{frame,  }\item[{const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&}]{settings }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00683                                                                      \{}
\DoxyCodeLine{00684   \textcolor{keywordtype}{float} noise\_depth\_mix\_ratio = (float)m\_noise\_depth\_mix\_ratio-\/>getValue(frame);}
\DoxyCodeLine{00685   \textcolor{keywordtype}{float} noise\_thickness\_mix\_ratio =}
\DoxyCodeLine{00686       (float)m\_noise\_thickness\_mix\_ratio-\/>getValue(frame);}
\DoxyCodeLine{00687 }
\DoxyCodeLine{00688   \textcolor{comment}{/* If the noise ratio is 0, do nothing and return */}}
\DoxyCodeLine{00689   \textcolor{keywordflow}{if} (noise\_depth\_mix\_ratio == 0.0f \&\& noise\_thickness\_mix\_ratio == 0.0f)}
\DoxyCodeLine{00690     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00691 }
\DoxyCodeLine{00692   \textcolor{keywordtype}{int} noise\_sub\_depth    = m\_noise\_sub\_depth-\/>getValue();}
\DoxyCodeLine{00693   \textcolor{keywordtype}{int} noise\_resolution\_s = (int)m\_noise\_resolution\_s-\/>getValue(frame);}
\DoxyCodeLine{00694   \textcolor{keywordtype}{int} noise\_resolution\_t = (int)m\_noise\_resolution\_t-\/>getValue(frame);}
\DoxyCodeLine{00695   \textcolor{keywordtype}{float} noise\_composite\_ratio =}
\DoxyCodeLine{00696       (float)m\_noise\_sub\_composite\_ratio-\/>getValue(frame);}
\DoxyCodeLine{00697   \textcolor{keywordtype}{float} noise\_evolution = (float)m\_noise\_evolution-\/>getValue(frame);}
\DoxyCodeLine{00698 }
\DoxyCodeLine{00699   \textcolor{comment}{/* initialize the phase map */}}
\DoxyCodeLine{00700   QList<int> noise\_amount;}
\DoxyCodeLine{00701   QList<QSize> noise\_base\_resolution;}
\DoxyCodeLine{00702   \textcolor{keywordtype}{int} whole\_noise\_amount = 0;}
\DoxyCodeLine{00703 }
\DoxyCodeLine{00704   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} layer = 0; layer < noise\_sub\_depth; layer++) \{}
\DoxyCodeLine{00705     \textcolor{comment}{/* noise resolution */}}
\DoxyCodeLine{00706     \textcolor{comment}{/* width: circumferential direction   height:distal direction */}}
\DoxyCodeLine{00707     QSize size;}
\DoxyCodeLine{00708     size.setWidth(std::pow(2, layer) * noise\_resolution\_s);}
\DoxyCodeLine{00709     size.setHeight(std::pow(2, layer) * noise\_resolution\_t + 1);}
\DoxyCodeLine{00710     noise\_base\_resolution.append(size);}
\DoxyCodeLine{00711     \textcolor{keywordtype}{int} amount = size.width() * size.height();}
\DoxyCodeLine{00712     noise\_amount.append(amount);}
\DoxyCodeLine{00713     whole\_noise\_amount += amount;}
\DoxyCodeLine{00714   \}}
\DoxyCodeLine{00715 }
\DoxyCodeLine{00716   \textcolor{keywordtype}{float}* noise\_phases = \textcolor{keyword}{new} \textcolor{keywordtype}{float}[whole\_noise\_amount];}
\DoxyCodeLine{00717   \textcolor{keywordtype}{float}* ph\_p         = noise\_phases;}
\DoxyCodeLine{00718 }
\DoxyCodeLine{00719   srand(0);}
\DoxyCodeLine{00720   \textcolor{comment}{/* Set the phase differences (0-\/2) */}}
\DoxyCodeLine{00721   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < whole\_noise\_amount; i++, ph\_p++) \{}
\DoxyCodeLine{00722     *ph\_p = (float)rand() / (float)RAND\_MAX * 2.0f * PI;}
\DoxyCodeLine{00723   \}}
\DoxyCodeLine{00724 }
\DoxyCodeLine{00725   \textcolor{comment}{/* make noise base */}}
\DoxyCodeLine{00726   \textcolor{comment}{/* compute composite ratio of each layer */}}
\DoxyCodeLine{00727   QList<float> comp\_ratios;}
\DoxyCodeLine{00728   comp\_ratios.append(10.0f);}
\DoxyCodeLine{00729   \textcolor{keywordtype}{float} ratio\_sum = 10.0f;}
\DoxyCodeLine{00730   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 1; i < noise\_sub\_depth; i++) \{}
\DoxyCodeLine{00731     comp\_ratios.append(comp\_ratios.last() * noise\_composite\_ratio);}
\DoxyCodeLine{00732     ratio\_sum += comp\_ratios.last();}
\DoxyCodeLine{00733   \}}
\DoxyCodeLine{00734   \textcolor{comment}{/* normalize */}}
\DoxyCodeLine{00735   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < noise\_sub\_depth; i++) comp\_ratios[i] /= ratio\_sum;}
\DoxyCodeLine{00736 }
\DoxyCodeLine{00737   \textcolor{keywordtype}{float}* noise\_base = \textcolor{keyword}{new} \textcolor{keywordtype}{float}[whole\_noise\_amount];}
\DoxyCodeLine{00738 }
\DoxyCodeLine{00739   \textcolor{keywordtype}{float}* nb\_p = noise\_base;}
\DoxyCodeLine{00740   ph\_p        = noise\_phases;}
\DoxyCodeLine{00741 }
\DoxyCodeLine{00742   \textcolor{comment}{/* for each sub-\/noise layer */}}
\DoxyCodeLine{00743   \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} layer = 0; layer < noise\_sub\_depth; layer++) \{}
\DoxyCodeLine{00744     \textcolor{keywordtype}{float} tmp\_evolution = noise\_evolution * (float)(layer + 1);}
\DoxyCodeLine{00745     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < noise\_amount[layer]; i++, nb\_p++, ph\_p++) \{}
\DoxyCodeLine{00746       *nb\_p = comp\_ratios[layer] * (cosf(tmp\_evolution + *ph\_p) / 2.0f + 0.5f);}
\DoxyCodeLine{00747     \}}
\DoxyCodeLine{00748   \}}
\DoxyCodeLine{00749   \textcolor{keyword}{delete}[] noise\_phases;}
\DoxyCodeLine{00750 }
\DoxyCodeLine{00751   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} norm\_angle\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00752   norm\_angle\_ras-\/>lock();}
\DoxyCodeLine{00753   \textcolor{keywordtype}{float}* norm\_angle\_p = (\textcolor{keywordtype}{float}*)norm\_angle\_ras-\/>getRawData();}
\DoxyCodeLine{00754 }
\DoxyCodeLine{00755   calc\_norm\_angle(norm\_angle\_p, depth\_map\_p, dim, settings.\mbox{\hyperlink{class_t_render_settings_a52dd41881bbf6aaf953fe300be2e233e}{m\_shrinkX}});}
\DoxyCodeLine{00756 }
\DoxyCodeLine{00757   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} noise\_map\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00758   noise\_map\_ras-\/>lock();}
\DoxyCodeLine{00759   \textcolor{keywordtype}{float}* noise\_map\_p = (\textcolor{keywordtype}{float}*)noise\_map\_ras-\/>getRawData();}
\DoxyCodeLine{00760 }
\DoxyCodeLine{00761   make\_noise\_map(noise\_map\_p, depth\_map\_p, norm\_angle\_p, dim, noise\_amount,}
\DoxyCodeLine{00762                  noise\_base\_resolution, noise\_sub\_depth, noise\_base);}
\DoxyCodeLine{00763 }
\DoxyCodeLine{00764   norm\_angle\_ras-\/>unlock();}
\DoxyCodeLine{00765   \textcolor{keyword}{delete}[] noise\_base;}
\DoxyCodeLine{00766 }
\DoxyCodeLine{00767   \textcolor{comment}{/* composite with perlin noise */}}
\DoxyCodeLine{00768   add\_noise(thickness\_map\_p, depth\_map\_p, dim, noise\_map\_p,}
\DoxyCodeLine{00769             noise\_thickness\_mix\_ratio, noise\_depth\_mix\_ratio);}
\DoxyCodeLine{00770 }
\DoxyCodeLine{00771   noise\_map\_ras-\/>unlock();}
\DoxyCodeLine{00772 \}}

\end{DoxyCode}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ae35a57d72a12840d5d839187548a7f1b}\label{class_iwa___soap_bubble_fx_ae35a57d72a12840d5d839187548a7f1b}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!processShape@{processShape}}
\index{processShape@{processShape}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{processShape()}{processShape()}}
{\footnotesize\ttfamily void Iwa\+\_\+\+Soap\+Bubble\+Fx\+::process\+Shape (\begin{DoxyParamCaption}\item[{double}]{frame,  }\item[{\mbox{\hyperlink{class_t_tile}{TTile}} \&}]{shape\+\_\+tile,  }\item[{float $\ast$}]{depth\+\_\+map\+\_\+p,  }\item[{float $\ast$}]{alpha\+\_\+map\+\_\+p,  }\item[{USHORT $\ast$}]{region\+Ids\+\_\+p,  }\item[{QList$<$ QRect $>$ \&}]{region\+Bounding\+Rects,  }\item[{\mbox{\hyperlink{class_t_dimension_t}{TDimensionI}}}]{dim,  }\item[{const \mbox{\hyperlink{class_t_render_settings}{TRender\+Settings}} \&}]{settings }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [protected]}}


\begin{DoxyCode}{0}
\DoxyCodeLine{00414                                                                      \{}
\DoxyCodeLine{00415   \mbox{\hyperlink{class_t_raster_p_t}{TRaster32P}} shapeRas = shape\_tile.getRaster();}
\DoxyCodeLine{00416   shapeRas-\/>lock();}
\DoxyCodeLine{00417 }
\DoxyCodeLine{00418   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} distance\_ras(\textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * dim.lx * dim.ly, 1);}
\DoxyCodeLine{00419   distance\_ras-\/>lock();}
\DoxyCodeLine{00420   \textcolor{keywordtype}{float}* distance\_p = (\textcolor{keywordtype}{float}*)distance\_ras-\/>getRawData();}
\DoxyCodeLine{00421 }
\DoxyCodeLine{00422   \textcolor{keywordtype}{float} binarize\_thres = (float)m\_binarize\_threshold-\/>getValue(frame);}
\DoxyCodeLine{00423 }
\DoxyCodeLine{00424   \textcolor{keywordtype}{int} regionCount =}
\DoxyCodeLine{00425       do\_binarize(shapeRas, regionIds\_p, binarize\_thres, distance\_p,}
\DoxyCodeLine{00426                   alpha\_map\_p, regionBoundingRects, dim);}
\DoxyCodeLine{00427 }
\DoxyCodeLine{00428   shapeRas-\/>unlock();}
\DoxyCodeLine{00429 }
\DoxyCodeLine{00430   \textcolor{keywordflow}{if} (settings.m\_isCanceled \&\& *settings.m\_isCanceled) \{}
\DoxyCodeLine{00431     distance\_ras-\/>unlock();}
\DoxyCodeLine{00432     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00433   \}}
\DoxyCodeLine{00434 }
\DoxyCodeLine{00435   do\_distance\_transform(distance\_p, regionIds\_p, regionCount, dim, frame);}
\DoxyCodeLine{00436 }
\DoxyCodeLine{00437   \textcolor{keywordflow}{if} (settings.m\_isCanceled \&\& *settings.m\_isCanceled) \{}
\DoxyCodeLine{00438     distance\_ras-\/>unlock();}
\DoxyCodeLine{00439     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00440   \}}
\DoxyCodeLine{00441 }
\DoxyCodeLine{00442   \textcolor{keywordtype}{float} center\_opacity = (float)m\_center\_opacity-\/>getValue(frame);}
\DoxyCodeLine{00443   \textcolor{keywordflow}{if} (center\_opacity != 1.0f)}
\DoxyCodeLine{00444     applyDistanceToAlpha(distance\_p, alpha\_map\_p, dim, center\_opacity);}
\DoxyCodeLine{00445 }
\DoxyCodeLine{00446   \textcolor{comment}{/* create blur filter */}}
\DoxyCodeLine{00447   \textcolor{keywordtype}{float} blur\_radius = (float)m\_blur\_radius-\/>getValue(frame) *}
\DoxyCodeLine{00448                       std::sqrt(std::abs((\textcolor{keywordtype}{float})settings.\mbox{\hyperlink{class_t_render_settings_a1250181bf3fe8e05db005d5faa76b3ea}{m\_affine}}.det()));}
\DoxyCodeLine{00449 }
\DoxyCodeLine{00450   \textcolor{comment}{/* if blur radius is 0, set the distance image to the depth image as-\/is */}}
\DoxyCodeLine{00451   \textcolor{keywordflow}{if} (blur\_radius == 0.0f) \{}
\DoxyCodeLine{00452     \textcolor{keywordtype}{float} power      = (float)m\_blur\_power-\/>getValue(frame);}
\DoxyCodeLine{00453     \textcolor{keywordtype}{float}* tmp\_depth = depth\_map\_p;}
\DoxyCodeLine{00454     \textcolor{keywordtype}{float}* tmp\_dist  = distance\_p;}
\DoxyCodeLine{00455     USHORT* rid\_p    = regionIds\_p;}
\DoxyCodeLine{00456     \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < dim.lx * dim.ly;}
\DoxyCodeLine{00457          i++, tmp\_depth++, tmp\_dist++, rid\_p++) \{}
\DoxyCodeLine{00458       \textcolor{keywordflow}{if} (*rid\_p == 0)}
\DoxyCodeLine{00459         *tmp\_depth = 0.0f;}
\DoxyCodeLine{00460       \textcolor{keywordflow}{else}}
\DoxyCodeLine{00461         *tmp\_depth = 1.0f -\/ std::pow(*tmp\_dist, power);}
\DoxyCodeLine{00462     \}}
\DoxyCodeLine{00463     distance\_ras-\/>unlock();}
\DoxyCodeLine{00464     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00465   \}}
\DoxyCodeLine{00466 }
\DoxyCodeLine{00467   \textcolor{keywordtype}{int} blur\_filter\_size = (int)std::floor(blur\_radius) * 2 + 1;}
\DoxyCodeLine{00468   \mbox{\hyperlink{class_t_raster_p_t}{TRasterGR8P}} blur\_filter\_ras(}
\DoxyCodeLine{00469       \textcolor{keyword}{sizeof}(\textcolor{keywordtype}{float}) * blur\_filter\_size * blur\_filter\_size, 1);}
\DoxyCodeLine{00470   blur\_filter\_ras-\/>lock();}
\DoxyCodeLine{00471   \textcolor{keywordtype}{float}* blur\_filter\_p = (\textcolor{keywordtype}{float}*)blur\_filter\_ras-\/>getRawData();}
\DoxyCodeLine{00472 }
\DoxyCodeLine{00473   do\_createBlurFilter(blur\_filter\_p, blur\_filter\_size, blur\_radius);}
\DoxyCodeLine{00474 }
\DoxyCodeLine{00475   \textcolor{keywordflow}{if} (settings.m\_isCanceled \&\& *settings.m\_isCanceled) \{}
\DoxyCodeLine{00476     blur\_filter\_ras-\/>unlock();}
\DoxyCodeLine{00477     distance\_ras-\/>unlock();}
\DoxyCodeLine{00478     \textcolor{keywordflow}{return};}
\DoxyCodeLine{00479   \}}
\DoxyCodeLine{00480 }
\DoxyCodeLine{00481   \textcolor{comment}{/* blur filtering, normarize \& power */}}
\DoxyCodeLine{00482   do\_applyFilter(depth\_map\_p, dim, distance\_p, regionIds\_p, blur\_filter\_p,}
\DoxyCodeLine{00483                  blur\_filter\_size, frame, settings);}
\DoxyCodeLine{00484 }
\DoxyCodeLine{00485   distance\_ras-\/>unlock();}
\DoxyCodeLine{00486   blur\_filter\_ras-\/>unlock();}
\DoxyCodeLine{00487 \}}

\end{DoxyCode}


\doxysubsection{Member Data Documentation}
\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ad10040d50bf9f968d3565352342f4425}\label{class_iwa___soap_bubble_fx_ad10040d50bf9f968d3565352342f4425}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_binarize\_threshold@{m\_binarize\_threshold}}
\index{m\_binarize\_threshold@{m\_binarize\_threshold}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_binarize\_threshold}{m\_binarize\_threshold}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+binarize\+\_\+threshold\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ab615dfa01de4264498ebbd0f35c38997}\label{class_iwa___soap_bubble_fx_ab615dfa01de4264498ebbd0f35c38997}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_blur\_power@{m\_blur\_power}}
\index{m\_blur\_power@{m\_blur\_power}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_blur\_power}{m\_blur\_power}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+blur\+\_\+power\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a1bbae1604555d5bef6426929392aa58d}\label{class_iwa___soap_bubble_fx_a1bbae1604555d5bef6426929392aa58d}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_blur\_radius@{m\_blur\_radius}}
\index{m\_blur\_radius@{m\_blur\_radius}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_blur\_radius}{m\_blur\_radius}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+blur\+\_\+radius\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a514987f136243ee8ba2651b5b816c865}\label{class_iwa___soap_bubble_fx_a514987f136243ee8ba2651b5b816c865}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_center\_opacity@{m\_center\_opacity}}
\index{m\_center\_opacity@{m\_center\_opacity}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_center\_opacity}{m\_center\_opacity}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+center\+\_\+opacity\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a639ace2f5f8e2c3e4b6c6afaad47f7d7}\label{class_iwa___soap_bubble_fx_a639ace2f5f8e2c3e4b6c6afaad47f7d7}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_depth@{m\_depth}}
\index{m\_depth@{m\_depth}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_depth}{m\_depth}}
{\footnotesize\ttfamily \mbox{\hyperlink{class_t_raster_fx_port}{TRaster\+Fx\+Port}} Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+depth\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a9e206e1af94cebcc89a79b62ba5b53a4}\label{class_iwa___soap_bubble_fx_a9e206e1af94cebcc89a79b62ba5b53a4}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_fit\_thickness@{m\_fit\_thickness}}
\index{m\_fit\_thickness@{m\_fit\_thickness}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_fit\_thickness}{m\_fit\_thickness}}
{\footnotesize\ttfamily TBool\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+fit\+\_\+thickness\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a33683b0bf02207e56e95e373beeba754}\label{class_iwa___soap_bubble_fx_a33683b0bf02207e56e95e373beeba754}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_mask\_center@{m\_mask\_center}}
\index{m\_mask\_center@{m\_mask\_center}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_mask\_center}{m\_mask\_center}}
{\footnotesize\ttfamily TBool\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+mask\+\_\+center\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_aa4d347aa594eee35c9b6e5ddd203feea}\label{class_iwa___soap_bubble_fx_aa4d347aa594eee35c9b6e5ddd203feea}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_multi\_source@{m\_multi\_source}}
\index{m\_multi\_source@{m\_multi\_source}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_multi\_source}{m\_multi\_source}}
{\footnotesize\ttfamily TBool\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+multi\+\_\+source\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a140d2ab4c3f76ce781b219a9563538ce}\label{class_iwa___soap_bubble_fx_a140d2ab4c3f76ce781b219a9563538ce}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_depth\_mix\_ratio@{m\_noise\_depth\_mix\_ratio}}
\index{m\_noise\_depth\_mix\_ratio@{m\_noise\_depth\_mix\_ratio}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_depth\_mix\_ratio}{m\_noise\_depth\_mix\_ratio}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+depth\+\_\+mix\+\_\+ratio\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ae81ca0b39909a620c1646203c4f75278}\label{class_iwa___soap_bubble_fx_ae81ca0b39909a620c1646203c4f75278}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_evolution@{m\_noise\_evolution}}
\index{m\_noise\_evolution@{m\_noise\_evolution}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_evolution}{m\_noise\_evolution}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+evolution\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a650f4e47e691e8b08893dab2161dd1eb}\label{class_iwa___soap_bubble_fx_a650f4e47e691e8b08893dab2161dd1eb}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_resolution\_s@{m\_noise\_resolution\_s}}
\index{m\_noise\_resolution\_s@{m\_noise\_resolution\_s}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_resolution\_s}{m\_noise\_resolution\_s}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+resolution\+\_\+s\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a6373c6cd07082a0374404c793e21117d}\label{class_iwa___soap_bubble_fx_a6373c6cd07082a0374404c793e21117d}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_resolution\_t@{m\_noise\_resolution\_t}}
\index{m\_noise\_resolution\_t@{m\_noise\_resolution\_t}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_resolution\_t}{m\_noise\_resolution\_t}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+resolution\+\_\+t\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a088ee27c56c182ec5f622c74135fe450}\label{class_iwa___soap_bubble_fx_a088ee27c56c182ec5f622c74135fe450}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_sub\_composite\_ratio@{m\_noise\_sub\_composite\_ratio}}
\index{m\_noise\_sub\_composite\_ratio@{m\_noise\_sub\_composite\_ratio}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_sub\_composite\_ratio}{m\_noise\_sub\_composite\_ratio}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+sub\+\_\+composite\+\_\+ratio\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a43eeedad2a7fd03abe719733826ba3bb}\label{class_iwa___soap_bubble_fx_a43eeedad2a7fd03abe719733826ba3bb}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_sub\_depth@{m\_noise\_sub\_depth}}
\index{m\_noise\_sub\_depth@{m\_noise\_sub\_depth}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_sub\_depth}{m\_noise\_sub\_depth}}
{\footnotesize\ttfamily TInt\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+sub\+\_\+depth\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a8e50788effead5dd8669d30ca96e758b}\label{class_iwa___soap_bubble_fx_a8e50788effead5dd8669d30ca96e758b}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_noise\_thickness\_mix\_ratio@{m\_noise\_thickness\_mix\_ratio}}
\index{m\_noise\_thickness\_mix\_ratio@{m\_noise\_thickness\_mix\_ratio}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_noise\_thickness\_mix\_ratio}{m\_noise\_thickness\_mix\_ratio}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+noise\+\_\+thickness\+\_\+mix\+\_\+ratio\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ad29b0f4011204b087498ecb886a38751}\label{class_iwa___soap_bubble_fx_ad29b0f4011204b087498ecb886a38751}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_normal\_sample\_distance@{m\_normal\_sample\_distance}}
\index{m\_normal\_sample\_distance@{m\_normal\_sample\_distance}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_normal\_sample\_distance}{m\_normal\_sample\_distance}}
{\footnotesize\ttfamily TInt\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+normal\+\_\+sample\+\_\+distance\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_a557b99d731890b4ea928e01e9bb58604}\label{class_iwa___soap_bubble_fx_a557b99d731890b4ea928e01e9bb58604}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_renderMode@{m\_renderMode}}
\index{m\_renderMode@{m\_renderMode}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_renderMode}{m\_renderMode}}
{\footnotesize\ttfamily \mbox{\hyperlink{class_t_int_enum_param_p}{TInt\+Enum\+ParamP}} Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+render\+Mode\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_ae4ddfd000ea66b95fae5491a21cedf23}\label{class_iwa___soap_bubble_fx_ae4ddfd000ea66b95fae5491a21cedf23}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_shape@{m\_shape}}
\index{m\_shape@{m\_shape}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_shape}{m\_shape}}
{\footnotesize\ttfamily \mbox{\hyperlink{class_t_raster_fx_port}{TRaster\+Fx\+Port}} Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+shape\hspace{0.3cm}{\ttfamily [protected]}}

\mbox{\Hypertarget{class_iwa___soap_bubble_fx_af6b9950220a79732c34b004be7a14f0a}\label{class_iwa___soap_bubble_fx_af6b9950220a79732c34b004be7a14f0a}} 
\index{Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}!m\_shape\_aspect\_ratio@{m\_shape\_aspect\_ratio}}
\index{m\_shape\_aspect\_ratio@{m\_shape\_aspect\_ratio}!Iwa\_SoapBubbleFx@{Iwa\_SoapBubbleFx}}
\doxysubsubsection{\texorpdfstring{m\_shape\_aspect\_ratio}{m\_shape\_aspect\_ratio}}
{\footnotesize\ttfamily TDouble\+ParamP Iwa\+\_\+\+Soap\+Bubble\+Fx\+::m\+\_\+shape\+\_\+aspect\+\_\+ratio\hspace{0.3cm}{\ttfamily [protected]}}



The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
E\+:/opentoonz/toonz/sources/stdfx/iwa\+\_\+soapbubblefx.\+h\item 
E\+:/opentoonz/toonz/sources/stdfx/iwa\+\_\+soapbubblefx.\+cpp\end{DoxyCompactItemize}
