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