📄 mitab.h
字号:
{
protected:
int m_nSymbolDefIndex;
TABSymbolDef m_sSymbolDef;
public:
ITABFeatureSymbol();
~ITABFeatureSymbol() {};
int GetSymbolDefIndex() {return m_nSymbolDefIndex;};
TABSymbolDef *GetSymbolDefRef() {return &m_sSymbolDef;};
GInt16 GetSymbolNo() {return m_sSymbolDef.nSymbolNo;};
GInt16 GetSymbolSize() {return m_sSymbolDef.nPointSize;};
GInt32 GetSymbolColor() {return m_sSymbolDef.rgbColor;};
void SetSymbolNo(GInt16 val) { m_sSymbolDef.nSymbolNo = val;};
void SetSymbolSize(GInt16 val) { m_sSymbolDef.nPointSize = val;};
void SetSymbolColor(GInt32 clr) { m_sSymbolDef.rgbColor = clr;};
const char *GetSymbolStyleString(double dfAngle = 0.0);
void SetSymbolFromStyleString(const char *pszStyleString);
void DumpSymbolDef(FILE *fpOut = NULL);
};
/*=====================================================================
Feature Classes
=====================================================================*/
/*---------------------------------------------------------------------
* class TABFeature
*
* Extend the OGRFeature to support MapInfo specific extensions related
* to geometry types, representation strings, etc.
*
* TABFeature will be used as a base class for all the feature classes.
*
* This class will also be used to instanciate objects with no Geometry
* (i.e. type TAB_GEOM_NONE) which is a valid case in MapInfo.
*
* The logic to read/write the object from/to the .DAT and .MAP files is also
* implemented as part of this class and derived classes.
*--------------------------------------------------------------------*/
class TABFeature: public OGRFeature
{
protected:
int m_nMapInfoType;
double m_dXMin;
double m_dYMin;
double m_dXMax;
double m_dYMax;
GBool m_bDeletedFlag;
void CopyTABFeatureBase(TABFeature *poDestFeature);
// Compr. Origin is set for TAB files by ValidateCoordType()
GInt32 m_nXMin;
GInt32 m_nYMin;
GInt32 m_nXMax;
GInt32 m_nYMax;
GInt32 m_nComprOrgX;
GInt32 m_nComprOrgY;
virtual int UpdateMBR(TABMAPFile *poMapFile = NULL);
public:
TABFeature(OGRFeatureDefn *poDefnIn );
virtual ~TABFeature();
static TABFeature *CreateFromMapInfoType(int nMapInfoType,
OGRFeatureDefn *poDefn);
virtual TABFeature *CloneTABFeature(OGRFeatureDefn *pNewDefn = NULL);
virtual TABFeatureClass GetFeatureClass() { return TABFCNoGeomFeature; };
virtual int GetMapInfoType() { return m_nMapInfoType; };
virtual int ValidateMapInfoType(TABMAPFile *poMapFile = NULL)
{m_nMapInfoType=TAB_GEOM_NONE;
return m_nMapInfoType;};
GBool IsRecordDeleted() { return m_bDeletedFlag; };
void SetRecordDeleted(GBool bDeleted) { m_bDeletedFlag=bDeleted; };
/*-----------------------------------------------------------------
* TAB Support
*----------------------------------------------------------------*/
virtual int ReadRecordFromDATFile(TABDATFile *poDATFile);
virtual int ReadGeometryFromMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int WriteRecordToDATFile(TABDATFile *poDATFile,
TABINDFile *poINDFile, int *panIndexNo);
virtual int WriteGeometryToMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
GBool ValidateCoordType(TABMAPFile * poMapFile);
void ForceCoordTypeAndOrigin(int nMapInfoType, GBool bCompr,
GInt32 nComprOrgX, GInt32 nComprOrgY,
GInt32 nXMin, GInt32 nYMin,
GInt32 nXMax, GInt32 nYMax);
/*-----------------------------------------------------------------
* Mid/Mif Support
*----------------------------------------------------------------*/
virtual int ReadRecordFromMIDFile(MIDDATAFile *fp);
virtual int ReadGeometryFromMIFFile(MIDDATAFile *fp);
virtual int WriteRecordToMIDFile(MIDDATAFile *fp);
virtual int WriteGeometryToMIFFile(MIDDATAFile *fp);
void ReadMIFParameters(MIDDATAFile *fp);
void WriteMIFParameters(MIDDATAFile *fp);
/*-----------------------------------------------------------------
*----------------------------------------------------------------*/
void SetMBR(double dXMin, double dYMin,
double dXMax, double dYMax);
void GetMBR(double &dXMin, double &dYMin,
double &dXMax, double &dYMax);
void SetIntMBR(GInt32 nXMin, GInt32 nYMin,
GInt32 nXMax, GInt32 nYMax);
void GetIntMBR(GInt32 &nXMin, GInt32 &nYMin,
GInt32 &nXMax, GInt32 &nYMax);
virtual void DumpMID(FILE *fpOut = NULL);
virtual void DumpMIF(FILE *fpOut = NULL);
};
/*---------------------------------------------------------------------
* class TABPoint
*
* Feature class to handle old style MapInfo point symbols:
*
* TAB_GEOM_SYMBOL_C 0x01
* TAB_GEOM_SYMBOL 0x02
*
* Feature geometry will be a OGRPoint
*
* The symbol number is in the range [31..67], with 31=None and corresponds
* to one of the 35 predefined "Old MapInfo Symbols"
*
* NOTE: This class is also used as a base class for the other point
* symbol types TABFontPoint and TABCustomPoint.
*--------------------------------------------------------------------*/
class TABPoint: public TABFeature,
public ITABFeatureSymbol
{
public:
TABPoint(OGRFeatureDefn *poDefnIn);
virtual ~TABPoint();
virtual TABFeatureClass GetFeatureClass() { return TABFCPoint; };
virtual int ValidateMapInfoType(TABMAPFile *poMapFile = NULL);
virtual TABFeature *CloneTABFeature(OGRFeatureDefn *poNewDefn = NULL );
double GetX();
double GetY();
virtual int ReadGeometryFromMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int WriteGeometryToMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int ReadGeometryFromMIFFile(MIDDATAFile *fp);
virtual int WriteGeometryToMIFFile(MIDDATAFile *fp);
virtual const char *GetStyleString();
virtual void DumpMIF(FILE *fpOut = NULL);
};
/*---------------------------------------------------------------------
* class TABFontPoint
*
* Feature class to handle MapInfo Font Point Symbol types:
*
* TAB_GEOM_FONTSYMBOL_C 0x28
* TAB_GEOM_FONTSYMBOL 0x29
*
* Feature geometry will be a OGRPoint
*
* The symbol number refers to a character code in the specified Windows
* Font (e.g. "Windings").
*--------------------------------------------------------------------*/
class TABFontPoint: public TABPoint,
public ITABFeatureFont
{
protected:
double m_dAngle;
GInt16 m_nFontStyle; // Bold/shadow/halo/etc.
public:
TABFontPoint(OGRFeatureDefn *poDefnIn);
virtual ~TABFontPoint();
virtual TABFeatureClass GetFeatureClass() { return TABFCFontPoint; };
virtual TABFeature *CloneTABFeature(OGRFeatureDefn *poNewDefn = NULL );
virtual int ReadGeometryFromMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int WriteGeometryToMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int ReadGeometryFromMIFFile(MIDDATAFile *fp);
virtual int WriteGeometryToMIFFile(MIDDATAFile *fp);
virtual const char *GetStyleString();
GBool QueryFontStyle(TABFontStyle eStyleToQuery);
void ToggleFontStyle(TABFontStyle eStyleToToggle, GBool bStatus);
int GetFontStyleMIFValue();
void SetFontStyleMIFValue(int nStyle);
int GetFontStyleTABValue() {return m_nFontStyle;};
void SetFontStyleTABValue(int nStyle){m_nFontStyle=(GInt16)nStyle;};
// GetSymbolAngle(): Return angle in degrees counterclockwise
double GetSymbolAngle() {return m_dAngle;};
void SetSymbolAngle(double dAngle);
};
/*---------------------------------------------------------------------
* class TABCustomPoint
*
* Feature class to handle MapInfo Custom Point Symbol (Bitmap) types:
*
* TAB_GEOM_CUSTOMSYMBOL_C 0x2b
* TAB_GEOM_CUSTOMSYMBOL 0x2c
*
* Feature geometry will be a OGRPoint
*
* The symbol name is the name of a BMP file stored in the "CustSymb"
* directory (e.g. "arrow.BMP"). The symbol number has no meaning for
* this symbol type.
*--------------------------------------------------------------------*/
class TABCustomPoint: public TABPoint,
public ITABFeatureFont
{
protected:
GByte m_nCustomStyle; // Show BG/Apply Color
public:
GByte m_nUnknown_;
public:
TABCustomPoint(OGRFeatureDefn *poDefnIn);
virtual ~TABCustomPoint();
virtual TABFeatureClass GetFeatureClass() { return TABFCCustomPoint; };
virtual TABFeature *CloneTABFeature(OGRFeatureDefn *poNewDefn = NULL );
virtual int ReadGeometryFromMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int WriteGeometryToMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int ReadGeometryFromMIFFile(MIDDATAFile *fp);
virtual int WriteGeometryToMIFFile(MIDDATAFile *fp);
virtual const char *GetStyleString();
const char *GetSymbolNameRef() { return GetFontNameRef(); };
void SetSymbolName(const char *pszName) {SetFontName(pszName);};
GByte GetCustomSymbolStyle() {return m_nCustomStyle;}
void SetCustomSymbolStyle(GByte nStyle) {m_nCustomStyle = nStyle;}
};
/*---------------------------------------------------------------------
* class TABPolyline
*
* Feature class to handle the various MapInfo line types:
*
* TAB_GEOM_LINE_C 0x04
* TAB_GEOM_LINE 0x05
* TAB_GEOM_PLINE_C 0x07
* TAB_GEOM_PLINE 0x08
* TAB_GEOM_MULTIPLINE_C 0x25
* TAB_GEOM_MULTIPLINE 0x26
* TAB_GEOM_V450_MULTIPLINE_C 0x31
* TAB_GEOM_V450_MULTIPLINE 0x32
*
* Feature geometry can be either a OGRLineString or a OGRMultiLineString
*--------------------------------------------------------------------*/
class TABPolyline: public TABFeature,
public ITABFeaturePen
{
private:
GBool m_bCenterIsSet;
double m_dCenterX, m_dCenterY;
GBool m_bWriteTwoPointLineAsPolyline;
public:
TABPolyline(OGRFeatureDefn *poDefnIn);
virtual ~TABPolyline();
virtual TABFeatureClass GetFeatureClass() { return TABFCPolyline; };
virtual int ValidateMapInfoType(TABMAPFile *poMapFile = NULL);
virtual TABFeature *CloneTABFeature(OGRFeatureDefn *poNewDefn = NULL );
/* 2 methods to simplify access to rings in a multiple polyline
*/
int GetNumParts();
OGRLineString *GetPartRef(int nPartIndex);
GBool TwoPointLineAsPolyline();
void TwoPointLineAsPolyline(GBool bTwoPointLineAsPolyline);
virtual int ReadGeometryFromMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int WriteGeometryToMAPFile(TABMAPFile *poMapFile, TABMAPObjHdr *,
GBool bCoordDataOnly=FALSE,
TABMAPCoordBlock **ppoCoordBlock=NULL);
virtual int ReadGeometryFromMIFFile(MIDDATAFile *fp);
virtual int WriteGeometryToMIFFile(MIDDATAFile *fp);
virtual const char *GetStyleString();
virtual void DumpMIF(FILE *fpOut = NULL);
int GetCenter(double &dX, double &dY);
void SetCenter(double dX, double dY);
// MapInfo-specific attributes... made available through public vars
// for now.
GBool m_bSmooth;
};
/*---------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -