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