00001
00069 #ifndef INC_GRE_LRKML_H
00070 #define INC_GRE_LRKML_H
00071
00072 #ifndef INC_GRE_LAYER_H
00073 #include <gre/layer.h>
00074 #endif
00075
00076 #ifndef INC_GRE_LEGEND_H
00077 #include <gre/legend.h>
00078 #endif
00079
00080 #ifndef INC_GRE_DATATIP_H
00081 #include <gre/datatip.h>
00082 #endif
00083
00084 #ifndef INC_RVC_STYLEPATTERNBITMAP_H
00085 #include <rvc/stylepatternbitmap.h>
00086 #endif
00087
00088 #ifndef INC_SPATMOD_IMAGESTAGEARRAY_H
00089 #include <spatmod/imagestagearray.h>
00090 #endif
00091
00092 #ifndef INC_MI32_MISTRINGLIST_H
00093 #include <mi32/mistringlist.h>
00094 #endif
00095
00096 #ifndef INC_MI32_XML_H
00097 #include <mi32/xml.h>
00098 #endif
00099
00100
00101 #ifndef GENERATING_DOXYGEN_OUTPUT
00102 class QUADTREE;
00103 #endif
00104
00105
00106 namespace GRE {
00107
00108 class LAYER_KML : public GRE::LAYER {
00109 public:
00110
00111
00112 class DISPPARM : public GRE::LAYER::DISPPARM {
00113 public:
00114
00115 DISPPARM ();
00116
00117 DISPPARM (
00118 const DISPPARM& rhs
00119 );
00120
00121 virtual ~DISPPARM ();
00122
00123 DISPPARM& operator= (
00124 const DISPPARM& rhs
00125 );
00126
00127 UINT16 GetAutoReloadInterval () const
00128 { return (m_AutoReloadInterval); }
00129
00130 bool GetAutoUpdate (
00131 ) const { return (m_autoupdate); }
00132
00133 const DATATIPPARMS& GetDataTipParms () const
00134 { return (m_DataTip); }
00135
00136 const TEXTSTYLE& GetLabelStyle (
00137 ) const { return (m_LabelStyle); }
00138
00139 const RVC::OBJITEM& GetObjItem () const
00140 { return (m_ObjItem); }
00141
00142 const FILEPATH& GetPath (
00143 ) const { return (m_ObjItem.GetFilePath()); }
00144
00145 double GetPointScale (
00146 ) const { return m_PointScale; }
00147
00148 const POINTSTYLE& GetPointStyle (
00149 ) const { return (m_PointStyle); }
00150
00151 const POLYSTYLE& GetPolyStyle (
00152 ) const { return (m_PolyStyle); }
00153
00154 UINT16 GetSelectMode () const
00155 { return (m_SelectMode); }
00156
00157 bool GetShowLabels (
00158 ) const { return (m_showlabels); }
00159
00160 const MISTRING& GetURL (
00161 ) const { return (m_ObjItem.GetURL()); }
00162
00163 bool HasURL () const
00164 { return (m_ObjItem.GetType() == RVC::OBJITEM::TYPE_URL); }
00165
00166 void SetAutoUpdate (
00167 bool autoupdate = true
00168 ) { m_autoupdate = autoupdate; }
00169
00170 void SetDataTipParms (
00171 const DATATIPPARMS& DataTipParms
00172 ) { m_DataTip = DataTipParms; }
00173
00174 void SetLabelStyle (
00175 const TEXTSTYLE& style
00176 ) { m_LabelStyle = style; }
00177
00178 void SetObjItem (
00179 const RVC::OBJITEM& ObjItem
00180 ) { m_ObjItem = ObjItem; }
00181
00182 void SetPointScale (
00183 double scale
00184 ) { m_PointScale = scale; }
00185
00186 void SetPointStyle (
00187 const POINTSTYLE& style
00188 ) { m_PointStyle = style; }
00189
00190 void SetPolyStyle (
00191 const POLYSTYLE& style
00192 ) { m_PolyStyle = style; }
00193
00194 void SetShowLabels (
00195 bool label = true
00196 ) { m_showlabels = label; }
00197
00198 void SetURL (
00199 const MISTRING& url
00200 ) { m_ObjItem.SetURL(url,RVC::OBJTYPE_RemoteKML); }
00201
00202 private:
00203 #ifndef GENERATING_DOXYGEN_OUTPUT
00204 typedef LAYER::DISPPARM BASECLASS;
00205 typedef LAYER_KML::DISPPARM THISCLASS;
00206
00207 RVC::OBJITEM m_ObjItem;
00208 POLYSTYLE m_PolyStyle;
00209 LINESTYLE m_LineStyle;
00210 POINTSTYLE m_PointStyle;
00211 TEXTSTYLE m_LabelStyle;
00212 GRE::DATATIPPARMS m_DataTip;
00213 double m_PointScale;
00214 UINT16 m_SelectMode;
00215 UINT16 m_AutoReloadInterval;
00216 bool m_autoupdate;
00217 bool m_showlabels;
00218
00219 void Copy (const DISPPARM&);
00220 void Free ();
00221
00222 virtual const SERIALIZERITEM* SerialGetItemDef (SERIALIZER& serializer) const;
00223
00224 virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00225 virtual ERRVALUE v_Validate ();
00226
00227 #endif // GENERATING_DOXYGEN_OUTPUT
00228 };
00229
00231 static void RegisterType ();
00232
00234 explicit LAYER_KML (
00235 GRE::GROUP *group,
00236 CREATEFLAGS createflags = CREATEFLAG_None,
00237 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00238 GRE::LAYER *reflayer = 0
00239 );
00240
00242 virtual ~LAYER_KML ();
00243
00245 const DISPPARM& GetDispParm (
00246 ) const { return (m_dispparm); }
00247
00254 ERRVALUE SetDispParm (
00255 const DISPPARM& dispparm
00256 );
00257
00258 private:
00259 #ifndef GENERATING_DOXYGEN_OUTPUT
00260 typedef LAYER_KML THISCLASS;
00261
00262 class DLG;
00263
00264 class KMLELEMSTYLE {
00265 public:
00266 POINTSTYLE m_PointStyle;
00267 POLYSTYLE m_PolyStyle;
00268 LINESTYLE m_LineStyle;
00269 TEXTSTYLE m_LabelStyle;
00270 INT32 m_IconIndex;
00271 MISTRING m_Label;
00272 MISTRING m_Description;
00273 double m_LabelScale;
00274 bool m_ShowLabel;
00275
00276 KMLELEMSTYLE ();
00277 ~KMLELEMSTYLE ();
00278 };
00279
00280 DISPPARM m_dispparm;
00281 FILEPATH m_pathkmz;
00282 XMLNODE *m_RootNode;
00283 XMLDOC m_XmlDoc;
00284 POLYLINE m_Locations;
00285 POLYLINELIST m_Paths;
00286 MILIST<REGION2D> m_Areas;
00287 MILIST<KMLELEMSTYLE> m_PolyStyles;
00288 MILIST<LINESTYLE> m_LineStyles;
00289 MILIST<KMLELEMSTYLE> m_PointStyles;
00290 SPATMOD::IMAGE::STAGE_ARRAY m_GroundOverlays;
00291 MILIST<RVC::STYLEPATTERN_BITMAP> m_IconBitmaps;
00292 MISTRINGLIST m_IconUrls;
00293 MISTRING m_Username;
00294 MISTRING m_Password;
00295 QUADTREE *m_SearchTree;
00296 INT32 m_LastNumRecords;
00297 INT32 m_SearchNumAdded;
00298 #ifdef USE_MGUI
00299 DLG *m_pDlgControls;
00300 #endif
00301 GRE::LEGEND_POLYGON m_Legend;
00302 double m_TimeLastUpdate;
00303 bool m_IsGoogle;
00304
00305 static void GRECB_Layer (const GRE::MSG *msg, void *cbdata);
00306 static void LegendMsgHandler (GRAPHICTREEITEM_MSG *msg);
00307
00308 ERRVALUE GetRealResourcePath (const MISTRING& src, MISTRING& actual) const;
00309 void ProcessGroundOverlays (SIMPLE_ARRAY<XMLNODE*>& GroundOverlays, DRECT2D& extent);
00310 ERRVALUE ProcessPlacemarks (SIMPLE_ARRAY<XMLNODE*>& Places, DRECT2D& extents);
00311 ERRVALUE ProcessStyle (KMLELEMSTYLE& CurrentStyle, XMLNODE *node);
00312 ERRVALUE ReadImage(const MISTRING& src, DRECT2D& extents, SPATMOD::IMAGE::STAGE_AUTOPTR& StagePtr, double rotation = 0.0);
00313 ERRVALUE ReadSymbol (RVC::STYLEPATTERN_BITMAP& Bitmap, const COLOR& color, const MISTRING& src, const DPOINT2D& hotspot, const MISTRING& unitsx, const MISTRING& unitsy);
00314 ERRVALUE SetupSrcImageStage (const MISTRING& src, SPATMOD::IMAGE::STAGE_AUTOPTR& PtrStage) const;
00315 ERRVALUE Update ();
00316 void UpdateName ();
00317
00318
00319 virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00320 #ifdef USE_MGUI
00321 virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00322 #endif
00323 virtual GRE::LAYER* v_Copy (GRE::GROUP *group) const;
00324 virtual const GRE::DATATIPPARMS* v_DataTipGetParms (int component) const;
00325 virtual int v_DataTipGetString (ELEMTYPE ElemType, ELEMNUM ElemNum, MISTRING& string, SPATMOD::IMAGE::STAGE_ARRAY& images);
00326 bool v_DataTipHasAvailable () const;
00327 bool v_DataTipHasEnabled () const;
00328 virtual ERRVALUE v_DataTipSetParms (int component, const GRE::DATATIPPARMS& DataTipParms);
00329 virtual ERRVALUE v_Draw (GRE::LAYERDC& layerdc);
00330 virtual ELEMNUM v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UNSIGNEDSET *pSearchSet, GRE::FINDFLAGS findflags);
00331 virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00332 virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, ELEMNUM ElemNum, DRECT3D& Extents);
00333 virtual const GRE::LEGEND* v_GetLegend (ELEMTYPE ElemType);
00334 virtual INT64 v_GetNumElements (ELEMTYPE ElemType);
00335 virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00336 virtual bool v_HasLegend () const;
00337 #ifdef USE_MGUI
00338 virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00339 #endif
00340 virtual const char* v_SerialGetTagName () const;
00341 virtual void v_SetLegendSampleFlags (MGD::STYLESAMPLEFLAGS SampleFlags);
00342 virtual int v_SnapPoint (DPOINT3D& ptObject, SNAPTO SnapTo, double MaxDistance, VIEW *view) const;
00343 virtual bool v_SnapPointIsAllowed (SNAPTO SnapTo) const;
00344 virtual int v_UpdateExtents (bool forceupdate);
00345 virtual bool v_UsesTransparency (const MGD::DEVICE *pDevice = 0) const;
00346
00347 LAYER_KML (const LAYER_KML&);
00348 LAYER_KML& operator= (const LAYER_KML&);
00349
00350 class PRIVDRAWDATA;
00351 friend class PRIVDRAWDATA;
00352
00353 #endif // GENERATING_DOXYGEN_OUTPUT
00354 };
00355
00356 }
00357
00358 #endif // INC_GRE_LRKML_H