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