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
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #ifndef INC_GRE_3DUTILS_H
00055 #define INC_GRE_3DUTILS_H
00056
00057 #ifndef INC_MI32_ASURFACE_H
00058 #include <mi32/asurface.h>
00059 #endif
00060
00061 #ifndef INC_MI32_BITSET_H
00062 #include <mi32/bitset.h>
00063 #endif
00064
00065 #ifndef INC_MI32_SIMPLEAR_H
00066 #include <mi32/simplear.h>
00067 #endif
00068
00069 #ifndef INC_MI32_DOUBLEAR_H
00070 #include <mi32/doublear.h>
00071 #endif
00072
00073 #ifndef INC_RVC_NULLMASK_H
00074 #include <rvc/nullmask.h>
00075 #endif
00076
00077 #ifndef INC_RVC_STYLE_H
00078 #include <rvc/style.h>
00079 #endif
00080
00081 #ifndef _VECTOR_
00082 #include <vector>
00083 #endif
00084
00085 namespace GRE {
00086
00087 #ifndef GENERATING_DOXYGEN_OUTPUT
00088 class TERRAIN;
00089 class TEXTURE;
00090 class TEXTUREFILTER;
00091 #endif
00092
00093 enum DRAW3DMODE {
00094 DRAW3DMODE_Texture = 0,
00095 DRAW3DMODE_Color = 1,
00096 DRAW3DMODE_Wireframe = 2,
00097 DRAW3DMODE_PointsField = 3,
00098 DRAW3DMODE_Bitmap = 4
00099 };
00100
00101 enum TRIANGLEMODE {
00102 TRIANGLEMODE_List = 0,
00103 TRIANGLEMODE_Fan = 1,
00104 TRIANGLEMODE_Strip = 2,
00105 TRIANGLEMODE_TIN = 3
00106 };
00107
00108 struct TRIANGLEINDEX {
00109 INT32 vertex1;
00110 INT32 vertex2;
00111 INT32 vertex3;
00112
00113 TRIANGLEINDEX () : vertex1(0), vertex2(0), vertex3(0) {};
00114 TRIANGLEINDEX (INT32 v1, INT32 v2, INT32 v3) : vertex1(v1), vertex2(v2), vertex3(v3) {};
00115 };
00116
00117 struct EDGEINDEX {
00118 INT32 vertexfrom;
00119 INT32 vertexto;
00120 EDGEINDEX () : vertexfrom(0), vertexto(0) {};
00121 EDGEINDEX (INT32 vf, INT32 vt) : vertexfrom(vf), vertexto(vt) {};
00122 };
00123
00124 struct INDEX {
00125 INT32 index;
00126 INDEX () : index(0) {};
00127 INDEX (INT32 i) : index(i) {};
00128 };
00129
00130 struct TRIANGULATION {
00131
00132 TRIANGLEMODE m_Mode;
00133
00134 SIMPLE_ARRAY<FPOINT3D> m_Vertices;
00135 SIMPLE_ARRAY<INDEX> m_Indices;
00136 SIMPLE_ARRAY<EDGEINDEX> m_Edges;
00137 SIMPLE_ARRAY<TRIANGLEINDEX> m_Triangles;
00138 BITSET m_EdgesBits;
00139 BITSET m_TrianglesBits;
00140
00141 DRAW3DMODE m_Draw3DMode;
00142
00143 TERRAIN *m_Terrain;
00144 TEXTURE *m_Texture;
00145 TEXTUREFILTER *m_TextureFilter;
00146
00147 COLOR m_Color;
00148
00149 TRIANGULATION (
00150 ) :
00151 m_Mode(TRIANGLEMODE_List),
00152 m_Draw3DMode(DRAW3DMODE_Texture),
00153 m_Terrain(0),
00154 m_Texture(0),
00155 m_TextureFilter(0)
00156 {
00157 };
00158
00159 ~TRIANGULATION (
00160 ) {
00161 };
00162
00163 };
00164
00165 typedef std::vector<const TRIANGULATION*> TRIANGULATIONVECTOR;
00166
00167 struct PIXALIZATION {
00168
00169 SIMPLE_ARRAY<LPOINT2D> m_Pixels;
00170 DOUBLE_ARRAY<DPOINT3D> m_Points;
00171 DOUBLE_ARRAY<DPOINT3D> m_Points0;
00172 DOUBLE_ARRAY<DPOINT3D> m_Points1;
00173 DOUBLE_ARRAY<DPOINT3D> m_Points2;
00174
00175 DRAW3DMODE m_Draw3DMode;
00176
00177 TERRAIN *m_Terrain;
00178 TEXTURE *m_Texture;
00179 TEXTUREFILTER *m_TextureFilter;
00180
00181 COLOR m_Color;
00182
00183 RVC::STYLE::BITMAPPATTERN *m_BitmapPattern;
00184
00185 PIXALIZATION (
00186 ) :
00187 m_Draw3DMode(DRAW3DMODE_Texture),
00188 m_Terrain(0),
00189 m_Texture(0),
00190 m_TextureFilter(0)
00191 {
00192 };
00193
00194 ~PIXALIZATION (
00195 ) {
00196 };
00197
00198 };
00199
00200 typedef std::vector<const PIXALIZATION*> PIXALIZATIONVECTOR;
00201
00202
00203 class SCREENPLANE {
00204
00205 public:
00206
00207 SCREENPLANE (
00208 ) :
00209 m_IsSet(false),
00210 m_DX(0.0),
00211 m_DY(0.0),
00212 m_DW(1.0)
00213 {};
00214
00215 ~SCREENPLANE (
00216 ) {};
00217
00218
00219 void Clear (
00220 ) { m_IsSet = false; return;};
00221
00222
00223
00224
00225 bool IsSet (
00226 ) const { return m_IsSet; };
00227
00228
00229 void Set (
00230 const DPOINT3DH& pt1,
00231 const DPOINT3DH& pt2,
00232 const DPOINT3DH& pt3
00233 );
00234
00235
00236
00237
00238 bool GetPoint (
00239 const INT32 line,
00240 const INT32 column,
00241 DPOINT3DH& point
00242 );
00243
00244
00245
00246
00247 bool GetCellExtents (
00248 const INT32 line,
00249 const INT32 column,
00250 DPOINT3DH hpoints[4]
00251 );
00252
00253 private:
00254 #ifndef GENERATING_DOXYGEN_OUTPUT
00255
00256 double ALIGN8(m_DX);
00257 double ALIGN8(m_DY);
00258 double ALIGN8(m_DW);
00259 double ALIGN8(m_DL);
00260 double ALIGN8(m_DXZ);
00261 double ALIGN8(m_DYZ);
00262 double ALIGN8(m_DWZ);
00263 bool m_IsSet;
00264
00265 #endif
00266 };
00267
00268
00269
00270 class UTILS3D {
00271 public:
00272
00273 enum CELLTRACE {
00274 CELLTRACE_Edge,
00275 CELLTRACE_Center
00276 };
00277
00278
00279 static UINT8 log2i (
00280 const UINT32 value,
00281 const bool up = true
00282 );
00283
00284 static ERRVALUE CreateBoundaryRegionFromRaster (
00285 SIMPLE_ARRAY<RVC::RASTER*>& rasters,
00286 RVC::RASTER& mask,
00287 REGION2D& region,
00288 const CELLTRACE celltrace
00289 );
00290
00291 private:
00292 #ifndef GENERATING_DOXYGEN_OUTPUT
00293
00294 UTILS3D ();
00295 ~UTILS3D ();
00296
00297 #endif
00298 };
00299
00300
00301 };
00302
00303 #endif
00304