00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00021 #ifndef _H_HIO_MANAGER_H
00022 #define _H_HIO_MANAGER_H
00023
00024 #ifdef H_PACK_8
00025 #pragma pack(push)
00026 #pragma pack(8)
00027 #endif
00028
00029 #include "HTools.h"
00030
00031
00032 enum HFileOutputResult;
00033 class HPDFOptions;
00034 class HBaseView;
00035 class HCamera;
00036 class HBaseModel;
00037 struct vlist_s;
00038
00039
00043 #define HInputOpNone (1UL<<0)
00044
00048 #define HInputOpFileInputByKey (1UL<<1)
00049
00053 #define HInputOpFileInputToImageKey (1UL<<2)
00054
00058 #define HOutputOpNone (1UL<<0)
00059
00063 #define HOutputOpFileOutputByKey (1UL<<1)
00064
00068 #define HOutputOpFileOutputFromImageKey (1UL<<2)
00069
00070
00075 #define HIORegisterInputType(type,input_object) do {HIOManager::GetCurrentHIOManager()->RegisterInputHandler(type, input_object); }while(0);
00076
00077
00078
00080 #define HIORegisterOutputType(type,output_object) do { HIOManager::GetCurrentHIOManager()->RegisterOutputHandler(type, output_object); }while(0);
00081
00082
00083
00084
00089 class MVO_API HIONoticeCallback
00090 {
00091 public:
00092 virtual ~HIONoticeCallback() {;};
00097 virtual void Notice(const char * notice) =0;
00098 };
00099
00103 class MVO_API HIOPercentNoticeCallback
00104 {
00105 public:
00106 virtual ~HIOPercentNoticeCallback() {;};
00111 virtual void Notice(float notice) =0;
00112 };
00113
00114
00115
00118 typedef void * (*HIO_CREATE_FREE_FUNCTION)(void *);
00119
00122 typedef void (*HIO_FREE_CONNECTOR_FUNCTION)(void *);
00123
00129 class MVO_API HIOConnector
00130 {
00131 public:
00132
00133
00134 HIOConnector();
00135 virtual ~HIOConnector();
00136
00144 virtual HC_KEY GetHoopsEntity(void * pKernelEntity);
00145
00153 virtual void * GetKernelEntity(HC_KEY key);
00154
00161 virtual bool GetHoopsEntities(void * pKernelEntity, vlist_s *ret_HoopsKeysList);
00162
00169 virtual bool GetKernelEntities(HC_KEY key, vlist_s *ret_KernelEntitiesList);
00170
00176 virtual void AddConnection(HC_KEY key, void* pKernelEntity);
00177
00178
00185 virtual void OptimizeTree(const char * segname, const char * option_string);
00186
00187 protected:
00188
00190 struct vhash_s *mhash_Hoops2Kernel;
00191
00193 struct vhash_s *mhash_Kernel2Hoops;
00194
00195 };
00196
00201 enum HInputHandlerStyle {
00202 HInputHandlerStyleModel,
00203 HInputHandlerStyleImage
00204 };
00205
00211 class MVO_API HInputHandlerOptions
00212 {
00213 public:
00214
00216 HInputHandlerOptions() {
00217 m_pHBaseView=0;
00218 m_pImageName=0;
00219 m_pImageFormat=0;
00220 m_pConnector=0;
00221 m_pExtendedData=0;
00222 m_bLocal = false;
00223
00224
00225 m_bInputViaHSF = false;
00226 m_Deviation = 10.0;
00227 m_bImportMetadata = false;
00228 m_bMergeEntityShells = true;
00229 m_bImportWireframeForBrep = false;
00230 m_numIsolines = 0;
00231 m_listRegAppNames = 0;
00232 m_listEntityType=0;
00233 m_bForceReimport = false;
00234 m_listDWGLayouts = 0;
00235 };
00236
00239 HInputHandlerOptions(HInputHandlerOptions const *o) {
00240 m_pHBaseView = o->m_pHBaseView;
00241 m_pImageName = o->m_pImageName;
00242 m_pImageFormat = o->m_pImageFormat;
00243 m_pConnector = o->m_pConnector;
00244 m_pExtendedData = o->m_pExtendedData;
00245 m_bLocal = o->m_bLocal;
00246 m_bInputViaHSF = o->m_bInputViaHSF;
00247 m_Deviation = o->m_Deviation;
00248 m_bImportMetadata = o->m_bImportMetadata;
00249 m_bMergeEntityShells = o->m_bMergeEntityShells;
00250 m_bImportWireframeForBrep = o->m_bImportWireframeForBrep;
00251 m_numIsolines = o->m_numIsolines;
00252 m_listRegAppNames = o->m_listRegAppNames;
00253 m_listEntityType=o->m_listEntityType;
00254 m_bForceReimport = o->m_bForceReimport;
00255 m_listDWGLayouts = o->m_listDWGLayouts;
00256 };
00257
00260 HInputHandlerOptions(const HInputHandlerOptions &o) {
00261 m_pHBaseView = o.m_pHBaseView;
00262 m_pImageName = o.m_pImageName;
00263 m_pImageFormat = o.m_pImageFormat;
00264 m_pConnector = o.m_pConnector;
00265 m_pExtendedData = o.m_pExtendedData;
00266 m_bLocal = o.m_bLocal;
00267 m_bInputViaHSF = o.m_bInputViaHSF;
00268 m_Deviation = o.m_Deviation;
00269 m_bImportMetadata = o.m_bImportMetadata;
00270 m_bMergeEntityShells = o.m_bMergeEntityShells;
00271 m_bImportWireframeForBrep = o.m_bImportWireframeForBrep;
00272 m_numIsolines = o.m_numIsolines;
00273 m_listRegAppNames = o.m_listRegAppNames;
00274 m_listEntityType=o.m_listEntityType;
00275 m_bForceReimport = o.m_bForceReimport;
00276 m_listDWGLayouts = o.m_listDWGLayouts;
00277 };
00278
00279 virtual ~HInputHandlerOptions() {;};
00280
00282 HBaseView * m_pHBaseView;
00283
00285 const char * m_pImageName;
00286
00288 const char * m_pImageFormat;
00289
00291 bool m_bLocal;
00292
00294 HIOConnector * m_pConnector;
00295
00297 void * m_pExtendedData;
00298
00300 bool m_bInputViaHSF;
00301
00303 double m_Deviation;
00304
00306 bool m_bImportMetadata;
00307
00311 struct vlist_s * m_listRegAppNames;
00312
00314 struct vlist_s * m_listEntityType;
00315
00316
00320 bool m_bMergeEntityShells;
00321
00323 bool m_bImportWireframeForBrep;
00324
00326 double m_numIsolines;
00327
00329 bool m_bForceReimport;
00330
00332 struct vlist_s * m_listDWGLayouts;
00333
00334 };
00335
00336
00337
00339
00345 class MVO_API HInputHandler
00346 {
00347
00348 public:
00356 HInputHandler();
00357 virtual ~HInputHandler();
00358
00363 unsigned long GetInputOps() {return m_InputOps;};
00364
00371 virtual void RegisterInputHandlerTypes() = 0;
00372
00379 virtual HInputHandlerStyle GetInputStyle() = 0;
00380
00388 virtual HFileInputResult FileInputByKey(const char * filename, HC_KEY key, HInputHandlerOptions * options){return InputNotHandled;};
00389
00398 virtual HFileInputResult FileInputByKey(const unsigned short * filename, HC_KEY key, HInputHandlerOptions * options);
00399
00410 virtual HFileInputResult FileInputToImageKey(const char * filename, HC_KEY *image_key, HC_KEY segment_key, HInputHandlerOptions * options){return InputNotHandled;};
00411
00412
00422 virtual HFileInputResult FileInputToImageKey(const unsigned short * filename, HC_KEY *image_key, HC_KEY segment_key, HInputHandlerOptions * options);
00423
00436 virtual const char * GetInputTypesString() = 0;
00437
00441 const char * GetInputProgress();
00442
00446 float GetInputPercentProgress();
00447
00451 const char * GetInputInformation();
00452
00459 HIONoticeCallback * SetInputProgressNoticeCallback(HIONoticeCallback *notice_callback);
00460
00461
00468 HIOPercentNoticeCallback * SetInputPercentProgressNoticeCallback(HIOPercentNoticeCallback *percent_notice_callback);
00469
00476 HIONoticeCallback * SetInputInformationNoticeCallback(HIONoticeCallback *notice_callback);
00477
00479 void ReportInputProgress(const char * progress);
00480
00482 void ReportInputPercentProgress(float percent_progress);
00483
00485 void ReportInputInformation(const char * information);
00486
00487 protected:
00488
00492 void SetStartingInput(const char *filename = 0);
00493
00497 void SetFinishedInput();
00498
00500 void SetInputOps(unsigned long ops) {m_InputOps=ops;};
00501
00503 unsigned long m_InputOps;
00504
00505 private:
00506 char *m_progress;
00507 float m_percent_progress;
00508 char *m_information;
00509 struct vlist_s *m_information_list;
00510 HIONoticeCallback *m_progress_callback;
00511 HIONoticeCallback *m_information_callback;
00512 HIOPercentNoticeCallback *m_percent_progress_callback;
00513 };
00514
00518 enum HOutputHandlerStyle
00519 {
00520 HOutputHandlerStyleModel,
00521 HOutputHandlerStyleImage,
00522 HOutputHandlerStyleHardcopy,
00523 HOutputHandlerStyleHTML,
00524 HOutputHandlerStyleDontCare
00525 };
00526
00532 class MVO_API HOutputHandlerOptions
00533 {
00534 public:
00536 HOutputHandlerOptions() {
00537 m_Key = INVALID_KEY;
00538 m_pHBaseView = 0;
00539 m_pHBaseModel = 0;
00540 m_pCamera = 0;
00541 m_pExtendedData = 0;
00542 m_pHSRAOptions = 0;
00543 m_pWindowColor = 0;
00544 m_Window_Width = 0;
00545 m_Window_Height = 0;
00546 m_Paper_Width = 8.5;
00547 m_Paper_Height = 11;
00548 m_Image_Dpi = 100;
00549 m_Paper_Dpi = 300;
00550 m_Version = 0;
00551 m_bUseWindowColor = false;
00552 m_ForceGrayscale = false;
00553 m_bFastPrint = false;
00554 m_bConserveMemory = false;
00555 m_bUseSubscreen = true;
00556 m_bWindowFrame = false;
00557 m_b3dOutput = false;
00558 m_bAscii = false;
00559 m_bWriteAnimations = false;
00560 };
00561
00565 HOutputHandlerOptions(HOutputHandlerOptions const *o) {
00566 Init(o);
00567 };
00568
00572 HOutputHandlerOptions(const HOutputHandlerOptions &o) {
00573 Init(&o);
00574 };
00575
00576
00577 virtual ~HOutputHandlerOptions() {;};
00578
00582 void Init(HOutputHandlerOptions const *o)
00583 {
00584 m_pHBaseView = o->m_pHBaseView;
00585 m_pHBaseModel = o->m_pHBaseModel;
00586 m_pCamera = o->m_pCamera;
00587 m_Key = INVALID_KEY;
00588 m_pHSRAOptions = o->m_pHSRAOptions;
00589 m_bUseWindowColor = o->m_bUseWindowColor;
00590 m_pWindowColor = o->m_pWindowColor;
00591 m_Window_Width = o->m_Window_Width;
00592 m_Window_Height = o->m_Window_Height;
00593 m_Paper_Width = o->m_Paper_Width;
00594 m_Paper_Height = o->m_Paper_Height;
00595 m_ForceGrayscale = o->m_ForceGrayscale;
00596 m_bFastPrint = o->m_bFastPrint;
00597 m_bConserveMemory = o->m_bConserveMemory;
00598 m_Image_Dpi = o->m_Image_Dpi;
00599 m_Paper_Dpi = o->m_Paper_Dpi;
00600 m_pExtendedData = o->m_pExtendedData;
00601 m_Version = o->m_Version;
00602 m_bUseSubscreen = o->m_bUseSubscreen;
00603 m_bWindowFrame = o->m_bWindowFrame;
00604 m_b3dOutput = o->m_b3dOutput;
00605 m_bWriteAnimations = o->m_bWriteAnimations;
00606 }
00607
00609 HBaseView * m_pHBaseView;
00610 HBaseView * const View() const {return m_pHBaseView;};
00611 void View(HBaseView * const v) {m_pHBaseView = v;};
00612
00614 HBaseModel * m_pHBaseModel;
00615 HBaseModel * const Model() const {return m_pHBaseModel;};
00616 void Model(HBaseModel * const m) {m_pHBaseModel = m;};
00617
00619 HCamera * m_pCamera;
00620 HCamera * const Camera() const {return m_pCamera;};
00621 void Camera(HCamera * const c) {m_pCamera = c;};
00622
00624 HC_KEY m_Key;
00625 HC_KEY const Key() const {return m_Key;};
00626 void Key(HC_KEY const k) {m_Key = k;};
00627
00629 char const * m_pHSRAOptions;
00630 char const * const HSRAOptions() const {return m_pHSRAOptions;};
00631 void HSRAOptions(char const * const tf) {m_pHSRAOptions = tf;};
00632
00634 HPoint const * m_pWindowColor;
00635 HPoint const * const WindowColor() const {return m_pWindowColor;};
00636 void WindowColor(HPoint const * const tf) {m_pWindowColor = tf;};
00637
00639 bool m_bUseWindowColor;
00640 bool const UseWindowColor() const {return m_bUseWindowColor;};
00641 void UseWindowColor(bool const tf) {m_bUseWindowColor = tf;};
00642
00644 float m_Window_Width;
00645 float const WindowWidth() const {return m_Window_Width;};
00646 void WindowWidth(float const f) {m_Window_Width = f;};
00647
00649 float m_Window_Height;
00650 float const WindowHeight() const {return m_Window_Height;};
00651 void WindowHeight(float const f) {m_Window_Height = f;};
00652
00654 float m_Paper_Width;
00655 float const PaperWidth() const {return m_Paper_Width;};
00656 void PaperWidth(float const f) {m_Paper_Width = f;};
00657
00659 float m_Paper_Height;
00660 float const PaperHeight() const {return m_Paper_Height;};
00661 void PaperHeight(float const f) {m_Paper_Height = f;};
00662
00664 bool m_ForceGrayscale;
00665 bool const ForceGrayscale() const {return m_ForceGrayscale;};
00666 void ForceGrayscale(bool const tf) {m_ForceGrayscale = tf;};
00667
00669 bool m_bFastPrint;
00670 bool const FastPrint() const {return m_bFastPrint;};
00671 void FastPrint(bool const tf) {m_bFastPrint = tf;};
00672
00674 bool m_bConserveMemory;
00675 bool const ConserveMemory() const {return m_bConserveMemory;};
00676 void ConserveMemory(bool const tf) {m_bConserveMemory = tf;};
00677
00678 bool m_bWriteAnimations;
00679 bool const WriteAnimations() const {return m_bWriteAnimations;};
00680 void WriteAnimations(bool const tf) {m_bWriteAnimations = tf;};
00681
00683 bool m_bWindowFrame;
00684 bool const WindowFrame() const {return m_bWindowFrame;};
00685 void WindowFrame(bool const tf) {m_bWindowFrame = tf;};
00686
00688 bool m_bUseSubscreen;
00689 bool const UseSubscreen() const {return m_bUseSubscreen;};
00690 void UseSubscreen(bool const tf) {m_bUseSubscreen = tf;};
00691
00693 int m_Image_Dpi;
00694 int const ImageDpi() const {return m_Image_Dpi;};
00695 void ImageDpi(int const dpi) {m_Image_Dpi = dpi;};
00696
00698 int m_Paper_Dpi;
00699 int const PaperDpi() const {return m_Paper_Dpi;};
00700 void PaperDpi(int const dpi) {m_Paper_Dpi = dpi;};
00701
00703 void * m_pExtendedData;
00704 void * const ExtendedData() const {return m_pExtendedData;};
00705 void ExtendedData(void * const vp) {m_pExtendedData = vp;};
00706 void ExtendedData(HPDFOptions * const vp) {m_pExtendedData = (void*)vp;};
00707
00708
00710 int m_Version;
00711 int const Version() const {return m_Version;};
00712 void Version(int const v) {m_Version = v;};
00713
00715 int m_OutputType;
00716 int const OutputType() const {return m_OutputType;};
00717 void OutputType(int const ot) {m_OutputType = ot;};
00718
00720 bool m_b3dOutput;
00721 bool const Output3d() const {return m_b3dOutput;};
00722 void Output3d(bool const tf) {m_b3dOutput = tf;};
00723
00725 bool m_bAscii;
00726 bool const Ascii() const {return m_bAscii;};
00727 void Ascii(bool const tf) {m_bAscii = tf;};
00728 };
00729
00730
00732
00738 class MVO_API HOutputHandler
00739 {
00740
00741 public:
00749 HOutputHandler();
00750 virtual ~HOutputHandler();
00751
00756 unsigned long GetOutputOps() {return m_OutputOps;};
00757
00768 virtual void RegisterOutputHandlerTypes() = 0;
00769
00770
00778 virtual HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options){return OutputNotHandled;};
00779
00787 virtual HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options){return OutputNotHandled;};
00788
00789
00798 virtual HFileOutputResult FileOutputFromImageKey(const char * filename, HC_KEY image_key, HOutputHandlerOptions * options){return OutputNotHandled;};
00799
00810 virtual const char * GetOutputTypesString() = 0;
00811
00820 virtual HOutputHandlerStyle GetOutputStyle() = 0;
00821
00828 virtual const char * GetOutputDefaultHSRA() {return 0;};
00829
00833 const char * GetOutputProgress();
00834
00838 float GetOutputPercentProgress();
00839
00843 const char * GetOutputInformation();
00844
00851 HIONoticeCallback * SetOutputProgressNoticeCallback(HIONoticeCallback *notice_callback);
00852
00853
00860 HIOPercentNoticeCallback * SetOutputPercentProgressNoticeCallback(HIOPercentNoticeCallback *percent_notice_callback);
00861
00868 HIONoticeCallback * SetOutputInformationNoticeCallback(HIONoticeCallback *notice_callback);
00869
00871 void ReportOutputProgress(const char * progress);
00872
00874 void ReportOutputPercentProgress(float percent_progress);
00875
00877 void ReportOutputInformation(const char * information);
00878
00879 protected:
00880
00884 void SetStartingOutput();
00885
00889 void SetFinishedOutput();
00890
00892 void SetOutputOps(unsigned long ops) {m_OutputOps=ops;};
00894 unsigned long m_OutputOps;
00895
00896 private:
00897 char *m_progress;
00898 float m_percent_progress;
00899 char *m_information;
00900 struct vlist_s *m_information_list;
00901 HIONoticeCallback *m_progress_callback;
00902 HIOPercentNoticeCallback *m_percent_progress_callback;
00903 HIONoticeCallback *m_information_callback;
00904 };
00905
00911 class MVO_API HIOManager
00912 {
00913
00914 public:
00915
00916 HIOManager();
00917 virtual ~HIOManager();
00918
00928 virtual HInputHandler * RegisterInputHandler(const char * file_type, HInputHandler * handler);
00929
00938 virtual HOutputHandler * RegisterOutputHandler(const char * file_type, HOutputHandler * handler);
00939
00950 virtual HIOConnector * RegisterConnector(const char * file_type, HIO_CREATE_FREE_FUNCTION Create, HIO_FREE_CONNECTOR_FUNCTION Free);
00951
00956 virtual HInputHandler * GetInputHandler(const char * file_type);
00957
00962 virtual HOutputHandler * GetOutputHandler(const char * file_type);
00963
00968 virtual void RegisterHandlers();
00969
00974 virtual const char * GetInputHandlerTypes();
00975
00980 virtual const char * GetOutputHandlerTypes();
00981
00982
00989 virtual HIOConnector * CreateConnector(const char * file_type);
00990
00995 virtual void FreeConnector(HIOConnector * old_connector);
00996
00997
01002 static HIOManager *GetCurrentHIOManager();
01003
01009 static void GetFileOutputResultString(HFileOutputResult result, char *result_str);
01010
01011 protected:
01012
01014 struct vhash_s * input_handlers;
01015
01017 struct vhash_s * output_handlers;
01018
01020 struct vhash_s * connector_procs;
01021
01023 struct vlist_s * owned_input_handlers;
01024
01026 struct vlist_s * owned_output_handlers;
01027
01029 struct vlist_s * loaded_input_handlers;
01030
01032 struct vlist_s * loaded_output_handlers;
01033
01035 struct vhash_s * created_connectors;
01036
01037 char * m_input_types;
01038 int m_input_types_allocated;
01039
01040 char * m_output_types;
01041 int m_output_types_allocated;
01042 };
01043
01044
01045
01046
01047 #ifdef H_PACK_8
01048 #pragma pack(pop)
01049 #endif
01050
01051 #endif
01052
01053
01054
01055
01056
01057
01058
01059