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 #if defined(HIO_PUBLISH) && defined(_MSC_VER) 00024 #define HIO_API __declspec (dllexport) 00025 #elif defined(HIO_PUBLISH) && defined(LINUX_SYSTEM) 00026 #define HIO_API __attribute__ ((visibility ("default"))) 00027 #else 00028 #define HIO_API 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