00001 00002 // 00003 // Copyright (c) 2000 by Tech Soft 3D, LLC. 00004 // The information contained herein is confidential and proprietary to 00005 // Tech Soft 3D, LLC., and considered a trade secret as defined under 00006 // civil and criminal statutes. Tech Soft 3D shall pursue its civil 00007 // and criminal remedies in the event of unauthorized use or misappropriation 00008 // of its trade secrets. Use of this information by anyone other than 00009 // authorized employees of Tech Soft 3D, LLC. is granted only under a 00010 // written non-disclosure agreement, expressly prescribing the scope and 00011 // manner of such use. 00012 // 00013 // $Id: 322eac7b0a7a1c274b3253926bca39dfb0f8788a $ 00014 // 00015 00016 #ifndef BBINFILETK_SHELL 00017 #define BBINFILETK_SHELL 00018 00019 #include "BOpcodeHandler.h" 00020 #include "BPolyhedron.h" 00021 00022 00023 00025 00031 class BBINFILETK_API TK_Shell : public TK_Polyhedron { 00032 private: 00033 virtual TK_Status read_advanced (BStreamFileToolkit & tk) alter; 00034 virtual TK_Status read_uncompressed_points (BStreamFileToolkit & tk) alter; 00035 virtual TK_Status read_uncompressed_faces (BStreamFileToolkit & tk) alter; 00036 virtual TK_Status read_bounding (BStreamFileToolkit & tk) alter; 00037 00038 00039 00040 00041 virtual TK_Status read_advanced_ascii (BStreamFileToolkit & tk) alter; 00042 virtual TK_Status read_uncompressed_points_ascii (BStreamFileToolkit & tk) alter; 00043 virtual TK_Status read_uncompressed_faces_ascii (BStreamFileToolkit & tk) alter; 00044 virtual TK_Status read_bounding_ascii (BStreamFileToolkit & tk) alter; 00045 00046 00047 virtual TK_Status compute_advanced (BStreamFileToolkit & tk) alter; 00048 virtual TK_Status write_advanced (BStreamFileToolkit & tk) alter; 00049 virtual TK_Status write_uncompressed_points (BStreamFileToolkit & tk) alter; 00050 virtual TK_Status write_uncompressed_faces (BStreamFileToolkit & tk) alter; 00051 virtual TK_Status write_bounding (BStreamFileToolkit & tk) alter; 00052 TK_Status write_null (BStreamFileToolkit & tk) alter; 00053 00054 00055 00056 00057 00058 virtual TK_Status write_advanced_ascii (BStreamFileToolkit & tk) alter; 00059 virtual TK_Status write_uncompressed_points_ascii (BStreamFileToolkit & tk) alter; 00060 virtual TK_Status write_uncompressed_faces_ascii (BStreamFileToolkit & tk) alter; 00061 virtual TK_Status write_bounding_ascii (BStreamFileToolkit & tk) alter; 00062 TK_Status write_null_ascii (BStreamFileToolkit & tk) alter; 00063 TK_Status compute_advanced_ascii(BStreamFileToolkit & tk) alter ; 00064 00065 00066 protected: 00067 int m_substage; 00068 unsigned char m_compression_scheme; 00069 int m_flistlen; 00070 int *m_flist; 00071 char m_lodlevel; 00110 TK_Status SetFaces( int length, int const *face_list = 0 ) alter; 00112 TK_Status SetLodLevel( int level ) alter { m_lodlevel = (char)level; return TK_Normal; }; 00114 int const *GetFaces() const { return m_flist; }; 00116 int GetFacesLength() const { return m_flistlen; }; 00118 int GetLodLevel() const { return m_lodlevel; }; 00121 TK_Status EnumerateEdges(); 00122 00123 public: 00124 TK_Shell (); 00125 ~TK_Shell (); 00126 00128 void set_flist (int count, int const * list = 0) alter { SetFaces( count, list ); }; 00129 00130 TK_Status Read (BStreamFileToolkit & tk) alter; 00131 TK_Status Write (BStreamFileToolkit & tk) alter; 00132 00133 00134 TK_Status ReadAscii (BStreamFileToolkit & tk) alter; 00135 TK_Status WriteAscii(BStreamFileToolkit & tk) alter; 00136 00137 void Reset () alter; 00138 }; //end declaration of class TK_Shell 00139 00140 00141 00142 /* 00143 * SOME UTILITY MACROS 00144 */ 00145 #define SEMI_PROTECT(x) do {x} while (0) 00146 00147 //warning: implicitly references the BStreamFileToolkit &, tk 00148 #define ENSURE_ALLOCATED(var,type,count) SEMI_PROTECT( \ 00149 delete [] (var); \ 00150 (var) = new type[(count)]; \ 00151 if( (var) == 0 ) \ 00152 return tk.Error(); \ 00153 ) 00154 00155 //warning: implicitly references the BStreamFileToolkit &, tk 00156 #define ENSURE_ALLOCATED_CLEAR(var,type,count) SEMI_PROTECT( \ 00157 delete [] (var); \ 00158 (var) = new type[(count)]; \ 00159 if( (var) == 0 ) \ 00160 return tk.Error(); \ 00161 memset (var, 0, (count) * sizeof(type)); \ 00162 ) 00163 00164 #endif