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 
00034 enum HPDFLayoutImageType
00035 {
00036     HJPG = 0,        
00037     HPNG = 1,    
00038 };
00039 
00040 enum HPDFLayoutVisibility 
00041 {
00042     HUnchanged = 0,        
00043     HVisibile = 1,    
00044     HInvisible = 2,      
00045 };
00046 
00047 
00048 class HPDFField
00049 {
00050 public:
00051     HPDFField()
00052     {
00053         m_text = 0;
00054         m_name = 0;
00055         m_imagename = 0;
00056         m_javascript = 0;
00057         m_visibility = HUnchanged;
00058     }
00059     ~HPDFField()
00060     {
00061         delete [] m_text;
00062         delete [] m_name;
00063         delete [] m_imagename;
00064         delete [] m_javascript;
00065     }
00066 
00067     void Set(const wchar_t *name, const wchar_t *text, const wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged)
00068     {
00069         if (name)
00070         {
00071             m_name = new wchar_t[wcslen(name)+1];
00072             wcscpy(m_name, name);
00073         }
00074     
00075         if (text)
00076         {
00077             m_text = new wchar_t[wcslen(text)+1];
00078             wcscpy(m_text, text);
00079         }
00080         if (javascript)
00081         {
00082             m_javascript = new wchar_t[wcslen(javascript)+1];
00083             wcscpy(m_javascript, javascript);
00084         }
00085         
00086         m_visibility = visibility;
00087     }
00088 
00089     void SetImage(const wchar_t *name,const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight)
00090     {
00091         if (name)
00092         {
00093             m_name = new wchar_t[wcslen(name)+1];
00094             wcscpy(m_name, name);
00095         }
00096 
00097         if (imagename)
00098         {
00099             m_imagename = new wchar_t[wcslen(imagename)+1];
00100             wcscpy(m_imagename,imagename);
00101         }
00102 
00103         m_imagetype = imagetype;
00104         m_imagewidth = imagewidth;
00105         m_imageheight = imageheight;
00106     }
00107 
00108     wchar_t const *GetText() { return m_text; }
00109     wchar_t const *GetImage() { return m_imagename; }
00110     wchar_t const *GetName() { return m_name; }
00111     wchar_t const *GetJavascript() { return m_javascript; }
00112     HPDFLayoutVisibility GetVisibility() { return m_visibility; }
00113     HPDFLayoutImageType GetImageType() { return m_imagetype; }
00114     int GetImageWidth() { return m_imagewidth; }
00115     int GetImageHeight() { return m_imageheight; }
00116 
00117 
00118 
00119 private:
00120 
00121     wchar_t *m_text;
00122     wchar_t *m_imagename;
00123     
00124     wchar_t *m_name;
00125     wchar_t *m_javascript;
00126     HPDFLayoutVisibility m_visibility;
00127     HPDFLayoutImageType m_imagetype;
00128     int m_imagewidth, m_imageheight;
00129 };
00130 
00131 
00135 class HIO_API HPDFLayoutManager
00136 {
00137 public:
00139     HPDFLayoutManager()
00140     {
00141         m_templatefile = 0;
00142         m_3DFieldName = 0;
00143         m_FieldList = new_vlist(malloc,free);
00144 
00145     }
00146 
00148     ~HPDFLayoutManager()
00149     {
00150         START_LIST_ITERATION(HPDFField, m_FieldList);
00151             delete temp;            
00152         END_LIST_ITERATION(m_FieldList);
00153         delete_vlist(m_FieldList);
00154         delete [] m_templatefile;
00155         delete [] m_3DFieldName;
00156     }
00157 
00161     void SetTemplateName(const wchar_t *name)
00162     {
00163         if (name)
00164         {
00165             m_templatefile = new wchar_t[wcslen(name)+1];
00166             wcscpy(m_templatefile, name);
00167         }
00168     }
00172     void Set3DFieldName(const wchar_t *name)
00173     {
00174         if (name)
00175         {
00176             m_3DFieldName = new wchar_t[wcslen(name)+1];
00177             wcscpy(m_3DFieldName, name);
00178         }
00179     }
00180 
00181 
00187     void AddMiscModification(const wchar_t *name, wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged)
00188     {
00189         HPDFField * field = new HPDFField;
00190         field->Set(name, 0, javascript, visibility);
00191         vlist_add_last(m_FieldList, field);
00192     }
00193 
00199     void AddTextModification(const wchar_t *name, const wchar_t *text)
00200     {
00201         HPDFField * field = new HPDFField;
00202         field->Set(name, text, 0, HUnchanged);
00203         vlist_add_last(m_FieldList, field);
00204     }
00205 
00206 
00214     void AddImageModification(const wchar_t *name, const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight)
00215     {
00216         HPDFField * field = new HPDFField;
00217         field->SetImage(name, imagename, imagetype, imagewidth, imageheight);
00218         vlist_add_last(m_FieldList, field);
00219     }
00220 
00221 
00223     vlist_s *GetFieldModificationList()
00224     {
00225         return m_FieldList;
00226     }
00228     wchar_t  *GetTemplateName()
00229     {
00230         return m_templatefile;
00231     }
00233     wchar_t  *Get3DFieldName()
00234     {
00235         return m_3DFieldName;
00236     }
00237 
00238 private:
00239     wchar_t  * m_templatefile;
00240     wchar_t  * m_3DFieldName;
00241     struct vlist_s *        m_FieldList;
00242 
00243 };
00244 
00245 
00246 class HPublishExchangeView;
00247 typedef VArray<HPublishExchangeView *> HPEViewsArray;
00248 
00252 class HIO_API HIOUtilityPublish: public HInputHandler, public HOutputHandler
00253 {
00254 
00255 public:
00256 
00258     HIOUtilityPublish();
00259     virtual ~HIOUtilityPublish() { ReleaseJavascript(); };
00260 
00262     void RegisterInputHandlerTypes();
00265     const char * GetOutputName() { return "HIOUtilityPublish"; }
00266     const char * GetInputName() { return "HIOUtilityPublish"; }
00267 
00269     const char * GetInputTypesString() {return ""; }
00270  
00271         
00272 
00274     HInputHandlerStyle GetInputStyle() {return HInputHandlerStyleModel;};
00275 
00283     HFileInputResult FileInputByKey(const wchar_t * FileName, HC_KEY key, HInputHandlerOptions * options);
00284 
00285     HFileInputResult FileInputByKey(const char * FileName, HC_KEY key, HInputHandlerOptions * options){
00286         return FileInputByKey(H_WCS(FileName).encodedText(), key, options);
00287     };
00288 
00289     HFileInputResult FileInputByKey(const unsigned short * FileName, HC_KEY key, HInputHandlerOptions * options){
00290         H_UTF16 utf16;
00291         utf16.encodedText((utf16_char const*) FileName);
00292         return FileInputByKey(H_WCS(utf16).encodedText(), key, options);
00293     };
00294 
00295     HFileOutputResult FileOutputByKey(const wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options);
00296 
00297     HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){
00298         H_UTF16 utf16;
00299         utf16.encodedText((utf16_char const*) filename);
00300         return FileOutputByKey(H_WCS(utf16).encodedText(), key, options);
00301     }
00302 
00303     HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){
00304         return FileOutputByKey(H_WCS(filename).encodedText(), key, options);
00305     }
00306 
00307     void RegisterOutputHandlerTypes();
00308     
00315     virtual void *BuildPRCModel(HOutputHandlerOptions * options, HC_KEY key);
00316  
00317 
00318     const char *  GetOutputTypesString() {
00319         return "prc;iges;step;x_t;stl";
00320     }
00321 
00322     HOutputHandlerStyle GetOutputStyle() {
00323         return HOutputHandlerStyleModel;
00324     }
00333     virtual HFileIOResult WriteSimplePDF(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, wchar_t const *javascript_file, const HPEViewsArray& hoopsviews);
00341     virtual HFileIOResult WritePDFFromTemplate(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, HPDFLayoutManager * layoutmanager, wchar_t const *javascript_file);   
00342 
00350     char * GenerateJavascript(HBaseView *view);
00354     void ReleaseJavascript();
00355 
00356 private:
00357     char *m_pAnimationData;
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