Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HIOManager.h
Go to the documentation of this file.
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 
00016 #ifndef _HIOMANAGER_H
00017 #define _HIOMANAGER_H
00018 
00019 #ifdef H_PACK_8
00020 #pragma pack(push)
00021 #pragma pack(8)
00022 #endif
00023 
00024 #include "HTools.h"
00025 
00026 
00027 // forwards
00028 enum HFileOutputResult;
00029 class HPDFOptions;
00030 class HBaseView;
00031 class HCamera;
00032 class HBaseModel;
00033 struct vlist_s;
00034 class HStreamFileToolkit;
00035 class HBhvBehaviorManager;
00036 class BREP_Topology;
00037 
00038 enum H_OUTPUT_TYPE
00039 {
00040     H_OUTPUT_TYPE_DEFAULT = 0,
00041     H_PDF_OUTPUT_PORTFOLIO,
00042     H_PDF_OUTPUT_3D,
00043     H_PDF_OUTPUT_2D,
00044     H_SINGLE_PASS_ZSORT,
00045     H_SINGLE_PASS_NO_HIDDEN_SURFACES
00046 };
00047 
00048 
00052 #define HInputOpNone                    (1UL<<0)
00053 
00057 #define HInputOpFileInputByKey          (1UL<<1)
00058 
00062 #define HInputOpFileInputToImageKey     (1UL<<2)
00063 
00067 #define HOutputOpNone                   (1UL<<0)
00068 
00072 #define HOutputOpFileOutputByKey        (1UL<<1)
00073 
00077 #define HOutputOpFileOutputFromImageKey (1UL<<2)
00078 
00079 
00084 #define HIORegisterInputType(type,input_object) HIOManager::GetCurrentHIOManager()->RegisterInputHandler(type, input_object);
00085 
00086 
00087 
00089 #define HIORegisterOutputType(type,output_object) HIOManager::GetCurrentHIOManager()->RegisterOutputHandler(type, output_object);
00090 
00091 
00092 
00093 
00098 class MVO_API HIONoticeCallback
00099 {
00100 public:
00101 
00102     virtual ~HIONoticeCallback() {}
00107     virtual void Notice(const char * notice) = 0;
00108     virtual void Notice(const __wchar_t * notice) {
00109         UNREFERENCED(notice);
00110     }
00111 #ifdef H_USHORT_OVERLOAD
00112     virtual void Notice(const unsigned short * notice) {
00113         Notice((__wchar_t const *) notice);
00114     }
00115 #endif
00116 };
00117 
00121 class MVO_API HIOPercentNoticeCallback
00122 {
00123 public:
00124     virtual ~HIOPercentNoticeCallback();
00129     virtual void Notice(float notice) =0;
00130 };
00131 
00132 
00133 
00136 typedef void * (*HIO_CREATE_FREE_FUNCTION)(void *);
00137 
00140 typedef void (*HIO_FREE_CONNECTOR_FUNCTION)(void *);
00141 
00147 class MVO_API HIOConnector
00148 {
00149 public:
00150 
00151     /*Constructs an HIOConnector object.*/
00152     HIOConnector();
00153     virtual ~HIOConnector();
00154 
00162     virtual HC_KEY GetHoopsEntity(void * pKernelEntity);
00163     virtual HC_KEY GetHoopsEntity(void * pKernelEntity, HC_KEY modelKey);
00164 
00172     virtual void * GetKernelEntity(HC_KEY key);
00173     virtual void * GetKernelEntity(HC_KEY key, HC_KEY modelKey);
00174 
00181     virtual bool GetHoopsEntities(void * pKernelEntity, vlist_s *ret_HoopsKeysList);
00182     virtual bool GetHoopsEntities(void * pKernelEntity, vlist_s *ret_HoopsKeysList, HC_KEY modelKey);
00183 
00190     virtual bool GetKernelEntities(HC_KEY key, vlist_s *ret_KernelEntitiesList);
00191     virtual bool GetKernelEntities(HC_KEY key, vlist_s *ret_KernelEntitiesList, HC_KEY modelKey);
00192 
00198     virtual void AddConnection(HC_KEY key, void* pKernelEntity);
00199     virtual void AddConnection(HC_KEY key, void* pKernelEntity, HC_KEY modelKey);
00200 
00201 
00208     virtual void OptimizeTree(const char * segname, const char * option_string);
00209 
00210 protected:
00211 
00213     struct vhash_s *mhash_Hoops2Kernel;
00214 
00216     struct vhash_s *mhash_Kernel2Hoops;
00217 
00218 };
00219 
00224 enum HInputHandlerStyle {
00225     HInputHandlerStyleModel, 
00226     HInputHandlerStyleImage  
00227 };
00228 
00233 enum HDwgViewVector {
00234     DwgTopView,             
00235     DwgIsoView,             
00236     DwgViewportInherit,     
00237     DwgSceneInherit         
00238 };
00239 
00245 class MVO_API HInputHandlerOptions 
00246 {
00247 public:
00248 
00250     HInputHandlerOptions() {
00251         m_z_separation = 1;
00252         m_depth_range = 0;
00253         m_pHBaseView = 0;
00254         m_pImageName = 0;
00255         m_pImageFormat = 0;
00256         m_pConnector = 0;
00257         m_pExtendedData = 0;
00258         m_bLocal = false;
00259         m_tk = 0;
00260         m_bLogging = false;
00261 
00262     
00263         // Generic options used in DGN, SKP and DWG importer
00264         m_bIgnoreOffEntities = false;
00265 
00266         //DWG/SKP option
00267         m_bImportMetadata = false;
00268 
00269         // DWG import options (try and move them somewhere else)
00270         m_bInputViaHSF = false;
00271         m_Deviation = 10.0;
00272         m_bImportWireframeForBrep = false;
00273         m_numIsolines = 0;
00274         m_listRegAppNames = 0;
00275         m_listEntityType = 0;
00276         m_bForceReimport = false;
00277         m_listDWGLayouts = 0;
00278         m_bAttachDWGHandles = false;
00279         m_bImportAllLayouts = false;
00280         m_bDWGInsertMeshesAsShells = false;
00281         m_bDisableDWGDrawOrder = false;
00282         m_eDwgViewVector = DwgViewportInherit;
00283         m_sDwgContrastColorRgb = HPoint(0, 0, 0);
00284         m_bLegacyOptimize = false;
00285         m_bDwgDepthRangeDrawOrder = false;
00286 
00287         // DGN import Options
00288         m_iDGNCellHeaderOption = SINGLE_ENTITY_CELLHEADER;
00289         m_coneFactor = 10.0;
00290         m_factorForSmartSolids = 45.0;
00291         m_bDGNRebaselineModel = false;
00292         m_bDGNImportAllModels = false;
00293 
00294         // PRC options
00295         m_pPRCPMIConnector = 0;
00296         m_pPRCTopologyManager = 0;
00297         m_bPRCMergeFaces = false;
00298         m_bPRCImportNonBrepFaces = true;
00299         m_bPRCCreatePRCFileOnly = false;
00300         m_bPRCInstanceShells = true;
00301         m_bPRCCalculatePhysicalProperties = false;
00302         m_pPRCMultiModelSelectionCallback = 0;
00303         m_pPRCAsmModelFile = 0;
00304         m_pPRCDeleteModelFile = false;
00305         m_bPRCStoreUserAttributes = true;
00306         m_pPRCDeleteModelCallback = 0;
00307         m_bPRCImportHiddenObjects = false;
00308 
00309         // DWF import options
00310         m_bDisableDWFDrawOrder = false;
00311         m_bDWFRebaselineModel = true;
00312         m_bImportThumbnail = false;
00313 
00314         //SKP optimization option
00315         m_bOptimizeSegmentTree = false;
00316         m_license = 0;
00317 
00318         m_pOOCNodeDeltas = 0;
00319         m_bOOCAutoUpdate = true;
00320         m_bOOCAutoCleanup = true;
00321     }
00322 
00325     HInputHandlerOptions(HInputHandlerOptions const * o) {
00326         m_z_separation = o->m_z_separation;
00327         m_depth_range = o->m_depth_range;
00328         m_pHBaseView = o->m_pHBaseView;
00329         m_pImageName = o->m_pImageName;
00330         m_pImageFormat = o->m_pImageFormat;
00331         m_pConnector = o->m_pConnector;
00332         m_pExtendedData = o->m_pExtendedData;
00333         m_bLocal = o->m_bLocal;
00334         
00335         m_license = o->m_license;
00336         
00337         //DWG/DGN/SKP option
00338         m_bIgnoreOffEntities = o->m_bIgnoreOffEntities;
00339 
00340         //DWG/SKP option
00341         m_bImportMetadata = o->m_bImportMetadata;
00342 
00343 
00344         //DWG Options
00345         m_bInputViaHSF = o->m_bInputViaHSF;
00346         m_Deviation = o->m_Deviation;
00347         m_bImportWireframeForBrep = o->m_bImportWireframeForBrep;
00348         m_numIsolines = o->m_numIsolines;
00349         m_listRegAppNames = o->m_listRegAppNames;
00350         m_listEntityType=o->m_listEntityType;   
00351         m_bForceReimport = o->m_bForceReimport;
00352         m_listDWGLayouts = o->m_listDWGLayouts;
00353         m_bAttachDWGHandles = o->m_bAttachDWGHandles;
00354         m_bImportAllLayouts = o->m_bImportAllLayouts;
00355         m_bDWGInsertMeshesAsShells = o->m_bDWGInsertMeshesAsShells;
00356         m_bDisableDWGDrawOrder = o->m_bDisableDWGDrawOrder;
00357         m_eDwgViewVector = o->m_eDwgViewVector;
00358         m_sDwgContrastColorRgb = o->m_sDwgContrastColorRgb;
00359         m_bLegacyOptimize = o->m_bLegacyOptimize;
00360         m_bDwgDepthRangeDrawOrder = o->m_bDwgDepthRangeDrawOrder;
00361 
00362         //DGN Options
00363         m_iDGNCellHeaderOption = o->m_iDGNCellHeaderOption;
00364         m_bDGNRebaselineModel = o->m_bDGNRebaselineModel;
00365         m_coneFactor = o->m_coneFactor;
00366         m_factorForSmartSolids = o->m_factorForSmartSolids;
00367         m_bDGNImportAllModels = o->m_bDGNImportAllModels;
00368 
00369         // PRC options
00370         m_pPRCPMIConnector = o->m_pPRCPMIConnector;
00371         m_pPRCTopologyManager = o->m_pPRCTopologyManager;
00372         m_bPRCMergeFaces = o->m_bPRCMergeFaces;
00373         m_bPRCImportNonBrepFaces = o->m_bPRCImportNonBrepFaces;
00374 
00375         m_bPRCCreatePRCFileOnly = o->m_bPRCCreatePRCFileOnly;
00376         m_bPRCInstanceShells = o->m_bPRCInstanceShells;
00377         m_bPRCCalculatePhysicalProperties = o->m_bPRCCalculatePhysicalProperties;
00378         m_pPRCMultiModelSelectionCallback = o->m_pPRCMultiModelSelectionCallback;
00379         m_pPRCAsmModelFile = o->m_pPRCAsmModelFile;
00380         m_pPRCDeleteModelFile = o->m_pPRCDeleteModelFile;
00381         m_pPRCDeleteModelCallback = o->m_pPRCDeleteModelCallback;
00382         m_bPRCImportHiddenObjects = o->m_bPRCImportHiddenObjects;
00383 
00384 
00385         // DWF import options
00386         m_bDisableDWFDrawOrder = o->m_bDisableDWFDrawOrder;
00387         m_bDWFRebaselineModel = o->m_bDWFRebaselineModel;
00388         m_bImportThumbnail = o->m_bImportThumbnail;
00389         
00390 
00391         //SKP import option
00392         m_bOptimizeSegmentTree = o->m_bOptimizeSegmentTree;
00393 
00394         m_pOOCNodeDeltas = o->m_pOOCNodeDeltas;
00395         m_bOOCAutoUpdate = o->m_bOOCAutoUpdate;
00396         m_bOOCAutoCleanup = o->m_bOOCAutoCleanup;
00397     }
00398 
00401     HInputHandlerOptions(const HInputHandlerOptions &o) {
00402         m_z_separation = o.m_z_separation;
00403         m_depth_range = o.m_depth_range;
00404         m_pHBaseView = o.m_pHBaseView;
00405         m_pImageName = o.m_pImageName;
00406         m_pImageFormat = o.m_pImageFormat;
00407         m_pConnector = o.m_pConnector;
00408         m_pExtendedData = o.m_pExtendedData;
00409         m_bLocal = o.m_bLocal;
00410 
00411         //DWG/DGN/SKP option
00412         m_bIgnoreOffEntities = o.m_bIgnoreOffEntities;
00413 
00414         //DWG/SKP option
00415         m_bImportMetadata = o.m_bImportMetadata;
00416 
00417         //DWG options
00418         m_bInputViaHSF = o.m_bInputViaHSF;
00419         m_Deviation = o.m_Deviation;
00420         m_bImportWireframeForBrep = o.m_bImportWireframeForBrep;
00421         m_numIsolines = o.m_numIsolines;
00422         m_listRegAppNames = o.m_listRegAppNames;
00423         m_listEntityType = o.m_listEntityType;
00424         m_bForceReimport = o.m_bForceReimport;
00425         m_listDWGLayouts = o.m_listDWGLayouts;
00426         m_bAttachDWGHandles = o.m_bAttachDWGHandles;
00427         m_bImportAllLayouts = o.m_bImportAllLayouts;
00428         m_bDWGInsertMeshesAsShells = o.m_bDWGInsertMeshesAsShells;
00429         m_bDisableDWGDrawOrder = o.m_bDisableDWGDrawOrder;
00430         m_eDwgViewVector = o.m_eDwgViewVector;
00431         m_sDwgContrastColorRgb = o.m_sDwgContrastColorRgb;
00432         m_bLegacyOptimize = o.m_bLegacyOptimize;
00433         m_bDwgDepthRangeDrawOrder = o.m_bDwgDepthRangeDrawOrder;
00434 
00435         //DGN options
00436         m_iDGNCellHeaderOption = o.m_iDGNCellHeaderOption;
00437         m_bDGNRebaselineModel = o.m_bDGNRebaselineModel;
00438         m_coneFactor = o.m_coneFactor;
00439         m_factorForSmartSolids = o.m_factorForSmartSolids;
00440         m_bDGNImportAllModels = o.m_bDGNImportAllModels;
00441 
00442         // PRC options
00443         m_pPRCPMIConnector = o.m_pPRCPMIConnector;
00444         m_pPRCTopologyManager = o.m_pPRCTopologyManager;
00445         m_bPRCMergeFaces = o.m_bPRCMergeFaces;
00446         m_bPRCImportNonBrepFaces = o.m_bPRCImportNonBrepFaces;
00447         m_bPRCCreatePRCFileOnly = o.m_bPRCCreatePRCFileOnly;
00448         m_bPRCInstanceShells = o.m_bPRCInstanceShells;
00449         m_bPRCCalculatePhysicalProperties = o.m_bPRCCalculatePhysicalProperties;
00450         m_pPRCMultiModelSelectionCallback = o.m_pPRCMultiModelSelectionCallback;
00451         m_pPRCAsmModelFile = o.m_pPRCAsmModelFile;
00452         m_pPRCDeleteModelFile = o.m_pPRCDeleteModelFile;
00453         m_bPRCImportHiddenObjects = o.m_bPRCImportHiddenObjects;
00454 
00455         // DWF import options
00456         m_bDisableDWFDrawOrder = o.m_bDisableDWFDrawOrder;
00457         m_bDWFRebaselineModel = o.m_bDWFRebaselineModel;
00458         m_bImportThumbnail = o.m_bImportThumbnail;
00459         
00460 
00461         //SKP import option
00462         m_bOptimizeSegmentTree = o.m_bOptimizeSegmentTree;
00463 
00464         m_pOOCNodeDeltas = o.m_pOOCNodeDeltas;
00465         m_bOOCAutoUpdate = o.m_bOOCAutoUpdate;
00466         m_bOOCAutoCleanup = o.m_bOOCAutoCleanup;
00467     }
00468 
00469     virtual ~HInputHandlerOptions();
00470 
00472     HBaseView * m_pHBaseView;
00473 
00475     const char * m_pImageName;
00476 
00478     const char * m_pImageFormat;
00479 
00481     bool m_bLocal;
00482 
00484     HStreamFileToolkit * m_tk;
00485 
00487     bool m_bLogging;
00488 
00490     HIOConnector * m_pConnector;
00491 
00493     void * m_pExtendedData;
00494 
00496     bool m_bInputViaHSF;
00497 
00499     double m_Deviation;
00500 
00502     bool m_bImportMetadata;
00503 
00505     const char *m_license;
00506 
00507 
00508 
00509 
00513     struct vlist_s * m_listRegAppNames;
00514 
00516     struct vlist_s * m_listEntityType;
00517 
00519     bool m_bImportWireframeForBrep;
00520 
00522     double m_numIsolines;
00523 
00525     bool m_bForceReimport;
00526 
00531     bool m_bDisableDWGDrawOrder;
00532 
00534     struct vlist_s * m_listDWGLayouts;
00535 
00537     bool m_bIgnoreOffEntities;
00538 
00542     double m_coneFactor;
00543 
00547     double m_factorForSmartSolids;
00548 
00550     bool m_bAttachDWGHandles;
00551 
00553     int m_iDGNCellHeaderOption;
00554 
00555 
00556     
00560     enum {
00561         SINGLE_ENTITY_CELLHEADER, 
00562         BREAK_CELLHEADER,         
00563         OPT_CELLHEADER            
00564     };
00565 
00567     void *m_pPRCAsmModelFile;
00568 
00570     bool m_pPRCDeleteModelFile;         
00571 
00573     HIOConnector *      m_pPRCPMIConnector;
00575     BREP_Topology *     m_pPRCTopologyManager;
00577     bool                m_bPRCMergeFaces;
00578     bool                m_bPRCImportNonBrepFaces;
00579 
00581     bool                m_bPRCCreatePRCFileOnly;
00582     bool                m_bPRCInstanceShells;
00583 
00584     bool                m_bPRCCalculatePhysicalProperties;
00586     void (*m_pPRCMultiModelSelectionCallback) (char const * in_container, int in_num_configs, char const ** in_configs, 
00587                                                int & out_config_selection);
00589     bool                m_bPRCStoreUserAttributes;
00591     void (*m_pPRCDeleteModelCallback) ( void*& pPRCAsmModelFile);
00593     bool                m_bPRCImportHiddenObjects;
00594     
00595 
00598     bool  m_bImportAllLayouts;
00599 
00601     bool m_bDGNRebaselineModel;
00602     
00604     bool m_bDGNImportAllModels;
00605 
00609     bool m_bDWGInsertMeshesAsShells;
00610 
00611     // DWF import options
00616     bool m_bDisableDWFDrawOrder;
00617 
00619     bool m_bImportThumbnail;
00620 
00622     bool m_bDWFRebaselineModel;
00623 
00625     bool m_bOptimizeSegmentTree;
00626     
00632     HDwgViewVector m_eDwgViewVector;
00633 
00640     HPoint m_sDwgContrastColorRgb;
00641 
00648     bool m_bLegacyOptimize;
00649 
00656     bool m_bDwgDepthRangeDrawOrder;
00657 
00662     double m_z_separation;
00663 
00668     double m_depth_range;
00669 
00671     void * m_pOOCNodeDeltas;
00672 
00674     bool m_bOOCAutoUpdate;
00675 
00677     bool m_bOOCAutoCleanup;
00678 };
00679 
00680 
00681 
00683 
00689 class MVO_API HInputHandler 
00690 {
00691 
00692 public:
00700     HInputHandler();
00701     virtual ~HInputHandler();
00702 
00707     unsigned long GetInputOps() {return m_InputOps;};
00708 
00709 
00712     virtual const char * GetInputName() = 0;  
00713 
00714 
00721     virtual void RegisterInputHandlerTypes() = 0;
00722 
00729     virtual HInputHandlerStyle GetInputStyle() = 0;
00730 
00738     virtual HFileInputResult FileInputByKey(const char * filename, HC_KEY key, HInputHandlerOptions * options);
00739     virtual HFileInputResult FileInputByKey(const __wchar_t * filename, HC_KEY key, HInputHandlerOptions * options);
00740 
00741 
00750     virtual HFileInputResult FileInputByKey(const unsigned short * filename, HC_KEY key, HInputHandlerOptions * options);
00751 
00762     virtual HFileInputResult FileInputToImageKey(const char * filename, HC_KEY * image_key, HC_KEY segment_key, HInputHandlerOptions * options);
00763     virtual HFileInputResult FileInputToImageKey(const __wchar_t * filename, HC_KEY * image_key, HC_KEY segment_key, HInputHandlerOptions * options);
00764 
00765 
00775     virtual HFileInputResult FileInputToImageKey(const unsigned short * filename, HC_KEY * image_key, HC_KEY segment_key, HInputHandlerOptions * options);
00776 
00789     virtual const char * GetInputTypesString() = 0;
00790 
00794     const __wchar_t * GetInputProgress();
00795 
00799     float GetInputPercentProgress();
00800 
00804     const __wchar_t * GetInputInformation();
00805 
00812     HIONoticeCallback * SetInputProgressNoticeCallback(HIONoticeCallback *notice_callback);
00813     
00814     
00821     HIOPercentNoticeCallback * SetInputPercentProgressNoticeCallback(HIOPercentNoticeCallback *percent_notice_callback);
00822     
00829     HIONoticeCallback * SetInputInformationNoticeCallback(HIONoticeCallback *notice_callback);
00830 
00832     void ReportInputProgress(const char * progress);
00833     void ReportInputProgress(const __wchar_t * progress);
00834 
00836     void ReportInputPercentProgress(float percent_progress);
00837 
00839     void ReportInputInformation(const char * information);
00840     void ReportInputInformation(const __wchar_t * information);
00841 
00842     void SetModuleDirectory(const char *module_directory);
00843     void SetModuleDirectory(const __wchar_t *module_directory);
00844 protected:
00845 
00849     void SetStartingInput(const char *filename);
00850     void SetStartingInput(const __wchar_t *filename = 0);
00851 
00855     void SetFinishedInput();
00856 
00858     void SetInputOps(unsigned long ops) {m_InputOps=ops;};
00859 
00861     unsigned long m_InputOps;
00862 
00863     __wchar_t *m_module_directory;
00864 
00865 private:
00866 
00867     __wchar_t *m_progress;
00868     float m_percent_progress1;
00869     float m_percent_progress2;
00870     __wchar_t *m_information;
00871     struct vlist_s *m_information_list;
00872     HIONoticeCallback *m_progress_callback;
00873     HIONoticeCallback *m_information_callback;
00874     HIOPercentNoticeCallback *m_percent_progress_callback;
00875 };
00876 
00880 enum HOutputHandlerStyle 
00881 {
00882     HOutputHandlerStyleModel, 
00883     HOutputHandlerStyleImage, 
00884     HOutputHandlerStyleHardcopy, 
00885     HOutputHandlerStyleHTML, 
00886     HOutputHandlerStyleDontCare
00887 };
00888 
00895 class MVO_API ExportNameMap
00896 {
00897 private:
00898     void * _imp;
00899 public:
00900     ExportNameMap();
00901     ~ExportNameMap();
00902 
00903     H_FORMAT_TEXT lookup(HC_KEY) const;
00904     void tag(HC_KEY, H_FORMAT_TEXT const &);
00905 };
00906 
00914 enum HPrcBrepCompression {
00915     PrcBrepCompressionNone,     
00916     PrcBrepCompressionLow,      
00917     PrcBrepCompressionMedium,   
00918     PrcBrepCompressionHigh      
00919 };
00920 
00926 class MVO_API HOutputHandlerOptions 
00927 {
00928 public:
00930     HOutputHandlerOptions();
00931 
00932     virtual char const * GetType() const;
00933 
00936     virtual bool PopulateOptions();
00937     
00941     HOutputHandlerOptions(HOutputHandlerOptions const *o) {
00942          Init(o);
00943     };
00944 
00948     HOutputHandlerOptions(const HOutputHandlerOptions &o) {
00949         Init(&o);
00950     };
00951 
00952 
00953     virtual ~HOutputHandlerOptions();
00954 
00958     void Init(HOutputHandlerOptions const *o);
00959 
00961     HBaseView * m_pHBaseView;
00963     HBaseView * const View() const {return m_pHBaseView;};
00965     void View(HBaseView * const v) {m_pHBaseView = v;};
00966 
00968     HBaseModel * m_pHBaseModel;
00970     HBaseModel * const Model() const {return m_pHBaseModel;};
00972     void Model(HBaseModel * const m) {m_pHBaseModel = m;};
00973 
00975     HCamera * m_pCamera;
00977     HCamera * const Camera() const {return m_pCamera;};
00979     void Camera(HCamera * const c) {m_pCamera = c;};
00980 
00982     HC_KEY m_Key;
00984     HC_KEY const Key() const {return m_Key;};
00986     void Key(HC_KEY const k) {m_Key = k;};
00987 
00989     char const * m_pHSRAOptions;
00991     char const * const HSRAOptions() const {return m_pHSRAOptions;};
00993     void HSRAOptions(char const * const tf) {m_pHSRAOptions = tf;};
00994 
00996     HPoint const * m_pWindowColor;
00998     HPoint const * const WindowColor() const {return m_pWindowColor;};
01000     void WindowColor(HPoint const * const tf) {m_pWindowColor = tf;};
01001 
01003     bool m_bUseWindowColor;
01005     bool UseWindowColor() const {return m_bUseWindowColor;};
01007     void UseWindowColor(bool const tf) {m_bUseWindowColor = tf;};
01008 
01010     float m_Window_Width;
01012     float const WindowWidth() const {return m_Window_Width;};
01014     void WindowWidth(float const f) {m_Window_Width = f;};
01015 
01017     float m_Window_Height;
01019     float const WindowHeight() const {return m_Window_Height;};
01021     void WindowHeight(float const f) {m_Window_Height = f;};
01022 
01024     float m_Paper_Width;
01026     float const PaperWidth() const {return m_Paper_Width;};
01028     void PaperWidth(float const f) {m_Paper_Width = f;};
01029 
01031     float m_Paper_Height;
01033     float const PaperHeight() const {return m_Paper_Height;};
01035     void PaperHeight(float const f) {m_Paper_Height = f;};
01036 
01038     bool m_ForceGrayscale;
01040     bool ForceGrayscale() const {return m_ForceGrayscale;};
01042     void ForceGrayscale(bool const tf) {m_ForceGrayscale = tf;};
01043     
01045     size_t m_lineFuseThreshold;
01046     
01050     size_t LineFuseThreshold() const {return m_lineFuseThreshold;};
01051     
01055     void LineFuseThreshold(size_t const tf) {m_lineFuseThreshold = tf;};
01056 
01058     bool m_bFastPrint;
01060     bool FastPrint() const {return m_bFastPrint;};
01062     void FastPrint(bool const tf) {m_bFastPrint = tf;};
01063 
01065     bool m_bConserveMemory;
01067     bool ConserveMemory() const {return m_bConserveMemory;};
01069     void ConserveMemory(bool const tf) {m_bConserveMemory = tf;};
01070 
01071     bool m_bWriteAnimations;
01072     bool WriteAnimations() const {return m_bWriteAnimations;};
01073     void WriteAnimations(bool const tf) {m_bWriteAnimations = tf;};
01074 
01076     bool m_bWindowFrame;
01078     bool WindowFrame() const {return m_bWindowFrame;};
01080     void WindowFrame(bool const tf) {m_bWindowFrame = tf;};
01081 
01083     bool m_bUseSubscreen;
01085     bool UseSubscreen() const {return m_bUseSubscreen;};
01087     void UseSubscreen(bool const tf) {m_bUseSubscreen = tf;};
01088 
01090     int m_Image_Dpi;
01092     int const ImageDpi() const {return m_Image_Dpi;};
01094     void ImageDpi(int const dpi) {m_Image_Dpi = dpi;};
01095 
01097     int m_Paper_Dpi;
01099     int const PaperDpi() const {return m_Paper_Dpi;};
01101     void PaperDpi(int const dpi) {m_Paper_Dpi = dpi;};
01102 
01104     void * m_pExtendedData;
01105     void * const ExtendedData() const {return m_pExtendedData;};
01106     void ExtendedData(void * const vp) {m_pExtendedData = vp;};
01107     void ExtendedData(HPDFOptions * const vp) {m_pExtendedData = (void*)vp;};
01108 
01109     bool ActivateOnPageOpen() const {return m_bActivateOnPageOpen;};
01110     void ActivateOnPageOpen(bool onoff) {m_bActivateOnPageOpen = onoff;};
01111     float const AnnotLeft() const {return m_fAnnotLeft;};
01112     void AnnotLeft(float f) {m_fAnnotLeft = f;};
01113     float const AnnotRight() const {return m_fAnnotRight;};
01114     void AnnotRight(float f) {m_fAnnotRight = f;};
01115     float const AnnotBottom() const {return m_fAnnotBottom;};
01116     void AnnotBottom(float f) {m_fAnnotBottom = f;};
01117     float const AnnotTop() const {return m_fAnnotTop;};
01118     void AnnotTop(float f) {m_fAnnotTop = f;};
01119 
01120 
01122     const char *m_license;
01123 
01124     int m_antialiasLevel;
01125     int m_jpeg_quality;
01126     unsigned char* m_imageOutputBuffer;
01127     size_t m_imageOutputBufferSize;
01128 
01129 
01130 
01131 
01133     int m_Version;
01134     int const Version() const {return m_Version;};
01135     void Version(int const v) {m_Version = v;};
01136 
01138     H_OUTPUT_TYPE m_OutputType;
01140     H_OUTPUT_TYPE OutputType() const {return m_OutputType;};
01142     void OutputType(H_OUTPUT_TYPE ot) {m_OutputType = ot;};
01143 
01145     bool m_b3dOutput;
01147     bool Output3d() const {return m_b3dOutput;};
01149     void Output3d(bool const tf) {m_b3dOutput = tf;};
01150 
01152     bool m_bAscii;
01154     bool Ascii() const {return m_bAscii;};
01156     void Ascii(bool const tf) {m_bAscii = tf;};
01157 
01159     bool m_bStlNormals;
01161     bool StlNormals() const {return m_bStlNormals;};
01163     void StlNormals(bool const tf) {m_bStlNormals = tf;};
01164 
01166     double m_ratio_cm_to_internal_units;
01167 
01171     double PrintToScale() const {return m_ratio_cm_to_internal_units;};
01172 
01188     void PrintToScale(double const r) {m_ratio_cm_to_internal_units = r;};
01189 
01196     float m_PageMargins[4];
01197 
01199     HBhvBehaviorManager * m_pBehaviorManager;
01200 
01202     char const* m_pDWFModelName;
01203 
01205     ExportNameMap m_names;
01206 
01208     void *m_pPRCAsmModelFile;
01209 
01211     bool m_bActivateOnPageOpen;
01212 
01214     float m_fAnnotLeft;
01215 
01217     float m_fAnnotRight;
01218 
01220     float m_fAnnotBottom;
01221 
01223     float m_fAnnotTop;
01224 
01226     HPrcBrepCompression m_ePrcBrepCompression;
01227 
01229     bool m_bPrcCompressTessellation;
01230 
01232     bool m_bAVIShowCompressionDialog;
01233 
01242     char m_bAVICodec[4];
01243 
01245     bool m_bExporting2DDwf;
01246 };
01247 
01248 
01250 
01256 class MVO_API HOutputHandler 
01257 {
01258 
01259 public:
01267     HOutputHandler();
01268     virtual ~HOutputHandler();
01269 
01270 
01273     virtual const char * GetOutputName() = 0;  
01274 
01279     unsigned long GetOutputOps() {return m_OutputOps;};
01280     
01291     virtual void RegisterOutputHandlerTypes() = 0;
01292 
01293 
01301     virtual HFileOutputResult FileOutputByKey(const char * filename, HC_KEY key, HOutputHandlerOptions * options);
01302     virtual HFileOutputResult FileOutputByKey(const __wchar_t * filename, HC_KEY key, HOutputHandlerOptions * options);
01303 
01311     virtual HFileOutputResult FileOutputByKey(const unsigned short * filename, HC_KEY key, HOutputHandlerOptions * options);
01312 
01313 
01322     virtual HFileOutputResult FileOutputFromImageKey(const char * filename, HC_KEY image_key, HOutputHandlerOptions * options);
01323     virtual HFileOutputResult FileOutputFromImageKey(const __wchar_t * filename, HC_KEY image_key, HOutputHandlerOptions * options);
01324 
01335     virtual const char * GetOutputTypesString() = 0;
01336 
01345     virtual HOutputHandlerStyle GetOutputStyle() = 0;
01346     
01353     virtual const char * GetOutputDefaultHSRA();
01354 
01358     const char * GetOutputProgress();
01359 
01363     float GetOutputPercentProgress();
01364 
01368     const __wchar_t * GetOutputInformation();
01369 
01376     HIONoticeCallback * SetOutputProgressNoticeCallback(HIONoticeCallback *notice_callback);
01377 
01378     
01385     HIOPercentNoticeCallback * SetOutputPercentProgressNoticeCallback(HIOPercentNoticeCallback *percent_notice_callback);
01386     
01393     HIONoticeCallback * SetOutputInformationNoticeCallback(HIONoticeCallback *notice_callback);
01394 
01396     void ReportOutputProgress(const char * progress);
01397 
01399     void ReportOutputPercentProgress(float percent_progress);
01400 
01402     void ReportOutputInformation(const char * information);
01403 
01404 
01405     void SetModuleDirectory(const char *module_directory);
01406     void SetModuleDirectory(const __wchar_t *module_directory);
01407 
01408 protected:
01409 
01413     void SetStartingOutput();
01414 
01418     void SetFinishedOutput();
01419 
01421     void SetOutputOps(unsigned long ops) {m_OutputOps=ops;};
01423     unsigned long m_OutputOps;
01424 
01425     char *m_module_directory;
01426 private:
01427 
01428     char *m_progress;
01429     float m_percent_progress1;
01430     float m_percent_progress2;
01431     __wchar_t *m_information;
01432     struct vlist_s *m_information_list;
01433     HIONoticeCallback *m_progress_callback;
01434     HIOPercentNoticeCallback *m_percent_progress_callback;
01435     HIONoticeCallback *m_information_callback;
01436 };
01437 
01443 class MVO_API HIOManager
01444 {
01445 
01446 public:
01447 
01448     HIOManager();
01449     virtual ~HIOManager();
01450     
01460     virtual HInputHandler * RegisterInputHandler(const char * file_type, HInputHandler * handler);
01461 
01470     virtual HOutputHandler * RegisterOutputHandler(const char * file_type, HOutputHandler * handler);
01471 
01482     virtual HIOConnector * RegisterConnector(const char * file_type, HIO_CREATE_FREE_FUNCTION Create, HIO_FREE_CONNECTOR_FUNCTION Free);
01483 
01488     virtual HInputHandler * GetInputHandler(const char * file_type);
01489     HInputHandler * GetInputHandler(const __wchar_t * file_type);
01490 #ifdef _MSC_VER
01491     HInputHandler * GetInputHandler(const unsigned short * file_type);
01492 #endif
01493 
01498     virtual HOutputHandler * GetOutputHandler(const char * file_type);
01499     virtual HOutputHandler * GetOutputHandler(const __wchar_t * file_type);
01500 
01505     virtual void RegisterHandlers();
01506 
01511     virtual const char * GetInputHandlerTypes();
01512 
01517     virtual const char * GetOutputHandlerTypes();
01518 
01519 
01526     virtual HIOConnector * CreateConnector(const char * file_type);
01527 
01532     virtual void FreeConnector(HIOConnector * old_connector);
01533 
01534 
01539     static HIOManager *GetCurrentHIOManager();
01540 
01546     static void GetFileOutputResultString(HFileOutputResult result, char *result_str);
01547 
01548 protected:
01549 
01551     struct vhash_s * input_handlers;
01552 
01554     struct vhash_s * output_handlers;
01555 
01557     struct vhash_s * connector_procs;
01558 
01560     struct vlist_s * owned_input_handlers;
01561 
01563     struct vlist_s * owned_output_handlers;
01564 
01566     struct vlist_s * loaded_input_handlers;
01567 
01569     struct vlist_s * loaded_output_handlers;
01570 
01572     struct vhash_s * created_connectors;
01573 
01574     char * m_input_types;
01575     int m_input_types_allocated;
01576 
01577     char * m_output_types;
01578     int m_output_types_allocated;
01579 };
01580 
01581 #ifdef H_PACK_8
01582 #pragma pack(pop)
01583 #endif
01584 
01585 #endif
01586