Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HIOUtilityStl.h
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