00001 // 00002 // Copyright (c) 2000 by Tech Soft 3D, LLC. 00003 // The information contained herein is confidential and proprietary to 00004 // Tech Soft 3D, LLC., and considered a trade secret as defined under 00005 // civil and criminal statutes. Tech Soft 3D shall pursue its civil 00006 // and criminal remedies in the event of unauthorized use or misappropriation 00007 // of its trade secrets. Use of this information by anyone other than 00008 // authorized employees of Tech Soft 3D, LLC. is granted only under a 00009 // written non-disclosure agreement, expressly prescribing the scope and 00010 // manner of such use. 00011 // 00012 // $Id: 0907fa6162d3cb5c95c726c8ac253de840301a93 $ 00013 // 00014 00015 #ifndef _HIOUTILITYPUBLISH_H 00016 #define _HIOUTILITYPUBLISH_H 00017 00018 #ifdef H_PACK_8 00019 #pragma pack(push) 00020 #pragma pack(8) 00021 #endif 00022 00023 #include "HTools.h" 00024 #include "HIOManager.h" 00025 #include "vlist.h" 00026 #include "varray.h" 00027 00028 #ifdef HIO_PUBLISH 00029 #define HIO_API __declspec (dllexport) 00030 #else 00031 #define HIO_API 00032 #endif 00033 00034 00035 enum HPDFLayoutImageType 00036 { 00037 HJPG = 0, 00038 HPNG = 1, 00039 }; 00040 00041 enum HPDFLayoutVisibility 00042 { 00043 HUnchanged = 0, 00044 HVisibile = 1, 00045 HInvisible = 2, 00046 }; 00047 00048 00049 class HPDFField 00050 { 00051 public: 00052 HPDFField() 00053 { 00054 m_text = 0; 00055 m_name = 0; 00056 m_imagename = 0; 00057 m_javascript = 0; 00058 m_visibility = HUnchanged; 00059 } 00060 ~HPDFField() 00061 { 00062 delete [] m_text; 00063 delete [] m_name; 00064 delete [] m_imagename; 00065 delete [] m_javascript; 00066 } 00067 00068 void Set(const wchar_t *name, const wchar_t *text, const wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged) 00069 { 00070 if (name) 00071 { 00072 m_name = new wchar_t[wcslen(name)+1]; 00073 wcscpy(m_name, name); 00074 } 00075 00076 if (text) 00077 { 00078 m_text = new wchar_t[wcslen(text)+1]; 00079 wcscpy(m_text, text); 00080 } 00081 if (javascript) 00082 { 00083 m_javascript = new wchar_t[wcslen(javascript)+1]; 00084 wcscpy(m_javascript, javascript); 00085 } 00086 00087 m_visibility = visibility; 00088 } 00089 00090 void SetImage(const wchar_t *name,const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight) 00091 { 00092 if (name) 00093 { 00094 m_name = new wchar_t[wcslen(name)+1]; 00095 wcscpy(m_name, name); 00096 } 00097 00098 if (imagename) 00099 { 00100 m_imagename = new wchar_t[wcslen(imagename)+1]; 00101 wcscpy(m_imagename,imagename); 00102 } 00103 00104 m_imagetype = imagetype; 00105 m_imagewidth = imagewidth; 00106 m_imageheight = imageheight; 00107 } 00108 00109 wchar_t const *GetText() { return m_text; } 00110 wchar_t const *GetImage() { return m_imagename; } 00111 wchar_t const *GetName() { return m_name; } 00112 wchar_t const *GetJavascript() { return m_javascript; } 00113 HPDFLayoutVisibility GetVisibility() { return m_visibility; } 00114 HPDFLayoutImageType GetImageType() { return m_imagetype; } 00115 int GetImageWidth() { return m_imagewidth; } 00116 int GetImageHeight() { return m_imageheight; } 00117 00118 00119 00120 private: 00121 00122 wchar_t *m_text; 00123 wchar_t *m_imagename; 00124 00125 wchar_t *m_name; 00126 wchar_t *m_javascript; 00127 HPDFLayoutVisibility m_visibility; 00128 HPDFLayoutImageType m_imagetype; 00129 int m_imagewidth, m_imageheight; 00130 }; 00131 00132 00136 class HIO_API HPDFLayoutManager 00137 { 00138 public: 00140 HPDFLayoutManager() 00141 { 00142 m_templatefile = 0; 00143 m_3DFieldName = 0; 00144 m_FieldList = new_vlist(malloc,free); 00145 00146 } 00147 00149 ~HPDFLayoutManager() 00150 { 00151 START_LIST_ITERATION(HPDFField, m_FieldList); 00152 delete temp; 00153 END_LIST_ITERATION(m_FieldList); 00154 delete_vlist(m_FieldList); 00155 delete [] m_templatefile; 00156 delete [] m_3DFieldName; 00157 } 00158 00162 void SetTemplateName(const wchar_t *name) 00163 { 00164 if (name) 00165 { 00166 m_templatefile = new wchar_t[wcslen(name)+1]; 00167 wcscpy(m_templatefile, name); 00168 } 00169 } 00173 void Set3DFieldName(const wchar_t *name) 00174 { 00175 if (name) 00176 { 00177 m_3DFieldName = new wchar_t[wcslen(name)+1]; 00178 wcscpy(m_3DFieldName, name); 00179 } 00180 } 00181 00182 00188 void AddMiscModification(const wchar_t *name, wchar_t *javascript = 0, HPDFLayoutVisibility visibility = HUnchanged) 00189 { 00190 HPDFField * field = new HPDFField; 00191 field->Set(name, 0, javascript, visibility); 00192 vlist_add_last(m_FieldList, field); 00193 } 00194 00200 void AddTextModification(const wchar_t *name, const wchar_t *text) 00201 { 00202 HPDFField * field = new HPDFField; 00203 field->Set(name, text, 0, HUnchanged); 00204 vlist_add_last(m_FieldList, field); 00205 } 00206 00207 00215 void AddImageModification(const wchar_t *name, const wchar_t *imagename, HPDFLayoutImageType imagetype, int imagewidth, int imageheight) 00216 { 00217 HPDFField * field = new HPDFField; 00218 field->SetImage(name, imagename, imagetype, imagewidth, imageheight); 00219 vlist_add_last(m_FieldList, field); 00220 } 00221 00222 00224 vlist_s *GetFieldModificationList() 00225 { 00226 return m_FieldList; 00227 } 00229 wchar_t *GetTemplateName() 00230 { 00231 return m_templatefile; 00232 } 00234 wchar_t *Get3DFieldName() 00235 { 00236 return m_3DFieldName; 00237 } 00238 00239 private: 00240 wchar_t * m_templatefile; 00241 wchar_t * m_3DFieldName; 00242 struct vlist_s * m_FieldList; 00243 00244 }; 00245 00246 00247 class HPublishExchangeView; 00248 typedef VArray<HPublishExchangeView *> HPEViewsArray; 00249 00253 class HIO_API HIOUtilityPublish: public HInputHandler, public HOutputHandler 00254 { 00255 00256 public: 00257 00259 HIOUtilityPublish(); 00260 virtual ~HIOUtilityPublish() { ReleaseJavascript(); }; 00261 00263 void RegisterInputHandlerTypes(); 00266 const char * GetOutputName() { return "HIOUtilityPublish"; } 00267 const char * GetInputName() { return "HIOUtilityPublish"; } 00268 00270 const char * GetInputTypesString() {return ""; } 00271 00272 00273 00275 HInputHandlerStyle GetInputStyle() {return HInputHandlerStyleModel;}; 00276 00284 HFileInputResult FileInputByKey(const wchar_t * FileName, HC_KEY key, HInputHandlerOptions * options); 00285 00286 HFileInputResult FileInputByKey(const char * FileName, HC_KEY key, HInputHandlerOptions * options){ 00287 return FileInputByKey(H_WCS(FileName).encodedText(), key, options); 00288 }; 00289 00290 HFileInputResult FileInputByKey(const unsigned short * FileName, HC_KEY key, HInputHandlerOptions * options){ 00291 H_UTF16 utf16; 00292 utf16.encodedText((utf16_char const*) FileName); 00293 return FileInputByKey(H_WCS(utf16).encodedText(), key, options); 00294 }; 00295 00296 HFileOutputResult FileOutputByKey(const wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options); 00297 00298 HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){ 00299 H_UTF16 utf16; 00300 utf16.encodedText((utf16_char const*) filename); 00301 return FileOutputByKey(H_WCS(utf16).encodedText(), key, options); 00302 } 00303 00304 HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){ 00305 return FileOutputByKey(H_WCS(filename).encodedText(), key, options); 00306 } 00307 00308 void RegisterOutputHandlerTypes(); 00309 00316 virtual void *BuildPRCModel(HOutputHandlerOptions * options, HC_KEY key); 00317 00318 00319 const char * GetOutputTypesString() { 00320 return "prc;iges;step;x_t;stl"; 00321 } 00322 00323 HOutputHandlerStyle GetOutputStyle() { 00324 return HOutputHandlerStyleModel; 00325 } 00334 virtual void WriteSimplePDF(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, wchar_t const *javascript_file, const HPEViewsArray& hoopsviews); 00342 virtual void WritePDFFromTemplate(wchar_t const * file_name, void *PRCModel, HOutputHandlerOptions * options, HPDFLayoutManager * layoutmanager, wchar_t const *javascript_file); 00343 00351 char * GenerateJavascript(HBaseView *view); 00355 void ReleaseJavascript(); 00356 00357 private: 00358 char *m_pAnimationData; 00359 00360 00361 }; 00362 00363 00364 00365 00366 00370 class HIO_API H3DXOptions 00371 { 00372 public: 00374 H3DXOptions() {Reset();}; 00376 void Reset(){ 00377 m_bSaveToPDF = false; 00378 m_pAsmModelFile = 0; 00379 }; 00380 00381 bool m_bSaveToPDF; 00382 void * m_pAsmModelFile; 00383 }; 00384 00385 00386 00387 00388 #ifdef HIO_PUBLISH 00389 extern "C" { 00390 HIO_API void * CreateInput(HIOManager *manager); 00391 HIO_API void * CreateOutput(HIOManager *manager); 00392 HIO_API void * CreateConnector(void * unused); 00393 HIO_API void Free(HIOUtilityPublish *); 00394 } 00395 00396 00397 #endif 00398 00399 #ifdef H_PACK_8 00400 #pragma pack(pop) 00401 #endif 00402 00403 #endif