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