v4color.cpp

Go to the documentation of this file.
00001 
00032 #include "linden_common.h"
00033 
00034 #include "llboost.h"
00035 
00036 #include "v4color.h"
00037 #include "v4coloru.h"
00038 #include "v3color.h"
00039 #include "v4math.h"
00040 #include "llmath.h"
00041 
00042 // LLColor4
00043 
00045 
00046 LLColor4 LLColor4::red(         1.f, 0.f, 0.f, 1.f);
00047 LLColor4 LLColor4::green(       0.f, 1.f, 0.f, 1.f);
00048 LLColor4 LLColor4::blue(        0.f, 0.f, 1.f, 1.f);
00049 LLColor4 LLColor4::black(       0.f, 0.f, 0.f, 1.f);
00050 LLColor4 LLColor4::yellow(      1.f, 1.f, 0.f, 1.f);
00051 LLColor4 LLColor4::magenta( 1.0f, 0.0f, 1.0f, 1.0f);
00052 LLColor4 LLColor4::cyan(        0.0f, 1.0f, 1.0f, 1.0f);
00053 LLColor4 LLColor4::white(       1.f, 1.f, 1.f, 1.f);
00054 LLColor4 LLColor4::smoke(       0.5f, 0.5f, 0.5f, 0.5f);
00055 LLColor4 LLColor4::grey(        0.5f, 0.5f, 0.5f, 1.0f);
00056 LLColor4 LLColor4::orange(      1.f, 0.5, 0.f, 1.f );
00057 LLColor4 LLColor4::purple(      0.6f, 0.2f, 0.8f, 1.0f);
00058 LLColor4 LLColor4::pink(        1.0f, 0.5f, 0.8f, 1.0f);
00059 LLColor4 LLColor4::transparent( 0.f, 0.f, 0.f, 0.f );
00060 
00062 
00063 LLColor4 LLColor4::grey1(0.8f, 0.8f, 0.8f, 1.0f);
00064 LLColor4 LLColor4::grey2(0.6f, 0.6f, 0.6f, 1.0f);
00065 LLColor4 LLColor4::grey3(0.4f, 0.4f, 0.4f, 1.0f);
00066 LLColor4 LLColor4::grey4(0.3f, 0.3f, 0.3f, 1.0f);
00067 
00068 LLColor4 LLColor4::red1(1.0f, 0.0f, 0.0f, 1.0f);
00069 LLColor4 LLColor4::red2(0.6f, 0.0f, 0.0f, 1.0f);
00070 LLColor4 LLColor4::red3(1.0f, 0.2f, 0.2f, 1.0f);
00071 LLColor4 LLColor4::red4(0.5f, 0.1f, 0.1f, 1.0f);
00072 LLColor4 LLColor4::red5(0.8f, 0.1f, 0.0f, 1.0f);
00073 
00074 LLColor4 LLColor4::green1(0.0f, 1.0f, 0.0f, 1.0f);
00075 LLColor4 LLColor4::green2(0.0f, 0.6f, 0.0f, 1.0f);
00076 LLColor4 LLColor4::green3(0.0f, 0.4f, 0.0f, 1.0f);
00077 LLColor4 LLColor4::green4(0.0f, 1.0f, 0.4f, 1.0f);
00078 LLColor4 LLColor4::green5(0.2f, 0.6f, 0.4f, 1.0f);
00079 LLColor4 LLColor4::green6(0.4f, 0.6f, 0.2f, 1.0f);
00080 
00081 LLColor4 LLColor4::blue1(0.0f, 0.0f, 1.0f, 1.0f);
00082 LLColor4 LLColor4::blue2(0.0f, 0.4f, 1.0f, 1.0f);
00083 LLColor4 LLColor4::blue3(0.2f, 0.2f, 0.8f, 1.0f);
00084 LLColor4 LLColor4::blue4(0.0f, 0.0f, 0.6f, 1.0f);
00085 LLColor4 LLColor4::blue5(0.4f, 0.2f, 1.0f, 1.0f);
00086 LLColor4 LLColor4::blue6(0.4f, 0.5f, 1.0f, 1.0f);
00087 
00088 LLColor4 LLColor4::yellow1(1.0f, 1.0f, 0.0f, 1.0f);
00089 LLColor4 LLColor4::yellow2(0.6f, 0.6f, 0.0f, 1.0f);
00090 LLColor4 LLColor4::yellow3(0.8f, 1.0f, 0.2f, 1.0f);
00091 LLColor4 LLColor4::yellow4(1.0f, 1.0f, 0.4f, 1.0f);
00092 LLColor4 LLColor4::yellow5(0.6f, 0.4f, 0.2f, 1.0f);
00093 LLColor4 LLColor4::yellow6(1.0f, 0.8f, 0.4f, 1.0f);
00094 LLColor4 LLColor4::yellow7(0.8f, 0.8f, 0.0f, 1.0f);
00095 LLColor4 LLColor4::yellow8(0.8f, 0.8f, 0.2f, 1.0f);
00096 LLColor4 LLColor4::yellow9(0.8f, 0.8f, 0.4f, 1.0f);
00097 
00098 LLColor4 LLColor4::orange1(1.0f, 0.8f, 0.0f, 1.0f);
00099 LLColor4 LLColor4::orange2(1.0f, 0.6f, 0.0f, 1.0f);
00100 LLColor4 LLColor4::orange3(1.0f, 0.4f, 0.2f, 1.0f);
00101 LLColor4 LLColor4::orange4(0.8f, 0.4f, 0.0f, 1.0f);
00102 LLColor4 LLColor4::orange5(0.9f, 0.5f, 0.0f, 1.0f);
00103 LLColor4 LLColor4::orange6(1.0f, 0.8f, 0.2f, 1.0f);
00104 
00105 LLColor4 LLColor4::magenta1(1.0f, 0.0f, 1.0f, 1.0f);
00106 LLColor4 LLColor4::magenta2(0.6f, 0.2f, 0.4f, 1.0f);
00107 LLColor4 LLColor4::magenta3(1.0f, 0.4f, 0.6f, 1.0f);
00108 LLColor4 LLColor4::magenta4(1.0f, 0.2f, 0.8f, 1.0f);
00109 
00110 LLColor4 LLColor4::purple1(0.6f, 0.2f, 0.8f, 1.0f);
00111 LLColor4 LLColor4::purple2(0.8f, 0.2f, 1.0f, 1.0f);
00112 LLColor4 LLColor4::purple3(0.6f, 0.0f, 1.0f, 1.0f);
00113 LLColor4 LLColor4::purple4(0.4f, 0.0f, 0.8f, 1.0f);
00114 LLColor4 LLColor4::purple5(0.6f, 0.0f, 0.8f, 1.0f);
00115 LLColor4 LLColor4::purple6(0.8f, 0.0f, 0.6f, 1.0f);
00116 
00117 LLColor4 LLColor4::pink1(1.0f, 0.5f, 0.8f, 1.0f);
00118 LLColor4 LLColor4::pink2(1.0f, 0.8f, 0.9f, 1.0f);
00119 
00120 LLColor4 LLColor4::cyan1(0.0f, 1.0f, 1.0f, 1.0f);
00121 LLColor4 LLColor4::cyan2(0.4f, 0.8f, 0.8f, 1.0f);
00122 LLColor4 LLColor4::cyan3(0.0f, 1.0f, 0.6f, 1.0f);
00123 LLColor4 LLColor4::cyan4(0.6f, 1.0f, 1.0f, 1.0f);
00124 LLColor4 LLColor4::cyan5(0.2f, 0.6f, 1.0f, 1.0f);
00125 LLColor4 LLColor4::cyan6(0.2f, 0.6f, 0.6f, 1.0f);
00126 
00128 
00129 // conversion
00130 LLColor4::operator const LLColor4U() const
00131 {
00132         return LLColor4U(
00133                 (U8)llclampb(llround(mV[VRED]*255.f)),
00134                 (U8)llclampb(llround(mV[VGREEN]*255.f)),
00135                 (U8)llclampb(llround(mV[VBLUE]*255.f)),
00136                 (U8)llclampb(llround(mV[VALPHA]*255.f)));
00137 }
00138 
00139 LLColor4::LLColor4(const LLColor3 &vec, F32 a)
00140 {
00141         mV[VX] = vec.mV[VX];
00142         mV[VY] = vec.mV[VY];
00143         mV[VZ] = vec.mV[VZ];
00144         mV[VW] = a;
00145 }
00146 
00147 LLColor4::LLColor4(const LLColor4U& color4u)
00148 {
00149         const F32 SCALE = 1.f/255.f;
00150         mV[VX] = color4u.mV[VX] * SCALE;
00151         mV[VY] = color4u.mV[VY] * SCALE;
00152         mV[VZ] = color4u.mV[VZ] * SCALE;
00153         mV[VW] = color4u.mV[VW] * SCALE;
00154 }
00155 
00156 LLColor4::LLColor4(const LLVector4& vector4)
00157 {
00158         mV[VX] = vector4.mV[VX];
00159         mV[VY] = vector4.mV[VY];
00160         mV[VZ] = vector4.mV[VZ];
00161         mV[VW] = vector4.mV[VW];
00162 }
00163 
00164 const LLColor4& LLColor4::setVec(const LLColor4U& color4u)
00165 {
00166         const F32 SCALE = 1.f/255.f;
00167         mV[VX] = color4u.mV[VX] * SCALE;
00168         mV[VY] = color4u.mV[VY] * SCALE;
00169         mV[VZ] = color4u.mV[VZ] * SCALE;
00170         mV[VW] = color4u.mV[VW] * SCALE;
00171         return (*this);
00172 }
00173 
00174 const LLColor4& LLColor4::setVec(const LLColor3 &vec)
00175 {
00176         mV[VX] = vec.mV[VX];
00177         mV[VY] = vec.mV[VY];
00178         mV[VZ] = vec.mV[VZ];
00179 
00180 //  no change to alpha!
00181 //      mV[VW] = 1.f;  
00182 
00183         return (*this);
00184 }
00185 
00186 const LLColor4& LLColor4::setVec(const LLColor3 &vec, F32 a)
00187 {
00188         mV[VX] = vec.mV[VX];
00189         mV[VY] = vec.mV[VY];
00190         mV[VZ] = vec.mV[VZ];
00191         mV[VW] = a;
00192         return (*this);
00193 }
00194 
00195 const LLColor4& LLColor4::operator=(const LLColor3 &a)
00196 {
00197         mV[VX] = a.mV[VX];
00198         mV[VY] = a.mV[VY];
00199         mV[VZ] = a.mV[VZ];
00200 
00201 // converting from an rgb sets a=1 (opaque)
00202         mV[VW] = 1.f;
00203         return (*this);
00204 }
00205 
00206 
00207 std::ostream& operator<<(std::ostream& s, const LLColor4 &a) 
00208 {
00209         s << "{ " << a.mV[VX] << ", " << a.mV[VY] << ", " << a.mV[VZ] << ", " << a.mV[VW] << " }";
00210         return s;
00211 }
00212 
00213 bool operator==(const LLColor4 &a, const LLColor3 &b)
00214 {
00215         return (  (a.mV[VX] == b.mV[VX])
00216                         &&(a.mV[VY] == b.mV[VY])
00217                         &&(a.mV[VZ] == b.mV[VZ]));
00218 }
00219 
00220 bool operator!=(const LLColor4 &a, const LLColor3 &b)
00221 {
00222         return (  (a.mV[VX] != b.mV[VX])
00223                         ||(a.mV[VY] != b.mV[VY])
00224                         ||(a.mV[VZ] != b.mV[VZ]));
00225 }
00226 
00227 LLColor3        vec4to3(const LLColor4 &vec)
00228 {
00229         LLColor3        temp(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
00230         return temp;
00231 }
00232 
00233 LLColor4        vec3to4(const LLColor3 &vec)
00234 {
00235         LLColor3        temp(vec.mV[VX], vec.mV[VY], vec.mV[VZ]);
00236         return temp;
00237 }
00238 
00239 void LLColor4::calcHSL(F32* hue, F32* saturation, F32* luminance) const
00240 {
00241         F32 var_R = mV[VRED];
00242         F32 var_G = mV[VGREEN];
00243         F32 var_B = mV[VBLUE];
00244 
00245         F32 var_Min = ( var_R < ( var_G < var_B ? var_G : var_B ) ? var_R : ( var_G < var_B ? var_G : var_B ) );
00246         F32 var_Max = ( var_R > ( var_G > var_B ? var_G : var_B ) ? var_R : ( var_G > var_B ? var_G : var_B ) );
00247 
00248         F32 del_Max = var_Max - var_Min;
00249 
00250         F32 L = ( var_Max + var_Min ) / 2.0f;
00251         F32 H = 0.0f;
00252         F32 S = 0.0f;
00253 
00254         if ( del_Max == 0.0f )
00255         {
00256            H = 0.0f;
00257            S = 0.0f;
00258         }
00259         else
00260         {
00261                 if ( L < 0.5 )
00262                         S = del_Max / ( var_Max + var_Min );
00263                 else
00264                         S = del_Max / ( 2.0f - var_Max - var_Min );
00265 
00266                 F32 del_R = ( ( ( var_Max - var_R ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
00267                 F32 del_G = ( ( ( var_Max - var_G ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
00268                 F32 del_B = ( ( ( var_Max - var_B ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
00269 
00270                 if ( var_R >= var_Max )
00271                         H = del_B - del_G;
00272                 else
00273                 if ( var_G >= var_Max )
00274                         H = ( 1.0f / 3.0f ) + del_R - del_B;
00275                 else
00276                 if ( var_B >= var_Max )
00277                         H = ( 2.0f / 3.0f ) + del_G - del_R;
00278 
00279                 if ( H < 0.0f ) H += 1.0f;
00280                 if ( H > 1.0f ) H -= 1.0f;
00281         }
00282 
00283         if (hue) *hue = H;
00284         if (saturation) *saturation = S;
00285         if (luminance) *luminance = L;
00286 }
00287 
00288 // static
00289 BOOL LLColor4::parseColor(const char* buf, LLColor4* color)
00290 {
00291         if( buf == NULL || buf[0] == '\0' || color == NULL)
00292         {
00293                 return FALSE;
00294         }
00295 
00296         LLString full_string(buf);
00297 
00298         boost_tokenizer tokens(full_string, boost::char_separator<char>(", "));
00299         boost_tokenizer::iterator token_iter = tokens.begin();
00300         if (token_iter == tokens.end())
00301         {
00302                 return FALSE;
00303         }
00304 
00305         // Grab the first token into a string, since we don't know
00306         // if this is a float or a color name.
00307         LLString color_name( (*token_iter) );
00308         ++token_iter;
00309 
00310         if (token_iter != tokens.end())
00311         {
00312                 // There are more tokens to read.  This must be a vector.
00313                 LLColor4 v;
00314                 LLString::convertToF32( color_name,  v.mV[VX] );
00315                 LLString::convertToF32( *token_iter, v.mV[VY] );
00316                 v.mV[VZ] = 0.0f;
00317                 v.mV[VW] = 1.0f;
00318 
00319                 ++token_iter;
00320                 if (token_iter == tokens.end())
00321                 {
00322                         // This is a malformed vector.
00323                         llwarns << "LLColor4::parseColor() malformed color " << full_string << llendl;
00324                 }
00325                 else
00326                 {
00327                         // There is a z-component.
00328                         LLString::convertToF32( *token_iter, v.mV[VZ] );
00329 
00330                         ++token_iter;
00331                         if (token_iter != tokens.end())
00332                         {
00333                                 // There is an alpha component.
00334                                 LLString::convertToF32( *token_iter, v.mV[VW] );
00335                         }
00336                 }
00337 
00338                 //  Make sure all values are between 0 and 1.
00339                 if (v.mV[VX] > 1.f || v.mV[VY] > 1.f || v.mV[VZ] > 1.f || v.mV[VW] > 1.f)
00340                 {
00341                         v = v * (1.f / 255.f);
00342                 }
00343                 color->setVec( v );
00344         }
00345         else // Single value.  Read as a named color.
00346         {
00347                 // We have a color name
00348                 if ( "red" == color_name )
00349                 {
00350                         color->setVec(LLColor4::red);
00351                 }
00352                 else if ( "red1" == color_name )
00353                 {
00354                         color->setVec(LLColor4::red1);
00355                 }
00356                 else if ( "red2" == color_name )
00357                 {
00358                         color->setVec(LLColor4::red2);
00359                 }
00360                 else if ( "red3" == color_name )
00361                 {
00362                         color->setVec(LLColor4::red3);
00363                 }
00364                 else if ( "red4" == color_name )
00365                 {
00366                         color->setVec(LLColor4::red4);
00367                 }
00368                 else if ( "red5" == color_name )
00369                 {
00370                         color->setVec(LLColor4::red5);
00371                 }
00372                 else if( "green" == color_name )
00373                 {
00374                         color->setVec(LLColor4::green);
00375                 }
00376                 else if( "green1" == color_name )
00377                 {
00378                         color->setVec(LLColor4::green1);
00379                 }
00380                 else if( "green2" == color_name )
00381                 {
00382                         color->setVec(LLColor4::green2);
00383                 }
00384                 else if( "green3" == color_name )
00385                 {
00386                         color->setVec(LLColor4::green3);
00387                 }
00388                 else if( "green4" == color_name )
00389                 {
00390                         color->setVec(LLColor4::green4);
00391                 }
00392                 else if( "green5" == color_name )
00393                 {
00394                         color->setVec(LLColor4::green5);
00395                 }
00396                 else if( "green6" == color_name )
00397                 {
00398                         color->setVec(LLColor4::green6);
00399                 }
00400                 else if( "blue" == color_name )
00401                 {
00402                         color->setVec(LLColor4::blue);
00403                 }
00404                 else if( "blue1" == color_name )
00405                 {
00406                         color->setVec(LLColor4::blue1);
00407                 }
00408                 else if( "blue2" == color_name )
00409                 {
00410                         color->setVec(LLColor4::blue2);
00411                 }
00412                 else if( "blue3" == color_name )
00413                 {
00414                         color->setVec(LLColor4::blue3);
00415                 }
00416                 else if( "blue4" == color_name )
00417                 {
00418                         color->setVec(LLColor4::blue4);
00419                 }
00420                 else if( "blue5" == color_name )
00421                 {
00422                         color->setVec(LLColor4::blue5);
00423                 }
00424                 else if( "blue6" == color_name )
00425                 {
00426                         color->setVec(LLColor4::blue6);
00427                 }
00428                 else if( "black" == color_name )
00429                 {
00430                         color->setVec(LLColor4::black);
00431                 }
00432                 else if( "white" == color_name )
00433                 {
00434                         color->setVec(LLColor4::white);
00435                 }
00436                 else if( "yellow" == color_name )
00437                 {
00438                         color->setVec(LLColor4::yellow);
00439                 }
00440                 else if( "yellow1" == color_name )
00441                 {
00442                         color->setVec(LLColor4::yellow1);
00443                 }
00444                 else if( "yellow2" == color_name )
00445                 {
00446                         color->setVec(LLColor4::yellow2);
00447                 }
00448                 else if( "yellow3" == color_name )
00449                 {
00450                         color->setVec(LLColor4::yellow3);
00451                 }
00452                 else if( "yellow4" == color_name )
00453                 {
00454                         color->setVec(LLColor4::yellow4);
00455                 }
00456                 else if( "yellow5" == color_name )
00457                 {
00458                         color->setVec(LLColor4::yellow5);
00459                 }
00460                 else if( "yellow6" == color_name )
00461                 {
00462                         color->setVec(LLColor4::yellow6);
00463                 }
00464                 else if( "magenta" == color_name )
00465                 {
00466                         color->setVec(LLColor4::magenta);
00467                 }
00468                 else if( "magenta1" == color_name )
00469                 {
00470                         color->setVec(LLColor4::magenta1);
00471                 }
00472                 else if( "magenta2" == color_name )
00473                 {
00474                         color->setVec(LLColor4::magenta2);
00475                 }
00476                 else if( "magenta3" == color_name )
00477                 {
00478                         color->setVec(LLColor4::magenta3);
00479                 }
00480                 else if( "magenta4" == color_name )
00481                 {
00482                         color->setVec(LLColor4::magenta4);
00483                 }
00484                 else if( "purple" == color_name )
00485                 {
00486                         color->setVec(LLColor4::purple);
00487                 }
00488                 else if( "purple1" == color_name )
00489                 {
00490                         color->setVec(LLColor4::purple1);
00491                 }
00492                 else if( "purple2" == color_name )
00493                 {
00494                         color->setVec(LLColor4::purple2);
00495                 }
00496                 else if( "purple3" == color_name )
00497                 {
00498                         color->setVec(LLColor4::purple3);
00499                 }
00500                 else if( "purple4" == color_name )
00501                 {
00502                         color->setVec(LLColor4::purple4);
00503                 }
00504                 else if( "purple5" == color_name )
00505                 {
00506                         color->setVec(LLColor4::purple5);
00507                 }
00508                 else if( "purple6" == color_name )
00509                 {
00510                         color->setVec(LLColor4::purple6);
00511                 }
00512                 else if( "pink" == color_name )
00513                 {
00514                         color->setVec(LLColor4::pink);
00515                 }
00516                 else if( "pink1" == color_name )
00517                 {
00518                         color->setVec(LLColor4::pink1);
00519                 }
00520                 else if( "pink2" == color_name )
00521                 {
00522                         color->setVec(LLColor4::pink2);
00523                 }
00524                 else if( "cyan" == color_name )
00525                 {
00526                         color->setVec(LLColor4::cyan);
00527                 }
00528                 else if( "cyan1" == color_name )
00529                 {
00530                         color->setVec(LLColor4::cyan1);
00531                 }
00532                 else if( "cyan2" == color_name )
00533                 {
00534                         color->setVec(LLColor4::cyan2);
00535                 }
00536                 else if( "cyan3" == color_name )
00537                 {
00538                         color->setVec(LLColor4::cyan3);
00539                 }
00540                 else if( "cyan4" == color_name )
00541                 {
00542                         color->setVec(LLColor4::cyan4);
00543                 }
00544                 else if( "cyan5" == color_name )
00545                 {
00546                         color->setVec(LLColor4::cyan5);
00547                 }
00548                 else if( "cyan6" == color_name )
00549                 {
00550                         color->setVec(LLColor4::cyan6);
00551                 }
00552                 else if( "smoke" == color_name )
00553                 {
00554                         color->setVec(LLColor4::smoke);
00555                 }
00556                 else if( "grey" == color_name )
00557                 {
00558                         color->setVec(LLColor4::grey);
00559                 }
00560                 else if( "grey1" == color_name )
00561                 {
00562                         color->setVec(LLColor4::grey1);
00563                 }
00564                 else if( "grey2" == color_name )
00565                 {
00566                         color->setVec(LLColor4::grey2);
00567                 }
00568                 else if( "grey3" == color_name )
00569                 {
00570                         color->setVec(LLColor4::grey3);
00571                 }
00572                 else if( "grey4" == color_name )
00573                 {
00574                         color->setVec(LLColor4::grey4);
00575                 }
00576                 else if( "orange" == color_name )
00577                 {
00578                         color->setVec(LLColor4::orange);
00579                 }
00580                 else if( "orange1" == color_name )
00581                 {
00582                         color->setVec(LLColor4::orange1);
00583                 }
00584                 else if( "orange2" == color_name )
00585                 {
00586                         color->setVec(LLColor4::orange2);
00587                 }
00588                 else if( "orange3" == color_name )
00589                 {
00590                         color->setVec(LLColor4::orange3);
00591                 }
00592                 else if( "orange4" == color_name )
00593                 {
00594                         color->setVec(LLColor4::orange4);
00595                 }
00596                 else if( "orange5" == color_name )
00597                 {
00598                         color->setVec(LLColor4::orange5);
00599                 }
00600                 else if( "orange6" == color_name )
00601                 {
00602                         color->setVec(LLColor4::orange6);
00603                 }
00604                 else if ( "clear" == color_name )
00605                 {
00606                         color->setVec(0.f, 0.f, 0.f, 0.f);
00607                 }
00608                 else
00609                 {
00610                         llwarns << "invalid color " << color_name << llendl;
00611                 }
00612         }
00613 
00614         return TRUE;
00615 }
00616 
00617 // static
00618 BOOL LLColor4::parseColor4(const char* buf, LLColor4* value)
00619 {
00620         if( buf == NULL || buf[0] == '\0' || value == NULL)
00621         {
00622                 return FALSE;
00623         }
00624 
00625         LLColor4 v;
00626         S32 count = sscanf( buf, "%f, %f, %f, %f", v.mV + 0, v.mV + 1, v.mV + 2, v.mV + 3 );
00627         if (1 == count )
00628         {
00629                 // try this format
00630                 count = sscanf( buf, "%f %f %f %f", v.mV + 0, v.mV + 1, v.mV + 2, v.mV + 3 );
00631         }
00632         if( 4 == count )
00633         {
00634                 value->setVec( v );
00635                 return TRUE;
00636         }
00637 
00638         return FALSE;
00639 }
00640 
00641 // EOF

Generated on Fri May 16 08:32:19 2008 for SecondLife by  doxygen 1.5.5