3dutils.h

Go to the documentation of this file.
00001 /*** 
00002  * \file 3dutils.h <gre/3dutils.h>
00003  * \brief supporting structures
00004  *
00005  * \if NODOC
00006  * $Id: 3dutils.h_v 1.11 2004/08/11 23:04:31 vdronov Exp $
00007  *
00008  * $Log: 3dutils.h_v $
00009  * Revision 1.11  2004/08/11 23:04:31  vdronov
00010  * *** empty log message ***
00011  *
00012  * Revision 1.10  2004/07/30 22:01:50  vdronov
00013  * added DRAW3DMODE
00014  *
00015  * Revision 1.9  2003/09/15 13:48:59  fileserver!dwilliss
00016  * Doxygen
00017  *
00018  * Revision 1.8  2003/08/15 20:01:58  vdronov
00019  * add docs.
00020  *
00021  * Revision 1.7  2003/07/30 14:42:18  mju
00022  * Check inclusion guards.
00023  * Ignore private sections.
00024  *
00025  * Revision 1.5  2003/04/22 19:52:02  vdronov
00026  * added pixalization
00027  *
00028  * Revision 1.2  2003/04/08 17:50:23  vdronov
00029  * changed triangulation structure
00030  *
00031  * Revision 1.1  2003/03/10 15:08:51  vdronov
00032  * Initial revision
00033  * \endif
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 //!< GENERATING_DOXYGEN_OUTPUT
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;                //!< used in TRIANGLEMODE_TIN
00102    SIMPLE_ARRAY<TRIANGLEINDEX> m_Triangles;        //!<  used in TRIANGLEMODE_TIN
00103    BITSET m_EdgesBits;                             //!<  used in TRIANGLEMODE_TIN
00104    BITSET m_TrianglesBits;                         //!<  used in TRIANGLEMODE_TIN
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 //! SCREENPLANE class describes plane in screen space in homogenius coordinates.
00161 class SCREENPLANE {
00162 
00163 public:
00164 
00165    SCREENPLANE (                                //! Constructor 
00166       ) : 
00167       m_IsSet(false),
00168       m_DX(0.0), 
00169       m_DY(0.0), 
00170       m_DW(1.0) 
00171       {};
00172 
00173    ~SCREENPLANE (                               //! Destructor 
00174       ) {};
00175 
00176    //! Clear plane parameters
00177    void Clear (
00178       ) { m_IsSet = false; return;};
00179 
00180    //! Is plane set
00181    //! 
00182    //! @return true if plane is set
00183    bool IsSet (
00184       ) const { return m_IsSet; };
00185 
00186    //! Set plane by three points in homogenius coordinates.
00187    void Set (
00188       const DPOINT3DH& pt1, 
00189       const DPOINT3DH& pt2, 
00190       const DPOINT3DH& pt3
00191       );
00192 
00193    //! Get point on screen plane that projected to screen at center of screen pixel with coordinates (column, line)
00194    //! 
00195    //! @return true if point exists
00196    bool GetPoint (
00197       const INT32 line,
00198       const INT32 column,
00199       DPOINT3DH& point
00200       );
00201 
00202    //! Get extents on screen plane that projected to screen at screen pixel with coordinates (column, line)
00203    //! 
00204    //! @return true if extents exist
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 //!< GENERATING_DOXYGEN_OUTPUT
00224    };
00225 
00226 
00227 //! UTILS3D class contains supportive static methods
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 //!< GENERATING_DOXYGEN_OUTPUT
00269    };
00270 
00271 
00272 };    //! End of namespace
00273 
00274 #endif
00275 

Generated on Tue Dec 14 13:18:12 2004 for TNTsdk by  doxygen 1.3.8-20040913