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