00001
00076 #ifndef INC_MIE_FORMAT_H
00077 #define INC_MIE_FORMAT_H
00078
00079 #ifndef INC_MIE_MIE2_H
00080 #include <mie/mie2.h>
00081 #endif
00082
00083 #ifndef INC_MIE_FEATURES_H
00084 #include <mie/features.h>
00085 #endif
00086
00087 #ifndef INC_MI32_SIMPLEAR_H
00088 #include <mi32/simplear.h>
00089 #endif
00090
00091 #ifndef INC_MI32_MISTRING_H
00092 #include <mi32/mistring.h>
00093 #endif
00094
00095 #ifndef INC_MI32_STRUTF8_H
00096 #include <mi32/strutf8.h>
00097 #endif
00098
00099 #ifndef INC_MI32_SMLBASE_H
00100 #include <mi32/smlbase.h>
00101 #endif
00102
00103 #ifndef GENERATING_DOXYGEN_OUTPUT
00104 class FILEPATH;
00105 class GETFILEFILTER;
00106 namespace RVC {
00107 class GETOBJFILTER;
00108 class OBJITEM;
00109 class OBJITEMLIST;
00110 }
00111 namespace SPATREF {
00112 class COORDREFSYS;
00113 }
00114 namespace MIE {
00115 class JOB_IMPORT;
00116 class JOB_EXPORT;
00117 }
00118 #endif // GENERATING_DOXYGEN_OUTPUT
00119
00120 namespace MIE {
00121
00122
00123
00142 class FORMAT {
00143 public:
00144
00146 enum TESTRESULT {
00147 TESTRESULT_No = 0,
00148 TESTRESULT_Yes = 1,
00149 TESTRESULT_Unknown = 2,
00150 TESTRESULT_CannotTest = 3,
00151 TESTRESULT_CantOpen = 4,
00152 TESTRESULT_YesPreferred = 5,
00153 TESTRESULT_YesLowPriority = 6,
00154 };
00155
00156 enum SORTMETHOD {
00157 SORT_ByName = 0,
00158 SORT_ByDesc = 1,
00159 SORT_ByExtn = 2
00160 };
00161
00162
00163 static int AddFormatsAll ();
00164 static int AddFormatsCAD ();
00165 static int AddFormatsDatabase ();
00166 static int AddFormatsRaster ();
00167 static int AddFormatsShape ();
00168 static int AddFormatsTIN ();
00169 static int AddFormatsVector ();
00170
00174 static void EnableSML();
00175
00177 static int SortFormatList (
00178 SORTMETHOD sort = SORT_ByName,
00179 bool forward = true
00180 );
00181
00184 static const FORMAT* GetFormat (
00185 FORMATTYPE FormatType
00186 );
00187
00189 static ERRVALUE GetFormatList (
00190 SIMPLE_ARRAY<const FORMAT*>& formats,
00191 MODE mode,
00192 OBJTYPEFLAG ObjectType
00193 );
00194
00199 static bool FindFormats (
00200 SIMPLE_ARRAY<const FORMAT*>& FormatList,
00201 const FILEPATH& filepath,
00202 MODE mode = MODE_Import,
00203 OBJTYPEFLAG ObjType = OBJTYPEFLAG_ALL
00204 );
00205
00208 static const FORMAT* FindFormat (
00209 const FILEPATH& filepath,
00210 MODE mode = MODE_Import,
00211 OBJTYPEFLAG ObjType = OBJTYPEFLAG_ALL
00212 );
00213
00215 virtual ~FORMAT ();
00216
00219 JOB_IMPORT* AllocJobImport (
00220 OBJTYPEFLAG ObjectType,
00221 const SETTINGS& settings
00222 ) const { return v_AllocJobImport(ObjectType, settings); }
00223
00226 JOB_EXPORT* AllocJobExport (
00227 const SETTINGS& settings
00228 ) const { return v_AllocJobExport(settings); }
00229
00233 SETTINGS* AllocSettings (
00234 MODE mode,
00235 OBJTYPEFLAG ObjType = OBJTYPEFLAG_ALL
00236 ) const;
00237
00240 UI_BASE* AllocUserInterface (
00241 SETTINGS& settings
00242 ) const;
00243
00245 ERRVALUE AnalyzeObjects (
00246 const RVC::OBJITEMLIST& objects,
00247 SETTINGS* settings
00248 ) const { return v_AnalyzeObjects(objects, settings); }
00249
00251 ERRVALUE AnalyzeSources (
00252 const MISTRINGLIST& sourcelist,
00253 SETTINGS* settings
00254 ) const { return v_AnalyzeSources(sourcelist, settings); }
00255
00259 bool CanExport (
00260 RVC::OBJTYPE objtype
00261 ) const;
00262
00266 bool CanExportSupportCRS (
00267 const SPATREF::COORDREFSYS& crs
00268 ) const { return (v_CanExportSupportCRS(crs)); }
00269
00273 bool CanExportToSingleFile (
00274 const RVC::OBJITEMLIST& objects
00275 ) const { return (v_CanExportToSingleFile(objects)); }
00276
00280 bool CanImport (
00281 RVC::OBJTYPE objtype
00282 ) const;
00283
00286 bool FeatureIsOptional (
00287 FEATURE feature
00288 ) const { return m_OptionalFeatureSet.Contains(feature); }
00289
00294 const char* GetDefaultFileExtn (
00295 ) const { return v_GetDefaultFileExtn(); }
00296
00298 OBJTYPEFLAG GetEditObjType() const { return v_GetEditObjType(); }
00299
00302 void GetExportDefaultCRS (
00303 SPATREF::COORDREFSYS& crs,
00304 const DRECT3D& Extents
00305 ) const { v_GetExportDefaultCRS(crs, Extents); }
00306
00309 RVC::GETOBJFILTER* GetExportObjectFilter (
00310 ) const { return (m_pExportObjectFilter); }
00311
00313 OBJTYPEFLAG GetExportObjTypes (
00314 ) const;
00315
00319 const MISTRING* GetFixedSource (
00320 ) const { return v_GetFixedSource(); }
00321
00324 void GetFormatDesc(MISTRING& str) const { v_GetFormatDesc(str); }
00325
00327 const char* GetFormatName() const { return m_FormatName; }
00328
00330 FORMATTYPE GetFormatType (
00331 ) const {
00332 return m_FormatType;
00333 }
00334
00337 GETFILEFILTER* GetImportFileFilter (
00338 ) const { return (m_pImportFileFilter); }
00339
00343 const char* GetImportFilePrompt (
00344 ) const { return v_GetImportFilePrompt(); }
00345
00348 TEXTID GetImportFilePromptTEXTID (
00349 ) const { return v_GetImportFilePromptTEXTID(); }
00350
00352 OBJTYPEFLAG GetImportObjTypes (
00353 ) const;
00354
00361 OBJTYPEFLAG GetIntermediateObjType (
00362 OBJTYPEFLAG PreferredObjType
00363 ) const { return v_GetIntermediateObjType(PreferredObjType); }
00364
00368 int GetObjItemList (
00369 const MISTRING& source,
00370 RVC::OBJITEMLIST& items,
00371 const SETTINGS& settings
00372 ) const;
00373
00376 SML::CLASS* GetSMLClass (
00377 RVC::OBJTYPE ObjType
00378 ) const;
00379
00381 SML::CLASSMEMBER* GetSMLClassMembers (
00382 RVC::OBJTYPE ObjType
00383 ) const;
00384
00387 const char* GetSMLClassName (
00388 RVC::OBJTYPE ObjType
00389 ) const { return v_GetSMLClassName(ObjType); }
00390
00396 const STRUTF8& GetSource (
00397 ) const { return m_source; }
00398
00400 MISTRING GetDataSourceName (
00401 const MISTRING& DataSource
00402 ) const { return v_GetDataSourceName(DataSource); }
00403
00405 bool HasFeature (
00406 FEATURE feature
00407 ) const { return (m_FeatureSet.Contains(feature) || FeatureIsOptional(feature)); }
00408
00414 ERRVALUE SelectDataSources (
00415 MISTRINGLIST& sources,
00416 const RVC::OBJITEMLIST* objitems = 0
00417 ) const { return v_SelectDataSources(sources, objitems); }
00418
00420 void SetExportObjectFilter (
00421 RVC::GETOBJFILTER *pExportObjectFilter
00422 ) { m_pExportObjectFilter = pExportObjectFilter; }
00423
00425 void SetImportFileFilter (
00426 GETFILEFILTER *pImportFileFilter
00427 ) { m_pImportFileFilter = pImportFileFilter; }
00428
00430 bool SupportsEncoding (
00431 CHAR_ENCODING encoding
00432 ) const { return v_SupportsEncoding(encoding); }
00433
00440 TESTRESULT TestFile (
00441 const FILEPATH& filepath,
00442 bool TestByExtn = true
00443 ) const;
00444
00448 TESTRESULT TestObject (
00449 const RVC::OBJITEM& objitem
00450 ) const;
00451
00454 ERRVALUE Import (
00455 const MISTRING& source,
00456 RVC::OBJITEMLIST& dest,
00457 const SETTINGS& settings
00458 ) const;
00459
00463 ERRVALUE ImportMulti (
00464 const MISTRINGLIST& sources,
00465 const SIMPLE_ARRAY<int>& NumObjectsInFile,
00466 const RVC::OBJITEMLIST& objitems,
00467 const SETTINGS& settings,
00468 MISTRING& ErrorLog
00469 ) const { return v_ImportMulti(sources, NumObjectsInFile, objitems, settings, ErrorLog); }
00470
00472 ERRVALUE Export (
00473 const RVC::OBJITEMLIST& sources,
00474 const MISTRING& dest,
00475 const SETTINGS& settings
00476 ) const;
00477
00478
00479 protected:
00480 FEATURESET m_FeatureSet;
00481 FEATURESET m_OptionalFeatureSet;
00482
00484 FORMAT (
00485 FORMATTYPE FormatType,
00486 OBJTYPEFLAG ImportObjType,
00487 MODE Modes,
00488 const char* FormatName,
00489 const char* source,
00490 OBJTYPEFLAG ExportObjType = OBJTYPEFLAG_None
00491 );
00492
00494 void AddFeatures (
00495 FEATURE features
00496 ) { m_FeatureSet += features; }
00497
00498 void SetExportObjTypes (
00499 OBJTYPEFLAG objtypes
00500 ) { m_ExportObjType = objtypes; }
00501
00502 void SetImportObjTypes (
00503 OBJTYPEFLAG objtypes
00504 ) { m_ImportObjType = objtypes; }
00505
00506 void SetFormatName (
00507 const char* name
00508 ) { m_FormatName = name; }
00509
00510 void SetSource (
00511 const char* source
00512 ) { m_source = source; }
00513
00514 OBJTYPEFLAG GetExportObjTypeFlag (
00515 ) const {
00516 return m_ExportObjType;
00517 }
00518
00519 OBJTYPEFLAG GetImportObjTypeFlag (
00520 ) const {
00521 return m_ImportObjType;
00522 }
00523
00524 const char* GetSMLBaseClassName (
00525 RVC::OBJTYPE objtype
00526 ) const;
00527
00529 virtual ERRVALUE v_AnalyzeSource (
00530 const MISTRING& source,
00531 SETTINGS* settings
00532 ) const;
00533
00536 virtual ERRVALUE v_AnalyzeSources (
00537 const MISTRINGLIST& sourcelist,
00538 SETTINGS* settings
00539 ) const;
00540
00543 virtual ERRVALUE v_ImportMulti (
00544 const MISTRINGLIST& sources,
00545 const SIMPLE_ARRAY<int>& NumObjectsInFile,
00546 const RVC::OBJITEMLIST& objitems,
00547 const SETTINGS& settings,
00548 MISTRING& ErrorLog
00549 ) const;
00550
00551 private:
00552 #ifndef GENERATING_DOXYGEN_OUTPUT
00553
00554 FORMATTYPE m_FormatType;
00555 int m_FormatIdx;
00556 const char* m_FormatName;
00557 STRUTF8 m_source;
00558 OBJTYPEFLAG m_ImportObjType;
00559 OBJTYPEFLAG m_ExportObjType;
00560 MODE m_Modes;
00561 #define MAX_MIE_CLASSES_PER_FORMAT 8
00562 SML::CLASS* m_SMLClass[MAX_MIE_CLASSES_PER_FORMAT];
00563 bool m_bSMLClassesSetup;
00564 RVC::GETOBJFILTER *m_pExportObjectFilter;
00565 GETFILEFILTER *m_pImportFileFilter;
00566
00567 #endif
00568
00569 static void InstallSMLClasses (
00570 SML::CALLBACKSTRUCT* cbs,
00571 void*
00572 );
00573
00577 SML::CLASS* SetupSMLClass (
00578 RVC::OBJTYPE ObjType
00579 );
00580
00581 void SetupSMLClasses (
00582 );
00583
00589 virtual JOB_IMPORT* v_AllocJobImport (
00590 OBJTYPEFLAG ObjectType,
00591 const SETTINGS& settings
00592 ) const;
00593
00598 virtual JOB_EXPORT* v_AllocJobExport (
00599 const SETTINGS& settings
00600 ) const;
00601
00607 virtual SETTINGS* v_AllocSettings (
00608 MODE mode,
00609 OBJTYPEFLAG ObjType = OBJTYPEFLAG_ALL
00610 ) const;
00611
00615 virtual UI_BASE* v_AllocUserInterface (
00616 SETTINGS& settings
00617 ) const;
00618
00622 virtual bool v_CanExport (
00623 RVC::OBJTYPE objtype
00624 ) const;
00625
00629 virtual bool v_CanExportSupportCRS (
00630 const SPATREF::COORDREFSYS& crs
00631 ) const;
00632
00640 virtual bool v_CanExportToSingleFile (
00641 const RVC::OBJITEMLIST& objects
00642 ) const;
00643
00647 virtual bool v_CanImport (
00648 RVC::OBJTYPE objtype
00649 ) const;
00650
00656 virtual const char* v_GetDefaultFileExtn (
00657 ) const;
00658
00660 virtual OBJTYPEFLAG v_GetEditObjType () const;
00661
00664 virtual void v_GetExportDefaultCRS (
00665 SPATREF::COORDREFSYS& crs,
00666 const DRECT3D& Extents
00667 ) const;
00668
00671 virtual void v_GetFormatDesc(MISTRING& desc) const = 0;
00672
00677 virtual const char* v_GetImportFilePrompt (
00678 ) const;
00679
00683 virtual TEXTID v_GetImportFilePromptTEXTID (
00684 ) const;
00685
00692 OBJTYPEFLAG v_GetIntermediateObjType (
00693 OBJTYPEFLAG PreferredObjType
00694 ) const;
00695
00702 virtual int v_GetObjItemList (
00703 const MISTRING& source,
00704 RVC::OBJITEMLIST& items,
00705 const SETTINGS& settings
00706 ) const;
00707
00724 virtual SMLCLASSMEMBER* v_GetSMLClassMembers (
00725 RVC::OBJTYPE ObjType
00726 ) const;
00727
00731 virtual const char* v_GetSMLClassName (
00732 RVC::OBJTYPE ObjType
00733 ) const;
00734
00765 virtual ERRVALUE v_Import (
00766 const MISTRING& source,
00767 const SETTINGS& settings,
00768 const SIMPLE_ARRAY<JOB_IMPORT*>& jobs
00769 ) const;
00770
00780 virtual ERRVALUE v_Export (
00781 const MISTRING& dest,
00782 const SETTINGS& settings,
00783 const SIMPLE_ARRAY<JOB_EXPORT*>& jobs
00784 ) const;
00785
00788 virtual TESTRESULT v_TestFile (
00789 const FILEPATH& filepath
00790 ) const;
00791
00794 virtual TESTRESULT v_TestObject (
00795 const RVC::OBJITEM& objitem
00796 ) const;
00797
00800 virtual ERRVALUE v_AnalyzeObjects (
00801 const RVC::OBJITEMLIST& objects,
00802 SETTINGS* settings
00803 ) const;
00804
00808 virtual DEPRECATED ERRVALUE v_AnalyzeFile (
00809 const FILEPATH& source,
00810 SETTINGS* settings
00811 ) const;
00812
00814 virtual const MISTRING* v_GetFixedSource (
00815 ) const;
00816
00819 virtual MISTRING v_GetDataSourceName (
00820 const MISTRING& DataSource
00821 ) const;
00822
00828 virtual ERRVALUE v_SelectDataSource (
00829 MISTRING& DataSource,
00830 const RVC::OBJITEM* objitem = 0
00831 ) const;
00832
00833 virtual ERRVALUE v_SelectDataSources (
00834 MISTRINGLIST& DataSources,
00835 const RVC::OBJITEMLIST* objitems = 0
00836 ) const;
00837
00838 virtual bool v_SupportsEncoding (
00839 CHAR_ENCODING encoding
00840 ) const;
00841
00842 friend class SML_MIEFORMAT;
00843 friend class FORMATLIST;
00844 };
00845
00846
00847 }
00848
00849
00850 #endif // ifndef INC_MIE_FORMAT_H