00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef OGR_FEATURESTYLE_INCLUDE
00031 #define OGR_FEATURESTYLE_INCLUDE
00032
00033 #include "cpl_conv.h"
00034 #include "cpl_string.h"
00035 #include "ogr_core.h"
00036
00037 class OGRFeature;
00038
00045
00046
00047
00048
00049 typedef enum ogr_style_type
00050 {
00051 OGRSTypeString,
00052 OGRSTypeDouble,
00053 OGRSTypeInteger,
00054 OGRSTypeBoolean
00055 } OGRSType;
00056
00057 typedef struct ogr_style_param
00058 {
00059 int eParam;
00060 const char *pszToken;
00061 GBool bGeoref;
00062 OGRSType eType;
00063 } OGRStyleParamId;
00064
00065
00066 typedef struct ogr_style_value
00067 {
00068 char *pszValue;
00069 double dfValue;
00070 int nValue;
00071 GBool bValid;
00072 OGRSTUnitId eUnit;
00073 } OGRStyleValue;
00074
00075
00076
00077
00081 class CPL_DLL OGRStyleTable
00082 {
00083 private:
00084 char **m_papszStyleTable;
00085
00086 CPLString osLastRequestedStyleName;
00087 int iNextStyle;
00088
00089 public:
00090 OGRStyleTable();
00091 ~OGRStyleTable();
00092 GBool AddStyle(const char *pszName,const char *pszStyleString);
00093 GBool RemoveStyle(const char *pszName);
00094 GBool ModifyStyle(const char *pszName, const char *pszStyleString);
00095
00096 GBool SaveStyleTable(const char *pszFilename);
00097 GBool LoadStyleTable(const char *pszFilename);
00098 const char *Find(const char *pszStyleString);
00099 GBool IsExist(const char *pszName);
00100 const char *GetStyleName(const char *pszName);
00101 void Print(FILE *fpOut);
00102 void Clear();
00103 OGRStyleTable *Clone();
00104 void ResetStyleStringReading();
00105 const char *GetNextStyle();
00106 const char *GetLastStyleName();
00107 };
00108
00109
00110 class OGRStyleTool;
00111
00115 class CPL_DLL OGRStyleMgr
00116 {
00117 private:
00118 OGRStyleTable *m_poDataSetStyleTable;
00119 char *m_pszStyleString;
00120
00121 public:
00122 OGRStyleMgr(OGRStyleTable *poDataSetStyleTable = NULL);
00123 ~OGRStyleMgr();
00124
00125 GBool SetFeatureStyleString(OGRFeature *,const char *pszStyleString=NULL,
00126 GBool bNoMatching = FALSE);
00127
00128
00129
00130
00131 const char *InitFromFeature(OGRFeature *);
00132 GBool InitStyleString(const char *pszStyleString = NULL);
00133
00134 const char *GetStyleName(const char *pszStyleString= NULL);
00135 const char *GetStyleByName(const char *pszStyleName);
00136
00137 GBool AddStyle(const char *pszStyleName, const char *pszStyleString=NULL);
00138
00139 const char *GetStyleString(OGRFeature * = NULL);
00140
00141 GBool AddPart(OGRStyleTool *);
00142 GBool AddPart(const char *);
00143
00144 int GetPartCount(const char *pszStyleString = NULL);
00145 OGRStyleTool *GetPart(int hPartId, const char *pszStyleString = NULL);
00146
00147
00148
00149
00150 OGRStyleTable *GetDataSetStyleTable(){return m_poDataSetStyleTable;}
00151
00152 OGRStyleTool *CreateStyleToolFromStyleString(const char *pszStyleString);
00153
00154 };
00155
00159 class CPL_DLL OGRStyleTool
00160 {
00161 private:
00162 GBool m_bModified;
00163 GBool m_bParsed;
00164 double m_dfScale;
00165 OGRSTUnitId m_eUnit;
00166 OGRSTClassId m_eClassId;
00167 char *m_pszStyleString;
00168
00169 virtual GBool Parse() = 0;
00170
00171 protected:
00172 GBool Parse(const OGRStyleParamId* pasStyle,
00173 OGRStyleValue* pasValue,
00174 int nCount);
00175
00176 public:
00177
00178 OGRStyleTool(){}
00179 OGRStyleTool(OGRSTClassId eClassId);
00180 virtual ~OGRStyleTool();
00181
00182 GBool GetRGBFromString(const char *pszColor, int &nRed, int &nGreen,
00183 int &nBlue, int &nTransparence);
00184 int GetSpecificId(const char *pszId, const char *pszWanted);
00185
00186 GBool IsStyleModified() {return m_bModified;}
00187 void StyleModified() {m_bModified = TRUE;}
00188
00189 GBool IsStyleParsed() {return m_bParsed;}
00190 void StyleParsed() {m_bParsed = TRUE;}
00191
00192 OGRSTClassId GetType();
00193
00194 void SetInternalInputUnitFromParam(char *pszString);
00195
00196 void SetUnit(OGRSTUnitId,double dfScale = 1.0);
00197
00198
00199 OGRSTUnitId GetUnit(){return m_eUnit;}
00200
00201
00202
00203
00204
00205 virtual const char *GetStyleString() = 0;
00206 void SetStyleString(const char *pszStyleString);
00207 const char *GetStyleString(const OGRStyleParamId *pasStyleParam ,
00208 OGRStyleValue *pasStyleValue, int nSize);
00209
00210 const char *GetParamStr(const OGRStyleParamId &sStyleParam ,
00211 OGRStyleValue &sStyleValue,
00212 GBool &bValueIsNull);
00213
00214 int GetParamNum(const OGRStyleParamId &sStyleParam ,
00215 OGRStyleValue &sStyleValue,
00216 GBool &bValueIsNull);
00217
00218 double GetParamDbl(const OGRStyleParamId &sStyleParam ,
00219 OGRStyleValue &sStyleValue,
00220 GBool &bValueIsNull);
00221
00222 void SetParamStr(const OGRStyleParamId &sStyleParam ,
00223 OGRStyleValue &sStyleValue,
00224 const char *pszParamString);
00225
00226 void SetParamNum(const OGRStyleParamId &sStyleParam ,
00227 OGRStyleValue &sStyleValue,
00228 int nParam);
00229
00230 void SetParamDbl(const OGRStyleParamId &sStyleParam ,
00231 OGRStyleValue &sStyleValue,
00232 double dfParam);
00233
00234 double ComputeWithUnit(double, OGRSTUnitId);
00235 int ComputeWithUnit(int , OGRSTUnitId);
00236
00237 };
00238
00242 class CPL_DLL OGRStylePen : public OGRStyleTool
00243 {
00244 private:
00245
00246 OGRStyleValue *m_pasStyleValue;
00247
00248 GBool Parse();
00249
00250 public:
00251
00252 OGRStylePen();
00253 virtual ~OGRStylePen();
00254
00255
00256
00257
00258
00259 const char *Color(GBool &bDefault){return GetParamStr(OGRSTPenColor,bDefault);}
00260 void SetColor(const char *pszColor){SetParamStr(OGRSTPenColor,pszColor);}
00261 double Width(GBool &bDefault){return GetParamDbl(OGRSTPenWidth,bDefault);}
00262 void SetWidth(double dfWidth){SetParamDbl(OGRSTPenWidth,dfWidth);}
00263 const char *Pattern(GBool &bDefault){return (char *)GetParamStr(OGRSTPenPattern,bDefault);}
00264 void SetPattern(const char *pszPattern){SetParamStr(OGRSTPenPattern,pszPattern);}
00265 const char *Id(GBool &bDefault){return GetParamStr(OGRSTPenId,bDefault);}
00266 void SetId(const char *pszId){SetParamStr(OGRSTPenId,pszId);}
00267 double PerpendicularOffset(GBool &bDefault){return GetParamDbl(OGRSTPenPerOffset,bDefault);}
00268 void SetPerpendicularOffset(double dfPerp){SetParamDbl(OGRSTPenPerOffset,dfPerp);}
00269 const char *Cap(GBool &bDefault){return GetParamStr(OGRSTPenCap,bDefault);}
00270 void SetCap(const char *pszCap){SetParamStr(OGRSTPenCap,pszCap);}
00271 const char *Join(GBool &bDefault){return GetParamStr(OGRSTPenJoin,bDefault);}
00272 void SetJoin(const char *pszJoin){SetParamStr(OGRSTPenJoin,pszJoin);}
00273 int Priority(GBool &bDefault){return GetParamNum(OGRSTPenPriority,bDefault);}
00274 void SetPriority(int nPriority){SetParamNum(OGRSTPenPriority,nPriority);}
00275
00276
00277
00278 const char *GetParamStr(OGRSTPenParam eParam, GBool &bValueIsNull);
00279 int GetParamNum(OGRSTPenParam eParam,GBool &bValueIsNull);
00280 double GetParamDbl(OGRSTPenParam eParam,GBool &bValueIsNull);
00281 void SetParamStr(OGRSTPenParam eParam, const char *pszParamString);
00282 void SetParamNum(OGRSTPenParam eParam, int nParam);
00283 void SetParamDbl(OGRSTPenParam eParam, double dfParam);
00284 const char *GetStyleString();
00285 };
00286
00290 class CPL_DLL OGRStyleBrush : public OGRStyleTool
00291 {
00292 private:
00293
00294 OGRStyleValue *m_pasStyleValue;
00295
00296 GBool Parse();
00297
00298 public:
00299
00300 OGRStyleBrush();
00301 virtual ~OGRStyleBrush();
00302
00303
00304
00305 const char *ForeColor(GBool &bDefault){return GetParamStr(OGRSTBrushFColor,bDefault);}
00306 void SetForeColor(const char *pszColor){SetParamStr(OGRSTBrushFColor,pszColor);}
00307 const char *BackColor(GBool &bDefault){return GetParamStr(OGRSTBrushBColor,bDefault);}
00308 void SetBackColor(const char *pszColor){SetParamStr(OGRSTBrushBColor,pszColor);}
00309 const char *Id(GBool &bDefault){ return GetParamStr(OGRSTBrushId,bDefault);}
00310 void SetId(const char *pszId){SetParamStr(OGRSTBrushId,pszId);}
00311 double Angle(GBool &bDefault){return GetParamDbl(OGRSTBrushAngle,bDefault);}
00312 void SetAngle(double dfAngle){SetParamDbl(OGRSTBrushAngle,dfAngle );}
00313 double Size(GBool &bDefault){return GetParamDbl(OGRSTBrushSize,bDefault);}
00314 void SetSize(double dfSize){SetParamDbl(OGRSTBrushSize,dfSize );}
00315 double SpacingX(GBool &bDefault){return GetParamDbl(OGRSTBrushDx,bDefault);}
00316 void SetSpacingX(double dfX){SetParamDbl(OGRSTBrushDx,dfX );}
00317 double SpacingY(GBool &bDefault){return GetParamDbl(OGRSTBrushDy,bDefault);}
00318 void SetSpacingY(double dfY){SetParamDbl(OGRSTBrushDy,dfY );}
00319 int Priority(GBool &bDefault){ return GetParamNum(OGRSTBrushPriority,bDefault);}
00320 void SetPriority(int nPriority){ SetParamNum(OGRSTBrushPriority,nPriority);}
00321
00322
00323
00324
00325 const char *GetParamStr(OGRSTBrushParam eParam, GBool &bValueIsNull);
00326 int GetParamNum(OGRSTBrushParam eParam,GBool &bValueIsNull);
00327 double GetParamDbl(OGRSTBrushParam eParam,GBool &bValueIsNull);
00328 void SetParamStr(OGRSTBrushParam eParam, const char *pszParamString);
00329 void SetParamNum(OGRSTBrushParam eParam, int nParam);
00330 void SetParamDbl(OGRSTBrushParam eParam, double dfParam);
00331 const char *GetStyleString();
00332 };
00333
00337 class CPL_DLL OGRStyleSymbol : public OGRStyleTool
00338 {
00339 private:
00340
00341 OGRStyleValue *m_pasStyleValue;
00342
00343 GBool Parse();
00344
00345 public:
00346
00347 OGRStyleSymbol();
00348 virtual ~OGRStyleSymbol();
00349
00350
00351
00352
00353
00354 const char *Id(GBool &bDefault){return GetParamStr(OGRSTSymbolId,bDefault);}
00355 void SetId(const char *pszId){ SetParamStr(OGRSTSymbolId,pszId);}
00356 double Angle(GBool &bDefault){ return GetParamDbl(OGRSTSymbolAngle,bDefault);}
00357 void SetAngle(double dfAngle){SetParamDbl(OGRSTSymbolAngle,dfAngle );}
00358 const char *Color(GBool &bDefault){return GetParamStr(OGRSTSymbolColor,bDefault);}
00359 void SetColor(const char *pszColor){SetParamStr(OGRSTSymbolColor,pszColor);}
00360 double Size(GBool &bDefault){ return GetParamDbl(OGRSTSymbolSize,bDefault);}
00361 void SetSize(double dfSize){ SetParamDbl(OGRSTSymbolSize,dfSize );}
00362 double SpacingX(GBool &bDefault){return GetParamDbl(OGRSTSymbolDx,bDefault);}
00363 void SetSpacingX(double dfX){SetParamDbl(OGRSTSymbolDx,dfX );}
00364 double SpacingY(GBool &bDefault){return GetParamDbl(OGRSTSymbolDy,bDefault);}
00365 void SetSpacingY(double dfY){SetParamDbl(OGRSTSymbolDy,dfY );}
00366 double Step(GBool &bDefault){return GetParamDbl(OGRSTSymbolStep,bDefault);}
00367 void SetStep(double dfStep){SetParamDbl(OGRSTSymbolStep,dfStep );}
00368 double Offset(GBool &bDefault){return GetParamDbl(OGRSTSymbolOffset,bDefault);}
00369 void SetOffset(double dfOffset){SetParamDbl(OGRSTSymbolOffset,dfOffset );}
00370 double Perp(GBool &bDefault){return GetParamDbl(OGRSTSymbolPerp,bDefault);}
00371 void SetPerp(double dfPerp){SetParamDbl(OGRSTSymbolPerp,dfPerp );}
00372 int Priority(GBool &bDefault){return GetParamNum(OGRSTSymbolPriority,bDefault);}
00373 void SetPriority(int nPriority){SetParamNum(OGRSTSymbolPriority,nPriority);}
00374 const char *FontName(GBool &bDefault)
00375 {return GetParamStr(OGRSTSymbolFontName,bDefault);}
00376 void SetFontName(const char *pszFontName)
00377 {SetParamStr(OGRSTSymbolFontName,pszFontName);}
00378 const char *OColor(GBool &bDefault){return GetParamStr(OGRSTSymbolOColor,bDefault);}
00379 void SetOColor(const char *pszColor){SetParamStr(OGRSTSymbolOColor,pszColor);}
00380
00381
00382
00383 const char *GetParamStr(OGRSTSymbolParam eParam, GBool &bValueIsNull);
00384 int GetParamNum(OGRSTSymbolParam eParam,GBool &bValueIsNull);
00385 double GetParamDbl(OGRSTSymbolParam eParam,GBool &bValueIsNull);
00386 void SetParamStr(OGRSTSymbolParam eParam, const char *pszParamString);
00387 void SetParamNum(OGRSTSymbolParam eParam, int nParam);
00388 void SetParamDbl(OGRSTSymbolParam eParam, double dfParam);
00389 const char *GetStyleString();
00390 };
00391
00395 class CPL_DLL OGRStyleLabel : public OGRStyleTool
00396 {
00397 private:
00398
00399 OGRStyleValue *m_pasStyleValue;
00400
00401 GBool Parse();
00402
00403 public:
00404
00405 OGRStyleLabel();
00406 virtual ~OGRStyleLabel();
00407
00408
00409
00410
00411
00412 const char *FontName(GBool &bDefault){return GetParamStr(OGRSTLabelFontName,bDefault);}
00413 void SetFontName(const char *pszFontName){SetParamStr(OGRSTLabelFontName,pszFontName);}
00414 double Size(GBool &bDefault){return GetParamDbl(OGRSTLabelSize,bDefault);}
00415 void SetSize(double dfSize){SetParamDbl(OGRSTLabelSize,dfSize);}
00416 const char *TextString(GBool &bDefault){return GetParamStr(OGRSTLabelTextString,bDefault);}
00417 void SetTextString(const char *pszTextString){SetParamStr(OGRSTLabelTextString,pszTextString);}
00418 double Angle(GBool &bDefault){return GetParamDbl(OGRSTLabelAngle,bDefault);}
00419 void SetAngle(double dfAngle){SetParamDbl(OGRSTLabelAngle,dfAngle);}
00420 const char *ForeColor(GBool &bDefault){return GetParamStr(OGRSTLabelFColor,bDefault);}
00421 void SetForColor(const char *pszForColor){SetParamStr(OGRSTLabelFColor,pszForColor);}
00422 const char *BackColor(GBool &bDefault){return GetParamStr(OGRSTLabelBColor,bDefault);}
00423 void SetBackColor(const char *pszBackColor){SetParamStr(OGRSTLabelBColor,pszBackColor);}
00424 const char *Placement(GBool &bDefault){return GetParamStr(OGRSTLabelPlacement,bDefault);}
00425 void SetPlacement(const char *pszPlacement){SetParamStr(OGRSTLabelPlacement,pszPlacement);}
00426 int Anchor(GBool &bDefault){return GetParamNum(OGRSTLabelAnchor,bDefault);}
00427 void SetAnchor(int nAnchor){SetParamNum(OGRSTLabelAnchor,nAnchor);}
00428 double SpacingX(GBool &bDefault){return GetParamDbl(OGRSTLabelDx,bDefault);}
00429 void SetSpacingX(double dfX){SetParamDbl(OGRSTLabelDx,dfX);}
00430 double SpacingY(GBool &bDefault){return GetParamDbl(OGRSTLabelDy,bDefault);}
00431 void SetSpacingY(double dfY){SetParamDbl(OGRSTLabelDy,dfY);}
00432 double Perp(GBool &bDefault){return GetParamDbl(OGRSTLabelPerp,bDefault);}
00433 void SetPerp(double dfPerp){SetParamDbl(OGRSTLabelPerp,dfPerp);}
00434 GBool Bold(GBool &bDefault){return GetParamNum(OGRSTLabelBold,bDefault);}
00435 void SetBold(GBool bBold){SetParamNum(OGRSTLabelBold,bBold);}
00436 GBool Italic(GBool &bDefault){return GetParamNum(OGRSTLabelItalic,bDefault);}
00437 void SetItalic(GBool bItalic){SetParamNum(OGRSTLabelItalic,bItalic);}
00438 GBool Underline(GBool &bDefault){return GetParamNum(OGRSTLabelUnderline,bDefault);}
00439 void SetUnderline(GBool bUnderline){SetParamNum(OGRSTLabelUnderline,bUnderline);}
00440 int Priority(GBool &bDefault){return GetParamNum(OGRSTLabelPriority,bDefault);}
00441 void SetPriority(int nPriority){SetParamNum(OGRSTLabelPriority,nPriority);}
00442 GBool Strikeout(GBool &bDefault){return GetParamNum(OGRSTLabelStrikeout,bDefault);}
00443 void SetStrikeout(GBool bStrikeout){SetParamNum(OGRSTLabelStrikeout,bStrikeout);}
00444 double Stretch(GBool &bDefault){return GetParamDbl(OGRSTLabelStretch,bDefault);}
00445 void SetStretch(double dfStretch){SetParamDbl(OGRSTLabelStretch,dfStretch);}
00446 const char *AdjustmentHor(GBool &bDefault){return GetParamStr(OGRSTLabelAdjHor,bDefault);}
00447 void SetAdjustmentHor(const char *pszAdjustmentHor){SetParamStr(OGRSTLabelAdjHor,pszAdjustmentHor);}
00448 const char *AdjustmentVert(GBool &bDefault){return GetParamStr(OGRSTLabelAdjVert,bDefault);}
00449 void SetAdjustmentVert(const char *pszAdjustmentVert){SetParamStr(OGRSTLabelAdjHor,pszAdjustmentVert);}
00450 const char *ShadowColor(GBool &bDefault){return GetParamStr(OGRSTLabelHColor,bDefault);}
00451 void SetShadowColor(const char *pszShadowColor){SetParamStr(OGRSTLabelHColor,pszShadowColor);}
00452 const char *OutlineColor(GBool &bDefault){return GetParamStr(OGRSTLabelOColor,bDefault);}
00453 void SetOutlineColor(const char *pszOutlineColor){SetParamStr(OGRSTLabelOColor,pszOutlineColor);}
00454
00455
00456
00457 const char *GetParamStr(OGRSTLabelParam eParam, GBool &bValueIsNull);
00458 int GetParamNum(OGRSTLabelParam eParam,GBool &bValueIsNull);
00459 double GetParamDbl(OGRSTLabelParam eParam,GBool &bValueIsNull);
00460 void SetParamStr(OGRSTLabelParam eParam, const char *pszParamString);
00461 void SetParamNum(OGRSTLabelParam eParam, int nParam);
00462 void SetParamDbl(OGRSTLabelParam eParam, double dfParam);
00463 const char *GetStyleString();
00464 };
00465
00466 #endif