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