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