本文整理汇总了C++中OGRStyleTool类的典型用法代码示例。如果您正苦于以下问题:C++ OGRStyleTool类的具体用法?C++ OGRStyleTool怎么用?C++ OGRStyleTool使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OGRStyleTool类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteValue
OGRErr OGRDXFWriterLayer::WritePOINT( OGRFeature *poFeature )
{
WriteValue( 0, "POINT" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
WriteValue( 100, "AcDbPoint" );
// Write style pen color
OGRStyleTool *poTool = nullptr;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != nullptr )
{
oSM.InitFromFeature( poFeature );
if( oSM.GetPartCount() > 0 )
poTool = oSM.GetPart(0);
}
if( poTool && poTool->GetType() == OGRSTCPen )
{
OGRStylePen *poPen = (OGRStylePen *) poTool;
GBool bDefault;
if( poPen->Color(bDefault) != nullptr && !bDefault )
WriteValue( 62, ColorStringToDXFColor( poPen->Color(bDefault) ) );
}
delete poTool;
OGRPoint *poPoint = poFeature->GetGeometryRef()->toPoint();
WriteValue( 10, poPoint->getX() );
if( !WriteValue( 20, poPoint->getY() ) )
return OGRERR_FAILURE;
if( poPoint->getGeometryType() == wkbPoint25D )
{
if( !WriteValue( 30, poPoint->getZ() ) )
return OGRERR_FAILURE;
}
return OGRERR_NONE;
}
示例2: addstylestring2kml
void addstylestring2kml (
const char *pszStyleString,
StylePtr poKmlStyle,
KmlFactory * poKmlFactory,
PlacemarkPtr poKmlPlacemark,
OGRFeature * poOgrFeat )
{
LineStylePtr poKmlLineStyle = NULL;
PolyStylePtr poKmlPolyStyle = NULL;
IconStylePtr poKmlIconStyle = NULL;
LabelStylePtr poKmlLabelStyle = NULL;
/***** just bail now if stylestring is empty *****/
if ( !pszStyleString || !*pszStyleString ) {
return;
}
/***** create and init a style mamager with the style string *****/
OGRStyleMgr *poOgrSM = new OGRStyleMgr;
poOgrSM->InitStyleString ( pszStyleString );
/***** loop though the style parts *****/
int i;
for ( i = 0; i < poOgrSM->GetPartCount ( NULL ); i++ ) {
OGRStyleTool *poOgrST = poOgrSM->GetPart ( i, NULL );
if ( !poOgrST ) {
continue;
}
switch ( poOgrST->GetType ( ) ) {
case OGRSTCPen:
{
GBool nullcheck;
poKmlLineStyle = poKmlFactory->CreateLineStyle ( );
OGRStylePen *poStylePen = ( OGRStylePen * ) poOgrST;
/***** pen color *****/
int nR,
nG,
nB,
nA;
const char *pszcolor = poStylePen->Color ( nullcheck );
if ( !nullcheck
&& poStylePen->GetRGBFromString ( pszcolor, nR, nG, nB, nA ) ) {
poKmlLineStyle->set_color ( Color32 ( nA, nB, nG, nR ) );
}
double dfWidth = poStylePen->Width ( nullcheck );
if ( nullcheck )
dfWidth = 1.0;
poKmlLineStyle->set_width ( dfWidth );
break;
}
case OGRSTCBrush:
{
GBool nullcheck;
poKmlPolyStyle = poKmlFactory->CreatePolyStyle ( );
OGRStyleBrush *poStyleBrush = ( OGRStyleBrush * ) poOgrST;
/***** brush color *****/
int nR,
nG,
nB,
nA;
const char *pszcolor = poStyleBrush->ForeColor ( nullcheck );
if ( !nullcheck
&& poStyleBrush->GetRGBFromString ( pszcolor, nR, nG, nB, nA ) ) {
poKmlPolyStyle->set_color ( Color32 ( nA, nB, nG, nR ) );
}
break;
}
case OGRSTCSymbol:
{
GBool nullcheck;
GBool nullcheck2;
OGRStyleSymbol *poStyleSymbol = ( OGRStyleSymbol * ) poOgrST;
/***** id (kml icon) *****/
//.........这里部分代码省略.........
示例3: kml2stylestring
void kml2stylestring (
StylePtr poKmlStyle,
OGRStyleMgr * poOgrSM )
{
OGRStyleMgr * poOgrNewSM ;
OGRStyleTool *poOgrST = NULL;
OGRStyleTool *poOgrTmpST = NULL;
int i;
poOgrNewSM = new OGRStyleMgr( NULL );
/***** linestyle / pen *****/
if ( poKmlStyle->has_linestyle ( ) ) {
poOgrNewSM->InitStyleString ( NULL );
LineStylePtr poKmlLineStyle = poKmlStyle->get_linestyle ( );
poOgrTmpST = NULL;
for ( i = 0; i < poOgrSM->GetPartCount ( NULL ); i++ ) {
poOgrST = poOgrSM->GetPart ( i, NULL );
if ( !poOgrST )
continue;
if ( poOgrST->GetType ( ) == OGRSTCPen ) {
poOgrTmpST = poOgrST;
}
else {
poOgrNewSM->AddPart ( poOgrST );
delete poOgrST;
}
}
OGRStylePen *poOgrStylePen = kml2pen ( poKmlLineStyle,
( OGRStylePen *) poOgrTmpST);
poOgrNewSM->AddPart ( poOgrStylePen );
delete poOgrStylePen;
poOgrSM->InitStyleString ( poOgrNewSM->GetStyleString(NULL) );
}
/***** polystyle / brush *****/
if ( poKmlStyle->has_polystyle ( ) ) {
poOgrNewSM->InitStyleString ( NULL );
PolyStylePtr poKmlPolyStyle = poKmlStyle->get_polystyle ( );
poOgrTmpST = NULL;
for ( i = 0; i < poOgrSM->GetPartCount ( NULL ); i++ ) {
poOgrST = poOgrSM->GetPart ( i, NULL );
if ( !poOgrST )
continue;
if ( poOgrST->GetType ( ) == OGRSTCBrush ) {
poOgrTmpST = poOgrST;
}
else {
poOgrNewSM->AddPart ( poOgrST );
delete poOgrST;
}
}
OGRStyleBrush *poOgrStyleBrush = kml2brush ( poKmlPolyStyle,
( OGRStyleBrush *) poOgrTmpST );
poOgrNewSM->AddPart ( poOgrStyleBrush );
delete poOgrStyleBrush;
poOgrSM->InitStyleString ( poOgrNewSM->GetStyleString(NULL) );
}
/***** iconstyle / symbol *****/
if ( poKmlStyle->has_iconstyle ( ) ) {
poOgrNewSM->InitStyleString ( NULL );
IconStylePtr poKmlIconStyle = poKmlStyle->get_iconstyle ( );
poOgrTmpST = NULL;
for ( i = 0; i < poOgrSM->GetPartCount ( NULL ); i++ ) {
poOgrST = poOgrSM->GetPart ( i, NULL );
if ( !poOgrST )
continue;
if ( poOgrST->GetType ( ) == OGRSTCSymbol ) {
poOgrTmpST = poOgrST;
}
else {
//.........这里部分代码省略.........
示例4: WriteColumnDeclaration
//.........这里部分代码省略.........
if( nOffset < 0 )
{
VSIFPrintfL(fp, "-" );
nHours = ABS(nHours);
}
else
VSIFPrintfL(fp, "+" );
VSIFPrintfL(fp, "%02d%02d", nHours, nMinutes );
}
}
else
{
VSIFPrintfL(fp, "%s", poFeature->GetFieldAsString(i));
}
}
if( bClassicGML )
VSIFPrintfL(fp, "</%s>\n", pszName);
else
VSIFPrintfL(fp, "</property>\n");
CPLFree(pszName);
}
/* Add OGR_STYLE from feature style string (if asked) */
if( bAddOGRStyleField && poFeatureDefn->GetFieldIndex("OGR_STYLE") < 0 )
{
if( bClassicGML )
VSIFPrintfL(fp, " <OGR_STYLE>");
else
VSIFPrintfL(fp, " <property name=\"%s\">", "OGR_STYLE");
if( poFeature->GetStyleString() != NULL )
{
char* pszValue = OGRGetXML_UTF8_EscapedString( poFeature->GetStyleString() );
VSIFPrintfL(fp, "%s", pszValue);
CPLFree(pszValue);
}
if( bClassicGML )
VSIFPrintfL(fp, "</OGR_STYLE>\n");
else
VSIFPrintfL(fp, "</property>\n");
}
/* Derive R_G_B field from feature style string */
if( bAddRGBField && poFeatureDefn->GetFieldIndex("R_G_B") < 0 )
{
if( bClassicGML )
VSIFPrintfL(fp, " <R_G_B>");
else
VSIFPrintfL(fp, " <property name=\"%s\">", "R_G_B");
if( poFeature->GetStyleString() != NULL )
{
OGRGeometry* poGeom = poFeature->GetGeometryRef();
OGRwkbGeometryType eGeomType =
poGeom ? wkbFlatten(poGeom->getGeometryType()) : wkbUnknown;
OGRStyleMgr oMgr;
oMgr.InitFromFeature(poFeature);
for(int i=0;i<oMgr.GetPartCount();i++)
{
OGRStyleTool* poTool = oMgr.GetPart(i);
if( poTool != NULL )
{
const char* pszColor = NULL;
if( poTool->GetType() == OGRSTCPen &&
eGeomType != wkbPolygon && eGeomType != wkbMultiPolygon )
{
GBool bIsNull;
pszColor = ((OGRStylePen*)poTool)->Color(bIsNull);
if( bIsNull ) pszColor = NULL;
}
else if( poTool->GetType() == OGRSTCBrush )
{
GBool bIsNull;
pszColor = ((OGRStyleBrush*)poTool)->ForeColor(bIsNull);
if( bIsNull ) pszColor = NULL;
}
int R, G, B, A;
if( pszColor != NULL &&
poTool->GetRGBFromString(pszColor, R, G, B, A) && A != 0 )
{
VSIFPrintfL(fp, "%02X%02X%02X", R, G, B);
}
delete poTool;
}
}
}
if( bClassicGML )
VSIFPrintfL(fp, "</R_G_B>\n");
else
VSIFPrintfL(fp, "</property>\n");
}
VSIFPrintfL(fp, " </feature>\n");
if( bClassicGML )
VSIFPrintfL(fp, " </featureMember>\n");
poFeature->SetFID(nNextFID ++);
return OGRERR_NONE;
}
示例5: wkbFlatten
OGRErr OGRDXFWriterLayer::WritePOLYLINE( OGRFeature *poFeature,
const OGRGeometry *poGeom )
{
/* -------------------------------------------------------------------- */
/* For now we handle multilinestrings by writing a series of */
/* entities. */
/* -------------------------------------------------------------------- */
if( poGeom == nullptr )
poGeom = poFeature->GetGeometryRef();
if ( poGeom->IsEmpty() )
{
return OGRERR_NONE;
}
if( wkbFlatten(poGeom->getGeometryType()) == wkbMultiPolygon
|| wkbFlatten(poGeom->getGeometryType()) == wkbMultiLineString )
{
const OGRGeometryCollection *poGC = poGeom->toGeometryCollection();
OGRErr eErr = OGRERR_NONE;
for( auto&& poMember: *poGC )
{
eErr = WritePOLYLINE( poFeature, poMember );
if( eErr != OGRERR_NONE )
break;
}
return eErr;
}
/* -------------------------------------------------------------------- */
/* Polygons are written with on entity per ring. */
/* -------------------------------------------------------------------- */
if( wkbFlatten(poGeom->getGeometryType()) == wkbPolygon
|| wkbFlatten(poGeom->getGeometryType()) == wkbTriangle)
{
const OGRPolygon *poPoly = poGeom->toPolygon();
OGRErr eErr = OGRERR_NONE;
for( auto&& poRing: *poPoly )
{
eErr = WritePOLYLINE( poFeature, poRing );
if( eErr != OGRERR_NONE )
break;
}
return eErr;
}
/* -------------------------------------------------------------------- */
/* Do we now have a geometry we can work with? */
/* -------------------------------------------------------------------- */
if( wkbFlatten(poGeom->getGeometryType()) != wkbLineString )
return OGRERR_UNSUPPORTED_GEOMETRY_TYPE;
const OGRLineString *poLS = poGeom->toLineString();
/* -------------------------------------------------------------------- */
/* Write as a lightweight polygon, */
/* or as POLYLINE if the line contains different heights */
/* -------------------------------------------------------------------- */
int bHasDifferentZ = FALSE;
if( poLS->getGeometryType() == wkbLineString25D )
{
double z0 = poLS->getZ(0);
for( int iVert = 0; iVert < poLS->getNumPoints(); iVert++ )
{
if (z0 != poLS->getZ(iVert))
{
bHasDifferentZ = TRUE;
break;
}
}
}
WriteValue( 0, bHasDifferentZ ? "POLYLINE" : "LWPOLYLINE" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
if( bHasDifferentZ )
{
WriteValue( 100, "AcDb3dPolyline" );
WriteValue( 10, 0.0 );
WriteValue( 20, 0.0 );
WriteValue( 30, 0.0 );
}
else
WriteValue( 100, "AcDbPolyline" );
if( EQUAL( poGeom->getGeometryName(), "LINEARRING" ) )
WriteValue( 70, 1 + (bHasDifferentZ ? 8 : 0) );
else
WriteValue( 70, 0 + (bHasDifferentZ ? 8 : 0) );
if( !bHasDifferentZ )
WriteValue( 90, poLS->getNumPoints() );
else
WriteValue( 66, "1" ); // Vertex Flag
/* -------------------------------------------------------------------- */
/* Do we have styling information? */
/* -------------------------------------------------------------------- */
OGRStyleTool *poTool = nullptr;
//.........这里部分代码省略.........
示例6: WriteHATCH
OGRErr OGRDXFWriterLayer::WriteHATCH( OGRFeature *poFeature,
OGRGeometry *poGeom )
{
/* -------------------------------------------------------------------- */
/* For now we handle multipolygons by writing a series of */
/* entities. */
/* -------------------------------------------------------------------- */
if( poGeom == nullptr )
poGeom = poFeature->GetGeometryRef();
if ( poGeom->IsEmpty() )
{
return OGRERR_NONE;
}
if( wkbFlatten(poGeom->getGeometryType()) == wkbMultiPolygon )
{
OGRErr eErr = OGRERR_NONE;
for( auto&& poMember: poGeom->toMultiPolygon() )
{
eErr = WriteHATCH( poFeature, poMember );
if( eErr != OGRERR_NONE )
break;
}
return eErr;
}
/* -------------------------------------------------------------------- */
/* Do we now have a geometry we can work with? */
/* -------------------------------------------------------------------- */
if( wkbFlatten(poGeom->getGeometryType()) != wkbPolygon &&
wkbFlatten(poGeom->getGeometryType()) != wkbTriangle )
{
return OGRERR_UNSUPPORTED_GEOMETRY_TYPE;
}
/* -------------------------------------------------------------------- */
/* Write as a hatch. */
/* -------------------------------------------------------------------- */
WriteValue( 0, "HATCH" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
WriteValue( 100, "AcDbHatch" );
// Figure out "average" elevation
OGREnvelope3D oEnv;
poGeom->getEnvelope( &oEnv );
WriteValue( 10, 0 ); // elevation point X = 0
WriteValue( 20, 0 ); // elevation point Y = 0
// elevation point Z = constant elevation
WriteValue( 30, oEnv.MinZ + ( oEnv.MaxZ - oEnv.MinZ ) / 2 );
WriteValue(210, 0 ); // extrusion direction X
WriteValue(220, 0 ); // extrusion direction Y
WriteValue(230,1.0); // extrusion direction Z
WriteValue( 2, "SOLID" ); // fill pattern
WriteValue( 70, 1 ); // solid fill
WriteValue( 71, 0 ); // associativity
/* -------------------------------------------------------------------- */
/* Do we have styling information? */
/* -------------------------------------------------------------------- */
OGRStyleTool *poTool = nullptr;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != nullptr )
{
oSM.InitFromFeature( poFeature );
if( oSM.GetPartCount() > 0 )
poTool = oSM.GetPart(0);
}
// Write style brush fore color
if( poTool && poTool->GetType() == OGRSTCBrush )
{
OGRStyleBrush *poBrush = (OGRStyleBrush *) poTool;
GBool bDefault;
if( poBrush->ForeColor(bDefault) != nullptr && !bDefault )
WriteValue( 62, ColorStringToDXFColor( poBrush->ForeColor(bDefault) ) );
}
delete poTool;
/* -------------------------------------------------------------------- */
/* Handle a PEN tool to control drawing color and width. */
/* Perhaps one day also dottedness, etc. */
/* -------------------------------------------------------------------- */
#ifdef notdef
if( poTool && poTool->GetType() == OGRSTCPen )
{
OGRStylePen *poPen = (OGRStylePen *) poTool;
GBool bDefault;
if( poPen->Color(bDefault) != NULL && !bDefault )
WriteValue( 62, ColorStringToDXFColor( poPen->Color(bDefault) ) );
double dfWidthInMM = poPen->Width(bDefault);
//.........这里部分代码省略.........
示例7: wkbFlatten
//.........这里部分代码省略.........
{
if (z0 != poLS->getZ(iVert))
{
bHasDifferentZ = TRUE;
break;
}
}
}
WriteValue( 0, bHasDifferentZ ? "POLYLINE" : "LWPOLYLINE" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
if( bHasDifferentZ )
{
WriteValue( 100, "AcDb3dPolyline" );
WriteValue( 10, 0.0 );
WriteValue( 20, 0.0 );
WriteValue( 30, 0.0 );
}
else
WriteValue( 100, "AcDbPolyline" );
if( EQUAL( poGeom->getGeometryName(), "LINEARRING" ) )
WriteValue( 70, 1 + (bHasDifferentZ ? 8 : 0) );
else
WriteValue( 70, 0 + (bHasDifferentZ ? 8 : 0) );
if( !bHasDifferentZ )
WriteValue( 90, poLS->getNumPoints() );
else
WriteValue( 66, "1" ); // Vertex Flag
/* -------------------------------------------------------------------- */
/* Do we have styling information? */
/* -------------------------------------------------------------------- */
OGRStyleTool *poTool = NULL;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != NULL )
{
oSM.InitFromFeature( poFeature );
if( oSM.GetPartCount() > 0 )
poTool = oSM.GetPart(0);
}
/* -------------------------------------------------------------------- */
/* Handle a PEN tool to control drawing color and width. */
/* Perhaps one day also dottedness, etc. */
/* -------------------------------------------------------------------- */
if( poTool && poTool->GetType() == OGRSTCPen )
{
OGRStylePen *poPen = (OGRStylePen *) poTool;
GBool bDefault;
if( poPen->Color(bDefault) != NULL && !bDefault )
WriteValue( 62, ColorStringToDXFColor( poPen->Color(bDefault) ) );
// we want to fetch the width in ground units.
poPen->SetUnit( OGRSTUGround, 1.0 );
double dfWidth = poPen->Width(bDefault);
if( !bDefault )
WriteValue( 370, (int) floor(dfWidth * 100 + 0.5) );
}
/* -------------------------------------------------------------------- */
/* Do we have a Linetype for the feature? */
示例8: WriteValue
OGRErr OGRDXFWriterLayer::WriteTEXT( OGRFeature *poFeature )
{
WriteValue( 0, "MTEXT" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
WriteValue( 100, "AcDbMText" );
/* -------------------------------------------------------------------- */
/* Do we have styling information? */
/* -------------------------------------------------------------------- */
OGRStyleTool *poTool = NULL;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != NULL )
{
oSM.InitFromFeature( poFeature );
if( oSM.GetPartCount() > 0 )
poTool = oSM.GetPart(0);
}
/* ==================================================================== */
/* Process the LABEL tool. */
/* ==================================================================== */
if( poTool && poTool->GetType() == OGRSTCLabel )
{
OGRStyleLabel *poLabel = (OGRStyleLabel *) poTool;
GBool bDefault;
/* -------------------------------------------------------------------- */
/* Color */
/* -------------------------------------------------------------------- */
if( poLabel->ForeColor(bDefault) != NULL && !bDefault )
WriteValue( 62, ColorStringToDXFColor(
poLabel->ForeColor(bDefault) ) );
/* -------------------------------------------------------------------- */
/* Angle */
/* -------------------------------------------------------------------- */
double dfAngle = poLabel->Angle(bDefault);
// The DXF2000 reference says this is in radians, but in files
// I see it seems to be in degrees. Perhaps this is version dependent?
if( !bDefault )
WriteValue( 50, dfAngle );
/* -------------------------------------------------------------------- */
/* Height - We need to fetch this in georeferenced units - I'm */
/* doubt the default translation mechanism will be much good. */
/* -------------------------------------------------------------------- */
poTool->SetUnit( OGRSTUGround );
double dfHeight = poLabel->Size(bDefault);
if( !bDefault )
WriteValue( 40, dfHeight );
/* -------------------------------------------------------------------- */
/* Anchor / Attachment Point */
/* -------------------------------------------------------------------- */
int nAnchor = poLabel->Anchor(bDefault);
if( !bDefault )
{
const static int anAnchorMap[] =
{ -1, 7, 8, 9, 4, 5, 6, 1, 2, 3, 7, 8, 9 };
if( nAnchor > 0 && nAnchor < 13 )
WriteValue( 71, anAnchorMap[nAnchor] );
}
/* -------------------------------------------------------------------- */
/* Escape the text, and convert to ISO8859. */
/* -------------------------------------------------------------------- */
const char *pszText = poLabel->TextString( bDefault );
if( pszText != NULL && !bDefault )
{
CPLString osEscaped = TextEscape( pszText );
WriteValue( 1, osEscaped );
}
}
delete poTool;
/* -------------------------------------------------------------------- */
/* Write the location. */
/* -------------------------------------------------------------------- */
OGRPoint *poPoint = (OGRPoint *) poFeature->GetGeometryRef();
WriteValue( 10, poPoint->getX() );
if( !WriteValue( 20, poPoint->getY() ) )
return OGRERR_FAILURE;
if( poPoint->getGeometryType() == wkbPoint25D )
{
if( !WriteValue( 30, poPoint->getZ() ) )
return OGRERR_FAILURE;
}
//.........这里部分代码省略.........
示例9: WriteHATCH
OGRErr OGRDXFWriterLayer::WriteHATCH( OGRFeature *poFeature,
OGRGeometry *poGeom )
{
/* -------------------------------------------------------------------- */
/* For now we handle multipolygons by writing a series of */
/* entities. */
/* -------------------------------------------------------------------- */
if( poGeom == NULL )
poGeom = poFeature->GetGeometryRef();
if ( poGeom->IsEmpty() )
{
return OGRERR_NONE;
}
if( wkbFlatten(poGeom->getGeometryType()) == wkbMultiPolygon )
{
OGRGeometryCollection *poGC = (OGRGeometryCollection *) poGeom;
int iGeom;
OGRErr eErr = OGRERR_NONE;
for( iGeom = 0;
eErr == OGRERR_NONE && iGeom < poGC->getNumGeometries();
iGeom++ )
{
eErr = WriteHATCH( poFeature, poGC->getGeometryRef( iGeom ) );
}
return eErr;
}
/* -------------------------------------------------------------------- */
/* Do we now have a geometry we can work with? */
/* -------------------------------------------------------------------- */
if( wkbFlatten(poGeom->getGeometryType()) != wkbPolygon )
return OGRERR_UNSUPPORTED_GEOMETRY_TYPE;
/* -------------------------------------------------------------------- */
/* Write as a hatch. */
/* -------------------------------------------------------------------- */
WriteValue( 0, "HATCH" );
WriteCore( poFeature );
WriteValue( 100, "AcDbEntity" );
WriteValue( 100, "AcDbHatch" );
WriteValue( 2, "SOLID" ); // fill pattern
WriteValue( 70, 1 ); // solid fill
WriteValue( 71, 0 ); // associativity
/* -------------------------------------------------------------------- */
/* Do we have styling information? */
/* -------------------------------------------------------------------- */
OGRStyleTool *poTool = NULL;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != NULL )
{
oSM.InitFromFeature( poFeature );
if( oSM.GetPartCount() > 0 )
poTool = oSM.GetPart(0);
}
/* -------------------------------------------------------------------- */
/* Handle a PEN tool to control drawing color and width. */
/* Perhaps one day also dottedness, etc. */
/* -------------------------------------------------------------------- */
#ifdef notdef
if( poTool && poTool->GetType() == OGRSTCPen )
{
OGRStylePen *poPen = (OGRStylePen *) poTool;
GBool bDefault;
if( poPen->Color(bDefault) != NULL && !bDefault )
WriteValue( 62, ColorStringToDXFColor( poPen->Color(bDefault) ) );
double dfWidthInMM = poPen->Width(bDefault);
if( !bDefault )
WriteValue( 370, (int) floor(dfWidthInMM * 100 + 0.5) );
}
/* -------------------------------------------------------------------- */
/* Do we have a Linetype for the feature? */
/* -------------------------------------------------------------------- */
CPLString osLineType = poFeature->GetFieldAsString( "Linetype" );
if( osLineType.size() > 0
&& (poDS->oHeaderDS.LookupLineType( osLineType ) != NULL
|| oNewLineTypes.count(osLineType) > 0 ) )
{
// Already define -> just reference it.
WriteValue( 6, osLineType );
}
else if( poTool != NULL && poTool->GetType() == OGRSTCPen )
{
CPLString osDefinition = PrepareLineTypeDefinition( poFeature,
poTool );
if( osDefinition != "" && osLineType == "" )
//.........这里部分代码省略.........
示例10: CPLAssert
OGRErr OGRKMLLayer::ICreateFeature( OGRFeature* poFeature )
{
CPLAssert( NULL != poFeature );
CPLAssert( NULL != poDS_ );
if( !bWriter_ )
return OGRERR_FAILURE;
if( bClosedForWriting )
{
CPLError(CE_Failure, CPLE_NotSupported,
"Interleaved feature adding to different layers is not supported");
return OGRERR_FAILURE;
}
VSILFILE *fp = poDS_->GetOutputFP();
CPLAssert( NULL != fp );
if( poDS_->GetLayerCount() == 1 && nWroteFeatureCount_ == 0 )
{
CPLString osRet = WriteSchema();
if( osRet.size() )
VSIFPrintfL( fp, "%s", osRet.c_str() );
bSchemaWritten_ = TRUE;
VSIFPrintfL( fp, "<Folder><name>%s</name>\n", pszName_);
}
VSIFPrintfL( fp, " <Placemark>\n" );
if( poFeature->GetFID() == OGRNullFID )
poFeature->SetFID( iNextKMLId_++ );
// Find and write the name element
if (NULL != poDS_->GetNameField())
{
for( int iField = 0; iField < poFeatureDefn_->GetFieldCount(); iField++ )
{
OGRFieldDefn *poField = poFeatureDefn_->GetFieldDefn( iField );
if( poFeature->IsFieldSet( iField )
&& EQUAL(poField->GetNameRef(), poDS_->GetNameField()) )
{
const char *pszRaw = poFeature->GetFieldAsString( iField );
while( *pszRaw == ' ' )
pszRaw++;
char *pszEscaped = OGRGetXML_UTF8_EscapedString( pszRaw );
VSIFPrintfL( fp, "\t<name>%s</name>\n", pszEscaped);
CPLFree( pszEscaped );
}
}
}
if (NULL != poDS_->GetDescriptionField())
{
for( int iField = 0; iField < poFeatureDefn_->GetFieldCount(); iField++ )
{
OGRFieldDefn *poField = poFeatureDefn_->GetFieldDefn( iField );
if( poFeature->IsFieldSet( iField )
&& EQUAL(poField->GetNameRef(), poDS_->GetDescriptionField()) )
{
const char *pszRaw = poFeature->GetFieldAsString( iField );
while( *pszRaw == ' ' )
pszRaw++;
char *pszEscaped = OGRGetXML_UTF8_EscapedString( pszRaw );
VSIFPrintfL( fp, "\t<description>%s</description>\n", pszEscaped);
CPLFree( pszEscaped );
}
}
}
OGRwkbGeometryType eGeomType = wkbNone;
if (poFeature->GetGeometryRef() != NULL)
eGeomType = wkbFlatten(poFeature->GetGeometryRef()->getGeometryType());
if ( wkbPolygon == eGeomType
|| wkbMultiPolygon == eGeomType
|| wkbLineString == eGeomType
|| wkbMultiLineString == eGeomType )
{
OGRStylePen *poPen = NULL;
OGRStyleMgr oSM;
if( poFeature->GetStyleString() != NULL )
{
oSM.InitFromFeature( poFeature );
int i;
for(i=0; i<oSM.GetPartCount();i++)
{
OGRStyleTool *poTool = oSM.GetPart(i);
if (poTool && poTool->GetType() == OGRSTCPen )
{
poPen = (OGRStylePen*) poTool;
break;
}
//.........这里部分代码省略.........