00001
00050 #ifndef INC_GRE_LRSURFACE_H
00051 #define INC_GRE_LRSURFACE_H
00052
00053 #ifndef INC_GRE_LAYER_H
00054 #include <gre/layer.h>
00055 #endif
00056
00057 #ifndef INC_RVC_OBJITEM_H
00058 #include <rvc/objitem.h>
00059 #endif
00060
00061 #ifndef GENERATING_DOXYGEN_OUTPUT
00062 namespace RVC {
00063 class RASTER;
00064 class NULLMASK;
00065 }
00066 namespace SPATMOD {
00067 namespace IMAGE {
00068 class STAGE;
00069 class BUFFER;
00070 }
00071 }
00072 #endif
00073
00074 namespace GRE {
00075
00076
00078 class LAYER_SURFACE : public LAYER {
00079 public:
00080
00081 enum RENDERING_MODE {
00082 RENDERING_MODE_None = -1,
00083 RENDERING_MODE_VariableTriangulation = 0,
00084 RENDERING_MODE_PiecewiseTIN = 1,
00085 RENDERING_MODE_FlatTriangulation = 2
00086 };
00087
00088
00089 class DISPPARM : public LAYER::DISPPARM {
00090 public:
00091
00092 class DLG;
00093
00094 RVC::OBJITEM m_ObjItem;
00095 RVC::OBJECTNAME m_GeorefName;
00096 INT32 m_WireSample;
00097 RENDERING_MODE m_RenderingMode;
00098 bool m_SaveOptimizationStructure;
00099 double m_ErrorTolerance;
00100
00101 DISPPARM ();
00102 DISPPARM (
00103 const DISPPARM& rhs
00104 ): LAYER::DISPPARM(rhs) { Copy(rhs); }
00105 virtual ~DISPPARM (
00106 ) { Free(); }
00107
00108 DISPPARM& operator= (const DISPPARM& rhs) {
00109 if (this != &rhs) {
00110 Free();
00111 Copy(rhs);
00112 }
00113 return (*this);
00114 }
00115
00116 protected:
00117 virtual const SERIALIZERITEM* SerialGetItemDef (SERIALIZER& serializer) const;
00118
00119 private:
00120 #ifndef GENERATING_DOXYGEN_OUTPUT
00121 void Copy (const DISPPARM&);
00122 void Free ();
00123
00124 virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00125 virtual ERRVALUE v_Validate ();
00126
00127 friend class LAYER_SURFACE;
00128 #endif // GENERATING_DOXYGEN_OUTPUT
00129 };
00130
00132 static ERRVALUE CreateDefault (
00133 MDLGPARENT dlgparent,
00134 GROUP *group,
00135 LAYER_SURFACE **pLayer = 0
00136 );
00137
00139 static ERRVALUE CreateDefaultFromOnline (
00140 GROUP *group,
00141 LAYER_SURFACE **pLayer = 0
00142 );
00143
00145 static ERRVALUE DlgGetObject (
00146 MDLGPARENT dlgparent,
00147 RVC::OBJITEM& ObjItem
00148 );
00149
00151 static void RegisterType ();
00152
00154 explicit LAYER_SURFACE (
00155 GRE::GROUP *group,
00156 CREATEFLAGS createflags = CREATEFLAG_None,
00157 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00158 LAYER *reflayer = 0
00159 );
00160
00161 virtual ~LAYER_SURFACE ();
00162
00165 bool CanReadValues () const
00166 { return (m_dispparm.m_ObjItem.GetObjectType() == RVC::OBJTYPE_Raster); }
00167
00169 const DISPPARM& GetDispParm () const
00170 { return (m_dispparm); }
00171
00174 int GetPointZ (
00175 const DPOINT2D& spoint,
00176 double& z,
00177 bool DoSearch
00178 );
00179
00182 int GetPointZInterpolated (
00183 const DPOINT2D& spoint,
00184 double& z
00185 );
00186
00190 int GetPointsZ (
00191 const TRANS2D_MAPGEN& PointToSurface,
00192 DPOINT3D *points,
00193 INT32 NumPoints,
00194 double dftz
00195 );
00196
00200 ERRVALUE GetPointsZ (
00201 const TRANS2D_MAPGEN& PointToSurface,
00202 POLYLINE& PolyLine,
00203 double dftz
00204 );
00205
00209 ERRVALUE GetPointsZBilinear (
00210 const TRANS2D_MAPGEN& PointToSurface,
00211 POLYLINE& PolyLine,
00212 double dftz
00213 );
00214
00217 SPATMOD::IMAGE::STAGE* GetImageStageTerrain () const
00218 { return (m_pStageTerrain); }
00219
00220 GRE::TERRAIN* GetTerrain (
00221 ) { return (m_pTerrain); };
00222
00224 ERRVALUE Read (
00225 INT32 row,
00226 INT32 col,
00227 INT32 ncols,
00228 double *buffer,
00229 UINT8 *mask
00230 );
00231
00237 ERRVALUE SetDispParm (
00238 const DISPPARM& dispparm
00239 );
00240
00241 protected:
00242
00243 DISPPARM m_dispparm;
00244
00245 private:
00246 #ifndef GENERATING_DOXYGEN_OUTPUT
00247
00248 RVC::RASTER *m_pObjRaster;
00249 RVC::NULLMASK *m_pObjMask;
00250 GRE::TERRAIN *m_pTerrain;
00251 GRE::WIREFRAME *m_pWireframe;
00252 SPATMOD::IMAGE::STAGE *m_pStageTerrain;
00253 mutable SPATMOD::IMAGE::BUFFER *m_pBuffer;
00254 mutable LRECT2D m_RectBuffer;
00255
00256 void CalcWireSampleRange (INT32& WireSampleMin, INT32& WireSampleMax) const;
00257 void CheckTerrain ();
00258 void FreeStageTerrain ();
00259 int ReadCellZ (INT32 col, INT32 row, double& z) const;
00260 ERRVALUE SetupNewObject ();
00261 int WireReadRaster ();
00262
00263
00264 virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00265 virtual void v_CloseObject ();
00266 virtual GRE::LAYERSECTION* v_ConstructLayerSection (GRE::VIEW *view);
00267 #ifdef USE_MGUI
00268 virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00269 #endif
00270 virtual LAYER* v_Copy (GRE::GROUP *group) const;
00271 virtual ERRVALUE v_Draw (LAYERDC& layerdc);
00272 virtual ERRVALUE v_EstimateRangeZ (const LAYERVIEW *pLayerView, DOUBLE_RANGE& range) const;
00273 virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00274 virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00275 virtual int v_OpenObject (MDLGPARENT dlgparent);
00276 #ifdef USE_MGUI
00277 virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00278 #endif
00279 virtual const char* v_SerialGetTagName () const;
00280 virtual int v_UpdateExtents (bool forceupdate);
00281
00282 LAYER_SURFACE (const LAYER_SURFACE&);
00283 LAYER_SURFACE& operator= (const LAYER_SURFACE&);
00284
00285 #endif // GENERATING_DOXYGEN_OUTPUT
00286 };
00287
00288
00289
00290 }
00291
00292 #endif // INC_GRE_LRSURFACE_H