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 00365 00369 class HIO_API H3DXOptions 00370 { 00371 public: 00373 H3DXOptions() {Reset();}; 00375 void Reset(){ 00376 m_bSaveToPDF = false; 00377 m_pAsmModelFile = 0; 00378 }; 00379 00380 bool m_bSaveToPDF; 00381 void * m_pAsmModelFile; 00382 }; 00383 00384 00385 00386 00387 #ifdef HIO_PUBLISH 00388 extern "C" { 00389 HIO_API void * CreateInput(HIOManager *manager); 00390 HIO_API void * CreateOutput(HIOManager *manager); 00391 HIO_API void * CreateConnector(void * unused); 00392 HIO_API void Free(HIOUtilityPublish *); 00393 } 00394 00395 00396 #endif 00397 00398 #ifdef H_PACK_8 00399 #pragma pack(pop) 00400 #endif 00401 00402 #endif