aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/ps__tail__dot_8cpp-source.html
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/ps__tail__dot_8cpp-source.html
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to 'docs/doxygen/nel/ps__tail__dot_8cpp-source.html')
-rw-r--r--docs/doxygen/nel/ps__tail__dot_8cpp-source.html566
1 files changed, 566 insertions, 0 deletions
diff --git a/docs/doxygen/nel/ps__tail__dot_8cpp-source.html b/docs/doxygen/nel/ps__tail__dot_8cpp-source.html
new file mode 100644
index 00000000..e65e468c
--- /dev/null
+++ b/docs/doxygen/nel/ps__tail__dot_8cpp-source.html
@@ -0,0 +1,566 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : docs</TITLE>
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+&nbsp;
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Documentation</B></TD>
+ <TD ALIGN=RIGHT>&nbsp;</td>
+</tr></table>
+<!-- Generated by Doxygen 1.2.14 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> &nbsp; </center>
+<hr><h1>ps_tail_dot.cpp</h1><a href="ps__tail__dot_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
+00007 <font class="comment">/* Copyright, 2001 Nevrax Ltd.</font>
+00008 <font class="comment"> *</font>
+00009 <font class="comment"> * This file is part of NEVRAX NEL.</font>
+00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font>
+00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font>
+00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font>
+00013 <font class="comment"> * any later version.</font>
+00014 <font class="comment"></font>
+00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font>
+00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font>
+00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font>
+00018 <font class="comment"> * General Public License for more details.</font>
+00019 <font class="comment"></font>
+00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font>
+00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font>
+00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font>
+00023 <font class="comment"> * MA 02111-1307, USA.</font>
+00024 <font class="comment"> */</font>
+00025
+00026 <font class="preprocessor">#include "<a class="code" href="std3d_8h.html">std3d.h</a>"</font>
+00027
+00028 <font class="preprocessor">#include "<a class="code" href="ps__tail__dot_8h.html">3d/ps_tail_dot.h</a>"</font>
+00029 <font class="preprocessor">#include "<a class="code" href="ps__macro_8h.html">3d/ps_macro.h</a>"</font>
+00030 <font class="preprocessor">#include "<a class="code" href="driver_8h.html">3d/driver.h</a>"</font>
+00031 <font class="preprocessor">#include "<a class="code" href="particle__system_8h.html">3d/particle_system.h</a>"</font>
+00032 <font class="preprocessor">#include "<a class="code" href="texture__mem_8h.html">3d/texture_mem.h</a>"</font>
+00033 <font class="preprocessor">#include "<a class="code" href="smart__ptr_8h.html">nel/misc/smart_ptr.h</a>"</font>
+00034
+00035 <font class="preprocessor">#include &lt;memory&gt;</font>
+00036
+00037 <font class="keyword">namespace </font>NL3D
+00038 {
+00039 <font class="keyword">static</font> <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> <a class="code" href="namespaceNL3D.html#a214">GradientB2W</a>[] = {<a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a>(0, 0, 0, 0), <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a>(255, 255, 255, 255) };
+00040
+00042 <font class="keyword">static</font> ITexture *<a class="code" href="namespaceNL3D.html#a445">CreateGradientTexture</a>()
+00043 {
+00044 std::auto_ptr&lt;CTextureMem&gt; tex(<font class="keyword">new</font> CTextureMem((uint8 *) &amp;GradientB2W,
+00045 <font class="keyword">sizeof</font>(GradientB2W),
+00046 <font class="keyword">false</font>, <font class="comment">/* dont delete */</font>
+00047 <font class="keyword">false</font>, <font class="comment">/* not a file */</font>
+00048 2, 1)
+00049 );
+00050 tex-&gt;setWrapS(ITexture::Clamp);
+00051 tex-&gt;setShareName(<font class="stringliteral">"#GradBW"</font>);
+00052 <font class="keywordflow">return</font> tex.release();
+00053 }
+00054
+00055
+00057 <font class="comment">// CPSTailDot implementation //</font>
+00059 <font class="comment"></font>
+<a name="l00060"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_3">00060</a> CPSTailDot::TVBMap CPSTailDot::_VBMap; <font class="comment">// index / vertex buffers with no color</font>
+<a name="l00061"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_4">00061</a> CPSTailDot::TVBMap CPSTailDot::_FadedVBMap; <font class="comment">// index / vertex buffers for constant color with fading</font>
+<a name="l00062"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_5">00062</a> CPSTailDot::TVBMap CPSTailDot::_ColoredVBMap; <font class="comment">// index / vertex buffer + colors</font>
+<a name="l00063"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_6">00063</a> CPSTailDot::TVBMap CPSTailDot::_FadedColoredVBMap; <font class="comment">// index / vertex buffer + faded colors</font>
+00064
+00065 <font class="comment">//======================================================= </font>
+<a name="l00066"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z736_0">00066</a> CPSTailDot::CPSTailDot() : _ColorFading(false), _GlobalColor(false), _Touch(true)
+00067 {
+00068 <a class="code" href="classNL3D_1_1CPSRibbonBase.html#z729_2">setInterpolationMode</a>(<a class="code" href="classNL3D_1_1CPSRibbonBase.html#s7s3">Linear</a>);
+00069 <a class="code" href="classNL3D_1_1CPSRibbonBase.html#z730_2">setSegDuration</a>(0.06f);
+00070 <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n3">_Name</a> = std::string(<font class="stringliteral">"TailDot"</font>);
+00071 }
+00072
+00073 <font class="comment">//======================================================= </font>
+<a name="l00074"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z736_1">00074</a> CPSTailDot::~CPSTailDot()
+00075 {
+00076 <font class="comment">// delete _DyingRibbons;</font>
+00077 }
+00078
+00079 <font class="comment">//======================================================= </font>
+<a name="l00080"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z736_2">00080</a> <font class="keywordtype">void</font> CPSTailDot::serial(<a class="code" href="classNLMISC_1_1IStream.html">NLMISC::IStream</a> &amp;f) <font class="keywordflow">throw</font>(NLMISC::EStream)
+00081 {
+00082
+00083 sint ver = f.serialVersion(3);
+00084 <font class="keywordflow">if</font> (ver == 1)
+00085 {
+00086 <a class="code" href="debug_8h.html#a6">nlassert</a>(f.isReading());
+00087
+00090 sint ver2 = f.serialVersion(2);
+00091
+00092 <font class="comment">// here is CPSLocatedBindable::serial(f)</font>
+00093 sint ver3 = f.serialVersion(4);
+00094 f.serialPtr(_Owner);
+00095 <font class="keywordflow">if</font> (ver3 &gt; 1) f.serialEnum(_LOD);
+00096 <font class="keywordflow">if</font> (ver3 &gt; 2) f.serial(_Name);
+00097 <font class="keywordflow">if</font> (ver3 &gt; 3)
+00098 {
+00099 <font class="keywordflow">if</font> (f.isReading())
+00100 {
+00101 uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>;
+00102 f.serial(<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>);
+00103 setExternID(<a class="code" href="driver__opengl__extension__def_8h.html#a356">id</a>);
+00104 }
+00105 <font class="keywordflow">else</font>
+00106 {
+00107 f.serial(_ExternID);
+00108 }
+00109 }
+00110
+00111 <font class="keywordflow">if</font> (ver2 &gt;= 2)
+00112 {
+00113 <font class="keywordtype">bool</font> bDisableAutoLOD;
+00114 f.serial(bDisableAutoLOD);
+00115 disableAutoLOD(bDisableAutoLOD);
+00116 }
+00117
+00118 uint32 tailNbSegs;
+00119 <font class="keywordtype">bool</font> colorFading;
+00120 <font class="keywordtype">bool</font> systemBasisEnabled;
+00121
+00122 CPSColoredParticle::serialColorScheme(f);
+00123 f.serial(tailNbSegs, colorFading, systemBasisEnabled);
+00124
+00125 _ColorFading = colorFading;
+00126 _NbSegs = tailNbSegs &gt;&gt; 1;
+00127 <font class="keywordflow">if</font> (_NbSegs &lt; 2) _NbSegs = 2;
+00128 setInterpolationMode(Linear);
+00129 serialMaterial(f);
+00130
+00131
+00132 <a class="code" href="debug_8h.html#a6">nlassert</a>(_Owner);
+00133 resize(_Owner-&gt;getMaxSize());
+00134 initDateVect();
+00135 resetFromOwner();
+00136 }
+00137
+00138 <font class="keywordflow">if</font> (ver &gt;= 2)
+00139 {
+00140 CPSRibbonBase::serial(f);
+00141 CPSColoredParticle::serialColorScheme(f);
+00142 CPSMaterial::serialMaterial(f);
+00143 <font class="keywordtype">bool</font> colorFading = _ColorFading;
+00144 f.serial(colorFading);
+00145 _ColorFading = colorFading;
+00146 <font class="keywordflow">if</font> (ver &gt;= 3)
+00147 {
+00148 uint32 tailNbSegs = _NbSegs;
+00149 f.serial(tailNbSegs);
+00150 }
+00151 <font class="keywordflow">if</font> (f.isReading())
+00152 {
+00153 setTailNbSeg(_NbSegs);
+00154 touch();
+00155 }
+00156 }
+00157 }
+00158
+00159
+00160 <font class="comment">//======================================================= </font>
+<a name="l00161"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#a0">00161</a> <font class="keywordtype">void</font> CPSTailDot::step(<a class="code" href="namespaceNL3D.html#a484">TPSProcessPass</a> pass, <a class="code" href="namespaceNL3D.html#a1">TAnimationTime</a> ellapsedTime, <a class="code" href="namespaceNL3D.html#a1">TAnimationTime</a> realEt)
+00162 {
+00163 <font class="keywordflow">if</font> (pass == <a class="code" href="namespaceNL3D.html#a484a168">PSMotion</a>)
+00164 {
+00165 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n2">_Parametric</a>)
+00166 {
+00167 <a class="code" href="classNL3D_1_1CPSRibbonBase.html#b5">updateGlobals</a>();
+00168 }
+00169 }
+00170 <font class="keywordflow">else</font>
+00171 <font class="keywordflow">if</font> (
+00172 (pass == <a class="code" href="namespaceNL3D.html#a484a170">PSBlendRender</a> &amp;&amp; <a class="code" href="classNL3D_1_1CPSTailDot.html#a1">hasTransparentFaces</a>())
+00173 || (pass == <a class="code" href="namespaceNL3D.html#a484a169">PSSolidRender</a> &amp;&amp; <a class="code" href="classNL3D_1_1CPSTailDot.html#a2">hasOpaqueFaces</a>())
+00174 )
+00175 {
+00176 uint32 <a class="code" href="classNL3D_1_1CPSTailDot.html#a0">step</a>;
+00177 uint numToProcess;
+00178 <a class="code" href="classNL3D_1_1CPSParticle.html#b4">computeSrcStep</a>(<a class="code" href="classNL3D_1_1CPSTailDot.html#a0">step</a>, numToProcess);
+00179 <font class="keywordflow">if</font> (!numToProcess) <font class="keywordflow">return</font>;
+00180
+00182 CParticleSystem &amp;ps = *(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;getOwner());
+00183 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setColor(ps.getGlobalColor());
+00184
+00189 <a class="code" href="classNL3D_1_1CPSTailDot.html#c1">displayRibbons</a>(numToProcess, <a class="code" href="classNL3D_1_1CPSTailDot.html#a0">step</a>);
+00190
+00191 }
+00192 <font class="keywordflow">else</font>
+00193 <font class="keywordflow">if</font> (pass == <a class="code" href="namespaceNL3D.html#a484a171">PSToolRender</a>) <font class="comment">// edition mode only</font>
+00194 {
+00195 <font class="comment">//showTool();</font>
+00196 }
+00197 }
+00198
+00199
+00200 <font class="comment">//======================================================= </font>
+<a name="l00201"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#b0">00201</a> <font class="keywordtype">void</font> CPSTailDot::newElement(CPSLocated *emitterLocated, uint32 emitterIndex)
+00202 {
+00203 CPSRibbonBase::newElement(emitterLocated, emitterIndex);
+00204 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b2">newColorElement</a>(emitterLocated, emitterIndex);
+00205 }
+00206
+00207
+00208 <font class="comment">//======================================================= </font>
+<a name="l00209"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#b1">00209</a> <font class="keywordtype">void</font> CPSTailDot::deleteElement(uint32 <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>)
+00210 {
+00211 CPSRibbonBase::deleteElement(<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>);
+00212 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b3">deleteColorElement</a>(<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>);
+00213 }
+00214
+00215
+00216 <font class="comment">//======================================================= </font>
+<a name="l00217"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#b2">00217</a> <font class="keywordtype">void</font> CPSTailDot::resize(uint32 size)
+00218 {
+00219 <a class="code" href="debug_8h.html#a6">nlassert</a>(size &lt; (1 &lt;&lt; 16));
+00220 CPSRibbonBase::resize(size);
+00221 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#b4">resizeColor</a>(size);
+00222 }
+00223
+00224 <font class="comment">//======================================================= </font>
+<a name="l00225"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#c0">00225</a> <font class="keywordtype">void</font> CPSTailDot::updateMatAndVbForColor(<font class="keywordtype">void</font>)
+00226 {
+00227 <a class="code" href="classNL3D_1_1CPSTailDot.html#c2">touch</a>();
+00228 }
+00229
+00230 <font class="comment">//========================================================================== </font>
+<a name="l00231"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#c1">00231</a> <font class="keywordtype">void</font> CPSTailDot::displayRibbons(uint32 nbRibbons, uint32 srcStep)
+00232 {
+00233 <font class="keywordflow">if</font> (!nbRibbons) <font class="keywordflow">return</font>;
+00234 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>);
+00235 CPSRibbonBase::updateLOD();
+00236 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> &lt; 2) <font class="keywordflow">return</font>;
+00237 <font class="keyword">const</font> <font class="keywordtype">float</font> date = <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;getOwner()-&gt;getSystemDate();
+00238 uint8 *currVert;
+00239 CVBnPB &amp;VBnPB = <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_1">getVBnPB</a>(); <font class="comment">// get the appropriate vb (built it if needed)</font>
+00240 CVertexBuffer &amp;VB = VBnPB.VB;
+00241 CPrimitiveBlock &amp;PB = VBnPB.PB;
+00242 <font class="keyword">const</font> uint32 vertexSize = VB.getVertexSize();
+00243 uint colorOffset=0;
+00244
+00245 IDriver *drv = this-&gt;<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#a10">getDriver</a>();
+00246 <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#a21">setupDriverModelMatrix</a>();
+00247 drv-&gt;activeVertexBuffer(VB);
+00248 <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;incrementNbDrawnParticles(nbRibbons); <font class="comment">// for benchmark purpose </font>
+00249 <font class="keyword">const</font> uint numRibbonBatch = <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_2">getNumRibbonsInVB</a>(); <font class="comment">// number of ribons to process at once </font>
+00250 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> == 0) <font class="keywordflow">return</font>;
+00251
+00253 <font class="comment">// Material setup //</font>
+00255 <font class="comment"> CParticleSystem &amp;ps = *(_Owner-&gt;getOwner());</font>
+00256 <font class="keywordtype">bool</font> useGlobalColor = ps.getColorAttenuationScheme() != NULL;
+00257 <font class="keywordflow">if</font> (useGlobalColor != <a class="code" href="classNL3D_1_1CPSTailDot.html#o1">_GlobalColor</a>)
+00258 {
+00259 <a class="code" href="classNL3D_1_1CPSTailDot.html#c2">touch</a>();
+00260 }
+00261 <a class="code" href="classNL3D_1_1CPSTailDot.html#c3">updateMaterial</a>();
+00262 <a class="code" href="classNL3D_1_1CPSTailDot.html#c4">setupGlobalColor</a>();
+00263 <font class="comment">//</font>
+00264 <font class="keywordflow">if</font> (_ColorScheme)
+00265 {
+00266 colorOffset = VB.getColorOff();
+00267 }
+00268
+00270 <font class="comment">// Compute ribbons //</font>
+00272 <font class="comment"> </font>
+00273 uint toProcess;
+00274 uint ribbonIndex = 0; <font class="comment">// index of the first ribbon in the batch being processed </font>
+00275 uint32 fpRibbonIndex = 0; <font class="comment">// fixed point index in source</font>
+00276 <font class="keywordflow">do</font>
+00277 {
+00278 toProcess = <a class="code" href="bit__set_8cpp.html#a0">std::min</a>((uint) (nbRibbons - ribbonIndex) <font class="comment">/* = left to do */</font>, numRibbonBatch);
+00279 currVert = (uint8 *) VB.getVertexCoordPointer();
+00280
+00282 <font class="keywordflow">if</font> (_ColorScheme)
+00283 {
+00284 <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a>-&gt;makeN(this-&gt;_Owner, ribbonIndex, currVert + colorOffset, vertexSize, toProcess, <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1, srcStep);
+00285 }
+00286 uint k = toProcess;
+00288 <font class="comment">// interpolate and project points the result is directly setup in the vertex buffer //</font>
+00290 <font class="comment"> if (!_Parametric)</font>
+00291 {
+00292
+00294 <font class="comment">// INCREMENTAL CASE //</font>
+00296 <font class="comment"> do</font>
+00297 {
+00298 <font class="comment">// the parent class has a method to get the ribbons positions</font>
+00299 <a class="code" href="classNL3D_1_1CPSRibbonBase.html#b4">computeRibbon</a>((uint) (fpRibbonIndex &gt;&gt; 16), (CVector *) currVert, vertexSize);
+00300 currVert += vertexSize * (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1);
+00301 fpRibbonIndex += srcStep;
+00302 }
+00303 <font class="keywordflow">while</font> (--k);
+00304 }
+00305 <font class="keywordflow">else</font>
+00306 {
+00308 <font class="comment">// PARAMETRIC CASE //</font>
+00310 <font class="comment"> do</font>
+00311 {
+00312 <font class="comment">// we compute each pos thanks to the parametric curve </font>
+00313 <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;integrateSingle(date - <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n4">_UsedSegDuration</a> * (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1), <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n4">_UsedSegDuration</a>, <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1, (uint) (fpRibbonIndex &gt;&gt; 16),
+00314 (<a class="code" href="classNLMISC_1_1CVector.html">NLMISC::CVector</a> *) currVert, vertexSize);
+00315 currVert += vertexSize * (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1);
+00316 fpRibbonIndex += srcStep;
+00317 }
+00318 <font class="keywordflow">while</font> (--k);
+00319
+00320 }
+00321 PB.setNumLine(<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> * toProcess);
+00322 <font class="comment">// display the result</font>
+00323 drv-&gt;render(PB, <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>);
+00324 ribbonIndex += toProcess;
+00325 }
+00326 <font class="keywordflow">while</font> (ribbonIndex != nbRibbons);
+00327 }
+00328
+00329 <font class="comment">//========================================================================== </font>
+<a name="l00330"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#a1">00330</a> <font class="keywordtype">bool</font> CPSTailDot::hasTransparentFaces(<font class="keywordtype">void</font>)
+00331 {
+00332 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSMaterial.html#a3">getBlendingMode</a>() != CPSMaterial::alphaTest ;
+00333 }
+00334
+00335
+00336 <font class="comment">//========================================================================== </font>
+<a name="l00337"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#a2">00337</a> <font class="keywordtype">bool</font> CPSTailDot::hasOpaqueFaces(<font class="keywordtype">void</font>)
+00338 {
+00339 <font class="keywordflow">return</font> !<a class="code" href="classNL3D_1_1CPSTailDot.html#a1">hasTransparentFaces</a>();
+00340 }
+00341
+00342 <font class="comment">//========================================================================== </font>
+<a name="l00343"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#a3">00343</a> uint32 CPSTailDot::getMaxNumFaces(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
+00344 <font class="keyword"></font>{
+00345 <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>);
+00346 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;getMaxSize() * <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n0">_NbSegs</a>;
+00347 }
+00348
+00349
+00350
+00351 <font class="comment">//========================================================================== </font>
+<a name="l00352"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_1">00352</a> CPSTailDot::CVBnPB &amp;CPSTailDot::getVBnPB()
+00353 {
+00355 <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_0">TVBMap</a> &amp;map = <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> ? (<a class="code" href="classNL3D_1_1CPSTailDot.html#o0">_ColorFading</a> ? <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_6">_FadedColoredVBMap</a> : <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_5">_ColoredVBMap</a>) <font class="comment">// per ribbon coloçr</font>
+00356 : (<a class="code" href="classNL3D_1_1CPSTailDot.html#o0">_ColorFading</a> ? <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_4">_FadedVBMap</a> : <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_3">_VBMap</a>); <font class="comment">// global color</font>
+00357 TVBMap::iterator it = map.find(<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1);
+00358 <font class="keywordflow">if</font> (it != map.end())
+00359 {
+00360 <font class="keywordflow">return</font> it-&gt;second;
+00361 }
+00362 <font class="keywordflow">else</font> <font class="comment">// must create this vb, with few different size, it is still interseting, though they are only destroyed at exit</font>
+00363 {
+00364 <font class="keyword">const</font> uint numRibbonInVB = <a class="code" href="classNL3D_1_1CPSTailDot.html#z738_2">getNumRibbonsInVB</a>();
+00365 CVBnPB &amp;VBnPB = map[<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1]; <font class="comment">// make an entry</font>
+00366
+00370 CVertexBuffer &amp;vb = VBnPB.VB;
+00371 vb.setVertexFormat(CVertexBuffer::PositionFlag
+00372 |(<a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> || <a class="code" href="classNL3D_1_1CPSTailDot.html#o0">_ColorFading</a> ? CVertexBuffer::PrimaryColorFlag : 0)
+00373 | (<a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> &amp;&amp; <a class="code" href="classNL3D_1_1CPSTailDot.html#o0">_ColorFading</a> ? CVertexBuffer::TexCoord0Flag : 0));
+00374
+00375 vb.setNumVertices((<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1) * numRibbonInVB ); <font class="comment">// 1 seg = 1 line + terminal vertices</font>
+00376
+00377 <font class="comment">// set the primitive block size</font>
+00378 CPrimitiveBlock &amp;pb = VBnPB.PB;
+00379 pb.setNumLine(<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> * numRibbonInVB);
+00381 uint vbIndex = 0;
+00382 uint pbIndex = 0;
+00383 <font class="keywordflow">for</font> (uint i = 0; i &lt; numRibbonInVB; ++i)
+00384 {
+00385 <font class="keywordflow">for</font> (uint k = 0; k &lt; (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1); ++k)
+00386 {
+00387
+00388 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CPSColoredParticle.html#n1">_ColorScheme</a> &amp;&amp; <a class="code" href="classNL3D_1_1CPSTailDot.html#o0">_ColorFading</a>)
+00389 {
+00390 vb.setTexCoord(vbIndex, 0, 0.5f - 0.5f * ((<font class="keywordtype">float</font>) k / <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a>), 0);
+00391 }
+00392 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (_ColorFading)
+00393 {
+00394 uint8 intensity = (uint8) (255 * (1.f - ((float) k / <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a>)));
+00395 <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> col(intensity, intensity, intensity, intensity);
+00396 vb.setColor(vbIndex, col);
+00397 }
+00398
+00400 <font class="keywordflow">if</font> (k != <a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a>)
+00401 {
+00402 pb.setLine(pbIndex ++, vbIndex, vbIndex + 1);
+00403 }
+00404 ++vbIndex;
+00405 }
+00406 }
+00407 <font class="keywordflow">return</font> VBnPB;
+00408 }
+00409 }
+00410
+00411 <font class="comment">//========================================================================== </font>
+<a name="l00412"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#z738_2">00412</a> uint CPSTailDot::getNumRibbonsInVB()<font class="keyword"> const</font>
+00413 <font class="keyword"></font>{
+00415 <font class="keyword">const</font> uint vertexInVB = 256;
+00416 <font class="keywordflow">return</font> std::max(1u, (uint) (vertexInVB / (<a class="code" href="classNL3D_1_1CPSRibbonBase.html#n3">_UsedNbSegs</a> + 1)));
+00417 }
+00418
+00419
+00420 <font class="comment">//========================================================================== </font>
+<a name="l00421"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#c3">00421</a> <font class="keywordtype">void</font> CPSTailDot::updateMaterial()
+00422 {
+00423 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CPSTailDot.html#o2">_Touch</a>) <font class="keywordflow">return</font>;
+00424
+00425 <font class="keyword">static</font> <a class="code" href="classNLMISC_1_1CRefPtr.html">NLMISC::CRefPtr&lt;ITexture&gt;</a> ptGradTexture;
+00426
+00427 CParticleSystem &amp;ps = *(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;getOwner());
+00428 <font class="keywordflow">if</font> (_ColorScheme)
+00429 { <font class="comment">// PER RIBBON COLOR</font>
+00430 <font class="keywordflow">if</font> (ps.getColorAttenuationScheme())
+00431 {
+00432 <font class="keywordflow">if</font> (_ColorFading) <font class="comment">// global color + fading + per ribbon color</font>
+00433 {
+00434 <font class="comment">// the first stage is used to get fading * global color</font>
+00435 <font class="comment">// the second stage multiply the result by the diffuse colot</font>
+00436 <font class="keywordflow">if</font> (ptGradTexture == NULL) <font class="comment">// have we got a gradient texture ?</font>
+00437 {
+00438 ptGradTexture = <a class="code" href="namespaceNL3D.html#a445">CreateGradientTexture</a>();
+00439 }
+00440 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setTexture(0, ptGradTexture);
+00441 CPSMaterial::forceTexturedMaterialStages(2); <font class="comment">// use constant color 0 * diffuse, 1 stage needed </font>
+00442 <a class="code" href="namespaceNL3D.html#a439">SetupModulatedStage</a>(<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>, 0, CMaterial::Texture, CMaterial::Constant);
+00443 <a class="code" href="namespaceNL3D.html#a439">SetupModulatedStage</a>(<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>, 1, CMaterial::Previous, CMaterial::Diffuse);
+00444 }
+00445 <font class="keywordflow">else</font> <font class="comment">// per ribbon color with global color </font>
+00446 {
+00447 CPSMaterial::forceTexturedMaterialStages(1); <font class="comment">// use constant color 0 * diffuse, 1 stage needed </font>
+00448 <a class="code" href="namespaceNL3D.html#a439">SetupModulatedStage</a>(<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>, 0, CMaterial::Diffuse, CMaterial::Constant);
+00449 }
+00450 }
+00451 <font class="keywordflow">else</font>
+00452 {
+00453 <font class="keywordflow">if</font> (_ColorFading) <font class="comment">// per ribbon color, fading</font>
+00454 {
+00455 <font class="keywordflow">if</font> (ptGradTexture == NULL) <font class="comment">// have we got a gradient texture ?</font>
+00456 {
+00457 ptGradTexture = <a class="code" href="namespaceNL3D.html#a445">CreateGradientTexture</a>();
+00458 }
+00459 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setTexture(0, ptGradTexture);
+00460 CPSMaterial::forceTexturedMaterialStages(1);
+00461 <a class="code" href="namespaceNL3D.html#a439">SetupModulatedStage</a>(<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>, 0, CMaterial::Texture, CMaterial::Diffuse);
+00462 }
+00463 <font class="keywordflow">else</font> <font class="comment">// per color ribbon with no fading, and no global color</font>
+00464 {
+00465 CPSMaterial::forceTexturedMaterialStages(0); <font class="comment">// no texture use constant diffuse only</font>
+00466 }
+00467 }
+00468 }
+00469 <font class="keywordflow">else</font> <font class="comment">// GLOBAL COLOR</font>
+00470 {
+00471 <font class="keywordflow">if</font> (_ColorFading)
+00472 {
+00473 CPSMaterial::forceTexturedMaterialStages(1); <font class="comment">// use constant color 0 * diffuse, 1 stage needed</font>
+00474 <a class="code" href="namespaceNL3D.html#a439">SetupModulatedStage</a>(<a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>, 0, CMaterial::Diffuse, CMaterial::Constant);
+00475 }
+00476 <font class="keywordflow">else</font> <font class="comment">// constant color</font>
+00477 {
+00478 CPSMaterial::forceTexturedMaterialStages(0); <font class="comment">// no texture use constant diffuse only </font>
+00479 }
+00480 }
+00481
+00482 <a class="code" href="classNL3D_1_1CPSTailDot.html#o2">_Touch</a> = <font class="keyword">false</font>;
+00483 }
+00484
+00485 <font class="comment">//========================================================================== </font>
+<a name="l00486"></a><a class="code" href="classNL3D_1_1CPSTailDot.html#c4">00486</a> <font class="keywordtype">void</font> CPSTailDot::setupGlobalColor()
+00487 {
+00489 CParticleSystem &amp;ps = *(<a class="code" href="classNL3D_1_1CPSLocatedBindable.html#n0">_Owner</a>-&gt;getOwner());
+00490 <font class="keywordflow">if</font> (_ColorScheme)
+00491 {
+00492 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texConstantColor(0, ps.getGlobalColor());
+00493 }
+00494 <font class="keywordflow">else</font> <font class="comment">// GLOBAL COLOR with / without fading</font>
+00495 {
+00496 <font class="keywordflow">if</font> (ps.getColorAttenuationScheme())
+00497 {
+00498 <a class="code" href="classNLMISC_1_1CRGBA.html">NLMISC::CRGBA</a> col;
+00499 col.<a class="code" href="classNLMISC_1_1CRGBA.html#a9">modulateFromColor</a>(ps.getGlobalColor(), <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n0">_Color</a>);
+00500 <font class="keywordflow">if</font> (_ColorFading)
+00501 {
+00502 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texConstantColor(0, col);
+00503 }
+00504 <font class="keywordflow">else</font> <font class="comment">// color attenuation, no fading : </font>
+00505 {
+00506 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setColor(col);
+00507 }
+00508 }
+00509 <font class="keywordflow">else</font>
+00510 {
+00511 <font class="keywordflow">if</font> (_ColorFading)
+00512 {
+00513 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.texConstantColor(0, <a class="code" href="classNL3D_1_1CPSColoredParticle.html#n0">_Color</a>);
+00514 }
+00515 <font class="keywordflow">else</font> <font class="comment">// constant color</font>
+00516 {
+00517 <a class="code" href="classNL3D_1_1CPSMaterial.html#n0">_Mat</a>.setColor(<a class="code" href="classNL3D_1_1CPSColoredParticle.html#n0">_Color</a>);
+00518 }
+00519 }
+00520 }
+00521 }
+00522
+00523
+00524
+00525
+00526 } <font class="comment">// NL3D</font>
+</pre></div>
+
+<!-- footer -->
+<BR><FONT Size=+5>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>