Alphabetical Class Index   Class Hierarchy   Compound Members   File Members   File List  

BOpcodeHandler.h
Go to the documentation of this file.
00001 //
00002 // Copyright (c) 2000 by Tech Soft 3D, LLC.
00003 // The information contained herein is confidential and proprietary to
00004 // Tech Soft 3D, LLC., and considered a trade secret as defined under
00005 // civil and criminal statutes.  Tech Soft 3D shall pursue its civil
00006 // and criminal remedies in the event of unauthorized use or misappropriation
00007 // of its trade secrets.  Use of this information by anyone other than
00008 // authorized employees of Tech Soft 3D, LLC. is granted only under a
00009 // written non-disclosure agreement, expressly prescribing the scope and
00010 // manner of such use.
00011 //
00012 
00013 // $Id$
00014 
00015 //
00016 
00017 #ifndef BOPCODE_HANDLER
00018 #define BOPCODE_HANDLER
00019 
00020 #ifndef BBINFILETK_TOOLKIT
00021     #include "BStreamFileToolkit.h"
00022 #endif
00023 
00024 #ifndef POINTER_SIZED_INT
00025 #if defined(WIN64) || defined(_M_X64) || defined(_WIN64)
00026 #   define POINTER_SIZED_INT __int64
00027 #   define POINTER_SIZED_UINT unsigned __int64
00028 #else
00029 #   define POINTER_SIZED_INT long
00030 #   define POINTER_SIZED_UINT unsigned long
00031 #endif
00032 #endif
00033 
00034 
00036 
00039 
00040 
00060 class BBINFILETK_API2 BBaseOpcodeHandler : public BControlledMemoryObject {
00061     protected:
00062         int             m_stage;        
00063         int             m_progress;     
00064         unsigned char   m_opcode;       
00065         bool            m_needs_tag;    
00066 
00067         int             m_debug_length;   
00068         int             m_debug_allocated;
00069         char *          m_debug_string;   
00071         char *          m_ascii_buffer;
00072         int             m_ascii_size;
00073         int             m_ascii_length;
00074 
00075         int             m_ascii_stage;
00076         int             m_ascii_progress;   
00077 
00078         unsigned char   m_byte;             
00079         unsigned short  m_unsigned_short;   
00080         int             m_int;              
00081         char            m_char;             
00082 
00083     public:
00089         BBaseOpcodeHandler (int op)
00090             : m_stage (0), m_progress (0), m_opcode ((unsigned char)op), m_needs_tag (false),
00091               m_debug_length (0), m_debug_allocated (0), m_debug_string (0),
00092 
00093               m_ascii_buffer (0), m_ascii_size (0), m_ascii_length (0), m_ascii_stage (0), m_ascii_progress(0),
00094               m_byte(0), m_unsigned_short(0), m_int(0), m_char('\0')
00095             {}
00096         virtual ~BBaseOpcodeHandler ();
00097 
00105         virtual TK_Status   Read (BStreamFileToolkit & tk) alter = 0;
00106 
00114         virtual TK_Status   Write (BStreamFileToolkit & tk) alter = 0;
00115 
00123         virtual TK_Status   Execute (BStreamFileToolkit & tk) alter;
00124 
00134         virtual TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant = 0) alter;
00135 
00145         virtual TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter;
00146 
00152         virtual void        Reset () alter;
00153     
00158         virtual bool        Match_Instance (BStreamFileToolkit const & tk, Recorded_Instance alter * instance) alter;
00159 
00160 
00162         unsigned char       Opcode () const { return m_opcode; }
00163 
00168         int                 Pass (BStreamFileToolkit & tk) const { return tk.pass(); }
00169 
00174         TK_Status           Tag (BStreamFileToolkit & tk, int variant= -1) const   { return tk.tag(variant); }
00175 
00179         bool                Tagging (BStreamFileToolkit & tk) const {
00180                                 return m_needs_tag || tk.GetWriteFlags(TK_Force_Tags) != 0;
00181                             }
00182 
00186         void                SetNeedsTag (bool n) alter  { m_needs_tag = n; }
00187 
00191         bool                NeedsTag () const       { return m_needs_tag; }
00192 
00199         virtual TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const {
00200                                 *handler = 0;
00201                                 return tk.Error();
00202                             }
00203 
00209         virtual bool   NeedsContext (BStreamFileToolkit & tk) const { (void)tk; return false; }
00210 
00215         void            SetLoggingString (char const * segment) alter;
00216 
00221         void            SetLoggingString (int length) alter;
00222 
00226         char const *    GetLoggingString () const                           { return m_debug_string; }
00231         char alter *    GetLoggingString () alter               { return m_debug_string; }
00232 
00236         void            LogDebug (BStreamFileToolkit & tk, char const * string = 0) alter;
00237 
00238     protected:
00239         // various means of pulling data from the toolkit buffer
00240         // Note: format conversion is safe to do in output buffer
00241 
00243         TK_Status   GetData (BStreamFileToolkit & tk, char * b, int n) alter    { return tk.read (b, n); }
00244 
00246         TK_Status   GetData (BStreamFileToolkit & tk, short * s, int n) alter   {
00247                         TK_Status   status;
00248                         if ((status = GetData (tk, (char *)s, n * (int)sizeof (short))) == TK_Normal)
00249                             fix (s, n);
00250                         return status;
00251                     }
00252 
00254         TK_Status   GetData (BStreamFileToolkit & tk, int * i,   int n) alter   {
00255                         TK_Status   status;
00256                         if ((status = GetData (tk, (char *)i, n * (int)sizeof (int))) == TK_Normal)
00257                             fix (i, n);
00258                         return status;
00259                     }
00260 
00262         TK_Status   GetData (BStreamFileToolkit & tk, float * f, int n) alter   {
00263                         TK_Status   status;
00264                         if ((status = GetData (tk, (char *)f, n * (int)sizeof (float))) == TK_Normal)
00265                             fix_in (f, n);
00266                         return status;
00267                     }
00268 
00270         TK_Status   GetData (BStreamFileToolkit & tk, unsigned char * b, int n) alter   { return GetData (tk, (char *)b,  n); }
00271 
00273         TK_Status   GetData (BStreamFileToolkit & tk, unsigned short * s, int n) alter  { return GetData (tk, (short *)s, n); }
00274 
00276         TK_Status   GetData (BStreamFileToolkit & tk, unsigned int * i, int n) alter    { return GetData (tk, (int *)i,   n); } 
00277 
00279         TK_Status   GetData (BStreamFileToolkit & tk, char & c) alter                   { return GetData (tk, &c, 1); }
00280 
00282         TK_Status   GetData (BStreamFileToolkit & tk, short & s) alter                  { return GetData (tk, &s, 1); }
00283 
00285         TK_Status   GetData (BStreamFileToolkit & tk, int & i) alter                    { return GetData (tk, &i, 1); }
00286 
00288         TK_Status   GetData (BStreamFileToolkit & tk, unsigned char & b) alter          { return GetData (tk, &b, 1); }
00289 
00291         TK_Status   GetData (BStreamFileToolkit & tk, unsigned short & s) alter         { return GetData (tk, &s, 1); }
00292 
00294         TK_Status   GetData (BStreamFileToolkit & tk, unsigned int & i) alter           { return GetData (tk, &i, 1); }
00295 
00297         TK_Status   GetData (BStreamFileToolkit & tk, float & f) alter                  { return GetData (tk, &f, 1); }
00298 
00300         TK_Status   SkipNewlineAndTabs(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00302         TK_Status   ReadAsciiLine(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00304         TK_Status   ReadAsciiWord(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00306         TK_Status   ReadEndOpcode(BStreamFileToolkit & tk) alter;
00308         bool        RemoveAngularBrackets(char* string) alter;
00310         bool        RemoveQuotes(char* string) alter;
00311 
00313         TK_Status   Read_Referenced_Segment(BStreamFileToolkit & tk, int &i_progress) alter;
00314 
00315         //TK_Status   GetAsciiData(BStreamFileToolkit & tk, float * rFloats,    unsigned int n) alter;
00316 
00318         TK_Status   GetAsciiData(BStreamFileToolkit & tk, int * rInts,      unsigned int n) alter;
00319         //TK_Status   GetAsciiData(BStreamFileToolkit & tk, short * rShorts,    unsigned int n) alter;
00320 
00322         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned char& value)alter;
00324         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, char& value)alter;
00326         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned short& value)alter;
00328         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, short& value)alter;
00330         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, int& value)alter;
00332         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, float& value)alter;
00334         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, float * rFloats, unsigned int n) alter;
00336         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, char * m_string, unsigned int n) alter;
00338         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned char * m_string, unsigned int n) alter;
00340         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, int * rInts,     unsigned int n) alter;
00342         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, short * rShorts, unsigned int n) alter;
00344         TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned short * rShorts, unsigned int n) alter;
00346         TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, unsigned char &value) alter;
00348         TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, int &value) alter;
00350         TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, char &value) alter;
00352         TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, unsigned short &value) alter;
00354         TK_Status   GetAsciiImageData(BStreamFileToolkit & tk, const char * tag, unsigned char * rValues, unsigned int n) alter;
00355 
00357         TK_Status   LookatData (BStreamFileToolkit & tk, unsigned char & b) alter       { return tk.lookat ((char &)b); }
00358 
00359         // various means of putting data into the toolkit buffer
00360         // Note: format conversion is NOT safe in input buffer -- use temps
00361 
00363         TK_Status   PutData (BStreamFileToolkit & tk, char const * b, int n) alter    { return tk.write (b, n); }
00364 
00366         TK_Status   PutData (BStreamFileToolkit & tk, short const * s, int n) alter    {
00367                         #ifdef STREAM_BIGENDIAN
00368                             short *     buffer = new short [n];
00369                             short *     tmp = buffer;
00370                             TK_Status   status;
00371                             int         i;
00372                             for (i=0; i<n; ++i)
00373                                 *tmp++ = flip (*s++);
00374                             status = PutData (tk, (char const *)buffer, n * (int)sizeof (short));
00375                             delete [] buffer;
00376                             if (status != TK_Normal)
00377                                 return status;
00378                             return TK_Normal;
00379                         #else
00380                             return PutData (tk, (char const *)s, n * (int)sizeof (short));
00381                         #endif
00382                     }
00383 
00385         TK_Status   PutData (BStreamFileToolkit & tk, int const * i, int n) alter    {
00386                         #ifdef STREAM_BIGENDIAN
00387                             int *       buffer = new int [n];
00388                             int *       tmp = buffer;
00389                             TK_Status   status;
00390                             int         j;
00391                             for (j=0; j<n; ++j)
00392                                 *tmp++ = flip (*i++);
00393                             status = PutData (tk, (char const *)buffer, n * (int)sizeof (int));
00394                             delete [] buffer;
00395                             if (status != TK_Normal)
00396                                 return status;
00397                             return TK_Normal;
00398                         #else
00399                             return PutData (tk, (char const *)i, n * (int)sizeof (int));
00400                         #endif
00401                     }
00402 
00404         TK_Status   PutData (BStreamFileToolkit & tk, float const * f, int n) alter    {
00405                         #if defined(NON_IEEE) || defined(STREAM_BIGENDIAN)
00406                             float *     buffer = new float [n];
00407                             float *     tmp = buffer;
00408                             TK_Status   status;
00409                             int         i;
00410                             for (i=0; i<n; ++i) {
00411                                 *tmp = *f++;
00412                                 fix_out (tmp++, 1);
00413                             }
00414                             status = PutData (tk, (char const *)buffer, n * (int)sizeof (float));
00415                             delete [] buffer;
00416                             if (status != TK_Normal)
00417                                 return status;
00418                             return TK_Normal;
00419                         #else
00420                             return PutData (tk, (char const *)f, n * (int)sizeof (float));
00421                         #endif
00422                     }
00423 
00425         TK_Status   PutData (BStreamFileToolkit & tk, unsigned char const * b, int n) alter    { return PutData (tk, (char const *)b,  n); }
00426 
00428         TK_Status   PutData (BStreamFileToolkit & tk, unsigned short const * s, int n) alter   { return PutData (tk, (short const *)s, n); }
00429             
00431         TK_Status   PutData (BStreamFileToolkit & tk, unsigned int const * i, int n) alter     { return PutData (tk, (int const *)i,   n); }
00432 
00434         TK_Status   PutData (BStreamFileToolkit & tk, char const & c) alter                    { return PutData (tk, &c, 1); }
00435 
00437         TK_Status   PutData (BStreamFileToolkit & tk, short const & s) alter                   { return PutData (tk, &s, 1); }
00438 
00440         TK_Status   PutData (BStreamFileToolkit & tk, int const & i) alter                     { return PutData (tk, &i, 1); }
00441 
00443         TK_Status   PutData (BStreamFileToolkit & tk, unsigned char const & b) alter           { return PutData (tk, &b, 1); }
00444 
00446         TK_Status   PutData (BStreamFileToolkit & tk, unsigned short const & s) alter          { return PutData (tk, &s, 1); }
00447 
00449         TK_Status   PutData (BStreamFileToolkit & tk, unsigned int const & i) alter            { return PutData (tk, &i, 1); }
00450         
00452         TK_Status   PutData (BStreamFileToolkit & tk, float const & f) alter                   { return PutData (tk, &f, 1); }
00453 
00455         TK_Status   PutOpcode (BStreamFileToolkit & tk, int adjust = 1) alter {
00456                         TK_Status       status;
00457                         unsigned int    sequence;
00458 
00459                         if ((status = PutData (tk, Opcode ())) != TK_Normal)
00460                             return status;
00461 
00462                         tk.adjust_written (adjust);
00463 
00464                         sequence = tk.NextOpcodeSequence();
00465                         if (tk.GetLogging())
00466                             log_opcode (tk, sequence, Opcode());
00467 
00468                         return status;
00469                     }
00470 
00471 
00473         TK_Status   PutAsciiOpcode (BStreamFileToolkit & tk, int adjust = 1, bool is_end = false, bool want_newline = true) alter;
00474     //  TK_Status   PutAsciiOpcode (BStreamFileToolkit & tk, int adjust = 1) alter;
00475 
00477         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, char const * b, int n) alter;
00478 
00480         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, short const * s, int n) alter;
00481 
00483         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, int const * i, int n) alter;
00484 
00486         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, float const * f, int n) alter;
00487 
00489         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned char const * b, int n) alter;
00490 
00492         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned short const * s, int n) alter;
00493 
00495         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned int const * i, int n) alter;
00496 
00498         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, char const & c) alter;
00499 
00501         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, short const & s) alter;
00502 
00504         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00505 
00507         TK_Status   PutAsciiFlag (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00508 
00510         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned char const & b) alter;
00511 
00513         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned short const & s) alter;
00514 
00516         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned int const & i) alter;
00517 
00519         TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, float const & f) alter;
00520 
00522         TK_Status   PutAsciiMask (BStreamFileToolkit & tk,char const *tag, int const & i) alter;
00523 
00525         TK_Status   PutAsciiHex (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00526 
00528         TK_Status   PutStartXMLTag (BStreamFileToolkit & tk, char const *tag) alter ;
00529 
00531         TK_Status   PutEndXMLTag (BStreamFileToolkit & tk, char const *tag) alter ;
00532 
00533 
00534         /* note -- fix for int types will work during read OR write phase, but floats need separate
00535            routines for native->IEEE and IEEE->native
00536         */
00538         short       flip (short s) {
00539                         return (short)(((s >> 8) & 0x00FF) | (s << 8));
00540                     }
00542         int         flip (int i) {
00543                         return ((i >> 24) & 0x000000FF) | ((i >> 8) & 0x0000FF00) |
00544                                ((i <<  8) & 0x00FF0000) |  (i << 24);
00545                     }
00546 
00547 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00548   #ifndef UNREFERENCED
00549     #define UNREFERENCED(x) (void)(x)
00550   #endif
00551 #endif 
00552 
00554         void        fix (int * i, int n) {
00555                         #ifdef STREAM_BIGENDIAN
00556                         while (n--){
00557                                 *i = flip (*i);
00558                                 i++;
00559                         }
00560                         #else
00561                         UNREFERENCED(i);
00562                         UNREFERENCED(n);
00563                         #endif
00564                     }
00566         void        fix (short * s, int n) {
00567                         #ifdef STREAM_BIGENDIAN
00568                             while (n--){
00569                                 *s = flip (*s);
00570                                 s++;
00571                                 }
00572                         #else
00573                         UNREFERENCED(s);
00574                         UNREFERENCED(n);
00575                         #endif
00576                     }
00577 
00579         void        fix_in (float * f, int n) {
00580                         #ifdef NON_IEEE
00581                             // need to re-interpret from IEEE to native format
00582                         #endif
00583 
00584                         #ifdef STREAM_BIGENDIAN
00585                         int * i = (int*) f;
00586                         while (n--){
00587                                 *i = flip (*i);
00588                             
00589                                 i++;
00590                         }
00591                         #else
00592                         UNREFERENCED(f);
00593                         UNREFERENCED(n);
00594                         #endif
00595                     }
00597         void        fix_out (float * f, int n) {
00598                         #ifdef NON_IEEE
00599                             // need to re-interpret from native format to IEEE
00600                         #endif
00601 
00602                         #ifdef STREAM_BIGENDIAN
00603                         int * i = (int*) f;
00604                         while (n--){
00605                                 *i = flip (*i);
00606                                 i++;
00607                         }
00608                         #else
00609                         UNREFERENCED(f);
00610                         UNREFERENCED(n);
00611                         #endif
00612                     }
00613 
00615         void        log_opcode (BStreamFileToolkit & tk, unsigned int sequence, unsigned char opcode) alter;
00616 
00617 
00618         /* common conversions
00619            these two are for converting between floats [0.0,1.0] and unsigned chars [0,255]
00620         */
00622         void        floats_to_bytes (float const * in, unsigned char alter * out, int count) const {
00623                         while (count-- > 0)
00624                             *out++ = char (*in++ * 255.999f);
00625                     }
00627         void        bytes_to_floats (unsigned char const * in, float alter * out, int count) const {
00628                         while (count-- > 0)
00629                             *out++ = float (*in++) * (1.0f/255.0f);
00630                     }
00631 
00632         // access to toolkit utility functions
00634         void        add_segment (BStreamFileToolkit & tk, ID_Key key) alter     { tk.add_segment (key); }
00636         ID_Key      remove_segment (BStreamFileToolkit & tk) alter              { return tk.remove_segment(); }
00638         void        set_last_key (BStreamFileToolkit & tk, ID_Key key) alter    { tk.set_last_key (key); }
00640         ID_Key      last_key (BStreamFileToolkit & tk) const {
00641                         if (tk.m_last_keys_used == 1) 
00642                             return tk.m_last_keys[0];
00643                         else 
00644                             return -1; 
00645                     } 
00647         void        adjust_written (BStreamFileToolkit & tk, int count) alter   { tk.adjust_written (count); }
00649         void        increase_nesting (BStreamFileToolkit & tk, int amount=1) alter  { tk.increase_nesting (amount); }
00651         void        decrease_nesting (BStreamFileToolkit & tk, int amount=1) alter  { tk.decrease_nesting (amount); }
00652 
00656         void        Revisit (BStreamFileToolkit & tk, float priority=0.0f, int variant=0) const  { tk.revisit (Opcode(), priority, variant); }
00657 
00661         BBaseOpcodeHandler alter *  Opcode_Handler (BStreamFileToolkit & tk, unsigned char op) const
00662                                         { return tk.opcode_handler (op); }
00663 
00665         void        Record_Instance (BStreamFileToolkit & tk, ID_Key key, int variant,
00666                                      int val1, int val2, int val3) const {
00667                         tk.record_instance (key, variant, this, val1, val2, val3);
00668                     }
00670         bool        Find_Instance (BStreamFileToolkit & tk, int val1, int val2, int val3) alter {
00671                         return tk.find_instance (this, val1, val2, val3);
00672                     }
00673 
00675         void        Remember_Item (BStreamFileToolkit & tk, ID_Key key) const  { tk.remember_item(key); }
00677         bool        Find_Item (BStreamFileToolkit & tk, ID_Key key) const      { return tk.find_item(key); }
00678 
00680         bool        validate_count (int count, int limit = 1<<24) const { return 0 <= count && count <= limit; }
00681 
00685     static float read_float (char const *cp, char const * alter * newcpp = 0);
00687     static float read_float (char const *cp, char alter * alter * newcpp)
00688                     { return read_float (cp, (char const **)newcpp); }
00690     static char * write_float (char * buffer, double f);
00691 };
00692 
00694 #define IMPLEMENT_CLONE(class_name)                                                                         \
00695             TK_Status class_name::Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **newhandler) const {  \
00696                 *newhandler = new class_name;                                                               \
00697                 if (*newhandler != null)                                                                    \
00698                     return TK_Normal;                                                                       \
00699                 else                                                                                        \
00700                     return tk.Error ("memory allocation in" #class_name "::clone failed");                  \
00701             }                                                                                              //
00702 
00703 #define IMPLEMENT_CLONE_OPCODE(class_name)                                                                  \
00704             TK_Status class_name::Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **newhandler) const {  \
00705                 *newhandler = new class_name (Opcode());                                                    \
00706                 if (*newhandler != null)                                                                    \
00707                     return TK_Normal;                                                                       \
00708                 else                                                                                        \
00709                     return tk.Error ("memory allocation in" #class_name "::clone failed");                  \
00710 }                                                                                                          //
00711 
00712 
00713 
00715 
00723 // Additions need to be reflected in the 'opcode_string' table in BOpcodeHandler.cpp
00724 enum TKE_Object_Types {
00725     TKE_Termination                 = '\x00',       
00726     TKE_Pause                       = '\x01',       
00727 
00728     TKE_Comment                     = ';',          
00729 
00730     TKE_Font                        = 'f',          
00731     TKE_Texture                     = 't',          
00732     TKE_Material                    = '\x02',       
00733 
00734     TKE_Open_Segment                = '(',          
00735     TKE_Close_Segment               = ')',          
00736     TKE_Reopen_Segment              = 's',          
00737     TKE_Include_Segment             = '<',          
00738     TKE_Style_Segment               = '{',          
00739     TKE_Named_Style                 = 'y',          
00740 
00741     TKE_Geometry_Attributes         = ':',          
00742     TKE_Renumber_Key_Global         = 'K',          
00743     TKE_Renumber_Key_Local          = 'k',          
00744     TKE_Priority                    = '0',          
00745     TKE_Tag                         = 'q',          
00746 
00747     TKE_Bounding                    = 'b',          
00748     TKE_Bounding_Info               = 'B',          
00749     TKE_Callback                    = '\x07',       
00750     TKE_Camera                      = '>',          
00751     TKE_Conditional_Action          = '\'',         
00752     TKE_Conditions                  = '?',          
00753     TKE_Color                       = '"',          
00754     TKE_Color_By_Index              = '\x08',       
00755     TKE_Color_By_Index_16           = '\x09',       
00756     TKE_Color_By_FIndex             = '\x0A',       
00757     TKE_Color_RGB                   = '~',          
00758     TKE_Color_By_Value              = '\x0B',       
00759     TKE_Color_Map                   = '\x0C',       
00760     TKE_Edge_Pattern                = '\x0D',       
00761     TKE_Edge_Weight                 = '\x0E',       
00762     TKE_Face_Pattern                = 'P',          
00763     TKE_Geometry_Options            = '\x17',       
00764     TKE_Handedness                  = 'h',          
00765     TKE_Heuristics                  = 'H',          
00766     TKE_Line_Pattern                = '-',          
00767     TKE_Line_Weight                 = '=',          
00768     TKE_Marker_Size                 = '+',          
00769     TKE_Marker_Symbol               = '@',          
00770     TKE_Modelling_Matrix            = '%',          
00771     TKE_LOD                         = '\x19',       
00772     TKE_Rendering_Options           = 'R',          
00773     TKE_Selectability               = '!',          
00774     TKE_Text_Alignment              = '*',          
00775     TKE_Text_Font                   = 'F',          
00776     TKE_Text_Path                   = '|',          
00777     TKE_Text_Spacing                = ' ',          
00778     TKE_Texture_Matrix              = '$',          
00779     TKE_Unicode_Options             = '\x16',       
00780     TKE_User_Index                  = 'n',          
00781     TKE_User_Index_Data             = 'm',          
00782     TKE_User_Options                = 'U',          
00783     TKE_User_Value                  = 'v',          
00784     TKE_Visibility                  = 'V',          
00785     TKE_Window                      = 'W',          
00786     TKE_Window_Frame                = '#',          
00787     TKE_Window_Pattern              = 'p',          
00788     TKE_Glyph_Definition            = 'j',          
00789     TKE_Line_Style                  = 'J',          
00790     TKE_Named_Style_Def             = 'u',          
00791 
00792     TKE_Area_Light                  = 'a',          
00793     TKE_Circle                      = 'C',          
00794     TKE_Circular_Arc                = 'c',          
00795     TKE_Circular_Chord              = '\\',         
00796     TKE_Circular_Wedge              = 'w',          
00797     TKE_Cutting_Plane               = '/',          
00798     TKE_Cylinder                    = 'Y',          
00799     TKE_Distant_Light               = 'd',          
00800     TKE_Ellipse                     = 'E',          
00801     TKE_Elliptical_Arc              = 'e',          
00802     TKE_Grid                        = 'g',          
00803     TKE_Image                       = 'i',          
00804     TKE_Infinite_Line               = '`',          
00805     TKE_Infinite_Ray                = '\x11',       
00806     TKE_Line                        = 'l',          
00807     TKE_Local_Light                 = '.',          
00808     TKE_Marker                      = 'X',          
00809     TKE_Mesh                        = 'M',          
00810     TKE_NURBS_Curve                 = 'N',          
00811     TKE_NURBS_Surface               = 'A',          
00812     TKE_PolyCylinder                = 'Q',          
00813     TKE_Polygon                     = 'G',          
00814     TKE_Polyline                    = 'L',          
00815     TKE_PolyPolyline                = '\x10',       
00816     TKE_Reference                   = 'r',          
00817     TKE_Shell                       = 'S',          
00818     TKE_Sphere                      = '\x1a',       
00819     TKE_Spot_Light                  = '^',          
00820     TKE_Text                        = 'T',          
00821     TKE_Text_With_Encoding          = 'x',          
00822 
00823     TKE_Start_User_Data             = '[',          
00824     TKE_Stop_User_Data              = ']',          
00825     TKE_XML                         = '\x18',       
00826     TKE_External_Reference          = '\x12',       
00827     TKE_External_Reference_Unicode  = '\x13',       
00828     TKE_URL                         = '\x15',       
00829 
00830     TKE_Start_Compression           = 'Z',          
00831     TKE_Stop_Compression            = 'z',          
00832 
00833     TKE_Repeat_Object               = '&',          
00834     TKE_View                        = '}',          
00835     TKE_Clip_Rectangle              = 'o',          
00836     TKE_Clip_Region                 = 'O',          
00837     TKE_Complex_Clip_Region         = '\x0F',       
00838 
00839     TKE_File_Info                   = 'I',          
00840     TKE_Dictionary                  = 'D',          
00841     TKE_Dictionary_Locater          = '_',          
00842     TKE_Thumbnail                   = '\x14',       
00843     TKE_Delete_Object               = '\x7F',       
00844 
00845     TKE_Tag_Implicit                = TKE_Tag,      
00846     TKE_Streaming_Mode              = ',',          
00847 
00848     TKE_First_User_Opcode           = '\xA0',       
00849     TKE_Last_User_Opcode            = '\xEF',       
00850     TKE_HW3D_Image                  = 0xE0,
00852     TKE_Pseudo_Handler              = '\xFE',       
00853     TKE_Extended_Code               = '\xFF'        
00854 };
00855 
00856 
00858 
00859 
00865 class BBINFILETK_API TK_Default : public BBaseOpcodeHandler {
00866     
00867     protected:
00868         char        *m_opcode_buffer;
00869         int          m_buffer_count;
00870 
00871     public:
00873         TK_Default () : BBaseOpcodeHandler (TKE_Pseudo_Handler) {m_opcode_buffer = 0, m_buffer_count = 0;}
00874 
00875         TK_Status   Read (BStreamFileToolkit & tk) alter;
00876         
00877         TK_Status   Write (BStreamFileToolkit & tk) alter;
00878 
00879 
00880         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
00881         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
00882 
00883 };
00884 
00890 class BBINFILETK_API TK_Unavailable : public BBaseOpcodeHandler {
00891     public:
00893         TK_Unavailable (char opcode) : BBaseOpcodeHandler (opcode) {}
00894 
00895         TK_Status   Read (BStreamFileToolkit & tk) alter;
00896         TK_Status   Write (BStreamFileToolkit & tk) alter;
00897 };
00898 
00901 
00907 class BBINFILETK_API TK_Header : public BBaseOpcodeHandler {
00908     protected:
00910         BBaseOpcodeHandler *    m_current_object;
00911 
00912     public:
00914         TK_Header () : BBaseOpcodeHandler (TKE_Pseudo_Handler), m_current_object (0) {}
00915         ~TK_Header();
00916 
00917         TK_Status   Read (BStreamFileToolkit & tk) alter;
00918         TK_Status   Write (BStreamFileToolkit & tk) alter;
00919 
00920 
00921         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
00922         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
00923 
00924 
00925         void        Reset () alter;
00926 };
00927 
00928 
00930 
00936 class BBINFILETK_API TK_File_Info : public BBaseOpcodeHandler {
00937     protected:
00939         int             m_flags;
00940 
00941     public:
00943         TK_File_Info () : BBaseOpcodeHandler (TKE_File_Info), m_flags (0) {}
00944 
00945         
00946         TK_Status   Read (BStreamFileToolkit & tk) alter;
00947         TK_Status   Write (BStreamFileToolkit & tk) alter;
00948         TK_Status   Execute (BStreamFileToolkit & tk) alter;
00949         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
00950         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
00951                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
00952 
00953 
00954         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
00955         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
00956 
00957 
00959         void            SetFlags (int f) alter                  { m_flags = f;      }
00961         int             GetFlags () alter                   { return m_flags;   }
00962 };
00963 
00964 
00966 
00974 class BBINFILETK_API TK_Comment : public BBaseOpcodeHandler {
00975     protected:
00977         int             m_length;
00979         char *          m_comment;
00980         
00982         void    set_comment (char const * comment) alter;
00984         void    set_comment (int length) alter;
00985 
00986     public:
00988         TK_Comment (char const * comment = 0);
00989         ~TK_Comment();
00990 
00991         TK_Status   Read (BStreamFileToolkit & tk) alter;
00992         TK_Status   Write (BStreamFileToolkit & tk) alter;
00993         TK_Status   Execute (BStreamFileToolkit & tk) alter;
00994 
00995         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
00996         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
00997         TK_Status   ExecuteAscii (BStreamFileToolkit & tk) alter;
01000         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) {
01001                         (void)tk; (void)key; (void)variant;
01002                         return TK_Normal;
01003                     }
01004         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01005                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01006         void        Reset () alter;
01007 
01012         void            SetComment (char const * comment) alter { set_comment (comment); }
01017         void            SetComment (int length) alter           { set_comment (length);  }
01021         char const *    GetComment () const                 { return m_comment; }
01026         char alter *    GetComment () alter                 { return m_comment; }
01027 };
01028 
01029 
01031 
01039 class BBINFILETK_API TK_Terminator : public BBaseOpcodeHandler {
01040     public:
01042         TK_Terminator (char opcode, bool is_file_terminator = true) : BBaseOpcodeHandler (opcode), 
01043                                                                     m_terminate_file(is_file_terminator) {}
01044 
01045         TK_Status   Read (BStreamFileToolkit & tk) alter;
01046         TK_Status   Write (BStreamFileToolkit & tk) alter;
01047         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01048 
01049 
01050         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01051         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01052 
01053     protected:
01055         // meant to terminate the file or something else (viz. LOD collection)
01056         bool        m_terminate_file;
01057 };
01058 
01059 
01061 
01068 class BBINFILETK_API TK_Compression : public BBaseOpcodeHandler {
01069     public:
01071         TK_Compression (char opcode) : BBaseOpcodeHandler (opcode) {}
01072 
01073         TK_Status   Read (BStreamFileToolkit & tk) alter;
01074         TK_Status   Write (BStreamFileToolkit & tk) alter;
01075 
01076         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01077         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01078         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01079         TK_Status   ExecuteAscii (BStreamFileToolkit & tk) alter;
01080         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
01081         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01082                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01083 };
01084 
01086 
01088 
01098 class BBINFILETK_API TK_Open_Segment : public BBaseOpcodeHandler {
01099     protected:
01100         int             m_length;   
01101         int             m_allocated;
01102         char *          m_string;   
01104 
01105         void    set_segment (char const * segment) alter;
01107         void    set_segment (int length) alter;
01108 
01109     public:
01111         TK_Open_Segment () : BBaseOpcodeHandler (TKE_Open_Segment), m_length (0), m_allocated (0), m_string (0) {}
01112         ~TK_Open_Segment();
01113 
01114         TK_Status   Read (BStreamFileToolkit & tk) alter;
01115         TK_Status   Write (BStreamFileToolkit & tk) alter;
01116         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01117 
01118         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01119         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01120         void        Reset () alter;
01121 
01126         void            SetSegment (char const * segment) alter { set_segment (segment); }
01127 
01132         void            SetSegment (int length) alter           { set_segment (length); }
01133 
01137         char const *    GetSegment () const                 { return m_string; }
01142         char alter *    GetSegment () alter                 { return m_string; }
01143 };
01144 
01145 
01147 
01156 class BBINFILETK_API TK_Close_Segment : public BBaseOpcodeHandler {
01157     public:
01159         TK_Close_Segment () : BBaseOpcodeHandler (TKE_Close_Segment) {}
01160 
01161         TK_Status   Read (BStreamFileToolkit & tk) alter;
01162         TK_Status   Write (BStreamFileToolkit & tk) alter;
01163         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01164 
01165         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01166         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01167 };
01168 
01169 
01170 
01172 
01184 class BBINFILETK_API TK_Reopen_Segment : public BBaseOpcodeHandler {
01185     protected:
01186         int             m_index;   
01188     public:
01190         TK_Reopen_Segment () : BBaseOpcodeHandler (TKE_Reopen_Segment), m_index (-1) {}
01191 
01192         TK_Status   Read (BStreamFileToolkit & tk) alter;
01193         TK_Status   Write (BStreamFileToolkit & tk) alter;
01194         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01195 
01196         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01197         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01198 
01200         void         SetIndex (int i) alter      { m_index = i;      }
01202         int          GetIndex () const       { return m_index;   }
01203 };
01204 
01205 
01207 
01215 class BBINFILETK_API TK_Referenced_Segment : public BBaseOpcodeHandler {
01216     protected:
01217         int             m_length;               
01218         int             m_allocated;            
01219         char *          m_string;               
01220         int             m_cond_length;          
01221         int             m_cond_allocated;       
01222         char *          m_condition;            
01224         ID_Key          m_key;                  
01225         ID_Key          m_renumbered_key;       
01226         unsigned char   m_renumbered_scope;     
01227         BBaseOpcodeHandler *     m_referee;     
01228         bool            m_follow;               
01229 
01230         void    set_segment (char const * segment) alter;   
01231         void    set_segment (int length) alter;             
01232 
01233     public:
01235         TK_Referenced_Segment (unsigned char opcode);
01236         ~TK_Referenced_Segment();
01237 
01238         TK_Status   Read (BStreamFileToolkit & tk) alter;
01239         TK_Status   Write (BStreamFileToolkit & tk) alter;
01240         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01241 
01242         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01243         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01244         void        Reset () alter;
01245 
01250         void            SetSegment (char const * segment) alter { set_segment (segment); }
01255         void            SetSegment (int length) alter           { set_segment (length); }
01259         char const *    GetSegment () const                 { return m_string; }
01264         char alter *    GetSegment () alter                 { return m_string; }
01265 
01266 
01271         void            SetCondition (char const * condition) alter;
01276         void            SetCondition (int length) alter;
01280         char const *    GetCondition () const                 { return m_condition; }
01285         char alter *    GetCondition () alter                 { return m_condition; }
01286 
01287 
01289         void            SetFollow (bool f) alter                { m_follow = f;     }
01291         bool            GetFollow () alter                  { return m_follow;  }
01292 };
01293 
01294 
01296 
01304 class BBINFILETK_API TK_Reference : public BBaseOpcodeHandler {
01305     protected:
01306         int             m_index;                
01307         int             m_cond_length;          
01308         int             m_cond_allocated;       
01309         char *          m_condition;            
01311         ID_Key          m_this_key;             
01312         ID_Key          m_key;                  
01313         BBaseOpcodeHandler *     m_referee;     
01314         bool            m_follow;               
01315 
01316     public:
01318         TK_Reference ();
01319         ~TK_Reference();
01320 
01321         TK_Status   Read (BStreamFileToolkit & tk) alter;
01322         TK_Status   Write (BStreamFileToolkit & tk) alter;
01323         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01324 
01325         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01326         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01327         void        Reset () alter;
01328 
01330         void            SetIndex (int index) alter             { m_index = index;   }
01332         ID_Key          GetIndex () alter                  { return m_index;    }
01333 
01338         void            SetCondition (char const * condition) alter;
01343         void            SetCondition (int length) alter;
01347         char const *    GetCondition () const                 { return m_condition; }
01352         char alter *    GetCondition () alter                 { return m_condition; }
01353 
01354 
01356         void            SetFollow (bool f) alter                { m_follow = f;     }
01358         bool            GetFollow () alter                  { return m_follow;  }
01359 };
01360 
01361 
01365 enum Instance_Options {
01366     Instance_By_Tristrip    = 0x01  
01367 };
01368 
01369 
01371 
01379 class BBINFILETK_API TK_Instance : public BBaseOpcodeHandler {
01380     protected:
01381         int             m_from_index;   
01382         int             m_from_variant; 
01383         int             m_to_index;     
01384         int             m_to_variant;   
01385         int             m_options;      
01386         float           m_matrix[16];   
01387 
01388     public:
01390         TK_Instance (int from_index=0, int from_variant=0, int to_index=0, int to_variant=0,
01391                      int options=0, float const * xform=0);  
01392 
01393         TK_Status   Read (BStreamFileToolkit & tk) alter;
01394         TK_Status   Write (BStreamFileToolkit & tk) alter;
01395         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01396 
01397         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01398         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01399 
01400         void        Reset () alter;
01401 };
01402 
01404 
01407 class BBINFILETK_API TK_Delete_Object : public BBaseOpcodeHandler {
01408     protected:
01409         int             m_index;   
01410 
01411     public:
01413         TK_Delete_Object () : BBaseOpcodeHandler (TKE_Delete_Object), m_index (-1) {}
01414 
01415         TK_Status   Read (BStreamFileToolkit & tk) alter;
01416         TK_Status   Write (BStreamFileToolkit & tk) alter;
01417         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01418 
01419         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01420         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01421 
01423         void        SetIndex (int i) alter                  { m_index = i;      }
01425         int         GetIndex () alter                       { return m_index;   }
01426 };
01427 
01428 
01430 
01431 
01433 
01436 class BBINFILETK_API TK_LOD : public BBaseOpcodeHandler {
01437     protected:
01438         int *m_num_primitives;              
01439         BBaseOpcodeHandler ***m_primitives; 
01440         int m_highest_level;                
01441         int m_levels_allocated;             
01442         int m_substage;                     
01443         struct vlist_s *m_current_working;  
01444         int m_current_level;            
01445 
01446         TK_Status   ReadOneList (BStreamFileToolkit & tk) alter;  
01447 
01448     public:
01450         TK_LOD () : BBaseOpcodeHandler (TKE_LOD) {
01451             m_num_primitives = 0;
01452             m_primitives = 0;
01453             m_highest_level = 0;
01454             m_levels_allocated = 0;
01455             m_substage = 0;
01456             m_current_working = 0;
01457             m_current_level = 0;
01458         }
01459         ~TK_LOD();
01460 
01461         TK_Status   Read (BStreamFileToolkit & tk) alter;
01462         TK_Status   Write (BStreamFileToolkit & tk) alter;
01463         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01464 
01465         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01466         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01467 
01468         void        Reset () alter;
01469 };
01471 #define TKLOD_ESCAPE 255
01472 
01473 
01475 
01477 
01482 class BBINFILETK_API TK_Geometry_Attributes : public BBaseOpcodeHandler {
01483     protected:
01484 
01485     public:
01487         TK_Geometry_Attributes () : BBaseOpcodeHandler (TKE_Geometry_Attributes) {}
01488 
01489         TK_Status   Read (BStreamFileToolkit & tk) alter;
01490         TK_Status   Write (BStreamFileToolkit & tk) alter;
01491 
01492         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01493         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01494         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01495 };
01496 
01498 
01508 class BBINFILETK_API TK_Renumber : public BBaseOpcodeHandler {
01509     protected:
01510         ID_Key          m_key; 
01511 
01512     public:
01516         TK_Renumber (unsigned char opcode, ID_Key key = 0) : BBaseOpcodeHandler (opcode), m_key (key) {}  
01517 
01518         TK_Status   Read (BStreamFileToolkit & tk) alter;
01519         TK_Status   Write (BStreamFileToolkit & tk) alter;
01520         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01521 
01522         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01523         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01524 
01525         void            SetKey (ID_Key k) alter     { m_key = k;    }
01527         ID_Key          GetKey () const         { return m_key; }
01528 };
01529 
01530 
01532 
01537 class BBINFILETK_API TK_Tag : public BBaseOpcodeHandler {
01538     protected:
01539 
01540     public:
01542         TK_Tag (unsigned char opcode = TKE_Tag) : BBaseOpcodeHandler (opcode) {}
01543 
01544         TK_Status   Read (BStreamFileToolkit & tk) alter;
01545         TK_Status   Write (BStreamFileToolkit & tk) alter;
01546 
01547         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01548         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01549 
01550         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01551         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01552         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01553                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01554 };
01555 
01557 
01564 // Note: unlike most opcode handlers, this one does not contain its own data, it is primarily a
01565 // wrapper around the key <-> index translation table in the toolkit.
01566 class BBINFILETK_API TK_Dictionary : public BBaseOpcodeHandler {
01567     protected:
01568         unsigned char   m_format;       
01569         int             m_placeholder;      
01570         unsigned char   m_present;      
01571         int             m_number_of_items;  
01572 
01573         Internal_Translator::Index_Key_Pair alter * m_item; 
01574 
01575     public:
01577         TK_Dictionary () : BBaseOpcodeHandler (TKE_Dictionary), m_format (0) {}
01578 
01579         TK_Status   Read (BStreamFileToolkit & tk) alter;
01580         TK_Status   Write (BStreamFileToolkit & tk) alter;
01581 
01582         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01583         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01584 
01585         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01586         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01587         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01588                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01589         void        Reset () alter;
01590 };
01591 
01592 
01594 
01601 class BBINFILETK_API TK_Dictionary_Locater : public BBaseOpcodeHandler {
01602     protected:
01603         int             m_size;         
01604         int             m_offset;       
01605 
01606     public:
01608         TK_Dictionary_Locater () : BBaseOpcodeHandler (TKE_Dictionary_Locater), m_offset (0) {}
01609 
01610         TK_Status   Read (BStreamFileToolkit & tk) alter;
01611         TK_Status   Write (BStreamFileToolkit & tk) alter;
01612 
01613         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01614         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01615 
01616         TK_Status   Execute (BStreamFileToolkit & tk) alter;
01617         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01618         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01619                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01620         void        Reset () alter;
01621 
01623     void        SetSize (int size) alter        { m_size = size; }
01625     int         GetSize () const                { return m_size;   }
01627     void        SetOffset (int offset) alter    { m_offset = offset; }
01629     int         GetOffset () const              { return m_offset;   }
01630 };
01631 
01632 
01634 
01638 enum TKO_Geometry_Bits {
01639     // first byte is common/shared items, plus flag for extended bits
01640     TKO_Geo_Face            = 0x00000001,   
01641     TKO_Geo_Edge            = 0x00000002,   
01642     TKO_Geo_Line            = 0x00000004,   
01643     TKO_Geo_Marker          = 0x00000008,   
01644     TKO_Geo_Text            = 0x00000010,   
01645     TKO_Geo_Window          = 0x00000020,   
01646     TKO_Geo_Image           = 0x00000040,   
01647 
01648     TKO_Geo_Extended        = 0x00000080,   
01649     TKO_Geo_Extended_Mask   = 0xFFFFFF00,   
01650     TKO_Geo_Extended_Shift  = 8,            
01651 
01652     // extras for color
01653     TKO_Geo_Ambient_Up      = 0x00000100,   
01654     TKO_Geo_Light           = 0x00000200,   
01655     TKO_Geo_Face_Contrast   = 0x00000400,   
01656     TKO_Geo_Window_Contrast = 0x00000800,   
01657     TKO_Geo_Front           = 0x00001000,   
01658     TKO_Geo_Back            = 0x00002000,   
01659     TKO_Geo_Vertex          = 0x00004000,   
01660     TKO_Geo_Geom_Colors     = 0x0000701F,   
01661     TKO_Geo_Every_Colors    = 0x000073BF,   
01662 
01663     TKO_Geo_Extended_Colors = 0x00008000,   
01664     TKO_Geo_Extended_Colors_Mask
01665                             = 0xFFFF0000,   
01666     TKO_Geo_Extended_Colors_Shift
01667                             = 16,           
01668 
01669     TKO_Geo_Edge_Contrast   = 0x00010000,   
01670     TKO_Geo_Line_Contrast   = 0x00020000,   
01671     TKO_Geo_Marker_Contrast = 0x00040000,   
01672     TKO_Geo_Vertex_Contrast = 0x00080000,   
01673     TKO_Geo_Cut_Edge        = 0x00100000,   
01674     TKO_Geo_Simple_Reflection=0x00200000,   
01675     TKO_Geo_Cut_Face        = 0x00400000,   
01676 
01677     TKO_Geo_Extended2       = 0x00800000,   
01678     TKO_Geo_Extended2_Mask  = 0xFF000000,   
01679     TKO_Geo_Extended2_Shift = 24,           
01680 
01681     TKO_Geo_Text_Contrast   = 0x01000000,   
01682     TKO_Geo_Ambient_Down    = 0x02000000,   
01683     TKO_Geo_Cut_Face_Contrast
01684                             = 0x04000000,   
01685     TKO_Geo_Ambient         = 0x02000100,   
01686     TKO_Geo_All_Colors      = 0x077F7F7F,   
01687 
01688     //extras for selectability
01689     TKO_Geo_String_Cursor   = 0x00000100,   
01690 //  TKO_Geo_Light           = 0x00000200,   //!< extra item for selectability; refer to ::HC_Set_Selectability for a description
01691 //  TKO_Geo_Vertex          = 0x00004000,   //!< extra item for selectability; refer to ::HC_Set_Selectability for a description
01692     TKO_Geo_Isoline         = 0x00000080,   
01693     TKO_Geo_Geom_Selects    = 0x0000435F,   
01694     TKO_Geo_All_Selects     = 0x000043FF,   
01695 
01696     // extras for visibility
01697 //  TKO_Geo_String_Cursor   = 0x00000100,   //!< extra item for visibility; refer to ::HC_Set_Visibility for a description
01698     TKO_Geo_Face_Lighting   = 0x00000200,   
01699     TKO_Geo_Edge_Lighting   = 0x00000400,   
01700     TKO_Geo_Marker_Lighting = 0x00000800,   
01701     TKO_Geo_Light_Visibles  = 0x00000E00,   
01702 
01703     TKO_Geo_Silhouette_Edge = 0x00001000,   
01704     TKO_Geo_Perimeter_Edge  = 0x00002000,   
01705     TKO_Geo_Mesh_Quad       = 0x00004000,   
01706     TKO_Geo_Hard_Edge       = 0x00008000,   
01707     TKO_Geo_Cutting_Plane   = 0x00010000,   
01708     TKO_Geo_Shadow_Emit     = 0x00020000,   
01709     TKO_Geo_Shadow_Cast     = 0x00040000,   
01710     TKO_Geo_Shadow_Receive  = 0x00080000,   
01711     TKO_Geo_Shadow_Visibles = 0x000E0000,   
01712 //  TKO_Geo_Cut_Edge        = 0x00100000,   //!< extra item for visibility; refer to ::HC_Set_Visibility for a description
01713     TKO_Geo_Vertex_Vis      = 0x00200000,   
01714 //  TKO_Geo_Cut_Face        = 0x00400000,   //!< extra item for visibility; refer to ::HC_Set_Visibility for a description
01715     TKO_Geo_Cut_Geometry    = 0x00500000,   
01716 
01717     TKO_Geo_Adjacent_Edge   = 0x01000000,   
01718     TKO_Geo_NonCulled_Edge  = 0x02000000,   
01719     TKO_Geo_Edge_Visibles   = 0x0300F002,   
01720 
01721 
01722     TKO_Geo_Geom_Visibles   = 0x0301FFFF,   
01723 
01724 
01725 
01726     TKO_Geo_All_Visibles    = 0x037FFF7F    
01727 };
01728 
01729 
01733 enum TKO_Color_Channels {
01734     TKO_Channel_Diffuse         = 0, 
01735     TKO_Channel_Specular        = 1, 
01736     TKO_Channel_Mirror          = 2, 
01737     TKO_Channel_Transmission    = 3, 
01738     TKO_Channel_Emission        = 4, 
01739     TKO_Channel_Gloss           = 5, 
01740     TKO_Channel_Index           = 6, 
01741     TKO_Channel_Extended        = 7, 
01742     TKO_Channel_Environment     = 8, 
01743     TKO_Channel_Bump            = 9, 
01744 
01745     TKO_Channel_Count           = 10,
01746 
01747     TKO_Channel_Extended_Mask   = 0xFF00,   
01748     TKO_Channel_Extended_Shift  = 8         
01749 };
01750 
01751 
01753 
01758 class BBINFILETK_API TK_Color : public BBaseOpcodeHandler {
01759     protected:
01760         int             m_mask;     
01761         short           m_channels; 
01762 
01766         class BBINFILETK_API channel {
01767             public:
01768                 float   m_rgb[3];      
01769                 char *  m_name;        
01770 
01771                 channel() : m_name (0) {}
01772                 ~channel() { ::delete [] m_name; }
01773                 void    Reset () alter  { ::delete [] m_name;  m_name = 0; }    
01774         };
01775 
01776         channel         m_diffuse;      
01777         channel         m_specular;     
01778         channel         m_mirror;       
01779         channel         m_transmission; 
01780         channel         m_emission;     
01781         channel         m_environment;  
01782         channel         m_bump;         
01783         float           m_gloss;        
01784         float           m_index;        
01785         int             m_substage;     
01786 
01788         void    set_channel_rgb (channel alter & c, float r, float g, float b, int which_channel = -1) alter {
01789                     c.m_rgb[0] = r;     c.m_rgb[1] = g;     c.m_rgb[2] = b;
01790                     if (which_channel != -1) {
01791                         m_channels |= (1 << which_channel);
01792                         if (which_channel > TKO_Channel_Extended)
01793                         m_channels |= (1 << TKO_Channel_Extended);
01794                     }
01795                 }
01797         void    set_channel_name (channel alter & c, char const * name, int which_channel = -1) alter;
01799         void    set_channel_name (channel alter & c, int length, int which_channel = -1) alter;
01800 
01801     public:
01802         TK_Color ();
01803         ~TK_Color ();
01804 
01805         TK_Status   Read (BStreamFileToolkit & tk) alter;
01806         TK_Status   Write (BStreamFileToolkit & tk) alter;
01807         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01808 
01809         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01810         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01811 
01812         void        Reset () alter;
01813 
01815         void            SetGeometry (int m) alter {
01816                             m_mask = m & TKO_Geo_All_Colors;
01817                             if ((m & TKO_Geo_Extended_Mask) != 0) {
01818                                 m_mask |= TKO_Geo_Extended;
01819                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
01820                                     m_mask |= TKO_Geo_Extended_Colors;
01821                                     if ((m & TKO_Geo_Extended2_Mask) != 0)
01822                                         m_mask |= TKO_Geo_Extended2;
01823                                 }
01824                             }
01825                         }
01827         int             GetGeometry () const                        { return m_mask;                        }
01829         void            SetChannels (int c) alter  {
01830                             m_channels = (short)c;
01831                             if ((c & (~0 << (TKO_Channel_Extended_Shift))) != 0)
01832                                 m_channels |= (1 << TKO_Channel_Extended);
01833                         }
01835         int             GetChannels () const                        { return (int)m_channels;               }
01836 
01838         void            SetDiffuse (float r, float g, float b) alter    { set_channel_rgb (m_diffuse, r, g, b, TKO_Channel_Diffuse); }
01840         void            SetDiffuse (float const * rgb) alter            { SetDiffuse (rgb[0], rgb[1], rgb[2]);  }
01842         void            SetDiffuseName (char const * name) alter        { set_channel_name (m_diffuse, name, TKO_Channel_Diffuse);   }
01844         void            SetDiffuseName (int length) alter               { set_channel_name (m_diffuse, length, TKO_Channel_Diffuse); }
01846         float const *   GetDiffuse () const                         { return m_diffuse.m_rgb;               }
01848         char const *    GetDiffuseName () const                     { return m_diffuse.m_name;              }
01850         char alter *    GetDiffuseName () alter                     { return m_diffuse.m_name;              }
01851 
01853         void            SetSpecular (float r, float g, float b) alter   { set_channel_rgb (m_specular, r, g, b, TKO_Channel_Specular);}
01855         void            SetSpecular (float const * rgb) alter           { SetSpecular (rgb[0], rgb[1], rgb[2]); }
01857         void            SetSpecularName (char const * name) alter       { set_channel_name (m_specular, name, TKO_Channel_Specular);  }
01859         void            SetSpecularName (int length) alter              { set_channel_name (m_specular, length, TKO_Channel_Specular);}
01861         float const *   GetSpecular () const                        { return m_specular.m_rgb;              }
01863         char const *    GetSpecularName () const                    { return m_specular.m_name;             }
01865         char alter *    GetSpecularName () alter                    { return m_specular.m_name;             }
01866 
01868         void            SetMirror (float r, float g, float b) alter     { set_channel_rgb (m_mirror, r, g, b, TKO_Channel_Mirror);  }
01870         void            SetMirror (float const * rgb) alter             { SetMirror (rgb[0], rgb[1], rgb[2]);   }
01872         void            SetMirrorName (char const * name) alter         { set_channel_name (m_mirror, name, TKO_Channel_Mirror);    }
01874         void            SetMirrorName (int length) alter                { set_channel_name (m_mirror, length, TKO_Channel_Mirror);  }
01876         float const *   GetMirror () const                          { return m_mirror.m_rgb;                }
01878         char const *    GetMirrorName () const                      { return m_mirror.m_name;               }
01880         char alter *    GetMirrorName () alter                      { return m_mirror.m_name;               }
01881 
01883         void            SetTransmission (float r, float g, float b) alter { set_channel_rgb (m_transmission, r, g, b, TKO_Channel_Transmission); }
01885         void            SetTransmission (float const * rgb) alter         { SetTransmission (rgb[0], rgb[1], rgb[2]);  }
01887         void            SetTransmissionName (char const * name) alter     { set_channel_name (m_transmission, name, TKO_Channel_Transmission);   }
01889         void            SetTransmissionName (int length) alter            { set_channel_name (m_transmission, length, TKO_Channel_Transmission); }
01891         float const *   GetTransmission () const                      { return m_transmission.m_rgb;               }
01893         char const *    GetTransmissionName () const                  { return m_transmission.m_name;              }
01895         char alter *    GetTransmissionName () alter                  { return m_transmission.m_name;              }
01896 
01898         void            SetEmission (float r, float g, float b) alter   { set_channel_rgb (m_emission, r, g, b, TKO_Channel_Emission);}
01900         void            SetEmission (float const * rgb) alter           { SetEmission (rgb[0], rgb[1], rgb[2]); }
01902         void            SetEmissionName (char const * name) alter       { set_channel_name (m_emission, name, TKO_Channel_Emission);  }
01904         void            SetEmissionName (int length) alter              { set_channel_name (m_emission, length, TKO_Channel_Emission);}
01906         float const *   GetEmission () const                        { return m_emission.m_rgb;              }
01908         char const *    GetEmissionName () const                    { return m_emission.m_name;             }
01910         char alter *    GetEmissionName () alter                    { return m_emission.m_name;             }
01911 
01913         void            SetEnvironmentName (char const * name) alter    { set_channel_name (m_environment, name, TKO_Channel_Environment);   }
01915         void            SetEnvironmentName (int length) alter           { set_channel_name (m_environment, length, TKO_Channel_Environment); }
01917         char const *    GetEnvironmentName () const                 { return m_environment.m_name;              }
01919         char alter *    GetEnvironmentName () alter                 { return m_environment.m_name;              }
01920 
01922         void            SetBumpName (char const * name) alter           { set_channel_name (m_bump, name, TKO_Channel_Bump);      }
01924         void            SetBumpName (int length) alter                  { set_channel_name (m_bump, length, TKO_Channel_Bump);    }
01926         char const *    GetBumpName () const                        { return m_bump.m_name;                 }
01928         char alter *    GetBumpName () alter                        { return m_bump.m_name;                 }
01929 
01931         void            SetGloss (float g) alter                        { m_gloss = g; m_channels |= (1<<TKO_Channel_Gloss); }
01933         float           GetGloss () const                           { return m_gloss;                       }
01935         void            SetIndex (float i) alter                        { m_index = i; m_channels |= (1<<TKO_Channel_Index); }
01937         float           GetIndex () const                           { return m_index;                       }
01938 };
01939 
01940 
01942 
01947 class BBINFILETK_API TK_Color_RGB : public BBaseOpcodeHandler {
01948     protected:
01949         int             m_mask;     
01950         float           m_rgb[3];   
01951 
01952     public:
01954         TK_Color_RGB () : BBaseOpcodeHandler (TKE_Color_RGB), m_mask (0) {}
01955 
01956         TK_Status   Read (BStreamFileToolkit & tk) alter;
01957         TK_Status   Write (BStreamFileToolkit & tk) alter;
01958         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01959 
01960         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
01961         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
01962 
01967         void            SetGeometry (int m) alter {
01968                             m_mask = m & TKO_Geo_All_Colors;
01969                             if ((m & TKO_Geo_Extended_Mask) != 0) {
01970                                 m_mask |= TKO_Geo_Extended;
01971                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
01972                                     m_mask |= TKO_Geo_Extended_Colors;
01973                                     if ((m & TKO_Geo_Extended2_Mask) != 0)
01974                                         m_mask |= TKO_Geo_Extended2;
01975                                 }
01976                             }
01977                         }
01982         int             GetGeometry () const                    { return m_mask;                        }
01983 
01985         void            SetRGB (float r, float g, float b) alter    { m_rgb[0] = r; m_rgb[1] = g; m_rgb[2] = b; }
01987         void            SetRGB (float const * rgb) alter            { SetRGB (rgb[0], rgb[1], rgb[2]);          }
01989         float const *   GetRGB () const                         { return m_rgb;                             }
01990 };
01991 
01992 
01994 
01999 class BBINFILETK_API TK_Color_By_Value : public BBaseOpcodeHandler {
02000     protected:
02001         int             m_mask;         
02002         float           m_value[3];     
02003         char            m_space;        
02004 
02005     public:
02007         TK_Color_By_Value () : BBaseOpcodeHandler (TKE_Color_By_Value), m_mask (0) {}
02008 
02009         TK_Status   Read (BStreamFileToolkit & tk) alter;
02010         TK_Status   Write (BStreamFileToolkit & tk) alter;
02011         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02012 
02013         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02014         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02015 
02020         void            SetGeometry (int m) alter {
02021                             m_mask = m & TKO_Geo_All_Colors;
02022                             if ((m & TKO_Geo_Extended_Mask) != 0) {
02023                                 m_mask |= TKO_Geo_Extended;
02024                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02025                                     m_mask |= TKO_Geo_Extended_Colors;
02026                                     if ((m & TKO_Geo_Extended2_Mask) != 0)
02027                                         m_mask |= TKO_Geo_Extended2;
02028                                 }
02029                             }
02030                         }
02035         int             GetGeometry () const                { return m_mask;                                }
02036 
02038         void            SetSpace (int s) alter                  { m_space = (char)s;                            }
02040         int             GetSpace () const                   { return (int)m_space;                          }
02041 
02043         void            SetValue (float a, float b, float c) alter  {
02044                                 m_value[0] = a;     m_value[1] = b;     m_value[2] = c;
02045                             }
02047         void            SetValue (float const * triple) alter   { SetValue (triple[0], triple[1], triple[2]);   }
02049         float const *   GetValue () const                   { return m_value;                               }
02050 };
02051 
02052 
02054 
02060 class BBINFILETK_API TK_Color_By_Index : public BBaseOpcodeHandler {
02061     protected:
02062         int             m_mask;     
02063         int             m_index;    
02064 
02065     public:
02067         TK_Color_By_Index (unsigned char opcode) : BBaseOpcodeHandler (opcode), m_mask (0), m_index (-1) {}
02068 
02069         TK_Status   Read (BStreamFileToolkit & tk) alter;
02070         TK_Status   Write (BStreamFileToolkit & tk) alter;
02071         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02072 
02073         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02074         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02075 
02080         void            SetGeometry (int m) alter {
02081                             m_mask = m & TKO_Geo_All_Colors;
02082                             if ((m & TKO_Geo_Extended_Mask) != 0) {
02083                                 m_mask |= TKO_Geo_Extended;
02084                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02085                                     m_mask |= TKO_Geo_Extended_Colors;
02086                                     if ((m & TKO_Geo_Extended2_Mask) != 0)
02087                                         m_mask |= TKO_Geo_Extended2;
02088                                 }
02089                             }
02090                         }
02095         int             GetGeometry () const    { return m_mask;    }
02096 
02098         void            SetIndex (int i) alter      { m_index = i;      }
02100         int             GetIndex () const       { return m_index;   }
02101 };
02102 
02104 
02109 class BBINFILETK_API TK_Color_By_FIndex : public BBaseOpcodeHandler {
02110     protected:
02111         int             m_mask;     
02112         float           m_index;    
02113 
02114     public:
02116         TK_Color_By_FIndex () : BBaseOpcodeHandler (TKE_Color_By_FIndex), m_mask (0), m_index (-1.0f) {}
02117 
02118         TK_Status   Read (BStreamFileToolkit & tk) alter;
02119         TK_Status   Write (BStreamFileToolkit & tk) alter;
02120         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02121 
02122         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02123         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02124 
02129         void            SetGeometry (int m) alter {
02130                             m_mask = m & TKO_Geo_All_Colors;
02131                             if ((m & TKO_Geo_Extended_Mask) != 0) {
02132                                 m_mask |= TKO_Geo_Extended;
02133                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02134                                     m_mask |= TKO_Geo_Extended_Colors;
02135                                     if ((m & TKO_Geo_Extended2_Mask) != 0)
02136                                         m_mask |= TKO_Geo_Extended2;
02137                                 }
02138                             }
02139                         }
02144         int             GetGeometry () const    { return m_mask;    }
02145 
02147         void            SetIndex (float val) alter  { m_index = val;      }
02149         float           GetIndex () const       { return m_index;   }
02150 };
02151 
02155 enum TKO_Map_Format {
02156     TKO_Map_RGB_Values,     
02157     TKO_Map_String          
02158 };
02159 
02162 
02167 class BBINFILETK_API TK_Color_Map : public BBaseOpcodeHandler {
02168     protected:
02169         int             m_length;           
02170         float *         m_values;           
02171         char *          m_string;           
02172         unsigned char   m_format;           
02173 
02175         void    set_values (int length, float const * values = 0) alter;
02176 
02177     public:
02179         TK_Color_Map ()
02180             : BBaseOpcodeHandler (TKE_Color_Map), m_length (0), m_values (0), m_string (0), m_format (TKO_Map_RGB_Values) {}
02181         ~TK_Color_Map();
02182 
02183         TK_Status   Read (BStreamFileToolkit & tk) alter;
02184         TK_Status   Write (BStreamFileToolkit & tk) alter;
02185         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02186 
02187         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02188         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02189 
02190         void        Reset () alter;
02191 
02193         void            SetFormat (int f) alter                                 { m_format = (unsigned char)f;  }
02195         int             GetFormat () const                                  { return (int)m_format;         }
02196 
02201         void            SetValues (int count, float const * values = 0) alter   { set_values (count, values);   }
02203         float const *   GetValues () const                                  { return m_values;              }
02205         float alter *   GetValues () alter                                  { return m_values;              }
02207         int             GetLength () const                                  { return m_length;              }
02208 
02213         void            SetString (char const * string) alter;
02218         void            SetString (int length) alter;
02222         char const *    GetString () const                 { return m_string; }
02227         char alter *    GetString () alter                 { return m_string; }
02228 };
02229 
02231 
02234 
02240 class BBINFILETK_API TK_Callback : public BBaseOpcodeHandler {
02241     protected:
02242         int                     m_length;       
02243         char *                  m_string;       
02246         void    set_callback (char const * callback) alter;  
02247 
02248         void    set_callback (int length) alter;             
02249 
02250     public:
02252         TK_Callback () : BBaseOpcodeHandler (TKE_Callback), m_length (0), m_string (0) {}
02253         ~TK_Callback();
02254 
02255         TK_Status   Read (BStreamFileToolkit & tk) alter;
02256         TK_Status   Write (BStreamFileToolkit & tk) alter;
02257         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02258 
02259         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02260         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02261 
02262         void        Reset () alter;
02263 
02265         void            SetCallback (char const * callback) alter   { set_callback (callback);  }
02267         void            SetCallback (int length) alter              { set_callback (length);    }
02269         char const *    GetCallback () const                    { return m_string;          }
02271         char alter *    GetCallback () alter                    { return m_string;          }
02272 };
02273 
02275 
02276 
02284 enum TKO_Rendering_Option_Bits {
02285     TKO_Interp_Texture_Faces            = 0x00000001,   
02286     TKO_Interp_Texture_Edges            = 0x00000002,   
02287     TKO_Interp_Texture_Markers          = 0x00000004,   
02288     TKO_Interp_Texture                  = 0x00000007,   
02289 
02290     TKO_Interp_Color_Faces              = 0x00000008,   
02291     TKO_Interp_Color_Edges              = 0x00000010,   
02292     TKO_Interp_Color_Markers            = 0x00000020,   
02293     TKO_Interp_Color                    = 0x00000038,   
02294 
02295     TKO_Interp_Index_Faces              = 0x00000040,   
02296     TKO_Interp_Index_Edges              = 0x00000080,   
02297     TKO_Interp_Index_FE                 = 0x000000C0,   
02298 
02299     TKO_Interp_Lighting_Faces_Gouraud   = 0x00000100,   
02300     TKO_Interp_Lighting_Faces_Phong     = 0x00000200,   
02301     TKO_Interp_Lighting_Edges_Gouraud   = 0x00000400,   
02302     TKO_Interp_Lighting_Edges_Phong     = 0x00000800,   
02303     TKO_Interp_Lighting_Faces           = 0x00000300,   
02304     TKO_Interp_Lighting_Edges           = 0x00000C00,   
02305     TKO_Interp_Lighting_Gouraud         = 0x00000500,   
02306     TKO_Interp_Lighting_Phong           = 0x00000A00,   
02307     TKO_Interp_Lighting                 = 0x00000F00,   
02308 
02309     TKO_Rendo_HSR_Algorithm             = 0x00001000,   
02310     TKO_Rendo_THSR_Algorithm            = 0x00002000,   
02311     TKO_Rendo_Any_HSR                   = 0x00003000,   
02312 
02313     TKO_Rendo_Local_Viewer              = 0x00004000,   
02314     TKO_Rendo_Perspective_Correction    = 0x00008000,   
02315     TKO_Rendo_Display_Lists             = 0x00010000,   
02316 
02317     TKO_Rendo_Debug                     = 0x00020000,   
02318 
02319     TKO_Rendo_Technology                = 0x00040000,   
02320     TKO_Rendo_Quantization              = 0x00080000,   
02321     TKO_Rendo_TQ                        = 0x000C0000,   
02322 
02323     TKO_Rendo_Attribute_Lock            = 0x00100000,   
02324 
02325     TKO_Rendo_Face_Displacement         = 0x00200000,   
02326     TKO_Rendo_Fog                       = 0x00400000,   
02327 
02328     TKO_Rendo_Buffer_Options            = 0x00800000,   
02329     TKO_Rendo_Hidden_Line_Options       = 0x01000000,   
02330 
02331     TKO_Rendo_LOD                       = 0x02000000,   
02332     TKO_Rendo_LOD_Options               = 0x04000000,   
02333 
02334     TKO_Rendo_NURBS_Curve_Options       = 0x08000000,   
02335     TKO_Rendo_NURBS_Surface_Options     = 0x10000000,   
02336     TKO_Rendo_NURBS_Options             = 0x18000000,   
02337 
02338     TKO_Rendo_Stereo                    = 0x20000000,   
02339     TKO_Rendo_Stereo_Separation         = 0x40000000,   
02340 
02341 // hpux doesn't like the high bit set as part of the enumerated type
02342     //TKO_Rendo_Extended              = 0x80000000,
02343 #ifndef SWIG
02344 #define TKO_Rendo_Extended                  0x80000000   
02345 #else
02346     TKO_Rendo_Extended                  = 0x8000000,
02347 #endif
02348 
02349     // extended settings
02350     TKO_Rendo_Tessellation              = 0x00000001,  
02351     TKO_Rendo_Transparency_Style        = 0x00000002,  
02352     TKO_Rendo_Transparency_Hardware     = 0x00000004,  
02353     TKO_Rendo_Cut_Geometry              = 0x00000008,  
02354     TKO_Rendo_Depth_Range               = 0x00000010,  
02355     TKO_Rendo_Mask_Transform            = 0x00000020,  
02356     TKO_Rendo_Image_Scale               = 0x00000040,  
02357     TKO_Rendo_Local_Cutting_Planes      = 0x00000080,  
02358     TKO_Rendo_Simple_Shadow             = 0x00000100,  
02359     TKO_Rendo_Geometry_Options          = 0x00000200,  
02360     TKO_Rendo_Image_Tint                = 0x00000400,  
02361     TKO_Interp_Index_Face_Isolines      = 0x00000800,  
02362     TKO_Rendo_Force_Grayscale           = 0x00001000,  
02363     TKO_Rendo_Transparency_Options      = 0x00002000,  
02364     TKO_Rendo_General_Displacement      = 0x00004000,  
02365     TKO_Rendo_Join_Cutoff_Angle         = 0x00008000,  
02366     TKO_Rendo_Screen_Range              = 0x00010000,  
02367     TKO_Rendo_Stereo_Distance           = 0x00020000,  
02368     TKO_Rendo_Shadow_Map                = 0x00040000,  
02369     TKO_Rendo_Simple_Reflection         = 0x00080000,  
02370     TKO_Rendo_Ambient_Up_Vector         = 0x00100000,  
02371     TKO_Rendo_Gooch_Color_Range         = 0x00200000,  
02372     TKO_Rendo_Gooch_Diffuse_Weight      = 0x00400000,  
02373     TKO_Rendo_Antialias                 = 0x00800000,  
02374     TKO_Interp_Index_Markers            = 0x01000000,  
02375     TKO_Rendo_Gooch_Color_Map           = 0x02000000,  
02376     TKO_Interp_Lighting_Faces_Gooch     = 0x04000000,   
02377     TKO_Interp_Lighting_Edges_Gooch     = 0x08000000,   
02378     TKO_Interp_Lighting_Gooch           = 0x0C000000,   
02379     TKO_Rendo_Transparency_Depth_Writing= 0x10000000,  
02380     TKO_Rendo_Vertex_Decimation         = 0x20000000,  
02381     TKO_Rendo_Vertex_Displacement       = 0x40000000,  
02382 
02383 #ifndef SWIG
02384 #define TKO_Rendo_Extended2                 0x80000000   
02385 #else
02386     TKO_Rendo_Extended2                 = 0x8000000,
02387 #endif
02388 
02389     // more extended settings
02390     TKO_Rendo_Forced_Lock               = 0x00000001,  
02391     TKO_Rendo_Frame_Buffer_Effects      = 0x00000002,  
02392     TKO_Rendo_Scaled_Displacement       = 0x00000004,  
02393     TKO_Rendo_Contour_Options           = 0x00000008,  
02394     TKO_Rendo_Isoline_Options           = 0x00000010,  
02395     TKO_Rendo_Diffuse_Texture_Tint      = 0x00000020,  
02396     TKO_Rendo_Diffuse_Color_Tint        = 0x00000040,  
02397     TKO_Rendo_Edge_Join_Cutoff_Angle    = 0x00000080,  
02398 
02399     // type for specific fields
02400     TKO_HSR_Hardware                    = 0,    
02401     TKO_HSR_SZB                         = 1,    
02402     TKO_HSR_Painters                    = 2,    
02403     TKO_HSR_Z_Sort_Only                 = 3,    
02404     TKO_HSR_Priority                    = 4,    
02405     TKO_HSR_Spider_Web                  = 5,    
02406     TKO_HSR_Hidden_Line                 = 6,    
02407     TKO_HSR_None                        = 7,    
02408     TKO_HSR_Fast_Hidden_Line            = 8,    
02409     TKO_HSR_Depth_Peeling               = 9,    
02410     TKO_HSR_Mask                        = 0x0F, 
02411     TKO_THSR_Mask                       = 0xF0, 
02412 
02413     TKO_Transparency_None               = 0x0000,   
02414     TKO_Transparency_Blending           = 0x0001,   
02415     TKO_Transparency_Screen_Door        = 0x0002,   
02416     TKO_Transparency_Style_Mask         = 0x000F,   
02417     TKO_Transparency_Peeling_Layers     = 0x0010,   
02418     TKO_Transparency_Peeling_Min_Area   = 0x0020,   
02419     TKO_Transparency_Extended           = 0x0080,   
02420     TKO_Transparency_Extended_Mask      = 0xFF00,   
02421     TKO_Transparency_Extended_Shift     = 8,        
02422     TKO_Transparency_ZSort_Fast         = 0x0100,   
02423     TKO_Transparency_ZSort_Nice         = 0x0200,   
02424 
02425 
02426     TKO_Cut_Geometry_Level                  = 0x01,   
02427     TKO_Cut_Geometry_Tolerance              = 0x02,   
02428     TKO_Cut_Geometry_Match_Color            = 0x04,   
02429     TKO_Cut_Geometry_Level_Entity           = 0,   
02430     TKO_Cut_Geometry_Level_Segment          = 1,   
02431     TKO_Cut_Geometry_Level_Segment_Tree     = 2,   
02432     TKO_Cut_Geometry_Match_Color_Off        = 0,   
02433     TKO_Cut_Geometry_Match_Color_Current    = 1,   
02434     TKO_Cut_Geometry_Match_Color_First      = 2,   
02435     TKO_Cut_Geometry_Match_Color_Last       = 3,   
02436 
02437     TKO_Display_List_Level_Entity           = 0,   
02438     TKO_Display_List_Level_Segment          = 1,   
02439     TKO_Display_List_Level_Segment_Tree     = 2,   
02440 
02441     TKO_Simple_Shadow_On                = 0x0001,   
02442     TKO_Simple_Shadow_Off               = 0x0002,   
02443     TKO_Simple_Shadow_Plane             = 0x0004,   
02444     TKO_Simple_Shadow_Light_Direction   = 0x0008,   
02445     TKO_Simple_Shadow_Color             = 0x0010,   
02446     TKO_Simple_Shadow_Resolution        = 0x0020,   
02447     TKO_Simple_Shadow_Blur              = 0x0040,   
02448     TKO_Simple_Shadow_Extended          = 0x0080,   // internal use, indicates presence of extended bits
02449     TKO_Simple_Shadow_Extended_Mask     = 0xFF00,   // internal use, indicates bits which require TKO_Simple_Shadow_Extended
02450     TKO_Simple_Shadow_Extended_Shift    = 8,        // internal use, shift of extended section
02451     TKO_Simple_Shadow_Auto              = 0x0100,   
02452     TKO_Simple_Shadow_Opacity           = 0x0200,   
02453     TKO_Simple_Shadow_Ignore_Transparency=0x0400,   
02454     TKO_Simple_Shadow_Use_Transparency  = 0x0800,   
02455     TKO_Simple_Shadow_Extended2         = 0x8000,   // reserved for future expansion
02456 
02457     TKO_Shadow_Map_On                   = 0x0001,   
02458     TKO_Shadow_Map_Off                  = 0x0002,   
02459     TKO_Shadow_Map_Resolution           = 0x0004,   
02460     TKO_Shadow_Map_Samples              = 0x0008,   
02461     TKO_Shadow_Map_Jitter_On            = 0x0010,   
02462     TKO_Shadow_Map_Jitter_Off           = 0x0020,   
02463     TKO_Shadow_Map_Extended             = 0x0080,   // indicates presence of extended bits
02464     TKO_Shadow_Map_View_Depedent_On     = 0x0100,   
02465     TKO_Shadow_Map_View_Depedent_Off    = 0x0200,   
02466     TKO_Shadow_Map_Extended_Mask        = 0xFF00,   // mask of bits requiring extended
02467     TKO_Shadow_Map_Extended2            = 0x8000,   // reserved for future expansion
02468 
02469     TKO_Simple_Reflection_On            = 0x0001,   
02470     TKO_Simple_Reflection_Off           = 0x0002,   
02471     TKO_Simple_Reflection_Plane         = 0x0004,   
02472     TKO_Simple_Reflection_Opacity       = 0x0008,   
02473     TKO_Simple_Reflection_Fading_On     = 0x0010,   
02474     TKO_Simple_Reflection_Fading_Off    = 0x0020,   
02475     TKO_Simple_Reflection_Blur          = 0x0040,   
02476     TKO_Simple_Reflection_Extended      = 0x0080,   
02477     TKO_Simple_Reflection_Extended_Mask = 0xFF00,   
02478     TKO_Simple_Reflection_Extended_Shift= 8,        
02479     TKO_Simple_Reflection_Attenuation   = 0x0100,   
02480     TKO_Simple_Reflection_Visibility    = 0x0200,   
02481     TKO_Simple_Reflection_Extended2     = 0x8000,   // reserved for future expansion
02482 
02483     TKO_Mask_None                       = 0x0000,   
02484     TKO_Mask_Camera_Rotation            = 0x0001,   
02485     TKO_Mask_Camera_Scale               = 0x0002,   
02486     TKO_Mask_Camera_Translation         = 0x0004,   
02487     TKO_Mask_Camera_Perspective         = 0x0008,   
02488     TKO_Mask_Model_Rotation             = 0x0010,   
02489     TKO_Mask_Model_Scale                = 0x0020,   
02490     TKO_Mask_Model_Translation          = 0x0040,   
02491     TKO_Mask_Camera                     = 0x000F,   
02492     TKO_Mask_Model                      = 0x0070,   
02493     TKO_Mask_All                        = 0x007F,   
02494     TKO_Mask_Extended                   = 0x0080,   
02495     TKO_Mask_Extended_Mask              = 0xFF00,   
02496     TKO_Mask_Extended_Shift             = 8,        
02497     TKO_Mask_Camera_Offset              = 0x0100,   
02498     TKO_Mask_Model_Offset               = 0x0200,   
02499 
02500     TKO_Technology_Standard             = 0x01,             
02501     TKO_Technology_Soft_Frame_Buffer    = 0x02,             
02502     TKO_Technology_Radiosity            = 0x04,             
02503     TKO_Technology_Ray_Trace            = 0x08,             
02504     TKO_Technology_Mask                 = 0x0F,             
02505 
02506     TKO_Quantization_Threshold          = 0x10,             
02507     TKO_Quantization_Dither             = 0x20,             
02508     TKO_Quantization_Error_Diffusion    = 0x40,             
02509     TKO_Quantization_Mask               = 0xF0,             
02510 
02511     TKO_Buffer_Size_Limit               = 0x01,             
02512     TKO_Buffer_Retention                = 0x02,             
02513     TKO_Buffer_Color_Depth_Match        = 0x04,             
02514     TKO_Buffer_Color_Depth_Full         = 0x08,             
02515 
02516     TKO_Antialias_Screen_On             = 0x01,             
02517     TKO_Antialias_Lines_On              = 0x02,             
02518     TKO_Antialias_Text_On               = 0x04,             
02519     TKO_Antialias_All_On                = 0x07,             
02520     TKO_Antialias_Screen_Off            = 0x10,             
02521     TKO_Antialias_Lines_Off             = 0x20,             
02522     TKO_Antialias_Text_Off              = 0x40,             
02523     TKO_Antialias_All_Off               = 0x70,             
02524 
02525     TKO_Hidden_Line_Visibility_On           = 0x00000001,   
02526     TKO_Hidden_Line_Visibility_Off          = 0x00000002,   
02527     TKO_Hidden_Line_Pattern                 = 0x00000004,   
02528     TKO_Hidden_Line_Face_Displacement       = 0x00000008,   
02529     TKO_Hidden_Line_Dim_Factor              = 0x00000010,   
02530     TKO_Hidden_Line_Render_Faces_On         = 0x00000020,   
02531     TKO_Hidden_Line_Render_Faces_Off        = 0x00000040,   
02532     TKO_Hidden_Line_Extended                = 0x00000080,   
02533     TKO_Hidden_Line_Extended_Mask           = 0xFFFFFF00,   
02534     TKO_Hidden_Line_Extended_Shift          = 8,            
02535     TKO_Hidden_Line_Silhouette_Cleanup_On   = 0x00000100,   
02536     TKO_Hidden_Line_Silhouette_Cleanup_Off  = 0x00000200,   
02537     TKO_Hidden_Line_Extended2               = 0x00008000,   
02538     TKO_Hidden_Line_Extended2_Mask          = 0xFFFF0000,   
02539     TKO_Hidden_Line_Extended2_Shift         = 16,           
02540     TKO_Hidden_Line_Color                   = 0x00010000,   
02541     TKO_Hidden_Line_Weight                  = 0x00020000,   
02542     TKO_Hidden_Line_Image_Outline_On        = 0x00040000,   
02543     TKO_Hidden_Line_Image_Outline_Off       = 0x00080000,   
02544     TKO_Hidden_Line_HSR_Algorithm           = 0x00100000,   
02545     TKO_Hidden_Line_Render_Text_On          = 0x00200000,   
02546     TKO_Hidden_Line_Render_Text_Off         = 0x00400000,   
02547     TKO_Hidden_Line_Transparency_Cutoff     = 0x00800000,   
02548 
02549     TKO_Contour_Face_Visibility_On      = 0x0001,   
02550     TKO_Contour_Face_Visibility_Off     = 0x0002,   
02551     TKO_Contour_Isoline_Visibility_On   = 0x0004,   
02552     TKO_Contour_Isoline_Visibility_Off  = 0x0008,   
02553     TKO_Contour_Visibility_Mask         = 0x000F,   
02554     TKO_Contour_Value_Adjustment        = 0x0010,   
02555 
02556     TKO_Contour_Adjustment_None         = 0,    
02557     TKO_Contour_Adjustment_Normalized   = 1,    
02558     TKO_Contour_Adjustment_Explicit     = 2,    
02559 
02560     TKO_Isoline_Positions       = 0x0001,   
02561     TKO_Isoline_Colors          = 0x0002,   
02562     TKO_Isoline_Patterns        = 0x0004,   
02563     TKO_Isoline_Weights         = 0x0008,   
02564     TKO_Isoline_Lighting_On     = 0x0010,   
02565     TKO_Isoline_Lighting_Off    = 0x0020,   
02566 
02567     TKO_Isoline_Positions_Default   = 0,    
02568     TKO_Isoline_Positions_Repeat    = 1,    
02569     TKO_Isoline_Positions_Explicit  = 2,    
02570 
02571     TKO_Tint_On         = 0x0001,   
02572     TKO_Tint_Off        = 0x0002,   
02573     TKO_Tint_Range      = 0x0004,   
02574     TKO_Tint_Color      = 0x0008,   
02575     TKO_Tint_Effect     = 0x0010,   
02576 
02577     TKO_Tint_Effect_Grayscale       = 1,    
02578     TKO_Tint_Effect_Modulate        = 2,    
02579     TKO_Tint_Effect_Modulate_Gray   = 3,    
02580     TKO_Tint_Effect_Tone            = 4,    
02581 
02582     TKO_LOD_Conserve_Memory             = 0x00000001,       
02583     TKO_LOD_Screen_Space                = 0x00000002,       
02584     TKO_LOD_Physical                    = 0x00000004,       
02585     TKO_LOD_Tolerance_FRU               = 0x00000008,       
02586     TKO_LOD_Tolerance_ORU               = 0x00000010,       
02587     TKO_LOD_Preprocess                  = 0x00000020,       
02588     TKO_LOD_Bounding_Current            = 0x00000040,       
02589     TKO_LOD_Bounding_Explicit           = 0x00000080,       
02590     TKO_LOD_Ratio                       = 0x00000100,       
02591     TKO_LOD_Threshold                   = 0x00000200,       
02592     TKO_LOD_Min_Triangle_Count          = 0x00000400,       
02593     TKO_LOD_Clamp                       = 0x00000800,       
02594     TKO_LOD_Num_Levels                  = 0x00001000,       
02595     TKO_LOD_Max_Degree                  = 0x00002000,       
02596     TKO_LOD_Tolerance                   = 0x00004000,       
02597     TKO_LOD_Usefulness_Heuristic        = 0x00008000,       
02598     TKO_LOD_Calculation_Cutoff          = 0x00010000,       
02599     TKO_LOD_Fallback                    = 0x00020000,       
02600     TKO_LOD_Collapse_Vertices           = 0x00040000,       
02601     TKO_LOD_Algorithm                   = 0x00080000,       
02602     TKO_LOD_Mode_Segment                = 0x00100000,       
02603 
02604     TKO_LOD_Threshold_Tris_Per_Pix_Sq   = 1,    
02605     TKO_LOD_Threshold_Tris_Per_CM_Sq    = 2,    
02606     TKO_LOD_Threshold_Percent_Area      = 3,    
02607     TKO_LOD_Threshold_Distance          = 4,    
02608 
02609     TKO_LOD_Algorithm_Fast              = 1,    
02610     TKO_LOD_Algorithm_Nice              = 2,    
02611 
02612     TKO_LOD_Heur_Is_Diagonal            = 0x00,    
02613     TKO_LOD_Heur_Is_Per_Triangle        = 0x01,    
02614     TKO_LOD_Heur_Is_Ratio               = 0x02,    
02615     TKO_LOD_Heur_Is_Volume              = 0x04,    
02616     TKO_LOD_Heur_Triangle_Size          = 0x08,    
02617 
02618     TKO_LOD_Heur_Diag                   = 0,    
02619     TKO_LOD_Heur_Tri_Diag               = 1,    
02620     TKO_LOD_Heur_Diag_Ratio             = 2,    
02621     TKO_LOD_Heur_Tri_Diag_Ratio         = 3,    
02622     TKO_LOD_Heur_Vol                    = 4,    
02623     TKO_LOD_Heur_Tri_Vol                = 5,    
02624     TKO_LOD_Heur_Vol_Ratio              = 6,    
02625     TKO_LOD_Heur_Tri_Vol_Ratio          = 7,    
02626 
02627     TKO_LOD_Fallback_None               = 0,    
02628     TKO_LOD_Fallback_Bounding           = 1,    
02629     TKO_LOD_Fallback_Coarsest           = 2,    
02630     TKO_LOD_Fallback_Coarsest_None      = 3,    
02631     TKO_LOD_Fallback_Coarsest_Bounding  = 4,    
02632     TKO_LOD_Fallback_Bounding_None      = 5,    
02633 
02634     TKO_NURBS_Curve_Budget              = 0x0001,    
02635     TKO_NURBS_Curve_Continued_Budget    = 0x0002,    
02636     TKO_NURBS_Curve_View_Dependent      = 0x0004,    
02637     TKO_NURBS_Curve_Max_Deviation       = 0x0008,    
02638     TKO_NURBS_Surface_Budget            = 0x0010,    
02639     TKO_NURBS_Surface_Trim_Budget       = 0x0020,    
02640     TKO_NURBS_Surface_Max_Facet_Width   = 0x0040,    
02641     TKO_NURBS_Curve_Max_Angle           = 0x1000,    
02642     TKO_NURBS_Curve_Max_Length          = 0x2000,    
02643 
02644     TKO_NURBS_Extended                  = 0x0080,   
02645     TKO_NURBS_Extended_Mask             = 0xFF00,   
02646     TKO_NURBS_Extended_Shift            = 8,        
02647 
02648     TKO_NURBS_Surface_Max_Facet_Angle   = 0x0100,    
02649     TKO_NURBS_Surface_Max_Facet_Deviation
02650                                         = 0x0200,    
02651     TKO_NURBS_Surface_Max_Trim_Curve_Deviation
02652                                         = 0x0400,    
02653 
02654     TKO_NURBS_Curve_Mask                = 0xF00F,    
02655     TKO_NURBS_Surface_Mask              = 0x0FF0,    
02656 
02657     TKO_Tessellation_Cylinder           = 0x01,   
02658     TKO_Tessellation_Sphere             = 0x02,   
02659 
02660     TKO_Geometry_Options_Dihedral       = 0x01,   
02661     TKO_Geometry_Options_Reverse_PolyCylinder_Radii     = 0x02,   
02662     TKO_Geometry_Options_No_Reverse_PolyCylinder_Radii  = 0x04,   
02663     TKO_Geometry_Options_Reverse_PolyCylinder_Colors    = 0x08,   
02664     TKO_Geometry_Options_No_Reverse_PolyCylinder_Colors = 0x10    
02665 };
02666 
02670 enum TKO_Attribute_Lock_Bits {
02671     TKO_Lock_Callback                   = 0x00000001,  
02672     TKO_Lock_Camera                     = 0x00000002,  
02673     TKO_Lock_Color                      = 0x00000004,  
02674     TKO_Lock_Color_Map                  = 0x00000008,  
02675     TKO_Lock_Driver                     = 0x00000010,  
02676     TKO_Lock_Driver_Options             = 0x00000020,  
02677     TKO_Lock_Edge_Pattern               = 0x00000040,  
02678     TKO_Lock_Edge_Weight                = 0x00000080,  
02679     TKO_Lock_Face_Pattern               = 0x00000100,  
02680     TKO_Lock_Handedness                 = 0x00000200,  
02681     TKO_Lock_Heuristics                 = 0x00000400,  
02682     TKO_Lock_Line_Pattern               = 0x00000800,  
02683     TKO_Lock_Line_Weight                = 0x00001000,  
02684     TKO_Lock_Marker_Size                = 0x00002000,  
02685     TKO_Lock_Marker_Symbol              = 0x00004000,  
02686     TKO_Lock_Metafile                   = 0x00008000,  
02687     TKO_Lock_Modelling_Matrix           = 0x00010000,  
02688     TKO_Lock_Rendering_Options          = 0x00020000,  
02689     TKO_Lock_Selectability              = 0x00040000,  
02690     TKO_Lock_Styles                     = 0x00080000,  
02691     TKO_Lock_Text_Alignment             = 0x00100000,  
02692     TKO_Lock_Text_Font                  = 0x00200000,  
02693     TKO_Lock_Text_Path                  = 0x00400000,  
02694     TKO_Lock_Text_Spacing               = 0x00800000,  
02695     TKO_Lock_User_Options               = 0x01000000,  
02696     TKO_Lock_User_Value                 = 0x02000000,  
02697     TKO_Lock_Texture_Matrix             = 0x04000000,  
02698     TKO_Lock_Visibility                 = 0x08000000,  
02699     TKO_Lock_Window                     = 0x10000000,  
02700     TKO_Lock_Window_Frame               = 0x20000000,  
02701     TKO_Lock_Window_Pattern             = 0x40000000,  
02702     TKO_Lock_All                        = 0x7FFFFFFF   
02703 
02704 };
02705 
02709 enum TKO_Color_Channel_Lock_Bits {
02710     TKO_Lock_Channel_Diffuse        = 0x0001,   
02711     TKO_Lock_Channel_Specular       = 0x0002,   
02712     TKO_Lock_Channel_Mirror         = 0x0004,   
02713     TKO_Lock_Channel_Transmission   = 0x0008,   
02714     TKO_Lock_Channel_Emission       = 0x0010,   
02715     TKO_Lock_Channel_Gloss          = 0x0020,   
02716     TKO_Lock_Channel_Index          = 0x0040,   
02717     TKO_Lock_Channel_Environment    = 0x0080,   
02718     TKO_Lock_Channel_Bump           = 0x0100,   
02719     TKO_Lock_Channel_ALL            = 0x01FF    
02720 };
02721 
02722 
02723 #if 0
02724 class BBINFILETK_API TK_Radiosity_RayTrace_Options : public BBaseOpcodeHandler {
02725     protected:
02726 
02727     public:
02728         TK_Radiosity_RayTrace_Options () : BBaseOpcodeHandler (TKE_Radiosity_RayTrace_Options) {}
02729         ~TK_Radiosity_RayTrace_Options () {}
02730 
02731         TK_Status   Read (BStreamFileToolkit & tk) alter;
02732         TK_Status   Write (BStreamFileToolkit & tk) alter;
02733 
02734         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02735         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02736 };
02737 #endif
02738 
02739 
02741 
02747 class BBINFILETK_API TK_Rendering_Options : public BBaseOpcodeHandler {
02748     protected:
02749         int             m_mask[3];  
02750         int             m_value[3]; 
02751 
02752         unsigned char   m_hsr;      
02753         unsigned char   m_tq;       
02754         int             m_debug;                
02755         int             m_face_displacement;    
02756         int             m_vertex_displacement;    
02757 
02758         float           m_fog_limits[2];        
02759 
02760         int             m_lock_mask;            
02761         int             m_lock_value;           
02762         int             m_lock_color_mask;      
02763         int             m_lock_color_value;     
02764         short           m_lock_color_face_mask;      
02765         short           m_lock_color_face_value;     
02766         short           m_lock_color_edge_mask;      
02767         short           m_lock_color_edge_value;     
02768         short           m_lock_color_line_mask;      
02769         short           m_lock_color_line_value;     
02770         short           m_lock_color_marker_mask;      
02771         short           m_lock_color_marker_value;     
02772         short           m_lock_color_text_mask;      
02773         short           m_lock_color_text_value;     
02774         short           m_lock_color_window_mask;      
02775         short           m_lock_color_window_value;     
02776         short           m_lock_color_face_contrast_mask;      
02777         short           m_lock_color_face_contrast_value;     
02778         short           m_lock_color_window_contrast_mask;      
02779         short           m_lock_color_window_contrast_value;     
02780         short           m_lock_color_back_mask;      
02781         short           m_lock_color_back_value;     
02782         short           m_lock_color_vertex_mask;      
02783         short           m_lock_color_vertex_value;     
02784         short           m_lock_color_edge_contrast_mask;      
02785         short           m_lock_color_edge_contrast_value;     
02786         short           m_lock_color_line_contrast_mask;      
02787         short           m_lock_color_line_contrast_value;     
02788         short           m_lock_color_marker_contrast_mask;      
02789         short           m_lock_color_marker_contrast_value;     
02790         short           m_lock_color_vertex_contrast_mask;      
02791         short           m_lock_color_vertex_contrast_value;     
02792         short           m_lock_color_text_contrast_mask;      
02793         short           m_lock_color_text_contrast_value;     
02794         short           m_lock_color_simple_reflection_mask;      
02795         short           m_lock_color_simple_reflection_value;     
02796         short           m_lock_color_cut_face_mask;      
02797         short           m_lock_color_cut_face_value;     
02798         short           m_lock_color_cut_edge_mask;      
02799         short           m_lock_color_cut_edge_value;     
02800         int             m_lock_visibility_mask; 
02801         int             m_lock_visibility_value;
02802         int             m_forced_mask;            
02803         int             m_forced_value;           
02804         int             m_forced_color_mask;      
02805         int             m_forced_color_value;     
02806         short           m_forced_color_face_mask;      
02807         short           m_forced_color_face_value;     
02808         short           m_forced_color_edge_mask;      
02809         short           m_forced_color_edge_value;     
02810         short           m_forced_color_line_mask;      
02811         short           m_forced_color_line_value;     
02812         short           m_forced_color_marker_mask;      
02813         short           m_forced_color_marker_value;     
02814         short           m_forced_color_text_mask;      
02815         short           m_forced_color_text_value;     
02816         short           m_forced_color_window_mask;      
02817         short           m_forced_color_window_value;     
02818         short           m_forced_color_face_contrast_mask;      
02819         short           m_forced_color_face_contrast_value;     
02820         short           m_forced_color_window_contrast_mask;      
02821         short           m_forced_color_window_contrast_value;     
02822         short           m_forced_color_back_mask;      
02823         short           m_forced_color_back_value;     
02824         short           m_forced_color_vertex_mask;      
02825         short           m_forced_color_vertex_value;     
02826         short           m_forced_color_edge_contrast_mask;      
02827         short           m_forced_color_edge_contrast_value;     
02828         short           m_forced_color_line_contrast_mask;      
02829         short           m_forced_color_line_contrast_value;     
02830         short           m_forced_color_marker_contrast_mask;      
02831         short           m_forced_color_marker_contrast_value;     
02832         short           m_forced_color_vertex_contrast_mask;      
02833         short           m_forced_color_vertex_contrast_value;     
02834         short           m_forced_color_text_contrast_mask;      
02835         short           m_forced_color_text_contrast_value;     
02836         short           m_forced_color_simple_reflection_mask;      
02837         short           m_forced_color_simple_reflection_value;     
02838         short           m_forced_color_cut_face_mask;      
02839         short           m_forced_color_cut_face_value;     
02840         short           m_forced_color_cut_edge_mask;      
02841         short           m_forced_color_cut_edge_value;     
02842         int             m_forced_visibility_mask; 
02843         int             m_forced_visibility_value;
02844 
02845         unsigned char   m_buffer_options_mask;  
02846         unsigned char   m_buffer_options_value; 
02847         int             m_buffer_size_limit;    
02848 
02849         int             m_hlr_options;          
02850         float           m_hlr_dim_factor;       
02851         float           m_hlr_face_displacement;
02852         float           m_hlr_transparency_cutoff;
02853         int             m_hlr_line_pattern;     
02854         float           m_hlr_color[3];     
02855         float           m_hlr_weight;       
02856         unsigned char   m_hlr_weight_units; 
02857         unsigned char   m_hlr_hsr_algorithm;    
02858 
02859         unsigned short  m_contour_options;          
02860         unsigned short  m_isoline_options;          
02861         char            m_contour_value_adjustment; 
02862         float           m_contour_value_scale;      
02863         float           m_contour_value_translate;  
02864         char            m_isoline_position_type;    
02865         int             m_isoline_position_count;   
02866         float *         m_isoline_positions;        
02867         int             m_isoline_color_count;      
02868         float *         m_isoline_colors;           
02869         int             m_isoline_pattern_count;    
02870         char **         m_isoline_patterns;         
02871         int             m_isoline_weight_count;     
02872         float *         m_isoline_weights_value;    
02873         unsigned char * m_isoline_weights_unit;     
02874 
02875         unsigned short  m_tint_options;         
02876         float           m_tint_color[3];        
02877         float           m_tint_range[2];        
02878         char            m_tint_effect;          
02879 
02880         int             m_lod_options_mask;     
02881         int             m_lod_options_value;    
02882         char            m_lod_algorithm;        
02883         char            m_num_ratios;           
02884         float           m_ratio[8];             
02885         char            m_num_thresholds;       
02886         float           m_threshold[8];         
02887         char            m_threshold_type;       
02888         int             m_min_triangle_count;   
02889         unsigned char   m_clamp;                
02890         unsigned char   m_num_levels;           
02891         int             m_max_degree;           
02892         float           m_tolerance;            
02893         float           m_bounding[6];          
02894         char            m_num_cutoffs;          
02895         float           m_cutoff[8];            
02896         unsigned char   m_heuristic;            
02897         unsigned char   m_fallback;             
02898 
02899         int             m_nurbs_options_mask;   
02900         int             m_nurbs_options_value;  
02901         int             m_curve_budget;         
02902         int             m_curve_continued_budget;
02903         int             m_surface_budget;       
02904         int             m_surface_trim_budget;  
02905         float           m_surface_max_trim_curve_deviation;
02906         float           m_surface_max_facet_angle;
02907         float           m_surface_max_facet_deviation;
02908         float           m_surface_max_facet_width;
02909         float           m_curve_max_angle;          
02910         float           m_curve_max_deviation;      
02911         float           m_curve_max_length;         
02912 
02913         float           m_stereo_separation;        
02914         float           m_stereo_distance;          
02915 
02916         unsigned char   m_tessellations;            
02917         char            m_num_cylinder;             
02918         char            m_cylinder[8];              
02919         char            m_num_sphere;               
02920         char            m_sphere[8];                
02921 
02922         float           m_gooch_color_range[2];     
02923         float           m_gooch_diffuse_weight;     
02924         char *          m_gooch_color_map_segment;          
02925         int             m_gooch_color_map_segment_length;   
02926         unsigned short  m_transparency_options;     
02927 
02928         unsigned char   m_cut_geometry;             
02929         unsigned char   m_cut_geometry_level;       
02930         unsigned char   m_cut_geometry_match;       
02931         float           m_cut_geometry_tolerance;   
02932 
02933         unsigned short  m_simple_shadow;            
02934         unsigned char   m_simple_shadow_blur;       
02935         unsigned short  m_simple_shadow_resolution; 
02936         float           m_simple_shadow_plane[4];   
02937         float           m_simple_shadow_light[3];   
02938         float           m_simple_shadow_color[3];   
02939         float           m_simple_shadow_opacity;
02940 
02941         unsigned short  m_shadow_map;               
02942         unsigned short  m_shadow_map_resolution;    
02943         unsigned char   m_shadow_map_samples;       
02944 
02945         unsigned short  m_simple_reflection;        
02946         float           m_simple_reflection_plane[4]; 
02947         float           m_simple_reflection_opacity;
02948         int             m_simple_reflection_blur;   
02949         float           m_simple_reflection_hither; 
02950         float           m_simple_reflection_yon;    
02951         int             m_simple_reflection_visibility_mask; 
02952         int             m_simple_reflection_visibility_value;
02953 
02954         float           m_depth_range[2];       
02955         float           m_screen_range[4];      
02956         float           m_ambient_up_vector[3]; 
02957         float           m_image_scale[2];       
02958         unsigned short  m_mask_transform;       
02959 
02960         unsigned char   m_geometry_options;     
02961         float           m_dihedral;             
02962 
02963         float           m_image_tint_color[3];   
02964         float           m_texture_tint_color[3];   
02965         unsigned char   m_depth_peeling_layers;  
02966         float           m_depth_peeling_min_area;
02967 
02968         int             m_general_displacement;    
02969         int             m_join_cutoff_angle;    
02970         int             m_edge_join_cutoff_angle;    
02971         float           m_vertex_decimation;    
02972         unsigned char   m_display_list_level;    
02973         unsigned char   m_antialias;
02974 
02975         int             m_extra;
02976 
02977 #if 0
02978         TK_Radiosity_RayTrace_Options   *m_rrt; 
02979 #endif
02980 
02981     public:
02983         TK_Rendering_Options ();
02984         ~TK_Rendering_Options ();
02985 
02986         TK_Status   Read (BStreamFileToolkit & tk) alter;
02987         TK_Status   Write (BStreamFileToolkit & tk) alter;
02988         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02989 
02990         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
02991         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
02992 
02993         void        Reset () alter;
02994 
02996         void            SetMask (int m0, int m1=0, int m2=0) alter    {
02997                             m_mask[0] = m0;
02998                             m_mask[1] = m1;
02999                             m_mask[2] = m2;
03000                             if (m2 != 0)
03001                                 m_mask[1] |= TKO_Rendo_Extended;
03002                             if (m1 != 0)
03003                                 m_mask[0] |= TKO_Rendo_Extended;
03004                         }
03006         int             GetMask (int index=0) const         { return m_mask[index];             }
03007 
03009         void            SetValue (int v0, int v1=0, int v2=0) alter   { m_value[0] = v0; m_value[1] = v1; m_value[2] = v2; }
03011         int             GetValue (int index=0) const        { return m_value[index];            }
03012 
03014         void            SetHSR (int h) alter            { m_hsr &= 0xF0; m_hsr |= (unsigned char)h & 0x0F;  }
03016         int             GetHSR () const             { return (int)(m_hsr & 0x0F);                       }
03017 
03019         void            SetTransparentHSR (int t) alter { m_hsr &= 0x0F; m_hsr |= (unsigned char)t << 4;    }
03021         int             GetTransparentHSR () const  { return (int)(m_hsr >> 4);                         }
03022 
03024         void            SetTransparentStyle (int s) alter { m_transparency_options = (unsigned short)s;      }
03026         int             GetTransparentStyle () const  { return (int)m_transparency_options;             }
03027 
03029         void            SetTechnology (int t) alter     { m_tq &= 0xF0; m_tq |= (unsigned char)t & 0x0F;    }
03031         int             GetTechnology () const      { return (int)(m_tq & 0x0F);                        }
03032 
03034         void            SetQuantization (int q) alter   { m_tq &= 0x0F; m_tq |= (unsigned char)q << 4;      }
03036         int             GetQuantization () const    { return (int)(m_tq >> 4);                          }
03037 
03039         void            SetDebug (int d) alter          { m_debug = d;                                      }
03041         int             GetDebug () const           { return m_debug;                                   }
03042 
03044         void            SetFaceDisplacement (int d) alter   { m_face_displacement = d;                      }
03046         int             GetFaceDisplacement () const    { return m_face_displacement;                   }
03047 
03049         void            SetVertexDisplacement (int d) alter   { m_vertex_displacement = d;                      }
03051         int             GetVertexDisplacement () const    { return m_vertex_displacement;                   }
03052 
03054         void            SetGeneralDisplacement (int d) alter   { m_general_displacement = d;                      }
03056         int             GetGeneralDisplacement () const    { return m_general_displacement;                   }
03057 
03059         void            SetJoinCutoffAngle (int d) alter   { m_join_cutoff_angle = d;                       }
03061         int             GetJoinCutoffAngle () const    { return m_join_cutoff_angle;                    }
03062 
03064         void            SetFogLimits (float n, float f) alter   { m_fog_limits[0] = n; m_fog_limits[1] = f; }
03066         void            SetFogLimits (float const * l) alter    { SetFogLimits (l[0], l[1]);                }
03068         float const *   GetFogLimits () const               { return m_fog_limits;                      }
03069 
03070 
03072         void            SetLockMask (int m) alter               { m_lock_mask = m;                  }
03074         int             GetLockMask () const                { return m_lock_mask;               }
03075 
03077         void            SetLockValue (int v) alter              { m_lock_value = v;                 }
03079         int             GetLockValue () const               { return m_lock_value;              }
03080 
03085         void            SetVisibilityLockMask (int m) alter     { m_lock_visibility_mask = m;       }
03090         int             GetVisibilityLockMask () const      { return m_lock_visibility_mask;    }
03091 
03096         void            SetVisibilityLockValue (int v) alter    { m_lock_visibility_value = v;      }
03101         int             GetVisibilityLockValue () const     { return m_lock_visibility_value;   }
03102 
03103 
03108         void            SetColorLockMask (int m) alter     { m_lock_color_mask = m;       }
03113         int             GetColorLockMask () const      { return m_lock_color_mask;    }
03114 
03119         void            SetColorLockValue (int v) alter    { m_lock_color_value = v;      }
03124         int             GetColorLockValue () const     { return m_lock_color_value;   }
03125 
03126 
03131         void            SetColorFaceLockMask (int m) alter          { m_lock_color_face_mask = (short)m;     }
03136         int             GetColorFaceLockMask () const           { return m_lock_color_face_mask;         }
03137 
03142         void            SetColorFaceLockValue (int v) alter         { m_lock_color_face_value = (short)v;    }
03147         int             GetColorFaceLockValue () const          { return m_lock_color_face_value;        }
03148 
03149 
03154         void            SetColorEdgeLockMask (int m) alter          { m_lock_color_edge_mask = (short)m;     }
03159         int             GetColorEdgeLockMask () const           { return m_lock_color_edge_mask;         }
03160 
03165         void            SetColorEdgeLockValue (int v) alter         { m_lock_color_edge_value = (short)v;    }
03170         int             GetColorEdgeLockValue () const          { return m_lock_color_edge_value;        }
03171 
03172 
03177         void            SetColorLineLockMask (int m) alter          { m_lock_color_line_mask = (short)m;     }
03182         int             GetColorLineLockMask () const           { return m_lock_color_line_mask;         }
03183 
03188         void            SetColorLineLockValue (int v) alter         { m_lock_color_line_value = (short)v;    }
03193         int             GetColorLineLockValue () const          { return m_lock_color_line_value;        }
03194 
03195 
03200         void            SetColorMarkerLockMask (int m) alter          { m_lock_color_marker_mask = (short)m;     }
03205         int             GetColorMarkerLockMask () const           { return m_lock_color_marker_mask;         }
03206 
03211         void            SetColorMarkerLockValue (int v) alter         { m_lock_color_marker_value = (short)v;    }
03216         int             GetColorMarkerLockValue () const          { return m_lock_color_marker_value;        }
03217 
03218 
03223         void            SetColorTextLockMask (int m) alter          { m_lock_color_text_mask = (short)m;     }
03228         int             GetColorTextLockMask () const           { return m_lock_color_text_mask;         }
03229 
03234         void            SetColorTextLockValue (int v) alter         { m_lock_color_text_value = (short)v;    }
03239         int             GetColorTextLockValue () const          { return m_lock_color_text_value;        }
03240 
03241 
03246         void            SetColorWindowLockMask (int m) alter          { m_lock_color_window_mask = (short)m;     }
03251         int             GetColorWindowLockMask () const           { return m_lock_color_window_mask;         }
03252 
03257         void            SetColorWindowLockValue (int v) alter         { m_lock_color_window_value = (short)v;    }
03262         int             GetColorWindowLockValue () const          { return m_lock_color_window_value;        }
03263 
03264 
03269         void            SetColorFaceContrastLockMask (int m) alter          { m_lock_color_face_contrast_mask = (short)m;     }
03274         int             GetColorFaceContrastLockMask () const           { return m_lock_color_face_contrast_mask;         }
03275 
03280         void            SetColorFaceContrastLockValue (int v) alter         { m_lock_color_face_contrast_value = (short)v;    }
03285         int             GetColorFaceContrastLockValue () const          { return m_lock_color_face_contrast_value;        }
03286 
03287 
03292         void            SetColorWindowContrastLockMask (int m) alter          { m_lock_color_window_contrast_mask = (short)m;     }
03297         int             GetColorWindowContrastLockMask () const           { return m_lock_color_window_contrast_mask;         }
03298 
03303         void            SetColorWindowContrastLockValue (int v) alter         { m_lock_color_window_contrast_value = (short)v;    }
03308         int             GetColorWindowContrastLockValue () const          { return m_lock_color_window_contrast_value;        }
03309 
03310 
03315         void            SetColorBackLockMask (int m) alter          { m_lock_color_back_mask = (short)m;     }
03320         int             GetColorBackLockMask () const           { return m_lock_color_back_mask;         }
03321 
03326         void            SetColorBackLockValue (int v) alter         { m_lock_color_back_value = (short)v;    }
03331         int             GetColorBackLockValue () const          { return m_lock_color_back_value;        }
03332 
03333 
03338         void            SetColorVertexLockMask (int m) alter          { m_lock_color_vertex_mask = (short)m;     }
03343         int             GetColorVertexLockMask () const           { return m_lock_color_vertex_mask;         }
03344 
03349         void            SetColorVertexLockValue (int v) alter         { m_lock_color_vertex_value = (short)v;    }
03354         int             GetColorVertexLockValue () const          { return m_lock_color_vertex_value;        }
03355 
03356 
03361         void            SetColorEdgeContrastLockMask (int m) alter          { m_lock_color_edge_contrast_mask = (short)m;     }
03366         int             GetColorEdgeContrastLockMask () const           { return m_lock_color_edge_contrast_mask;         }
03367 
03372         void            SetColorEdgeContrastLockValue (int v) alter         { m_lock_color_edge_contrast_value = (short)v;    }
03377         int             GetColorEdgeContrastLockValue () const          { return m_lock_color_edge_contrast_value;        }
03378 
03379 
03384         void            SetColorLineContrastLockMask (int m) alter          { m_lock_color_line_contrast_mask = (short)m;     }
03389         int             GetColorLineContrastLockMask () const           { return m_lock_color_line_contrast_mask;         }
03390 
03395         void            SetColorLineContrastLockValue (int v) alter         { m_lock_color_line_contrast_value = (short)v;    }
03400         int             GetColorLineContrastLockValue () const          { return m_lock_color_line_contrast_value;        }
03401 
03402 
03407         void            SetColorMarkerContrastLockMask (int m) alter          { m_lock_color_marker_contrast_mask = (short)m;     }
03412         int             GetColorMarkerContrastLockMask () const           { return m_lock_color_marker_contrast_mask;         }
03413 
03418         void            SetColorMarkerContrastLockValue (int v) alter         { m_lock_color_marker_contrast_value = (short)v;    }
03423         int             GetColorMarkerContrastLockValue () const          { return m_lock_color_marker_contrast_value;        }
03424 
03425 
03430         void            SetColorVertexContrastLockMask (int m) alter          { m_lock_color_vertex_contrast_mask = (short)m;     }
03435         int             GetColorVertexContrastLockMask () const           { return m_lock_color_vertex_contrast_mask;         }
03436 
03441         void            SetColorVertexContrastLockValue (int v) alter         { m_lock_color_vertex_contrast_value = (short)v;    }
03446         int             GetColorVertexContrastLockValue () const          { return m_lock_color_vertex_contrast_value;        }
03447 
03448 
03453         void            SetColorTextContrastLockMask (int m) alter          { m_lock_color_text_contrast_mask = (short)m;     }
03458         int             GetColorTextContrastLockMask () const           { return m_lock_color_text_contrast_mask;         }
03459 
03464         void            SetColorTextContrastLockValue (int v) alter         { m_lock_color_text_contrast_value = (short)v;    }
03469         int             GetColorTextContrastLockValue () const          { return m_lock_color_text_contrast_value;        }
03470 
03471 
03472 
03473 
03475         void            SetForcedLockMask (int m) alter               { m_forced_mask = m;                  }
03477         int             GetForcedLockMask () const                { return m_forced_mask;               }
03478 
03480         void            SetForcedLockValue (int v) alter              { m_forced_value = v;                 }
03482         int             GetForcedLockValue () const               { return m_forced_value;              }
03483 
03488         void            SetVisibilityForcedLockMask (int m) alter     { m_forced_visibility_mask = m;       }
03493         int             GetVisibilityForcedLockMask () const      { return m_forced_visibility_mask;    }
03494 
03499         void            SetVisibilityForcedLockValue (int v) alter    { m_forced_visibility_value = v;      }
03504         int             GetVisibilityForcedLockValue () const     { return m_forced_visibility_value;   }
03505 
03506 
03511         void            SetColorForcedLockMask (int m) alter     { m_forced_color_mask = m;       }
03516         int             GetColorForcedLockMask () const      { return m_forced_color_mask;    }
03517 
03522         void            SetColorForcedLockValue (int v) alter    { m_forced_color_value = v;      }
03527         int             GetColorForcedLockValue () const     { return m_forced_color_value;   }
03528 
03529 
03534         void            SetColorFaceForcedLockMask (int m) alter          { m_forced_color_face_mask = (short)m;     }
03539         int             GetColorFaceForcedLockMask () const           { return m_forced_color_face_mask;         }
03540 
03545         void            SetColorFaceForcedLockValue (int v) alter         { m_forced_color_face_value = (short)v;    }
03550         int             GetColorFaceForcedLockValue () const          { return m_forced_color_face_value;        }
03551 
03552 
03557         void            SetColorEdgeForcedLockMask (int m) alter          { m_forced_color_edge_mask = (short)m;     }
03562         int             GetColorEdgeForcedLockMask () const           { return m_forced_color_edge_mask;         }
03563 
03568         void            SetColorEdgeForcedLockValue (int v) alter         { m_forced_color_edge_value = (short)v;    }
03573         int             GetColorEdgeForcedLockValue () const          { return m_forced_color_edge_value;        }
03574 
03575 
03580         void            SetColorLineForcedLockMask (int m) alter          { m_forced_color_line_mask = (short)m;     }
03585         int             GetColorLineForcedLockMask () const           { return m_forced_color_line_mask;         }
03586 
03591         void            SetColorLineForcedLockValue (int v) alter         { m_forced_color_line_value = (short)v;    }
03596         int             GetColorLineForcedLockValue () const          { return m_forced_color_line_value;        }
03597 
03598 
03603         void            SetColorMarkerForcedLockMask (int m) alter          { m_forced_color_marker_mask = (short)m;     }
03608         int             GetColorMarkerForcedLockMask () const           { return m_forced_color_marker_mask;         }
03609 
03614         void            SetColorMarkerForcedLockValue (int v) alter         { m_forced_color_marker_value = (short)v;    }
03619         int             GetColorMarkerForcedLockValue () const          { return m_forced_color_marker_value;        }
03620 
03621 
03626         void            SetColorTextForcedLockMask (int m) alter          { m_forced_color_text_mask = (short)m;     }
03631         int             GetColorTextForcedLockMask () const           { return m_forced_color_text_mask;         }
03632 
03637         void            SetColorTextForcedLockValue (int v) alter         { m_forced_color_text_value = (short)v;    }
03642         int             GetColorTextForcedLockValue () const          { return m_forced_color_text_value;        }
03643 
03644 
03649         void            SetColorWindowForcedLockMask (int m) alter          { m_forced_color_window_mask = (short)m;     }
03654         int             GetColorWindowForcedLockMask () const           { return m_forced_color_window_mask;         }
03655 
03660         void            SetColorWindowForcedLockValue (int v) alter         { m_forced_color_window_value = (short)v;    }
03665         int             GetColorWindowForcedLockValue () const          { return m_forced_color_window_value;        }
03666 
03667 
03672         void            SetColorFaceContrastForcedLockMask (int m) alter          { m_forced_color_face_contrast_mask = (short)m;     }
03677         int             GetColorFaceContrastForcedLockMask () const           { return m_forced_color_face_contrast_mask;         }
03678 
03683         void            SetColorFaceContrastForcedLockValue (int v) alter         { m_forced_color_face_contrast_value = (short)v;    }
03688         int             GetColorFaceContrastForcedLockValue () const          { return m_forced_color_face_contrast_value;        }
03689 
03690 
03695         void            SetColorWindowContrastForcedLockMask (int m) alter          { m_forced_color_window_contrast_mask = (short)m;     }
03700         int             GetColorWindowContrastForcedLockMask () const           { return m_forced_color_window_contrast_mask;         }
03701 
03706         void            SetColorWindowContrastForcedLockValue (int v) alter         { m_forced_color_window_contrast_value = (short)v;    }
03711         int             GetColorWindowContrastForcedLockValue () const          { return m_forced_color_window_contrast_value;        }
03712 
03713 
03718         void            SetColorBackForcedLockMask (int m) alter          { m_forced_color_back_mask = (short)m;     }
03723         int             GetColorBackForcedLockMask () const           { return m_forced_color_back_mask;         }
03724 
03729         void            SetColorBackForcedLockValue (int v) alter         { m_forced_color_back_value = (short)v;    }
03734         int             GetColorBackForcedLockValue () const          { return m_forced_color_back_value;        }
03735 
03736 
03741         void            SetColorVertexForcedLockMask (int m) alter          { m_forced_color_vertex_mask = (short)m;     }
03746         int             GetColorVertexForcedLockMask () const           { return m_forced_color_vertex_mask;         }
03747 
03752         void            SetColorVertexForcedLockValue (int v) alter         { m_forced_color_vertex_value = (short)v;    }
03757         int             GetColorVertexForcedLockValue () const          { return m_forced_color_vertex_value;        }
03758 
03759 
03764         void            SetColorEdgeContrastForcedLockMask (int m) alter          { m_forced_color_edge_contrast_mask = (short)m;     }
03769         int             GetColorEdgeContrastForcedLockMask () const           { return m_forced_color_edge_contrast_mask;         }
03770 
03775         void            SetColorEdgeContrastForcedLockValue (int v) alter         { m_forced_color_edge_contrast_value = (short)v;    }
03780         int             GetColorEdgeContrastForcedLockValue () const          { return m_forced_color_edge_contrast_value;        }
03781 
03782 
03787         void            SetColorLineContrastForcedLockMask (int m) alter          { m_forced_color_line_contrast_mask = (short)m;     }
03792         int             GetColorLineContrastForcedLockMask () const           { return m_forced_color_line_contrast_mask;         }
03793 
03798         void            SetColorLineContrastForcedLockValue (int v) alter         { m_forced_color_line_contrast_value = (short)v;    }
03803         int             GetColorLineContrastForcedLockValue () const          { return m_forced_color_line_contrast_value;        }
03804 
03805 
03810         void            SetColorMarkerContrastForcedLockMask (int m) alter          { m_forced_color_marker_contrast_mask = (short)m;     }
03815         int             GetColorMarkerContrastForcedLockMask () const           { return m_forced_color_marker_contrast_mask;         }
03816 
03821         void            SetColorMarkerContrastForcedLockValue (int v) alter         { m_forced_color_marker_contrast_value = (short)v;    }
03826         int             GetColorMarkerContrastForcedLockValue () const          { return m_forced_color_marker_contrast_value;        }
03827 
03828 
03833         void            SetColorVertexContrastForcedLockMask (int m) alter          { m_forced_color_vertex_contrast_mask = (short)m;     }
03838         int             GetColorVertexContrastForcedLockMask () const           { return m_forced_color_vertex_contrast_mask;         }
03839 
03844         void            SetColorVertexContrastForcedLockValue (int v) alter         { m_forced_color_vertex_contrast_value = (short)v;    }
03849         int             GetColorVertexContrastForcedLockValue () const          { return m_forced_color_vertex_contrast_value;        }
03850 
03851 
03856         void            SetColorTextContrastForcedLockMask (int m) alter          { m_forced_color_text_contrast_mask = (short)m;     }
03861         int             GetColorTextContrastForcedLockMask () const           { return m_forced_color_text_contrast_mask;         }
03862 
03867         void            SetColorTextContrastForcedLockValue (int v) alter         { m_forced_color_text_contrast_value = (short)v;    }
03872         int             GetColorTextContrastForcedLockValue () const          { return m_forced_color_text_contrast_value;        }
03873 
03874 
03875 
03876 
03878         void            SetBufferOptionsMask (int v) alter      { m_buffer_options_mask = (unsigned char)v;        }
03880         int             GetBufferOptionsMask () const       { return m_buffer_options_mask;     }
03882         void            SetBufferOptionsValue (int v) alter     { m_buffer_options_value = (unsigned char) v; }
03884         int             GetBufferOptionsValue () const      { return m_buffer_options_value;    }
03886         void            SetBufferSizeLimit (int l) alter        { m_buffer_size_limit = l;          }
03888         int             GetBufferSizeLimit () const         { return m_buffer_size_limit;       }
03889 
03890 
03892         void            SetStereoSeparation (float s) alter     { m_stereo_separation = s;          }
03894         float           GetStereoSeparation () const        { return m_stereo_separation;       }
03896         void            SetStereoDistance (float d) alter     { m_stereo_distance = d;          }
03898         float           GetStereoDistance () const        { return m_stereo_distance;       }
03899 
03900 
03902         void            SetHlrOptions (int o) alter {
03903                             m_hlr_options = o;
03904                             if ((o & TKO_Hidden_Line_Extended_Mask) != 0) {
03905                                 m_hlr_options |= TKO_Hidden_Line_Extended;
03906                             if ((o & TKO_Hidden_Line_Extended2_Mask) != 0)
03907                                 m_hlr_options |= TKO_Hidden_Line_Extended2;
03908                         }
03909             }
03911         int             GetHlrOptions () const              { return m_hlr_options;             }
03913         void            SetHlrDimFactor (float d) alter         { m_hlr_dim_factor = d;             }
03915         float           GetHlrDimFactor () const            { return m_hlr_dim_factor;          }
03917         void            SetHlrFaceDisplacement (float d) alter  { m_hlr_face_displacement = d;      }
03919         float           GetHlrFaceDisplacement () const     { return m_hlr_face_displacement;   }
03921         void            SetHlrLinePattern (int p) alter         { m_hlr_line_pattern = p;           }
03923         int             GetHlrLinePattern () const          { return m_hlr_line_pattern;        }
03925         void            SetHlrFaceSortingAlgorithm (int a) alter { m_hlr_hsr_algorithm = (unsigned char)a;  }
03927         float           GetHlrFaceSortingAlgorithm () const { return m_hlr_hsr_algorithm;           }
03928 
03929 
03931         void            SetNURBSOptionsMask (int m) alter {
03932                             m_nurbs_options_mask = m;
03933                             if ((m & TKO_NURBS_Extended_Mask) != 0)
03934                                 m_nurbs_options_mask |= TKO_NURBS_Extended;
03935                         }
03937         int             GetNURBSOptionsMask () const        { return m_nurbs_options_mask;     }
03939         void            SetNURBSOptionsValue (int v) alter      { m_nurbs_options_value = v;       }
03941         int             GetNURBSOptionsValue () const       { return m_nurbs_options_value;    }
03943         void            SetNURBSCurveBudget (int b) alter       { m_curve_budget = b;               }
03945         int             GetNURBSCurveBudget () const        { return m_curve_budget;            }
03947         void            SetNURBSCurveContinuedBudget (int b) alter  { m_curve_continued_budget = b;     }
03949         int             GetNURBSCurveContinuedBudget () const   { return m_curve_continued_budget;  }
03951         void            SetNURBSSurfaceBudget (int b) alter     { m_curve_budget = b;               }
03953         int             GetNURBSSurfaceBudget () const      { return m_curve_budget;            }
03955         void            SetNURBSSurfaceTrimBudget (int b) alter { m_surface_trim_budget = b;        }
03957         int             GetNURBSSurfaceTrimBudget () const  { return m_surface_trim_budget;     }
03958 
03959 
03961         void            SetLodOptionsMask (int v) alter         { m_lod_options_mask = v;           }
03963         int             GetLodOptionsMask () const          { return m_lod_options_mask;        }
03965         void            SetLodOptionsValue (int v) alter        { m_lod_options_value = v;          }
03967         int             GetLodOptionsValue () const         { return m_lod_options_value;       }
03969         void            SetLodAlgorithm (int v) alter           { m_lod_algorithm = (char)v;        }
03971         int             GetLodAlgorithm () const            { return m_lod_algorithm;           }
03973         void            SetLodMinimumTriangleCount (int v) alter    { m_min_triangle_count = v;     }
03975         int             GetLodMinimumTriangleCount () const     { return m_min_triangle_count;  }
03977         void            SetLodNumLevels (int v) alter           { m_num_levels = (unsigned char)v;  }
03979         int             GetLodNumLevels () const            { return m_num_levels;              }
03981         void            SetLodClamp (int v) alter               { m_clamp = (unsigned char)v;       }
03983         int             GetLodClamp () const                { return m_clamp;                   }
03985         void            SetLodMaxDegree (int v) alter           { m_max_degree = v;                 }
03987         int             GetLodMaxDegree () const            { return m_max_degree;              }
03989         void            SetLodTolerance (float v) alter         { m_tolerance = v;                  }
03991         float           GetLodTolerance () const            { return m_tolerance;               }
03993         void            SetLodFallback (int v) alter            { m_fallback = (char)v;             }
03995         int             GetLodFallback () const             { return m_fallback;                }
03996 
03998         void            SetLodBounding (float x1, float y1, float z1, float x2, float y2, float z2) alter {
03999                             m_bounding[0] = x1;  m_bounding[1] = y1;  m_bounding[2] = z1;
04000                             m_bounding[3] = x2;  m_bounding[4] = y2;  m_bounding[5] = z2;
04001                         }
04003         void            SetLodBounding (float const * s, float const * e) alter {
04004                             SetLodBounding (s[0], s[1], s[2],  e[0], e[1], e[2]);
04005                         }
04007         void            SetLodBounding (float const * p) alter  { SetLodBounding (&p[0], &p[3]);    }
04009         float const *   GetLodBounding () const             { return m_bounding;                }
04010 
04012         void            SetLodRatio (float r) alter             { m_num_ratios = 1; m_ratio[0] = r; }
04014         void            SetLodRatios (int c, float const * r = 0) alter {
04015                             m_num_ratios = (char)c;
04016                             if (r != 0) {
04017                                 int i;
04018                                 for (i=0; i<c; ++i)
04019                                     m_ratio[i] = r[i];
04020                             }
04021                         }
04023         int             GetLodNumRatios () const            { return m_num_ratios;              }
04025         float const *   GetLodRatios () const               { return m_ratio;                   }
04027         float alter *   GetLodRatios () alter               { return m_ratio;                   }
04028 
04030         void            SetLodThresholdType (int v) alter       { m_threshold_type = (char)v; }
04032         int             GetLodThresholdType () const        { return m_threshold_type; }
04034         void            SetLodThreshold (float r) alter             { m_num_thresholds = 1; m_threshold[0] = r;    }
04036         void            SetLodThresholds (int c, float const * r = 0) alter {
04037                             m_num_thresholds = (char)c;
04038                             if (r != 0) {
04039                                 int i;
04040                                 for (i=0; i<c; ++i)
04041                                     m_threshold[i] = r[i];
04042                             }
04043                         }
04045         int             GetLodNumThresholds () const            { return m_num_thresholds;              }
04047         float const *   GetLodThresholds () const               { return m_threshold;                  }
04049         float alter *   GetLodThresholds () alter               { return m_threshold;                  }
04050 
04052         void            SetLodCutoff (float r) alter             { m_num_cutoffs = 1; m_cutoff[0] = r;    }
04054         void            SetLodCutoffs (int c, float const * r = 0) alter {
04055                             m_num_cutoffs = (char)c;
04056                             if (r != 0) {
04057                                 int i;
04058                                 for (i=0; i<c; ++i)
04059                                     m_cutoff[i] = r[i];
04060                             }
04061                         }
04063         int             GetLodNumCutoffs () const           { return m_num_cutoffs;             }
04065         float const *   GetLodCutoffs () const              { return m_cutoff;                  }
04067         float alter *   GetLodCutoffs () alter              { return m_cutoff;                  }
04068 
04069 
04071         void            SetTessellationMask (int m) alter       { m_tessellations = (unsigned char)m;          }
04073         int             GetTessellationMask () const        { return m_tessellations;       }
04075         void            SetCylinderTessellation (int n) alter    { m_num_cylinder = (char)1; m_cylinder[0] = (char)n;    }
04077         void            SetCylinderTessellations (int c, char const * n = 0) alter {
04078                             m_num_cylinder = (char)c;
04079                             if (n != 0) {
04080                                 int i;
04081                                 for (i=0; i<c; ++i)
04082                                     m_cylinder[i] = n[i];
04083                             }
04084                         }
04086         int             GetNumCylinderTessellations () const { return m_num_cylinder;           }
04088         char const *    GetCylinderTessellations () const    { return m_cylinder;               }
04090         char alter *    GetCylinderTessellations () alter    { return m_cylinder;               }
04092         void            SetSphereTessellation (int n) alter    { m_num_sphere = (char)1; m_sphere[0] = (char)n;    }
04094         void            SetSphereTessellations (int c, char const * n = 0) alter {
04095                             m_num_sphere = (char)c;
04096                             if (n != 0) {
04097                                 int i;
04098                                 for (i=0; i<c; ++i)
04099                                     m_sphere[i] = n[i];
04100                             }
04101                         }
04103         int             GetNumSphereTessellations () const  { return m_num_sphere;           }
04105         char const *    GetSphereTessellations () const     { return m_sphere;               }
04107         char alter *    GetSphereTessellations () alter     { return m_sphere;               }
04108 
04110         void            SetGeometryOptionsMask (int m) alter    { m_geometry_options = (unsigned char)m;    }
04112         int             GetGeometryOptionsMask () const         { return m_geometry_options;    }
04113 
04115         void            SetHardEdgeAngle (int m) alter      { m_dihedral = (unsigned char)m;    }
04117         float           GetHardEdgeAngle () const           { return m_dihedral;    }
04118 
04120         void            SetMaskTransform (int m) alter      { m_mask_transform = (unsigned char)m;  }
04122         int             GetMaskTransform () const           { return (int)m_mask_transform;         }
04123 
04124 
04126         void            SetCutGeometry (int m) alter        { m_cut_geometry = (unsigned char)m;  }
04128         int             GetCutGeometry () const             { return (int)m_cut_geometry;         }
04129 
04131         void            SetCutGeometryLevel (int m) alter   { m_cut_geometry_level = (unsigned char)m;  }
04133         int             GetCutGeometryLevel () const        { return (int)m_cut_geometry_level;         }
04134 
04136         void            SetCutGeometryColorMatch (int m) alter  { m_cut_geometry_match = (unsigned char)m;  }
04138         int             GetCutGeometryColorMatch () const       { return (int)m_cut_geometry_match;         }
04139 
04141         void            SetCutGeometryTolerance (float m) alter     { m_cut_geometry_tolerance = m; }
04143         float           GetCutGeometryTolerance () const            { return m_cut_geometry_tolerance;  }
04144 
04145 
04147         void            SetDisplayListLevel (int m) alter   { m_display_list_level = (unsigned char)m;  }
04149         int             GetDisplayListLevel () const        { return (int)m_display_list_level;         }
04150 
04152         void            SetSimpleShadow (int m) alter {
04153                             m_simple_shadow = (unsigned short)m;
04154                             if ((m & TKO_Simple_Shadow_Extended_Mask) != 0)
04155                                 m_simple_shadow |= TKO_Simple_Shadow_Extended;
04156                         }
04158         int             GetSimpleShadow () const            { return (int)m_simple_shadow;         }
04159 
04161         void            SetSimpleShadowBlur (int m) alter       { m_simple_shadow_blur = (unsigned char)m;  }
04163         int             GetSimpleShadowBlur () const            { return (int)m_simple_shadow_blur;         }
04164 
04166         void            SetSimpleShadowResolution (int m) alter     { m_simple_shadow_resolution = (unsigned short)m;  }
04168         int             GetSimpleShadowResolution () const          { return (int)m_simple_shadow_resolution;         }
04169 
04171         void            SetSimpleShadowLight (float x, float y, float z) alter {
04172                             m_simple_shadow_light[0] = x;
04173                             m_simple_shadow_light[1] = y;
04174                             m_simple_shadow_light[2] = z;
04175                         }
04177         void            SetSimpleShadowLight (float const * l) alter    { SetSimpleShadowLight (l[0], l[1], l[2]); }
04179         float const *   getSimpleShadowLight () const               { return m_simple_shadow_light; }
04180 
04182         void            SetSimpleShadowPlane (float a, float b, float c, float d) alter {
04183                             m_simple_shadow_plane[0] = a;
04184                             m_simple_shadow_plane[1] = b;
04185                             m_simple_shadow_plane[2] = c;
04186                             m_simple_shadow_plane[3] = d;
04187                         }
04189         void            SetSimpleShadowPlane (float const * p) alter    { SetSimpleShadowPlane (p[0], p[1], p[2], p[3]); }
04191         float const *   GetSimpleShadowPlane () const               { return m_simple_shadow_plane; }
04192 
04194         void            SetSimpleShadowColor (float r, float g, float b) alter
04195                 { m_simple_shadow_color[0] = r; m_simple_shadow_color[1] = g; m_simple_shadow_color[2] = b; }
04197         void            SetSimpleShadowColor (float const * rgb) alter      { SetSimpleShadowColor (rgb[0], rgb[1], rgb[2]);    }
04199         float const *   GetSimpleShadowColor () const                   { return m_simple_shadow_color;     }
04200 
04202         void            SetSimpleShadowOpacity (float o) alter  { m_simple_shadow_opacity = o;      }
04204         float           GetSimpleShadowOpacity () const         { return m_simple_shadow_opacity;   }
04205 
04206   
04208         void            SetShadowMap (int m) alter      { m_shadow_map = (unsigned char)m;  }
04210         int             GetShadowMap () const           { return (int)m_shadow_map;         }
04211 
04213         void            SetShadowMapResolution (int m) alter    { m_shadow_map_resolution = (unsigned short)m;  }
04215         int             GetShadowMapResolution () const         { return (int)m_shadow_map_resolution;         }
04216 
04218         void            SetShadowMapSamples (int m) alter       { m_shadow_map_samples = (unsigned char)m;  }
04220         int             GetShadowMapSamples () const            { return (int)m_shadow_map_samples;         }
04221 
04222 
04224         void            SetSimpleReflection (int m) alter       { m_simple_reflection = (unsigned short)m;  }
04226         int             GetSimpleReflection () const            { return (int)m_simple_reflection;          }
04227 
04229         void            SetSimpleReflectionPlane (float a, float b, float c, float d) alter {
04230                             m_simple_reflection_plane[0] = a;
04231                             m_simple_reflection_plane[1] = b;
04232                             m_simple_reflection_plane[2] = c;
04233                             m_simple_reflection_plane[3] = d;
04234                         }
04236         void            SetSimpleReflectionPlane (float const * p) alter    { SetSimpleReflectionPlane (p[0], p[1], p[2], p[3]); }
04238         float const *   GetSimpleReflectionPlane () const               { return m_simple_reflection_plane; }
04239 
04241         void            SetSimpleReflectionOpacity (float o) alter  { m_simple_reflection_opacity = o;      }
04243         float           GetSimpleReflectionOpacity () const         { return m_simple_reflection_opacity;   }
04244 
04246         void            SetSimpleReflectionVisibilityMask (int m) alter     { m_simple_reflection_visibility_mask = m;  }
04248         int             GetSimpleReflectionVisibilityValue () const         { return m_simple_reflection_visibility_value;          }
04249 
04250 
04252         void            SetDepthRange (float n, float f) alter   { m_depth_range[0] = n; m_depth_range[1] = f; }
04254         void            SetDepthRange (float const * l) alter    { SetDepthRange (l[0], l[1]);                }
04256         float const *   GetDepthRange () const               { return m_depth_range;                      }
04257 
04258 
04260         void            SetScreenRange (float l, float r, float b, float t) alter
04261                             { m_screen_range[0] = l; m_screen_range[1] = r; m_screen_range[2] = b; m_screen_range[3] = t; }
04263         void            SetScreenRange (float const * l) alter    { SetScreenRange (l[0], l[1], l[2], l[3]);    }
04265         float const *   GetScreenRange () const               { return m_screen_range;                      }
04266 
04270         void            SetAmbientUpVector (float x, float y, float z) alter    
04271                             { m_ambient_up_vector[0] = x; m_ambient_up_vector[1] = y; m_ambient_up_vector[2] = z; }
04273         void            SetAmbientUpVector (float const * v) alter  { SetAmbientUpVector (v[0], v[1], v[2]); }
04275         float const *   GetAmbientUpVector () const               { return m_ambient_up_vector; }
04276 
04278         void            SetImageScale (float x, float y) alter   { m_image_scale[0] = x; m_image_scale[1] = y; }
04280         void            SetImageScale (float const * s) alter    { SetImageScale (s[0], s[1]);                }
04282         float const *   GetImageScale () const               { return m_image_scale;                      }
04283 
04284 
04286         void            SetImageTintColor (float r, float g, float b) alter
04287                             { m_image_tint_color[0] = r; m_image_tint_color[1] = g; m_image_tint_color[2] = b; }
04289         void            SetImageTintColor (float const * rgb) alter     { SetImageTintColor (rgb[0], rgb[1], rgb[2]);   }
04291         float const *   GetImageTintColor () const                   { return m_image_tint_color;     }
04292 
04294         void            SetDiffuseTextureTintColor (float r, float g, float b) alter
04295                             { m_texture_tint_color[0] = r; m_texture_tint_color[1] = g; m_texture_tint_color[2] = b; }
04297         void            SetDiffuseTextureTintColor (float const * rgb) alter { SetDiffuseTextureTintColor (rgb[0], rgb[1], rgb[2]); }
04299         float const *   GetDiffuseTextureTintColor () const                   { return m_texture_tint_color;     }
04300 
04302         void            SetAntiAlias (int m) alter      { m_antialias = (unsigned char)m;   }
04304         int             GetAntiAlias () const           { return (int)m_antialias;          }
04305 
04307         void            SetVertexDecimation (float f) alter     { m_vertex_decimation = f;  }
04309         float           GetVertexDecimation () const            { return m_vertex_decimation;           }
04310 };
04311 
04313 
04317 enum TKO_Heuristic_Bits {
04318     TKO_Heuristic_Hidden_Surfaces           = 0x00000001,  
04319     TKO_Heuristic_Backplane_Cull            = 0x00000002,  
04320     TKO_Heuristic_Polygon_Handedness        = 0x00000004,  
04321     TKO_Heuristic_Quick_Moves               = 0x00000008,  
04322     TKO_Heuristic_Partial_Erase             = 0x00000010,  
04323     TKO_Heuristic_Memory_Purge              = 0x00000020,  
04324     TKO_Heuristic_Related_Select_Limit      = 0x00000040,  
04325     TKO_Heuristic_Internal_Shell_Limit      = 0x00000080,  
04326     TKO_Heuristic_Clipping                  = 0x00000100,  
04327     TKO_Heuristic_Transformations           = 0x00000200,  
04328     TKO_Heuristic_Intersecting_Polygons     = 0x00000400,  
04329     TKO_Heuristic_Polygon_Crossings         = 0x00000800,  
04330     TKO_Heuristic_Concave_Polygons          = 0x00001000,  
04331     TKO_Heuristic_Incremental_Updates       = 0x00002000,  
04332     TKO_Heuristic_Selection_Sorting         = 0x00004000,  
04333 
04334     TKO_Heuristic_Extended                  = 0x00008000,  
04335     TKO_Heuristic_Extended_Mask             = 0xFFFF0000,  
04336     TKO_Heuristic_Extended_Shift            = 16,           
04337 
04338     TKO_Heuristic_Culling                   = 0x00010000,  
04339     TKO_Heuristic_Exclude_Bounding          = 0x00020000,  
04340     TKO_Heuristic_Detail_Selection          = 0x00040000,  
04341     TKO_Heuristic_Ordered_Drawing           = 0x00080000,  
04342     TKO_Heuristic_Ordered_Unit              = 0x00100000,  
04343     TKO_Heuristic_Ordered_Weights           = 0x00200000,  
04344     TKO_Heuristic_Internal_Polyline_Limit   = 0x00400000,  
04345     TKO_Heuristic_Ordered_Grid              = 0x00800000,  
04346 
04347     TKO_Heuristic_Selection_Level           = 0x01000000,  
04348     TKO_Heuristic_Static                    = 0x02000000,  
04349     TKO_Heuristic_Force_Defer               = 0x04000000,  
04350     TKO_Heuristic_Model_Type                = 0x08000000,  
04351 
04352     TKO_Heuristic_Internal_Select_Limit = TKO_Heuristic_Internal_Shell_Limit | TKO_Heuristic_Internal_Polyline_Limit,  
04353     TKO_Heuristic_Extras                = TKO_Heuristic_Polygon_Handedness | TKO_Heuristic_Quick_Moves,  
04354 
04355     TKO_Heur_Extra_Left_Handed_Polys    = 0x01,         
04356     TKO_Heur_Extra_Quick_Move_Spriting  = 0x02,         
04357 
04358     TKO_Heur_View_Frustum_Culling       = 0x00000001,           
04359     TKO_Heur_Obscuration_Culling        = 0x00000002,           
04360     TKO_Heur_Extent_Culling             = 0x00000004,           
04361     TKO_Heur_View_Frustum_Culling_Off   = 0x00000010,           
04362     TKO_Heur_Obscuration_Culling_Off    = 0x00000020,           
04363     TKO_Heur_Extent_Culling_Off         = 0x00000040,           
04364     TKO_Heur_Culling_Extended           = 0x00000080,           
04365     TKO_Heur_Culling_Extended_Mask      = 0xFFFFFF00,           
04366     TKO_Heur_Culling_Extended_Shift     = 8,                
04367     TKO_Heur_Obscuration_Use_Octree     = 0x00000100,           
04368     TKO_Heur_Maximum_Extent_Mode        = 0x00000200,           
04369     TKO_Heur_Vector_Culling             = 0x00000400,           
04370     TKO_Heur_Vector_Tolerance           = 0x00000800,           
04371     TKO_Heur_Vector_Culling_Off         = 0x00001000,           
04372     TKO_Heur_Vector_Tolerance_Off       = 0x00002000,           
04373     TKO_Heur_Hard_Extent_Culling        = 0x00004000,           
04374     TKO_Heur_Culling_Extended2          = 0x00008000,           
04375     TKO_Heur_Culling_Extended2_Mask     = 0xFFFF0000,       
04376     TKO_Heur_Culling_Extended2_Shift    = 16,               
04377     TKO_Heur_Maximum_Extent_Level       = 0x00010000,           
04378 
04379     TKO_Heur_Max_Extent_Mode_None       = 0,                
04380     TKO_Heur_Max_Extent_Mode_Dot        = 1,                
04381     TKO_Heur_Max_Extent_Mode_Bounding   = 2,                
04382     TKO_Heur_Max_Extent_Mode_Defer      = 3,                
04383 
04384     TKO_Heur_Max_Extent_Level_None      = 0x00,             
04385     TKO_Heur_Max_Extent_Level_Segment   = 0x01,             
04386     TKO_Heur_Max_Extent_Level_Geometry  = 0x02,             
04387     TKO_Heur_Max_Extent_Level_Primitive = 0x04,             
04388     TKO_Heur_Max_Extent_Level_All       = 0x07,             
04389 
04390     TKO_Heur_Order_World_Volume     = 0,                
04391     TKO_Heur_Order_Screen_Extent    = 1,                
04392     TKO_Heur_Order_Distance         = 2,                
04393     TKO_Heur_Order_Divergence       = 3,                
04394     TKO_Heur_Order_Density          = 4,                
04395     TKO_Heur_Order_Priority         = 5,                
04396     TKO_Heur_Order_Count            = 6,                
04397 
04398     TKO_Heur_Selection_Level_Entity       = 0,   
04399     TKO_Heur_Selection_Level_Segment      = 1,   
04400     TKO_Heur_Selection_Level_Segment_Tree = 2,   
04401 
04402     TKO_Heur_Model_Type_Default         = 0,   
04403     TKO_Heur_Model_Type_LMV             = 1   
04404 };
04405 
04406 
04407 
04409 
04415 class BBINFILETK_API TK_Heuristics : public BBaseOpcodeHandler {
04416     protected:
04417         int             m_mask;                 
04418         int             m_value;                
04419 
04420         int             m_related;              
04421         int             m_internal_shell;       
04422         int             m_internal_polyline;    
04423 
04424         unsigned char   m_extras;               
04425         int             m_culling;              
04426         int             m_pixel_threshold;      
04427         int             m_maximum_extent;       
04428         int             m_maximum_extent_mode;  
04429         char            m_maximum_extent_level; 
04430         int             m_hard_extent;          
04431         int             m_force_defer;          
04432         float           m_vector[3];            
04433         float           m_vector_tolerance;     
04434 
04435         unsigned char   m_ordered_weights_mask;
04436         float           m_ordered_weights[TKO_Heur_Order_Count];
04437         unsigned char   m_selection_level;
04438         unsigned char   m_model_type;
04439 
04440     public:
04442         TK_Heuristics () : BBaseOpcodeHandler (TKE_Heuristics),
04443                                   m_mask (0), m_value (0), m_culling(0), m_pixel_threshold (0), m_maximum_extent (0), m_maximum_extent_mode(0) {}
04444         ~TK_Heuristics ();
04445 
04446         TK_Status   Read (BStreamFileToolkit & tk) alter;
04447         TK_Status   Write (BStreamFileToolkit & tk) alter;
04448         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04449 
04450         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04451         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04452 
04454         void            SetMask (int m) alter {
04455                             m_mask = m;
04456                             if ((m & TKO_Heuristic_Extended_Mask) != 0)
04457                                 m_mask |= TKO_Heuristic_Extended;
04458                         }
04460         int             GetMask () const            { return m_mask;    }
04461 
04463         void            SetValue (int v) alter          { m_value = v;      }
04465         int             GetValue () const           { return m_value;   }
04466 
04468         void            SetRelatedSelectionLimit (int r) alter  { m_related = r;      }
04470         int             GetRelatedSelectionLimit () const   { return m_related;   }
04471 
04473         void            SetInternalSelectionLimit (int i) alter { m_internal_shell = m_internal_polyline = i;     }
04475         int             GetInternalSelectionLimit () const  { return m_internal_shell;  }
04476 
04478         void            SetInternalShellSelectionLimit (int i) alter { m_internal_shell = i;     }
04480         int             GetInternalShellSelectionLimit () const  { return m_internal_shell;  }
04481 
04483         void            SetInternalPolylineSelectionLimit (int i) alter { m_internal_polyline = i;     }
04485         int             GetInternalPolylineSelectionLimit () const  { return m_internal_polyline;  }
04486 
04488         void            SetExtras (int e) alter         { m_extras = (unsigned char)e;  }
04490         int             GetExtras () const          { return (int)m_extras;         }
04491 
04493         void            SetCulling (int c) alter        { m_culling = (unsigned short)c; }
04495         int             GetCulling () const         { return (int)m_culling;        }
04497         void            SetPixelThreshold (int c) alter        { m_pixel_threshold = c;     }
04499         int             GetPixelThreshold () const         { return m_pixel_threshold;  }
04501         void            SetMaximumExtent (int c) alter         { m_maximum_extent = c;      }
04503         int             GetMaximumExtent () const          { return m_maximum_extent;   }
04505         int             GetMaximumExtentMode () const          { return m_maximum_extent_mode; }
04507         void            SetMaximumExtentMode (int c) alter         { m_maximum_extent_mode = c;     }
04509         int             GetMaximumExtentLevel () const         { return m_maximum_extent_level; }
04511         void            SetMaximumExtentLevel (int c) alter         { m_maximum_extent_level = (unsigned char)c;        }
04513         void            SetHardExtent (int c) alter         { m_hard_extent = c;        }
04515         int             GetHardExtent () const          { return m_hard_extent; }
04517         float const *   GetVector () const                          { return m_vector; }
04519         void            SetVector (float x, float y, float z) alter {
04520                             m_vector[0] = x;
04521                             m_vector[1] = y;
04522                             m_vector[2] = z;
04523                         }
04525         void            SetVector (float const * v) alter           { SetVector(v[0], v[1], v[2]); }
04527         float           GetVectorTolerance () const                 { return m_vector_tolerance; }
04529         void            SetVectorTolerance (float tol) alter        { m_vector_tolerance = tol; }
04530 
04532         void            SetOrderedWeightsMask (int c) alter    { m_ordered_weights_mask = (unsigned char)c; }
04534         int             GetOrderedWeightsMask () const     { return (int)m_ordered_weights_mask;        }
04535 
04537         void            SetOrderedWeight (int index, float weight) alter    {
04538                             m_ordered_weights[index] = weight;
04539                             m_ordered_weights_mask |= 1<<index;
04540                         }
04542         float           GetOrderedWeight (int index) const          { return m_ordered_weights[index];  }
04544         float const *   GetOrderedWeights () const                  { return m_ordered_weights;         }
04546         float alter *   GetOrderedWeights () alter                  { return m_ordered_weights;         }
04547 
04549         void            SetSelectionLevel (int l) alter        { m_selection_level = (unsigned char)l; }
04551         int             GetSelectionLevel () const         { return (int)m_selection_level;        }
04552 
04554         void            SetForceDefer (int l) alter        { m_force_defer = l; }
04556         int             GetForceDefer () const         { return m_force_defer;        }
04557 };
04558 
04560 
04564 enum TKO_Geometry_Options {
04565     TKO_Geometry_Options_Orientation        = 0x0001,  
04566     TKO_Geometry_Options_Camera_Relative    = 0x0002   
04567 };
04568 
04569 
04571 
04577 class BBINFILETK_API TK_Geometry_Options : public BBaseOpcodeHandler {
04578     protected:
04579         unsigned short  m_mask;                 
04580         unsigned short  m_value;                
04581 
04582         char            m_orientation_count;    
04583         float           m_orientation[6];       
04584 
04585     public:
04587         TK_Geometry_Options () : BBaseOpcodeHandler (TKE_Geometry_Options),
04588                                   m_mask (0), m_value (0), m_orientation_count (0) {}
04589         ~TK_Geometry_Options ();
04590 
04591         TK_Status   Read (BStreamFileToolkit & tk) alter;
04592         TK_Status   Write (BStreamFileToolkit & tk) alter;
04593         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04594 
04595         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04596         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04597 
04599         void            SetMask (int m) alter { m_mask = (unsigned short)m; }
04601         int             GetMask () const            { return (int)m_mask;    }
04602 
04604         void            SetOrientation (int count, float const * o) alter {
04605                                 if (count != 3 && count != 6)
04606                                     return;
04607                                 m_orientation_count = (unsigned char)count;
04608                                 while (count-- > 0)
04609                                     m_orientation[count] = o[count];
04610                             }
04612         int             GetOrientationCount () const { return (int) m_orientation_count; }
04614         float const *   GetOrientation () const { return m_orientation; }
04615 };
04616 
04619 
04624 class BBINFILETK_API TK_Visibility : public BBaseOpcodeHandler {
04625     protected:
04626         int             m_mask;     
04627         int             m_value;    
04628 
04629     public:
04631         TK_Visibility (void)
04632             : BBaseOpcodeHandler (TKE_Visibility), m_mask (0), m_value (0) {}
04633 
04634         TK_Status   Read (BStreamFileToolkit & tk) alter;
04635         TK_Status   Write (BStreamFileToolkit & tk) alter;
04636         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04637 
04638         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04639         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04640 
04644         void            SetGeometry (int m) alter {
04645                             m_mask = m & TKO_Geo_All_Visibles;
04646                             if ((m & TKO_Geo_Extended_Mask) != 0) {
04647                                 m_mask |= TKO_Geo_Extended;
04648                                 if ((m & TKO_Geo_Extended2_Mask) != 0)
04649                                     m_mask |= TKO_Geo_Extended2;
04650                             }
04651                         }
04656         int             GetGeometry () const        { return m_mask;    }
04657 
04662         void            SetValue (int m) alter          { m_value = m;       }
04667         int             GetValue () const           { return m_value;    }
04668 };
04669 
04672 
04679 class BBINFILETK_API TK_Selectability : public BBaseOpcodeHandler {
04680     protected:
04681         int             m_mask;         
04682         int             m_down;         
04683         int             m_up;           
04684         int             m_move_down;    
04685         int             m_move_up;      
04686         int             m_invisible;    
04687 
04688     public:
04690         TK_Selectability (void)
04691             : BBaseOpcodeHandler (TKE_Selectability),
04692             m_mask (0), m_down (0), m_up (0), m_move_down (0), m_move_up (0), m_invisible (0) {}
04693 
04694         TK_Status   Read (BStreamFileToolkit & tk) alter;
04695         TK_Status   Write (BStreamFileToolkit & tk) alter;
04696         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04697 
04698         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04699         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04700 
04704         void            SetGeometry (int m) alter {
04705                             m_mask = m & TKO_Geo_All_Selects;
04706                             if ((m & TKO_Geo_Extended_Mask) != 0)
04707                                 m_mask |= TKO_Geo_Extended;
04708                         }
04713         int             GetGeometry () const        { return m_mask;        }
04714 
04719         void            SetDown (int m) alter           { m_down = m;           }
04724         int             GetDown () const            { return m_down;        }
04725 
04730         void            SetUp (int m) alter             { m_up = m;             }
04735         int             GetUp () const              { return m_up;          }
04736 
04741         void            SetMoveDown (int m) alter       { m_move_down = m;      }
04746         int             GetMoveDown () const        { return m_move_down;   }
04747 
04752         void            SetMoveUp (int m) alter         { m_move_up = m;        }
04757         int             GetMoveUp () const          { return m_move_up;     }
04758 
04763         void            SetWhenInvisible (int m) alter  { m_invisible = m;      }
04768         int             GetWhenInvisible () const   { return m_invisible;   }
04769 };
04770 
04772 
04778 class BBINFILETK_API TK_Matrix : public BBaseOpcodeHandler {
04779     protected:
04780         float           m_matrix[16];  
04781 
04782     public:
04784         TK_Matrix (unsigned char opcode)
04785             : BBaseOpcodeHandler (opcode) {}
04786 
04787         TK_Status   Read (BStreamFileToolkit & tk) alter;
04788         TK_Status   Write (BStreamFileToolkit & tk) alter;
04789         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04790 
04791         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04792         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04793 
04795         void            SetMatrix (float const * m) alter   {
04796                             int i;  for (i=0; i<16; i++) m_matrix[i] = m[i];
04797                         }
04799         float const *   GetMatrix () const              { return m_matrix;  }
04801         float alter *   GetMatrix () alter              { return m_matrix;  }
04802 };
04803 
04804 
04808 enum TKO_Enumerations {
04809     TKO_Line_Pattern_Solid      = 0,  
04810     TKO_Line_Pattern_Dash_Dot   = 1,  
04811     TKO_Line_Pattern_Dashed     = 2,  
04812     TKO_Line_Pattern_Dotted     = 3,  
04813     TKO_Line_Pattern_Dash_2Dot  = 4,  
04814     TKO_Line_Pattern_Dash_3Dot  = 5,  
04815     TKO_Line_Pattern_Long_Dash  = 6,  
04816     TKO_Line_Pattern_Center     = 7,  
04817     TKO_Line_Pattern_Phantom    = 8,  
04818     TKO_Line_Pattern_Find_Dots  = 9,  
04819 
04820     TKO_Fill_Pattern_Hash       = 0,  
04821     TKO_Fill_Pattern_Vertical   = 1,  
04822     TKO_Fill_Pattern_Horizontal = 2,  
04823     TKO_Fill_Pattern_Right      = 3,  
04824     TKO_Fill_Pattern_Left       = 4,  
04825     TKO_Fill_Pattern_Diamond    = 5,  
04826     TKO_Fill_Pattern_Dots       = 6,  
04827     TKO_Fill_Pattern_Boxes      = 7,  
04828     TKO_Fill_Pattern_Solid      = 8,  
04829     TKO_Fill_Pattern_Clear      = 9,  
04830     TKO_Fill_Pattern_Gradient_N = 10,  
04831     TKO_Fill_Pattern_Gradient_NE= 11,  
04832     TKO_Fill_Pattern_Gradient_E = 12,  
04833     TKO_Fill_Pattern_Gradient_SE= 13,  
04834     TKO_Fill_Pattern_Gradient_S = 14,  
04835     TKO_Fill_Pattern_Gradient_SW= 15,  
04836     TKO_Fill_Pattern_Gradient_W = 16,  
04837     TKO_Fill_Pattern_Gradient_NW= 17,  
04838     TKO_Fill_Pattern_Blend  = 18,  
04839     TKO_Fill_Pattern_Invisible  = 19,  
04840 
04841     TKO_Marker_Circle                       = 0,  
04842     TKO_Marker_Circle_Dot                   = 1,  
04843     TKO_Marker_Circle_Plus                  = 2,  
04844     TKO_Marker_Circle_X                     = 3,  
04845     TKO_Marker_Circle_Circle                = 4,  
04846     TKO_Marker_Circle_Filled                = 5,  
04847     TKO_Marker_Dot                          = 6,  
04848     TKO_Marker_Plus                         = 7,  
04849     TKO_Marker_X                            = 8,  
04850     TKO_Marker_Star                         = 9,  
04851     TKO_Marker_Box                          = 10,  
04852     TKO_Marker_Box_Dot                      = 11,  
04853     TKO_Marker_Box_X                        = 12,  
04854     TKO_Marker_Box_Filled                   = 13,  
04855     TKO_Marker_Diamond                      = 14,  
04856     TKO_Marker_Diamond_Dot                  = 15,  
04857     TKO_Marker_Diamond_Plus                 = 16,  
04858     TKO_Marker_Diamond_Filled               = 17,  
04859     TKO_Marker_Triangle_Up                  = 18,  
04860     TKO_Marker_Triangle_Up_Vertex           = 19,  
04861     TKO_Marker_Triangle_Up_Dot              = 20,  
04862     TKO_Marker_Triangle_Up_Filled           = 21,  
04863     TKO_Marker_Triangle_Up_Filled_Vertex    = 22,  
04864     TKO_Marker_Triangle_Down                = 23,  
04865     TKO_Marker_Triangle_Down_Vertex         = 24,  
04866     TKO_Marker_Triangle_Down_Dot            = 25,  
04867     TKO_Marker_Triangle_Down_Filled         = 26,  
04868     TKO_Marker_Triangle_Down_Filled_Vertex  = 27,  
04869     TKO_Marker_Triangle_Right               = 28,  
04870     TKO_Marker_Triangle_Right_Vertex        = 29,  
04871     TKO_Marker_Triangle_Right_Dot           = 30,  
04872     TKO_Marker_Triangle_Right_Filled        = 31,  
04873     TKO_Marker_Triangle_Right_Filled_Vertex = 32,  
04874     TKO_Marker_Triangle_Left                = 33,  
04875     TKO_Marker_Triangle_Left_Vertex         = 34,  
04876     TKO_Marker_Triangle_Left_Dot            = 35,  
04877     TKO_Marker_Triangle_Left_Filled         = 36,  
04878     TKO_Marker_Triangle_Left_Filled_Vertex  = 37,  
04879     TKO_Marker_Hash                         = 38,  
04880     TKO_Marker_Wide_Plus                    = 39,  
04881     TKO_Marker_Open_Arrow                   = 40,  
04882     TKO_Marker_Closed_Arrow                 = 41,  
04883     TKO_Marker_Vertical_Bar                 = 42,  
04884     TKO_Marker_Half_Arrow_Left              = 43,  
04885     TKO_Marker_Half_Arrow_Right             = 44,  
04886     TKO_Marker_Wide_Arrow                   = 45,  
04887     TKO_Marker_Double_Arrow                 = 46,  
04888     TKO_Marker_Y                            = 47,  
04889     TKO_Marker_Z                            = 48,  
04890 
04891     // alignment format change in 17.80.
04892 
04893     // old alignment enum choices in lower nibble
04894     TKO_Text_Alignment_Lower_Left       = 0,  
04895     TKO_Text_Alignment_Upper_Left       = 1,  
04896     TKO_Text_Alignment_Middle_Left      = 2,  
04897     TKO_Text_Alignment_Lower_Right      = 3,  
04898     TKO_Text_Alignment_Upper_Right      = 4,  
04899     TKO_Text_Alignment_Middle_Right     = 5,  
04900     TKO_Text_Alignment_Lower_Center     = 6,  
04901     TKO_Text_Alignment_Upper_Center     = 7,  
04902     TKO_Text_Alignment_Middle_Center    = 8,  
04903     TKO_Text_Alignment_Insertion_Left   = 9,  
04904     TKO_Text_Alignment_Insertion_Right  = 10, 
04905     TKO_Text_Alignment_Insertion_Center = 11, 
04906     TKO_Text_Alignment_Insertion        = 9,  
04907     // and justification in higher nibble
04908     TKO_Text_Justification_Unspecified  = 0,  
04909     TKO_Text_Justification_Left         = 1,  
04910     TKO_Text_Justification_Center       = 2,  
04911     TKO_Text_Justification_Right        = 3,  
04912 
04913     // new format defines bits for "building" alignment setting
04914     TKO_Text_Alignment_Center           = 0x00,
04915     TKO_Text_Alignment_Left             = 0x01,
04916     TKO_Text_Alignment_Right            = 0x02,
04917     TKO_Text_Alignment_Bottom           = 0x04,
04918     TKO_Text_Alignment_Top              = 0x08,
04919     TKO_Text_Alignment_Point            = 0x10,
04920     // can't have left & right, or bottom & top, so all bits is good as an "unset" placeholder
04921     TKO_Text_Alignment_Unspecified      = 0x1F,
04922     // and uses same justification but shifted a bit higher
04923     TKO_Text_Justification_Mask         = 0x60,  
04924     TKO_Text_Justification_Shift        = 5,  
04925     // and the high bit will be set
04926     TKO_Text_Alignment_New_Format       = 0x80,
04927 
04928 
04929 
04930     TKO_Window_Frame_Off    = 0,  
04931     TKO_Window_Frame_On     = 1,  
04932 
04933     TKO_Handedness_Left     = 0,  
04934     TKO_Handedness_Right    = 1  
04935 };
04936 
04942 class BBINFILETK_API TK_Enumerated : public BBaseOpcodeHandler {
04943     protected:
04944         char            m_index;    
04945 
04946     public:
04948         TK_Enumerated (unsigned char opcode)
04949             : BBaseOpcodeHandler (opcode), m_index (0) {}
04950 
04951         TK_Status   Read (BStreamFileToolkit & tk) alter;
04952         TK_Status   Write (BStreamFileToolkit & tk) alter;
04953         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04954 
04955         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
04956         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
04957 
04958         void            SetIndex (int i) alter  { m_index = (char)i;   }
04960         int             GetIndex () const   { return (int)m_index;  }
04961 };
04962 
04966 enum TKO_Generic_Size_Units {
04967     TKO_Generic_Size_Object,        
04968     TKO_Generic_Size_Screen,        
04969     TKO_Generic_Size_Window,        
04970     TKO_Generic_Size_Points,        
04971     TKO_Generic_Size_Pixels,        
04972     TKO_Generic_Size_Percent,       
04973     TKO_Generic_Size_World,         
04974 
04975     TKO_Generic_Size_Unspecified    
04976 };
04977 // NOTE: any changes to this need to be reflected in generic_units_table in parse.cpp & HOpcodeHandler.cpp
04978 
04979 
04985 class BBINFILETK_API TK_Size : public BBaseOpcodeHandler {
04986     protected:
04987         float           m_value;  
04988         unsigned char   m_units;  
04989 
04990     public:
04992         TK_Size (unsigned char opcode)
04993             : BBaseOpcodeHandler (opcode), m_value (0.0f), m_units (TKO_Generic_Size_Unspecified) {}
04994 
04995         TK_Status   Read (BStreamFileToolkit & tk) alter;
04996         TK_Status   Write (BStreamFileToolkit & tk) alter;
04997         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04998 
04999         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05000         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05001 
05003         void            SetSize (float value, int units = TKO_Generic_Size_Unspecified) alter {
05004                             m_value = (value > 0.0f) ? value : 0.0f;
05005                             m_units = (m_value > 0.0f) ? (unsigned char) units : (unsigned char) TKO_Generic_Size_Unspecified;
05006                         }
05008         float           GetSize () const    { return m_value;  }
05010         int             GetUnits () const   { return m_units;  }
05011 };
05012 
05017 class BBINFILETK_API TK_Linear_Pattern : public BBaseOpcodeHandler {
05018     protected:
05019         unsigned short  m_pattern;  
05020 
05021     public:
05023         TK_Linear_Pattern (unsigned char opcode)
05024             : BBaseOpcodeHandler (opcode), m_pattern (0) {}
05025 
05026         TK_Status   Read (BStreamFileToolkit & tk) alter;
05027         TK_Status   Write (BStreamFileToolkit & tk) alter;
05028         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05029 
05030         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05031         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05032 
05034         void            SetPattern (int p) alter    { m_pattern = (unsigned short)p;    }
05036         int             GetPattern () const     { return (int)m_pattern;            }
05037 };
05038 
05044 class BBINFILETK_API TK_Named : public BBaseOpcodeHandler {
05045     protected:
05046         int     m_name_length;  
05047         char *  m_name;         
05048         int     m_index;        
05049 
05050     public:
05052         TK_Named (unsigned char opcode)
05053             : BBaseOpcodeHandler (opcode), m_name_length (0), m_name (0), m_index (0) {}
05054         ~TK_Named();
05055 
05056         TK_Status   Read (BStreamFileToolkit & tk) alter;
05057         TK_Status   Write (BStreamFileToolkit & tk) alter;
05058         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05059 
05060         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05061         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05062 
05063         void        Reset () alter;
05064 
05066         void            SetName (char const * name) alter;
05068         void            SetName (int length) alter;
05070         char const *    GetName () const            { return m_name;        }
05072         char alter *    GetName () alter            { return m_name;        }
05073 
05075         void            SetIndex (int i) alter  { Reset(); m_index = i;   }
05077         int             GetIndex () const   { return (int)m_index;      }
05078 };
05079 
05080 
05081 
05088 class BBINFILETK_API TK_Streaming : public BBaseOpcodeHandler {
05089     protected:
05090         bool            m_flag;  
05091 
05092     public:
05094         TK_Streaming () : BBaseOpcodeHandler (TKE_Streaming_Mode) {}
05095 
05096         TK_Status   Read (BStreamFileToolkit & tk) alter;
05097         TK_Status   Write (BStreamFileToolkit & tk) alter;
05098         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05099 
05100         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05101         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05102 
05103         void        SetStreaming (bool s) alter { m_flag = s;       }
05105         bool        GetStreaming () const   { return m_flag;    }
05106 };
05107 
05110 
05116 class BBINFILETK_API TK_Conditions : public BBaseOpcodeHandler {
05117     protected:
05118         int                     m_length;       
05119         char *                  m_string;       
05121     public:
05123         TK_Conditions () : BBaseOpcodeHandler (TKE_Conditions), m_length (0), m_string (0) {}
05124         ~TK_Conditions();
05125 
05126         TK_Status   Read (BStreamFileToolkit & tk) alter;
05127         TK_Status   Write (BStreamFileToolkit & tk) alter;
05128         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05129 
05130         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05131         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05132 
05133         void        Reset () alter;
05134 
05136         void            SetConditions (char const * options) alter;
05138         void            SetConditions (int length) alter;
05140         char const *    GetConditions () const                 { return m_string;          }
05142         char alter *    GetConditions () alter                 { return m_string;          }
05144         int             GetLength() alter                   { return m_length;          }
05145 };
05146 
05147 
05151 enum TKO_Actions {
05152     TKO_Action_Type_Prune_Segment   = 1,    
05153 
05154     TKO_Action_Option_Segment_Tree  = 0x0001    
05155 };
05156 
05157 
05160 
05165 class BBINFILETK_API TK_Conditional_Action : public BBaseOpcodeHandler {
05166     protected:
05167         short                   m_type;         
05168         short                   m_options;      
05169         int                     m_length;       
05170         char *                  m_string;       
05172     public:
05174         TK_Conditional_Action () : BBaseOpcodeHandler (TKE_Conditional_Action), m_length (0), m_string (0) {}
05175         ~TK_Conditional_Action();
05176 
05177         TK_Status   Read (BStreamFileToolkit & tk) alter;
05178         TK_Status   Write (BStreamFileToolkit & tk) alter;
05179         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05180 
05181         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05182         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05183 
05184         void        Reset () alter;
05185 
05187         void            SetCondition (char const * options) alter;
05189         void            SetCondition (int length) alter;
05191         char const *    GetCondition () const                 { return m_string;          }
05193         char alter *    GetCondition () alter                 { return m_string;          }
05195         int             GetLength() alter                   { return m_length;          }
05196 
05198         void            SetAction (int at) alter    { m_type = (short)at; }
05200         int             GetAction () const          { return (int)m_type; }
05202         void            SetOptions (int at) alter   { m_options = (short)at; }
05204         int             GetOptions () const         { return (int)m_options; }
05205 };
05206 
05209 
05215 class BBINFILETK_API TK_User_Options : public BBaseOpcodeHandler {
05216     protected:
05217         int                     m_length;       
05218         char *                  m_string;       
05219         BBaseOpcodeHandler *    m_indices;      
05220         BBaseOpcodeHandler *    m_unicode;      
05221         BBaseOpcodeHandler *    m_index_data;   
05223         void    set_options (char const * options) alter;       
05224         void    set_options (int length) alter;                 
05225 
05226     public:
05228         TK_User_Options () : BBaseOpcodeHandler (TKE_User_Options), m_length (0), m_string (0),
05229                              m_indices (0), m_unicode (0), m_index_data(0) {}
05230         ~TK_User_Options();
05231 
05232         TK_Status   Read (BStreamFileToolkit & tk) alter;
05233         TK_Status   Write (BStreamFileToolkit & tk) alter;
05234         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05235 
05236         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05237         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05238 
05239         void        Reset () alter;
05240 
05242         void            SetOptions (char const * options) alter { set_options (options);    }
05244         void            SetOptions (int length) alter           { set_options (length);     }
05246         char const *    GetOptions () const                 { return m_string;          }
05248         char alter *    GetOptions () alter                 { return m_string;          }
05250         int             GetLength() alter                   { return m_length;          }
05251 };
05252 
05255 
05261 class BBINFILETK_API TK_Unicode_Options : public BBaseOpcodeHandler {
05262     protected:
05263         int                     m_length;       
05264         unsigned short *        m_string;       
05266     public:
05268         TK_Unicode_Options () : BBaseOpcodeHandler (TKE_Unicode_Options), m_length (0), m_string (0) {}
05269         ~TK_Unicode_Options();
05270 
05271         TK_Status   Read (BStreamFileToolkit & tk) alter;
05272         TK_Status   Write (BStreamFileToolkit & tk) alter;
05273         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05274 
05275         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05276         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05277 
05278         void        Reset () alter;
05279 
05281         void                    SetOptions (unsigned short const * options) alter;
05283         void                    SetOptions (int length) alter;
05285         unsigned short const *  GetOptions () const                 { return m_string;          }
05287         unsigned short alter *  GetOptions () alter                 { return m_string;          }
05289         int                     GetLength() alter                   { return m_length;          }
05290 };
05291 
05293 
05299 class BBINFILETK_API TK_User_Index : public BBaseOpcodeHandler {
05300     protected:
05301         int             m_count;            
05302         int *           m_indices;          
05303         HLONG *          m_values;           
05304         int             m_current_value;        
05305         void    set_indices (int count, int const * indices, POINTER_SIZED_INT const * values) alter;  
05306         void    set_indices (int count) alter;                                            
05307 
05308     public:
05310         TK_User_Index ()
05311             : BBaseOpcodeHandler (TKE_User_Index), m_count (0), m_indices (0), m_values (0), m_current_value(0) {}
05312         ~TK_User_Index();
05313 
05314         TK_Status   Read (BStreamFileToolkit & tk) alter;
05315         TK_Status   Write (BStreamFileToolkit & tk) alter;
05316         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05317 
05318         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05319         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05320 
05321         void        Reset () alter;
05322 
05324         void            SetIndices (int count, int const * indices, POINTER_SIZED_INT const * values) alter
05325                                                         { set_indices (count, indices, values); }
05327         void            SetIndices (int count) alter    { set_indices (count);                  }
05329         int             GetCount () const           { return m_count;                       }
05331         int const *     GetIndices () const         { return m_indices;                     }
05333         int alter *     GetIndices () alter         { return m_indices;                     }
05335         HLONG const *    GetValues () const          { return m_values;                      }
05337         HLONG alter *    GetValues () alter          { return m_values;                      }
05338 };
05339 
05341 
05347 class BBINFILETK_API TK_User_Index_Data : public BBaseOpcodeHandler {
05348 protected:
05349     int             m_count;            
05350     int *           m_indices;          
05351     void **         m_values;           
05352     int *           m_sizes;
05353 
05354     int             m_current_value;        
05355     void    set_indices (int count, int const indices[], void const * values[], int const sizes[]) alter;  
05356     void    set_indices (int count) alter;                                            
05357     void        FreeMem () alter;
05358 
05359 public:
05361     TK_User_Index_Data ()
05362         : BBaseOpcodeHandler (TKE_User_Index_Data), m_count (0), m_indices (0), m_values (0), m_sizes(0), m_current_value(0) {}
05363     ~TK_User_Index_Data();
05364 
05365     TK_Status   Read (BStreamFileToolkit & tk) alter;
05366     TK_Status   Write (BStreamFileToolkit & tk) alter;
05367     TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05368 
05369     void        Reset () alter;
05370 
05372     void            SetIndices (int count, int const indices[], void const * values[], int const sizes[]) alter {
05373         set_indices (count, indices, values, sizes); 
05374     }
05375 
05377     void            SetIndices (int count) alter    { set_indices (count);}
05378 
05380     int             GetCount () const           { return m_count;}
05381 
05383     int const *     GetIndices () const         { return m_indices;}
05384 
05386     int alter *     GetIndices () alter         { return m_indices;}
05387 
05389     void ** const   GetValues () const          { return m_values;}
05390 
05392     void ** const    GetValues () alter          { return m_values;}
05393 
05395     int const *    GetSizes () const          { return m_sizes;}
05396 
05398     int alter *    GetSizes () alter          { return m_sizes;}
05399 };
05400 
05401 
05403 
05408 class BBINFILETK_API TK_User_Value : public BBaseOpcodeHandler {
05409     protected:
05410         HLONG            m_value;  
05411 
05412     public:
05414         TK_User_Value ()
05415             : BBaseOpcodeHandler (TKE_User_Value), m_value (0) {}
05416 
05417         TK_Status   Read (BStreamFileToolkit & tk) alter;
05418         TK_Status   Write (BStreamFileToolkit & tk) alter;
05419         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05420 
05421         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05422         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05423 
05425         void            SetValue (HLONG v) alter     { m_value = v;      }
05427         HLONG            GetValue () const       { return m_value;   }
05428 };
05429 
05433 enum TKO_Camera_Projection {
05434     TKO_Camera_Perspective_Bit  = 0x01,  
05435     TKO_Camera_Stretched_Bit    = 0x02,  
05436     TKO_Camera_Projection_Mask  = 0x03,  
05437 
05438     TKO_Camera_Orthographic     = 0x00,  
05439     TKO_Camera_Perspective      = 0x01,  
05440     TKO_Camera_Stretched        = 0x02,  
05441 
05442     TKO_Camera_Oblique_Y        = 0x04,  
05443     TKO_Camera_Oblique_X        = 0x08,  
05444     TKO_Camera_Oblique_Mask     = 0x0C,  
05445 
05446     TKO_Camera_Near_Limit       = 0x10,  
05447 
05448     TKO_Camera_Thumbnail        = 0x80   
05449 };
05450 
05452 
05457 class BBINFILETK_API2 TK_Camera : public BBaseOpcodeHandler {
05458     protected:
05462         float           m_settings[14]; 
05463         unsigned char   m_projection;   
05464         int             m_length;       
05465         char *          m_name;         
05468         void    set_name (char const * name) alter; 
05469     
05470         void    set_name (int length) alter;        
05471 
05472     public:
05474         TK_Camera (unsigned char opcode = TKE_Camera)
05475             : BBaseOpcodeHandler (opcode), m_length (0), m_name (0) {
05476                 int i;
05477                 int count = (int)(sizeof(m_settings) / sizeof(m_settings[0]));
05478                 for (i = 0; i < count; i++)
05479                     m_settings[i] = 0;
05480         }
05481         ~TK_Camera();
05482 
05483         TK_Status   Read (BStreamFileToolkit & tk) alter;
05484         TK_Status   Write (BStreamFileToolkit & tk) alter;
05485         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05486 
05487         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05488         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05489 
05491         void            SetPosition (float x, float y, float z) alter
05492                                         { m_settings[0] = x;  m_settings[1] = y;  m_settings[2] = z;    }
05494         void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
05496         float const *   GetPosition () const                { return &m_settings[0];                }
05498         void            GetPosition (float *p) const    { memcpy(p,GetPosition(),3*sizeof(float));  }
05499         
05501         void            SetTarget (float x, float y, float z) alter
05502                                         { m_settings[3] = x;  m_settings[4] = y;  m_settings[5] = z;    }
05504         void            SetTarget (float const * t) alter       { SetTarget (t[0], t[1], t[2]);         }
05506         float const *   GetTarget () const                  { return &m_settings[3];                }
05508         void            GetTarget (float *t) const  { memcpy(t,GetTarget(),3*sizeof(float));    }
05509 
05511         void            SetUpVector (float x, float y, float z) alter
05512                                         { m_settings[6] = x;  m_settings[7] = y;  m_settings[8] = z;    }
05514         void            SetUpVector (float const * u) alter     { SetUpVector (u[0], u[1], u[2]);       }
05516         float const *   GetUpVector () const                { return &m_settings[6];                }
05518         void            GetUpVector (float *u) const { memcpy(u,GetUpVector(),3*sizeof(float)); }
05519 
05521         void            SetField (float w, float h) alter       { m_settings[9] = w;  m_settings[10] = h; }
05523         void            SetField (float const * f) alter        { SetField (f[0], f[1]);                }
05525         float const *   GetField () const                   { return &m_settings[9];                }
05527         void            GetField (float *f) const { memcpy(f,GetField(),2*sizeof(float));   }
05528 
05530         void            SetOblique (float h, float v) alter     { m_settings[11] = h;  m_settings[12] = v;
05531                                                                   m_projection &= ~TKO_Camera_Oblique_Mask;
05532                                                                   if (h != 0.0f) m_projection |= TKO_Camera_Oblique_Y;
05533                                                                   if (v != 0.0f) m_projection |= TKO_Camera_Oblique_Mask;
05534                                                                 }
05536         void            SetOblique (float const * o) alter      { SetOblique (o[0], o[1]);              }
05538         float const *   GetOblique () const                 { return &m_settings[11];               }
05540         void            GetOblique (float *o) const { memcpy(o,GetOblique(),2*sizeof(float));   }
05541 
05543         void            SetProjection (int p) alter             { m_projection = (char)p;   }
05545         int             GetProjection () const              { return (int)m_projection; }
05546 
05548         void            SetNearLimit (float l) alter            { m_settings[13] = l;
05549                                                                   m_projection &= ~TKO_Camera_Near_Limit;
05550                                                                   if (l != 0.0f) m_projection |= TKO_Camera_Near_Limit;
05551                                                                 }
05553         float           GetNearLimit () const               { return m_settings[13];    }
05554 
05556         void            SetView (char const * name) alter       { set_name (name);          }
05558         void            SetView (int length) alter              { set_name (length);        }
05560         char const *    GetView () const                    { return m_name;            }
05562         char alter *    GetView () alter                    { return m_name;            }
05563 };
05564 
05566 
05571 class BBINFILETK_API TK_Window : public BBaseOpcodeHandler {
05572     protected:
05573         float           m_window[4];  
05574 
05575     public:
05577         TK_Window ()
05578             : BBaseOpcodeHandler (TKE_Window) {}
05579 
05580         TK_Status   Read (BStreamFileToolkit & tk) alter;
05581         TK_Status   Write (BStreamFileToolkit & tk) alter;
05582         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05583 
05584         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05585         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05586 
05588         void            SetWindow (float l, float r, float b, float t) alter
05589                                 { m_window[0] = l;  m_window[1] = r;  m_window[2] = b;  m_window[3] = t;    }
05591         void            SetWindow (float const * w) alter      { SetWindow (w[0], w[1], w[2], w[3]);        }
05593         float const *   GetWindow () const                 { return m_window;                           }
05594 };
05595 
05596 
05601 enum TKO_Font_Options {
05602     TKO_Font_Names              = 0x00000001,   
05603     TKO_Font_Size               = 0x00000002,   
05604     TKO_Font_Size_Tolerance     = 0x00000004,   
05605     TKO_Font_Transforms         = 0x00000008,   
05606     TKO_Font_Rotation           = 0x00000010,   
05607     TKO_Font_Slant              = 0x00000020,   
05608     TKO_Font_Width_Scale        = 0x00000040,   
05609     TKO_Font_Extended           = 0x00000080,   
05610     TKO_Font_Extended_Mask      = 0xFFFFFF00,   //   internal use, indicates bits which require TKO_Font_Extended
05611     TKO_Font_Extended_Shift     = 8,            //   internal use, indicatesshift of extended section
05612     TKO_Font_Extra_Space        = 0x00000100,   
05613     TKO_Font_Line_Spacing       = 0x00000200,   
05614     TKO_Font_Outline            = 0x00000400,   
05615     TKO_Font_Underline          = 0x00000800,   
05616     TKO_Font_Strikethrough      = 0x00001000,   
05617     TKO_Font_Overline           = 0x00002000,   
05618     TKO_Font_Uniform_Spacing    = 0x00004000,   
05619     TKO_Font_Extended2          = 0x00008000,   
05620     TKO_Font_Extended2_Mask     = 0xFFFF0000,   
05621     TKO_Font_Extended2_Shift    = 16,           
05622     TKO_Font_Greeking_Limit     = 0x00010000,   
05623     TKO_Font_Fill_Edges         = 0x00020000,   
05624     TKO_Font_Bold               = 0x00040000,   
05625     TKO_Font_Italic             = 0x00080000,   
05626     TKO_Font_Renderer           = 0x00100000,   
05627     TKO_Font_Greeking_Mode      = 0x00200000,   
05628     TKO_Font_Preference         = 0x00400000    
05629 };
05630 
05631 
05632 #define TKO_Font_Size_Units TKO_Generic_Size_Units
05633 #define TKO_Font_Size_Object TKO_Generic_Size_Object
05634 #define TKO_Font_Size_Screen TKO_Generic_Size_Screen
05635 #define TKO_Font_Size_Window TKO_Generic_Size_Window
05636 #define TKO_Font_Size_Points TKO_Generic_Size_Points
05637 #define TKO_Font_Size_Pixels TKO_Generic_Size_Pixels
05638 #define TKO_Font_Size_Percent TKO_Generic_Size_Percent
05639 #define TKO_Font_Size_World TKO_Generic_Size_World
05640 
05641 
05647 enum TKO_Font_Transforms {
05648     TKO_Font_Transform_Position_Only = 0,  
05649     TKO_Font_Transform_Full = 1,            
05650     TKO_Font_Transform_Position_Adjusted = 2,  
05651 };
05652 
05653 
05657 enum TKO_Font_Renderers {
05658     TKO_Font_Renderer_Undefined = -1,   
05659     TKO_Font_Renderer_Default   = 0,    
05660     TKO_Font_Renderer_Driver    = 1,    
05661     TKO_Font_Renderer_Truetype  = 2,    
05662     TKO_Font_Renderer_Defined   = 3     
05663 };
05664 
05668 enum TKO_Font_Preferences {
05669     TKO_Font_Preference_Undefined = -1, 
05670     TKO_Font_Preference_Default   = 0,  
05671     TKO_Font_Preference_Bitmap    = 1,  
05672     TKO_Font_Preference_Outline   = 2,  
05673     TKO_Font_Preference_Exterior  = 3  
05674 };
05675 
05679 enum TKO_Font_Greeking_Modes {
05680     TKO_Font_Greeking_Mode_None  = 0, 
05681     TKO_Font_Greeking_Mode_Lines = 1, 
05682     TKO_Font_Greeking_Mode_Box   = 2  
05683 };
05684 
05686 
05693 class BBINFILETK_API TK_Text_Font : public BBaseOpcodeHandler {
05694     protected:
05695         int             m_mask;  
05696         int             m_value;  
05697         int             m_names_length; 
05698         char *          m_names;        
05699         float           m_size;         
05700         float           m_tolerance;    
05701         float           m_rotation;     
05702         float           m_slant;        
05703         float           m_width_scale;  
05704         float           m_extra_space;  
05705         float           m_line_spacing; 
05706         float           m_greeking_limit;
05707         float           m_renderer_cutoff;
05708         float           m_preference_cutoff;
05709         int             m_renderers[2];   
05710         int             m_preferences[2];   
05711         unsigned char   m_size_units;   
05712         unsigned char   m_tolerance_units;
05713         unsigned char   m_space_units;  
05714         unsigned char   m_greeking_units;  
05715         unsigned char   m_greeking_mode;   
05716         unsigned char   m_transforms;   
05717         unsigned char   m_renderer_cutoff_units;  
05718         unsigned char   m_preference_cutoff_units;  
05719 
05720         void    set_names (int length) alter;           
05721         void    set_names (char const * names) alter;   
05722 
05723     public:
05725         TK_Text_Font ()
05726             : BBaseOpcodeHandler (TKE_Text_Font), m_names_length (0), m_names (0) {}
05727         ~TK_Text_Font ();
05728 
05729         TK_Status   Read (BStreamFileToolkit & tk) alter;
05730         TK_Status   Write (BStreamFileToolkit & tk) alter;
05731         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05732 
05733         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05734         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05735 
05736         void        Reset () alter;
05737 
05739         void            SetMask (int m) alter {
05740                             m_mask = m;
05741                             if ((m & TKO_Font_Extended2_Mask) != 0)
05742                                 m_mask |= TKO_Font_Extended2;
05743                             if ((m & TKO_Font_Extended_Mask) != 0)
05744                                 m_mask |= TKO_Font_Extended;
05745                         }
05747         int             GetMask () const                    { return m_mask;        }
05748 
05750         void            SetValue (int v) alter                  { m_value = v;          }
05752         int             GetValue () const                   { return m_value;       }
05753 
05755         void            SetNames (char const * names) alter     { set_names (names);    }
05757         void            SetNames (int length) alter             { set_names (length);   }
05759         char const *    GetNames () const                   { return m_names;       }
05761         char alter *    GetNames () alter                   { return m_names;       }
05762 
05764         void            SetSize (float s) alter                 { m_size = s;                           }
05766         float           GetSize () const                    { return m_size;                        }
05767 
05769         void            SetSizeUnits (int u) alter              { m_size_units = (unsigned char)u;      }
05771         int             GetSizeUnits () const               { return (int)m_size_units;             }
05772 
05774         void            SetTolerance (float t) alter            { m_tolerance = t;                      }
05776         float           GetTolerance () const               { return m_tolerance;                   }
05777 
05779         void            SetToleranceUnits (int u) alter         { m_tolerance_units = (unsigned char)u; }
05781         int             GetToleranceUnits () const          { return (int)m_tolerance_units;        }
05782 
05784         void            SetRotation (float r) alter             { m_rotation = r;                       }
05786         float           GetRotation () const                { return m_rotation;                    }
05787 
05789         void            SetSlant (float s) alter                { m_slant = s;                          }
05791         float           GetSlant () const                   { return m_slant;                       }
05792 
05794         void            SetWidthScale (float s) alter           { m_width_scale = s;                    }
05796         float           GetWidthScale () const              { return m_width_scale;                 }
05797 
05799         void            SetExtraSpace (float s) alter           { m_extra_space = s;                    }
05801         float           GetExtraSpace () const              { return m_extra_space;                 }
05802 
05804         void            SetExtraSpaceUnits (int u) alter        { m_space_units = (unsigned char)u;     }
05806         int             GetExtraSpaceUnits () const         { return (int)m_space_units;            }
05807 
05809         void            SetLineSpacing (float s) alter          { m_line_spacing = s;                   }
05811         float           GetLineSpacing () const             { return m_line_spacing;                }
05812 
05814         void            SetTransforms (int t) alter             { m_transforms = (unsigned char)t;      }
05816         int             GetTransforms () const              { return (int)m_transforms;             }
05817 
05819         void            SetGreekingLimit (float s) alter           { m_greeking_limit = s;                    }
05821         float           GetGreekingLimit () const              { return m_greeking_limit;                 }
05822 
05824         void            SetGreekingLimitUnits (int u) alter        { m_greeking_units = (unsigned char)u;     }
05826         int             GetGreekingLimitUnits () const         { return (int)m_greeking_units;            }
05827 
05829         void            SetGreekingMode (int m) alter        { m_greeking_mode = (unsigned char)m;     }
05831         int             GetGreekingMode () const         { return (int)m_greeking_mode;            }
05832 
05833 
05835         void            SetRenderer (int r) alter             { m_renderers[0] = m_renderers[1] = r;    }
05837         int             GetRenderer () const              { return m_renderers[0];                  }
05838 
05840         void            SetRenderers (int r1, int r2) alter   { m_renderers[0] = r1; m_renderers[1] = r2;   }
05842         int const *      GetRenderers () const            { return m_renderers;                         }
05843 
05845         void            SetRendererCutoff (float s) alter     { m_renderer_cutoff = s;                    }
05847         float           GetRendererCutoff () const        { return m_renderer_cutoff;                 }
05848 
05850         void            SetRendererCutoffUnits (int u) alter        { m_renderer_cutoff_units = (unsigned char)u;     }
05852         int             GetRendererCutoffUnits () const         { return (int)m_renderer_cutoff_units;            }
05853 
05854 
05856         void            SetPreference (int r) alter             { m_preferences[0] = m_preferences[1] = r;    }
05858         int             GetPreference () const              { return m_preferences[0];                  }
05859 
05861         void            SetPreferences (int r1, int r2) alter   { m_preferences[0] = r1; m_preferences[1] = r2; }
05863         int const *      GetPreferences () const            { return m_preferences;                         }
05864 
05866         void            SetPreferenceCutoff (float s) alter     { m_preference_cutoff = s;                    }
05868         float           GetPreferenceCutoff () const        { return m_preference_cutoff;                 }
05869 
05871         void            SetPreferenceCutoffUnits (int u) alter        { m_preference_cutoff_units = (unsigned char)u;     }
05873         int             GetPreferenceCutoffUnits () const         { return (int)m_preference_cutoff_units;            }
05874 };
05875 
05877 
05879 
05891 enum TKO_Bounding_Type_Options {
05892     TKO_Bounding_Type_Cuboid    = 0,  
05893     TKO_Bounding_Type_Sphere    = 1   
05894 };
05895 
05896 
05897 
05899 
05910 class BBINFILETK_API2 TK_Bounding : public BBaseOpcodeHandler {
05911     protected:
05912         float           m_values[6];        
05913         char            m_type;             
05914         bool            m_is_valid;         
05915     public:
05917         TK_Bounding (unsigned char opcode)
05918             : BBaseOpcodeHandler (opcode) {}
05920         TK_Bounding (unsigned char opcode, float * min, float * max)
05921             : BBaseOpcodeHandler (opcode), m_type (TKO_Bounding_Type_Cuboid), m_is_valid(true) {
05922                 m_values[0] = min[0]; m_values[1] = min[1]; m_values[2] = min[2];
05923                 m_values[3] = max[0]; m_values[4] = max[1]; m_values[5] = max[2];
05924             }
05926         TK_Bounding (unsigned char opcode, float * center, float radius)
05927             : BBaseOpcodeHandler (opcode), m_type (TKO_Bounding_Type_Sphere), m_is_valid(true) {
05928                 m_values[0] = center[0]; m_values[1] = center[1]; m_values[2] = center[2];
05929                 m_values[3] = radius;
05930             }
05931 
05932         TK_Status   Read (BStreamFileToolkit & tk) alter;
05933         TK_Status   Write (BStreamFileToolkit & tk) alter;
05934         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05935 
05936         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05937         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05938 };
05939 
05941 
05945 enum TKO_Light_Options {
05946     TKO_Light_Camera_Relative = 0x1
05947 };
05948 
05949 
05951 
05953 
05959 class BBINFILETK_API TK_Point : public BBaseOpcodeHandler {
05960     protected:
05961         float           m_point[3];  
05962         char            m_options;   
05963 
05964     public:
05966         TK_Point (unsigned char opcode)
05967             : BBaseOpcodeHandler (opcode) {
05968             m_point[0] = m_point[1] = m_point[2] = 0; 
05969             m_options = 0; 
05970         };
05971 
05972         TK_Status   Read (BStreamFileToolkit & tk) alter;
05973         TK_Status   Write (BStreamFileToolkit & tk) alter;
05974         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05975 
05976         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
05977         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
05978 
05979         void        Reset(void) { 
05980                         m_point[0] = m_point[1] = m_point[2] = 0; 
05981                         m_options = 0; 
05982                         BBaseOpcodeHandler::Reset(); 
05983                     };
05984 
05985 
05986 
05988         void            SetPoint (float x, float y, float z) alter  { m_point[0] = x; m_point[1] = y; m_point[2] = z; }
05990         void            SetPoint (float const * p) alter            { SetPoint (p[0], p[1], p[2]);  }
05992         float const *   GetPoint () const                       { return m_point;               }
05993 
05995         void    SetOptions (int o) alter    { m_options = (char)o;      }
05997         int     GetOptions () const         { return (int)m_options;    }
05998 };
05999 
06000 
06001 
06003 
06008 class BBINFILETK_API TK_Line : public BBaseOpcodeHandler {
06009     protected:
06011         float           m_points[6];    
06012 
06013     public:
06015         TK_Line (unsigned char opcode = TKE_Line)
06016             : BBaseOpcodeHandler (opcode) {}
06017 
06018         TK_Status   Read (BStreamFileToolkit & tk) alter;
06019         TK_Status   Write (BStreamFileToolkit & tk) alter;
06020         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06021 
06022         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06023         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06024 
06026         void            SetPoints (float x1, float y1, float z1, float x2, float y2, float z2) alter {
06027                                 m_points[0] = x1;  m_points[1] = y1;  m_points[2] = z1;
06028                                 m_points[3] = x2;  m_points[4] = y2;  m_points[5] = z2;
06029                             }
06031         void            SetPoints (float const * s, float const * e) alter {
06032                                 SetPoints (s[0], s[1], s[2],  e[0], e[1], e[2]);
06033                             }
06035         void            SetPoints (float const * p) alter           { SetPoints (&p[0], &p[3]); }
06037         float const *   GetPoints () const                      { return m_points;          }
06038 };
06039 
06040 
06041 
06043 
06050 class BBINFILETK_API TK_Polypoint : public BBaseOpcodeHandler {
06051     protected:
06052         int             m_count;    
06053         int             m_allocated;
06054         float *         m_points;   
06057         void    set_points (int count, float const * points = 0) alter      { SetPoints (count, points); }      
06058     public:
06062         TK_Polypoint (unsigned char opcode)
06063             : BBaseOpcodeHandler (opcode) { m_points = 0; m_allocated = m_count = 0; }
06064         ~TK_Polypoint();
06065 
06066         TK_Status   Read (BStreamFileToolkit & tk) alter;
06067         TK_Status   Write (BStreamFileToolkit & tk) alter;
06068         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06069 
06070         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06071         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06072 
06073         void        Reset () alter;
06074 
06077         void            SetPoints (int count, float const * points = 0) alter;
06079         float const *   GetPoints () const                                  { return m_points;              }
06081         float alter *   GetPoints () alter                                  { return m_points;              }
06083         int             GetCount () const                                   { return m_count;               }
06084 };
06085 
06086 
06087 
06088 
06089 #define NC_HAS_WEIGHTS 0x01     //!< an array of floats for the weights is specified with the TK_NURBS_Curve
06090 #define NC_HAS_KNOTS   0x02     //!< an array of floats for the knots is specified with the TK_NURBS_Curve
06091 #define NC_HAS_START   0x04     //!< a float is specified for where the TK_NURBS_Curve starts in parametric [0,1] space 
06092 #define NC_HAS_END     0x08     //!< a float is specified for where the TK_NURBS_Curve ends in parametric [0,1] space 
06093 
06095 
06100 class BBINFILETK_API TK_NURBS_Curve : public BBaseOpcodeHandler {
06101     protected:
06102 
06103         unsigned char m_optionals;  
06104         unsigned char m_degree;     
06105         int m_control_point_count;  
06106         int m_knot_count_implicit;  
06107         float *m_control_points;    
06108         float *m_weights;           
06109         float *m_knots;             
06110         float m_start;              
06111         float m_end;                
06113 
06114         void    set_curve (int degree, int control_count, float const * points = 0,
06115                            float const * weights = 0, float const * knots = 0,
06116                            float start = 0.0f, float end = 1.0f) alter;
06117     public:
06118         TK_NURBS_Curve();
06119         ~TK_NURBS_Curve();
06120 
06121         TK_Status   Read (BStreamFileToolkit & tk) alter;
06122         TK_Status   Write (BStreamFileToolkit & tk) alter;
06123         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06124 
06125         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06126         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06127 
06128         void        Reset () alter;
06129 
06131         void            SetCurve (int degree, int control_count, float const * points = 0,
06132                                   float const * weights = 0, float const * knots = 0,
06133                                   float start = 0.0f, float end = 1.0f) alter {
06134                             set_curve (degree, control_count, points, weights, knots, start, end);
06135                         }
06136 
06137         int             GetDegree () const          { return m_degree;                  } 
06138         int             GetCount () const           { return m_control_point_count;     } 
06139         float const *   GetPoints () const          { return m_control_points;          } 
06140         float alter *   GetPoints () alter          { return m_control_points;          } 
06141         float const *   GetWeights () const         { return m_weights;                 } 
06142         float alter *   GetWeights () alter         { return m_weights;                 } 
06143         float const *   GetKnots () const           { return m_knots;                   } 
06144         float alter *   GetKnots () alter           { return m_knots;                   } 
06146         void            SetStart (float s) alter        { m_start = s;                      } 
06147         float           GetStart () const           { return m_start;                   } 
06148         void            SetEnd (float e) alter          { m_end = e;                        } 
06149         float           GetEnd () const             { return m_end;                     } 
06151         void            SetOptions (int o) alter        { m_optionals = (unsigned char)o;   } 
06152         int             GetOptions () const         { return m_optionals;               } 
06153 };
06154 
06155 
06156 
06157 
06158 
06159 #define NS_HAS_WEIGHTS 0x01   //!< an array of floats for the weights is specified with the TK_NURBS_Surface
06160 #define NS_HAS_KNOTS   0x02   //!< an array of floats for the knots is specified with the TK_NURBS_Surface
06161 #define NS_HAS_TRIMS   0x04   //!< the TK_NURBS_Surface contains a list of trims
06162 
06163 #define NS_TRIM_END         0       //!< terminates an NS_TRIM_COLLECTION if one is active, otherwise terminates the list of trims
06164 #define NS_TRIM_POLY        1       //!< the next trim is a polyline (closed automatically if not already a closed loop)
06165 #define NS_TRIM_CURVE       2       //!< the next trim is a nurbs curve in parametric space
06166 #define NS_TRIM_COLLECTION  3       //!< all trim objects up to the next NS_TRIM_END should be combined as one.
06167 #define NS_TRIM_LAST_KNOWN_TYPE 3   //!< the last known trim type defined as of the current version of the toolkit
06168 
06169 #define NS_TRIM_KEEP        0x01 //!< instead of the usual cutting away the enclosed area, cut away everything but
06170 #define NS_TRIM_HAS_WEIGHTS 0x02 //!< applies only to trims of type NS_TRIM_CURVE: an array of floats for the weights is specified with the trim curve
06171 #define NS_TRIM_HAS_KNOTS   0x04 //!< applies only to trims of type NS_TRIM_CURVE: an array of floats for the knots is specified with the trim curve
06172 
06174 
06180 class BBINFILETK_API HT_NURBS_Trim : public BBaseOpcodeHandler  {
06181     friend class TK_NURBS_Surface;
06182     protected:
06183         //first 5 are relevant to polys and curves
06184         int             m_substage;             
06185         HT_NURBS_Trim * m_next;                 
06186         unsigned char   m_type;                 
06187         int             m_count;                
06188         float *         m_points;               
06189         //next 6 are specific to curves
06190         unsigned char   m_degree;               
06191         unsigned char   m_options;              
06192         float *         m_weights;              
06193         float *         m_knots;                
06194         float           m_start_u;              
06195         float           m_end_u;                
06196         HT_NURBS_Trim * m_list;                 
06197         HT_NURBS_Trim * m_current_trim;         
06199         HT_NURBS_Trim();
06200         TK_Status read_collection(BStreamFileToolkit & tk);  
06201         TK_Status write_collection(BStreamFileToolkit & tk); 
06204     public:
06205         ~HT_NURBS_Trim();
06206         void    SetPoly (int count, float const * points = 0) alter;    
06207         void    SetCurve (int degree, int control_count, float const * points = 0, 
06208                           float const * weights = 0, float const * knots = 0, float start_u = 0, float end_u = 1) alter; 
06209         void    SetCollection () alter;                                 
06210         void    SetOptions (int o) alter { m_options = (unsigned char)o; }             
06211         void    SetList (HT_NURBS_Trim *node) alter { m_list = node; }  
06212         void    SetNext (HT_NURBS_Trim *next) { m_next = next; }        
06214         TK_Status   Read (BStreamFileToolkit & tk) alter;
06215         TK_Status   Write (BStreamFileToolkit & tk) alter;
06216 
06217         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06218         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06219         
06220         TK_Status   read_collection_ascii(BStreamFileToolkit & tk) alter ;
06221         TK_Status   write_collection_ascii(BStreamFileToolkit & tk) alter ;
06222 
06224         HT_NURBS_Trim * GetNext (void)              { return m_next;    } 
06226         int             GetType () const        { return m_type;    } 
06228         int             GetCount () const       { return m_count;   } 
06230         float const *   GetPoints () const      { return m_points;  } 
06232         float alter *   GetPoints () alter      { return m_points;  } 
06234         int             GetDegree () const      { return m_degree;  } 
06236         int             GetOptions () const     { return m_options; } 
06238         float const *   GetWeights () const     { return m_weights; } 
06240         float alter *   GetWeights () alter     { return m_weights; } 
06242         float const *   GetKnots () const       { return m_knots;   } 
06244         float alter *   GetKnots () alter       { return m_knots;   } 
06246         HT_NURBS_Trim const *GetList () const   { return m_list;    } 
06248         HT_NURBS_Trim *GetList () alter         { return m_list;    } 
06249     
06250 };
06251 
06253 
06258 class BBINFILETK_API TK_NURBS_Surface : public BBaseOpcodeHandler {
06259     protected:
06260         unsigned char   m_optionals;        
06261         unsigned char   m_degree[2];        
06262         int             m_size[2];          
06263         float *         m_control_points;   
06264         float *         m_weights;          
06265         float *         m_u_knots;          
06266         float *         m_v_knots;          
06268         HT_NURBS_Trim * m_trims;            
06269         HT_NURBS_Trim * m_current_trim;     
06272     public:
06273         TK_NURBS_Surface();
06274         ~TK_NURBS_Surface();
06275 
06276         TK_Status   Read (BStreamFileToolkit & tk) alter;   
06277         TK_Status   Write (BStreamFileToolkit & tk) alter;  
06278         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06279 
06280         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06281         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06282 
06283         void        Reset () alter; 
06285         void            SetSurface (int u_degree, int v_degree,  int u_size, int v_size,
06286                                     float const * points = 0,    float const * weights = 0,
06287                                     float const * u_knots = 0,   float const * v_knots = 0) alter;  
06290         int             GetUDegree () const         { return m_degree[0];               } 
06292         int             GetVDegree () const         { return m_degree[1];               } 
06294         int             GetUSize () const           { return m_size[0];                 } 
06296         int             GetVSize () const           { return m_size[1];                 } 
06298         float const *   GetPoints () const          { return m_control_points;          } 
06300         float alter *   GetPoints () alter          { return m_control_points;          } 
06302         float const *   GetWeights () const         { return m_weights;                 } 
06304         float alter *   GetWeights () alter         { return m_weights;                 } 
06306         float const *   GetUKnots () const          { return m_u_knots;                 } 
06308         float alter *   GetUKnots () alter          { return m_u_knots;                 } 
06310         float const *   GetVKnots () const          { return m_v_knots;                 } 
06312         float alter *   GetVKnots () alter          { return m_v_knots;                 } 
06313 
06315         void            SetOptions (int o) alter        { m_optionals = (unsigned char)o;   } 
06317         int             GetOptions () const         { return m_optionals;               } 
06318 
06320         HT_NURBS_Trim * NewTrim (int type = NS_TRIM_END) alter;                                 
06322         HT_NURBS_Trim * GetTrims () alter           { return m_trims;                   }
06323 };
06324 
06326 
06331 class BBINFILETK_API TK_Area_Light : public BBaseOpcodeHandler {
06332     protected:
06333         int             m_count;    
06334         float *         m_points;   
06335         char            m_options;  
06336 
06338         void    set_points (int count, float const * points = 0) alter;
06339 
06340     public:
06342         TK_Area_Light ()
06343             : BBaseOpcodeHandler (TKE_Area_Light), m_count (0), m_points (0), m_options (0) {}
06344         ~TK_Area_Light();
06345 
06346         TK_Status   Read (BStreamFileToolkit & tk) alter;
06347         TK_Status   Write (BStreamFileToolkit & tk) alter;
06348         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06349 
06350         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06351         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06352 
06353         void        Reset () alter;
06354 
06359         void            SetPoints (int count, float const * points = 0) alter   { set_points (count, points);   }
06361         float const *   GetPoints () const                                  { return m_points;              }
06363         float alter *   GetPoints () alter                                  { return m_points;              }
06365         int             GetCount () const                                   { return m_count;               }
06366 
06368         void            SetOptions (int o) alter                                { m_options = (char)o;          }
06370         int             GetOptions () const                                 { return (int)m_options;        }
06371 };
06372 
06373 
06377 enum TKO_Spot_Light_Options {
06378     TKO_Spot_Outer_Degrees      = 0x01,  
06379     TKO_Spot_Outer_Field        = 0x02,  
06380 
06381     TKO_Spot_Inner_Degrees      = 0x04,  
06382     TKO_Spot_Inner_Field        = 0x08,  
06383     TKO_Spot_Inner_Percent      = 0x0C,  
06384 
06385     TKO_Spot_Outer_Mask         = 0x03,  
06386     TKO_Spot_Inner_Mask         = 0x0C,  
06387 
06388     TKO_Spot_Camera_Relative    = 0x10,  
06389 
06390     TKO_Spot_Concentration      = 0x20  
06391 };
06392 
06393 
06395 
06400 class BBINFILETK_API TK_Spot_Light : public BBaseOpcodeHandler {
06401     protected:
06402         float           m_position[3];      
06403         float           m_target[3];        
06404         float           m_outer;            
06405         float           m_inner;            
06406         float           m_concentration;    
06407         char            m_options;          
06408 
06409     public:
06411         TK_Spot_Light ()
06412             : BBaseOpcodeHandler (TKE_Spot_Light), m_options (0) {}
06413 
06414         TK_Status   Read (BStreamFileToolkit & tk) alter;
06415         TK_Status   Write (BStreamFileToolkit & tk) alter;
06416         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06417 
06418         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06419         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06420 
06422         void            SetPosition (float x, float y, float z) alter
06423                                         { m_position[0] = x; m_position[1] = y; m_position[2] = z;  }
06425         void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);   }
06427         float const *   GetPosition () const                { return m_position;                }
06428 
06430         void            SetTarget (float x, float y, float z) alter
06431                                         { m_target[0] = x; m_target[1] = y; m_target[2] = z;        }
06433         void            SetTarget (float const * t) alter       { SetTarget (t[0], t[1], t[2]);     }
06435         float const *   GetTarget () const                  { return m_target;                  }
06436 
06438         void            SetOuter (float o) alter                { m_outer = o;                      }
06440         float           GetOuter () const                   { return m_outer;                   }
06441 
06443         void            SetInner (float i) alter                { m_inner = i;                      }
06445         float           GetInner () const                   { return m_inner;                   }
06446 
06448         void            SetConcentration (float c) alter        { m_concentration = c;              }
06450         float           GetConcentration () const           { return m_concentration;           }
06451 
06453         void            SetOptions (int o) alter                { m_options = (char)o;              }
06455         int             GetOptions () const                 { return (int)m_options;            }
06456 };
06457 
06458 
06460 
06465 class BBINFILETK_API TK_Cutting_Plane : public BBaseOpcodeHandler {
06466     protected:
06467         float           *m_planes;      
06468         int             m_count;        
06469 
06470     public:
06472         TK_Cutting_Plane ()
06473             : BBaseOpcodeHandler (TKE_Cutting_Plane), m_planes (0), m_count (0) {}
06474         ~TK_Cutting_Plane ();
06475 
06476         TK_Status   Read (BStreamFileToolkit & tk) alter;
06477         TK_Status   Write (BStreamFileToolkit & tk) alter;
06478         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06479 
06480         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06481         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06482 
06483         void        Reset () alter;
06484 
06486         void            SetPlanes (int count, float const * p=0) alter;
06487 
06489         void            SetPlane (float a, float b, float c, float d) alter
06490                                     { SetPlanes(1);
06491                                         m_planes[0] = a;  m_planes[1] = b;  m_planes[2] = c;  m_planes[3] = d;    }
06493         void            SetPlane (float const * p) alter            { SetPlanes (1, p);    }
06495         float const *   GetPlane () const                       { return m_planes;                       }
06496 
06498         float const *   GetPlanes () const                      { return m_planes;                       }
06500         int             GetCount () const                       { return m_count;                        }
06502 };
06503 
06504 
06508 enum TKO_Circular_Options {
06509     TKO_Circular_Center     = 0x01  
06510 };
06511 
06513 
06520 class BBINFILETK_API TK_Circle : public BBaseOpcodeHandler {
06521     protected:
06522         float           m_start[3];     
06523         float           m_middle[3];    
06524         float           m_end[3];       
06525         float           m_center[3];    
06526         unsigned char   m_flags;        
06528     public:
06530         TK_Circle (unsigned char opcode)
06531             : BBaseOpcodeHandler (opcode), m_flags (0) {}
06532 
06533         TK_Status   Read (BStreamFileToolkit & tk) alter;
06534         TK_Status   Write (BStreamFileToolkit & tk) alter;
06535         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06536 
06537         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06538         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06539 
06540         void        Reset () alter;
06541 
06543         void            SetStart (float x, float y, float z) alter {
06544                             m_start[0] = x;     m_start[1] = y;     m_start[2] = z;
06545                         }
06547         void            SetStart (float const * s) alter {
06548                             SetStart (s[0], s[1], s[2]);
06549                         }
06551         void            SetMiddle (float x, float y, float z) alter {
06552                             m_middle[0] = x;    m_middle[1] = y;    m_middle[2] = z;
06553                         }
06555         void            SetMiddle (float const * m) alter {
06556                             SetMiddle (m[0], m[1], m[2]);
06557                         }
06559         void            SetEnd (float x, float y, float z) alter {
06560                             m_end[0] = x;       m_end[1] = y;       m_end[2] = z;
06561                         }
06563         void            SetEnd (float const * e) alter {
06564                             SetEnd (e[0], e[1], e[2]);
06565                         }
06567         void            SetCenter (float x, float y, float z) alter {
06568                             m_center[0] = x;    m_center[1] = y;    m_center[2] = z;
06569                             m_flags = TKO_Circular_Center;
06570                         }
06572         void            SetCenter (float const * c) alter {
06573                             if (c) SetCenter (c[0], c[1], c[2]);
06574                             else m_flags = 0;
06575                         }
06577         void            SetPoints (float const * s, float const * m, float const * e,
06578                                    float const * c = 0) alter {
06579                             SetStart (s); SetMiddle (m); SetEnd (e); SetCenter (c);
06580                         }
06582         float const *   GetStart () const   { return m_start;   }
06584         float const *   GetMiddle () const  { return m_middle;  }
06586         float const *   GetEnd () const     { return m_end;     }
06588         float const *   GetCenter () const  { return (m_flags & TKO_Circular_Center) ? m_center : 0;    }
06589 };
06590 
06591 
06593 
06600 class BBINFILETK_API TK_Ellipse : public BBaseOpcodeHandler {
06601     protected:
06602         float           m_center[3];    
06603         float           m_major[3];     
06604         float           m_minor[3];     
06605         float           m_limits[2];    
06607     public:
06609         TK_Ellipse (unsigned char opcode)
06610             : BBaseOpcodeHandler (opcode) {}
06611 
06612         TK_Status   Read (BStreamFileToolkit & tk) alter;
06613         TK_Status   Write (BStreamFileToolkit & tk) alter;
06614         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06615 
06616         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06617         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06618 
06620         void            SetCenter (float x, float y, float z) alter {
06621                             m_center[0] = x;    m_center[1] = y;    m_center[2] = z;
06622                         }
06624         void            SetCenter (float const * s) alter   { SetCenter (s[0], s[1], s[2]); }
06626         float const *   GetCenter () const              { return m_center;              }
06627 
06629         void            SetMajor (float x, float y, float z) alter {
06630                             m_major[0] = x;     m_major[1] = y;     m_major[2] = z;
06631                         }
06633         void            SetMajor (float const * m) alter    { SetMajor (m[0], m[1], m[2]);  }
06635         float const *   GetMajor () const               { return m_major;               }
06636 
06638         void            SetMinor (float x, float y, float z) alter {
06639                             m_minor[0] = x;     m_minor[1] = y;     m_minor[2] = z;
06640                         }
06642         void            SetMinor (float const * m) alter    { SetMinor (m[0], m[1], m[2]);  }
06644         float const *   GetMinor () const               { return m_minor;               }
06645 
06647         void            SetLimits (float s, float e) alter  {
06648                             m_limits[0] = s;    m_limits[1] = e;
06649                         }
06651         float const *   GetLimits () const              { return m_limits;              }
06652 };
06653 
06654 
06656 
06663 class BBINFILETK_API TK_Sphere : public BBaseOpcodeHandler {
06664     protected:
06665         unsigned char   m_flags;        
06666         float           m_center[3];    
06667         float           m_radius;       
06668         float           m_axis[3];      
06669         float           m_ortho[3];     
06671     public:
06673         TK_Sphere ()
06674             : BBaseOpcodeHandler (TKE_Sphere) { Reset(); }
06675 
06676         TK_Status   Read (BStreamFileToolkit & tk) alter;
06677         TK_Status   Write (BStreamFileToolkit & tk) alter;
06678         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06679 
06680         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06681         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06682 
06683         void        Reset () alter;
06684 
06686         void            SetCenter (float x, float y, float z) alter {
06687                             m_center[0] = x;     m_center[1] = y;     m_center[2] = z;
06688                         }
06690         void            SetCenter (float const * s) alter    { SetCenter (s[0], s[1], s[2]); }
06692         float const *   GetCenter () const                { return m_center;            }
06693 
06694 
06696         void            SetRadius (float r) alter   { m_radius = r;     }
06698         float           GetRadius () const      { return m_radius;  }
06699 
06701         void            SetAxis (float x, float y, float z) alter {
06702                             m_axis[0] = x;     m_axis[1] = y;     m_axis[2] = z;
06703                             if (x != 0.0f || y != 1.0f || z != 0.0f)
06704                                 m_flags &= ~TKSPH_NULL_AXIS;
06705                         }
06707         void            SetAxis (float const * s) alter    { SetAxis (s[0], s[1], s[2]); }
06709         float const *   GetAxis () const                { return m_axis;            }
06710 
06711 
06713         void            SetOrtho (float x, float y, float z) alter {
06714                             m_ortho[0] = x;     m_ortho[1] = y;     m_ortho[2] = z;
06715                             if (x != 1.0f || y != 0.0f || z != 0.0f)
06716                                 m_flags &= ~TKSPH_NULL_AXIS;
06717                         }
06719         void            SetOrtho (float const * s) alter    { SetOrtho (s[0], s[1], s[2]); }
06721         float const *   GetOrtho () const                { return m_ortho;            }
06722 
06726         enum Flags {
06727             TKSPH_NONE      = 0x0,   
06728             TKSPH_NULL_AXIS = 0x1    
06729         };
06730 
06731 };
06732 
06733 
06735 
06742 class BBINFILETK_API TK_Cylinder : public BBaseOpcodeHandler {
06743     protected:
06744         float           m_axis[6];      
06745         float           m_radius;       
06746         unsigned char   m_flags;        
06748     public:
06750         TK_Cylinder ()
06751             : BBaseOpcodeHandler (TKE_Cylinder) {}
06752 
06753         TK_Status   Read (BStreamFileToolkit & tk) alter;
06754         TK_Status   Write (BStreamFileToolkit & tk) alter;
06755         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06756 
06757         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06758         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06759 
06761         void            SetAxis (float x1, float y1, float z1, float x2, float y2, float z2) alter {
06762                             m_axis[0] = x1;     m_axis[1] = y1;     m_axis[2] = z1;
06763                             m_axis[3] = x2;     m_axis[4] = y2;     m_axis[5] = z2;
06764                         }
06766         void            SetAxis (float const * s, float const * e) alter    { SetAxis (s[0], s[1], s[2], e[0], e[1], e[2]); }
06768         void            SetAxis (float const * a) alter     { SetAxis (&a[0], &a[3]);   }
06770         float const *   GetAxis () const                { return m_axis;            }
06772         float const *   GetStart () const               { return &m_axis[0];        }
06774         float const *   GetEnd () const                 { return &m_axis[3];        }
06775 
06777         void            SetRadius (float r) alter   { m_radius = r;     }
06779         float           GetRadius () const      { return m_radius;  }
06780 
06782         void            SetCaps (int f) alter       { m_flags = (unsigned char)f;      }
06784         int             GetCaps () const        { return m_flags;   }
06785 
06789         enum Capping_Options {
06790             TKCYL_NONE   = 0,  
06791             TKCYL_FIRST  = 1,  
06792             TKCYL_SECOND = 2,  
06793             TKCYL_BOTH   = 3   
06794         };
06795 
06796 };
06797 
06798 
06800 
06807 #include "BPolyhedron.h"
06808 
06809 class BBINFILETK_API TK_PolyCylinder : public TK_Polyhedron {
06810     protected:
06811         int             m_count;        
06812         float *         m_points;       
06813         int             m_radius_count; 
06814         float *         m_radii;        
06815         unsigned char   m_flags;        
06816         float           m_normals[6];   
06818     public:
06820         TK_PolyCylinder ()
06821             : TK_Polyhedron (TKE_PolyCylinder), m_count (0), m_points (0), m_radius_count (0), m_radii (0) {}
06822         ~TK_PolyCylinder();
06823 
06824         TK_Status   Read (BStreamFileToolkit & tk) alter;
06825         TK_Status   Write (BStreamFileToolkit & tk) alter;
06826         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06827 
06828         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06829         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06830 
06831         virtual void        Reset () alter;
06832 
06836         enum Capping_Options {
06837             TKCYL_NORMAL_FIRST  = 0x04,  
06838             TKCYL_NORMAL_SECOND = 0x08,  
06839             TKCYL_OPTIONALS     = 0x10   
06840         };
06841 
06846         void            SetPoints (int count, float const * points = 0) alter;
06848         float const *   GetPoints () const              { return m_points;              }
06850         float alter *   GetPoints () alter              { return m_points;              }
06852         int             GetCount () const               { return m_count;               }
06853 
06854 
06859         void            SetRadii (int count, float const * radii = 0) alter;
06861         void            SetRadius (float radius) alter      { SetRadii (1, &radius);        }
06863         float const *   GetRadii () const               { return m_radii;               }
06865         float alter *   GetRadii () alter               { return m_radii;               }
06867         int             GetRadiusCount () const         { return m_radius_count;        }
06868 
06869 
06871         void            SetCaps (int f) alter               { m_flags &= ~0x03; m_flags |= f;   }
06873         int             GetCaps () const                { return m_flags & 0x03;            }
06874 
06876         void            SetEndNormal (int index, float const * normal = 0) alter {
06877                             int     mask = 0x40 << index;
06878                             if (normal == 0)
06879                                 m_flags &= ~mask;
06880                             else {
06881                                 m_flags |= mask;
06882                                 m_normals[3*index+0] = normal[0];
06883                                 m_normals[3*index+1] = normal[1];
06884                                 m_normals[3*index+2] = normal[2];
06885                             }
06886                         }
06888         float const *   GetEndNormal (int index) const      {
06889                             int     mask = 0x40 << index;
06890                             if (m_flags & mask)
06891                                 return &m_normals[3*index];
06892                             else
06893                                 return 0;
06894                         }
06895 };
06896 
06897 
06899 
06905 class BBINFILETK_API TK_Grid : public BBaseOpcodeHandler {
06906     protected:
06907         char            m_type;      
06908         float           m_origin[3]; 
06909         float           m_ref1[3];   
06910         float           m_ref2[3];   
06911         int             m_counts[2]; 
06913     public:
06915         TK_Grid ()
06916             : BBaseOpcodeHandler (TKE_Grid) {}
06917 
06918         TK_Status   Read (BStreamFileToolkit & tk) alter;
06919         TK_Status   Write (BStreamFileToolkit & tk) alter;
06920         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06921 
06922         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
06923         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
06924 
06926         void            SetOrigin (float x, float y, float z) alter {
06927                             m_origin[0] = x;    m_origin[1] = y;    m_origin[2] = z;
06928                         }
06930         void            SetOrigin (float const * o) alter   { SetOrigin (o[0], o[1], o[2]); }
06932         float const *   GetOrigin () const              { return m_origin;              }
06933 
06935         void            SetRef1 (float x, float y, float z) alter {
06936                             m_ref1[0] = x;      m_ref1[1] = y;      m_ref1[2] = z;
06937                         }
06939         void            SetRef1 (float const * r) alter     { SetRef1 (r[0], r[1], r[2]);   }
06941         float const *   GetRef1 () const                { return m_ref1;                }
06942 
06944         void            SetRef2 (float x, float y, float z) alter {
06945                             m_ref2[0] = x;      m_ref2[1] = y;      m_ref2[2] = z;
06946                         }
06948         void            SetRef2 (float const * r) alter     { SetRef2 (r[0], r[1], r[2]);   }
06950         float const *   GetRef2 () const                { return m_ref2;                }
06951 
06953         void            SetCounts (int c1, int c2) alter    {
06954                             m_counts[0] = c1;   m_counts[1] = c2;
06955                         }
06957         int const *     GetCounts () const              { return m_counts;              }
06958 
06960         void            SetType (int t)                     { m_type = (char)t;             }
06962         int             GetType () const                { return (int)m_type;           }
06963 };
06964 
06966 
06970 enum TKO_Text_Encodings {
06971     TKO_Enc_ISO_Latin_One,  
06972     TKO_Enc_ISO_Latin,      
06973     TKO_Enc_JEC,            
06974     TKO_Enc_EUC,            
06975     TKO_Enc_Raw_16,         
06976     TKO_Enc_Unicode,        
06977     TKO_Enc_Unicode32,      
06978     TKO_Enc_UTF8,           
06979     TKO_Enc_UTF16,          
06980     TKO_Enc_UTF32,          
06981     TKO_Enc_WCS             
06982 };
06983 
06987 enum TKO_Text_Options {
06988     TKO_Text_Option_Region                  = 0x01, 
06989     TKO_Text_Option_Character_Attributes    = 0x02  
06990 };
06991 
06995 enum TKO_Text_Region_Options {
06996     TKO_Text_Region_Window      = 0x01, 
06997     TKO_Text_Region_Relative    = 0x02, 
06998     TKO_Text_Region_Adjusted    = 0x04, 
06999     TKO_Text_Region_Center      = 0x08, 
07000     TKO_Text_Region_Top         = 0x10, 
07001     TKO_Text_Region_HFit        = 0x20, 
07002     TKO_Text_Region_VFit        = 0x40, 
07003     TKO_Text_Region_Fitting     = 0x60, 
07004     TKO_Text_Region_Extended    = 0x80  
07005 };
07006 
07010 enum TKO_Text_Region_Fit_Options {
07011     TKO_Text_Region_Fit_None    = 0,    
07012     TKO_Text_Region_Fit_Spacing = 1,    
07013     TKO_Text_Region_Fit_Size    = 2     
07014 };
07015 
07016 
07020 enum TKO_Character_Attributes {
07021     TKO_Character_Name              = 0x0001,  
07022     TKO_Character_Size              = 0x0002,  
07023     TKO_Character_Vertical_Offset   = 0x0004,  
07024     TKO_Character_Omitted           = 0x0008,  
07025     TKO_Character_Invisible         = 0x0010,  
07026     TKO_Character_Slant             = 0x0020,  
07027     TKO_Character_Width_Scale       = 0x0040,  
07028     TKO_Character_Rotation          = 0x0080,  
07029     TKO_Character_Rotation_Fixed    = 0x0100,
07030     TKO_Character_Horizontal_Offset = 0x0200,  
07031     TKO_Character_Color             = 0x0400,  
07032     TKO_Character_Extended          = 0x8000   
07033 };
07034 
07036 struct TK_Character_Attribute {
07037     char *              name;                   
07038 
07039     float               color[3];               
07040     float               size;                   
07041     float               vertical_offset;        
07042     float               horizontal_offset;      
07043     float               slant;                  
07044     float               rotation;               
07045     float               width_scale;            
07046 
07047     unsigned short      mask;                   
07048     unsigned short      value;                  
07049 
07050     unsigned char       size_units;             
07051     unsigned char       vertical_offset_units;  
07052     unsigned char       horizontal_offset_units;    
07053 };
07054 
07055 
07057 
07063 class BBINFILETK_API TK_Text : public BBaseOpcodeHandler {
07064     protected:
07065         float           m_position[3];  
07066         int             m_length;       
07067         int             m_allocated;    
07068         char *          m_string;       
07069         unsigned char   m_encoding;     
07070         unsigned char   m_options;      
07071         unsigned char   m_region_options;
07072         unsigned char   m_region_fit;   
07073         unsigned char   m_region_count; 
07074         float           m_region[4*3];  
07075         int             m_count;        
07076         TK_Character_Attribute  *m_character_attributes;    
07077         int             m_substage;     
07078         int             m_tmp;          
07081         void    set_string (char const * string) alter;     
07082         void    set_string (int length) alter;              
07083 
07084     public:
07086         TK_Text (unsigned char opcode);
07087         ~TK_Text();
07088 
07089         TK_Status   Read (BStreamFileToolkit & tk) alter;
07090         TK_Status   Write (BStreamFileToolkit & tk) alter;
07091         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07092 
07093         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07094         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07095 
07096         void        Reset () alter;
07097 
07099         void            SetString (char const * string) alter   { set_string (string);  }
07101         void            SetString (unsigned short const * string) alter;
07103         void            SetString (unsigned int const * string) alter;
07105         void            SetString (int length) alter            { set_string (length);  }
07107         char const *    GetString () const                  { return m_string;      }
07109         char alter *    GetString () alter                  { return m_string;      }
07110 
07112         void            SetPosition (float x, float y, float z) alter
07113                                         { m_position[0] = x;  m_position[1] = y;  m_position[2] = z;    }
07115         void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
07117         float const *   GetPosition () const                { return &m_position[0];                }
07118 
07120         void            SetEncoding (int e) alter               { m_encoding = (unsigned char)e;        }
07122         int             GetEncoding () const                { return (int)m_encoding;               }
07123 
07125         void            SetTextRegion (int c, float const * p, int o=0, int f=0) alter;
07127         int             GetTextRegionCount () const         { return (int)m_region_count;           }
07129         float const *   GetTextRegionPoints () const        { return m_region;          }
07131         int             GetTextRegionOptions () const       { return (int)m_region_options;         }
07133         int             GetTextRegionFitting () const       { return (int)m_region_fit;         }
07134 };
07135 
07137 
07139 
07145 enum TKO_Font_Type {
07146     TKO_Font_HOOPS_Stroked      // data represents a HOOPS stroked font definition
07147 };
07148 
07149 
07151 
07157 class BBINFILETK_API TK_Font : public BBaseOpcodeHandler {
07158     protected:
07159         char *          m_name;         
07160         char *          m_lookup;       
07161         char *          m_bytes;        
07162         int             m_name_length;  
07163         int             m_lookup_length;
07164         int             m_length;       
07165         unsigned char   m_type;         
07166         unsigned char   m_encoding;     
07168 
07169         void    set_bytes (int size, char const * bytes = 0) alter;
07171         void    set_name (char const * string) alter;
07173         void    set_name (int length) alter;
07175         void    set_lookup (char const * string) alter;
07177         void    set_lookup (int length) alter;
07178 
07179     public:
07181         TK_Font () : BBaseOpcodeHandler (TKE_Font),
07182             m_name (0), m_lookup (0), m_bytes (0), m_name_length (0), m_lookup_length (0), m_length (0),
07183             m_type (0), m_encoding (0) {}
07184         ~TK_Font();
07185 
07186         TK_Status   Read (BStreamFileToolkit & tk) alter;
07187         TK_Status   Write (BStreamFileToolkit & tk) alter;
07188         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07189 
07190         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07191         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07192 
07193         void        Reset () alter;
07194 
07195 
07197         void            SetType (int t) alter                               { m_type = (unsigned char)t;}
07199         int             GetType () const                                { return (int)m_type;       }
07200 
07205         void            SetBytes (int size, char const * bytes = 0) alter   { set_bytes (size, bytes);  }
07207         int             GetBytesCount () const                          { return m_length;          }
07209         char const *    GetBytes () const                               { return m_bytes;           }
07211         char alter *    GetBytes () alter                               { return m_bytes;           }
07212 
07214         void            SetName (char const * string) alter                 { set_name (string);        }
07216         void            SetName (int length) alter                          { set_name (length);        }
07218         char const *    GetName () const                                { return m_name;            }
07220         char alter *    GetName () alter                                { return m_name;            }
07221 
07223         void            SetLookup (char const * string) alter               { set_lookup (string);      }
07225         void            SetLookup (int length) alter                        { set_lookup (length);      }
07227         char const *    GetLookup () const                              { return m_lookup;          }
07229         char alter *    GetLookup () alter                              { return m_lookup;          }
07230 
07232         void            SetEncoding (int e) alter                       { m_encoding = (unsigned char)e;}
07234         int             GetEncoding () const                        { return (int)m_encoding;       }
07235 };
07236 
07238 
07242 enum TKO_Image_Formats {
07243     TKO_Image_Mapped    = 0,         
07244     TKO_Image_Mapped_16 = 1,         
07245     TKO_Image_RGB       = 2,         
07246     TKO_Image_RGBA      = 3,         
07247     TKO_Image_BGRA      = 4,         
07248     TKO_Image_DEPTH     = 5,         
07249     TKO_Image_LUMINANCE8 = 6,         
07250     TKO_Image_JPEG      = 7,         
07251     TKO_Image_DXT1      = 8,         
07252     TKO_Image_DXT3      = 9,         
07253     TKO_Image_DXT5      = 10,        
07254     TKO_Image_TARGA     = 11,        
07255     TKO_Image_PNG       = 12,        
07256     TKO_Image_Format_Mask   = 0x0F,  
07257 
07258     TKO_Image_Explicit_Size = 0x10,         
07259     TKO_Image_Local_Texture = 0x20,         
07260     TKO_Image_Is_Named      = 0x80,         
07261 
07262     TKO_Image_Compression_Quality = 0x00000100,         
07263     TKO_Image_Discard       = 0x00000200,         
07264     TKO_Image_Options_Mask  = 0xFFFFFFF0,         
07265 
07266     TKO_Image_Invalid       = 0xFF          
07267 };
07268 
07269 
07271 extern const int TK_Image_Bytes_Per_Pixel[];
07272 
07276 enum TKO_Compression {
07277     TKO_Compression_None  = 0,  
07278     TKO_Compression_RLE   = 1,  
07279     TKO_Compression_JPEG  = 2,  
07280     TKO_Compression_DXT   = 3,  
07281     TKO_Compression_TARGA = 4,  
07282     TKO_Compression_PNG   = 5,  
07283     TKO_Compression_Reference = 99  
07284 };
07285 
07286 #ifndef DOXYGEN_SHOULD_SKIP_THIS
07287 
07288 class BBINFILETK_API2 TK_Image_Data_Buffer {
07289     protected:
07290         unsigned char *                 m_buffer;   
07291         unsigned int                    m_allocated;    
07292         unsigned int                    m_used;     
07293 
07294     public:
07296         TK_Image_Data_Buffer() : m_buffer (0),  m_allocated (0), m_used (0) {}
07297         ~TK_Image_Data_Buffer();
07298 
07299         void    Resize (unsigned int size) alter;
07300         void    Expand (unsigned int size) alter        { Resize (Size() + size);   }
07301         void    Reset () alter;
07302 
07303         unsigned int const &     Size () const      { return m_allocated;   }
07304         unsigned int const &     Used () const      { return m_used;        }
07305         unsigned int alter &     Used () alter      { return m_used;        }
07306         unsigned char const *    Buffer () const    { return m_buffer;      }
07307         unsigned char alter *    Buffer () alter    { return m_buffer;      }
07308 };
07309 
07310 
07311 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
07312 
07313 
07315 
07321 class BBINFILETK_API2 TK_Image : public BBaseOpcodeHandler {
07322     protected:
07323         char *                  m_bytes;        
07324         char *                  m_name;         
07325         char *                  m_reference;    
07326         float                   m_position[3];  
07327         int                     m_size[2];      
07328         int                     m_data_size;      
07329         int                     m_name_length;  
07330         int                     m_reference_length; 
07331         unsigned char           m_format;       
07332         unsigned int            m_options;      
07333         unsigned char           m_compression;  
07334         unsigned char           m_bytes_format; 
07335         float                   m_explicit_size[2]; 
07336         unsigned char           m_explicit_units[2];    
07337         TK_Image_Data_Buffer    m_work_area[2];    
07338         float                   m_compression_quality;  
07340         bool                    m_jpeg_native;  
07342 
07343         void    set_data (int size, char const * bytes = 0, unsigned char data_format = TKO_Compression_None) alter;
07345         void    set_name (char const * string) alter;
07347         void    set_name (int length) alter;
07348 
07350         TK_Status compress_image (BStreamFileToolkit & tk, int active_work_area = 0) alter;
07352         TK_Status decompress_image (BStreamFileToolkit & tk, int active_work_area = 0) alter;
07354         TK_Status read_jpeg_header () alter;
07355 
07356     public:
07358         TK_Image ();
07359         ~TK_Image();
07360 
07361         TK_Status   Read (BStreamFileToolkit & tk) alter;
07362         TK_Status   Write (BStreamFileToolkit & tk) alter;
07363         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07364 
07365         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07366         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07367         TK_Status   compress_image_ascii (BStreamFileToolkit & tk) alter;
07368 
07369 
07370         void        Reset () alter;
07371 
07376         void            SetBytes (int size, char const * bytes = 0,
07377                                   unsigned char data_format = TKO_Compression_None) alter
07378                                                                             { set_data (size, bytes, data_format);  }
07380         char const *    GetBytes () const                               { return m_bytes;           }
07382         char alter *    GetBytes () alter                               { return m_bytes;           }
07383 
07385         void            SetName (char const * string) alter                 { set_name (string);        }
07387         void            SetName (int length) alter                          { set_name (length);        }
07389         char const *    GetName () const                                { return m_name;            }
07391         char alter *    GetName () alter                                { return m_name;            }
07392 
07394         void            SetReference (char const * string) alter;
07396         void            SetReference (int length) alter;
07398         char const *    GetReference () const                           { return m_reference;       }
07400         char alter *    GetReference () alter                           { return m_reference;       }
07401 
07403         void            SetPosition (float x, float y, float z) alter
07404                                         { m_position[0] = x;  m_position[1] = y;  m_position[2] = z;    }
07406         void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
07408         float const *   GetPosition () const                { return &m_position[0];                }
07409 
07411         void            SetSize (int w, int h) alter            { m_size[0] = w; m_size[1] = h;         }
07413         void            SetSize (int const * s) alter           { m_size[0] = s[0]; m_size[1] = s[1];   }
07415         int const *     GetSize () const                    { return m_size;                        }
07416 
07418         void            SetFormat (int f) alter                 { m_format = (unsigned char)(f & TKO_Image_Format_Mask);    }
07420         int             GetFormat () const                  { return (int)m_format;         }
07421 
07423         void            SetOptions (int f) alter                 { m_options = (unsigned char)(f & TKO_Image_Options_Mask); }
07425         int             GetOptions () const                  { return (int)m_options;       }
07426 
07428         void            SetCompression (int c) alter            { m_compression = (unsigned char)c;     }
07430         int             GetCompression () const             { return (int)m_compression;            }
07431 };
07432 
07433 
07435 
07436 
07440 enum TKO_Texture_Option_Bits {
07441     TKO_Texture_Param_Source        = 0x00000001,   
07442     TKO_Texture_Tiling              = 0x00000002,   
07443     TKO_Texture_Interpolation       = 0x00000004,   
07444     TKO_Texture_Decimation          = 0x00000008,   
07445     TKO_Texture_Red_Mapping         = 0x00000010,   
07446     TKO_Texture_Green_Mapping       = 0x00000020,   
07447     TKO_Texture_Blue_Mapping        = 0x00000040,   
07448     TKO_Texture_Alpha_Mapping       = 0x00000080,   
07449     TKO_Texture_Param_Function      = 0x00000100,   
07450     TKO_Texture_Layout              = 0x00000200,   
07451     TKO_Texture_Transform           = 0x00000400,   
07452     TKO_Texture_Value_Scale         = 0x00000800,   
07453     TKO_Texture_Caching             = 0x00001000,   
07454     TKO_Texture_DownSample          = 0x00002000,   
07455     TKO_Texture_No_DownSample       = 0x00004000,   
07456     TKO_Texture_Extended            = 0x00008000,   
07457     TKO_Texture_Extended_Mask       = 0xFFFF0000,   //   internal use, indicates bit which require TKO_Texture_Extended
07458     TKO_Texture_Extended_Shift      = 16,           //   internal use, indicates shift of extended section
07459     TKO_Texture_Decal               = 0x00010000,   
07460     TKO_Texture_Modulate            = 0x00020000,   
07461     TKO_Texture_Param_Offset        = 0x00040000,   
07462     TKO_Texture_Transform_Override  = 0x00080000,   
07463     TKO_Texture_Shader              = 0x00100000,   
07464     TKO_Texture_Shader_Multitexture = 0x00200000,   
07465     TKO_Texture_Camera              = 0x00400000,   
07466     TKO_Texture_Source_Dimensions   = 0x00800000    
07467 };
07468 
07472 enum TKO_Texture_Param_Sources {
07473     TKO_Texture_Param_Source_U,   
07474     TKO_Texture_Param_Source_UV,   
07475     TKO_Texture_Param_Source_UVW,   
07476     TKO_Texture_Param_Source_Object,   
07477     TKO_Texture_Param_Source_World,   
07478     TKO_Texture_Param_Source_Surface_Normal,   
07479     TKO_Texture_Param_Source_Reflection_Vector,   
07480     TKO_Texture_Param_Source_Natural_UV,   
07481     TKO_Texture_Param_Source_Local_Pixels,   
07482     TKO_Texture_Param_Source_Outer_Pixels,   
07483     TKO_Texture_Param_Source_Local_Window,   
07484     TKO_Texture_Param_Source_Outer_Window,   
07485     TKO_Texture_Param_Source_Transmission_Vector,   
07486     TKO_Texture_Param_Source_Sphere_Map,   
07487     TKO_Texture_Param_Source_Cylinder_Map,  
07488     TKO_Texture_Param_Source_Physical_Reflection_Vector   
07489 };
07490 
07491 
07495 enum TKO_Texture_Param_Functions {
07496     TKO_Texture_Param_Function_None,   
07497     TKO_Texture_Param_Function_Sphere,   
07498     TKO_Texture_Param_Function_Cylinder,   
07499     TKO_Texture_Param_Function_Box   
07500 };
07501 
07502 
07506 enum TKO_Texture_Layouts {
07507     TKO_Texture_Layout_Rectilinear,   
07508     TKO_Texture_Layout_Spherical,   
07509     TKO_Texture_Layout_Hemispherical,   
07510     TKO_Texture_Layout_Cubic_Faces,   
07511     TKO_Texture_Layout_Unknown   
07512 };
07513 
07517 enum TKO_Texture_Tilings {
07518     TKO_Texture_Tiling_None,   
07519     TKO_Texture_Tiling_Clamp,   
07520     TKO_Texture_Tiling_Repeat,   
07521     TKO_Texture_Tiling_Mirror,   
07522     TKO_Texture_Tiling_Drop    
07523 };
07524 
07525 
07529 enum TKO_Texture_Filters {
07530     TKO_Texture_Filter_None,   
07531     TKO_Texture_Filter_Bilinear,   
07532     TKO_Texture_Filter_Trilinear,   
07533     TKO_Texture_Filter_MipMap,   
07534     TKO_Texture_Filter_Summed_Areas,   
07535     TKO_Texture_Filter_Gaussian,   
07536     TKO_Texture_Filter_Stochastic,   
07537     TKO_Texture_Filter_Anisotropic  
07538 };
07539 
07540 
07544 enum TKO_Texture_Channel_Mappings {
07545     TKO_Texture_Channel_Mapping_Red,   
07546     TKO_Texture_Channel_Mapping_Green,   
07547     TKO_Texture_Channel_Mapping_Blue,   
07548     TKO_Texture_Channel_Mapping_Alpha,   
07549     TKO_Texture_Channel_Mapping_Zero,   
07550     TKO_Texture_Channel_Mapping_One,   
07551     TKO_Texture_Channel_Mapping_Luminance,   
07552     TKO_Texture_Channel_Mapping_None   
07553 };
07554 
07555 
07559 enum TKO_Texture_Application_Modes {
07560     TKO_Texture_Modulate_Set    = 0x01,     
07561     TKO_Texture_Decal_Set   = 0x02      
07562 };
07563 
07564 
07566 
07572 class BBINFILETK_API2 TK_Texture : public BBaseOpcodeHandler {
07573     protected:
07574         char *          m_name;             
07575         char *          m_shader_source;    
07576         char *          m_image;            
07577         char *          m_camera;            
07578         int             m_name_length;      
07579         int             m_shader_source_length;  
07580         int             m_image_length;     
07581         int             m_camera_length;      
07582         int             m_flags;            
07583         int             m_substage;         
07585         char            m_param_source;     
07586         char            m_interpolation;    
07587         char            m_decimation;       
07588         char            m_red_mapping;      
07589         char            m_green_mapping;    
07590         char            m_blue_mapping;     
07591         char            m_alpha_mapping;    
07592         char            m_param_function;   
07593         char            m_layout;           
07594         char            m_tiling;           
07595         float           m_value_scale[2];   
07596         int             m_source_dimensions[3]; 
07597         char *          m_transform;        
07598         char            m_apply_mode;       
07599         char            m_param_offset;     
07601         void    set_name (int length) alter;                    
07602         void    set_name (char const * name) alter;             
07603         void    set_image (int length) alter;                   
07604         void    set_image (char const * image) alter;           
07605         void    set_transform (int length) alter;               
07606         void    set_transform (char const * transform) alter;   
07607 
07608     public:
07610         TK_Texture () : BBaseOpcodeHandler (TKE_Texture),
07611             m_name (0), m_shader_source(0), m_image (0), m_camera (0),
07612             m_name_length (0), m_shader_source_length(0), m_image_length (0), m_camera_length (0),
07613             m_transform (0) {
07614                 Reset();
07615             }
07616         ~TK_Texture();
07617 
07618         TK_Status   Read (BStreamFileToolkit & tk) alter;
07619         TK_Status   Write (BStreamFileToolkit & tk) alter;
07620         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07621 
07622         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07623         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07624 
07625         void        Reset () alter;
07626 
07628         void            SetName (char const * name) alter           { set_name (name);              }
07630         void            SetName (int length) alter                  { set_name (length);            }
07632         char const *    GetName () const                        { return m_name;                }
07634         char alter *    GetName () alter                        { return m_name;                }
07635 
07637         void            SetShaderSource (char const * shader_source) alter;
07639         void            SetShaderSource (int length) alter;
07641         char const *    GetShaderSource () const                            { return m_shader_source;                }
07643         char alter *    GetShaderSource () alter                            { return m_shader_source;                }
07644 
07646         void            SetImage (char const * image) alter         { set_image (image);            }
07648         void            SetImage (int length) alter                 { set_image (length);           }
07650         char const *    GetImage () const                       { return m_image;               }
07652         char alter *    GetImage () alter                       { return m_image;               }
07653 
07655         void            SetCamera (char const * camera) alter;
07657         void            SetCamera (int length) alter;
07659         char const *    GetCamera () const                       { return m_camera;               }
07661         char alter *    GetCamera () alter                       { return m_camera;               }
07662 
07664         void            SetFlags (int f) alter  {
07665                             m_flags = f;
07666                             if ((f & TKO_Texture_Extended_Mask) != 0)
07667                                 m_flags |= TKO_Texture_Extended;
07668                         }
07670         int             GetFlags () const                       { return m_flags;           }
07671 
07673         void            SetParameterSource (int p) alter            { m_param_source = (char)p;     }
07675         int             GetParameterSource () const             { return (int)m_param_source;   }
07676 
07678         void            SetInterpolation (int p) alter              { m_interpolation = (char)p;    }
07680         int             GetInterpolation () const               { return (int)m_interpolation;  }
07681 
07683         void            SetDecimation (int p) alter                 { m_decimation = (char)p;       }
07685         int             GetDecimation () const                  { return (int)m_decimation;     }
07686 
07688         void            SetRedMapping (int p) alter                 { m_red_mapping = (char)p;      }
07690         int             GetRedMapping () const                  { return (int)m_red_mapping;    }
07691 
07693         void            SetGreenMapping (int p) alter               { m_green_mapping = (char)p;    }
07695         int             GetGreenMapping () const                { return (int)m_green_mapping;  }
07696 
07698         void            SetBlueMapping (int p) alter                { m_blue_mapping = (char)p;     }
07700         int             GetBlueMapping () const                 { return (int)m_blue_mapping;   }
07701 
07703         void            SetAlphaMapping (int p) alter               { m_alpha_mapping = (char)p;    }
07705         int             GetAlphaMapping () const                { return (int)m_alpha_mapping;  }
07706 
07708         void            SetParameterFunction (int p) alter          { m_param_function = (char)p;   }
07710         int             GetParameterFunction () const           { return (int)m_param_function; }
07711 
07713         void            SetLayout (int p) alter                     { m_layout = (char)p;           }
07715         int             GetLayout () const                      { return (int)m_layout;         }
07716 
07718         void            SetTiling (int p) alter                     { m_tiling = (char)p;           }
07720         int             GetTiling () const                      { return (int)m_tiling;         }
07721 
07723         void            SetValueScale (float v1, float v2) alter    { m_value_scale[0] = v1; m_value_scale[1] = v2; }
07725         float const *   GetValueScale () const                  { return m_value_scale;         }
07726 
07728         void            SetApplicationMode (int p) alter            { m_apply_mode = (char)p;       }
07730         int             GetApplicationMode () const             { return (int)m_tiling;         }
07731 
07733         void            SetParameterOffset (int p) alter            { m_param_offset = (char)p;     }
07735         int             GetParameterOffset () const             { return (int)m_param_offset;   }
07736 
07741         void            SetTransform (char const * transform) alter { set_transform (transform);    }
07746         void            SetTransform (int length) alter             { set_transform (length);       }
07748         char const *    GetTransform () const                   { return m_transform;           }
07750         char alter *    GetTransform () alter                   { return m_transform;           }
07751 };
07752 
07753 
07757 enum TKO_Thumbnail_Formats {
07758     TKO_Thumbnail_RGB       = 0,         
07759     TKO_Thumbnail_RGBA      = 1,         
07760 
07761     TKO_Thumbnail_Invalid   = 0xFF       
07762 };
07763 
07765 
07771 class BBINFILETK_API2 TK_Thumbnail : public BBaseOpcodeHandler {
07772     protected:
07773         unsigned char *         m_bytes;        
07774         int                     m_size[2];      
07775         unsigned char           m_format;       
07777     public:
07779     TK_Thumbnail() : BBaseOpcodeHandler (TKE_Thumbnail), m_bytes (0), m_format (TKO_Thumbnail_Invalid) {}
07780         ~TK_Thumbnail();
07781 
07782         TK_Status   Read (BStreamFileToolkit & tk) alter;
07783         TK_Status   Write (BStreamFileToolkit & tk) alter;
07784         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07785 
07786         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07787         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07788 
07789         TK_Status   Execute (BStreamFileToolkit & tk) alter;
07790         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
07791         TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
07792                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
07793         void        Reset () alter;
07794 
07799         void            SetBytes (int size, unsigned char const * bytes = 0) alter;
07801         unsigned char const *    GetBytes () const                   { return m_bytes;          }
07803         unsigned char alter *    GetBytes () alter                   { return m_bytes;          }
07804 
07806         void            SetSize (int w, int h) alter            { m_size[0] = w; m_size[1] = h;     }
07808         void            SetSize (int const * s) alter           { m_size[0] = s[0]; m_size[1] = s[1];   }
07810         int const *     GetSize () const                    { return m_size;            }
07811 
07813         void            SetFormat (int f) alter                 { m_format = (unsigned char)f;      }
07815         int             GetFormat () const                  { return (int)m_format;         }
07816 };
07817 
07818 
07820 
07822 
07827 class BBINFILETK_API2 TK_Glyph_Definition : public BBaseOpcodeHandler {
07828     protected:
07829         int             m_name_length;      
07830         int             m_size;         
07831         char *          m_name;             
07832         char *          m_data;         
07834     public:
07836         TK_Glyph_Definition () : BBaseOpcodeHandler (TKE_Glyph_Definition),
07837             m_name_length (0), m_size (0),
07838             m_name (0), m_data (0) {}
07839         ~TK_Glyph_Definition();
07840 
07841         TK_Status   Read (BStreamFileToolkit & tk) alter;
07842         TK_Status   Write (BStreamFileToolkit & tk) alter;
07843         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07844 
07845         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07846         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07847 
07848         void        Reset () alter;
07849 
07851         void            SetName (char const * name) alter;
07853         void            SetName (int length) alter;
07855         char const *    GetName () const            { return m_name;    }
07857         char alter *    GetName () alter            { return m_name;    }
07858 
07860         void            SetDefinition (int size, char const * data = 0) alter;
07862         int     GetDefinitionSize () const      { return m_size;    }
07864         char const *    GetDefinition () const      { return m_data;    }
07866         char alter *    GetDefinition () alter      { return m_data;    }
07867 };
07868 
07869 
07871 
07876 class BBINFILETK_API2 TK_Named_Style_Def : public BBaseOpcodeHandler {
07877     protected:
07878         int             m_name_length;      
07879         char *          m_name;             
07881         int             m_segment_length;   
07882         char *          m_segment;          
07884         ID_Key          m_key;                  
07885         BBaseOpcodeHandler *     m_referee;     
07886         bool            m_follow;               
07887 
07888     public:
07890         TK_Named_Style_Def () : BBaseOpcodeHandler (TKE_Named_Style_Def),
07891             m_name_length (0), m_name (0),
07892             m_segment_length (0), m_segment (0) , 
07893             m_key(-1), m_referee(0), m_follow(true) {}
07894         ~TK_Named_Style_Def();
07895 
07896         TK_Status   Read (BStreamFileToolkit & tk) alter;
07897         TK_Status   Write (BStreamFileToolkit & tk) alter;
07898         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07899 
07900         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07901         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07902 
07903         void        Reset () alter;
07904 
07906         void            SetName (char const * name) alter;
07908         void            SetName (int length) alter;
07910         char const *    GetName () const            { return m_name;    }
07912         char alter *    GetName () alter            { return m_name;    }
07913 
07918         void            SetSegment (char const * segment) alter;
07923         void            SetSegment (int length) alter;
07927         char const *    GetSegment () const                 { return m_segment; }
07932         char alter *    GetSegment () alter                 { return m_segment; }
07933 };
07934 
07936 
07941 class BBINFILETK_API2 TK_Line_Style : public BBaseOpcodeHandler {
07942     protected:
07943         int             m_name_length;      
07944         int             m_definition_length;
07945         char *          m_name;             
07946         char *          m_definition;       
07948     public:
07950         TK_Line_Style () : BBaseOpcodeHandler (TKE_Line_Style),
07951             m_name_length (0), m_definition_length (0),
07952             m_name (0), m_definition (0) {}
07953         ~TK_Line_Style();
07954 
07955         TK_Status   Read (BStreamFileToolkit & tk) alter;
07956         TK_Status   Write (BStreamFileToolkit & tk) alter;
07957         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07958 
07959         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
07960         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
07961 
07962         void        Reset () alter;
07963 
07965         void            SetName (char const * name) alter;
07967         void            SetName (int length) alter;
07969         char const *    GetName () const            { return m_name;        }
07971         char alter *    GetName () alter            { return m_name;        }
07972 
07974         void            SetDefinition (char const * def) alter;
07976         void            SetDefinition (int length) alter;
07978         char const *    GetDefinition () const  { return m_definition;  }
07980         char alter *    GetDefinition () alter  { return m_definition;  }
07981 };
07982 
07984 
07986 
07991 class BBINFILETK_API TK_Clip_Rectangle : public BBaseOpcodeHandler {
07992     protected:
07993         char            m_options;  
07994         float           m_rect[4];  
07996     public:
07998         TK_Clip_Rectangle ()
07999             : BBaseOpcodeHandler (TKE_Clip_Rectangle), m_options (0) {}
08000 
08001         TK_Status   Read (BStreamFileToolkit & tk) alter;
08002         TK_Status   Write (BStreamFileToolkit & tk) alter;
08003         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08004 
08005         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08006         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08007 
08008         void        Reset () alter;
08009 
08011         void            SetRectangle (float left, float right, float bottom, float top) alter
08012                             { m_rect[0] = left;  m_rect[1] = right;  m_rect[2] = bottom;  m_rect[3] = top; }
08014         void            SetRectangle (float const * rect) alter
08015                             { SetRectangle (rect[0], rect[1], rect[2], rect[3]); }
08017         float const *   GetRectangle () const       { return m_rect;            }
08018 
08020         void            SetOptions (int o) alter        { m_options = (char)o;      }
08022         int             GetOptions () const         { return (int)m_options;    }
08023 };
08024 
08026 
08030 enum TKO_Clip_Region_Options {
08031     TKO_Clip_Region_World_Space = 0x01,    
08032     TKO_Clip_Region_Window_Space = 0x02,   
08033     TKO_Clip_Region_Object_Space = 0x10,   
08034     TKO_Clip_Region_Clip = 0x04,           
08035     TKO_Clip_Region_Mask = 0x08            
08036 };
08037 
08039 
08044 class BBINFILETK_API TK_Clip_Region : public BBaseOpcodeHandler {
08045     protected:
08046         char            m_options;  
08047         int             m_count;    
08048         float *         m_points;   
08050     public:
08052         TK_Clip_Region ()
08053             : BBaseOpcodeHandler (TKE_Clip_Region), m_options (0), m_count (0), m_points (0) {}
08054         ~TK_Clip_Region();
08055 
08056         TK_Status   Read (BStreamFileToolkit & tk) alter;
08057         TK_Status   Write (BStreamFileToolkit & tk) alter;
08058         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08059 
08060         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08061         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08062 
08063         void        Reset () alter;
08064 
08069         void            SetPoints (int count, float const * points = 0) alter;
08071         float const *   GetPoints () const                                  { return m_points;              }
08073         float alter *   GetPoints () alter                                  { return m_points;              }
08075         int             GetCount () const                                   { return m_count;               }
08076 
08078         void            SetOptions (int o) alter        { m_options = (char)o;      }
08080         int             GetOptions () const         { return (int)m_options;    }
08081 };
08082 
08083 
08085 
08087 
08103 class BBINFILETK_API2 TK_User_Data : public BBaseOpcodeHandler {
08104     protected:
08105         int             m_size;  
08106         unsigned char *          m_data;  
08107         int             m_buffer_size;   
08109 
08110         void    set_data (int size, unsigned char const * bytes = 0) alter;  
08111 
08112     public:
08114         TK_User_Data ()
08115             : BBaseOpcodeHandler (TKE_Start_User_Data), m_size (0), m_data (0), m_buffer_size(0) {}
08116         ~TK_User_Data();
08117 
08118         TK_Status   Read (BStreamFileToolkit & tk) alter;
08119         TK_Status   Write (BStreamFileToolkit & tk) alter;
08120         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08121 
08122         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08123         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08124 
08125         TK_Status   Execute (BStreamFileToolkit & tk) alter;
08126         void        Reset () alter;
08127 
08132         void            SetUserData (int size, unsigned char const * bytes = 0) alter    { set_data (size, bytes);   }
08134         unsigned char const *    GetUserData () const                                { return m_data;            }
08136         unsigned char alter *    GetUserData () alter                                { return m_data;            }
08138         int             GetSize () const                                    { return m_size;            }
08139 
08141         void            Resize (int size) alter;  
08142 
08144         void            SetSize (int size) alter;
08145 };
08146 
08147 
08149 
08151 
08163 class BBINFILETK_API2 TK_Material : public BBaseOpcodeHandler {
08164     protected:
08165         int             m_total_size; 
08166 
08169         struct vlist_s *m_data;             
08170 
08171     public:
08173         TK_Material () : BBaseOpcodeHandler (TKE_Material), m_total_size(0), m_data(0) {}
08174         ~TK_Material();
08175 
08176         TK_Status   Read (BStreamFileToolkit & tk) alter;
08177         TK_Status   Write (BStreamFileToolkit & tk) alter;
08178         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08179         void        Reset () alter;
08180 
08181         TK_Status   PushUserData (char const *buffer, int buffer_size, bool tally_total_size = true);       
08182         TK_Status   GetBlock (char const **ptr, int *buffer_size);      
08183 };
08184 
08186 
08191 class BBINFILETK_API TK_XML : public BBaseOpcodeHandler {
08192     protected:
08193         int             m_size;  
08194         char *          m_data;  
08196     public:
08198         TK_XML (): BBaseOpcodeHandler (TKE_XML), m_size (0), m_data (0) {}
08199         ~TK_XML();
08200 
08201         TK_Status   Read (BStreamFileToolkit & tk) alter;
08202         TK_Status   Write (BStreamFileToolkit & tk) alter;
08203         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08204 
08205         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08206         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08207 
08208         TK_Status   Execute (BStreamFileToolkit & tk) alter;
08209         void        Reset () alter;
08210 
08215         void            SetXML (int size, char const * data = 0) alter;
08219         void            AppendXML (int size, char const * data = 0) alter;
08221         char const *    GetXML () const                     { return m_data;            }
08223         char alter *    GetXML () alter                     { return m_data;            }
08225         int             GetSize () const                    { return m_size;            }
08226 };
08227 
08228 
08229 
08231 
08237 class BBINFILETK_API TK_URL : public BBaseOpcodeHandler {
08238     protected:
08239         int             m_length;       
08240         int             m_allocated;    
08241         char *          m_string;       
08243     public:
08245         TK_URL () : BBaseOpcodeHandler (TKE_URL),
08246                                     m_length (0), m_allocated (0), m_string (0) {}
08247         ~TK_URL();
08248 
08249         TK_Status   Read (BStreamFileToolkit & tk) alter;
08250         TK_Status   Write (BStreamFileToolkit & tk) alter;
08251         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08252 
08253         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08254         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08255 
08256         void        Reset () alter;
08257 
08259         void            SetString (char const * string) alter;
08261         void            SetString (int length) alter;
08263         char const *    GetString () const                  { return m_string;      }
08265         char alter *    GetString () alter                  { return m_string;      }
08266 };
08267 
08268 
08270 
08276 class BBINFILETK_API TK_External_Reference : public BBaseOpcodeHandler {
08277     protected:
08278         int             m_length;       
08279         int             m_allocated;    
08280         char *          m_string;       
08282     public:
08283         TK_External_Reference () : BBaseOpcodeHandler (TKE_External_Reference),
08284                                     m_length (0), m_allocated (0), m_string (0) {}
08285         ~TK_External_Reference();
08286 
08287         TK_Status   Read (BStreamFileToolkit & tk) alter;
08288         TK_Status   Write (BStreamFileToolkit & tk) alter;
08289         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08290 
08291         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter; 
08292         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter; 
08293 
08294         TK_Status   Execute (BStreamFileToolkit & tk) alter;
08295         void        Reset () alter;
08296 
08298         void            SetString (char const * string) alter;
08300         void            SetString (int length) alter;
08302         char const *    GetString () const                  { return m_string;      }
08304         char alter *    GetString () alter                  { return m_string;      }
08305 };
08306 
08307 
08309 
08315 class BBINFILETK_API TK_External_Reference_Unicode : public BBaseOpcodeHandler {
08316     protected:
08317         int             m_length;       
08318         int             m_allocated;    
08319         wchar_t *       m_string;       
08321     public:
08322         TK_External_Reference_Unicode () : BBaseOpcodeHandler (TKE_External_Reference_Unicode),
08323                                     m_length (0), m_allocated (0), m_string (0) {}
08324         ~TK_External_Reference_Unicode();
08325 
08326         TK_Status   Read (BStreamFileToolkit & tk) alter;
08327         TK_Status   Write (BStreamFileToolkit & tk) alter;
08328         TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
08329 
08330         TK_Status   Execute (BStreamFileToolkit & tk) alter;
08331         void        Reset () alter;
08332 
08334         void            SetString (__wchar_t const * string) alter;
08335 #ifdef _MSC_VER
08336         void            SetString (unsigned short const * string) alter;
08337 #endif
08338 
08339         void            SetString (int length) alter;
08341         wchar_t const *    GetString () const                  { return m_string;      }
08343         wchar_t alter *    GetString () alter                  { return m_string;      }
08344 };
08345 
08346 
08347 #endif //BOPCODE_HANDLER
08348