00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef INC_GRE_3DGEOMET_H
00021 #define INC_GRE_3DGEOMET_H
00022
00023 #ifndef INC_GRE_3DGMELEM_H
00024 #include <gre/3dgmelem.h>
00025 #endif
00026
00027 namespace GRE {
00028
00029 #ifndef GENERATING_DOXYGEN_OUTPUT
00030 class CONTROLLER;
00031 class TERRAIN;
00032 class DRAWINGCONTEXT3D;
00033 #endif // GENERATING_DOXYGEN_OUTPUT
00034
00035
00037 class GEOMETRIC3D {
00038 public:
00039
00040 class IMPL_FACTORY {
00041 public:
00042 virtual GEOMETRIC3D *v_ConstructImpl () = 0;
00043 };
00044
00045
00046 enum MODEL {
00047 MODEL_Default = 0,
00048 MODEL_Vector = 0,
00049 MODEL_CAD = 1,
00050 MODEL_Shape = 2,
00051 MODEL_Pinmap = 3,
00052 MODEL_TIN = 4,
00053 MODEL_Count = 5
00054 };
00055
00056 static void Register (
00057 IMPL_FACTORY *factory,
00058 const MODEL model
00059 );
00060
00064 static const char* GetName (
00065 MODEL model
00066 );
00067
00071 static const char* GetDescription (
00072 MODEL model
00073 );
00074
00078 static GEOMETRIC3D* GetInstance (
00079 MODEL model
00080 );
00081
00082 virtual ~GEOMETRIC3D (
00083 );
00084
00088 const char* GetName (
00089 ) const;
00090
00094 const char* GetDescription (
00095 ) const;
00096
00100 const MODEL GetModel (
00101 ) const {return m_Model; };
00102
00106 GEOMETRIC3D* CreateInstance (
00107 ) { return v_CreateInstance(); };
00108
00112 virtual bool IsTerrainNeeded (
00113 );
00114
00118 virtual bool IsPointsFieldNeeded (
00119 );
00120
00124 ERRVALUE Build (
00125 const GRE::LAYER *layer
00126 ) { return v_Build(layer); };
00127
00129 void Free (
00130 ) { v_Free(); return; };
00131
00135 bool IsBuilt (
00136 );
00137
00141 void SetScene (
00142 SCENE3D& scene
00143 ) {
00144 m_Scene = &scene;
00145 m_Viewer = DPOINT3D(m_Scene->GetViewer().x, m_Scene->GetViewer().y, m_Scene->GetViewer().z);
00146 m_Direction = DPOINT3D(m_Scene->GetDirection().x, m_Scene->GetDirection().y, m_Scene->GetDirection().z);
00147 return;
00148 };
00149
00153 ERRVALUE DrawScene (
00154 CONTROLLER &controller,
00155 DRAWINGCONTEXT3D& drawing,
00156 TERRAIN *terrain,
00157 const bool wireframe = false
00158 );
00159
00163 const DRECT3D& GetExtents (
00164 ) { return v_GetExtents(); };
00165
00167 void SetCoordRefSys (
00168 const SPATREF::COORDREFSYS& CoordRefSys
00169 ) { v_SetCoordRefSys(CoordRefSys); return; };
00170
00172 const SPATREF::COORDREFSYS GetCoordRefSys (
00173 ) { return v_GetCoordRefSys(); };
00174
00175
00179 const TRANS2D_MAPGEN& GetTransformationInternalToModel (
00180 ) { return v_GetTransformationInternalToModel(); };
00181
00182 protected:
00183
00184 GEOMETRIC3D (
00185 const char *name,
00186 const char *desc,
00187 const MODEL model
00188 );
00189
00191 void SetBuilt (
00192 const bool built
00193 );
00194
00195 void AppendElements (
00196 GEOMETRIC3D_ELEMENTS *elements
00197 ) { m_ElementsArray.Append(elements); return; };
00198
00199 void ClearElements (
00200 );
00201
00202 double ComputeScaleForPoint (
00203 const DPOINT2D& point
00204 );
00205
00206 private:
00207 #ifndef GENERATING_DOXYGEN_OUTPUT
00208
00209 class BUILDER_IMPL : public GEOMETRIC3D_BUILDER {
00210 public :
00211
00212 BUILDER_IMPL (
00213 const GEOMETRIC3D& geometric
00214 ) : m_Geometric(geometric) {};
00215
00216 ~BUILDER_IMPL (
00217 ) {};
00218
00219 private:
00220
00221 const GEOMETRIC3D& m_Geometric;
00222
00223 BUILDER_IMPL (
00224 );
00225
00226 void OnConstruction (
00227 GRE::TRIANGULATION& triangulation
00228 );
00229
00230 void OnConstruction (
00231 GRE::PIXALIZATION& pixalization
00232 );
00233
00234 friend class GEOMETRIC3D;
00235 };
00236
00237 static IMPL_FACTORY *s_ImplFactories[MODEL_Count];
00238
00239 const char *m_Name;
00240 const char *m_Description;
00241 const MODEL m_Model;
00242 BUILDER_IMPL m_Builder;
00243
00244 bool m_Built;
00245
00246 SCENE3D *m_Scene;
00247 DPOINT3D m_Viewer;
00248 DPOINT3D m_Direction;
00249 CONTROLLER *m_Controller;
00250 DRAWINGCONTEXT3D *m_Drawing;
00251 TERRAIN *m_Terrain;
00252
00253 GEOMETRIC3D_ELEMENTS_ARRAY m_ElementsArray;
00254
00255 GEOMETRIC3D (
00256 );
00257
00258 GEOMETRIC3D (
00259 const GEOMETRIC3D &rhs
00260 );
00261
00262 GEOMETRIC3D& operator= (
00263 const GEOMETRIC3D& rhs
00264 );
00265
00266 #endif // GENERATING_DOXYGEN_OUTPUT
00267
00268 virtual GEOMETRIC3D* v_CreateInstance (
00269 ) = 0;
00270
00271 virtual ERRVALUE v_Build (
00272 const GRE::LAYER *layer
00273 ) = 0;
00274
00275 virtual void v_Free (
00276 ) = 0;
00277
00278 virtual const DRECT3D& v_GetExtents (
00279 ) = 0;
00280
00281 virtual void v_SetCoordRefSys (
00282 const SPATREF::COORDREFSYS& CoordRefSys
00283 ) = 0;
00284
00285 virtual const SPATREF::COORDREFSYS v_GetCoordRefSys (
00286 ) = 0;
00287
00288 virtual const TRANS2D_MAPGEN& v_GetTransformationInternalToModel (
00289 ) = 0;
00290
00291 virtual void OnDrawBegin (GRE::GEOMETRIC3D_BUILDER *builder, const bool wireframe = false);
00292
00293 virtual void OnDrawEnd ();
00294
00295 };
00296
00297 }
00298
00299 #endif