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