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