?? mitab_feature.cpp
字號(hào):
poGeom = GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
poPoint = (OGRPoint*)poGeom;
else
{
CPLError(CE_Failure, CPLE_AssertionFailed,
"TABPoint: Missing or Invalid Geometry!");
return 0.0;
}
return poPoint->getX();
}
/**********************************************************************
* TABPoint::GetY()
*
* Return this point's Y coordinate.
**********************************************************************/
double TABPoint::GetY()
{
OGRGeometry *poGeom;
OGRPoint *poPoint=NULL;
/*-----------------------------------------------------------------
* Fetch and validate geometry
*----------------------------------------------------------------*/
poGeom = GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
poPoint = (OGRPoint*)poGeom;
else
{
CPLError(CE_Failure, CPLE_AssertionFailed,
"TABPoint: Missing or Invalid Geometry!");
return 0.0;
}
return poPoint->getY();
}
/**********************************************************************
* TABPoint::GetStyleString()
*
* Return style string for this feature.
*
* Style String is built only once during the first call to GetStyleString().
**********************************************************************/
const char *TABPoint::GetStyleString()
{
if (m_pszStyleString == NULL)
{
m_pszStyleString = CPLStrdup(GetSymbolStyleString());
}
return m_pszStyleString;
}
/**********************************************************************
* TABPoint::DumpMIF()
*
* Dump feature geometry in a format similar to .MIF POINTs.
**********************************************************************/
void TABPoint::DumpMIF(FILE *fpOut /*=NULL*/)
{
OGRGeometry *poGeom;
OGRPoint *poPoint;
if (fpOut == NULL)
fpOut = stdout;
/*-----------------------------------------------------------------
* Fetch and validate geometry
*----------------------------------------------------------------*/
poGeom = GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
poPoint = (OGRPoint*)poGeom;
else
{
CPLError(CE_Failure, CPLE_AssertionFailed,
"TABPoint: Missing or Invalid Geometry!");
return;
}
/*-----------------------------------------------------------------
* Generate output
*----------------------------------------------------------------*/
fprintf(fpOut, "POINT %.15g %.15g\n", poPoint->getX(), poPoint->getY() );
DumpSymbolDef(fpOut);
/*-----------------------------------------------------------------
* Handle stuff specific to derived classes
*----------------------------------------------------------------*/
if (GetFeatureClass() == TABFCFontPoint)
{
TABFontPoint *poFeature = (TABFontPoint *)this;
fprintf(fpOut, " m_nFontStyle = 0x%2.2x (%d)\n",
poFeature->GetFontStyleTABValue(),
poFeature->GetFontStyleTABValue());
poFeature->DumpFontDef(fpOut);
}
if (GetFeatureClass() == TABFCCustomPoint)
{
TABCustomPoint *poFeature = (TABCustomPoint *)this;
fprintf(fpOut, " m_nUnknown_ = 0x%2.2x (%d)\n",
poFeature->m_nUnknown_, poFeature->m_nUnknown_);
fprintf(fpOut, " m_nCustomStyle = 0x%2.2x (%d)\n",
poFeature->GetCustomSymbolStyle(),
poFeature->GetCustomSymbolStyle());
poFeature->DumpFontDef(fpOut);
}
fflush(fpOut);
}
/*=====================================================================
* class TABFontPoint
*====================================================================*/
/**********************************************************************
* TABFontPoint::TABFontPoint()
*
* Constructor.
**********************************************************************/
TABFontPoint::TABFontPoint(OGRFeatureDefn *poDefnIn):
TABPoint(poDefnIn)
{
m_nFontStyle = 0;
m_dAngle = 0.0;
}
/**********************************************************************
* TABFontPoint::~TABFontPoint()
*
* Destructor.
**********************************************************************/
TABFontPoint::~TABFontPoint()
{
}
/**********************************************************************
* TABFontPoint::CloneTABFeature()
*
* Duplicate feature, including stuff specific to each TABFeature type.
*
* This method calls the generic TABFeature::CloneTABFeature() and
* then copies any members specific to its own type.
**********************************************************************/
TABFeature *TABFontPoint::CloneTABFeature(OGRFeatureDefn *poNewDefn /*=NULL*/)
{
/*-----------------------------------------------------------------
* Alloc new feature and copy the base stuff
*----------------------------------------------------------------*/
TABFontPoint *poNew = new TABFontPoint(poNewDefn ? poNewDefn :
GetDefnRef());
CopyTABFeatureBase(poNew);
/*-----------------------------------------------------------------
* And members specific to this class
*----------------------------------------------------------------*/
// ITABFeatureSymbol
*(poNew->GetSymbolDefRef()) = *GetSymbolDefRef();
// ITABFeatureFont
*(poNew->GetFontDefRef()) = *GetFontDefRef();
poNew->SetSymbolAngle( GetSymbolAngle() );
poNew->SetFontStyleTABValue( GetFontStyleTABValue() );
return poNew;
}
/**********************************************************************
* TABFontPoint::ReadGeometryFromMAPFile()
*
* Fill the geometry and representation (color, etc...) part of the
* feature from the contents of the .MAP object pointed to by poMAPFile.
*
* It is assumed that poMAPFile currently points to the beginning of
* a map object.
*
* Returns 0 on success, -1 on error, in which case CPLError() will have
* been called.
**********************************************************************/
int TABFontPoint::ReadGeometryFromMAPFile(TABMAPFile *poMapFile,
TABMAPObjHdr *poObjHdr,
GBool bCoordBlockDataOnly /*=FALSE*/,
TABMAPCoordBlock ** /*ppoCoordBlock=NULL*/)
{
double dX, dY;
OGRGeometry *poGeometry;
/* Nothing to do for bCoordBlockDataOnly (used by index splitting) */
if (bCoordBlockDataOnly)
return 0;
/*-----------------------------------------------------------------
* Fetch and validate geometry type
*----------------------------------------------------------------*/
m_nMapInfoType = poObjHdr->m_nType;
if (m_nMapInfoType != TAB_GEOM_FONTSYMBOL &&
m_nMapInfoType != TAB_GEOM_FONTSYMBOL_C )
{
CPLError(CE_Failure, CPLE_AssertionFailed,
"ReadGeometryFromMAPFile(): unsupported geometry type %d (0x%2.2x)",
m_nMapInfoType, m_nMapInfoType);
return -1;
}
/*-----------------------------------------------------------------
* Read object information
* NOTE: This symbol type does not contain a reference to a
* SymbolDef block in the file, but we still use the m_sSymbolDef
* structure to store the information inside the class so that the
* ITABFeatureSymbol methods work properly for the class user.
*----------------------------------------------------------------*/
TABMAPObjFontPoint *poPointHdr = (TABMAPObjFontPoint *)poObjHdr;
m_nSymbolDefIndex = -1;
m_sSymbolDef.nRefCount = 0;
m_sSymbolDef.nSymbolNo = poPointHdr->m_nSymbolId; // shape
m_sSymbolDef.nPointSize = poPointHdr->m_nPointSize; // point size
m_nFontStyle = poPointHdr->m_nFontStyle; // font style
m_sSymbolDef.rgbColor = (poPointHdr->m_nR*256*256 +
poPointHdr->m_nG*256 +
poPointHdr->m_nB);
/*-------------------------------------------------------------
* Symbol Angle, in thenths of degree.
* Contrary to arc start/end angles, no conversion based on
* origin quadrant is required here
*------------------------------------------------------------*/
m_dAngle = poPointHdr->m_nAngle/10.0;
m_nFontDefIndex = poPointHdr->m_nFontId; // Font name index
poMapFile->ReadFontDef(m_nFontDefIndex, &m_sFontDef);
/*-----------------------------------------------------------------
* Create and fill geometry object
*----------------------------------------------------------------*/
poMapFile->Int2Coordsys(poPointHdr->m_nX, poPointHdr->m_nY, dX, dY);
poGeometry = new OGRPoint(dX, dY);
SetGeometryDirectly(poGeometry);
SetMBR(dX, dY, dX, dY);
SetIntMBR(poObjHdr->m_nMinX, poObjHdr->m_nMinY,
poObjHdr->m_nMaxX, poObjHdr->m_nMaxY);
return 0;
}
/**********************************************************************
* TABFontPoint::WriteGeometryToMAPFile()
*
* Write the geometry and representation (color, etc...) part of the
* feature to the .MAP object pointed to by poMAPFile.
*
* It is assumed that poMAPFile currently points to a valid map object.
*
* Returns 0 on success, -1 on error, in which case CPLError() will have
* been called.
**********************************************************************/
int TABFontPoint::WriteGeometryToMAPFile(TABMAPFile *poMapFile,
TABMAPObjHdr *poObjHdr,
GBool bCoordBlockDataOnly /*=FALSE*/,
TABMAPCoordBlock ** /*ppoCoordBlock=NULL*/)
{
GInt32 nX, nY;
OGRGeometry *poGeom;
OGRPoint *poPoint;
/* Nothing to do for bCoordBlockDataOnly (used by index splitting) */
if (bCoordBlockDataOnly)
return 0;
/*-----------------------------------------------------------------
* We assume that ValidateMapInfoType() was called already and that
* the type in poObjHdr->m_nType is valid.
*----------------------------------------------------------------*/
CPLAssert(m_nMapInfoType == poObjHdr->m_nType);
/*-----------------------------------------------------------------
* Fetch and validate geometry
*----------------------------------------------------------------*/
poGeom = GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
poPoint = (OGRPoint*)poGeom;
else
{
CPLError(CE_Failure, CPLE_AssertionFailed,
"TABFontPoint: Missing or Invalid Geometry!");
return -1;
}
poMapFile->Coordsys2Int(poPoint->getX(), poPoint->getY(), nX, nY);
/*-----------------------------------------------------------------
* Copy object information
* NOTE: This symbol type does not contain a reference to a
* SymbolDef block in the file, but we still use the m_sSymbolDef
* structure to store the information inside the class so that the
* ITABFeatureSymbol methods work properly for the class user.
*----------------------------------------------------------------*/
TABMAPObjFontPoint *poPointHdr = (TABMAPObjFontPoint *)poObjHdr;
poPointHdr->m_nX = nX;
poPointHdr->m_nY = nY;
poPointHdr->SetMBR(nX, nY, nX, nY);
poPointHdr->m_nSymbolId = (GByte)m_sSymbolDef.nSymbolNo; // shape
poPointHdr->m_nPointSize = (GByte)m_sSymbolDef.nPointSize; // point size
poPointHdr->m_nFontStyle = m_nFontStyle; // font style
poPointHdr->m_nR = COLOR_R(m_sSymbolDef.rgbColor);
poPointHdr->m_nG = COLOR_G(m_sSymbolDef.rgbColor);
poPointHdr->m_nB = COLOR_B(m_sSymbolDef.rgbColor);
/*-------------------------------------------------------------
* Symbol Angle, in thenths of degree.
* Contrary to arc start/end angles, no conversion based on
* origin quadrant is required here
*------------------------------------------------------------*/
poPointHdr->m_nAngle = ROUND_INT(m_dAngle * 10.0);
// Write Font Def
m_nFontDefIndex = poMapFile->WriteFontDef(&m_sFontDef);
poPointHdr->m_nFontId = m_nFontDefIndex; // Font name index
if (CPLGetLastErrorNo() != 0)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -