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 _HIOUTILITYSTL_H 00011 #define _HIOUTILITYSTL_H 00012 00013 00014 #ifdef H_PACK_8 00015 #pragma pack(push) 00016 #pragma pack(8) 00017 #endif 00018 00019 #include "HTools.h" 00020 #include "HIOManager.h" 00021 #include "varray.h" 00022 00023 00028 class MVO_API HIOUtilityStl: public HInputHandler, public HOutputHandler 00029 { 00030 00031 public: 00032 00034 HIOUtilityStl() { 00035 SetInputOps(HInputOpFileInputByKey); 00036 SetOutputOps(HOutputOpFileOutputByKey); 00037 }; 00038 virtual ~HIOUtilityStl() {;}; 00039 00042 const char * GetOutputName() { return "HIOUtilityStl"; } 00043 const char * GetInputName() { return "HIOUtilityStl"; } 00044 00046 void RegisterInputHandlerTypes() { 00047 HIORegisterInputType("stl",this); 00048 }; 00049 00051 void RegisterOutputHandlerTypes() { 00052 HIORegisterOutputType("stl",this); 00053 }; 00054 00056 const char * GetInputTypesString() {return "stl";}; 00057 00059 const char * GetOutputTypesString() {return "stl";}; 00060 00062 HInputHandlerStyle GetInputStyle() {return HInputHandlerStyleModel;}; 00063 00065 HOutputHandlerStyle GetOutputStyle() {return HOutputHandlerStyleModel;}; 00066 00077 HFileInputResult FileInputByKey(const __wchar_t * FileName, HC_KEY key, HInputHandlerOptions * options); 00078 00079 HFileInputResult FileInputByKey(const char * FileName, HC_KEY key, HInputHandlerOptions * options){ 00080 return FileInputByKey(H_WCS(FileName).encodedText(), key, options); 00081 }; 00082 00083 HFileInputResult FileInputByKey(const unsigned short * FileName, HC_KEY key, HInputHandlerOptions * options){ 00084 H_UTF16 utf16; 00085 utf16.encodedText((utf16_char const*) FileName); 00086 return FileInputByKey(H_WCS(utf16).encodedText(), key, options); 00087 }; 00088 00089 00098 HFileOutputResult FileOutputByKey(const __wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options); 00099 00100 HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){ 00101 H_UTF16 utf16; 00102 utf16.encodedText((utf16_char const*) filename); 00103 return FileOutputByKey(H_WCS(utf16).encodedText(), key, options); 00104 } 00105 00106 HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){ 00107 return FileOutputByKey(H_WCS(filename).encodedText(), key, options); 00108 } 00109 00110 private: 00111 00112 static struct stl_info 00113 { 00114 FILE *f; 00115 bool is_ascii; 00116 HC_KEY start_segment; 00117 HC_KEY copy_segment; 00118 int triangle_count; 00119 } stl_info_s; 00120 00121 static struct include_list 00122 { 00123 HC_KEY include; 00124 include_list *next; 00125 } include_list_s; 00126 00127 static HFileInputResult ReadStlFile(const __wchar_t *FileName); 00128 static HFileInputResult ReadStlFileAscii(const __wchar_t *FileName); 00129 static HFileInputResult ReadStlFileBinary(const __wchar_t *FileName); 00130 static HFileOutputResult WriteStlFile(const __wchar_t *FileName, const float *vertices, const float *normals, unsigned int triangle_count, bool is_ascii, char *partname); 00131 static HFileOutputResult WriteStlFileAscii(const __wchar_t *FileName, const float *vertices, const float *normals, unsigned int triangle_count, char *partname); 00132 static HFileOutputResult WriteStlFileBinary(const __wchar_t *FileName, const float *vertices, const float *normals, unsigned int triangle_count); 00133 static HFileOutputResult ComputeStlTriangles(HC_KEY the_key, stl_info *info, HOutputHandlerOptions *options, bool no_recurse=false, float *matrix_for_segment_reference=0 ); 00134 }; 00135 00136 00137 #ifdef H_PACK_8 00138 #pragma pack(pop) 00139 #endif 00140 00141 #endif