BOpcodeHandler.h

Go to the documentation of this file.
00001 //
00002 // Copyright (c) 2000 by Tech Soft America, LLC.
00003 // The information contained herein is confidential and proprietary to
00004 // Tech Soft America, LLC., and considered a trade secret as defined under
00005 // civil and criminal statutes.  Tech Soft America 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 America, LLC. is granted only under a
00009 // written non-disclosure agreement, expressly prescribing the scope and
00010 // manner of such use.
00011 //
00012 //
00013 //  Copyright (c) 1996-2006 by Autodesk, Inc.
00014 //
00015 //  By using this code, you are agreeing to the terms and conditions of
00016 //  the License Agreement included in the documentation for this code.
00017 //
00018 //  AUTODESK MAKES NO WARRANTIES, EXPRESS OR IMPLIED,
00019 //  AS TO THE CORRECTNESS OF THIS CODE OR ANY DERIVATIVE
00020 //  WORKS WHICH INCORPORATE IT.
00021 //
00022 //  AUTODESK PROVIDES THE CODE ON AN "AS-IS" BASIS
00023 //  AND EXPLICITLY DISCLAIMS ANY LIABILITY, INCLUDING
00024 //  CONSEQUENTIAL AND INCIDENTAL DAMAGES FOR ERRORS,
00025 //  OMISSIONS, AND OTHER PROBLEMS IN THE CODE.
00026 //
00027 //  Use, duplication, or disclosure by the U.S. Government is subject to
00028 //  restrictions set forth in FAR 52.227-19 (Commercial Computer Software
00029 //  Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) (Rights in Technical
00030 //  Data and Computer Software), as applicable.
00031 //
00032 //
00033 // $Header: //DWF/Working_Area/Willie.Zhu/w3dtk/BOpcodeHandler.h#1 $
00034 //
00035 
00036 #ifndef BOPCODE_HANDLER
00037 #define BOPCODE_HANDLER
00038 
00039 #ifndef BBINFILETK_TOOLKIT
00040     #include "dwf/Toolkit.h"
00041     #include "dwf/w3dtk/BStream.h"
00042     #include "dwf/w3dtk/BStreamFileToolkit.h"
00043     #include "dwf/w3dtk/W3DOpcodeHandler.h"
00044     #include "dwf/w3dtk/utility/vlist.h"
00045 #else
00046     #define _W3DTK_API
00047 #endif
00048 
00049 #ifdef __APPLE_CC__
00050         #ifdef __i386__
00051                 #undef STREAM_BIGENDIAN
00052         #else
00053                 #define STREAM_BIGENDIAN
00054         #endif
00055 #endif
00056 
00057 
00058 #ifndef POINTER_SIZED_INT
00059 #if defined(WIN64) || defined(_M_X64) || defined(_WIN64)
00060 #   define POINTER_SIZED_INT __int64
00061 #   define POINTER_SIZED_UINT unsigned __int64
00062 #else
00063 #   define POINTER_SIZED_INT long
00064 #   define POINTER_SIZED_UINT unsigned long
00065 #endif
00066 #endif
00067 
00069 
00072 
00073 
00093 class BBINFILETK_API2 BBaseOpcodeHandler : public BControlledMemoryObject
00094                                          , public W3DOpcodeHandler {
00095         protected:
00096                 int             m_stage;        
00097                 int             m_progress;     
00098                 unsigned char   m_opcode;       
00099                 bool                    m_needs_tag;    
00100 
00101 
00102                 int             m_debug_length;   
00103                 int             m_debug_allocated;
00104                 char *          m_debug_string;   
00106                 char *                  m_ascii_buffer;
00107                 int                             m_ascii_size;
00108                 int                             m_ascii_length;
00109 
00110                 int                             m_ascii_stage;
00111                 int                             m_ascii_progress;       
00112                 unsigned char   m_byte;       
00113                 unsigned short  m_unsigned_short;
00114                 int                             m_int;
00115                 char                    m_char;
00116         public:
00122                 BBaseOpcodeHandler (int op)
00123                         : m_stage (0), m_progress (0), m_opcode ((unsigned char)op), m_needs_tag (false),
00124                           m_debug_length (0), m_debug_allocated (0), m_debug_string (0),
00125 
00126                           m_ascii_buffer (0), m_ascii_size (0), m_ascii_length (0), m_ascii_stage (0), m_ascii_progress(0),
00127                           m_byte(0), m_unsigned_short(0), m_int(0), m_char('\0')
00128                            {}
00129                 virtual ~BBaseOpcodeHandler ();
00130 
00131 
00135         virtual void serialize( const void* pTag = NULL )
00136             throw( DWFException );
00137 
00145                 virtual TK_Status   Read (BStreamFileToolkit & tk) alter = 0;
00146 
00154                 virtual TK_Status   Write (BStreamFileToolkit & tk) alter = 0;
00155 
00163                 virtual TK_Status   Execute (BStreamFileToolkit & tk) alter;
00164 
00174                 virtual TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant = 0) alter;
00175 
00185                 virtual TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter;
00186 
00192                 virtual void        Reset (void) alter;
00193     
00198                 virtual bool        Match_Instance (BStreamFileToolkit const & tk, Recorded_Instance alter * instance) alter;
00199 
00200 
00202                 unsigned char       Opcode (void) const { return m_opcode; }
00203 
00208                 int                 Pass (BStreamFileToolkit & tk) const { return tk.pass(); }
00209 
00214                 TK_Status           Tag (BStreamFileToolkit & tk, int variant= -1) const   { return tk.tag(variant); }
00215 
00219                 bool                Tagging (BStreamFileToolkit & tk) const   { return  m_needs_tag || tk.GetWriteFlags(TK_Force_Tags) != 0; }
00223                 //void                SetNeedsTag (bool n) alter        { m_needs_tag = n; }
00224 
00228                 //bool                NeedsTag (void) const     { return m_needs_tag; }
00229 
00236                 virtual TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const   { *handler = 0; return tk.Error(); }
00237 
00242                 void            SetDebug (char const * segment) alter;
00243 
00248                 void            SetDebug (int length) alter;
00249 
00253                 char const *    GetDebugString (void) const                           { return m_debug_string; }
00258                 char alter *    GetDebugString (void) alter               { return m_debug_string; }
00259 
00263                 void            LogDebug (BStreamFileToolkit & tk, char const * string = 0) alter;
00264 
00265         protected:
00266                 // various means of pulling data from the toolkit buffer
00267                 // Note: format conversion is safe to do in output buffer
00268 
00270                 TK_Status   GetData (BStreamFileToolkit & tk, char * b, int n) alter    { return tk.read (b, n); }
00271 
00273                 TK_Status   GetData (BStreamFileToolkit & tk, short * s, int n) alter   {
00274                                                 TK_Status   status;
00275                                                 if ((status = GetData (tk, (char *)s, n * (int)sizeof (short))) == TK_Normal)
00276                                                         fix (s, n);
00277                                                 return status;
00278                                         }
00279 
00281                 TK_Status   GetData (BStreamFileToolkit & tk, int * i,   int n) alter   {
00282                                                 TK_Status   status;
00283                                                 if ((status = GetData (tk, (char *)i, n * (int)sizeof (int))) == TK_Normal)
00284                                                         fix (i, n);
00285                                                 return status;
00286                                         }
00287 
00289                 TK_Status   GetData (BStreamFileToolkit & tk, float * f, int n) alter   {
00290                                                 TK_Status   status;
00291                                                 if ((status = GetData (tk, (char *)f, n * (int)sizeof (float))) == TK_Normal)
00292                                                         fix_in (f, n);
00293                                                 return status;
00294                                         }
00295 
00297                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned char * b, int n) alter   { return GetData (tk, (char *)b,  n); }
00298 
00300                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned short * s, int n) alter  { return GetData (tk, (short *)s, n); }
00301 
00303                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned int * i, int n) alter    { return GetData (tk, (int *)i,   n); } 
00304 
00306                 TK_Status   GetData (BStreamFileToolkit & tk, char & c) alter                   { return GetData (tk, &c, 1); }
00307 
00309                 TK_Status   GetData (BStreamFileToolkit & tk, short & s) alter                  { return GetData (tk, &s, 1); }
00310 
00312                 TK_Status   GetData (BStreamFileToolkit & tk, int & i) alter                    { return GetData (tk, &i, 1); }
00313 
00315                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned char & b) alter          { return GetData (tk, &b, 1); }
00316 
00318                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned short & s) alter         { return GetData (tk, &s, 1); }
00319 
00321                 TK_Status   GetData (BStreamFileToolkit & tk, unsigned int & i) alter           { return GetData (tk, &i, 1); }
00322 
00324                 TK_Status   GetData (BStreamFileToolkit & tk, float & f) alter                  { return GetData (tk, &f, 1); }
00325 
00326                 TK_Status   SkipNewlineAndTabs(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00327                 TK_Status   ReadAsciiLine(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00328                 TK_Status       ReadAsciiWord(BStreamFileToolkit & tk, unsigned int* readSize=0) alter;
00329                 TK_Status   ReadEndOpcode(BStreamFileToolkit & tk) alter;
00330                 bool            RemoveAngularBrackets(char* string) alter;
00331                 bool            RemoveQuotes(char* string) alter;
00332                 TK_Status   Read_Referenced_Segment(BStreamFileToolkit & tk, int &i_progress) alter;
00333 
00334                 //TK_Status   GetAsciiData(BStreamFileToolkit & tk, float * rFloats,    unsigned int n) alter;
00335                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, int * rInts,          unsigned int n) alter;
00336                 //TK_Status   GetAsciiData(BStreamFileToolkit & tk, short * rShorts,    unsigned int n) alter;
00337 
00338                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned char& value)alter;
00339                 TK_Status       GetAsciiData(BStreamFileToolkit & tk, const char * tag, char& value)alter;
00340                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned short& value)alter;
00341                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, short& value)alter;
00342                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, int& value)alter;
00343                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, float& value)alter;
00344 
00345                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, float * rFloats, unsigned int n) alter;
00346                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, char * m_string, unsigned int n) alter;
00347                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, unsigned char * m_string, unsigned int n) alter;
00348                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, int * rInts,     unsigned int n) alter;
00349                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag, short * rShorts, unsigned int n) alter;
00350                 TK_Status   GetAsciiData(BStreamFileToolkit & tk, const char * tag,     unsigned short * rShorts, unsigned int n) alter;
00351                 TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, unsigned char &value) alter;
00352                 TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, int &value) alter;
00353                 TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, char &value) alter;
00354                 TK_Status   GetAsciiHex(BStreamFileToolkit & tk,  const char * tag, unsigned short &value) alter;
00355                 TK_Status   GetAsciiImageData(BStreamFileToolkit & tk, const char * tag, unsigned char * rValues, unsigned int n) alter;
00356 
00358                 TK_Status   LookatData (BStreamFileToolkit & tk, unsigned char & b) alter       { return tk.lookat ((char &)b); }
00359 
00360                 // various means of putting data into the toolkit buffer
00361                 // Note: format conversion is NOT safe in input buffer -- use temps
00362 
00364                 TK_Status   PutData (BStreamFileToolkit & tk, char const * b, int n) alter    { return tk.write (b, n); }
00365 
00367                 TK_Status   PutData (BStreamFileToolkit & tk, short const * s, int n) alter    {
00368                                                 #ifdef STREAM_BIGENDIAN
00369                                                         short *     buffer = new short [n];
00370                                                         short *     tmp = buffer;
00371                                                         TK_Status   status;
00372                                                         int         i;
00373                                                         for (i=0; i<n; ++i)
00374                                                                 *tmp++ = flip (*s++);
00375                                                         status = PutData (tk, (char const *)buffer, n * (int)sizeof (short));
00376                                                         delete [] buffer;
00377                                                         if (status != TK_Normal)
00378                                                                 return status;
00379                                                         return TK_Normal;
00380                                                 #else
00381                                                         return PutData (tk, (char const *)s, n * (int)sizeof (short));
00382                                                 #endif
00383                                         }
00384 
00386                 TK_Status   PutData (BStreamFileToolkit & tk, int const * i, int n) alter    {
00387                                                 #ifdef STREAM_BIGENDIAN
00388                                                         int *       buffer = new int [n];
00389                                                         int *       tmp = buffer;
00390                                                         TK_Status   status;
00391                                                         int         j;
00392                                                         for (j=0; j<n; ++j)
00393                                                                 *tmp++ = flip (*i++);
00394                                                         status = PutData (tk, (char const *)buffer, n * (int)sizeof (int));
00395                                                         delete [] buffer;
00396                                                         if (status != TK_Normal)
00397                                                                 return status;
00398                                                         return TK_Normal;
00399                                                 #else
00400                                                         return PutData (tk, (char const *)i, n * (int)sizeof (int));
00401                                                 #endif
00402                                         }
00403 
00405                 TK_Status   PutData (BStreamFileToolkit & tk, float const * f, int n) alter    {
00406                                                 #if defined(NON_IEEE) || defined(STREAM_BIGENDIAN)
00407                                                         float *     buffer = new float [n];
00408                                                         float *     tmp = buffer;
00409                                                         TK_Status   status;
00410                                                         int         i;
00411                                                         for (i=0; i<n; ++i) {
00412                                                                 *tmp = *f++;
00413                                                                 fix_out (tmp++, 1);
00414                                                         }
00415                                                         status = PutData (tk, (char const *)buffer, n * (int)sizeof (float));
00416                                                         delete [] buffer;
00417                                                         if (status != TK_Normal)
00418                                                                 return status;
00419                                                         return TK_Normal;
00420                                                 #else
00421                                                         return PutData (tk, (char const *)f, n * (int)sizeof (float));
00422                                                 #endif
00423                                         }
00424 
00426                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned char const * b, int n) alter    { return PutData (tk, (char const *)b,  n); }
00427 
00429                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned short const * s, int n) alter   { return PutData (tk, (short const *)s, n); }
00430                         
00432                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned int const * i, int n) alter     { return PutData (tk, (int const *)i,   n); }
00433 
00435                 TK_Status   PutData (BStreamFileToolkit & tk, char const & c) alter                    { return PutData (tk, &c, 1); }
00436 
00438                 TK_Status   PutData (BStreamFileToolkit & tk, short const & s) alter                   { return PutData (tk, &s, 1); }
00439 
00441                 TK_Status   PutData (BStreamFileToolkit & tk, int const & i) alter                     { return PutData (tk, &i, 1); }
00442 
00444                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned char const & b) alter           { return PutData (tk, &b, 1); }
00445 
00447                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned short const & s) alter          { return PutData (tk, &s, 1); }
00448 
00450                 TK_Status   PutData (BStreamFileToolkit & tk, unsigned int const & i) alter            { return PutData (tk, &i, 1); }
00451                 
00453                 TK_Status   PutData (BStreamFileToolkit & tk, float const & f) alter                   { return PutData (tk, &f, 1); }
00454 
00456                 TK_Status   PutOpcode (BStreamFileToolkit & tk, int adjust = 1) alter {
00457                                                 TK_Status       status;
00458                                                 unsigned int    sequence;
00459 
00460                                                 if ((status = PutData (tk, Opcode ())) != TK_Normal)
00461                                                         return status;
00462 
00463                                                 tk.adjust_written (adjust);
00464 
00465                                                 sequence = tk.NextOpcodeSequence();
00466                                                 if (tk.GetLogging())
00467                                                         log_opcode (tk, sequence, Opcode());
00468 
00469                                                 return status;
00470                                         }
00471 
00472 
00474                 TK_Status   PutAsciiOpcode (BStreamFileToolkit & tk, int adjust = 1, bool is_end = false, bool want_newline = true) alter;
00475         //      TK_Status   PutAsciiOpcode (BStreamFileToolkit & tk, int adjust = 1) alter;
00476 
00478                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, char const * b, int n) alter;
00479 
00481                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, short const * s, int n) alter;
00482 
00484                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, int const * i, int n) alter;
00485 
00487                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, float const * f, int n) alter;
00488 
00490                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned char const * b, int n) alter;
00491 
00493                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned short const * s, int n) alter;
00494 
00496                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned int const * i, int n) alter;
00497 
00499                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, char const & c) alter;
00500 
00502                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, short const & s) alter;
00503 
00505                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00506 
00508                 TK_Status   PutAsciiFlag (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00509 
00511                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned char const & b) alter;
00512 
00514                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned short const & s) alter;
00515 
00517                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, unsigned int const & i) alter;
00518 
00520                 TK_Status   PutAsciiData (BStreamFileToolkit & tk, char const *tag, float const & f) alter;
00521 
00522                 TK_Status   PutAsciiMask (BStreamFileToolkit & tk,char const *tag, int const & i) alter;
00523 
00524                 TK_Status   PutAsciiHex (BStreamFileToolkit & tk, char const *tag, int const & i) alter;
00525 
00526                 TK_Status   PutStartXMLTag (BStreamFileToolkit & tk, char const *tag) alter ;
00527 
00528                 TK_Status   PutEndXMLTag (BStreamFileToolkit & tk, char const *tag) alter ;
00529 
00530 
00531                 /* note -- fix for int types will work during read OR write phase, but floats need separate
00532                    routines for native->IEEE and IEEE->native
00533                 */
00535                 short       flip (short s) {
00536                                                 return (short)(((s >> 8) & 0x00FF) | (s << 8));
00537                                         }
00539                 int         flip (int i) {
00540                                                 return ((i >> 24) & 0x000000FF) | ((i >> 8) & 0x0000FF00) |
00541                                                            ((i <<  8) & 0x00FF0000) |  (i << 24);
00542                                         }
00543 
00544 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00545   #ifndef UNREFERENCED
00546         #define UNREFERENCED(x) (void)(x)
00547   #endif
00548 #endif 
00549 
00551                 void        fix (int * i, int n) {
00552                                                 #ifdef STREAM_BIGENDIAN
00553                                                 while (n--){
00554                                                                 *i = flip (*i);
00555                                                                 i++;
00556                                                 }
00557                                                 #else
00558                                                 UNREFERENCED(i);
00559                                                 UNREFERENCED(n);
00560                                                 #endif
00561                                         }
00563                 void        fix (short * s, int n) {
00564                                                 #ifdef STREAM_BIGENDIAN
00565                                                         while (n--){
00566                                                                 *s = flip (*s);
00567                                                                 s++;
00568                                                                 }
00569                                                 #else
00570                                                 UNREFERENCED(s);
00571                                                 UNREFERENCED(n);
00572                                                 #endif
00573                                         }
00574 
00576                 void        fix_in (float * f, int n) {
00577                                                 #ifdef NON_IEEE
00578                                                         // need to re-interpret from IEEE to native format
00579                                                 #endif
00580 
00581                                                 #ifdef STREAM_BIGENDIAN
00582                                                 int * i = (int*) f;
00583                                                 while (n--){
00584                                                                 *i = flip (*i);
00585                             
00586                                                                 i++;
00587                                                 }
00588                                                 #else
00589                                                 UNREFERENCED(f);
00590                                                 UNREFERENCED(n);
00591                                                 #endif
00592                                         }
00594                 void        fix_out (float * f, int n) {
00595                                                 #ifdef NON_IEEE
00596                                                         // need to re-interpret from native format to IEEE
00597                                                 #endif
00598 
00599                                                 #ifdef STREAM_BIGENDIAN
00600                                                 int * i = (int*) f;
00601                                                 while (n--){
00602                                                                 *i = flip (*i);
00603                                                                 i++;
00604                                                 }
00605                                                 #else
00606                                                 UNREFERENCED(f);
00607                                                 UNREFERENCED(n);
00608                                                 #endif
00609                                         }
00610 
00612                 void        log_opcode (BStreamFileToolkit & tk, unsigned int sequence, unsigned char opcode) alter;
00613 
00614 
00615                 /* common conversions
00616                    these two are for converting between floats [0.0,1.0] and unsigned chars [0,255]
00617                 */
00619                 void        floats_to_bytes (float const * in, unsigned char alter * out, int count) const {
00620                                                 while (count-- > 0)
00621                                                         *out++ = char (*in++ * 255.999f);
00622                                         }
00624                 void        bytes_to_floats (unsigned char const * in, float alter * out, int count) const {
00625                                                 while (count-- > 0)
00626                                                         *out++ = float (*in++) * (1.0f/255.0f);
00627                                         }
00628 
00629                 // access to toolkit utility functions
00631                 void        add_segment (BStreamFileToolkit & tk, ID_Key key) alter     { tk.add_segment (key); }
00633                 ID_Key      remove_segment (BStreamFileToolkit & tk) alter              { return tk.remove_segment(); }
00635                 void        set_last_key (BStreamFileToolkit & tk, ID_Key key) alter    { tk.set_last_key (key); }
00637                 ID_Key      last_key (BStreamFileToolkit & tk) const {
00638                                                 if (tk.m_last_keys_used == 1) 
00639                                                         return tk.m_last_keys[0];
00640                                                 else 
00641                                                         return -1; 
00642                                         } 
00644                 void        adjust_written (BStreamFileToolkit & tk, int count) alter   { tk.adjust_written (count); }
00646                 void        increase_nesting (BStreamFileToolkit & tk, int amount=1) alter  { tk.increase_nesting (amount); }
00648                 void        decrease_nesting (BStreamFileToolkit & tk, int amount=1) alter  { tk.decrease_nesting (amount); }
00649 
00653                 void        Revisit (BStreamFileToolkit & tk, float priority=0.0f, int variant=0) const  { tk.revisit (Opcode(), priority, variant); }
00654 
00658                 BBaseOpcodeHandler alter *  Opcode_Handler (BStreamFileToolkit & tk, unsigned char op) const
00659                                                                                 { return tk.opcode_handler (op); }
00660 
00662                 void        Record_Instance (BStreamFileToolkit & tk, ID_Key key, int variant,
00663                                                                          int val1, int val2, int val3) const {
00664                                                 tk.record_instance (key, variant, this, val1, val2, val3);
00665                                         }
00667                 bool        Find_Instance (BStreamFileToolkit & tk, int val1, int val2, int val3) alter {
00668                                                 return tk.find_instance (this, val1, val2, val3);
00669                                         }
00670 
00672                 void        Remember_Item (BStreamFileToolkit & tk, ID_Key key) const  { tk.remember_item(key); }
00674                 bool        Find_Item (BStreamFileToolkit & tk, ID_Key key) const      { return tk.find_item(key); }
00675 
00677                 bool        validate_count (int count, int limit = 1<<24) const { return 0 <= count && count <= limit; }
00678 
00682         static float read_float (char const *cp, char const * alter * newcpp = 0);
00684         static float read_float (char const *cp, char alter * alter * newcpp)
00685                                         { return read_float (cp, (char const **)newcpp); }
00687         static char * write_float (char * buffer, double f);
00688 };
00689 
00691 #define IMPLEMENT_CLONE(class_name)                                                                                                                                                     \
00692                         TK_Status class_name::Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **newhandler) const {  \
00693                                 *newhandler = new class_name;                                                                                                                           \
00694                                 if (*newhandler != null)                                                                                                                                        \
00695                                         return TK_Normal;                                                                                                                                               \
00696                                 else                                                                                                                                                                            \
00697                                         return tk.Error ("memory allocation in" #class_name "::clone failed");                                  \
00698                         }                                                                                                                                                                                          //
00699 
00700 #define IMPLEMENT_CLONE_OPCODE(class_name)                                                                                                                                      \
00701                         TK_Status class_name::Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **newhandler) const {  \
00702                                 *newhandler = new class_name (Opcode());                                                                                                        \
00703                                 if (*newhandler != null)                                                                                                                                        \
00704                                         return TK_Normal;                                                                                                                                               \
00705                                 else                                                                                                                                                                            \
00706                                         return tk.Error ("memory allocation in" #class_name "::clone failed");                                  \
00707 }                                                                                                                                                                                                                  //
00708 
00709 
00710 
00712 
00720 // Additions need to be reflected in the 'opcode_string' table in BOpcodeHandler.cpp
00721 enum TKE_Object_Types {
00722         TKE_Termination                                 = '\x00',               
00723         TKE_Pause                                               = '\x01',               
00724 
00725         TKE_Comment                                             = ';',                  
00726 
00727         TKE_Font                                                = 'f',                  
00728         TKE_Texture                                             = 't',                  
00729 
00730         TKE_Open_Segment                                = '(',                  
00731         TKE_Close_Segment                               = ')',                  
00732         TKE_Reopen_Segment                              = 's',                  
00733         TKE_Include_Segment                             = '<',                  
00734         TKE_Style_Segment                               = '{',                  
00735 
00736         TKE_Geometry_Attributes                 = ':',                  
00737         TKE_Renumber_Key_Global                 = 'K',                  
00738         TKE_Renumber_Key_Local                  = 'k',                  
00739         TKE_Priority                                    = '0',                  
00740         TKE_Tag                                                 = 'q',                  
00741 
00742         TKE_Bounding                                    = 'b',                  
00743         TKE_Bounding_Info                               = 'B',                  
00744         TKE_Callback                                    = '\x07',               
00745         TKE_Camera                                              = '>',                  
00746         TKE_Conditions                                  = '?',                  
00747         TKE_Color                                               = '"',                  
00748         TKE_Color_By_Index                              = '\x08',               
00749         TKE_Color_By_Index_16                   = '\x09',               
00750         TKE_Color_By_FIndex                             = '\x0A',               
00751         TKE_Color_RGB                                   = '~',                  
00752         TKE_Color_By_Value                              = '\x0B',               
00753         TKE_Color_Map                                   = '\x0C',               
00754         TKE_Edge_Pattern                                = '\x0D',               
00755         TKE_Edge_Weight                                 = '\x0E',               
00756         TKE_Face_Pattern                                = 'P',                  
00757         TKE_Handedness                                  = 'h',                  
00758         TKE_Heuristics                                  = 'H',                  
00759         TKE_Line_Pattern                                = '-',                  
00760         TKE_Line_Weight                                 = '=',                  
00761         TKE_Marker_Size                                 = '+',                  
00762         TKE_Marker_Symbol                               = '@',                  
00763         TKE_Modelling_Matrix                    = '%',                  
00764         TKE_LOD                                                 = '\x19',               
00765         TKE_Rendering_Options                   = 'R',                  
00766         TKE_Selectability                               = '!',                  
00767         TKE_Text_Alignment                              = '*',                  
00768         TKE_Text_Font                                   = 'F',                  
00769         TKE_Text_Path                                   = '|',                  
00770         TKE_Text_Spacing                                = ' ',                  
00771         TKE_Texture_Matrix                              = '$',                  
00772         TKE_Unicode_Options                             = '\x16',               
00773         TKE_User_Index                                  = 'n',                  
00774         TKE_User_Options                                = 'U',                  
00775         TKE_User_Value                                  = 'v',                  
00776         TKE_Visibility                                  = 'V',                  
00777         TKE_Window                                              = 'W',                  
00778         TKE_Window_Frame                                = '#',                  
00779         TKE_Window_Pattern                              = 'p',                  
00780         TKE_Glyph_Definition                    = 'j',                  
00781         TKE_Line_Style                                  = 'J',                  
00782 
00783         TKE_Infinite_Line                               = '`',          
00784         TKE_Area_Light                                  = 'a',                  
00785         TKE_Circle                                              = 'C',                  
00786         TKE_Circular_Arc                                = 'c',                  
00787         TKE_Circular_Chord                              = '\\',                 
00788         TKE_Circular_Wedge                              = 'w',                  
00789         TKE_Cutting_Plane                               = '/',                  
00790         TKE_Cylinder                                    = 'Y',                  
00791         TKE_Distant_Light                               = 'd',                  
00792         TKE_Ellipse                                             = 'E',                  
00793         TKE_Elliptical_Arc                              = 'e',                  
00794         TKE_Grid                                                = 'g',                  
00795         TKE_Image                                               = 'i',                  
00796         TKE_Line                                                = 'l',                  
00797         TKE_Local_Light                                 = '.',                  
00798         TKE_Marker                                              = 'X',                  
00799         TKE_Mesh                                                = 'M',                  
00800         TKE_NURBS_Curve                                 = 'N',                  
00801         TKE_NURBS_Surface                               = 'A',                  
00802         TKE_PolyCylinder                                = 'Q',                  
00803         TKE_Polygon                                             = 'G',                  
00804         TKE_Polyline                                    = 'L',                  
00805         TKE_PolyPolyline                                = '\x10',               
00806         TKE_Reference                                   = 'r',                  
00807         TKE_Shell                                               = 'S',                  
00808         TKE_Sphere                                              = '\x1a',               
00809         TKE_Spot_Light                                  = '^',                  
00810         TKE_Text                                                = 'T',                  
00811         TKE_Text_With_Encoding                  = 'x',                  
00812 
00813         TKE_Start_User_Data                             = '[',                  
00814         TKE_Stop_User_Data                              = ']',                  
00815         TKE_XML                                                 = '\x18',               
00816         TKE_External_Reference                  = '\x12',               
00817         TKE_URL                                                 = '\x15',               
00818 
00819         TKE_Start_Compression                   = 'Z',                  
00820         TKE_Stop_Compression                    = 'z',                  
00821 
00822         TKE_Repeat_Object                               = '&',                  
00823         TKE_View                                                = '}',                  
00824         TKE_Clip_Rectangle                              = 'o',                  
00825         TKE_Clip_Region                                 = 'O',                  
00826         TKE_Complex_Clip_Region                 = '\x0F',               
00827 
00828         TKE_File_Info                                   = 'I',                  
00829         TKE_Dictionary                                  = 'D',                  
00830         TKE_Dictionary_Locater                  = '_',                  
00831         TKE_Thumbnail                                   = '\x14',               
00832         TKE_Delete_Object                               = '\x7F',               
00833 
00834         TKE_Tag_Implicit                                = TKE_Tag,              
00835         TKE_Streaming_Mode                              = ',',                  
00836 
00837         TKE_First_User_Opcode                   = '\xA0',               
00838     
00839     //
00840     //
00841     // W3D Extensions
00842     //
00843     //
00844 
00845     W3DE_Image                      = 0xE0,
00846 
00847     //
00848     //
00849     //
00850 
00851 
00852         TKE_Last_User_Opcode                    = '\xEF',               
00853 
00854         TKE_Pseudo_Handler                              = '\xFE',               
00855         TKE_Extended_Code                               = '\xFF',               
00856 
00857         TKE_Close_Geometry_Attributes   = 0x39          
00858 };
00859 
00860 
00862 
00863 
00869 class BBINFILETK_API TK_Default : public BBaseOpcodeHandler {
00870         
00871         protected:
00872                 char            *m_opcode_buffer;
00873                 int          m_buffer_count;
00874 
00875         public:
00877                 TK_Default () : BBaseOpcodeHandler (TKE_Pseudo_Handler) {m_opcode_buffer = 0, m_buffer_count = 0;}
00878 
00879                 TK_Status   Read (BStreamFileToolkit & tk) alter;
00880                 
00881                 TK_Status   Write (BStreamFileToolkit & tk) alter;
00882 
00883 
00884                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
00885                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
00886 
00887     private:
00888         TK_Default(const TK_Default&);
00889         TK_Default& operator=(const TK_Default&);
00890 };
00891 
00897 class BBINFILETK_API TK_Unavailable : public BBaseOpcodeHandler {
00898         public:
00900                 TK_Unavailable (char opcode) : BBaseOpcodeHandler (opcode) {}
00901 
00902                 TK_Status   Read (BStreamFileToolkit & tk) alter;
00903                 TK_Status   Write (BStreamFileToolkit & tk) alter;
00904 
00905 private:
00906     TK_Unavailable(const TK_Unavailable&);
00907     TK_Unavailable& operator=(const TK_Unavailable&);
00908 };
00909 
00912 
00918 class BBINFILETK_API TK_Header : public BBaseOpcodeHandler {
00919         protected:
00921                 BBaseOpcodeHandler *    m_current_object;
00922 
00923         public:
00925                 TK_Header () : BBaseOpcodeHandler (TKE_Pseudo_Handler), m_current_object (0) {}
00926                 ~TK_Header();
00927 
00928                 TK_Status   Read (BStreamFileToolkit & tk) alter;
00929                 TK_Status   Write (BStreamFileToolkit & tk) alter;
00930 
00931 
00932                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
00933                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
00934 
00935 
00936                 void        Reset (void) alter;
00937 
00938 private:
00939     TK_Header(const TK_Header&);
00940     TK_Header& operator=(const TK_Header&);
00941 };
00942 
00943 
00945 
00951 class BBINFILETK_API TK_File_Info : public BBaseOpcodeHandler {
00952         protected:
00954                 int             m_flags;
00955 
00956         public:
00958                 TK_File_Info () : BBaseOpcodeHandler (TKE_File_Info), m_flags (0) {}
00959 
00960                 
00961                 TK_Status   Read (BStreamFileToolkit & tk) alter;
00962                 TK_Status   Write (BStreamFileToolkit & tk) alter;
00963                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
00964                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
00965                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
00966                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
00967 
00968 
00969                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
00970                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
00971 
00972 
00974                 void            SetFlags (int f) alter                  { m_flags = f;      }
00976                 int             GetFlags (void) alter                   { return m_flags;   }
00977 
00978 private:
00979     TK_File_Info(const TK_File_Info&);
00980     TK_File_Info& operator=(const TK_File_Info&);
00981 };
00982 
00983 
00985 
00993 class BBINFILETK_API TK_Comment : public BBaseOpcodeHandler {
00994     private:
00995         TK_Comment(const TK_Comment&);
00996         TK_Comment& operator=(const TK_Comment&);
00997 
00998         protected:
01000                 int             m_length;
01002                 char *          m_comment;
01003                 
01005                 void    set_comment (char const * comment) alter;
01007                 void    set_comment (int length) alter;
01008 
01009         public:
01011                 TK_Comment (char const * comment = 0);
01012                 ~TK_Comment();
01013 
01014                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01015                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01016                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01017 
01018                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01019                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01020                 TK_Status   ExecuteAscii (BStreamFileToolkit & tk) alter;
01023                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) {
01024                                                 (void)tk; (void)key; (void)variant;
01025                                                 return TK_Normal;
01026                                         }
01027                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01028                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01029                 void        Reset (void) alter;
01030 
01035                 void            SetComment (char const * comment) alter { set_comment (comment); }
01040                 void            SetComment (int length) alter           { set_comment (length);  }
01044                 char const *    GetComment (void) const                 { return m_comment; }
01049                 char alter *    GetComment (void) alter                 { return m_comment; }
01050 };
01051 
01052 
01054 
01062 class BBINFILETK_API TK_Terminator : public BBaseOpcodeHandler {
01063     private:
01064         TK_Terminator(const TK_Terminator&);
01065         TK_Terminator& operator=(const TK_Terminator&);
01066 
01067         public:
01069                 TK_Terminator (char opcode, bool is_file_terminator = true) : BBaseOpcodeHandler (opcode), 
01070                                                                                                                                         m_terminate_file(is_file_terminator) {}
01071 
01072                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01073                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01074                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01075 
01076 
01077                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01078                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01079 
01080         protected:
01082                 // meant to terminate the file or something else (viz. LOD collection)
01083                 bool            m_terminate_file;
01084 };
01085 
01086 
01088 
01095 class BBINFILETK_API TK_Compression : public BBaseOpcodeHandler {
01096     private:
01097         TK_Compression(const TK_Compression&);
01098         TK_Compression& operator=(const TK_Compression&);
01099 
01100         public:
01102                 TK_Compression (char opcode) : BBaseOpcodeHandler (opcode) {}
01103 
01104                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01105                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01106 
01107                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01108                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01109                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01110                 TK_Status   ExecuteAscii (BStreamFileToolkit & tk) alter;
01111                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
01112                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01113                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01114 };
01115 
01117 
01119 
01129 class BBINFILETK_API TK_Open_Segment : public BBaseOpcodeHandler {
01130     private:
01131         TK_Open_Segment(const TK_Open_Segment&);
01132         TK_Open_Segment& operator=(const TK_Open_Segment&);
01133 
01134         protected:
01135                 int             m_length;   
01136                 int             m_allocated;
01137                 char *          m_string;   
01139 
01140                 void    set_segment (char const * segment) alter;
01142                 void    set_segment (int length) alter;
01143 
01144         public:
01146                 TK_Open_Segment () : BBaseOpcodeHandler (TKE_Open_Segment), m_length (0), m_allocated (0), m_string (0) {}
01147                 ~TK_Open_Segment();
01148 
01149                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01150                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01151                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01152 
01153                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01154                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01155                 void        Reset (void) alter;
01156 
01161                 void            SetSegment (char const * segment) alter { set_segment (segment); }
01162 
01167                 void            SetSegment (int length) alter           { set_segment (length); }
01168 
01172                 char const *    GetSegment (void) const                 { return m_string; }
01177                 char alter *    GetSegment (void) alter                 { return m_string; }
01178 };
01179 
01180 
01182 
01191 class BBINFILETK_API TK_Close_Segment : public BBaseOpcodeHandler {
01192     private:
01193         TK_Close_Segment(const TK_Close_Segment&);
01194         TK_Close_Segment& operator=(const TK_Close_Segment&);
01195 
01196         public:
01198                 TK_Close_Segment () : BBaseOpcodeHandler (TKE_Close_Segment) {}
01199 
01200                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01201                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01202                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01203 
01204                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01205                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01206 };
01207 
01208 
01209 
01211 
01223 class BBINFILETK_API TK_Reopen_Segment : public BBaseOpcodeHandler {
01224     private:
01225         TK_Reopen_Segment(const TK_Reopen_Segment&);
01226         TK_Reopen_Segment& operator=(const TK_Reopen_Segment&);
01227 
01228         protected:
01229                 int             m_index;   
01231         public:
01233                 TK_Reopen_Segment () : BBaseOpcodeHandler (TKE_Reopen_Segment), m_index (-1) {}
01234 
01235                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01236                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01237                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01238 
01239                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01240                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01241 
01243                 void         SetIndex (int i) alter      { m_index = i;      }
01245                 int          GetIndex (void) const       { return m_index;   }
01246 };
01247 
01248 
01250 
01258 class BBINFILETK_API TK_Referenced_Segment : public BBaseOpcodeHandler {
01259     private:
01260         TK_Referenced_Segment(const TK_Referenced_Segment&);
01261         TK_Referenced_Segment& operator=(const TK_Referenced_Segment&);
01262 
01263         protected:
01264                 int             m_length;               
01265                 int             m_allocated;            
01266                 char *          m_string;               
01267                 int             m_cond_length;          
01268                 int             m_cond_allocated;       
01269                 char *          m_condition;            
01271                 ID_Key          m_key;                  
01272                 BBaseOpcodeHandler *     m_referee;     
01273                 bool            m_follow;               
01274 
01275                 void    set_segment (char const * segment) alter;   
01276                 void    set_segment (int length) alter;             
01277 
01278         public:
01280                 TK_Referenced_Segment (unsigned char opcode);
01281                 ~TK_Referenced_Segment();
01282 
01283                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01284                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01285                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01286 
01287                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01288                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01289                 void        Reset (void) alter;
01290 
01295                 void            SetSegment (char const * segment) alter { set_segment (segment); }
01300                 void            SetSegment (int length) alter           { set_segment (length); }
01304                 char const *    GetSegment (void) const                 { return m_string; }
01309                 char alter *    GetSegment (void) alter                 { return m_string; }
01310 
01311 
01316                 void            SetCondition (char const * condition) alter;
01321                 void            SetCondition (int length) alter;
01325                 char const *    GetCondition (void) const                 { return m_condition; }
01330                 char alter *    GetCondition (void) alter                 { return m_condition; }
01331 
01332 
01334                 void            SetFollow (bool f) alter                { m_follow = f;     }
01336                 bool            GetFollow (void) alter                  { return m_follow;  }
01337 };
01338 
01339 
01340 class BBINFILETK_API TK_Reference : public BBaseOpcodeHandler {
01341         private:
01342         TK_Reference(const TK_Reference&);
01343         TK_Reference& operator=(const TK_Reference&);
01344 
01345         protected:
01346                 int                             m_index;                                
01347                 int             m_cond_length;          
01348                 int             m_cond_allocated;       
01349                 char *          m_condition;            
01351                 ID_Key          m_this_key;             
01352                 ID_Key          m_key;                  
01353                 BBaseOpcodeHandler *     m_referee;     
01354                 bool            m_follow;               
01355 
01356         public:
01358                 TK_Reference ();
01359                 ~TK_Reference();
01360 
01361                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01362                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01363                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01364 
01365                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01366                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01367                 void        Reset (void) alter;
01368 
01370                 void            SetIndex (int index) alter             { m_index = index;       }
01372                 ID_Key          GetIndex (void) alter                  { return m_index;        }
01373 
01378                 void            SetCondition (char const * condition) alter;
01383                 void            SetCondition (int length) alter;
01387                 char const *    GetCondition (void) const                 { return m_condition; }
01392                 char alter *    GetCondition (void) alter                 { return m_condition; }
01393 
01394 
01396                 void            SetFollow (bool f) alter                { m_follow = f;     }
01398                 bool            GetFollow (void) alter                  { return m_follow;  }
01399 };
01403 enum Instance_Options {
01404         Instance_By_Tristrip    = 0x01  
01405 };
01406 
01407 
01409 
01417 class BBINFILETK_API TK_Instance : public BBaseOpcodeHandler {
01418     private:
01419         TK_Instance(const TK_Instance&);
01420         TK_Instance& operator=(const TK_Instance&);
01421 
01422         protected:
01423                 int             m_from_index;   
01424                 int             m_from_variant; 
01425                 int             m_to_index;             
01426                 int             m_to_variant;   
01427                 int             m_options;              
01428                 float           m_matrix[16];   
01429 
01430         public:
01432                 TK_Instance (int from_index=0, int from_variant=0, int to_index=0, int to_variant=0,
01433                                          int options=0, float const * xform=0);  
01434 
01435                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01436                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01437                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01438 
01439                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01440                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01441 
01442                 void        Reset () alter;
01443 };
01444 
01446 
01449 class BBINFILETK_API TK_Delete_Object : public BBaseOpcodeHandler {
01450     private:
01451         TK_Delete_Object(const TK_Delete_Object&);
01452         TK_Delete_Object& operator=(const TK_Delete_Object&);
01453 
01454         protected:
01455                 int             m_index;   
01456 
01457         public:
01459                 TK_Delete_Object () : BBaseOpcodeHandler (TKE_Delete_Object), m_index (-1) {}
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 
01469                 void            SetIndex (int i) alter                                  { m_index = i;          }
01471                 int                     GetIndex (void) alter                                   { return m_index;       }
01472 };
01473 
01474 
01476 
01477 
01479 
01482 class BBINFILETK_API TK_LOD : public BBaseOpcodeHandler {
01483     private:
01484         TK_LOD(const TK_LOD&);
01485         TK_LOD& operator=(const TK_LOD&);
01486 
01487         protected:
01488                 int *m_num_primitives;              
01489                 BBaseOpcodeHandler ***m_primitives; 
01490                 int m_highest_level;                
01491                 int m_levels_allocated;             
01492                 int m_substage;                     
01493                 struct vlist_s *m_current_working;  
01494                 int m_current_level;                
01495 
01496                 TK_Status   ReadOneList (BStreamFileToolkit & tk) alter;  
01497 
01498         public:
01500                 TK_LOD () : BBaseOpcodeHandler (TKE_LOD) {
01501                         m_num_primitives = 0;
01502                         m_primitives = 0;
01503                         m_highest_level = 0;
01504                         m_levels_allocated = 0;
01505                         m_substage = 0;
01506                         m_current_working = 0;
01507                         m_current_level = 0;
01508                 }
01509                 ~TK_LOD();
01510 
01511                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01512                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01513                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01514 
01515                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01516                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01517 
01518                 void        Reset (void) alter;
01519 };
01521 #define TKLOD_ESCAPE 255
01522 
01523 
01525 
01527 
01532 class BBINFILETK_API TK_Geometry_Attributes : public BBaseOpcodeHandler {
01533     private:
01534         TK_Geometry_Attributes(const TK_Geometry_Attributes&);
01535         TK_Geometry_Attributes& operator=(const TK_Geometry_Attributes&);
01536 
01537         protected:
01538 
01539         public:
01541                 TK_Geometry_Attributes () : BBaseOpcodeHandler (TKE_Geometry_Attributes) {}
01542 
01543                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01544                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01545 
01546                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01547                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01548                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01549 };
01550 
01551 
01552 class BBINFILETK_API TK_Close_Geometry_Attributes : public BBaseOpcodeHandler {
01553     private:
01554         TK_Close_Geometry_Attributes(const TK_Close_Geometry_Attributes&);
01555         TK_Close_Geometry_Attributes& operator=(const TK_Close_Geometry_Attributes&);
01556 
01557         protected:
01558 
01559         public:
01561                 TK_Close_Geometry_Attributes () : BBaseOpcodeHandler (TKE_Close_Geometry_Attributes) {}
01562 
01563                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01564                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01565 
01566                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01567                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01568                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01569 };
01570 
01572 
01582 class BBINFILETK_API TK_Renumber : public BBaseOpcodeHandler {
01583     private:
01584         TK_Renumber(const TK_Renumber&);
01585         TK_Renumber& operator=(const TK_Renumber&);
01586 
01587         protected:
01588                 ID_Key          m_key; 
01589 
01590         public:
01594                 TK_Renumber (unsigned char opcode, ID_Key key = 0) : BBaseOpcodeHandler (opcode), m_key (key) {}  
01595 
01596                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01597                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01598                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
01599 
01600                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01601                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01603                 void            SetKey (ID_Key k) alter     { m_key = k;    }
01605                 ID_Key          GetKey (void) const         { return m_key; }
01606 };
01607 
01608 
01610 
01615 class BBINFILETK_API TK_Tag : public BBaseOpcodeHandler {
01616     private:
01617         TK_Tag(const TK_Tag&);
01618         TK_Tag& operator=(const TK_Tag&);
01619 
01620         protected:
01621 
01622         public:
01624                 TK_Tag (unsigned char opcode = TKE_Tag) : BBaseOpcodeHandler (opcode) {}
01625 
01626                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01627                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01628 
01629                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01630                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01631 
01632                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01633                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01634                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01635                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01636 };
01637 
01639 
01646 // Note: unlike most opcode handlers, this one does not contain its own data, it is primarily a
01647 // wrapper around the key <-> index translation table in the toolkit.
01648 class BBINFILETK_API TK_Dictionary : public BBaseOpcodeHandler {
01649     private:
01650         TK_Dictionary(const TK_Dictionary&);
01651         TK_Dictionary& operator=(const TK_Dictionary&);
01652 
01653         protected:
01654                 unsigned char   m_format;               
01655                 int             m_placeholder;          
01656                 unsigned char   m_present;              
01657                 int             m_number_of_items;      
01658 
01659                 Internal_Translator::Index_Key_Pair alter * m_item; 
01660 
01661         public:
01663                 TK_Dictionary () : BBaseOpcodeHandler (TKE_Dictionary), m_format (0) {}
01664 
01665                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01666                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01667 
01668                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01669                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01670 
01671                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01672                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01673                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01674                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01675                 void        Reset (void) alter;
01676 };
01677 
01678 
01680 
01687 class BBINFILETK_API TK_Dictionary_Locater : public BBaseOpcodeHandler {
01688     private:
01689         TK_Dictionary_Locater( const TK_Dictionary_Locater& );
01690         TK_Dictionary_Locater& operator=(const TK_Dictionary_Locater&);
01691 
01692         protected:
01693                 int             m_size;                 
01694                 int             m_offset;               
01695 
01696         public:
01698                 TK_Dictionary_Locater () : BBaseOpcodeHandler (TKE_Dictionary_Locater), m_offset (0) {}
01699 
01700                 TK_Status   Read (BStreamFileToolkit & tk) alter;
01701                 TK_Status   Write (BStreamFileToolkit & tk) alter;
01702 
01703                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
01704                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
01705 
01706                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
01707                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant=0) alter;
01708                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
01709                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
01710                 void        Reset (void) alter;
01711 
01713         void        SetSize (int size) alter        { m_size = size; }
01715         int         GetSize (void) const            { return m_size;   }
01717         void        SetOffset (int offset) alter    { m_offset = offset; }
01719         int         GetOffset (void) const          { return m_offset;   }
01720 };
01721 
01722 
01724 
01728 enum TKO_Geometry_Bits {
01729         // first byte is common/shared items, plus flag for extended bits
01730         TKO_Geo_Face            = 0x00000001, 
01731         TKO_Geo_Edge            = 0x00000002, 
01732         TKO_Geo_Line            = 0x00000004, 
01733         TKO_Geo_Marker          = 0x00000008, 
01734         TKO_Geo_Text            = 0x00000010, 
01735         TKO_Geo_Window          = 0x00000020, 
01736         TKO_Geo_Image           = 0x00000040, 
01737         TKO_Geo_Extended        = 0x00000080, 
01738         TKO_Geo_Extended_Mask   = 0xFFFFFF00, 
01739 
01740         // extras for color
01741         TKO_Geo_Ambient         = 0x00000100, 
01742         TKO_Geo_Light           = 0x00000200, 
01743         TKO_Geo_Face_Contrast   = 0x00000400, 
01744         TKO_Geo_Window_Contrast = 0x00000800, 
01745         TKO_Geo_Front           = 0x00001000, 
01746         TKO_Geo_Back            = 0x00002000, 
01747         TKO_Geo_Vertex          = 0x00004000, 
01748 
01749         TKO_Geo_Geom_Colors     = 0x0000701F, 
01750         TKO_Geo_Every_Colors    = 0x000073BF, 
01751         TKO_Geo_Extended_Colors = 0x00008000, 
01752         TKO_Geo_Extended_Colors_Mask
01753                                                         = 0xFFFF0000, 
01754 
01755         TKO_Geo_Edge_Contrast   = 0x00010000, 
01756         TKO_Geo_Line_Contrast   = 0x00020000, 
01757         TKO_Geo_Marker_Contrast = 0x00040000, 
01758         TKO_Geo_Vertex_Contrast = 0x00080000, 
01759         TKO_Geo_Cut_Edge        = 0x00100000, 
01760         TKO_Geo_Simple_Reflection=0x00200000, 
01761         TKO_Geo_Cut_Face        = 0x00400000, 
01762         TKO_Geo_Extended2       = 0x00800000, 
01763         TKO_Geo_Extended2_Mask  = 0xFF000000, 
01764         TKO_Geo_Text_Contrast   = 0x01000000, 
01765         TKO_Geo_All_Colors      = 0x017F7F7F, 
01766 
01767         //extras for selectability (light is same as for color)
01768         TKO_Geo_String_Cursor   = 0x00000100, 
01769 
01770         TKO_Geo_Geom_Selects    = 0x0000435F, 
01771         TKO_Geo_All_Selects     = 0x0000437F, 
01772 
01773         // extras for visibility (string cursor same as selectability)
01774         TKO_Geo_Face_Lighting   = 0x00000200, 
01775         TKO_Geo_Edge_Lighting   = 0x00000400, 
01776         TKO_Geo_Marker_Lighting = 0x00000800, 
01777         TKO_Geo_Light_Visibles  = 0x00000E00, 
01778 
01779         TKO_Geo_Silhouette_Edge = 0x00001000, 
01780         TKO_Geo_Perimeter_Edge  = 0x00002000, 
01781         TKO_Geo_Mesh_Quad       = 0x00004000, 
01782         TKO_Geo_Hard_Edge       = 0x00008000, 
01783 
01784         TKO_Geo_Cutting_Plane   = 0x00010000, 
01785         TKO_Geo_Shadow_Emit     = 0x00020000, 
01786         TKO_Geo_Shadow_Cast     = 0x00040000, 
01787         TKO_Geo_Shadow_Receive  = 0x00080000, 
01788         TKO_Geo_Shadow_Visibles = 0x000E0000, 
01789         TKO_Geo_Vertex_Vis      = 0x00200000, 
01790         TKO_Geo_Cut_Geometry    = 0x00500000, 
01791         TKO_Geo_Adjacent_Edge   = 0x01000000, 
01792         TKO_Geo_NonCulled_Edge  = 0x02000000, 
01793         TKO_Geo_Edge_Visibles   = 0x0300F002, 
01794 
01795 
01796         TKO_Geo_Geom_Visibles   = 0x0301FFFF, 
01797 
01798 
01799 
01800         TKO_Geo_All_Visibles    = 0x037FFF7F  
01801 };
01802 
01803 
01807 enum TKO_Color_Channels {
01808         TKO_Channel_Diffuse         = 0, 
01809         TKO_Channel_Specular        = 1, 
01810         TKO_Channel_Mirror          = 2, 
01811         TKO_Channel_Transmission    = 3, 
01812         TKO_Channel_Emission        = 4, 
01813         TKO_Channel_Gloss           = 5, 
01814         TKO_Channel_Index           = 6, 
01815         TKO_Channel_Extended        = 7, 
01816         TKO_Channel_Environment     = 8, 
01817         TKO_Channel_Bump            = 9, 
01818 
01819         TKO_Channel_Count           = 10 
01820 };
01821 
01822 
01824 
01829 class BBINFILETK_API TK_Color : public BBaseOpcodeHandler {
01830         protected:
01831                 int             m_mask;         
01832                 short           m_channels;     
01833 
01837                 class BBINFILETK_API channel {
01838                         public:
01839                                 float   m_rgb[3];      
01840                                 char *  m_name;        
01841 
01842                                 channel() : m_name (0) {}
01843                                 ~channel() { ::delete [] m_name; }
01844                                 void    Reset (void) alter  { ::delete [] m_name;  m_name = 0; }        
01845                 };
01846 
01847                 channel         m_diffuse;              
01848                 channel         m_specular;             
01849                 channel         m_mirror;               
01850                 channel         m_transmission; 
01851                 channel         m_emission;             
01852                 channel         m_environment;  
01853                 channel         m_bump;                 
01854                 float           m_gloss;                
01855                 float           m_index;                
01856                 int             m_substage;             
01857 
01859                 void    set_channel_rgb (channel alter & c, float r, float g, float b, int which_channel = -1) alter {
01860                                         c.m_rgb[0] = r;     c.m_rgb[1] = g;     c.m_rgb[2] = b;
01861                                         if (which_channel != -1) {
01862                                                 m_channels |= (1 << which_channel);
01863                                                 if (which_channel > TKO_Channel_Extended)
01864                                                 m_channels |= (1 << TKO_Channel_Extended);
01865                                         }
01866                                 }
01868                 void    set_channel_name (channel alter & c, char const * name, int which_channel = -1) alter;
01870                 void    set_channel_name (channel alter & c, int length, int which_channel = -1) alter;
01871 
01872         public:
01873                 TK_Color ();
01874                 ~TK_Color ();
01875         TK_Color(const TK_Color& rColor)
01876             : BBaseOpcodeHandler( rColor.m_opcode )
01877             , m_mask(0)
01878             , m_channels(0)
01879         {
01880             SetGeometry( rColor.GetGeometry() );
01881 
01882             int channels = rColor.GetChannels();
01883 
01884             const char *name;
01885 
01886             if(channels & (1<<TKO_Channel_Diffuse))
01887             {
01888                 name = rColor.GetDiffuseName();
01889                 if(name==NULL)
01890                 {
01891                     SetDiffuse( rColor.GetDiffuse() );
01892                 }
01893                 else
01894                 {
01895                     SetDiffuseName( name );
01896                 }
01897             }
01898 
01899             if(channels & (1<<TKO_Channel_Specular))
01900             {
01901                 name = rColor.GetSpecularName();
01902                 if(name==NULL)
01903                 {
01904                     SetSpecular( rColor.GetSpecular() );
01905                 }
01906                 else
01907                 {
01908                     SetSpecularName( name );
01909                 }
01910             }
01911 
01912             if(channels & (1<<TKO_Channel_Mirror))
01913             {
01914                 name = rColor.GetMirrorName();
01915                 if(name==NULL)
01916                 {
01917                     SetMirror( rColor.GetMirror() );
01918                 }
01919                 else
01920                 {
01921                     SetMirrorName( name );
01922                 }
01923             }
01924 
01925             if(channels & (1<<TKO_Channel_Transmission))
01926             {
01927                 name = rColor.GetTransmissionName();
01928                 if(name==NULL)
01929                 {
01930                     SetTransmission( rColor.GetTransmission() );
01931                 }
01932                 else
01933                 {
01934                     SetTransmissionName( name );
01935                 }
01936             }
01937 
01938             if(channels & (1<<TKO_Channel_Emission))
01939             {
01940                 name = rColor.GetEmissionName();
01941                 if(name==NULL)
01942                 {
01943                     SetEmission( rColor.GetEmission() );
01944                 }
01945                 else
01946                 {
01947                     SetEmissionName( name );
01948                 }
01949             }
01950 
01951             if(channels & (1<<TKO_Channel_Bump))
01952             {
01953                 SetBumpName( rColor.GetBumpName() );
01954             }
01955             if(channels & (1<<TKO_Channel_Environment))
01956             {
01957                 SetEnvironmentName( rColor.GetEnvironmentName() );
01958             }
01959             if(channels & (1<<TKO_Channel_Gloss))
01960             {
01961                 SetGloss( rColor.GetGloss() );
01962             }
01963             if(channels & (1<<TKO_Channel_Index))
01964             {
01965                 SetIndex( rColor.GetIndex() );
01966             }
01967 
01968             SetChannels( channels ); // should be last, just to be safe.
01969         }
01970         TK_Color& operator=(const TK_Color& rColor)
01971         {
01972             if(&rColor != this)
01973             {
01974                 m_opcode    = rColor.m_opcode;
01975                 m_mask      = rColor.m_mask;
01976                 m_channels  = rColor.m_channels;
01977 
01978                 SetGeometry( rColor.GetGeometry() );
01979 
01980                 int channels = rColor.GetChannels();
01981 
01982                 const char *name;
01983 
01984                 if(channels & (1<<TKO_Channel_Diffuse))
01985                 {
01986                     name = rColor.GetDiffuseName();
01987                     if(name==NULL)
01988                     {
01989                         SetDiffuse( rColor.GetDiffuse() );
01990                     }
01991                     else
01992                     {
01993                         SetDiffuseName( name );
01994                     }
01995                 }
01996 
01997                 if(channels & (1<<TKO_Channel_Specular))
01998                 {
01999                     name = rColor.GetSpecularName();
02000                     if(name==NULL)
02001                     {
02002                         SetSpecular( rColor.GetSpecular() );
02003                     }
02004                     else
02005                     {
02006                         SetSpecularName( name );
02007                     }
02008                 }
02009 
02010                 if(channels & (1<<TKO_Channel_Mirror))
02011                 {
02012                     name = rColor.GetMirrorName();
02013                     if(name==NULL)
02014                     {
02015                         SetMirror( rColor.GetMirror() );
02016                     }
02017                     else
02018                     {
02019                         SetMirrorName( name );
02020                     }
02021                 }
02022 
02023                 if(channels & (1<<TKO_Channel_Transmission))
02024                 {
02025                     name = rColor.GetTransmissionName();
02026                     if(name==NULL)
02027                     {
02028                         SetTransmission( rColor.GetTransmission() );
02029                     }
02030                     else
02031                     {
02032                         SetTransmissionName( name );
02033                     }
02034                 }
02035 
02036                 if(channels & (1<<TKO_Channel_Emission))
02037                 {
02038                     name = rColor.GetEmissionName();
02039                     if(name==NULL)
02040                     {
02041                         SetEmission( rColor.GetEmission() );
02042                     }
02043                     else
02044                     {
02045                         SetEmissionName( name );
02046                     }
02047                 }
02048 
02049                 if(channels & (1<<TKO_Channel_Bump))
02050                 {
02051                     SetBumpName( rColor.GetBumpName() );
02052                 }
02053                 if(channels & (1<<TKO_Channel_Environment))
02054                 {
02055                     SetEnvironmentName( rColor.GetEnvironmentName() );
02056                 }
02057                 if(channels & (1<<TKO_Channel_Gloss))
02058                 {
02059                     SetGloss( rColor.GetGloss() );
02060                 }
02061                 if(channels & (1<<TKO_Channel_Index))
02062                 {
02063                     SetIndex( rColor.GetIndex() );
02064                 }
02065 
02066                 SetChannels( channels ); // should be last, just to be safe.
02067             }
02068             return *this;
02069         }
02070 
02071 
02072                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02073                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02074                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02075 
02076                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02077                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02078 
02079                 void        Reset (void) alter;
02080 
02082                 void            SetGeometry (int m) alter {
02083                                                         m_mask = m & TKO_Geo_All_Colors;
02084                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
02085                                                                 m_mask |= TKO_Geo_Extended;
02086                                                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02087                                                                         m_mask |= TKO_Geo_Extended_Colors;
02088                                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
02089                                                                                 m_mask |= TKO_Geo_Extended2;
02090                                                                 }
02091                                                         }
02092                                                 }
02094                 int             GetGeometry (void) const                        { return m_mask;                        }
02096                 void            SetChannels (int c) alter  {
02097                                                         m_channels = (short)c;
02098                                                         if ((c & (~0 << (TKO_Channel_Extended+1))) != 0)
02099                                                                 m_channels |= (1 << TKO_Channel_Extended);
02100                                                 }
02102                 int             GetChannels (void) const                        { return (int)m_channels;               }
02103 
02105                 void            SetDiffuse (float r, float g, float b) alter    { set_channel_rgb (m_diffuse, r, g, b, TKO_Channel_Diffuse); }
02107                 void            SetDiffuse (float const * rgb) alter            { SetDiffuse (rgb[0], rgb[1], rgb[2]);  }
02109                 void            SetDiffuseName (char const * name) alter        { set_channel_name (m_diffuse, name, TKO_Channel_Diffuse);       }
02111                 void            SetDiffuseName (int length) alter               { set_channel_name (m_diffuse, length, TKO_Channel_Diffuse); }
02113                 float const *   GetDiffuse (void) const                         { return m_diffuse.m_rgb;               }
02115                 char const *    GetDiffuseName (void) const                     { return m_diffuse.m_name;              }
02117                 char alter *    GetDiffuseName (void) alter                     { return m_diffuse.m_name;              }
02118 
02120                 void            SetSpecular (float r, float g, float b) alter   { set_channel_rgb (m_specular, r, g, b, TKO_Channel_Specular);}
02122                 void            SetSpecular (float const * rgb) alter           { SetSpecular (rgb[0], rgb[1], rgb[2]); }
02124                 void            SetSpecularName (char const * name) alter       { set_channel_name (m_specular, name, TKO_Channel_Specular);  }
02126                 void            SetSpecularName (int length) alter              { set_channel_name (m_specular, length, TKO_Channel_Specular);}
02128                 float const *   GetSpecular (void) const                        { return m_specular.m_rgb;              }
02130                 char const *    GetSpecularName (void) const                    { return m_specular.m_name;             }
02132                 char alter *    GetSpecularName (void) alter                    { return m_specular.m_name;             }
02133 
02135                 void            SetMirror (float r, float g, float b) alter     { set_channel_rgb (m_mirror, r, g, b, TKO_Channel_Mirror);  }
02137                 void            SetMirror (float const * rgb) alter             { SetMirror (rgb[0], rgb[1], rgb[2]);   }
02139                 void            SetMirrorName (char const * name) alter         { set_channel_name (m_mirror, name, TKO_Channel_Mirror);    }
02141                 void            SetMirrorName (int length) alter                { set_channel_name (m_mirror, length, TKO_Channel_Mirror);  }
02143                 float const *   GetMirror (void) const                          { return m_mirror.m_rgb;                }
02145                 char const *    GetMirrorName (void) const                      { return m_mirror.m_name;               }
02147                 char alter *    GetMirrorName (void) alter                      { return m_mirror.m_name;               }
02148 
02150                 void            SetTransmission (float r, float g, float b) alter { set_channel_rgb (m_transmission, r, g, b, TKO_Channel_Transmission); }
02152                 void            SetTransmission (float const * rgb) alter         { SetTransmission (rgb[0], rgb[1], rgb[2]);  }
02154                 void            SetTransmissionName (char const * name) alter     { set_channel_name (m_transmission, name, TKO_Channel_Transmission);   }
02156                 void            SetTransmissionName (int length) alter            { set_channel_name (m_transmission, length, TKO_Channel_Transmission); }
02158                 float const *   GetTransmission (void) const                      { return m_transmission.m_rgb;               }
02160                 char const *    GetTransmissionName (void) const                  { return m_transmission.m_name;              }
02162                 char alter *    GetTransmissionName (void) alter                  { return m_transmission.m_name;              }
02163 
02165                 void            SetEmission (float r, float g, float b) alter   { set_channel_rgb (m_emission, r, g, b, TKO_Channel_Emission);}
02167                 void            SetEmission (float const * rgb) alter           { SetEmission (rgb[0], rgb[1], rgb[2]); }
02169                 void            SetEmissionName (char const * name) alter       { set_channel_name (m_emission, name, TKO_Channel_Emission);  }
02171                 void            SetEmissionName (int length) alter              { set_channel_name (m_emission, length, TKO_Channel_Emission);}
02173                 float const *   GetEmission (void) const                        { return m_emission.m_rgb;              }
02175                 char const *    GetEmissionName (void) const                    { return m_emission.m_name;             }
02177                 char alter *    GetEmissionName (void) alter                    { return m_emission.m_name;             }
02178 
02180                 void            SetEnvironmentName (char const * name) alter    { set_channel_name (m_environment, name, TKO_Channel_Environment);   }
02182                 void            SetEnvironmentName (int length) alter           { set_channel_name (m_environment, length, TKO_Channel_Environment); }
02184                 char const *    GetEnvironmentName (void) const                 { return m_environment.m_name;              }
02186                 char alter *    GetEnvironmentName (void) alter                 { return m_environment.m_name;              }
02187 
02189                 void            SetBumpName (char const * name) alter           { set_channel_name (m_bump, name, TKO_Channel_Bump);      }
02191                 void            SetBumpName (int length) alter                  { set_channel_name (m_bump, length, TKO_Channel_Bump);    }
02193                 char const *    GetBumpName (void) const                        { return m_bump.m_name;                 }
02195                 char alter *    GetBumpName (void) alter                        { return m_bump.m_name;                 }
02196 
02198                 void            SetGloss (float g) alter                        { m_gloss = g; m_channels |= (1<<TKO_Channel_Gloss); }
02200                 float           GetGloss (void) const                           { return m_gloss;                       }
02202                 void            SetIndex (float i) alter                        { m_index = i; m_channels |= (1<<TKO_Channel_Index); }
02204                 float           GetIndex (void) const                           { return m_index;                       }
02205 };
02206 
02207 
02209 
02214 class BBINFILETK_API TK_Color_RGB : public BBaseOpcodeHandler {
02215     private:
02216         TK_Color_RGB(const TK_Color_RGB&);
02217         TK_Color_RGB& operator=(const TK_Color_RGB&);
02218 
02219         protected:
02220                 int             m_mask;         
02221                 float           m_rgb[3];       
02222 
02223         public:
02225                 TK_Color_RGB () : BBaseOpcodeHandler (TKE_Color_RGB), m_mask (0) {}
02226 
02227                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02228                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02229                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02230 
02231                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02232                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02233 
02238                 void            SetGeometry (int m) alter {
02239                                                         m_mask = m & TKO_Geo_All_Colors;
02240                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
02241                                                                 m_mask |= TKO_Geo_Extended;
02242                                                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02243                                                                         m_mask |= TKO_Geo_Extended_Colors;
02244                                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
02245                                                                                 m_mask |= TKO_Geo_Extended2;
02246                                                                 }
02247                                                         }
02248                                                 }
02253                 int             GetGeometry (void) const                    { return m_mask;                        }
02254 
02256                 void            SetRGB (float r, float g, float b) alter    { m_rgb[0] = r; m_rgb[1] = g; m_rgb[2] = b; }
02258                 void            SetRGB (float const * rgb) alter            { SetRGB (rgb[0], rgb[1], rgb[2]);          }
02260                 float const *   GetRGB (void) const                         { return m_rgb;                             }
02261 };
02262 
02263 
02265 
02270 class BBINFILETK_API TK_Color_By_Value : public BBaseOpcodeHandler {
02271     private:
02272         TK_Color_By_Value(const TK_Color_By_Value&);
02273         TK_Color_By_Value& operator=(const TK_Color_By_Value&);
02274 
02275         protected:
02276                 int             m_mask;                 
02277                 float           m_value[3];             
02278                 char            m_space;                
02279 
02280         public:
02282                 TK_Color_By_Value () : BBaseOpcodeHandler (TKE_Color_By_Value), m_mask (0) {}
02283 
02284                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02285                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02286                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02287 
02288                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02289                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02290 
02295                 void            SetGeometry (int m) alter {
02296                                                         m_mask = m & TKO_Geo_All_Colors;
02297                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
02298                                                                 m_mask |= TKO_Geo_Extended;
02299                                                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02300                                                                         m_mask |= TKO_Geo_Extended_Colors;
02301                                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
02302                                                                                 m_mask |= TKO_Geo_Extended2;
02303                                                                 }
02304                                                         }
02305                                                 }
02310                 int             GetGeometry (void) const                { return m_mask;                                }
02311 
02313                 void            SetSpace (int s) alter                  { m_space = (char)s;                            }
02315                 int             GetSpace (void) const                   { return (int)m_space;                          }
02316 
02318                 void            SetValue (float a, float b, float c) alter  {
02319                                                                 m_value[0] = a;     m_value[1] = b;     m_value[2] = c;
02320                                                         }
02322                 void            SetValue (float const * triple) alter   { SetValue (triple[0], triple[1], triple[2]);   }
02324                 float const *   GetValue (void) const                   { return m_value;                               }
02325 };
02326 
02327 
02329 
02335 class BBINFILETK_API TK_Color_By_Index : public BBaseOpcodeHandler {
02336     private:
02337         TK_Color_By_Index(const TK_Color_By_Index&);
02338         TK_Color_By_Index& operator=(const TK_Color_By_Index&);
02339 
02340         protected:
02341                 int             m_mask;         
02342                 int             m_index;        
02343 
02344         public:
02346                 TK_Color_By_Index (unsigned char opcode) : BBaseOpcodeHandler (opcode), m_mask (0), m_index (-1) {}
02347 
02348                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02349                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02350                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02351 
02352                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02353                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02354 
02359                 void            SetGeometry (int m) alter {
02360                                                         m_mask = m & TKO_Geo_All_Colors;
02361                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
02362                                                                 m_mask |= TKO_Geo_Extended;
02363                                                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02364                                                                         m_mask |= TKO_Geo_Extended_Colors;
02365                                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
02366                                                                                 m_mask |= TKO_Geo_Extended2;
02367                                                                 }
02368                                                         }
02369                                                 }
02374                 int             GetGeometry (void) const    { return m_mask;    }
02375 
02377                 void            SetIndex (int i) alter      { m_index = i;      }
02379                 int             GetIndex (void) const       { return m_index;   }
02380 };
02381 
02383 
02388 class BBINFILETK_API TK_Color_By_FIndex : public BBaseOpcodeHandler {
02389     private:
02390         TK_Color_By_FIndex(const TK_Color_By_FIndex&);
02391         TK_Color_By_FIndex& operator=(const TK_Color_By_FIndex&);
02392 
02393         protected:
02394                 int             m_mask;         
02395                 float           m_index;        
02396 
02397         public:
02399                 TK_Color_By_FIndex () : BBaseOpcodeHandler (TKE_Color_By_FIndex), m_mask (0), m_index (-1.0f) {}
02400 
02401                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02402                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02403                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02404 
02405                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02406                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02407 
02412                 void            SetGeometry (int m) alter {
02413                                                         m_mask = m & TKO_Geo_All_Colors;
02414                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
02415                                                                 m_mask |= TKO_Geo_Extended;
02416                                                                 if ((m & TKO_Geo_Extended_Colors_Mask) != 0) {
02417                                                                         m_mask |= TKO_Geo_Extended_Colors;
02418                                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
02419                                                                                 m_mask |= TKO_Geo_Extended2;
02420                                                                 }
02421                                                         }
02422                                                 }
02427                 int             GetGeometry (void) const    { return m_mask;    }
02428 
02430                 void            SetIndex (float val) alter      { m_index = val;      }
02432                 float           GetIndex (void) const       { return m_index;   }
02433 };
02434 
02438 enum TKO_Map_Format {
02439         TKO_Map_RGB_Values,     
02440         TKO_Map_String                  
02441 };
02442 
02445 
02450 class BBINFILETK_API TK_Color_Map : public BBaseOpcodeHandler {
02451     private:
02452         TK_Color_Map(const TK_Color_Map&);
02453         TK_Color_Map& operator=(const TK_Color_Map&);
02454 
02455         protected:
02456                 int             m_length;                       
02457                 float           m_values[3*256];        
02458                 char *                  m_string;                       
02459                 unsigned char   m_format;                       
02460 
02464         enum TKO_Map_Format {
02465             TKO_Map_RGB_Values,     
02466             TKO_Map_Complex_Colors,
02467             TKO_Map_Textures,
02468             TKO_Map_Mixed
02469         };
02470 
02472                 void    set_values (int length, float const * values = 0) alter;
02473 
02474         public:
02476                 TK_Color_Map ()
02477                         : BBaseOpcodeHandler (TKE_Color_Map), m_length (0), m_string (0), m_format (TKO_Map_RGB_Values) {}
02478                 ~TK_Color_Map();
02479 
02480                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02481                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02482                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02483 
02484                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02485                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02486 
02487                 void        Reset (void) alter;
02488 
02490                 void            SetFormat (int f) alter                                 { m_format = (unsigned char)f;  }
02492                 int             GetFormat (void) const                                  { return (int)m_format;         }
02493 
02498                 void            SetValues (int count, float const * values = 0) alter   { set_values (count, values);   }
02500                 float const *   GetValues (void) const                                  { return m_values;              }
02502                 float alter *   GetValues (void) alter                                  { return m_values;              }
02504                 int             GetLength (void) const                                  { return m_length;              }
02505 
02510                 void            SetString (char const * string) alter;
02515                 void            SetString (int length) alter;
02519                 char const *    GetString (void) const                 { return m_string; }
02524                 char alter *    GetString (void) alter                 { return m_string; }
02525 };
02526 
02528 
02531 
02537 class BBINFILETK_API TK_Callback : public BBaseOpcodeHandler {
02538     private:
02539         TK_Callback(const TK_Callback&);
02540         TK_Callback& operator=(const TK_Callback&);
02541 
02542         protected:
02543                 int                     m_length;       
02544                 char *                  m_string;       
02547                 void    set_callback (char const * callback) alter;  
02548 
02549                 void    set_callback (int length) alter;                         
02550 
02551         public:
02553                 TK_Callback () : BBaseOpcodeHandler (TKE_Callback), m_length (0), m_string (0) {}
02554                 ~TK_Callback();
02555 
02556                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02557                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02558                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
02559 
02560                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02561                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02562 
02563                 void        Reset (void) alter;
02564 
02566                 void            SetCallback (char const * callback) alter   { set_callback (callback);  }
02568                 void            SetCallback (int length) alter              { set_callback (length);    }
02570                 char const *    GetCallback (void) const                    { return m_string;          }
02572                 char alter *    GetCallback (void) alter                    { return m_string;          }
02573 };
02574 
02576 
02577 
02585 enum TKO_Rendering_Option_Bits {
02586         TKO_Interp_Texture_Faces            = 0x00000001,  
02587         TKO_Interp_Texture_Edges            = 0x00000002,  
02588         TKO_Interp_Texture_Markers          = 0x00000004,  
02589         TKO_Interp_Texture                  = 0x00000007,  
02590 
02591         TKO_Interp_Color_Faces              = 0x00000008,  
02592         TKO_Interp_Color_Edges              = 0x00000010,  
02593         TKO_Interp_Color_Markers            = 0x00000020,  
02594         TKO_Interp_Color                    = 0x00000038,  
02595 
02596         TKO_Interp_Index_Faces              = 0x00000040,  
02597         TKO_Interp_Index_Edges              = 0x00000080,  
02598         TKO_Interp_Index                    = 0x000000C0,  
02599 
02600         TKO_Interp_Lighting_Faces_Gouraud   = 0x00000100,  
02601         TKO_Interp_Lighting_Faces_Phong     = 0x00000200,  
02602         TKO_Interp_Lighting_Edges_Gouraud   = 0x00000400,  
02603         TKO_Interp_Lighting_Edges_Phong     = 0x00000800,  
02604         TKO_Interp_Lighting_Faces           = 0x00000300,  
02605         TKO_Interp_Lighting_Edges           = 0x00000C00,  
02606         TKO_Interp_Lighting                 = 0x00000F00,  
02607 
02608         TKO_Rendo_HSR_Algorithm             = 0x00001000,  
02609         TKO_Rendo_THSR_Algorithm            = 0x00002000,  
02610         TKO_Rendo_Any_HSR                   = 0x00003000,  
02611 
02612         TKO_Rendo_Local_Viewer              = 0x00004000,  
02613         TKO_Rendo_Perspective_Correction    = 0x00008000,  
02614         TKO_Rendo_Display_Lists             = 0x00010000,  
02615 
02616         TKO_Rendo_Debug                     = 0x00020000,  
02617 
02618         TKO_Rendo_Technology                = 0x00040000,  
02619         TKO_Rendo_Quantization              = 0x00080000,  
02620         TKO_Rendo_TQ                        = 0x000C0000,  
02621 
02622         TKO_Rendo_Attribute_Lock            = 0x00100000,  
02623 
02624         TKO_Rendo_Face_Displacement         = 0x00200000,  
02625         TKO_Rendo_Fog                       = 0x00400000,  
02626 
02627         TKO_Rendo_Buffer_Options            = 0x00800000,  
02628         TKO_Rendo_Hidden_Line_Options       = 0x01000000,  
02629 
02630         TKO_Rendo_LOD                       = 0x02000000,  
02631         TKO_Rendo_LOD_Options               = 0x04000000,  
02632 
02633         TKO_Rendo_NURBS_Curve_Options       = 0x08000000,  
02634         TKO_Rendo_NURBS_Surface_Options     = 0x10000000,  
02635         TKO_Rendo_NURBS_Options             = 0x18000000,  
02636 
02637         TKO_Rendo_Stereo                    = 0x20000000,  
02638         TKO_Rendo_Stereo_Separation         = 0x40000000,  
02639 
02640 // hpux doesn't like the high bit set as part of the enumerated type
02641     //TKO_Rendo_Extended              = 0x80000000,
02642 #ifndef SWIG
02643 #define TKO_Rendo_Extended                0x80000000   
02644 #else
02645         TKO_Rendo_Extended                                      = 0x8000000,
02646 #endif
02647 
02648         // extended settings
02649         TKO_Rendo_Tessellation              = 0x00000001,  
02650         TKO_Rendo_Transparency_Style        = 0x00000002,  
02651         TKO_Rendo_Transparency_Hardware     = 0x00000004,  
02652         TKO_Rendo_Cut_Geometry              = 0x00000008,  
02653         TKO_Rendo_Depth_Range               = 0x00000010,  
02654         TKO_Rendo_Mask_Transform            = 0x00000020,  
02655         TKO_Rendo_Image_Scale               = 0x00000040,  
02656         TKO_Rendo_Local_Cutting_Planes      = 0x00000080,  
02657         TKO_Rendo_Simple_Shadow                         = 0x00000100,
02658         TKO_Rendo_Geometry_Options                      = 0x00000200,
02659         TKO_Rendo_Image_Tint                            = 0x00000400,
02660         TKO_Interp_Index_Face_Isolines          = 0x00000800,
02661         TKO_Rendo_Force_Grayscale                       = 0x00001000,
02662         TKO_Rendo_Transparency_Options      = 0x00002000,  
02663         TKO_Rendo_General_Displacement          = 0x00004000,
02664         TKO_Rendo_Join_Cutoff_Angle                     = 0x00008000,
02665         TKO_Rendo_Screen_Range                          = 0x00010000,
02666         TKO_Rendo_Stereo_Distance           = 0x00020000,  
02667         TKO_Rendo_Shadow_Map                            = 0x00040000,
02668         TKO_Rendo_Simple_Reflection                     = 0x00080000,
02669 
02670         // type for specific fields
02671         TKO_HSR_Hardware                    = 0,   
02672         TKO_HSR_SZB                         = 1,   
02673         TKO_HSR_Painters                    = 2,   
02674         TKO_HSR_Z_Sort_Only                 = 3,   
02675         TKO_HSR_Priority                    = 4,   
02676         TKO_HSR_Spider_Web                  = 5,   
02677         TKO_HSR_Hidden_Line                 = 6,   
02678         TKO_HSR_None                        = 7,   
02679         TKO_HSR_Fast_Hidden_Line            = 8,   
02680         TKO_HSR_Depth_Peeling               = 9,   
02681         TKO_HSR_Mask                        = 0x0F,   
02682         TKO_THSR_Mask                       = 0xF0,   
02683 
02684         TKO_Transparency_None               = 0x00,   
02685         TKO_Transparency_Blending           = 0x01,   
02686         TKO_Transparency_Screen_Door        = 0x02,   
02687         TKO_Transparency_Style_Mask         = 0x0F,   
02688 
02689         TKO_Transparency_Peeling_Layers         = 0x10,   
02690         TKO_Transparency_Peeling_Min_Area       = 0x20,   
02691 
02692         TKO_Cut_Geometry_Level              = 0x01,   
02693         TKO_Cut_Geometry_Tolerance          = 0x02,   
02694         TKO_Cut_Geometry_Match_Color        = 0x04,   
02695         TKO_Cut_Geometry_Level_Entity       = 0,   
02696         TKO_Cut_Geometry_Level_Segment      = 1,   
02697         TKO_Cut_Geometry_Level_Segment_Tree = 2,   
02698         TKO_Cut_Geometry_Match_Color_Off    = 0,   
02699         TKO_Cut_Geometry_Match_Color_Current= 1,   
02700         TKO_Cut_Geometry_Match_Color_First  = 2,   
02701         TKO_Cut_Geometry_Match_Color_Last   = 3,   
02702 
02703         TKO_Display_List_Level_Entity       = 0,   
02704         TKO_Display_List_Level_Segment      = 1,   
02705         TKO_Display_List_Level_Segment_Tree = 2,   
02706 
02707         TKO_Simple_Shadow_On                            = 0x0001,   
02708         TKO_Simple_Shadow_Off                           = 0x0002,   
02709         TKO_Simple_Shadow_Plane                         = 0x0004,   
02710         TKO_Simple_Shadow_Light_Direction       = 0x0008,   
02711         TKO_Simple_Shadow_Color                         = 0x0010,   
02712         TKO_Simple_Shadow_Resolution            = 0x0020,   
02713         TKO_Simple_Shadow_Blur                          = 0x0040,   
02714         TKO_Simple_Shadow_Extended                      = 0x0080,   // internal use, indicates presence of extended bits
02715         TKO_Simple_Shadow_Extended_Mask         = 0xFF00,   // internal use, indicates bits which require TKO_Simple_Shadow_Extended
02716         TKO_Simple_Shadow_Auto                          = 0x0100,   
02717         TKO_Simple_Shadow_Opacity                       = 0x0200,   
02718         TKO_Simple_Shadow_Extended2                     = 0x8000,   // reserved for future expansion
02719 
02720         TKO_Shadow_Map_On                                       = 0x0001,   
02721         TKO_Shadow_Map_Off                                      = 0x0002,   
02722         TKO_Shadow_Map_Resolution                       = 0x0004,   
02723         TKO_Shadow_Map_Samples                          = 0x0008,   
02724         TKO_Shadow_Map_Jitter_On                        = 0x0010,   
02725         TKO_Shadow_Map_Jitter_Off                       = 0x0020,   
02726         TKO_Shadow_Map_Extended                         = 0x0080,   // reserved for future expansion
02727 
02728         TKO_Simple_Reflection_On                        = 0x0001,   
02729         TKO_Simple_Reflection_Off                       = 0x0002,   
02730         TKO_Simple_Reflection_Plane                     = 0x0004,   
02731         TKO_Simple_Reflection_Opacity           = 0x0008,   
02732         TKO_Simple_Reflection_Fading_On         = 0x0010,   
02733         TKO_Simple_Reflection_Fading_Off        = 0x0020,   
02734         TKO_Simple_Reflection_Blur                      = 0x0040,   
02735         TKO_Simple_Reflection_Extended          = 0x0080,   // reserved for future expansion
02736         TKO_Simple_Reflection_Attenuation       = 0x0100,   
02737         TKO_Simple_Reflection_Extended2         = 0x8000,   // reserved for future expansion
02738 
02739         TKO_Mask_None               = 0x00,   
02740         TKO_Mask_Camera_Rotation    = 0x01,   
02741         TKO_Mask_Camera_Scale       = 0x02,   
02742         TKO_Mask_Camera_Translation = 0x04,   
02743         TKO_Mask_Camera_Perspective = 0x08,   
02744         TKO_Mask_Model_Rotation     = 0x10,   
02745         TKO_Mask_Model_Scale        = 0x20,   
02746         TKO_Mask_Model_Translation  = 0x40,   
02747         TKO_Mask_Camera             = 0x0F,   
02748         TKO_Mask_Model              = 0x70,   
02749         TKO_Mask_All                = 0x7F,   
02750 
02751         TKO_Technology_Standard             = 0x01,   
02752         TKO_Technology_Soft_Frame_Buffer    = 0x02,   
02753         TKO_Technology_Radiosity            = 0x04,   
02754         TKO_Technology_Ray_Trace            = 0x08,   
02755         TKO_Technology_Mask                 = 0x0F,   
02756 
02757         TKO_Quantization_Threshold          = 0x10,   
02758         TKO_Quantization_Dither             = 0x20,   
02759         TKO_Quantization_Error_Diffusion    = 0x40,   
02760         TKO_Quantization_Mask               = 0xF0,   
02761 
02762         TKO_Buffer_Size_Limit               = 0x01,   
02763         TKO_Buffer_Retention                = 0x02,   
02764         TKO_Buffer_Color_Depth_Match        = 0x04,   
02765         TKO_Buffer_Color_Depth_Full         = 0x08,   
02766 
02767         TKO_Hidden_Line_Visibility_On           = 0x00000001,    
02768         TKO_Hidden_Line_Visibility_Off          = 0x00000002,    
02769         TKO_Hidden_Line_Pattern                 = 0x00000004,    
02770         TKO_Hidden_Line_Face_Displacement       = 0x00000008,    
02771         TKO_Hidden_Line_Dim_Factor              = 0x00000010,    
02772         TKO_Hidden_Line_Render_Faces_On         = 0x00000020,    
02773         TKO_Hidden_Line_Render_Faces_Off        = 0x00000040,    
02774         TKO_Hidden_Line_Extended                = 0x00000080,    
02775         TKO_Hidden_Line_Extended_Mask           = 0xFFFFFF00,    
02776         TKO_Hidden_Line_Silhouette_Cleanup_On   = 0x00000100,    
02777         TKO_Hidden_Line_Silhouette_Cleanup_Off  = 0x00000200,    
02778         TKO_Hidden_Line_Extended2               = 0x00008000,    
02779         TKO_Hidden_Line_Extended2_Mask          = 0xFFFF0000,    
02780         TKO_Hidden_Line_Color                   = 0x00010000,    
02781         TKO_Hidden_Line_Weight                  = 0x00020000,    
02782         TKO_Hidden_Line_Image_Outline_On        = 0x00040000,    
02783         TKO_Hidden_Line_Image_Outline_Off       = 0x00080000,    
02784         TKO_Hidden_Line_HSR_Algorithm           = 0x00100000,    
02785 
02786         TKO_LOD_Conserve_Memory             = 0x00000001,    
02787         TKO_LOD_Screen_Space                = 0x00000002,    
02788         TKO_LOD_Physical                    = 0x00000004,    
02789         TKO_LOD_Tolerance_FRU               = 0x00000008,    
02790         TKO_LOD_Tolerance_ORU               = 0x00000010,    
02791         TKO_LOD_Preprocess                  = 0x00000020,    
02792         TKO_LOD_Bounding_Current            = 0x00000040,    
02793         TKO_LOD_Bounding_Explicit           = 0x00000080,    
02794         TKO_LOD_Ratio                       = 0x00000100,    
02795         TKO_LOD_Threshold                   = 0x00000200,    
02796         TKO_LOD_Min_Triangle_Count          = 0x00000400,    
02797         TKO_LOD_Clamp                       = 0x00000800,    
02798         TKO_LOD_Num_Levels                  = 0x00001000,    
02799         TKO_LOD_Max_Degree                  = 0x00002000,    
02800         TKO_LOD_Tolerance                   = 0x00004000,    
02801         TKO_LOD_Usefulness_Heuristic        = 0x00008000,    
02802         TKO_LOD_Calculation_Cutoff          = 0x00010000,    
02803         TKO_LOD_Fallback                    = 0x00020000,    
02804         TKO_LOD_Collapse_Vertices           = 0x00040000,    
02805         TKO_LOD_Algorithm                   = 0x00080000,    
02806         TKO_LOD_Mode_Segment                = 0x00100000,    
02807 
02808         TKO_LOD_Threshold_Tris_Per_Pix_Sq   = 1,    
02809         TKO_LOD_Threshold_Tris_Per_CM_Sq    = 2,    
02810         TKO_LOD_Threshold_Percent_Area      = 3,    
02811         TKO_LOD_Threshold_Distance                      = 4,    
02812 
02813         TKO_LOD_Algorithm_Fast              = 1,    
02814         TKO_LOD_Algorithm_Nice              = 2,    
02815 
02816         TKO_LOD_Heur_Is_Diagonal            = 0x00,    
02817         TKO_LOD_Heur_Is_Per_Triangle        = 0x01,    
02818         TKO_LOD_Heur_Is_Ratio               = 0x02,    
02819         TKO_LOD_Heur_Is_Volume              = 0x04,    
02820         TKO_LOD_Heur_Triangle_Size          = 0x08,    
02821 
02822         TKO_LOD_Heur_Diag                   = 0,    
02823         TKO_LOD_Heur_Tri_Diag               = 1,    
02824         TKO_LOD_Heur_Diag_Ratio             = 2,    
02825         TKO_LOD_Heur_Tri_Diag_Ratio         = 3,    
02826         TKO_LOD_Heur_Vol                    = 4,    
02827         TKO_LOD_Heur_Tri_Vol                = 5,    
02828         TKO_LOD_Heur_Vol_Ratio              = 6,    
02829         TKO_LOD_Heur_Tri_Vol_Ratio          = 7,    
02830 
02831         TKO_LOD_Fallback_None               = 0,    
02832         TKO_LOD_Fallback_Bounding           = 1,    
02833         TKO_LOD_Fallback_Coarsest           = 2,    
02834         TKO_LOD_Fallback_Coarsest_None      = 3,    
02835         TKO_LOD_Fallback_Coarsest_Bounding  = 4,    
02836         TKO_LOD_Fallback_Bounding_None          = 5,    
02837 
02838         TKO_NURBS_Curve_Budget              = 0x0001,    
02839         TKO_NURBS_Curve_Continued_Budget    = 0x0002,    
02840         TKO_NURBS_Curve_View_Dependent      = 0x0004,    
02841         TKO_NURBS_Curve_Max_Deviation       = 0x0008,    
02842         TKO_NURBS_Surface_Budget            = 0x0010,    
02843         TKO_NURBS_Surface_Trim_Budget       = 0x0020,    
02844         TKO_NURBS_Surface_Max_Facet_Width   = 0x0040,    
02845         TKO_NURBS_Curve_Max_Angle           = 0x1000,    
02846         TKO_NURBS_Curve_Max_Length          = 0x2000,    
02847 
02848         TKO_NURBS_Extended                                      = 0x0080,  
02849         TKO_NURBS_Extended_Mask                         = 0xFF00,  
02850 
02851         TKO_NURBS_Surface_Max_Facet_Angle       = 0x0100,    
02852         TKO_NURBS_Surface_Max_Facet_Deviation
02853                                                                                 = 0x0200,    
02854         TKO_NURBS_Surface_Max_Trim_Curve_Deviation
02855                                                                                 = 0x0400,    
02856 
02857         TKO_NURBS_Curve_Mask                = 0xF00F,    
02858         TKO_NURBS_Surface_Mask              = 0x0FF0,    
02859 
02860         TKO_Tessellation_Cylinder           = 0x01,   
02861         TKO_Tessellation_Sphere             = 0x02,   
02862 
02863         TKO_Geometry_Options_Dihedral           = 0x01,   
02864         TKO_Geometry_Options_Reverse_PolyCylinder_Radii         = 0x02,   
02865         TKO_Geometry_Options_No_Reverse_PolyCylinder_Radii      = 0x04,   
02866         TKO_Geometry_Options_Reverse_PolyCylinder_Colors        = 0x08,   
02867         TKO_Geometry_Options_No_Reverse_PolyCylinder_Colors     = 0x10    
02868 };
02869 
02873 enum TKO_Attribute_Lock_Bits {
02874         TKO_Lock_Callback                   = 0x00000001,  
02875         TKO_Lock_Camera                     = 0x00000002,  
02876         TKO_Lock_Color                      = 0x00000004,  
02877         TKO_Lock_Color_Map                  = 0x00000008,  
02878         TKO_Lock_Driver                     = 0x00000010,  
02879         TKO_Lock_Driver_Options             = 0x00000020,  
02880         TKO_Lock_Edge_Pattern               = 0x00000040,  
02881         TKO_Lock_Edge_Weight                = 0x00000080,  
02882         TKO_Lock_Face_Pattern               = 0x00000100,  
02883         TKO_Lock_Handedness                 = 0x00000200,  
02884         TKO_Lock_Heuristics                 = 0x00000400,  
02885         TKO_Lock_Line_Pattern               = 0x00000800,  
02886         TKO_Lock_Line_Weight                = 0x00001000,  
02887         TKO_Lock_Marker_Size                = 0x00002000,  
02888         TKO_Lock_Marker_Symbol              = 0x00004000,  
02889         TKO_Lock_Metafile                   = 0x00008000,  
02890         TKO_Lock_Modelling_Matrix           = 0x00010000,  
02891         TKO_Lock_Rendering_Options          = 0x00020000,  
02892         TKO_Lock_Selectability              = 0x00040000,  
02893         TKO_Lock_Styles                     = 0x00080000,  
02894         TKO_Lock_Text_Alignment             = 0x00100000,  
02895         TKO_Lock_Text_Font                  = 0x00200000,  
02896         TKO_Lock_Text_Path                  = 0x00400000,  
02897         TKO_Lock_Text_Spacing               = 0x00800000,  
02898         TKO_Lock_User_Options               = 0x01000000,  
02899         TKO_Lock_User_Value                 = 0x02000000,  
02900         TKO_Lock_Texture_Matrix             = 0x04000000,  
02901         TKO_Lock_Visibility                 = 0x08000000,  
02902         TKO_Lock_Window                     = 0x10000000,  
02903         TKO_Lock_Window_Frame               = 0x20000000,  
02904         TKO_Lock_Window_Pattern             = 0x40000000,  
02905         TKO_Lock_All                        = 0x7FFFFFFF   
02906 
02907 };
02908 
02912 enum TKO_Color_Channel_Lock_Bits {
02913         TKO_Lock_Channel_Diffuse        = 0x0001,       
02914         TKO_Lock_Channel_Specular       = 0x0002,       
02915         TKO_Lock_Channel_Mirror         = 0x0004,       
02916         TKO_Lock_Channel_Transmission   = 0x0008,       
02917         TKO_Lock_Channel_Emission       = 0x0010,       
02918         TKO_Lock_Channel_Gloss          = 0x0020,       
02919         TKO_Lock_Channel_Index          = 0x0040,       
02920         TKO_Lock_Channel_Environment    = 0x0080,       
02921         TKO_Lock_Channel_Bump           = 0x0100,       
02922         TKO_Lock_Channel_ALL                    = 0x01FF        
02923 };
02924 
02925 
02926 #if 0
02927 class BBINFILETK_API TK_Radiosity_RayTrace_Options : public BBaseOpcodeHandler {
02928         protected:
02929 
02930         public:
02931                 TK_Radiosity_RayTrace_Options () : BBaseOpcodeHandler (TKE_Radiosity_RayTrace_Options) {}
02932                 ~TK_Radiosity_RayTrace_Options () {}
02933 
02934                 TK_Status   Read (BStreamFileToolkit & tk) alter;
02935                 TK_Status   Write (BStreamFileToolkit & tk) alter;
02936 
02937                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
02938                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
02939 };
02940 #endif
02941 
02942 
02944 
02950 class BBINFILETK_API TK_Rendering_Options : public BBaseOpcodeHandler {
02951     private:
02952         TK_Rendering_Options(const TK_Rendering_Options&);
02953         TK_Rendering_Options& operator=(const TK_Rendering_Options&);
02954 
02955         protected:
02956                 int             m_mask[2];  
02957                 int             m_value[2]; 
02958 
02959                 unsigned char   m_hsr;      
02960                 unsigned char   m_tq;       
02961                 int             m_debug;                
02962                 int             m_face_displacement;    
02963 
02964                 float           m_fog_limits[2];        
02965 
02966                 int             m_lock_mask;            
02967                 int             m_lock_value;           
02968                 int             m_lock_color_mask;      
02969                 int             m_lock_color_value;     
02970                 short           m_lock_color_face_mask;      
02971                 short           m_lock_color_face_value;     
02972                 short           m_lock_color_edge_mask;      
02973                 short           m_lock_color_edge_value;     
02974                 short           m_lock_color_line_mask;      
02975                 short           m_lock_color_line_value;     
02976                 short           m_lock_color_marker_mask;      
02977                 short           m_lock_color_marker_value;     
02978                 short           m_lock_color_text_mask;      
02979                 short           m_lock_color_text_value;     
02980                 short           m_lock_color_window_mask;      
02981                 short           m_lock_color_window_value;     
02982                 short           m_lock_color_face_contrast_mask;      
02983                 short           m_lock_color_face_contrast_value;     
02984                 short           m_lock_color_window_contrast_mask;      
02985                 short           m_lock_color_window_contrast_value;     
02986                 short           m_lock_color_back_mask;      
02987                 short           m_lock_color_back_value;     
02988                 short           m_lock_color_vertex_mask;      
02989                 short           m_lock_color_vertex_value;     
02990                 short           m_lock_color_edge_contrast_mask;      
02991                 short           m_lock_color_edge_contrast_value;     
02992                 short           m_lock_color_line_contrast_mask;      
02993                 short           m_lock_color_line_contrast_value;     
02994                 short           m_lock_color_marker_contrast_mask;      
02995                 short           m_lock_color_marker_contrast_value;     
02996                 short           m_lock_color_vertex_contrast_mask;      
02997                 short           m_lock_color_vertex_contrast_value;     
02998                 short           m_lock_color_text_contrast_mask;      
02999                 short           m_lock_color_text_contrast_value;     
03000                 short           m_lock_color_simple_reflection_mask;      
03001                 short           m_lock_color_simple_reflection_value;     
03002                 short           m_lock_color_cut_face_mask;      
03003                 short           m_lock_color_cut_face_value;     
03004                 short           m_lock_color_cut_edge_mask;      
03005                 short           m_lock_color_cut_edge_value;     
03006                 int             m_lock_visibility_mask; 
03007                 int             m_lock_visibility_value;
03008 
03009                 unsigned char   m_buffer_options_mask;  
03010                 unsigned char   m_buffer_options_value; 
03011                 int             m_buffer_size_limit;    
03012 
03013                 int                             m_hlr_options;          
03014                 float           m_hlr_dim_factor;       
03015                 float           m_hlr_face_displacement;
03016                 int             m_hlr_line_pattern;     
03017                 float                   m_hlr_color[3];         
03018                 float           m_hlr_weight;           
03019                 unsigned char   m_hlr_weight_units;     
03020                 unsigned char   m_hlr_hsr_algorithm;    
03021 
03022                 int             m_lod_options_mask;     
03023                 int             m_lod_options_value;    
03024                 char            m_lod_algorithm;        
03025                 char            m_num_ratios;           
03026                 float           m_ratio[8];             
03027                 char            m_num_thresholds;       
03028                 float           m_threshold[8];         
03029                 char            m_threshold_type;       
03030                 int             m_min_triangle_count;   
03031                 unsigned char   m_clamp;                
03032                 unsigned char   m_num_levels;           
03033                 int             m_max_degree;           
03034                 float           m_tolerance;            
03035                 float           m_bounding[6];          
03036                 char            m_num_cutoffs;          
03037                 float           m_cutoff[8];            
03038                 unsigned char   m_heuristic;            
03039                 unsigned char   m_fallback;             
03040 
03041                 int                             m_nurbs_options_mask;   
03042                 int                             m_nurbs_options_value;  
03043                 int             m_curve_budget;         
03044                 int             m_curve_continued_budget;
03045                 int             m_surface_budget;       
03046                 int             m_surface_trim_budget;  
03047                 float                   m_surface_max_trim_curve_deviation;
03048                 float                   m_surface_max_facet_angle;
03049                 float                   m_surface_max_facet_deviation;
03050                 float                   m_surface_max_facet_width;
03051                 float                   m_curve_max_angle;              
03052                 float                   m_curve_max_deviation;  
03053                 float                   m_curve_max_length;             
03054 
03055                 float           m_stereo_separation;    
03056                 float           m_stereo_distance;    
03057 
03058                 unsigned char   m_tessellations;        
03059                 char            m_num_cylinder;         
03060                 char            m_cylinder[8];          
03061                 char            m_num_sphere;           
03062                 char            m_sphere[8];            
03063 
03064                 unsigned char   m_transparency_options; 
03065 
03066                 unsigned char   m_cut_geometry;         
03067                 unsigned char   m_cut_geometry_level;   
03068                 unsigned char   m_cut_geometry_match;   
03069                 float           m_cut_geometry_tolerance;
03070 
03071                 unsigned short  m_simple_shadow;        
03072                 unsigned char   m_simple_shadow_blur;   
03073                 unsigned short  m_simple_shadow_resolution; 
03074                 float                   m_simple_shadow_plane[4];   
03075                 float                   m_simple_shadow_light[3];   
03076                 float                   m_simple_shadow_color[3];   
03077                 float                   m_simple_shadow_opacity;
03078 
03079                 unsigned char   m_shadow_map;                   
03080                 unsigned short  m_shadow_map_resolution; 
03081                 unsigned char   m_shadow_map_samples; 
03082 
03083                 unsigned short  m_simple_reflection;                    
03084                 float                   m_simple_reflection_plane[4];   
03085                 float                   m_simple_reflection_opacity;    
03086                 int                             m_simple_reflection_blur;               
03087                 float                   m_simple_reflection_hither;             
03088                 float                   m_simple_reflection_yon;                
03089 
03090                 float           m_depth_range[2];       
03091                 float           m_screen_range[4];      
03092                 float           m_image_scale[2];       
03093                 unsigned char   m_mask_transform;       
03094 
03095                 unsigned char   m_geometry_options;             
03096                 float                   m_dihedral;                             
03097 
03098                 float                   m_image_tint_color[3];   
03099                 unsigned char   m_depth_peeling_layers;  
03100                 float                   m_depth_peeling_min_area;
03101 
03102                 int             m_general_displacement;    
03103                 int             m_join_cutoff_angle;    
03104                 unsigned char   m_display_list_level;    
03105 
03106 #if 0
03107                 TK_Radiosity_RayTrace_Options   *m_rrt; 
03108 #endif
03109 
03110         public:
03112                 TK_Rendering_Options ();
03113                 ~TK_Rendering_Options ();
03114 
03115                 TK_Status   Read (BStreamFileToolkit & tk) alter;
03116                 TK_Status   Write (BStreamFileToolkit & tk) alter;
03117                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
03118 
03119                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
03120                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
03121 
03122                 void        Reset (void) alter;
03123 
03125                 void            SetMask (int m0, int m1=0) alter    {
03126                                                         m_mask[0] = m0;
03127                                                         m_mask[1] = m1;
03128                                                         if (m1 != 0)
03129                                                                 m_mask[0] |= TKO_Rendo_Extended;
03130                                                 }
03132                 int             GetMask (int index=0) const         { return m_mask[index];             }
03133 
03135                 void            SetValue (int v0, int v1=0) alter   { m_value[0] = v0; m_value[1] = v1; }
03137                 int             GetValue (int index=0) const        { return m_value[index];            }
03138 
03140                 void            SetHSR (int h) alter            { m_hsr &= 0xF0; m_hsr |= (unsigned char)h & 0x0F;  }
03142                 int             GetHSR (void) const             { return (int)(m_hsr & 0x0F);                       }
03143 
03145                 void            SetTransparentHSR (int t) alter { m_hsr &= 0x0F; m_hsr |= (unsigned char)t << 4;    }
03147                 int             GetTransparentHSR (void) const  { return (int)(m_hsr >> 4);                         }
03148 
03150                 void            SetTransparentStyle (int s) alter { m_transparency_options = (unsigned char)s;      }
03152                 int             GetTransparentStyle (void) const  { return (int)m_transparency_options;             }
03153 
03155                 void            SetTechnology (int t) alter     { m_tq &= 0xF0; m_tq |= (unsigned char)t & 0x0F;    }
03157                 int             GetTechnology (void) const      { return (int)(m_tq & 0x0F);                        }
03158 
03160                 void            SetQuantization (int q) alter   { m_tq &= 0x0F; m_tq |= (unsigned char)q << 4;      }
03162                 int             GetQuantization (void) const    { return (int)(m_tq >> 4);                          }
03163 
03165                 void            SetDebug (int d) alter          { m_debug = d;                                      }
03167                 int             GetDebug (void) const           { return m_debug;                                   }
03168 
03170                 void            SetFaceDisplacement (int d) alter   { m_face_displacement = d;                      }
03172                 int             GetFaceDisplacement (void) const    { return m_face_displacement;                   }
03173 
03175                 void            SetGeneralDisplacement (int d) alter   { m_general_displacement = d;                      }
03177                 int             GetGeneralDisplacement (void) const    { return m_general_displacement;                   }
03178 
03180                 void            SetJoinCutoffAngle (int d) alter   { m_join_cutoff_angle = d;                                           }
03182                 int             GetJoinCutoffAngle (void) const    { return m_join_cutoff_angle;                                        }
03183 
03185                 void            SetFogLimits (float n, float f) alter   { m_fog_limits[0] = n; m_fog_limits[1] = f; }
03187                 void            SetFogLimits (float const * l) alter    { SetFogLimits (l[0], l[1]);                }
03189                 float const *   GetFogLimits (void) const               { return m_fog_limits;                      }
03190 
03191 
03193                 void            SetLockMask (int m) alter               { m_lock_mask = m;                  }
03195                 int             GetLockMask (void) const                { return m_lock_mask;               }
03196 
03198                 void            SetLockValue (int v) alter              { m_lock_value = v;                 }
03200                 int             GetLockValue (void) const               { return m_lock_value;              }
03201 
03206                 void            SetVisibilityLockMask (int m) alter     { m_lock_visibility_mask = m;       }
03211                 int             GetVisibilityLockMask (void) const      { return m_lock_visibility_mask;    }
03212 
03217                 void            SetVisibilityLockValue (int v) alter    { m_lock_visibility_value = v;      }
03222                 int             GetVisibilityLockValue (void) const     { return m_lock_visibility_value;   }
03223 
03224 
03229                 void            SetColorLockMask (int m) alter     { m_lock_color_mask = m;       }
03234                 int             GetColorLockMask (void) const      { return m_lock_color_mask;    }
03235 
03240                 void            SetColorLockValue (int v) alter    { m_lock_color_value = v;      }
03245                 int             GetColorLockValue (void) const     { return m_lock_color_value;   }
03246 
03247 
03252                 void            SetColorFaceLockMask (int m) alter          { m_lock_color_face_mask = (short)m;     }
03257                 int             GetColorFaceLockMask (void) const           { return m_lock_color_face_mask;         }
03258 
03263                 void            SetColorFaceLockValue (int v) alter         { m_lock_color_face_value = (short)v;    }
03268                 int             GetColorFaceLockValue (void) const          { return m_lock_color_face_value;        }
03269 
03270 
03275                 void            SetColorEdgeLockMask (int m) alter          { m_lock_color_edge_mask = (short)m;     }
03280                 int             GetColorEdgeLockMask (void) const           { return m_lock_color_edge_mask;         }
03281 
03286                 void            SetColorEdgeLockValue (int v) alter         { m_lock_color_edge_value = (short)v;    }
03291                 int             GetColorEdgeLockValue (void) const          { return m_lock_color_edge_value;        }
03292 
03293 
03298                 void            SetColorLineLockMask (int m) alter          { m_lock_color_line_mask = (short)m;     }
03303                 int             GetColorLineLockMask (void) const           { return m_lock_color_line_mask;         }
03304 
03309                 void            SetColorLineLockValue (int v) alter         { m_lock_color_line_value = (short)v;    }
03314                 int             GetColorLineLockValue (void) const          { return m_lock_color_line_value;        }
03315 
03316 
03321                 void            SetColorMarkerLockMask (int m) alter          { m_lock_color_marker_mask = (short)m;     }
03326                 int             GetColorMarkerLockMask (void) const           { return m_lock_color_marker_mask;         }
03327 
03332                 void            SetColorMarkerLockValue (int v) alter         { m_lock_color_marker_value = (short)v;    }
03337                 int             GetColorMarkerLockValue (void) const          { return m_lock_color_marker_value;        }
03338 
03339 
03344                 void            SetColorTextLockMask (int m) alter          { m_lock_color_text_mask = (short)m;     }
03349                 int             GetColorTextLockMask (void) const           { return m_lock_color_text_mask;         }
03350 
03355                 void            SetColorTextLockValue (int v) alter         { m_lock_color_text_value = (short)v;    }
03360                 int             GetColorTextLockValue (void) const          { return m_lock_color_text_value;        }
03361 
03362 
03367                 void            SetColorWindowLockMask (int m) alter          { m_lock_color_window_mask = (short)m;     }
03372                 int             GetColorWindowLockMask (void) const           { return m_lock_color_window_mask;         }
03373 
03378                 void            SetColorWindowLockValue (int v) alter         { m_lock_color_window_value = (short)v;    }
03383                 int             GetColorWindowLockValue (void) const          { return m_lock_color_window_value;        }
03384 
03385 
03390                 void            SetColorFaceContrastLockMask (int m) alter          { m_lock_color_face_contrast_mask = (short)m;     }
03395                 int             GetColorFaceContrastLockMask (void) const           { return m_lock_color_face_contrast_mask;         }
03396 
03401                 void            SetColorFaceContrastLockValue (int v) alter         { m_lock_color_face_contrast_value = (short)v;    }
03406                 int             GetColorFaceContrastLockValue (void) const          { return m_lock_color_face_contrast_value;        }
03407 
03408 
03413                 void            SetColorWindowContrastLockMask (int m) alter          { m_lock_color_window_contrast_mask = (short)m;     }
03418                 int             GetColorWindowContrastLockMask (void) const           { return m_lock_color_window_contrast_mask;         }
03419 
03424                 void            SetColorWindowContrastLockValue (int v) alter         { m_lock_color_window_contrast_value = (short)v;    }
03429                 int             GetColorWindowContrastLockValue (void) const          { return m_lock_color_window_contrast_value;        }
03430 
03431 
03436                 void            SetColorBackLockMask (int m) alter          { m_lock_color_back_mask = (short)m;     }
03441                 int             GetColorBackLockMask (void) const           { return m_lock_color_back_mask;         }
03442 
03447                 void            SetColorBackLockValue (int v) alter         { m_lock_color_back_value = (short)v;    }
03452                 int             GetColorBackLockValue (void) const          { return m_lock_color_back_value;        }
03453 
03454 
03459                 void            SetColorVertexLockMask (int m) alter          { m_lock_color_vertex_mask = (short)m;     }
03464                 int             GetColorVertexLockMask (void) const           { return m_lock_color_vertex_mask;         }
03465 
03470                 void            SetColorVertexLockValue (int v) alter         { m_lock_color_vertex_value = (short)v;    }
03475                 int             GetColorVertexLockValue (void) const          { return m_lock_color_vertex_value;        }
03476 
03477 
03482                 void            SetColorEdgeContrastLockMask (int m) alter          { m_lock_color_edge_contrast_mask = (short)m;     }
03487                 int             GetColorEdgeContrastLockMask (void) const           { return m_lock_color_edge_contrast_mask;         }
03488 
03493                 void            SetColorEdgeContrastLockValue (int v) alter         { m_lock_color_edge_contrast_value = (short)v;    }
03498                 int             GetColorEdgeContrastLockValue (void) const          { return m_lock_color_edge_contrast_value;        }
03499 
03500 
03505                 void            SetColorLineContrastLockMask (int m) alter          { m_lock_color_line_contrast_mask = (short)m;     }
03510                 int             GetColorLineContrastLockMask (void) const           { return m_lock_color_line_contrast_mask;         }
03511 
03516                 void            SetColorLineContrastLockValue (int v) alter         { m_lock_color_line_contrast_value = (short)v;    }
03521                 int             GetColorLineContrastLockValue (void) const          { return m_lock_color_line_contrast_value;        }
03522 
03523 
03528                 void            SetColorMarkerContrastLockMask (int m) alter          { m_lock_color_marker_contrast_mask = (short)m;     }
03533                 int             GetColorMarkerContrastLockMask (void) const           { return m_lock_color_marker_contrast_mask;         }
03534 
03539                 void            SetColorMarkerContrastLockValue (int v) alter         { m_lock_color_marker_contrast_value = (short)v;    }
03544                 int             GetColorMarkerContrastLockValue (void) const          { return m_lock_color_marker_contrast_value;        }
03545 
03546 
03551                 void            SetColorVertexContrastLockMask (int m) alter          { m_lock_color_vertex_contrast_mask = (short)m;     }
03556                 int             GetColorVertexContrastLockMask (void) const           { return m_lock_color_vertex_contrast_mask;         }
03557 
03562                 void            SetColorVertexContrastLockValue (int v) alter         { m_lock_color_vertex_contrast_value = (short)v;    }
03567                 int             GetColorVertexContrastLockValue (void) const          { return m_lock_color_vertex_contrast_value;        }
03568 
03569 
03574                 void            SetColorTextContrastLockMask (int m) alter          { m_lock_color_text_contrast_mask = (short)m;     }
03579                 int             GetColorTextContrastLockMask (void) const           { return m_lock_color_text_contrast_mask;         }
03580 
03585                 void            SetColorTextContrastLockValue (int v) alter         { m_lock_color_text_contrast_value = (short)v;    }
03590                 int             GetColorTextContrastLockValue (void) const          { return m_lock_color_text_contrast_value;        }
03591 
03592 
03593 
03594 
03596                 void            SetBufferOptionsMask (int v) alter      { m_buffer_options_mask = (unsigned char)v;        }
03598                 int             GetBufferOptionsMask (void) const       { return m_buffer_options_mask;     }
03600                 void            SetBufferOptionsValue (int v) alter     { m_buffer_options_value = (unsigned char) v; }
03602                 int             GetBufferOptionsValue (void) const      { return m_buffer_options_value;    }
03604                 void            SetBufferSizeLimit (int l) alter        { m_buffer_size_limit = l;          }
03606                 int             GetBufferSizeLimit (void) const         { return m_buffer_size_limit;       }
03607 
03608 
03610                 void            SetStereoSeparation (float s) alter     { m_stereo_separation = s;          }
03612                 float           GetStereoSeparation (void) const        { return m_stereo_separation;       }
03614                 void            SetStereoDistance (float d) alter     { m_stereo_distance = d;          }
03616                 float           GetStereoDistance (void) const        { return m_stereo_distance;       }
03617 
03618 
03620                 void            SetHlrOptions (int o) alter {
03621                                                         m_hlr_options = o;
03622                                                         if ((o & TKO_Hidden_Line_Extended_Mask) != 0) {
03623                                                                 m_hlr_options |= TKO_Hidden_Line_Extended;
03624                                                         if ((o & TKO_Hidden_Line_Extended2_Mask) != 0)
03625                                                                 m_hlr_options |= TKO_Hidden_Line_Extended2;
03626                                                 }
03627                         }
03629                 int             GetHlrOptions (void) const              { return m_hlr_options;             }
03631                 void            SetHlrDimFactor (float d) alter         { m_hlr_dim_factor = d;             }
03633                 float           GetHlrDimFactor (void) const            { return m_hlr_dim_factor;          }
03635                 void            SetHlrFaceDisplacement (float d) alter  { m_hlr_face_displacement = d;      }
03637                 float           GetHlrFaceDisplacement (void) const     { return m_hlr_face_displacement;   }
03639                 void            SetHlrLinePattern (int p) alter         { m_hlr_line_pattern = p;           }
03641                 int             GetHlrLinePattern (void) const          { return m_hlr_line_pattern;        }
03643                 void            SetHlrFaceSortingAlgorithm (int a) alter { m_hlr_hsr_algorithm = (unsigned char)a;  }
03645                 float           GetHlrFaceSortingAlgorithm (void) const { return m_hlr_hsr_algorithm;               }
03646 
03647 
03649                 void            SetNURBSOptionsMask (int m) alter {
03650                                                         m_nurbs_options_mask = m;
03651                                                         if ((m & TKO_NURBS_Extended_Mask) != 0)
03652                                                                 m_nurbs_options_mask |= TKO_NURBS_Extended;
03653                                                 }
03655                 int             GetNURBSOptionsMask (void) const        { return m_nurbs_options_mask;     }
03657                 void            SetNURBSOptionsValue (int v) alter      { m_nurbs_options_value = v;       }
03659                 int             GetNURBSOptionsValue (void) const       { return m_nurbs_options_value;    }
03661                 void            SetNURBSCurveBudget (int b) alter       { m_curve_budget = b;               }
03663                 int             GetNURBSCurveBudget (void) const        { return m_curve_budget;            }
03665                 void            SetNURBSCurveContinuedBudget (int b) alter  { m_curve_continued_budget = b;     }
03667                 int             GetNURBSCurveContinuedBudget (void) const   { return m_curve_continued_budget;  }
03669                 void            SetNURBSSurfaceBudget (int b) alter     { m_curve_budget = b;               }
03671                 int             GetNURBSSurfaceBudget (void) const      { return m_curve_budget;            }
03673                 void            SetNURBSSurfaceTrimBudget (int b) alter { m_surface_trim_budget = b;        }
03675                 int             GetNURBSSurfaceTrimBudget (void) const  { return m_surface_trim_budget;     }
03676 
03677 
03679                 void            SetLodOptionsMask (int v) alter         { m_lod_options_mask = v;           }
03681                 int             GetLodOptionsMask (void) const          { return m_lod_options_mask;        }
03683                 void            SetLodOptionsValue (int v) alter        { m_lod_options_value = v;          }
03685                 int             GetLodOptionsValue (void) const         { return m_lod_options_value;       }
03687                 void            SetLodAlgorithm (int v) alter           { m_lod_algorithm = (char)v;        }
03689                 int             GetLodAlgorithm (void) const            { return m_lod_algorithm;           }
03691                 void            SetLodMinimumTriangleCount (int v) alter    { m_min_triangle_count = v;     }
03693                 int             GetLodMinimumTriangleCount (void) const     { return m_min_triangle_count;  }
03695                 void            SetLodNumLevels (int v) alter           { m_num_levels = (unsigned char)v;  }
03697                 int             GetLodNumLevels (void) const            { return m_num_levels;              }
03699                 void            SetLodClamp (int v) alter               { m_clamp = (unsigned char)v;       }
03701                 int             GetLodClamp (void) const                { return m_clamp;                   }
03703                 void            SetLodMaxDegree (int v) alter           { m_max_degree = v;                 }
03705                 int             GetLodMaxDegree (void) const            { return m_max_degree;              }
03707                 void            SetLodTolerance (float v) alter         { m_tolerance = v;                  }
03709                 float           GetLodTolerance (void) const            { return m_tolerance;               }
03711                 void            SetLodFallback (int v) alter            { m_fallback = (char)v;             }
03713                 int             GetLodFallback (void) const             { return m_fallback;                }
03714 
03716                 void            SetLodBounding (float x1, float y1, float z1, float x2, float y2, float z2) alter {
03717                                                         m_bounding[0] = x1;  m_bounding[1] = y1;  m_bounding[2] = z1;
03718                                                         m_bounding[3] = x2;  m_bounding[4] = y2;  m_bounding[5] = z2;
03719                                                 }
03721                 void            SetLodBounding (float const * s, float const * e) alter {
03722                                                         SetLodBounding (s[0], s[1], s[2],  e[0], e[1], e[2]);
03723                                                 }
03725                 void            SetLodBounding (float const * p) alter  { SetLodBounding (&p[0], &p[3]);    }
03727                 float const *   GetLodBounding (void) const             { return m_bounding;                }
03728 
03730                 void            SetLodRatio (float r) alter             { m_num_ratios = 1; m_ratio[0] = r; }
03732                 void            SetLodRatios (int c, float const * r = 0) alter {
03733                                                         m_num_ratios = (char)c;
03734                                                         if (r != 0) {
03735                                                                 int i;
03736                                                                 for (i=0; i<c; ++i)
03737                                                                         m_ratio[i] = r[i];
03738                                                         }
03739                                                 }
03741                 int             GetLodNumRatios (void) const            { return m_num_ratios;              }
03743                 float const *   GetLodRatios (void) const               { return m_ratio;                   }
03745                 float alter *   GetLodRatios (void) alter               { return m_ratio;                   }
03746 
03748                 void            SetLodThresholdType (int v) alter       { m_threshold_type = (char)v; }
03750                 int             GetLodThresholdType (void) const        { return m_threshold_type; }
03752                 void            SetLodThreshold (float r) alter             { m_num_thresholds = 1; m_threshold[0] = r;    }
03754                 void            SetLodThresholds (int c, float const * r = 0) alter {
03755                                                         m_num_thresholds = (char)c;
03756                                                         if (r != 0) {
03757                                                                 int i;
03758                                                                 for (i=0; i<c; ++i)
03759                                                                         m_threshold[i] = r[i];
03760                                                         }
03761                                                 }
03763                 int             GetLodNumThresholds (void) const            { return m_num_thresholds;              }
03765                 float const *   GetLodThresholds (void) const               { return m_threshold;                  }
03767                 float alter *   GetLodThresholds (void) alter               { return m_threshold;                  }
03768 
03770                 void            SetLodCutoff (float r) alter             { m_num_cutoffs = 1; m_cutoff[0] = r;    }
03772                 void            SetLodCutoffs (int c, float const * r = 0) alter {
03773                                                         m_num_cutoffs = (char)c;
03774                                                         if (r != 0) {
03775                                                                 int i;
03776                                                                 for (i=0; i<c; ++i)
03777                                                                         m_cutoff[i] = r[i];
03778                                                         }
03779                                                 }
03781                 int             GetLodNumCutoffs (void) const           { return m_num_cutoffs;             }
03783                 float const *   GetLodCutoffs (void) const              { return m_cutoff;                  }
03785                 float alter *   GetLodCutoffs (void) alter              { return m_cutoff;                  }
03786 
03787 
03789                 void            SetTessellationMask (int m) alter       { m_tessellations = (unsigned char)m;          }
03791                 int             GetTessellationMask (void) const        { return m_tessellations;       }
03793                 void            SetCylinderTessellation (int n) alter    { m_num_cylinder = (char)1; m_cylinder[0] = (char)n;    }
03795                 void            SetCylinderTessellations (int c, char const * n = 0) alter {
03796                                                         m_num_cylinder = (char)c;
03797                                                         if (n != 0) {
03798                                                                 int i;
03799                                                                 for (i=0; i<c; ++i)
03800                                                                         m_cylinder[i] = n[i];
03801                                                         }
03802                                                 }
03804                 int             GetNumCylinderTessellations (void) const { return m_num_cylinder;           }
03806                 char const *    GetCylinderTessellations (void) const    { return m_cylinder;               }
03808                 char alter *    GetCylinderTessellations (void) alter    { return m_cylinder;               }
03810                 void            SetSphereTessellation (int n) alter    { m_num_sphere = (char)1; m_sphere[0] = (char)n;    }
03812                 void            SetSphereTessellations (int c, char const * n = 0) alter {
03813                                                         m_num_sphere = (char)c;
03814                                                         if (n != 0) {
03815                                                                 int i;
03816                                                                 for (i=0; i<c; ++i)
03817                                                                         m_sphere[i] = n[i];
03818                                                         }
03819                                                 }
03821                 int             GetNumSphereTessellations (void) const { return m_num_sphere;           }
03823                 char const *    GetSphereTessellations (void) const    { return m_sphere;               }
03825                 char alter *    GetSphereTessellations (void) alter    { return m_sphere;               }
03826 
03828                 void            SetGeometryOptionsMask (int m) alter       { m_geometry_options = (unsigned char)m;     }
03830                 int             GetGeometryOptionsMask (void) const        { return m_geometry_options; }
03831 
03833                 void            SetHardEdgeAngle (int m) alter       { m_dihedral = (unsigned char)m;   }
03835                 float           GetHardEdgeAngle (void) const        { return m_dihedral;       }
03836 
03838                 void            SetMaskTransform (int m) alter      { m_mask_transform = (unsigned char)m;  }
03840                 int             GetMaskTransform (void) const       { return (int)m_mask_transform;         }
03841 
03842 
03844                 void            SetCutGeometry (int m) alter        { m_cut_geometry = (unsigned char)m;  }
03846                 int             GetCutGeometry (void) const         { return (int)m_cut_geometry;         }
03847 
03849                 void            SetCutGeometryLevel (int m) alter       { m_cut_geometry_level = (unsigned char)m;  }
03851                 int             GetCutGeometryLevel (void) const        { return (int)m_cut_geometry_level;         }
03852 
03854                 void            SetCutGeometryColorMatch (int m) alter  { m_cut_geometry_match = (unsigned char)m;  }
03856                 int             GetCutGeometryColorMatch (void) const   { return (int)m_cut_geometry_match;         }
03857 
03859                 void            SetCutGeometryTolerance (float m) alter     { m_cut_geometry_tolerance = m;     }
03861                 float           GetCutGeometryTolerance (void) const        { return m_cut_geometry_tolerance;  }
03862 
03863 
03865                 void            SetDisplayListLevel (int m) alter       { m_display_list_level = (unsigned char)m;  }
03867                 int             GetDisplayListLevel (void) const        { return (int)m_display_list_level;         }
03868 
03870                 void            SetSimpleShadow (int m) alter {
03871                                                         m_simple_shadow = (unsigned short)m;
03872                                                         if ((m & TKO_Simple_Shadow_Extended_Mask) != 0)
03873                                                                 m_simple_shadow |= TKO_Simple_Shadow_Extended;
03874                                                 }
03876                 int             GetSimpleShadow (void) const        { return (int)m_simple_shadow;         }
03877 
03879                 void            SetSimpleShadowBlur (int m) alter           { m_simple_shadow_blur = (unsigned char)m;  }
03881                 int             GetSimpleShadowBlur (void) const            { return (int)m_simple_shadow_blur;         }
03882 
03884                 void            SetSimpleShadowResolution (int m) alter     { m_simple_shadow_resolution = (unsigned short)m;  }
03886                 int             GetSimpleShadowResolution (void) const      { return (int)m_simple_shadow_resolution;         }
03887 
03889                 void            SetSimpleShadowLight (float x, float y, float z) alter {
03890                                                         m_simple_shadow_light[0] = x;
03891                                                         m_simple_shadow_light[1] = y;
03892                                                         m_simple_shadow_light[2] = z;
03893                                                 }
03895                 void            SetSimpleShadowLight (float const * l) alter    { SetSimpleShadowLight (l[0], l[1], l[2]); }
03897                 float const *   getSimpleShadowLight (void) const               { return m_simple_shadow_light; }
03898 
03900                 void            SetSimpleShadowPlane (float a, float b, float c, float d) alter {
03901                                                         m_simple_shadow_plane[0] = a;
03902                                                         m_simple_shadow_plane[1] = b;
03903                                                         m_simple_shadow_plane[2] = c;
03904                                                         m_simple_shadow_plane[3] = d;
03905                                                 }
03907                 void            SetSimpleShadowPlane (float const * p) alter    { SetSimpleShadowPlane (p[0], p[1], p[2], p[3]); }
03909                 float const *   GetSimpleShadowPlane (void) const               { return m_simple_shadow_plane; }
03910 
03912                 void            SetSimpleShadowColor (float r, float g, float b) alter
03913                                 { m_simple_shadow_color[0] = r; m_simple_shadow_color[1] = g; m_simple_shadow_color[2] = b; }
03915                 void            SetSimpleShadowColor (float const * rgb) alter      { SetSimpleShadowColor (rgb[0], rgb[1], rgb[2]);    }
03917                 float const *   GetSimpleShadowColor (void) const                   { return m_simple_shadow_color;     }
03918 
03920                 void            SetSimpleShadowOpacity (float o) alter  { m_simple_shadow_opacity = o;          }
03922                 float           GetSimpleShadowOpacity (void) const         { return m_simple_shadow_opacity;   }
03923 
03924   
03926                 void            SetShadowMap (int m) alter              { m_shadow_map = (unsigned char)m;      }
03928                 int             GetShadowMap (void) const           { return (int)m_shadow_map;         }
03929 
03931                 void            SetShadowMapResolution (int m) alter    { m_shadow_map_resolution = (unsigned short)m;  }
03933                 int             GetShadowMapResolution (void) const         { return (int)m_shadow_map_resolution;         }
03934 
03936                 void            SetShadowMapSamples (int m) alter               { m_shadow_map_samples = (unsigned char)m;  }
03938                 int             GetShadowMapSamples (void) const            { return (int)m_shadow_map_samples;         }
03939 
03940 
03942                 void            SetSimpleReflection (int m) alter               { m_simple_reflection = (unsigned short)m;      }
03944                 int             GetSimpleReflection (void) const            { return (int)m_simple_reflection;                  }
03945 
03947                 void            SetSimpleReflectionPlane (float a, float b, float c, float d) alter {
03948                                                         m_simple_reflection_plane[0] = a;
03949                                                         m_simple_reflection_plane[1] = b;
03950                                                         m_simple_reflection_plane[2] = c;
03951                                                         m_simple_reflection_plane[3] = d;
03952                                                 }
03954                 void            SetSimpleReflectionPlane (float const * p) alter    { SetSimpleReflectionPlane (p[0], p[1], p[2], p[3]); }
03956                 float const *   GetSimpleReflectionPlane (void) const               { return m_simple_reflection_plane; }
03957 
03959                 void            SetSimpleReflectionOpacity (float o) alter      { m_simple_reflection_opacity = o;              }
03961                 float           GetSimpleReflectionOpacity (void) const     { return m_simple_reflection_opacity;       }
03962 
03963 
03965                 void            SetDepthRange (float n, float f) alter   { m_depth_range[0] = n; m_depth_range[1] = f; }
03967                 void            SetDepthRange (float const * l) alter    { SetDepthRange (l[0], l[1]);                }
03969                 float const *   GetDepthRange (void) const               { return m_depth_range;                      }
03970 
03971 
03973                 void            SetScreenRange (float l, float r, float b, float t) alter
03974                                                         { m_screen_range[0] = l; m_screen_range[1] = r; m_screen_range[2] = b; m_screen_range[3] = t; }
03976                 void            SetScreenRange (float const * l) alter    { SetScreenRange (l[0], l[1], l[2], l[3]);    }
03978                 float const *   GetScreenRange (void) const               { return m_screen_range;                      }
03979 
03980 
03982                 void            SetImageScale (float x, float y) alter   { m_image_scale[0] = x; m_image_scale[1] = y; }
03984                 void            SetImageScale (float const * s) alter    { SetImageScale (s[0], s[1]);                }
03986                 float const *   GetImageScale (void) const               { return m_image_scale;                      }
03987 
03988 
03990                 void            SetImageTintColor (float r, float g, float b) alter
03991                                 { m_image_tint_color[0] = r; m_image_tint_color[1] = g; m_image_tint_color[2] = b; }
03993                 void            SetImageTintColor (float const * rgb) alter         { SetImageTintColor (rgb[0], rgb[1], rgb[2]);       }
03995                 float const *   GetImageTintColor (void) const                   { return m_image_tint_color;     }
03996 
03997 };
03998 
04000 
04004 enum TKO_Heuristic_Bits {
04005         TKO_Heuristic_Hidden_Surfaces           = 0x00000001,  
04006         TKO_Heuristic_Backplane_Cull            = 0x00000002,  
04007         TKO_Heuristic_Polygon_Handedness        = 0x00000004,  
04008         TKO_Heuristic_Quick_Moves               = 0x00000008,  
04009         TKO_Heuristic_Partial_Erase             = 0x00000010,  
04010         TKO_Heuristic_Memory_Purge              = 0x00000020,  
04011         TKO_Heuristic_Related_Select_Limit      = 0x00000040,  
04012         TKO_Heuristic_Internal_Shell_Limit              = 0x00000080,  
04013         TKO_Heuristic_Clipping                  = 0x00000100,  
04014         TKO_Heuristic_Transformations           = 0x00000200,  
04015         TKO_Heuristic_Intersecting_Polygons     = 0x00000400,  
04016         TKO_Heuristic_Polygon_Crossings         = 0x00000800,  
04017         TKO_Heuristic_Concave_Polygons          = 0x00001000,  
04018         TKO_Heuristic_Incremental_Updates       = 0x00002000,  
04019         TKO_Heuristic_Selection_Sorting         = 0x00004000,  
04020 
04021         TKO_Heuristic_Extended                  = 0x00008000,  
04022 
04023         TKO_Heuristic_Culling                   = 0x00010000,  
04024         TKO_Heuristic_Exclude_Bounding          = 0x00020000,  
04025         TKO_Heuristic_Detail_Selection          = 0x00040000,  
04026         TKO_Heuristic_Ordered_Drawing                   = 0x00080000,  
04027         TKO_Heuristic_Ordered_Unit                              = 0x00100000,  
04028         TKO_Heuristic_Ordered_Weights                   = 0x00200000,  
04029         TKO_Heuristic_Internal_Polyline_Limit   = 0x00400000,  
04030         TKO_Heuristic_Ordered_Grid                              = 0x00800000,  
04031 
04032         TKO_Heuristic_Selection_Level                   = 0x01000000,  
04033         TKO_Heuristic_Static                                    = 0x02000000,  
04034 
04035         TKO_Heuristic_Internal_Select_Limit = TKO_Heuristic_Internal_Shell_Limit | TKO_Heuristic_Internal_Polyline_Limit,  
04036         TKO_Heuristic_Extras                = TKO_Heuristic_Polygon_Handedness | TKO_Heuristic_Quick_Moves,  
04037 
04038         TKO_Heur_Extra_Left_Handed_Polys    = 0x01,                     
04039         TKO_Heur_Extra_Quick_Move_Spriting  = 0x02,                     
04040 
04041         TKO_Heur_View_Frustum_Culling           = 0x0001,                       
04042         TKO_Heur_Obscuration_Culling            = 0x0002,                       
04043         TKO_Heur_Extent_Culling                         = 0x0004,                       
04044         TKO_Heur_View_Frustum_Culling_Off       = 0x0010,                       
04045         TKO_Heur_Obscuration_Culling_Off        = 0x0020,                       
04046         TKO_Heur_Extent_Culling_Off                     = 0x0040,                       
04047         TKO_Heur_Culling_Extended                       = 0x0080,                       
04048         TKO_Heur_Obscuration_Use_Octree         = 0x0100,                       
04049         TKO_Heur_Maximum_Extent_Mode            = 0x0200,                       
04050         TKO_Heur_Vector_Culling                         = 0x0400,                       
04051         TKO_Heur_Vector_Tolerance                       = 0x0800,                       
04052         TKO_Heur_Vector_Culling_Off                     = 0x1000,                       
04053         TKO_Heur_Vector_Tolerance_Off           = 0x2000,                       
04054         TKO_Heur_Culling_Extended_Mask          = 0xFF00,                       
04055 
04056         TKO_Heur_Max_Extent_Mode_None           = 0,                            
04057         TKO_Heur_Max_Extent_Mode_Dot            = 1,                            
04058         TKO_Heur_Max_Extent_Mode_Bounding       = 2,                            
04059         TKO_Heur_Max_Extent_Mode_Defer          = 3,                            
04060 
04061         TKO_Heur_Order_World_Volume             = 0,                            
04062         TKO_Heur_Order_Screen_Extent    = 1,                            
04063         TKO_Heur_Order_Distance                 = 2,                            
04064         TKO_Heur_Order_Divergence               = 3,                            
04065         TKO_Heur_Order_Density                  = 4,                            
04066         TKO_Heur_Order_Priority                 = 5,                            
04067         TKO_Heur_Order_Count                    = 6,                            
04068 
04069         TKO_Heur_Selection_Level_Entity       = 0,   
04070         TKO_Heur_Selection_Level_Segment      = 1,   
04071         TKO_Heur_Selection_Level_Segment_Tree = 2,   
04072 
04073         TKO_Heur_Force_Enum_Signed_Dummy_Value = -1                     
04074 };
04075 
04076 #define TKO_Heuristic_Extended_Mask ((int)0xFFFF0000)  
04077 
04078 
04080 
04086 class BBINFILETK_API TK_Heuristics : public BBaseOpcodeHandler {
04087     private:
04088         TK_Heuristics(const TK_Heuristics&);
04089         TK_Heuristics& operator=(const TK_Heuristics&);
04090 
04091         protected:
04092                 int             m_mask;         
04093                 int             m_value;        
04094 
04095                 int             m_related;      
04096                 int             m_internal_shell;       
04097                 int             m_internal_polyline;
04098 
04099                 unsigned char   m_extras;       
04100                 unsigned short  m_culling;      
04101                 int                             m_pixel_threshold; 
04102                 int                             m_maximum_extent; 
04103                 int                             m_maximum_extent_mode; 
04104                 float                   m_vector[3];                    
04105                 float                   m_vector_tolerance;             
04106 
04107                 unsigned char   m_ordered_weights_mask;
04108                 float                   m_ordered_weights[TKO_Heur_Order_Count];
04109                 unsigned char   m_selection_level;
04110 
04111         public:
04113                 TK_Heuristics () : BBaseOpcodeHandler (TKE_Heuristics),
04114                                                                   m_mask (0), m_value (0), m_culling(0), m_pixel_threshold (0), m_maximum_extent (0), m_maximum_extent_mode(0) {}
04115                 ~TK_Heuristics ();
04116 
04117                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04118                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04119                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04120 
04121                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04122                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04123 
04125                 void            SetMask (int m) alter {
04126                                                         m_mask = m;
04127                                                         if ((m & TKO_Heuristic_Extended_Mask) != 0)
04128                                                                 m_mask |= TKO_Heuristic_Extended;
04129                                                 }
04131                 int             GetMask (void) const            { return m_mask;    }
04132 
04134                 void            SetValue (int v) alter          { m_value = v;      }
04136                 int             GetValue (void) const           { return m_value;   }
04137 
04139                 void            SetRelatedSelectionLimit (int r) alter  { m_related = r;      }
04141                 int             GetRelatedSelectionLimit (void) const   { return m_related;   }
04142 
04144                 void            SetInternalSelectionLimit (int i) alter { m_internal_shell = m_internal_polyline = i;     }
04146                 int             GetInternalSelectionLimit (void) const  { return m_internal_shell;  }
04147 
04149                 void            SetInternalShellSelectionLimit (int i) alter { m_internal_shell = i;     }
04151                 int             GetInternalShellSelectionLimit (void) const  { return m_internal_shell;  }
04152 
04154                 void            SetInternalPolylineSelectionLimit (int i) alter { m_internal_polyline = i;     }
04156                 int             GetInternalPolylineSelectionLimit (void) const  { return m_internal_polyline;  }
04157 
04159                 void            SetExtras (int e) alter         { m_extras = (unsigned char)e;  }
04161                 int             GetExtras (void) const          { return (int)m_extras;         }
04162 
04164                 void            SetCulling (int c) alter        { m_culling = (unsigned short)c; }
04166                 int             GetCulling (void) const         { return (int)m_culling;        }
04168                 void            SetPixelThreshold (int c) alter        { m_pixel_threshold = c;         }
04170                 int             GetPixelThreshold (void) const         { return m_pixel_threshold;      }
04172                 void            SetMaximumExtent (int c) alter         { m_maximum_extent = c;          }
04174                 int             GetMaximumExtent (void) const          { return m_maximum_extent;       }
04176                 int                             GetMaximumExtentMode (void) const          { return m_maximum_extent_mode; }
04178                 void            SetMaximumExtentMode (int c) alter         { m_maximum_extent_mode = (unsigned char)c;          }
04179                 float const *   GetVector (void) const                                          { return m_vector; }
04180                 void                    SetVector (float x, float y, float z) alter     {
04181                                                         m_vector[0] = x;
04182                                                         m_vector[1] = y;
04183                                                         m_vector[2] = z;
04184                                                 }
04185                 void                    SetVector (float const * v) alter                       { SetVector(v[0], v[1], v[2]); }
04186                 float                   GetVectorTolerance (void) const                         { return m_vector_tolerance; }
04187                 void                    SetVectorTolerance (float tol) alter            { m_vector_tolerance = tol; }
04188 
04190                 void            SetOrderedWeightsMask (int c) alter    { m_ordered_weights_mask = (unsigned char)c;     }
04192                 int             GetOrderedWeightsMask (void) const     { return (int)m_ordered_weights_mask;            }
04193 
04195                 void                    SetOrderedWeight (int index, float weight) alter        {
04196                                                         m_ordered_weights[index] = weight;
04197                                                         m_ordered_weights_mask |= 1<<index;
04198                                                 }
04200                 float                   GetOrderedWeight (int index) const                      { return m_ordered_weights[index];      }
04202                 float const *   GetOrderedWeights (void) const                          { return m_ordered_weights;                     }
04204                 float alter *   GetOrderedWeights (void) alter                          { return m_ordered_weights;                     }
04205 
04207                 void            SetSelectionLevel (int l) alter        { m_selection_level = (unsigned char)l; }
04209                 int             GetSelectionLevel (void) const         { return (int)m_selection_level;        }
04210 };
04211 
04214 
04219 class BBINFILETK_API TK_Visibility : public BBaseOpcodeHandler {
04220         protected:
04221                 int             m_mask;     
04222                 int             m_value;    
04223 
04224         public:
04226                 TK_Visibility (void)
04227                         : BBaseOpcodeHandler (TKE_Visibility), m_mask (0), m_value (0) {}
04228         TK_Visibility(const TK_Visibility& rVis) : BBaseOpcodeHandler(TKE_Visibility) 
04229         {
04230             SetGeometry( rVis.GetGeometry() );
04231             SetValue( rVis.GetValue() );
04232         }
04233         TK_Visibility& operator=(const TK_Visibility& rVis)
04234         {
04235             if(&rVis != this)
04236             {
04237                 m_opcode = rVis.m_opcode;
04238                 SetGeometry( rVis.GetGeometry() );
04239                 SetValue( rVis.GetValue() );
04240             }
04241             return *this;
04242         }
04243 
04244 
04245                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04246                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04247                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04248 
04249                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04250                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04255                 void            SetGeometry (int m) alter {
04256                                                         m_mask = m & TKO_Geo_All_Visibles;
04257                                                         if ((m & TKO_Geo_Extended_Mask) != 0) {
04258                                                                 m_mask |= TKO_Geo_Extended;
04259                                                         if ((m & TKO_Geo_Extended2_Mask) != 0)
04260                                                                 m_mask |= TKO_Geo_Extended2;
04261                                                         }
04262                                                 }
04267                 int             GetGeometry (void) const        { return m_mask;    }
04268 
04273                 void            SetValue (int m) alter          { m_value = m;       }
04278                 int             GetValue (void) const           { return m_value;    }
04279 };
04280 
04283 
04290 class BBINFILETK_API TK_Selectability : public BBaseOpcodeHandler {
04291     private:
04292         TK_Selectability(const TK_Selectability&);
04293         TK_Selectability& operator=(const TK_Selectability&);
04294 
04295         protected:
04296                 int             m_mask;         
04297                 int             m_down;         
04298                 int             m_up;           
04299                 int             m_move_down;    
04300                 int             m_move_up;      
04301                 int             m_invisible;    
04302 
04303         public:
04305                 TK_Selectability (void)
04306                         : BBaseOpcodeHandler (TKE_Selectability),
04307                         m_mask (0), m_down (0), m_up (0), m_move_down (0), m_move_up (0), m_invisible (0) {}
04308 
04309                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04310                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04311                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04312 
04313                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04314                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04319                 void            SetGeometry (int m) alter {
04320                                                         m_mask = m & TKO_Geo_All_Selects;
04321                                                         if ((m & TKO_Geo_Extended_Mask) != 0)
04322                                                                 m_mask |= TKO_Geo_Extended;
04323                                                 }
04328                 int             GetGeometry (void) const        { return m_mask;        }
04329 
04334                 void            SetDown (int m) alter           { m_down = m;           }
04339                 int             GetDown (void) const            { return m_down;        }
04340 
04345                 void            SetUp (int m) alter             { m_up = m;             }
04350                 int             GetUp (void) const              { return m_up;          }
04351 
04356                 void            SetMoveDown (int m) alter       { m_move_down = m;      }
04361                 int             GetMoveDown (void) const        { return m_move_down;   }
04362 
04367                 void            SetMoveUp (int m) alter         { m_move_up = m;        }
04372                 int             GetMoveUp (void) const          { return m_move_up;     }
04373 
04378                 void            SetWhenInvisible (int m) alter  { m_invisible = m;      }
04383                 int             GetWhenInvisible (void) const   { return m_invisible;   }
04384 };
04385 
04387 
04393 class BBINFILETK_API TK_Matrix : public BBaseOpcodeHandler {
04394         protected:
04395                 float           m_matrix[16];  
04396 
04397         public:
04399                 TK_Matrix (unsigned char opcode)
04400                         : BBaseOpcodeHandler (opcode) {}
04401         TK_Matrix(const TK_Matrix& rMatrix) : BBaseOpcodeHandler(rMatrix.m_opcode)
04402         {
04403             SetMatrix( rMatrix.m_matrix );
04404         }
04405 
04406         TK_Matrix& operator=(const TK_Matrix& rMatrix)
04407         {
04408             if(&rMatrix != this)
04409             {
04410                 m_opcode = rMatrix.m_opcode;
04411                 SetMatrix( rMatrix.m_matrix );
04412             }
04413             return *this;
04414         }
04415 
04416 
04417                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04418                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04419                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04420 
04421                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04422                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04423 
04425                 void            SetMatrix (float const * m) alter   {
04426                                                         int i;  for (i=0; i<16; i++) m_matrix[i] = m[i];
04427                                                 }
04429                 float const *   GetMatrix (void) const              { return m_matrix;  }
04431                 float alter *   GetMatrix (void) alter              { return m_matrix;  }
04432 };
04433 
04434 
04438 enum TKO_Enumerations {
04439         TKO_Line_Pattern_Solid      = 0,  
04440         TKO_Line_Pattern_Dash_Dot   = 1,  
04441         TKO_Line_Pattern_Dashed     = 2,  
04442         TKO_Line_Pattern_Dotted     = 3,  
04443         TKO_Line_Pattern_Dash_2Dot  = 4,  
04444         TKO_Line_Pattern_Dash_3Dot  = 5,  
04445         TKO_Line_Pattern_Long_Dash  = 6,  
04446         TKO_Line_Pattern_Center     = 7,  
04447         TKO_Line_Pattern_Phantom    = 8,  
04448         TKO_Line_Pattern_Find_Dots  = 9,  
04449 
04450         TKO_Fill_Pattern_Hash       = 0,  
04451         TKO_Fill_Pattern_Vertical   = 1,  
04452         TKO_Fill_Pattern_Horizontal = 2,  
04453         TKO_Fill_Pattern_Right      = 3,  
04454         TKO_Fill_Pattern_Left       = 4,  
04455         TKO_Fill_Pattern_Diamond    = 5,  
04456         TKO_Fill_Pattern_Dots       = 6,  
04457         TKO_Fill_Pattern_Boxes      = 7,  
04458         TKO_Fill_Pattern_Solid      = 8,  
04459         TKO_Fill_Pattern_Clear      = 9,  
04460         TKO_Fill_Pattern_Gradient_N = 10,  
04461         TKO_Fill_Pattern_Gradient_NE= 11,  
04462         TKO_Fill_Pattern_Gradient_E = 12,  
04463         TKO_Fill_Pattern_Gradient_SE= 13,  
04464         TKO_Fill_Pattern_Gradient_S = 14,  
04465         TKO_Fill_Pattern_Gradient_SW= 15,  
04466         TKO_Fill_Pattern_Gradient_W = 16,  
04467         TKO_Fill_Pattern_Gradient_NW= 17,  
04468         TKO_Fill_Pattern_Blend  = 18,  
04469         TKO_Fill_Pattern_Invisible      = 19,  
04470 
04471         TKO_Marker_Circle                       = 0,  
04472         TKO_Marker_Circle_Dot                   = 1,  
04473         TKO_Marker_Circle_Plus                  = 2,  
04474         TKO_Marker_Circle_X                     = 3,  
04475         TKO_Marker_Circle_Circle                = 4,  
04476         TKO_Marker_Circle_Filled                = 5,  
04477         TKO_Marker_Dot                          = 6,  
04478         TKO_Marker_Plus                         = 7,  
04479         TKO_Marker_X                            = 8,  
04480         TKO_Marker_Star                         = 9,  
04481         TKO_Marker_Box                          = 10,  
04482         TKO_Marker_Box_Dot                      = 11,  
04483         TKO_Marker_Box_X                        = 12,  
04484         TKO_Marker_Box_Filled                   = 13,  
04485         TKO_Marker_Diamond                      = 14,  
04486         TKO_Marker_Diamond_Dot                  = 15,  
04487         TKO_Marker_Diamond_Plus                 = 16,  
04488         TKO_Marker_Diamond_Filled               = 17,  
04489         TKO_Marker_Triangle_Up                  = 18,  
04490         TKO_Marker_Triangle_Up_Vertex           = 19,  
04491         TKO_Marker_Triangle_Up_Dot              = 20,  
04492         TKO_Marker_Triangle_Up_Filled           = 21,  
04493         TKO_Marker_Triangle_Up_Filled_Vertex    = 22,  
04494         TKO_Marker_Triangle_Down                = 23,  
04495         TKO_Marker_Triangle_Down_Vertex         = 24,  
04496         TKO_Marker_Triangle_Down_Dot            = 25,  
04497         TKO_Marker_Triangle_Down_Filled         = 26,  
04498         TKO_Marker_Triangle_Down_Filled_Vertex  = 27,  
04499         TKO_Marker_Triangle_Right               = 28,  
04500         TKO_Marker_Triangle_Right_Vertex        = 29,  
04501         TKO_Marker_Triangle_Right_Dot           = 30,  
04502         TKO_Marker_Triangle_Right_Filled        = 31,  
04503         TKO_Marker_Triangle_Right_Filled_Vertex = 32,  
04504         TKO_Marker_Triangle_Left                = 33,  
04505         TKO_Marker_Triangle_Left_Vertex         = 34,  
04506         TKO_Marker_Triangle_Left_Dot            = 35,  
04507         TKO_Marker_Triangle_Left_Filled         = 36,  
04508         TKO_Marker_Triangle_Left_Filled_Vertex  = 37,  
04509         TKO_Marker_Hash                         = 38,  
04510         TKO_Marker_Wide_Plus                    = 39,  
04511         TKO_Marker_Open_Arrow                   = 40,  
04512         TKO_Marker_Closed_Arrow                 = 41,  
04513         TKO_Marker_Vertical_Bar                 = 42,  
04514         TKO_Marker_Half_Arrow_Left              = 43,  
04515         TKO_Marker_Half_Arrow_Right             = 44,  
04516         TKO_Marker_Wide_Arrow                   = 45,  
04517         TKO_Marker_Double_Arrow                 = 46,  
04518         TKO_Marker_Y                            = 47,  
04519         TKO_Marker_Z                            = 48,  
04520 
04521         TKO_Text_Alignment_Lower_Left       = 0,  
04522         TKO_Text_Alignment_Upper_Left       = 1,  
04523         TKO_Text_Alignment_Middle_Left      = 2,  
04524         TKO_Text_Alignment_Lower_Right      = 3,  
04525         TKO_Text_Alignment_Upper_Right      = 4,  
04526         TKO_Text_Alignment_Middle_Right     = 5,  
04527         TKO_Text_Alignment_Lower_Center     = 6,  
04528         TKO_Text_Alignment_Upper_Center     = 7,  
04529         TKO_Text_Alignment_Middle_Center    = 8,  
04530         TKO_Text_Alignment_Insertion_Left   = 9,  
04531         TKO_Text_Alignment_Insertion_Right  = 10, 
04532         TKO_Text_Alignment_Insertion_Center = 11, 
04533         TKO_Text_Alignment_Insertion        = 9,  
04534 
04535         TKO_Text_Justification_Unspecified  = 0,  
04536         TKO_Text_Justification_Left         = 1,  
04537         TKO_Text_Justification_Center       = 2,  
04538         TKO_Text_Justification_Right        = 3,  
04539 
04540         TKO_Window_Frame_Off    = 0,  
04541         TKO_Window_Frame_On     = 1,  
04542 
04543         TKO_Handedness_Left     = 0,  
04544         TKO_Handedness_Right    = 1  
04545 };
04546 
04552 class BBINFILETK_API TK_Enumerated : public BBaseOpcodeHandler {
04553     private:
04554         TK_Enumerated(const TK_Enumerated&);
04555         TK_Enumerated& operator=(const TK_Enumerated&);
04556 
04557         protected:
04558                 char            m_index;        
04559 
04560         public:
04562                 TK_Enumerated (unsigned char opcode)
04563                         : BBaseOpcodeHandler (opcode), m_index (0) {}
04564 
04565                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04566                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04567                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04568 
04569                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04570                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04572                 void            SetIndex (int i) alter  { m_index = (char)i;   }
04574                 int             GetIndex (void) const   { return (int)m_index;  }
04575 };
04576 
04580 enum TKO_Generic_Size_Units {
04581         TKO_Generic_Size_Object,       
04582         TKO_Generic_Size_Screen,       
04583         TKO_Generic_Size_Window,       
04584         TKO_Generic_Size_Points,       
04585         TKO_Generic_Size_Pixels,       
04586         TKO_Generic_Size_Percent,          
04587         TKO_Generic_Size_Unspecified   
04588 };
04589 
04595 class BBINFILETK_API TK_Size : public BBaseOpcodeHandler {
04596     private:
04597         TK_Size(const TK_Size&);
04598         TK_Size& operator=(const TK_Size&);
04599 
04600         protected:
04601                 float           m_value;  
04602                 unsigned char   m_units;  
04603 
04604         public:
04606                 TK_Size (unsigned char opcode)
04607                         : BBaseOpcodeHandler (opcode), m_value (0.0f), m_units (TKO_Generic_Size_Unspecified) {}
04608 
04609                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04610                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04611                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04612 
04613                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04614                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04615 
04617                 void            SetSize (float value, int units = TKO_Generic_Size_Unspecified) alter {
04618                                                         m_value = (value > 0.0f) ? value : 0.0f;
04619                                                         m_units = (m_value > 0.0f) ? (unsigned char) units : (unsigned char) TKO_Generic_Size_Unspecified;
04620                                                 }
04622                 float           GetSize (void) const    { return m_value;  }
04624                 int             GetUnits (void) const   { return m_units;  }
04625 };
04626 
04631 class BBINFILETK_API TK_Linear_Pattern : public BBaseOpcodeHandler {
04632     private:
04633         TK_Linear_Pattern(const TK_Linear_Pattern&);
04634         TK_Linear_Pattern& operator=(const TK_Linear_Pattern&);
04635 
04636         protected:
04637                 unsigned short  m_pattern;      
04638 
04639         public:
04641                 TK_Linear_Pattern (unsigned char opcode)
04642                         : BBaseOpcodeHandler (opcode), m_pattern (0) {}
04643 
04644                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04645                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04646                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04647 
04648                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04649                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04650 
04652                 void            SetPattern (int p) alter    { m_pattern = (unsigned short)p;    }
04654                 int             GetPattern (void) const     { return (int)m_pattern;            }
04655 };
04656 
04662 class BBINFILETK_API TK_Named : public BBaseOpcodeHandler {
04663 private:
04664         TK_Named( const TK_Named& );
04665         TK_Named& operator=(const TK_Named&);
04666 
04667         protected:
04668         int             m_name_length;  
04669         char *          m_name;         
04670                 int             m_index;        
04671 
04672         public:
04674                 TK_Named (unsigned char opcode)
04675                         : BBaseOpcodeHandler (opcode), m_name_length (0), m_name (0), m_index (0) {}
04676                 ~TK_Named();
04677 
04678                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04679                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04680                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04681 
04682                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04683                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04684 
04685                 void        Reset (void) alter;
04686 
04688                 void            SetName (char const * name) alter;
04690                 void            SetName (int length) alter;
04692                 char const *    GetName (void) const        { return m_name;            }
04694                 char alter *    GetName (void) alter        { return m_name;            }
04695 
04697                 void            SetIndex (int i) alter  { Reset(); m_index = (char)i;   }
04699                 int             GetIndex (void) const   { return (int)m_index;          }
04700 };
04701 
04702 
04703 
04710 class BBINFILETK_API TK_Streaming : public BBaseOpcodeHandler {
04711     private:
04712         TK_Streaming(const TK_Streaming&);
04713         TK_Streaming& operator=(const TK_Streaming&);
04714 
04715         protected:
04716                 bool            m_flag;  
04717 
04718         public:
04720                 TK_Streaming () : BBaseOpcodeHandler (TKE_Streaming_Mode) {}
04721 
04722                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04723                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04724                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04725 
04726                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04727                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04729                 void            SetStreaming (bool s) alter { m_flag = s;       }
04731                 bool            GetStreaming (void) const   { return m_flag;    }
04732 };
04733 
04736 
04742 class BBINFILETK_API TK_Conditions : public BBaseOpcodeHandler {
04743 private:
04744         TK_Conditions( const TK_Conditions& );
04745         TK_Conditions& operator=(const TK_Conditions&);
04746         protected:
04747                 int                     m_length;       
04748                 char *                  m_string;       
04750         public:
04752                 TK_Conditions () : BBaseOpcodeHandler (TKE_Conditions), m_length (0), m_string (0) {}
04753                 ~TK_Conditions();
04754 
04755                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04756                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04757                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04758 
04759                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04760                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04761 
04762                 void        Reset (void) alter;
04763 
04765                 void            SetConditions (char const * options) alter;
04767                 void            SetConditions (int length) alter;
04769                 char const *    GetConditions (void) const                 { return m_string;          }
04771                 char alter *    GetConditions (void) alter                 { return m_string;          }
04773                 int             GetLength(void) alter                   { return m_length;          }
04774 };
04775 
04778 
04784 class BBINFILETK_API TK_User_Options : public BBaseOpcodeHandler {
04785     private:
04786         TK_User_Options(const TK_User_Options&);
04787         TK_User_Options& operator=(const TK_User_Options&);
04788 
04789         protected:
04790                 int                     m_length;       
04791                 char *                  m_string;       
04792                 BBaseOpcodeHandler *    m_indices;      
04793                 BBaseOpcodeHandler *    m_unicode;      
04795                 void    set_options (char const * options) alter;       
04796                 void    set_options (int length) alter;                 
04797 
04798         public:
04800                 TK_User_Options () : BBaseOpcodeHandler (TKE_User_Options), m_length (0), m_string (0),
04801                                                          m_indices (0), m_unicode (0) {}
04802                 ~TK_User_Options();
04803 
04804                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04805                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04806                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04807 
04808                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04809                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04810 
04811                 void        Reset (void) alter;
04812 
04814                 void            SetOptions (char const * options) alter { set_options (options);    }
04816                 void            SetOptions (int length) alter           { set_options (length);     }
04818                 char const *    GetOptions (void) const                 { return m_string;          }
04820                 char alter *    GetOptions (void) alter                 { return m_string;          }
04822                 int             GetLength(void) alter                   { return m_length;          }
04823 };
04824 
04827 
04833 class BBINFILETK_API TK_Unicode_Options : public BBaseOpcodeHandler {
04834     private:
04835         TK_Unicode_Options(const TK_Unicode_Options&);
04836         TK_Unicode_Options& operator=(const TK_Unicode_Options&);
04837 
04838         protected:
04839                 int                     m_length;       
04840                 unsigned short *        m_string;       
04842         public:
04844                 TK_Unicode_Options () : BBaseOpcodeHandler (TKE_Unicode_Options), m_length (0), m_string (0) {}
04845                 ~TK_Unicode_Options();
04846 
04847                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04848                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04849                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04850 
04851                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04852                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04853 
04854                 void        Reset (void) alter;
04855 
04857                 void                    SetOptions (unsigned short const * options) alter;
04859                 void                    SetOptions (int length) alter;
04861                 unsigned short const *  GetOptions (void) const                 { return m_string;          }
04863                 unsigned short alter *  GetOptions (void) alter                 { return m_string;          }
04865                 int                     GetLength(void) alter                   { return m_length;          }
04866 };
04867 
04869 
04875 class BBINFILETK_API TK_User_Index : public BBaseOpcodeHandler {
04876     private:
04877         TK_User_Index(const TK_User_Index&);
04878         TK_User_Index& operator=(const TK_User_Index&);
04879 
04880         protected:
04881                 int             m_count;            
04882                 int *           m_indices;          
04883                 long *          m_values;           
04884                 int                             m_current_value;                
04885                 void    set_indices (int count, int const * indices, long const * values) alter;  
04886                 void    set_indices (int count) alter;                                            
04887 
04888         public:
04890                 TK_User_Index ()
04891                         : BBaseOpcodeHandler (TKE_User_Index), m_count (0), m_indices (0), m_values (0), m_current_value(0) {}
04892                 ~TK_User_Index();
04893 
04894                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04895                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04896                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04897 
04898                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04899                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04900 
04901                 void        Reset (void) alter;
04902 
04904                 void            SetIndices (int count, int const * indices, long const * values) alter
04905                                                                                                                 { set_indices (count, indices, values); }
04907                 void            SetIndices (int count) alter    { set_indices (count);                  }
04909                 int             GetCount (void) const           { return m_count;                       }
04911                 int const *     GetIndices (void) const         { return m_indices;                     }
04913                 int alter *     GetIndices (void) alter         { return m_indices;                     }
04915                 long const *    GetValues (void) const          { return m_values;                      }
04917                 long alter *    GetValues (void) alter          { return m_values;                      }
04918 };
04919 
04921 
04926 class BBINFILETK_API TK_User_Value : public BBaseOpcodeHandler {
04927     private:
04928         TK_User_Value(const TK_User_Value&);
04929         TK_User_Value& operator=(const TK_User_Value&);
04930 
04931         protected:
04932                 long            m_value;  
04933 
04934         public:
04936                 TK_User_Value ()
04937                         : BBaseOpcodeHandler (TKE_User_Value), m_value (0) {}
04938 
04939                 TK_Status   Read (BStreamFileToolkit & tk) alter;
04940                 TK_Status   Write (BStreamFileToolkit & tk) alter;
04941                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
04942 
04943                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
04944                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
04945 
04947                 void            SetValue (long v) alter     { m_value = v;      }
04949                 long            GetValue (void) const       { return m_value;   }
04950 };
04951 
04955 enum TKO_Camera_Projection {
04956         TKO_Camera_Perspective_Bit  = 0x01,  
04957         TKO_Camera_Stretched_Bit    = 0x02,  
04958         TKO_Camera_Projection_Mask  = 0x03,  
04959 
04960         TKO_Camera_Orthographic     = 0x00,  
04961         TKO_Camera_Perspective      = 0x01,  
04962         TKO_Camera_Stretched        = 0x02,  
04963 
04964         TKO_Camera_Oblique_Y        = 0x04,  
04965         TKO_Camera_Oblique_X        = 0x08,  
04966         TKO_Camera_Oblique_Mask     = 0x0C,  
04967 
04968         TKO_Camera_Near_Limit       = 0x10   
04969 };
04970 
04972 
04977 class BBINFILETK_API2 TK_Camera : public BBaseOpcodeHandler {
04978     private:
04979         TK_Camera(const TK_Camera&);
04980         TK_Camera& operator=(const TK_Camera&);
04981 
04982         protected:
04986                 float           m_settings[14]; 
04987                 char            m_projection;   
04988                 int             m_length;       
04989                 char *          m_name;         
04992                 void    set_name (char const * name) alter;     
04993         
04994                 void    set_name (int length) alter;            
04995 
04996         public:
04998                 TK_Camera (unsigned char opcode = TKE_Camera)
04999                         : BBaseOpcodeHandler (opcode), m_length (0), m_name (0) {
05000                                 int i;
05001                                 int count = (int)(sizeof(m_settings) / sizeof(m_settings[0]));
05002                                 for (i = 0; i < count; i++)
05003                                         m_settings[i] = 0;
05004                 }
05005                 ~TK_Camera();
05006 
05007                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05008                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05009                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05010 
05011                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05012                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05013 
05015                 void            SetPosition (float x, float y, float z) alter
05016                                                                                 { m_settings[0] = x;  m_settings[1] = y;  m_settings[2] = z;    }
05018                 void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
05020                 float const *   GetPosition (void) const                { return &m_settings[0];                }
05021 
05023                 void            SetTarget (float x, float y, float z) alter
05024                                                                                 { m_settings[3] = x;  m_settings[4] = y;  m_settings[5] = z;    }
05026                 void            SetTarget (float const * t) alter       { SetTarget (t[0], t[1], t[2]);         }
05028                 float const *   GetTarget (void) const                  { return &m_settings[3];                }
05029 
05031                 void            SetUpVector (float x, float y, float z) alter
05032                                                                                 { m_settings[6] = x;  m_settings[7] = y;  m_settings[8] = z;    }
05034                 void            SetUpVector (float const * u) alter     { SetUpVector (u[0], u[1], u[2]);       }
05036                 float const *   GetUpVector (void) const                { return &m_settings[6];                }
05037 
05039                 void            SetField (float w, float h) alter       { m_settings[9] = w;  m_settings[10] = h; }
05041                 void            SetField (float const * f) alter        { SetField (f[0], f[1]);                }
05043                 float const *   GetField (void) const                   { return &m_settings[9];                }
05044 
05046                 void            SetOblique (float h, float v) alter     { m_settings[11] = h;  m_settings[12] = v;
05047                                                                                                                                   m_projection &= ~TKO_Camera_Oblique_Mask;
05048                                                                                                                                   if (h != 0.0f) m_projection |= TKO_Camera_Oblique_Y;
05049                                                                                                                                   if (v != 0.0f) m_projection |= TKO_Camera_Oblique_Mask;
05050                                                                                                                                 }
05052                 void            SetOblique (float const * o) alter      { SetOblique (o[0], o[1]);              }
05054                 float const *   GetOblique (void) const                 { return &m_settings[11];               }
05055 
05057                 void            SetProjection (int p) alter             { m_projection = (char)p;   }
05059                 int             GetProjection (void) const              { return (int)m_projection; }
05060 
05062                 void            SetNearLimit (float l) alter            { m_settings[13] = l;
05063                                                                                                                                   m_projection &= ~TKO_Camera_Near_Limit;
05064                                                                                                                                   if (l != 0.0f) m_projection |= TKO_Camera_Near_Limit;
05065                                                                                                                                 }
05067                 float           GetNearLimit (void) const               { return m_settings[13];    }
05068 
05070                 void            SetView (char const * name) alter       { set_name (name);          }
05072                 void            SetView (int length) alter              { set_name (length);        }
05074                 char const *    GetView (void) const                    { return m_name;            }
05076                 char alter *    GetView (void) alter                    { return m_name;            }
05077 };
05078 
05080 
05085 class BBINFILETK_API TK_Window : public BBaseOpcodeHandler {
05086     private:
05087         TK_Window(const TK_Window&);
05088         TK_Window& operator=(const TK_Window&);
05089 
05090         protected:
05091                 float           m_window[4];  
05092 
05093         public:
05095                 TK_Window ()
05096                         : BBaseOpcodeHandler (TKE_Window) {}
05097 
05098                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05099                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05100                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05101 
05102                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05103                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05104 
05106                 void            SetWindow (float l, float r, float b, float t) alter
05107                                                                 { m_window[0] = l;  m_window[1] = r;  m_window[2] = b;  m_window[3] = t;    }
05109                 void            SetWindow (float const * w) alter      { SetWindow (w[0], w[1], w[2], w[3]);        }
05111                 float const *   GetWindow (void) const                 { return m_window;                           }
05112 };
05113 
05114 
05119 enum TKO_Font_Options {
05120         TKO_Font_Names                          = 0x00000001,   
05121         TKO_Font_Size                           = 0x00000002,   
05122         TKO_Font_Size_Tolerance         = 0x00000004,   
05123         TKO_Font_Transforms                     = 0x00000008,   
05124         TKO_Font_Rotation                       = 0x00000010,   
05125         TKO_Font_Slant                          = 0x00000020,   
05126         TKO_Font_Width_Scale            = 0x00000040,   
05127         TKO_Font_Extended                       = 0x00000080,   
05128         TKO_Font_Extended_Mask          = 0xFFFFFF00,   //   internal use, indicates bits which require TKO_Font_Extended
05129         TKO_Font_Extra_Space            = 0x00000100,   
05130         TKO_Font_Line_Spacing           = 0x00000200,   
05131         TKO_Font_Outline                        = 0x00000400,   
05132         TKO_Font_Underline                      = 0x00000800,   
05133         TKO_Font_Strikethrough          = 0x00001000,   
05134         TKO_Font_Overline                       = 0x00002000,   
05135         TKO_Font_Uniform_Spacing        = 0x00004000,   
05136         TKO_Font_Extended2                      = 0x00008000,   
05137         TKO_Font_Extended2_Mask         = 0xFFFF0000,   
05138         TKO_Font_Greeking_Limit         = 0x00010000,   
05139         TKO_Font_Fill_Edges                     = 0x00020000,   
05140         TKO_Font_Bold                           = 0x00040000,   
05141         TKO_Font_Italic                         = 0x00080000,   
05142         TKO_Font_Renderer                       = 0x00100000,   
05143         TKO_Font_Greeking_Mode          = 0x00200000,   
05144         TKO_Font_Preference                     = 0x00400000    
05145 };
05146 
05150 enum TKO_Font_Size_Units {
05151         TKO_Font_Size_Object = 0,  
05152         TKO_Font_Size_Screen = 1,  
05153         TKO_Font_Size_Window = 2,  
05154         TKO_Font_Size_Points = 3,  
05155         TKO_Font_Size_Pixels = 4,  
05156         TKO_Font_Size_Percent = 5  
05157 };
05158 
05159 
05165 enum TKO_Font_Transforms {
05166         TKO_Font_Transform_Position_Only = 0,  
05167         TKO_Font_Transform_Full = 1            
05168 };
05169 
05170 
05174 enum TKO_Font_Renderers {
05175         TKO_Font_Renderer_Undefined     = -1,   
05176         TKO_Font_Renderer_Default       = 0,    
05177         TKO_Font_Renderer_Driver        = 1,    
05178         TKO_Font_Renderer_Truetype      = 2,    
05179         TKO_Font_Renderer_Defined       = 3             
05180 };
05181 
05185 enum TKO_Font_Preferences {
05186         TKO_Font_Preference_Undefined = -1,     
05187         TKO_Font_Preference_Default     = 0,    
05188         TKO_Font_Preference_Bitmap      = 1,    
05189         TKO_Font_Preference_Outline     = 2             
05190 };
05191 
05195 enum TKO_Font_Greeking_Modes {
05196         TKO_Font_Greeking_Mode_None  = 0, 
05197         TKO_Font_Greeking_Mode_Lines = 1, 
05198         TKO_Font_Greeking_Mode_Box   = 2  
05199 };
05200 
05202 
05209 class BBINFILETK_API TK_Text_Font : public BBaseOpcodeHandler {
05210     private:
05211         TK_Text_Font(const TK_Text_Font&);
05212         TK_Text_Font& operator=(const TK_Text_Font&);
05213 
05214         protected:
05215                 int             m_mask;  
05216                 int             m_value;  
05217                 int             m_names_length; 
05218                 char *          m_names;        
05219                 float           m_size;         
05220                 float           m_tolerance;    
05221                 float           m_rotation;     
05222                 float           m_slant;        
05223                 float           m_width_scale;  
05224                 float           m_extra_space;  
05225                 float           m_line_spacing; 
05226                 float                   m_greeking_limit;
05227                 float                   m_renderer_cutoff;
05228                 float                   m_preference_cutoff;
05229                 int                             m_renderers[2];   
05230                 int                             m_preferences[2];   
05231                 unsigned char   m_size_units;   
05232                 unsigned char   m_tolerance_units;
05233                 unsigned char   m_space_units;  
05234                 unsigned char   m_greeking_units;  
05235                 unsigned char   m_greeking_mode;   
05236                 unsigned char   m_transforms;   
05237                 unsigned char   m_renderer_cutoff_units;  
05238                 unsigned char   m_preference_cutoff_units;  
05239 
05240                 void    set_names (int length) alter;           
05241                 void    set_names (char const * names) alter;   
05242 
05243         public:
05245                 TK_Text_Font ()
05246                         : BBaseOpcodeHandler (TKE_Text_Font), m_names_length (0), m_names (0) {}
05247                 ~TK_Text_Font ();
05248 
05249                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05250                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05251                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05252 
05253                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05254                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05255 
05256                 void        Reset (void) alter;
05257 
05259                 void            SetMask (int m) alter {
05260                                                         m_mask = m;
05261                                                         if ((m & TKO_Font_Extended2_Mask) != 0)
05262                                                                 m_mask |= TKO_Font_Extended2;
05263                                                         if ((m & TKO_Font_Extended_Mask) != 0)
05264                                                                 m_mask |= TKO_Font_Extended;
05265                                                 }
05267                 int             GetMask (void) const                    { return m_mask;        }
05268 
05270                 void            SetValue (int v) alter                  { m_value = v;          }
05272                 int             GetValue (void) const                   { return m_value;       }
05273 
05275                 void            SetNames (char const * names) alter     { set_names (names);    }
05277                 void            SetNames (int length) alter             { set_names (length);   }
05279                 char const *    GetNames (void) const                   { return m_names;       }
05281                 char alter *    GetNames (void) alter                   { return m_names;       }
05282 
05284                 void            SetSize (float s) alter                 { m_size = s;                           }
05286                 float           GetSize (void) const                    { return m_size;                        }
05287 
05289                 void            SetSizeUnits (int u) alter              { m_size_units = (unsigned char)u;      }
05291                 int             GetSizeUnits (void) const               { return (int)m_size_units;             }
05292 
05294                 void            SetTolerance (float t) alter            { m_tolerance = t;                      }
05296                 float           GetTolerance (void) const               { return m_tolerance;                   }
05297 
05299                 void            SetToleranceUnits (int u) alter         { m_tolerance_units = (unsigned char)u; }
05301                 int             GetToleranceUnits (void) const          { return (int)m_tolerance_units;        }
05302 
05304                 void            SetRotation (float r) alter             { m_rotation = r;                       }
05306                 float           GetRotation (void) const                { return m_rotation;                    }
05307 
05309                 void            SetSlant (float s) alter                { m_slant = s;                          }
05311                 float           GetSlant (void) const                   { return m_slant;                       }
05312 
05314                 void            SetWidthScale (float s) alter           { m_width_scale = s;                    }
05316                 float           GetWidthScale (void) const              { return m_width_scale;                 }
05317 
05319                 void            SetExtraSpace (float s) alter           { m_extra_space = s;                    }
05321                 float           GetExtraSpace (void) const              { return m_extra_space;                 }
05322 
05324                 void            SetExtraSpaceUnits (int u) alter        { m_space_units = (unsigned char)u;     }
05326                 int             GetExtraSpaceUnits (void) const         { return (int)m_space_units;            }
05327 
05329                 void            SetLineSpacing (float s) alter          { m_line_spacing = s;                   }
05331                 float           GetLineSpacing (void) const             { return m_line_spacing;                }
05332 
05334                 void            SetTransforms (int t) alter             { m_transforms = (unsigned char)t;      }
05336                 int             GetTransforms (void) const              { return (int)m_transforms;             }
05337 
05339                 void            SetGreekingLimit (float s) alter           { m_greeking_limit = s;                    }
05341                 float           GetGreekingLimit (void) const              { return m_greeking_limit;                 }
05342 
05344                 void            SetGreekingLimitUnits (int u) alter        { m_greeking_units = (unsigned char)u;     }
05346                 int             GetGreekingLimitUnits (void) const         { return (int)m_greeking_units;            }
05347 
05349                 void            SetGreekingMode (int m) alter        { m_greeking_mode = (unsigned char)m;     }
05351                 int             GetGreekingMode (void) const         { return (int)m_greeking_mode;            }
05352 
05353 
05355                 void            SetRenderer (int r) alter             { m_renderers[0] = m_renderers[1] = r;    }
05357                 int             GetRenderer (void) const              { return m_renderers[0];                                  }
05358 
05360                 void            SetRenderers (int r1, int r2) alter   { m_renderers[0] = r1; m_renderers[1] = r2;       }
05362                 int const *      GetRenderers (void) const            { return m_renderers;                                                     }
05363 
05365                 void            SetRendererCutoff (float s) alter     { m_renderer_cutoff = s;                    }
05367                 float           GetRendererCutoff (void) const        { return m_renderer_cutoff;                 }
05368 
05370                 void            SetRendererCutoffUnits (int u) alter        { m_renderer_cutoff_units = (unsigned char)u;     }
05372                 int             GetRendererCutoffUnits (void) const         { return (int)m_renderer_cutoff_units;            }
05373 
05374 
05376                 void            SetPreference (int r) alter             { m_preferences[0] = m_preferences[1] = r;    }
05378                 int             GetPreference (void) const              { return m_preferences[0];                                      }
05379 
05381                 void            SetPreferences (int r1, int r2) alter   { m_preferences[0] = r1; m_preferences[1] = r2; }
05383                 int const *      GetPreferences (void) const            { return m_preferences;                                                 }
05384 
05386                 void            SetPreferenceCutoff (float s) alter     { m_preference_cutoff = s;                    }
05388                 float           GetPreferenceCutoff (void) const        { return m_preference_cutoff;                 }
05389 
05391                 void            SetPreferenceCutoffUnits (int u) alter        { m_preference_cutoff_units = (unsigned char)u;     }
05393                 int             GetPreferenceCutoffUnits (void) const         { return (int)m_preference_cutoff_units;            }
05394 };
05395 
05397 
05399 
05411 enum TKO_Bounding_Type_Options {
05412         TKO_Bounding_Type_Cuboid    = 0,  
05413         TKO_Bounding_Type_Sphere    = 1   
05414 };
05415 
05416 
05417 
05419 
05430 class BBINFILETK_API2 TK_Bounding : public BBaseOpcodeHandler {
05431     private:
05432         TK_Bounding(const TK_Bounding&);
05433         TK_Bounding& operator=(const TK_Bounding&);
05434 
05435         protected:
05436                 float           m_values[6];            
05437                 char            m_type;                         
05438                         
05439         public:
05441                 TK_Bounding (unsigned char opcode)
05442                         : BBaseOpcodeHandler (opcode) {}
05444                 TK_Bounding (unsigned char opcode, float * min, float * max)
05445                         : BBaseOpcodeHandler (opcode), m_type (TKO_Bounding_Type_Cuboid) {
05446                                 m_values[0] = min[0]; m_values[1] = min[1]; m_values[2] = min[2];
05447                                 m_values[3] = max[0]; m_values[4] = max[1]; m_values[5] = max[2];
05448                         }
05450                 TK_Bounding (unsigned char opcode, float * center, float radius)
05451                         : BBaseOpcodeHandler (opcode), m_type (TKO_Bounding_Type_Sphere) {
05452                                 m_values[0] = center[0]; m_values[1] = center[1]; m_values[2] = center[2];
05453                                 m_values[3] = radius;
05454                         }
05455 
05456                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05457                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05458                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05459 
05460                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05461                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05462 };
05463 
05465 
05469 enum TKO_Light_Options {
05470         TKO_Light_Camera_Relative = 0x1
05471 };
05472 
05473 
05475 
05477 
05483 class BBINFILETK_API TK_Point : public BBaseOpcodeHandler {
05484     private:
05485         TK_Point(const TK_Point&);
05486         TK_Point& operator=(const TK_Point&);
05487 
05488         protected:
05489                 float           m_point[3];  
05490                 char            m_options;   
05491 
05492         public:
05494                 TK_Point (unsigned char opcode)
05495                         : BBaseOpcodeHandler (opcode) {
05496                         m_point[0] = m_point[1] = m_point[2] = 0; 
05497                         m_options = 0; 
05498                 };
05499 
05500                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05501                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05502                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05503 
05504                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05505                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05506 
05507                 void        Reset(void) { 
05508                                                 m_point[0] = m_point[1] = m_point[2] = 0; 
05509                                                 m_options = 0; 
05510                                                 BBaseOpcodeHandler::Reset(); 
05511                                         };
05512 
05513 
05514 
05516                 void            SetPoint (float x, float y, float z) alter  { m_point[0] = x; m_point[1] = y; m_point[2] = z; }
05518                 void            SetPoint (float const * p) alter            { SetPoint (p[0], p[1], p[2]);  }
05520                 float const *   GetPoint (void) const                       { return m_point;               }
05521 
05523                 void    SetOptions (int o) alter        { m_options = (char)o;          }
05525                 int             GetOptions (void) const         { return (int)m_options;        }
05526 };
05527 
05528 
05529 
05531 
05536 class BBINFILETK_API TK_Line : public BBaseOpcodeHandler {
05537     private:
05538         TK_Line(const TK_Line&);
05539         TK_Line& operator=(const TK_Line&);
05540 
05541         protected:
05543                 float           m_points[6];    
05544 
05545         public:
05547                 TK_Line ()
05548                         : BBaseOpcodeHandler (TKE_Line) {}
05549 
05550                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05551                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05552                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05553 
05554                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05555                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05556 
05558                 void            SetPoints (float x1, float y1, float z1, float x2, float y2, float z2) alter {
05559                                                                 m_points[0] = x1;  m_points[1] = y1;  m_points[2] = z1;
05560                                                                 m_points[3] = x2;  m_points[4] = y2;  m_points[5] = z2;
05561                                                         }
05563                 void            SetPoints (float const * s, float const * e) alter {
05564                                                                 SetPoints (s[0], s[1], s[2],  e[0], e[1], e[2]);
05565                                                         }
05567                 void            SetPoints (float const * p) alter           { SetPoints (&p[0], &p[3]); }
05569                 float const *   GetPoints (void) const                      { return m_points;          }
05570 };
05571 
05572 
05574 
05579 class BBINFILETK_API TK_Infinite_Line : public BBaseOpcodeHandler {
05580         private:
05581         TK_Infinite_Line(const TK_Infinite_Line&);
05582         TK_Infinite_Line& operator=(const TK_Infinite_Line&);
05583         protected:
05585                 float           m_points[6];    
05586 
05587         public:
05589                 TK_Infinite_Line ()
05590                         : BBaseOpcodeHandler (TKE_Infinite_Line) {}
05591 
05592                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05593                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05594                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05595 
05596                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05597                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05598 
05600                 void            SetPoints (float x1, float y1, float z1, float x2, float y2, float z2) alter {
05601                                                                 m_points[0] = x1;  m_points[1] = y1;  m_points[2] = z1;
05602                                                                 m_points[3] = x2;  m_points[4] = y2;  m_points[5] = z2;
05603                                                         }
05605                 void            SetPoints (float const * s, float const * e) alter {
05606                                                                 SetPoints (s[0], s[1], s[2],  e[0], e[1], e[2]);
05607                                                         }
05609                 void            SetPoints (float const * p) alter           { SetPoints (&p[0], &p[3]); }
05611                 float const *   GetPoints (void) const                      { return m_points;          }
05612 };
05613 
05614 
05615 
05616 
05618 
05625 class BBINFILETK_API TK_Polypoint : public BBaseOpcodeHandler {
05626     private:
05627         TK_Polypoint(const TK_Polypoint&);
05628         TK_Polypoint& operator=(const TK_Polypoint&);
05629 
05630         protected:
05631                 int             m_count;    
05632                 int             m_allocated;
05633                 float *         m_points;   
05636                 void    set_points (int count, float const * points = 0) alter      { SetPoints (count, points); }              
05637         public:
05641                 TK_Polypoint (unsigned char opcode)
05642                         : BBaseOpcodeHandler (opcode) { m_points = 0; m_allocated = m_count = 0; }
05643                 ~TK_Polypoint();
05644 
05645                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05646                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05647                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05648 
05649                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05650                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05651 
05652                 void        Reset (void) alter;
05653 
05656                 void            SetPoints (int count, float const * points = 0) alter;
05658                 float const *   GetPoints (void) const                                  { return m_points;              }
05660                 float alter *   GetPoints (void) alter                                  { return m_points;              }
05662                 int             GetCount (void) const                                   { return m_count;               }
05663 };
05664 
05665 
05666 
05667 
05668 #define NC_HAS_WEIGHTS 0x01     
05669 #define NC_HAS_KNOTS   0x02     
05670 #define NC_HAS_START   0x04     
05671 #define NC_HAS_END     0x08     
05672 
05673 
05674 
05679 class BBINFILETK_API TK_NURBS_Curve : public BBaseOpcodeHandler {
05680     private:
05681         TK_NURBS_Curve(const TK_NURBS_Curve&);
05682         TK_NURBS_Curve& operator=(const TK_NURBS_Curve&);
05683 
05684         protected:
05685 
05686                 unsigned char m_optionals;  
05687                 unsigned char m_degree;     
05688                 int m_control_point_count;  
05689                 int m_knot_count_implicit;  
05690                 float *m_control_points;    
05691                 float *m_weights;           
05692                 float *m_knots;             
05693                 float m_start;              
05694                 float m_end;                
05696 
05697                 void    set_curve (int degree, int control_count, float const * points = 0,
05698                                                    float const * weights = 0, float const * knots = 0,
05699                                                    float start = 0.0f, float end = 1.0f) alter;
05700         public:
05701                 TK_NURBS_Curve();
05702                 ~TK_NURBS_Curve();
05703 
05704                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05705                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05706                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05707 
05708                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05709                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05710 
05711                 void        Reset (void) alter;
05712 
05714                 void            SetCurve (int degree, int control_count, float const * points = 0,
05715                                                                   float const * weights = 0, float const * knots = 0,
05716                                                                   float start = 0.0f, float end = 1.0f) alter {
05717                                                         set_curve (degree, control_count, points, weights, knots, start, end);
05718                                                 }
05719 
05720                 int             GetDegree (void) const          { return m_degree;                  } 
05721                 int             GetCount (void) const           { return m_control_point_count;     } 
05722                 float const *   GetPoints (void) const          { return m_control_points;          } 
05723                 float alter *   GetPoints (void) alter          { return m_control_points;          } 
05724                 float const *   GetWeights (void) const         { return m_weights;                 } 
05725                 float alter *   GetWeights (void) alter         { return m_weights;                 } 
05726                 float const *   GetKnots (void) const           { return m_knots;                   } 
05727                 float alter *   GetKnots (void) alter           { return m_knots;                   } 
05729                 void            SetStart (float s) alter        { m_start = s;                      } 
05730                 float           GetStart (void) const           { return m_start;                   } 
05731                 void            SetEnd (float e) alter          { m_end = e;                        } 
05732                 float           GetEnd (void) const             { return m_end;                     } 
05734                 void            SetOptions (int o) alter        { m_optionals = (unsigned char)o;   } 
05735                 int             GetOptions (void) const         { return m_optionals;               } 
05736 };
05737 
05738 
05739 
05740 
05741 
05742 #define NS_HAS_WEIGHTS 0x01   
05743 #define NS_HAS_KNOTS   0x02   
05744 #define NS_HAS_TRIMS   0x04   
05745 
05746 #define NS_TRIM_END         0       
05747 #define NS_TRIM_POLY        1       
05748 #define NS_TRIM_CURVE       2       
05749 #define NS_TRIM_COLLECTION  3       
05750 #define NS_TRIM_LAST_KNOWN_TYPE 3   
05751 
05752 #define NS_TRIM_KEEP        0x01 
05753 #define NS_TRIM_HAS_WEIGHTS 0x02 
05754 #define NS_TRIM_HAS_KNOTS   0x04 
05755 
05756 
05757 
05763 class BBINFILETK_API HT_NURBS_Trim : public BBaseOpcodeHandler  {
05764     private:
05765         HT_NURBS_Trim(const HT_NURBS_Trim&);
05766         HT_NURBS_Trim& operator=(const HT_NURBS_Trim&);
05767 
05768         friend class TK_NURBS_Surface;
05769         protected:
05770                 //first 5 are relevant to polys and curves
05771                 int             m_substage;             
05772                 HT_NURBS_Trim * m_next;                 
05773                 unsigned char   m_type;                 
05774                 int             m_count;                
05775                 float *         m_points;               
05776                 //next 6 are specific to curves
05777                 unsigned char   m_degree;               
05778                 unsigned char   m_options;              
05779                 float *         m_weights;              
05780                 float *         m_knots;                
05781                 float           m_start_u;              
05782                 float           m_end_u;                
05783                 HT_NURBS_Trim * m_list;                 
05784                 HT_NURBS_Trim * m_current_trim;         
05786                 HT_NURBS_Trim();
05787                 TK_Status read_collection(BStreamFileToolkit & tk);  
05788                 TK_Status write_collection(BStreamFileToolkit & tk); 
05791         public:
05792                 ~HT_NURBS_Trim();
05793                 void    SetPoly (int count, float const * points = 0) alter;    
05794                 void    SetCurve (int degree, int control_count, float const * points = 0, 
05795                                                   float const * weights = 0, float const * knots = 0, float start_u = 0, float end_u = 1) alter; 
05796                 void    SetCollection () alter;                                 
05797                 void    SetOptions (int o) alter { m_options = (unsigned char)o; }             
05798                 void    SetList (HT_NURBS_Trim *node) alter { m_list = node; }  
05799                 void    SetNext (HT_NURBS_Trim *next) { m_next = next; }        
05801                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05802                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05803 
05804                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05805                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05806                 
05807                 TK_Status   read_collection_ascii(BStreamFileToolkit & tk) alter ;
05808                 TK_Status   write_collection_ascii(BStreamFileToolkit & tk) alter ;
05809 
05811                 HT_NURBS_Trim * GetNext (void)              { return m_next;    } 
05813                 int             GetType (void) const        { return m_type;    } 
05815                 int             GetCount (void) const       { return m_count;   } 
05817                 float const *   GetPoints (void) const      { return m_points;  } 
05819                 float alter *   GetPoints (void) alter      { return m_points;  } 
05821                 int             GetDegree (void) const      { return m_degree;  } 
05823                 int             GetOptions (void) const     { return m_options; } 
05825                 float const *   GetWeights (void) const     { return m_weights; } 
05827                 float alter *   GetWeights (void) alter     { return m_weights; } 
05829                 float const *   GetKnots (void) const       { return m_knots;   } 
05831                 float alter *   GetKnots (void) alter       { return m_knots;   } 
05833                 HT_NURBS_Trim const *GetList (void) const   { return m_list;    } 
05835                 HT_NURBS_Trim *GetList (void) alter         { return m_list;    } 
05836     
05837 };
05838 
05840 
05845 class BBINFILETK_API TK_NURBS_Surface : public BBaseOpcodeHandler {
05846     private:
05847         TK_NURBS_Surface(const TK_NURBS_Surface&);
05848         TK_NURBS_Surface& operator=(const TK_NURBS_Surface&);
05849 
05850         protected:
05851                 unsigned char   m_optionals;        
05852                 unsigned char   m_degree[2];        
05853                 int             m_size[2];          
05854                 float *         m_control_points;   
05855                 float *         m_weights;          
05856                 float *         m_u_knots;          
05857                 float *         m_v_knots;          
05859                 HT_NURBS_Trim * m_trims;            
05860                 HT_NURBS_Trim * m_current_trim;     
05863         public:
05864                 TK_NURBS_Surface();
05865                 ~TK_NURBS_Surface();
05866 
05867                 TK_Status   Read (BStreamFileToolkit & tk) alter;   
05868                 TK_Status   Write (BStreamFileToolkit & tk) alter;  
05869                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05870 
05871                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05872                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05873 
05874                 void        Reset (void) alter; 
05876                 void            SetSurface (int u_degree, int v_degree,  int u_size, int v_size,
05877                                                                         float const * points = 0,    float const * weights = 0,
05878                                                                         float const * u_knots = 0,   float const * v_knots = 0) alter;  
05881                 int             GetUDegree (void) const         { return m_degree[0];               } 
05883                 int             GetVDegree (void) const         { return m_degree[1];               } 
05885                 int             GetUSize (void) const           { return m_size[0];                 } 
05887                 int             GetVSize (void) const           { return m_size[1];                 } 
05889                 float const *   GetPoints (void) const          { return m_control_points;          } 
05891                 float alter *   GetPoints (void) alter          { return m_control_points;          } 
05893                 float const *   GetWeights (void) const         { return m_weights;                 } 
05895                 float alter *   GetWeights (void) alter         { return m_weights;                 } 
05897                 float const *   GetUKnots (void) const          { return m_u_knots;                 } 
05899                 float alter *   GetUKnots (void) alter          { return m_u_knots;                 } 
05901                 float const *   GetVKnots (void) const          { return m_v_knots;                 } 
05903                 float alter *   GetVKnots (void) alter          { return m_v_knots;                 } 
05904 
05906                 void            SetOptions (int o) alter        { m_optionals = (unsigned char)o;   } 
05908                 int             GetOptions (void) const         { return m_optionals;               } 
05909 
05911                 HT_NURBS_Trim * NewTrim (int type = NS_TRIM_END) alter;                                 
05913                 HT_NURBS_Trim * GetTrims (void) alter           { return m_trims;                   }
05914 };
05915 
05917 
05922 class BBINFILETK_API TK_Area_Light : public BBaseOpcodeHandler {
05923     private:
05924         TK_Area_Light(const TK_Area_Light&);
05925         TK_Area_Light& operator=(const TK_Area_Light&);
05926 
05927         protected:
05928                 int             m_count;        
05929                 float *         m_points;       
05930                 char            m_options;      
05931 
05933                 void    set_points (int count, float const * points = 0) alter;
05934 
05935         public:
05937                 TK_Area_Light ()
05938                         : BBaseOpcodeHandler (TKE_Area_Light), m_count (0), m_points (0), m_options (0) {}
05939                 ~TK_Area_Light();
05940 
05941                 TK_Status   Read (BStreamFileToolkit & tk) alter;
05942                 TK_Status   Write (BStreamFileToolkit & tk) alter;
05943                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
05944 
05945                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
05946                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
05947 
05948                 void        Reset (void) alter;
05949 
05954                 void            SetPoints (int count, float const * points = 0) alter   { set_points (count, points);   }
05956                 float const *   GetPoints (void) const                                  { return m_points;              }
05958                 float alter *   GetPoints (void) alter                                  { return m_points;              }
05960                 int             GetCount (void) const                                   { return m_count;               }
05961 
05963                 void            SetOptions (int o) alter                                { m_options = (char)o;          }
05965                 int             GetOptions (void) const                                 { return (int)m_options;        }
05966 };
05967 
05968 
05972 enum TKO_Spot_Light_Options {
05973         TKO_Spot_Outer_Degrees      = 0x01,  
05974         TKO_Spot_Outer_Field        = 0x02,  
05975 
05976         TKO_Spot_Inner_Degrees      = 0x04,  
05977         TKO_Spot_Inner_Field        = 0x08,  
05978         TKO_Spot_Inner_Percent      = 0x0C,  
05979 
05980         TKO_Spot_Outer_Mask         = 0x03,  
05981         TKO_Spot_Inner_Mask         = 0x0C,  
05982 
05983         TKO_Spot_Camera_Relative    = 0x10,  
05984 
05985         TKO_Spot_Concentration      = 0x20  
05986 };
05987 
05988 
05990 
05995 class BBINFILETK_API TK_Spot_Light : public BBaseOpcodeHandler {
05996     private:
05997         TK_Spot_Light(const TK_Spot_Light&);
05998         TK_Spot_Light& operator=(const TK_Spot_Light&);
05999 
06000         protected:
06001                 float           m_position[3];      
06002                 float           m_target[3];        
06003                 float           m_outer;            
06004                 float           m_inner;            
06005                 float           m_concentration;    
06006                 char            m_options;          
06007 
06008         public:
06010                 TK_Spot_Light ()
06011                         : BBaseOpcodeHandler (TKE_Spot_Light), m_options (0) {}
06012 
06013                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06014                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06015                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06016 
06017                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06018                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06019 
06021                 void            SetPosition (float x, float y, float z) alter
06022                                                                                 { m_position[0] = x; m_position[1] = y; m_position[2] = z;  }
06024                 void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);   }
06026                 float const *   GetPosition (void) const                { return m_position;                }
06027 
06029                 void            SetTarget (float x, float y, float z) alter
06030                                                                                 { m_target[0] = x; m_target[1] = y; m_target[2] = z;        }
06032                 void            SetTarget (float const * t) alter       { SetTarget (t[0], t[1], t[2]);     }
06034                 float const *   GetTarget (void) const                  { return m_target;                  }
06035 
06037                 void            SetOuter (float o) alter                { m_outer = o;                      }
06039                 float           GetOuter (void) const                   { return m_outer;                   }
06040 
06042                 void            SetInner (float i) alter                { m_inner = i;                      }
06044                 float           GetInner (void) const                   { return m_inner;                   }
06045 
06047                 void            SetConcentration (float c) alter        { m_concentration = c;              }
06049                 float           GetConcentration (void) const           { return m_concentration;           }
06050 
06052                 void            SetOptions (int o) alter                { m_options = (char)o;              }
06054                 int             GetOptions (void) const                 { return (int)m_options;            }
06055 };
06056 
06057 
06059 
06064 class BBINFILETK_API TK_Cutting_Plane : public BBaseOpcodeHandler {
06065         protected:
06066                 float           *m_planes;              
06067                 int                             m_count;                
06068 
06069         public:
06071                 TK_Cutting_Plane ()
06072                         : BBaseOpcodeHandler (TKE_Cutting_Plane), m_planes (0), m_count (0) {}
06073                 ~TK_Cutting_Plane ();
06074         TK_Cutting_Plane(const TK_Cutting_Plane& rPlane) : BBaseOpcodeHandler (TKE_Cutting_Plane)
06075         {
06076             m_count = 0;
06077             m_planes = 0;
06078             if ((rPlane.m_count > 0) && (rPlane.m_planes != NULL))
06079             {
06080                 SetPlanes( rPlane.m_count, rPlane.m_planes );
06081             }
06082         }
06083 
06084         TK_Cutting_Plane& operator=(const TK_Cutting_Plane& rPlane)
06085         {
06086             if(&rPlane != this)
06087             {
06088                 m_opcode = rPlane.m_opcode;
06089                 if ((m_count > 0) && (rPlane.m_planes != NULL))
06090                 {
06091                     SetPlanes( m_count, rPlane.m_planes );
06092                 }
06093             }
06094             return *this;
06095         }
06096 
06097 
06098                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06099                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06100                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06101 
06102                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06103                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06104 
06105                 void            Reset (void) alter;
06106 
06108                 void                    SetPlanes (int count, float const * p=0) alter;
06109 
06111                 void            SetPlane (float a, float b, float c, float d) alter
06112                                                                         { SetPlanes(1);
06113                                                                                 m_planes[0] = a;  m_planes[1] = b;  m_planes[2] = c;  m_planes[3] = d;    }
06115                 void            SetPlane (float const * p) alter            { SetPlanes (1, p);    }
06117                 float const *   GetPlane (void) const                       { return m_planes;                       }
06118 
06120                 float const *   GetPlanes (void) const                      { return m_planes;                       }
06122                 int                             GetCount (void) const                       { return m_count;                        }
06124 };
06125 
06126 
06130 enum TKO_Circular_Options {
06131         TKO_Circular_Center             = 0x01  
06132 };
06133 
06135 
06142 class BBINFILETK_API TK_Circle : public BBaseOpcodeHandler {
06143     private:
06144         TK_Circle(const TK_Circle&);
06145         TK_Circle& operator=(const TK_Circle&);
06146 
06147         protected:
06148                 float           m_start[3];     
06149                 float           m_middle[3];    
06150                 float           m_end[3];       
06151                 float                   m_center[3];    
06152                 unsigned char   m_flags;                
06154         public:
06156                 TK_Circle (unsigned char opcode)
06157                         : BBaseOpcodeHandler (opcode), m_flags (0) {}
06158 
06159                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06160                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06161                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06162 
06163                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06164                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06165 
06166                 void            Reset (void) alter;
06167 
06169                 void            SetStart (float x, float y, float z) alter {
06170                                                         m_start[0] = x;     m_start[1] = y;     m_start[2] = z;
06171                                                 }
06173                 void            SetStart (float const * s) alter {
06174                                                         SetStart (s[0], s[1], s[2]);
06175                                                 }
06177                 void            SetMiddle (float x, float y, float z) alter {
06178                                                         m_middle[0] = x;    m_middle[1] = y;    m_middle[2] = z;
06179                                                 }
06181                 void            SetMiddle (float const * m) alter {
06182                                                         SetMiddle (m[0], m[1], m[2]);
06183                                                 }
06185                 void            SetEnd (float x, float y, float z) alter {
06186                                                         m_end[0] = x;       m_end[1] = y;       m_end[2] = z;
06187                                                 }
06189                 void            SetEnd (float const * e) alter {
06190                                                         SetEnd (e[0], e[1], e[2]);
06191                                                 }
06193                 void            SetCenter (float x, float y, float z) alter {
06194                                                         m_center[0] = x;        m_center[1] = y;        m_center[2] = z;
06195                                                         m_flags = TKO_Circular_Center;
06196                                                 }
06198                 void            SetCenter (float const * c) alter {
06199                                                         if (c) SetCenter (c[0], c[1], c[2]);
06200                                                         else m_flags = 0;
06201                                                 }
06203                 void            SetPoints (float const * s, float const * m, float const * e,
06204                                                                    float const * c = 0) alter {
06205                                                         SetStart (s); SetMiddle (m); SetEnd (e); SetCenter (c);
06206                                                 }
06208                 float const *   GetStart (void) const   { return m_start;   }
06210                 float const *   GetMiddle (void) const  { return m_middle;  }
06212                 float const *   GetEnd (void) const     { return m_end;     }
06214                 float const *   GetCenter (void) const  { return (m_flags & TKO_Circular_Center) ? m_center : 0;        }
06215 };
06216 
06217 
06219 
06226 class BBINFILETK_API TK_Ellipse : public BBaseOpcodeHandler {
06227     private:
06228         TK_Ellipse(const TK_Ellipse&);
06229         TK_Ellipse& operator=(const TK_Ellipse&);
06230 
06231         protected:
06232                 float           m_center[3];    
06233                 float           m_major[3];     
06234                 float           m_minor[3];     
06235                 float           m_limits[2];    
06237         public:
06239                 TK_Ellipse (unsigned char opcode)
06240                         : BBaseOpcodeHandler (opcode) {}
06241 
06242                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06243                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06244                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06245 
06246                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06247                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06248 
06250                 void            SetCenter (float x, float y, float z) alter {
06251                                                         m_center[0] = x;    m_center[1] = y;    m_center[2] = z;
06252                                                 }
06254                 void            SetCenter (float const * s) alter   { SetCenter (s[0], s[1], s[2]); }
06256                 float const *   GetCenter (void) const              { return m_center;              }
06257 
06259                 void            SetMajor (float x, float y, float z) alter {
06260                                                         m_major[0] = x;     m_major[1] = y;     m_major[2] = z;
06261                                                 }
06263                 void            SetMajor (float const * m) alter    { SetMajor (m[0], m[1], m[2]);  }
06265                 float const *   GetMajor (void) const               { return m_major;               }
06266 
06268                 void            SetMinor (float x, float y, float z) alter {
06269                                                         m_minor[0] = x;     m_minor[1] = y;     m_minor[2] = z;
06270                                                 }
06272                 void            SetMinor (float const * m) alter    { SetMinor (m[0], m[1], m[2]);  }
06274                 float const *   GetMinor (void) const               { return m_minor;               }
06275 
06277                 void            SetLimits (float s, float e) alter  {
06278                                                         m_limits[0] = s;    m_limits[1] = e;
06279                                                 }
06281                 float const *   GetLimits (void) const              { return m_limits;              }
06282 };
06283 
06284 
06286 
06293 class BBINFILETK_API TK_Sphere : public BBaseOpcodeHandler {
06294 private:
06295         TK_Sphere( const TK_Sphere& );
06296         TK_Sphere& operator=(const TK_Sphere&);
06297         protected:
06298                 unsigned char   m_flags;        
06299                 float           m_center[3];    
06300                 float           m_radius;       
06301                 float           m_axis[3];      
06302                 float           m_ortho[3];     
06304         public:
06306                 TK_Sphere ()
06307                         : BBaseOpcodeHandler (TKE_Sphere) { Reset(); }
06308 
06309                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06310                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06311                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06312 
06313                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06314                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06315 
06316                 void        Reset (void) alter;
06317 
06319                 void            SetCenter (float x, float y, float z) alter {
06320                                                         m_center[0] = x;     m_center[1] = y;     m_center[2] = z;
06321                                                 }
06323                 void            SetCenter (float const * s) alter    { SetCenter (s[0], s[1], s[2]); }
06325                 float const *   GetCenter (void) const                { return m_center;            }
06326 
06327 
06329                 void            SetRadius (float r) alter   { m_radius = r;     }
06331                 float           GetRadius (void) const      { return m_radius;  }
06332 
06334                 void            SetAxis (float x, float y, float z) alter {
06335                                                         m_axis[0] = x;     m_axis[1] = y;     m_axis[2] = z;
06336                                                         if (x != 0.0f || y != 1.0f || z != 0.0f)
06337                                                                 m_flags &= ~TKSPH_NULL_AXIS;
06338                                                 }
06340                 void            SetAxis (float const * s) alter    { SetAxis (s[0], s[1], s[2]); }
06342                 float const *   GetAxis (void) const                { return m_axis;            }
06343 
06344 
06346                 void            SetOrtho (float x, float y, float z) alter {
06347                                                         m_ortho[0] = x;     m_ortho[1] = y;     m_ortho[2] = z;
06348                                                         if (x != 1.0f || y != 0.0f || z != 0.0f)
06349                                                                 m_flags &= ~TKSPH_NULL_AXIS;
06350                                                 }
06352                 void            SetOrtho (float const * s) alter    { SetOrtho (s[0], s[1], s[2]); }
06354                 float const *   GetOrtho (void) const                { return m_ortho;            }
06355 
06359                 enum Flags {
06360                         TKSPH_NONE              = 0x0,   
06361                         TKSPH_NULL_AXIS = 0x1    
06362                 };
06363 
06364 };
06365 
06366 
06368 
06375 class BBINFILETK_API TK_Cylinder : public BBaseOpcodeHandler {
06376     private:
06377         TK_Cylinder(const TK_Cylinder&);
06378         TK_Cylinder& operator=(const TK_Cylinder&);
06379 
06380         protected:
06381                 float           m_axis[6];      
06382                 float           m_radius;       
06383                 unsigned char   m_flags;        
06385         public:
06387                 TK_Cylinder ()
06388                         : BBaseOpcodeHandler (TKE_Cylinder) {}
06389 
06390                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06391                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06392                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06393 
06394                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06395                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06396 
06398                 void            SetAxis (float x1, float y1, float z1, float x2, float y2, float z2) alter {
06399                                                         m_axis[0] = x1;     m_axis[1] = y1;     m_axis[2] = z1;
06400                                                         m_axis[3] = x2;     m_axis[4] = y2;     m_axis[5] = z2;
06401                                                 }
06403                 void            SetAxis (float const * s, float const * e) alter    { SetAxis (s[0], s[1], s[2], e[0], e[1], e[2]); }
06405                 void            SetAxis (float const * a) alter     { SetAxis (&a[0], &a[3]);   }
06407                 float const *   GetAxis (void) const                { return m_axis;            }
06409                 float const *   GetStart (void) const               { return &m_axis[0];        }
06411                 float const *   GetEnd (void) const                 { return &m_axis[3];        }
06412 
06414                 void            SetRadius (float r) alter   { m_radius = r;     }
06416                 float           GetRadius (void) const      { return m_radius;  }
06417 
06419                 void            SetCaps (int f) alter       { m_flags = (unsigned char)f;      }
06421                 int             GetCaps (void) const        { return m_flags;   }
06422 
06426                 enum Capping_Options {
06427                         TKCYL_NONE   = 0,  
06428                         TKCYL_FIRST  = 1,  
06429                         TKCYL_SECOND = 2,  
06430                         TKCYL_BOTH   = 3   
06431                 };
06432 
06433 };
06434 
06435 
06437 
06444 #include "BPolyhedron.h"
06445 
06446 class BBINFILETK_API TK_PolyCylinder : public TK_Polyhedron {
06447     private:
06448         TK_PolyCylinder(const TK_PolyCylinder&);
06449         TK_PolyCylinder& operator=(const TK_PolyCylinder&);
06450 
06451         protected:
06452                 int             m_count;        
06453                 float *         m_points;       
06454                 int             m_radius_count; 
06455                 float *         m_radii;        
06456                 unsigned char   m_flags;        
06457                 float           m_normals[6];   
06459         public:
06461                 TK_PolyCylinder ()
06462                         : TK_Polyhedron (TKE_PolyCylinder), m_count (0), m_points (0), m_radius_count (0), m_radii (0) {}
06463                 ~TK_PolyCylinder();
06464 
06465                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06466                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06467                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06468 
06469                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06470                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06471 
06472                 void        Reset (void) alter;
06473 
06477                 enum Capping_Options {
06478                         TKCYL_NORMAL_FIRST  = 0x04,  
06479                         TKCYL_NORMAL_SECOND = 0x08,  
06480                         TKCYL_OPTIONALS     = 0x10   
06481                 };
06482 
06487                 void            SetPoints (int count, float const * points = 0) alter;
06489                 float const *   GetPoints (void) const              { return m_points;              }
06491                 float alter *   GetPoints (void) alter              { return m_points;              }
06493                 int             GetCount (void) const               { return m_count;               }
06494 
06495 
06500                 void            SetRadii (int count, float const * radii = 0) alter;
06502                 void            SetRadius (float radius) alter      { SetRadii (1, &radius);        }
06504                 float const *   GetRadii (void) const               { return m_radii;               }
06506                 float alter *   GetRadii (void) alter               { return m_radii;               }
06508                 int             GetRadiusCount (void) const         { return m_radius_count;        }
06509 
06510 
06512                 void            SetCaps (int f) alter               { m_flags &= ~0x03; m_flags |= f;   }
06514                 int             GetCaps (void) const                { return m_flags & 0x03;            }
06515 
06517                 void            SetEndNormal (int index, float const * normal = 0) alter {
06518                                                         int     mask = 0x40 << index;
06519                                                         if (normal == 0)
06520                                                                 m_flags &= ~mask;
06521                                                         else {
06522                                                                 m_flags |= mask;
06523                                                                 m_normals[3*index+0] = normal[0];
06524                                                                 m_normals[3*index+1] = normal[1];
06525                                                                 m_normals[3*index+2] = normal[2];
06526                                                         }
06527                                                 }
06529                 float const *   GetEndNormal (int index) const      {
06530                                                         int     mask = 0x40 << index;
06531                                                         if (m_flags & mask)
06532                                                                 return &m_normals[3*index];
06533                                                         else
06534                                                                 return 0;
06535                                                 }
06536 };
06537 
06538 
06540 
06546 class BBINFILETK_API TK_Grid : public BBaseOpcodeHandler {
06547     private:
06548         TK_Grid(const TK_Grid&);
06549         TK_Grid& operator=(const TK_Grid&);
06550 
06551         protected:
06552                 char            m_type;      
06553                 float           m_origin[3]; 
06554                 float           m_ref1[3];   
06555                 float           m_ref2[3];   
06556                 int             m_counts[2]; 
06558         public:
06560                 TK_Grid ()
06561                         : BBaseOpcodeHandler (TKE_Grid) {}
06562 
06563                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06564                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06565                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06566 
06567                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06568                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06569 
06571                 void            SetOrigin (float x, float y, float z) alter {
06572                                                         m_origin[0] = x;    m_origin[1] = y;    m_origin[2] = z;
06573                                                 }
06575                 void            SetOrigin (float const * o) alter   { SetOrigin (o[0], o[1], o[2]); }
06577                 float const *   GetOrigin (void) const              { return m_origin;              }
06578 
06580                 void            SetRef1 (float x, float y, float z) alter {
06581                                                         m_ref1[0] = x;      m_ref1[1] = y;      m_ref1[2] = z;
06582                                                 }
06584                 void            SetRef1 (float const * r) alter     { SetRef1 (r[0], r[1], r[2]);   }
06586                 float const *   GetRef1 (void) const                { return m_ref1;                }
06587 
06589                 void            SetRef2 (float x, float y, float z) alter {
06590                                                         m_ref2[0] = x;      m_ref2[1] = y;      m_ref2[2] = z;
06591                                                 }
06593                 void            SetRef2 (float const * r) alter     { SetRef2 (r[0], r[1], r[2]);   }
06595                 float const *   GetRef2 (void) const                { return m_ref2;                }
06596 
06598                 void            SetCounts (int c1, int c2) alter    {
06599                                                         m_counts[0] = c1;   m_counts[1] = c2;
06600                                                 }
06602                 int const *     GetCounts (void) const              { return m_counts;              }
06603 
06605                 void            SetType (int t)                     { m_type = (char)t;             }
06607                 int             GetType (void) const                { return (int)m_type;           }
06608 };
06609 
06611 
06615 enum TKO_Text_Encodings {
06616         TKO_Enc_ISO_Latin_One,  
06617         TKO_Enc_ISO_Latin,              
06618         TKO_Enc_JEC,                    
06619         TKO_Enc_EUC,                    
06620         TKO_Enc_Raw_16,                 
06621         TKO_Enc_Unicode,                
06622         TKO_Enc_Unicode32               
06623 };
06624 
06628 enum TKO_Text_Options {
06629         TKO_Text_Option_Region                                  = 0x01, 
06630         TKO_Text_Option_Character_Attributes    = 0x02  
06631 };
06632 
06636 enum TKO_Text_Region_Options {
06637         TKO_Text_Region_Window          = 0x01, 
06638         TKO_Text_Region_Relative        = 0x02, 
06639         TKO_Text_Region_Adjusted        = 0x04, 
06640         TKO_Text_Region_Center          = 0x08, 
06641         TKO_Text_Region_Top                     = 0x10  
06642 };
06643 
06644 
06648 enum TKO_Character_Attributes {
06649         TKO_Character_Name                              = 0x0001,  
06650         TKO_Character_Size                              = 0x0002,  
06651         TKO_Character_Vertical_Offset   = 0x0004,  
06652         TKO_Character_Omitted                   = 0x0008,  
06653         TKO_Character_Invisible                 = 0x0010,  
06654         TKO_Character_Slant                             = 0x0020,  
06655         TKO_Character_Width_Scale               = 0x0040,  
06656         TKO_Character_Rotation                  = 0x0080,  
06657         TKO_Character_Rotation_Fixed    = 0x0100,
06658         TKO_Character_Extended                  = 0x8000   
06659 };
06660 
06662 struct TK_Character_Attribute {
06663         char *                          name;                                   
06664 
06665         float                           size;                                   
06666         float                           vertical_offset;                
06667         float                           slant;                                  
06668         float                           rotation;                               
06669         float                           width_scale;                    
06670 
06671         unsigned short          mask;                                   
06672         unsigned short          value;                                  
06673 
06674         unsigned char           size_units;                             
06675         unsigned char           vertical_offset_units;  
06676 };
06677 
06678 
06680 
06686 class BBINFILETK_API TK_Text : public BBaseOpcodeHandler {
06687     private:
06688         TK_Text(const TK_Text&);
06689         TK_Text& operator=(const TK_Text&);
06690 
06691         protected:
06692                 float           m_position[3];  
06693                 int             m_length;       
06694                 int             m_allocated;    
06695                 char *          m_string;       
06696                 unsigned char   m_encoding;     
06697                 unsigned char   m_options;              
06698                 unsigned char   m_region_options;
06699                 unsigned char   m_region_count; 
06700                 float                   m_region[4*3];  
06701                 int                             m_count;                
06702                 TK_Character_Attribute  *m_character_attributes;        
06703                 int                             m_substage;             
06704                 int                             m_tmp;                  
06707                 void    set_string (char const * string) alter;     
06708                 void    set_string (int length) alter;              
06709 
06710         public:
06712                 TK_Text (unsigned char opcode);
06713                 ~TK_Text();
06714 
06715                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06716                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06717                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06718 
06719                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06720                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06721 
06722                 void        Reset (void) alter;
06723 
06725                 void            SetString (char const * string) alter   { set_string (string);  }
06727                 void            SetString (unsigned short const * string) alter;
06729                 void            SetString (unsigned int const * string) alter;
06731                 void            SetString (int length) alter            { set_string (length);  }
06733                 char const *    GetString (void) const                  { return m_string;      }
06735                 char alter *    GetString (void) alter                  { return m_string;      }
06736 
06738                 void            SetPosition (float x, float y, float z) alter
06739                                                                                 { m_position[0] = x;  m_position[1] = y;  m_position[2] = z;    }
06741                 void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
06743                 float const *   GetPosition (void) const                { return &m_position[0];                }
06744 
06746                 void            SetEncoding (int e) alter               { m_encoding = (unsigned char)e;        }
06748                 int             GetEncoding (void) const                { return (int)m_encoding;               }
06749 
06751                 void            SetTextRegion (int c, float const * p, int o=0) alter;
06753                 int             GetTextRegionCount (void) const         { return (int)m_region_count;           }
06755                 float const *   GetTextRegionPoints (void) const        { return m_region;                      }
06757                 int             GetTextRegionOptions (void) const       { return (int)m_region_options;         }
06758 };
06759 
06761 
06763 
06769 enum TKO_Font_Type {
06770         TKO_Font_HOOPS_Stroked      // data represents a HOOPS stroked font definition
06771 };
06772 
06773 
06775 
06781 class BBINFILETK_API TK_Font : public BBaseOpcodeHandler {
06782     private:
06783         TK_Font(const TK_Font&);
06784         TK_Font& operator=(const TK_Font&);
06785 
06786         protected:
06787                 char *          m_name;         
06788                 char *          m_lookup;       
06789                 char *          m_bytes;        
06790                 int             m_name_length;  
06791                 int             m_lookup_length;
06792                 int             m_length;       
06793                 unsigned char   m_type;         
06794                 unsigned char   m_encoding;     
06796 
06797                 void    set_bytes (int size, char const * bytes = 0) alter;
06799                 void    set_name (char const * string) alter;
06801                 void    set_name (int length) alter;
06803                 void    set_lookup (char const * string) alter;
06805                 void    set_lookup (int length) alter;
06806 
06807         public:
06809                 TK_Font () : BBaseOpcodeHandler (TKE_Font),
06810                         m_name (0), m_lookup (0), m_bytes (0), m_name_length (0), m_lookup_length (0), m_length (0),
06811                         m_type (0), m_encoding (0) {}
06812                 ~TK_Font();
06813 
06814                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06815                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06816                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06817 
06818                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06819                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06820 
06821                 void        Reset (void) alter;
06822 
06823 
06825                 void            SetType (int t) alter                               { m_type = (unsigned char)t;}
06827                 int             GetType (void) const                                { return (int)m_type;       }
06828 
06833                 void            SetBytes (int size, char const * bytes = 0) alter   { set_bytes (size, bytes);  }
06835                 int             GetBytesCount (void) const                          { return m_length;          }
06837                 char const *    GetBytes (void) const                               { return m_bytes;           }
06839                 char alter *    GetBytes (void) alter                               { return m_bytes;           }
06840 
06842                 void            SetName (char const * string) alter                 { set_name (string);        }
06844                 void            SetName (int length) alter                          { set_name (length);        }
06846                 char const *    GetName (void) const                                { return m_name;            }
06848                 char alter *    GetName (void) alter                                { return m_name;            }
06849 
06851                 void            SetLookup (char const * string) alter               { set_lookup (string);      }
06853                 void            SetLookup (int length) alter                        { set_lookup (length);      }
06855                 char const *    GetLookup (void) const                              { return m_lookup;          }
06857                 char alter *    GetLookup (void) alter                              { return m_lookup;          }
06858 
06860                 void            SetEncoding (int e) alter                       { m_encoding = (unsigned char)e;}
06862                 int             GetEncoding (void) const                        { return (int)m_encoding;       }
06863 };
06864 
06866 
06870 enum TKO_Image_Formats {
06871         TKO_Image_Mapped    = 0,         
06872         TKO_Image_Mapped_16 = 1,         
06873         TKO_Image_RGB       = 2,         
06874         TKO_Image_RGBA      = 3,         
06875         TKO_Image_BGRA      = 4,         
06876         TKO_Image_DEPTH     = 5,         
06877         TKO_Image_Format_Mask   = 0x0F,  
06878 
06879         TKO_Image_Explicit_Size = 0x10,         
06880         TKO_Image_Local_Texture = 0x20,         
06881         TKO_Image_Is_Named      = 0x80,         
06882         TKO_Image_Options_Mask  = 0xF0,         
06883 
06884         TKO_Image_Invalid       = 0xFF          
06885 };
06886 
06888 _W3DTK_API extern const int TK_Image_Bytes_Per_Pixel[];
06889 
06893 enum TKO_Compression {
06894         TKO_Compression_None = 0,       
06895         TKO_Compression_RLE  = 1,       
06896         TKO_Compression_JPEG = 2,       
06897         TKO_Compression_Reference = 99  
06898 };
06899 
06900 #ifndef DOXYGEN_SHOULD_SKIP_THIS
06901 
06902 class BBINFILETK_API2 TK_Image_Data_Buffer {
06903         protected:
06904                 unsigned char *                 m_buffer;       
06905                 unsigned int                    m_allocated;    
06906                 unsigned int                    m_used;         
06907 
06908         public:
06910                 TK_Image_Data_Buffer() : m_buffer (0),  m_allocated (0), m_used (0) {}
06911                 ~TK_Image_Data_Buffer();
06912 
06913                 void    Resize (unsigned int size) alter;
06914                 void    Expand (unsigned int size) alter        { Resize (Size() + size);   }
06915                 void    Reset (void) alter;
06916 
06917                 unsigned int const &     Size (void) const      { return m_allocated;   }
06918                 unsigned int const &     Used (void) const      { return m_used;        }
06919                 unsigned int alter &     Used (void) alter      { return m_used;        }
06920                 unsigned char const *    Buffer (void) const    { return m_buffer;      }
06921                 unsigned char alter *    Buffer (void) alter    { return m_buffer;      }
06922 };
06923 
06924 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
06925 
06926 
06928 
06934 class BBINFILETK_API TK_Image : public BBaseOpcodeHandler {
06935     private:
06936         TK_Image(const TK_Image&);
06937         TK_Image& operator=(const TK_Image&);
06938 
06939         protected:
06940                 char *                  m_bytes;        
06941                 char *                  m_name;         
06942                 char *                  m_reference;    
06943                 float                   m_position[3];  
06944                 int                     m_size[2];      
06945                 int                     m_name_length;  
06946                 int                     m_reference_length;     
06947                 unsigned char           m_format;       
06948                 unsigned char                   m_options;      
06949                 unsigned char           m_compression;  
06950                 unsigned char           m_bytes_format; 
06951                 float                                   m_explicit_size[2];     
06952                 unsigned char                   m_explicit_units[2];    
06953                 TK_Image_Data_Buffer    m_work_area[2];    
06955 
06956                 void    set_data (int size, char const * bytes = 0, unsigned char data_format = TKO_Compression_None) alter;
06958                 void    set_name (char const * string) alter;
06960                 void    set_name (int length) alter;
06961 
06963                 TK_Status compress_image (BStreamFileToolkit & tk, int active_work_area = 0) alter;
06965                 TK_Status decompress_image (BStreamFileToolkit & tk, int active_work_area = 0) alter;
06967                 TK_Status read_jpeg_header (void) alter;
06968 
06969         public:
06971                 TK_Image ();
06972                 ~TK_Image();
06973 
06974                 TK_Status   Read (BStreamFileToolkit & tk) alter;
06975                 TK_Status   Write (BStreamFileToolkit & tk) alter;
06976                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
06977 
06978                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
06979                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
06980                 TK_Status   compress_image_ascii (BStreamFileToolkit & tk) alter;
06981 
06982 
06983                 void        Reset (void) alter;
06984 
06989                 void            SetBytes (int size, char const * bytes = 0,
06990                                                                   unsigned char data_format = TKO_Compression_None) alter
06991                                                                                                                                                         { set_data (size, bytes, data_format);  }
06993                 char const *    GetBytes (void) const                               { return m_bytes;           }
06995                 char alter *    GetBytes (void) alter                               { return m_bytes;           }
06996 
06998                 void            SetName (char const * string) alter                 { set_name (string);        }
07000                 void            SetName (int length) alter                          { set_name (length);        }
07002                 char const *    GetName (void) const                                { return m_name;            }
07004                 char alter *    GetName (void) alter                                { return m_name;            }
07005 
07007                 void            SetReference (char const * string) alter;
07009                 void            SetReference (int length) alter;
07011                 char const *    GetReference (void) const                           { return m_reference;       }
07013                 char alter *    GetReference (void) alter                           { return m_reference;       }
07014 
07016                 void            SetPosition (float x, float y, float z) alter
07017                                                                                 { m_position[0] = x;  m_position[1] = y;  m_position[2] = z;    }
07019                 void            SetPosition (float const * p) alter     { SetPosition (p[0], p[1], p[2]);       }
07021                 float const *   GetPosition (void) const                { return &m_position[0];                }
07022 
07024                 void            SetSize (int w, int h) alter            { m_size[0] = w; m_size[1] = h;         }
07026                 void            SetSize (int const * s) alter           { m_size[0] = s[0]; m_size[1] = s[1];   }
07028                 int const *     GetSize (void) const                    { return m_size;                        }
07029 
07031                 void            SetFormat (int f) alter                 { m_format = (unsigned char)(f & TKO_Image_Format_Mask);    }
07033                 int             GetFormat (void) const                  { return (int)m_format;                 }
07034 
07036                 void            SetOptions (int f) alter                 { m_options = (unsigned char)(f & TKO_Image_Options_Mask); }
07038                 int             GetOptions (void) const                  { return (int)m_options;               }
07039 
07041                 void            SetCompression (int c) alter            { m_compression = (unsigned char)c;     }
07043                 int             GetCompression (void) const             { return (int)m_compression;            }
07044 };
07045 
07046 
07048 
07049 
07053 enum TKO_Texture_Option_Bits {
07054         TKO_Texture_Param_Source        = 0x00000001,   
07055         TKO_Texture_Tiling                      = 0x00000002,   
07056         TKO_Texture_Interpolation       = 0x00000004,   
07057         TKO_Texture_Decimation          = 0x00000008,   
07058         TKO_Texture_Red_Mapping         = 0x00000010,   
07059         TKO_Texture_Green_Mapping       = 0x00000020,   
07060         TKO_Texture_Blue_Mapping        = 0x00000040,   
07061         TKO_Texture_Alpha_Mapping       = 0x00000080,   
07062         TKO_Texture_Param_Function      = 0x00000100,   
07063         TKO_Texture_Layout                      = 0x00000200,   
07064         TKO_Texture_Transform           = 0x00000400,   
07065         TKO_Texture_Value_Scale         = 0x00000800,   
07066         TKO_Texture_Caching                     = 0x00001000,   
07067         TKO_Texture_DownSample          = 0x00002000,   
07068         TKO_Texture_No_DownSample       = 0x00004000,   
07069         TKO_Texture_Extended            = 0x00008000,   
07070         TKO_Texture_Extended_Mask       = 0xFFFF0000,   //   internal use, indicates bit which require TKO_Texture_Extended
07071         TKO_Texture_Decal                       = 0x00010000,   
07072         TKO_Texture_Modulate            = 0x00020000,   
07073         TKO_Texture_Param_Offset        = 0x00040000    
07074 };
07075 
07079 enum TKO_Texture_Param_Sources {
07080         TKO_Texture_Param_Source_U,   
07081         TKO_Texture_Param_Source_UV,   
07082         TKO_Texture_Param_Source_UVW,   
07083         TKO_Texture_Param_Source_Object,   
07084         TKO_Texture_Param_Source_World,   
07085         TKO_Texture_Param_Source_Surface_Normal,   
07086         TKO_Texture_Param_Source_Reflection_Vector,   
07087         TKO_Texture_Param_Source_Natural_UV,   
07088         TKO_Texture_Param_Source_Local_Pixels,   
07089         TKO_Texture_Param_Source_Outer_Pixels,   
07090         TKO_Texture_Param_Source_Local_Window,   
07091         TKO_Texture_Param_Source_Outer_Window,   
07092         TKO_Texture_Param_Source_Transmission_Vector,   
07093         TKO_Texture_Param_Source_Sphere_Map,   
07094         TKO_Texture_Param_Source_Cylinder_Map,  
07095         TKO_Texture_Param_Source_Physical_Reflection_Vector   
07096 };
07097 
07098 
07102 enum TKO_Texture_Param_Functions {
07103         TKO_Texture_Param_Function_None,   
07104         TKO_Texture_Param_Function_Sphere,   
07105         TKO_Texture_Param_Function_Cylinder,   
07106         TKO_Texture_Param_Function_Box   
07107 };
07108 
07109 
07113 enum TKO_Texture_Layouts {
07114         TKO_Texture_Layout_Rectilinear,   
07115         TKO_Texture_Layout_Spherical,   
07116         TKO_Texture_Layout_Hemispherical,   
07117         TKO_Texture_Layout_Cubic_Faces   
07118 };
07119 
07123 enum TKO_Texture_Tilings {
07124         TKO_Texture_Tiling_None,   
07125         TKO_Texture_Tiling_Clamp,   
07126         TKO_Texture_Tiling_Repeat,   
07127         TKO_Texture_Tiling_Mirror   
07128 };
07129 
07130 
07134 enum TKO_Texture_Filters {
07135         TKO_Texture_Filter_None,   
07136         TKO_Texture_Filter_Bilinear,   
07137         TKO_Texture_Filter_Trilinear,   
07138         TKO_Texture_Filter_MipMap,   
07139         TKO_Texture_Filter_Summed_Areas,   
07140         TKO_Texture_Filter_Gaussian,   
07141         TKO_Texture_Filter_Stochastic,   
07142         TKO_Texture_Filter_Anisotropic  
07143 };
07144 
07145 
07149 enum TKO_Texture_Channel_Mappings {
07150         TKO_Texture_Channel_Mapping_Red,   
07151         TKO_Texture_Channel_Mapping_Green,   
07152         TKO_Texture_Channel_Mapping_Blue,   
07153         TKO_Texture_Channel_Mapping_Alpha,   
07154         TKO_Texture_Channel_Mapping_Zero,   
07155         TKO_Texture_Channel_Mapping_One,   
07156         TKO_Texture_Channel_Mapping_Luminance,   
07157         TKO_Texture_Channel_Mapping_None   
07158 };
07159 
07160 
07164 enum TKO_Texture_Application_Modes {
07165         TKO_Texture_Modulate_Set        = 0x01,     
07166         TKO_Texture_Decal_Set   = 0x02      
07167 };
07168 
07169 
07171 
07177 class BBINFILETK_API2 TK_Texture : public BBaseOpcodeHandler {
07178     private:
07179         TK_Texture(const TK_Texture&);
07180         TK_Texture& operator=(const TK_Texture&);
07181 
07182         protected:
07183                 int             m_name_length;      
07184                 int             m_image_length;     
07185                 char *          m_name;             
07186                 char *          m_image;            
07187                 int             m_flags;            
07188                 int                             m_substage;                     
07190                 char            m_param_source;     
07191                 char            m_interpolation;    
07192                 char            m_decimation;       
07193                 char            m_red_mapping;      
07194                 char            m_green_mapping;    
07195                 char            m_blue_mapping;     
07196                 char            m_alpha_mapping;    
07197                 char            m_param_function;   
07198                 char            m_layout;           
07199                 char            m_tiling;           
07200                 float           m_value_scale[2];   
07201                 char *          m_transform;        
07202                 char                    m_apply_mode;       
07203                 char                    m_param_offset;     
07205                 void    set_name (int length) alter;                    
07206                 void    set_name (char const * name) alter;             
07207                 void    set_image (int length) alter;                   
07208                 void    set_image (char const * image) alter;           
07209                 void    set_transform (int length) alter;               
07210                 void    set_transform (char const * transform) alter;   
07211 
07212         public:
07214                 TK_Texture () : BBaseOpcodeHandler (TKE_Texture),
07215                         m_name_length (0), m_image_length (0),
07216                         m_name (0), m_image (0),
07217                         m_transform (0) {
07218                                 Reset();
07219                         }
07220                 ~TK_Texture();
07221 
07222                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07223                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07224                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07225 
07226                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07227                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07228 
07229                 void        Reset (void) alter;
07230 
07232                 void            SetName (char const * name) alter           { set_name (name);              }
07234                 void            SetName (int length) alter                  { set_name (length);            }
07236                 char const *    GetName (void) const                        { return m_name;                }
07238                 char alter *    GetName (void) alter                        { return m_name;                }
07239 
07241                 void            SetImage (char const * image) alter         { set_image (image);            }
07243                 void            SetImage (int length) alter                 { set_image (length);           }
07245                 char const *    GetImage (void) const                       { return m_image;               }
07247                 char alter *    GetImage (void) alter                       { return m_image;               }
07248 
07250                 void            SetFlags (int f) alter  {
07251                                                         m_flags = f;
07252                                                         if ((f & TKO_Texture_Extended_Mask) != 0)
07253                                                                 m_flags |= TKO_Texture_Extended;
07254                                                 }
07256                 int             GetFlags (void) const                       { return m_flags;               }
07257 
07259                 void            SetParameterSource (int p) alter            { m_param_source = (char)p;     }
07261                 int             GetParameterSource (void) const             { return (int)m_param_source;   }
07262 
07264                 void            SetInterpolation (int p) alter              { m_interpolation = (char)p;    }
07266                 int             GetInterpolation (void) const               { return (int)m_interpolation;  }
07267 
07269                 void            SetDecimation (int p) alter                 { m_decimation = (char)p;       }
07271                 int             GetDecimation (void) const                  { return (int)m_decimation;     }
07272 
07274                 void            SetRedMapping (int p) alter                 { m_red_mapping = (char)p;      }
07276                 int             GetRedMapping (void) const                  { return (int)m_red_mapping;    }
07277 
07279                 void            SetGreenMapping (int p) alter               { m_green_mapping = (char)p;    }
07281                 int             GetGreenMapping (void) const                { return (int)m_green_mapping;  }
07282 
07284                 void            SetBlueMapping (int p) alter                { m_blue_mapping = (char)p;     }
07286                 int             GetBlueMapping (void) const                 { return (int)m_blue_mapping;   }
07287 
07289                 void            SetAlphaMapping (int p) alter               { m_alpha_mapping = (char)p;    }
07291                 int             GetAlphaMapping (void) const                { return (int)m_alpha_mapping;  }
07292 
07294                 void            SetParameterFunction (int p) alter          { m_param_function = (char)p;   }
07296                 int             GetParameterFunction (void) const           { return (int)m_param_function; }
07297 
07299                 void            SetLayout (int p) alter                     { m_layout = (char)p;           }
07301                 int             GetLayout (void) const                      { return (int)m_layout;         }
07302 
07304                 void            SetTiling (int p) alter                     { m_tiling = (char)p;           }
07306                 int             GetTiling (void) const                      { return (int)m_tiling;         }
07307 
07309                 void            SetValueScale (float v1, float v2) alter    { m_value_scale[0] = v1; m_value_scale[1] = v2; }
07311                 float const *   GetValueScale (void) const                  { return m_value_scale;         }
07312 
07314                 void            SetApplicationMode (int p) alter            { m_apply_mode = (char)p;       }
07316                 int             GetApplicationMode (void) const             { return (int)m_tiling;         }
07317 
07319                 void            SetParameterOffset (int p) alter            { m_param_offset = (char)p;     }
07321                 int             GetParameterOffset (void) const             { return (int)m_param_offset;   }
07322 
07327                 void            SetTransform (char const * transform) alter { set_transform (transform);    }
07332                 void            SetTransform (int length) alter             { set_transform (length);       }
07334                 char const *    GetTransform (void) const                   { return m_transform;           }
07336                 char alter *    GetTransform (void) alter                   { return m_transform;           }
07337 };
07338 
07339 
07343 enum TKO_Thumbnail_Formats {
07344         TKO_Thumbnail_RGB       = 0,         
07345         TKO_Thumbnail_RGBA      = 1,         
07346 
07347         TKO_Thumbnail_Invalid   = 0xFF       
07348 };
07349 
07351 
07357 class BBINFILETK_API2 TK_Thumbnail : public BBaseOpcodeHandler {
07358 private:
07359         TK_Thumbnail( const TK_Thumbnail& );
07360         TK_Thumbnail& operator=(const TK_Thumbnail&);
07361         protected:
07362                 char *                  m_bytes;        
07363                 int                     m_size[2];      
07364                 unsigned char           m_format;       
07366         public:
07368         TK_Thumbnail() : BBaseOpcodeHandler (TKE_Thumbnail), m_bytes (0), m_format (TKO_Thumbnail_Invalid) {}
07369                 ~TK_Thumbnail();
07370 
07371                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07372                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07373                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07374 
07375                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07376                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07377 
07378                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
07379                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, int variant) alter;
07380                 TK_Status   Interpret (BStreamFileToolkit & tk, ID_Key key, char const * special) alter
07381                                                                 { return BBaseOpcodeHandler::Interpret(tk, key, special); }
07382                 void        Reset (void) alter;
07383 
07388                 void            SetBytes (int size, unsigned char const * bytes = 0) alter;
07390                 char const *    GetBytes (void) const                   { return m_bytes;                       }
07392                 char alter *    GetBytes (void) alter                   { return m_bytes;                       }
07393 
07395                 void            SetSize (int w, int h) alter            { m_size[0] = w; m_size[1] = h;         }
07397                 void            SetSize (int const * s) alter           { m_size[0] = s[0]; m_size[1] = s[1];   }
07399                 int const *     GetSize (void) const                    { return m_size;                        }
07400 
07402                 void            SetFormat (int f) alter                 { m_format = (unsigned char)f;          }
07404                 int             GetFormat (void) const                  { return (int)m_format;                 }
07405 };
07406 
07407 
07409 
07411 
07416 class BBINFILETK_API2 TK_Glyph_Definition : public BBaseOpcodeHandler {
07417 private:
07418         TK_Glyph_Definition( const TK_Glyph_Definition& );
07419         TK_Glyph_Definition& operator=(const TK_Glyph_Definition&);
07420         protected:
07421                 int             m_name_length;      
07422                 int             m_size;             
07423                 char *          m_name;             
07424                 char *          m_data;             
07426         public:
07428                 TK_Glyph_Definition () : BBaseOpcodeHandler (TKE_Glyph_Definition),
07429                         m_name_length (0), m_size (0),
07430                         m_name (0), m_data (0) {}
07431                 ~TK_Glyph_Definition();
07432 
07433                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07434                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07435                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07436 
07437                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07438                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07439 
07440                 void        Reset (void) alter;
07441 
07443                 void            SetName (char const * name) alter;
07445                 void            SetName (int length) alter;
07447                 char const *    GetName (void) const            { return m_name;        }
07449                 char alter *    GetName (void) alter            { return m_name;        }
07450 
07452                 void            SetDefinition (int size, char const * data = 0) alter;
07454                 int             GetDefinitionSize (void) const  { return m_size;        }
07456                 char const *    GetDefinition (void) const      { return m_data;        }
07458                 char alter *    GetDefinition (void) alter      { return m_data;        }
07459 };
07460 
07462 
07467 class BBINFILETK_API2 TK_Line_Style : public BBaseOpcodeHandler {
07468 private:
07469         TK_Line_Style( const TK_Line_Style& );
07470         TK_Line_Style& operator=(const TK_Line_Style&);
07471         protected:
07472                 int             m_name_length;      
07473                 int             m_definition_length;
07474                 char *          m_name;             
07475                 char *          m_definition;       
07477         public:
07479                 TK_Line_Style () : BBaseOpcodeHandler (TKE_Line_Style),
07480                         m_name_length (0), m_definition_length (0),
07481                         m_name (0), m_definition (0) {}
07482                 ~TK_Line_Style();
07483 
07484                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07485                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07486                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07487 
07488                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07489                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07490 
07491                 void        Reset (void) alter;
07492 
07494                 void            SetName (char const * name) alter;
07496                 void            SetName (int length) alter;
07498                 char const *    GetName (void) const        { return m_name;            }
07500                 char alter *    GetName (void) alter        { return m_name;            }
07501 
07503                 void            SetDefinition (char const * def) alter;
07505                 void            SetDefinition (int length) alter;
07507                 char const *    GetDefinition (void) const  { return m_definition;      }
07509                 char alter *    GetDefinition (void) alter  { return m_definition;      }
07510 };
07511 
07513 
07515 
07520 class BBINFILETK_API TK_Clip_Rectangle : public BBaseOpcodeHandler {
07521     private:
07522         TK_Clip_Rectangle(const TK_Clip_Rectangle&);
07523         TK_Clip_Rectangle& operator=(const TK_Clip_Rectangle&);
07524 
07525         protected:
07526                 char            m_options;  
07527                 float           m_rect[4];  
07529         public:
07531                 TK_Clip_Rectangle ()
07532                         : BBaseOpcodeHandler (TKE_Clip_Rectangle), m_options (0) {}
07533 
07534                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07535                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07536                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07537 
07538                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07539                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07540 
07541                 void        Reset (void) alter;
07542 
07544                 void            SetRectangle (float left, float right, float bottom, float top) alter
07545                                                         { m_rect[0] = left;  m_rect[1] = right;  m_rect[2] = bottom;  m_rect[3] = top; }
07547                 void            SetRectangle (float const * rect) alter
07548                                                         { SetRectangle (rect[0], rect[1], rect[2], rect[3]); }
07550                 float const *   GetRectangle (void) const       { return m_rect;            }
07551 
07553                 void            SetOptions (int o) alter        { m_options = (char)o;      }
07555                 int             GetOptions (void) const         { return (int)m_options;    }
07556 };
07557 
07559 
07563 enum TKO_Clip_Region_Options {
07564         TKO_Clip_Region_Window_Space = 0x01   
07565 };
07566 
07568 
07573 class BBINFILETK_API TK_Clip_Region : public BBaseOpcodeHandler {
07574     private:
07575         TK_Clip_Region(const TK_Clip_Region&);
07576         TK_Clip_Region& operator=(const TK_Clip_Region&);
07577 
07578         protected:
07579                 char            m_options;  
07580                 int             m_count;    
07581                 float *         m_points;   
07583         public:
07585                 TK_Clip_Region ()
07586                         : BBaseOpcodeHandler (TKE_Clip_Region), m_options (0), m_count (0), m_points (0) {}
07587                 ~TK_Clip_Region();
07588 
07589                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07590                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07591                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07592 
07593                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07594                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07595 
07596                 void        Reset (void) alter;
07597 
07602                 void            SetPoints (int count, float const * points = 0) alter;
07604                 float const *   GetPoints (void) const                                  { return m_points;              }
07606                 float alter *   GetPoints (void) alter                                  { return m_points;              }
07608                 int             GetCount (void) const                                   { return m_count;               }
07609 
07611                 void            SetOptions (int o) alter        { m_options = (char)o;      }
07613                 int             GetOptions (void) const         { return (int)m_options;    }
07614 };
07615 
07616 
07618 
07620 
07636 class BBINFILETK_API2 TK_User_Data : public BBaseOpcodeHandler {
07637     private:
07638         TK_User_Data(const TK_User_Data&);
07639         TK_User_Data& operator=(const TK_User_Data&);
07640 
07641         protected:
07642                 int             m_size;  
07643                 char *          m_data;  
07644                 int                             m_buffer_size;   
07646 
07647                 void    set_data (int size, char const * bytes = 0) alter;  
07648 
07649         public:
07651                 TK_User_Data ()
07652                         : BBaseOpcodeHandler (TKE_Start_User_Data), m_size (0), m_data (0), m_buffer_size(0) {}
07653                 ~TK_User_Data();
07654 
07655                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07656                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07657                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07658 
07659                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07660                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07661 
07662                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
07663                 void        Reset (void) alter;
07664 
07669                 void            SetUserData (int size, char const * bytes = 0) alter    { set_data (size, bytes);   }
07671                 char const *    GetUserData (void) const                                { return m_data;            }
07673                 char alter *    GetUserData (void) alter                                { return m_data;            }
07675                 int             GetSize (void) const                                    { return m_size;            }
07676 
07678                 void                    Resize (int size) alter;  
07679 
07681                 void                    SetSize (int size) alter;
07682 };
07683 
07685 
07690 class BBINFILETK_API TK_XML : public BBaseOpcodeHandler {
07691     private:
07692         TK_XML(const TK_XML&);
07693         TK_XML& operator=(const TK_XML&);
07694 
07695         protected:
07696                 int             m_size;  
07697                 char *          m_data;  
07699         public:
07701                 TK_XML (): BBaseOpcodeHandler (TKE_XML), m_size (0), m_data (0) {}
07702                 ~TK_XML();
07703 
07704                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07705                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07706                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07707 
07708                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07709                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07710 
07711                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
07712                 void        Reset (void) alter;
07713 
07718                 void            SetXML (int size, char const * data = 0) alter;
07722                 void            AppendXML (int size, char const * data = 0) alter;
07724                 char const *    GetXML (void) const                     { return m_data;            }
07726                 char alter *    GetXML (void) alter                     { return m_data;            }
07728                 int             GetSize (void) const                    { return m_size;            }
07729 };
07730 
07731 
07732 
07734 
07740 class BBINFILETK_API TK_URL : public BBaseOpcodeHandler {
07741     private:
07742         TK_URL(const TK_URL&);
07743         TK_URL& operator=(const TK_URL&);
07744 
07745         protected:
07746                 int             m_length;       
07747                 int             m_allocated;    
07748                 char *          m_string;       
07750         public:
07752                 TK_URL () : BBaseOpcodeHandler (TKE_URL),
07753                                                                         m_length (0), m_allocated (0), m_string (0) {}
07754                 ~TK_URL();
07755 
07756                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07757                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07758                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07759 
07760                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07761                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07762 
07763                 void        Reset (void) alter;
07764 
07766                 void            SetString (char const * string) alter;
07768                 void            SetString (int length) alter;
07770                 char const *    GetString (void) const                  { return m_string;      }
07772                 char alter *    GetString (void) alter                  { return m_string;      }
07773 };
07774 
07775 
07777 
07783 class BBINFILETK_API TK_External_Reference : public BBaseOpcodeHandler {
07784     private:
07785         TK_External_Reference(const TK_External_Reference&);
07786         TK_External_Reference& operator=(const TK_External_Reference&);
07787 
07788         protected:
07789                 int             m_length;       
07790                 int             m_allocated;    
07791                 char *          m_string;       
07793         public:
07794                 TK_External_Reference () : BBaseOpcodeHandler (TKE_External_Reference),
07795                                                                         m_length (0), m_allocated (0), m_string (0) {}
07796                 ~TK_External_Reference();
07797 
07798                 TK_Status   Read (BStreamFileToolkit & tk) alter;
07799                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07800                 TK_Status   Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
07801 
07802                 TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07803                 TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07804 
07805                 TK_Status   Execute (BStreamFileToolkit & tk) alter;
07806                 void        Reset (void) alter;
07807 
07809                 void            SetString (char const * string) alter;
07811                 void            SetString (int length) alter;
07813                 char const *    GetString (void) const                  { return m_string;      }
07815                 char alter *    GetString (void) alter                  { return m_string;      }
07816 };
07817 
07818 
07819 //
07820 //
07821 // W3D Extensions
07822 //
07823 //
07824 
07835 class BBINFILETK_API W3D_Image : public BBaseOpcodeHandler
07836 {
07837     private:
07838         W3D_Image(const W3D_Image&);
07839         W3D_Image& operator=(const W3D_Image&);
07840 
07841     protected:
07842 
07843         char *                  m_name;         
07844         int                     m_name_length;  
07845         int                     m_size[2];
07846         char                    m_bpp;
07847 
07849         void    set_name (char const * string) alter;
07851         void    set_name (int length) alter;
07852 
07853     public:
07855         W3D_Image () : BBaseOpcodeHandler ((unsigned char)W3DE_Image), m_name (0), m_name_length (0), m_bpp(0)
07856         { m_size[0] = m_size[1] = 0; }
07857         ~W3D_Image();
07858 
07859         TK_Status   ReadAscii (BStreamFileToolkit & tk) alter;
07860                 TK_Status   Read (BStreamFileToolkit & tk) alter;               
07861 
07862         TK_Status   WriteAscii (BStreamFileToolkit & tk) alter;
07863                 TK_Status   Write (BStreamFileToolkit & tk) alter;
07864                 
07865 
07866         void        Reset (void) alter;
07867 
07869         void            SetName (char const * string) alter                 { set_name (string);        }
07871         void            SetName (int length) alter                          { set_name (length);        }
07873         char const *    GetName (void) const                                { return m_name;            }
07875         char alter *    GetName (void) alter                                { return m_name;            }
07876 
07877         void            SetSize (int x, int y )                             { m_size[0] = x; m_size[1] = y ;}
07878         int const*      GetSize (void) const                                { return m_size;            }
07879         int alter*      GetSize (void) alter                                { return m_size;            }
07880 
07881         void            SetBitDepth( char bpp )                             { m_bpp = bpp;              }
07882         char const      GetBitDepth (void) const                            { return m_bpp;            }
07883         char alter      GetBitDepth (void) alter                            { return m_bpp;            }
07884 
07885 };
07886 
07887 
07888 #endif //BOPCODE_HANDLER
07889 

Generated on Tue Jan 6 22:41:37 2009 for Autodesk DWF 3D Toolkit by  doxygen 1.4.5