Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HIOManager.h

Go to the documentation of this file.
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 // $Header: /files/homes/master/cvs/hoops_master/hoops_mvo/source/HIOManager.h,v 1.83.2.4 2008-06-06 05:59:33 jason Exp $
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 // forwards
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     /*Constructs an HIOConnector object.*/
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         // DWG import options (try and move them somewhere else)
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