Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HIOUtilityPublish.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 _HIOUTILITYPUBLISH_H
00011 #define _HIOUTILITYPUBLISH_H
00012 
00013 #ifdef H_PACK_8
00014 #pragma pack(push)
00015 #pragma pack(8)
00016 #endif
00017 
00018 #include "HTools.h"
00019 #include "HIOManager.h"
00020 #include "vlist.h"
00021 #include "varray.h"
00022 
00023 #ifdef HIO_PUBLISH
00024 #  ifdef _MSC_VER
00025 #    define HIO_API __declspec (dllexport)
00026 #  else
00027 #    define HIO_API
00028 #  endif
00029 #endif
00030 
00031 
00032 enum HPDFLayoutImageType
00033 {
00034     HJPG = 0,        
00035     HPNG = 1,    
00036 };
00037 
00038 enum HPDFLayoutVisibility 
00039 {
00040     HUnchanged = 0,        
00041     HVisibile = 1,    
00042     HInvisible = 2,      
00043 };
00044 
00045 
00046 class HPDFField
00047 {
00048 public:
00049     HPDFField()
00050     {
00051         m_text = 0;
00052         m_name = 0;
00053         m_imagename = 0;
00054         m_javascript = 0;
00055         m_visibility = HUnchanged;
00056     }
00057     ~HPDFField()
00058     {
00059         delete [] m_text;
00060         delete [] m_name;
00061         delete [] m_imagename;
00062         delete [] m_javascript;
00063     }
00064 
00065     void Set(const wchar_t *name, const wchar_t *text, const wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged)
00066     {
00067         if (name)
00068         {
00069             m_name = new wchar_t[wcslen(name)+1];
00070             wcscpy(m_name, name);
00071         }
00072     
00073         if (text)
00074         {
00075             m_text = new wchar_t[wcslen(text)+1];
00076             wcscpy(m_text, text);
00077         }
00078         if (javascript)
00079         {
00080             m_javascript = new wchar_t[wcslen(javascript)+1];
00081             wcscpy(m_javascript, javascript);
00082         }
00083         
00084         m_visibility = visibility;
00085     }
00086 
00087     void SetImage(const wchar_t *name,const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight)
00088     {
00089         if (name)
00090         {
00091             m_name = new wchar_t[wcslen(name)+1];
00092             wcscpy(m_name, name);
00093         }
00094 
00095         if (imagename)
00096         {
00097             m_imagename = new wchar_t[wcslen(imagename)+1];
00098             wcscpy(m_imagename,imagename);
00099         }
00100 
00101         m_imagetype = imagetype;
00102         m_imagewidth = imagewidth;
00103         m_imageheight = imageheight;
00104     }
00105 
00106     wchar_t const *GetText() { return m_text; }
00107     wchar_t const *GetImage() { return m_imagename; }
00108     wchar_t const *GetName() { return m_name; }
00109     wchar_t const *GetJavascript() { return m_javascript; }
00110     HPDFLayoutVisibility GetVisibility() { return m_visibility; }
00111     HPDFLayoutImageType GetImageType() { return m_imagetype; }
00112     int GetImageWidth() { return m_imagewidth; }
00113     int GetImageHeight() { return m_imageheight; }
00114 
00115 
00116 
00117 private:
00118 
00119     wchar_t *m_text;
00120     wchar_t *m_imagename;
00121     
00122     wchar_t *m_name;
00123     wchar_t *m_javascript;
00124     HPDFLayoutVisibility m_visibility;
00125     HPDFLayoutImageType m_imagetype;
00126     int m_imagewidth, m_imageheight;
00127 };
00128 
00129 
00133 class HIO_API HPDFLayoutManager
00134 {
00135 public:
00137     HPDFLayoutManager()
00138     {
00139         m_templatefile = 0;
00140         m_3DFieldName = 0;
00141         m_FieldList = new_vlist(malloc,free);
00142 
00143     }
00144 
00146     ~HPDFLayoutManager()
00147     {
00148         START_LIST_ITERATION(HPDFField, m_FieldList);
00149             delete temp;            
00150         END_LIST_ITERATION(m_FieldList);
00151         delete_vlist(m_FieldList);
00152         delete [] m_templatefile;
00153         delete [] m_3DFieldName;
00154     }
00155 
00159     void SetTemplateName(const wchar_t *name)
00160     {
00161         if (name)
00162         {
00163             m_templatefile = new wchar_t[wcslen(name)+1];
00164             wcscpy(m_templatefile, name);
00165         }
00166     }
00170     void Set3DFieldName(const wchar_t *name)
00171     {
00172         if (name)
00173         {
00174             m_3DFieldName = new wchar_t[wcslen(name)+1];
00175             wcscpy(m_3DFieldName, name);
00176         }
00177     }
00178 
00179 
00185     void AddMiscModification(const wchar_t *name, wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged)
00186     {
00187         HPDFField * field = new HPDFField;
00188         field->Set(name, 0, javascript, visibility);
00189         vlist_add_last(m_FieldList, field);
00190     }
00191 
00197     void AddTextModification(const wchar_t *name, const wchar_t *text)
00198     {
00199         HPDFField * field = new HPDFField;
00200         field->Set(name, text, 0, HUnchanged);
00201         vlist_add_last(m_FieldList, field);
00202     }
00203 
00204 
00212     void AddImageModification(const wchar_t *name, const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight)
00213     {
00214         HPDFField * field = new HPDFField;
00215         field->SetImage(name, imagename, imagetype, imagewidth, imageheight);
00216         vlist_add_last(m_FieldList, field);
00217     }
00218 
00219 
00221     vlist_s *GetFieldModificationList()
00222     {
00223         return m_FieldList;
00224     }
00226     wchar_t  *GetTemplateName()
00227     {
00228         return m_templatefile;
00229     }
00231     wchar_t  *Get3DFieldName()
00232     {
00233         return m_3DFieldName;
00234     }
00235 
00236 private:
00237     wchar_t  * m_templatefile;
00238     wchar_t  * m_3DFieldName;
00239     struct vlist_s *        m_FieldList;
00240 
00241 };
00242 
00243 
00244 class HPublishExchangeView;
00245 typedef VArray<HPublishExchangeView *> HPEViewsArray;
00246 
00250 class HIO_API HIOUtilityPublish: public HInputHandler, public HOutputHandler
00251 {
00252 
00253 public:
00254 
00256     HIOUtilityPublish();
00257     virtual ~HIOUtilityPublish() { ReleaseJavascript(); };
00258 
00260     void RegisterInputHandlerTypes();
00263     const char * GetOutputName() { return "HIOUtilityPublish"; }
00264     const char * GetInputName() { return "HIOUtilityPublish"; }
00265 
00267     const char * GetInputTypesString() {return ""; }
00268  
00269         
00270 
00272     HInputHandlerStyle GetInputStyle() {return HInputHandlerStyleModel;};
00273 
00281     HFileInputResult FileInputByKey(const wchar_t * FileName, HC_KEY key, HInputHandlerOptions * options);
00282 
00283     HFileInputResult FileInputByKey(const char * FileName, HC_KEY key, HInputHandlerOptions * options){
00284         return FileInputByKey(H_WCS(FileName).encodedText(), key, options);
00285     };
00286 
00287     HFileInputResult FileInputByKey(const unsigned short * FileName, HC_KEY key, HInputHandlerOptions * options){
00288         H_UTF16 utf16;
00289         utf16.encodedText((utf16_char const*) FileName);
00290         return FileInputByKey(H_WCS(utf16).encodedText(), key, options);
00291     };
00292 
00293     HFileOutputResult FileOutputByKey(const wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options);
00294 
00295     HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){
00296         H_UTF16 utf16;
00297         utf16.encodedText((utf16_char const*) filename);
00298         return FileOutputByKey(H_WCS(utf16).encodedText(), key, options);
00299     }
00300 
00301     HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){
00302         return FileOutputByKey(H_WCS(filename).encodedText(), key, options);
00303     }
00304 
00305     void RegisterOutputHandlerTypes();
00306     
00313     virtual void *BuildPRCModel(HOutputHandlerOptions * options, HC_KEY key);
00314  
00315 
00316     const char *  GetOutputTypesString() {
00317         return "prc;iges;step;x_t;stl";
00318     }
00319 
00320     HOutputHandlerStyle GetOutputStyle() {
00321         return HOutputHandlerStyleModel;
00322     }
00331     virtual HFileIOResult WriteSimplePDF(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, wchar_t const *javascript_file, const HPEViewsArray& hoopsviews);
00339     virtual HFileIOResult WritePDFFromTemplate(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, HPDFLayoutManager * layoutmanager, wchar_t const *javascript_file);   
00340 
00348     char * GenerateJavascript(HBaseView *view);
00352     void ReleaseJavascript();
00353 
00354 private:
00355     char *m_pAnimationData;
00356 
00357 
00358 };
00359 
00360 
00361 
00362 
00363 
00367 class HIO_API H3DXOptions
00368 {
00369 public:
00371     H3DXOptions() {Reset();};
00373     void Reset(){
00374         m_bSaveToPDF = false;
00375         m_pAsmModelFile = 0;
00376     };
00377 
00378     bool    m_bSaveToPDF;
00379     void *  m_pAsmModelFile;
00380 };
00381 
00382 
00383 
00384 
00385 #ifdef HIO_PUBLISH
00386 extern "C" {
00387     HIO_API void * CreateInput(HIOManager *manager);
00388     HIO_API void * CreateOutput(HIOManager *manager);
00389     HIO_API void * CreateConnector(void * unused);
00390     HIO_API void Free(HIOUtilityPublish *);
00391  }
00392 
00393 
00394 #endif
00395 
00396 #ifdef H_PACK_8
00397 #pragma pack(pop)
00398 #endif
00399 
00400 #endif