gre/3dgmelem.h

Go to the documentation of this file.
00001 /*** 
00002  * \file 3dgmelem.h <gre/3dgmelem.h>
00003  * \brief Geometrical elements
00004  *
00005  * \if NODOC
00006  * $Id: 3dgmelem.h_v 1.14 2005/11/11 21:39:00 vdronov Exp $
00007  *
00008  * $Log: 3dgmelem.h_v $
00009  * Revision 1.14  2005/11/11 21:39:00  vdronov
00010  * *** empty log message ***
00011  *
00012  * Revision 1.13  2005/10/14 21:31:54  mju
00013  * Fix guard name.
00014  *
00015  * Revision 1.12  2005/10/05 15:41:17  mju
00016  * Fix unref parm warning.
00017  *
00018  * Revision 1.11  2005/09/12 18:34:19  vdronov
00019  * added labels rendering
00020  *
00021  * Revision 1.10  2005/08/22 20:42:15  vdronov
00022  * text rendering in 3d
00023  *
00024  * Revision 1.9  2005/07/22 21:49:16  vdronov
00025  * added bitmap pattern rendering
00026  *
00027  * Revision 1.8  2005/06/02 19:19:48  vdronov
00028  * *** empty log message ***
00029  *
00030  * Revision 1.7  2005/05/20 21:53:28  vdronov
00031  * *** empty log message ***
00032  *
00033  * Revision 1.6  2005/05/05 21:09:52  vdronov
00034  * finished symbolpattern
00035  *
00036  * Revision 1.5  2005/04/29 22:08:34  vdronov
00037  * *** empty log message ***
00038  *
00039  * Revision 1.4  2005/04/15 15:07:23  vdronov
00040  * added 3d line rendering
00041  *
00042  * Revision 1.3  2005/04/08 19:09:31  vdronov
00043  * *** empty log message ***
00044  *
00045  * Revision 1.2  2005/03/10 21:42:44  vdronov
00046  * *** empty log message ***
00047  *
00048  * Revision 1.1  2005/02/17 18:01:16  vdronov
00049  * Initial revision
00050  *
00051  *
00052  * \endif
00053  */ 
00054 
00055 #ifndef  INC_GRE_3DGMELEM_H
00056 #define  INC_GRE_3DGMELEM_H
00057 
00058 #ifndef  INC_MI32_BITSET_H
00059 #include <mi32/bitset.h>
00060 #endif
00061 
00062 #ifndef  INC_MI32_SIMPLEAR_H
00063 #include <mi32/simplear.h>
00064 #endif
00065 
00066 #ifndef  INC_MI32_DOUBLEAR_H
00067 #include <mi32/doublear.h>
00068 #endif
00069 
00070 #ifndef  INC_MI32_MGD2_H
00071 #include <mi32/mgd2.h>
00072 #endif
00073 
00074 #ifndef  INC_GRE_3DUTILS_H
00075 #include <gre/3dutils.h>
00076 #endif
00077 
00078 #ifndef  INC_GRE_3DSCENE_H
00079 #include <gre/3dscene.h>
00080 #endif
00081 
00082 #ifndef  INC_GRE_3DPNTFLD_H
00083 #include <gre/3dpntfld.h>
00084 #endif
00085 
00086 #ifndef  INC_MI32_TRIANGUL_H
00087 #include <mi32/triangul.h>
00088 #endif
00089 
00090 #ifndef  INC_MI32_REGION2D_H
00091 #include <mi32/region2d.h>
00092 #endif
00093 
00094 #ifndef  INC_RVC_STYLE_H
00095 #include <rvc/style.h>
00096 #endif
00097 
00098 #ifndef  INC_RVC_VECTOR_H
00099 #include <rvc/vector.h>
00100 #endif
00101 
00102 namespace GRE {
00103 
00104 #ifndef GENERATING_DOXYGEN_OUT
00105 struct TRIANGULATION;
00106 class  TERRAIN;
00107 #endif // GENERATING_DOXYGEN_OUTPUT
00108 
00109 class GEOMETRIC3D_BUILDER {
00110 public:
00111 
00112    enum ELEMMODE {
00113       ELEMMODE_Standard,
00114       ELEMMODE_Highlighted,
00115       ELEMMODE_Active
00116       };
00117 
00118    ERRVALUE DrawPoint2D (
00119       const DPOINT2D& point, 
00120       const POINTSTYLE& style
00121       );
00122 
00123    ERRVALUE DrawLabel2D (
00124       const RVC::VECTOR::LABEL& label, 
00125       const LABELSTYLE& style
00126       );
00127 
00128    ERRVALUE DrawPoint3D (
00129       const DPOINT3D& point, 
00130       const POINTSTYLE& style
00131       );
00132 
00133    ERRVALUE DrawLine2D (
00134       const POLYLINE& polyline, 
00135       const LINESTYLE& style,
00136       const RVC::STYLE::LINEPATTERN& pattern
00137       );
00138 
00139    ERRVALUE DrawLine3D (
00140       const POLYLINE& polyline, 
00141       const LINESTYLE& style
00142       );
00143 
00144    ERRVALUE DrawRectangle2D (
00145       const DRECT2D& rect, 
00146       const LINESTYLE& style,
00147       const RVC::STYLE::LINEPATTERN& pattern
00148       );
00149 
00150    ERRVALUE DrawCircle2D (
00151       const DPOINT2D& center, 
00152       const double radius, 
00153       const LINESTYLE& style,
00154       const RVC::STYLE::LINEPATTERN& pattern
00155       );
00156 
00157    ERRVALUE DrawPolygon2D (
00158       const POLYLINE& polyline, 
00159       const POLYSTYLE& style//,
00160       //const RVC::STYLE::LINEPATTERN& pattern
00161       );
00162 
00163    ERRVALUE DrawSubRegion2D (
00164       const SUBREGION2D& subregion, 
00165       const POLYSTYLE& style//,
00166       //const RVC::STYLE::LINEPATTERN& pattern
00167       );
00168 
00169    ERRVALUE DrawRegion2D (
00170       const REGION2D& region, 
00171       const POLYSTYLE& style//,
00172       //const RVC::STYLE::LINEPATTERN& pattern
00173       );
00174 
00175    ERRVALUE FillPoint2D (
00176       const DPOINT2D& point, 
00177       const POINTSTYLE& style,
00178       const RVC::STYLE::SYMBOLPATTERN& pattern
00179       );
00180 
00181    ERRVALUE FillLabel2D (
00182       const RVC::VECTOR::LABEL& label, 
00183       const LABELSTYLE& style,
00184       const RVC::STYLE& styleobj
00185       );
00186 
00187    ERRVALUE FillPoint3D (
00188       const DPOINT3D& point, 
00189       const POINTSTYLE& style
00190       );
00191 
00192    ERRVALUE FillLine2D (
00193       const POLYLINE& polyline, 
00194       const LINESTYLE& style,
00195       const RVC::STYLE::LINEPATTERN& pattern,
00196       const MGD::LINECAP linecap = MGD::LINECAP_Butt
00197       );
00198 
00199    ERRVALUE FillLine3D (
00200       const POLYLINE& polyline, 
00201       const LINESTYLE& style
00202       );
00203 
00204    ERRVALUE FillRectangle2D (
00205       const DRECT2D& rect, 
00206       const POLYSTYLE& style,
00207       const RVC::STYLE& styleobj
00208       );
00209 
00210    ERRVALUE FillCircle2D (
00211       const DPOINT2D& center, 
00212       const double radius, 
00213       const POLYSTYLE& style,
00214       const RVC::STYLE& styleobj
00215       );
00216 
00217    ERRVALUE FillPolygon2D (
00218       const POLYLINE& polyline, 
00219       const POLYSTYLE& style,
00220       const RVC::STYLE& styleobj
00221       );
00222 
00223    ERRVALUE FillSubRegion2D (
00224       const SUBREGION2D& subregion, 
00225       const POLYSTYLE& style,
00226       const RVC::STYLE& styleobj
00227       );
00228 
00229    ERRVALUE FillRegion2D (
00230       const REGION2D& region, 
00231       const POLYSTYLE& style,
00232       const RVC::STYLE& styleobj
00233       );
00234 
00235    double GetFactor (
00236       ) { return m_SF; };
00237 
00238 
00239 // MGD::DEVICE& GetDevice () { return m_Device; };
00240 
00241    ERRVALUE Init (
00242       GRE::SCENE3D* scene, 
00243       GRE::TERRAIN* terrain,
00244       const double s2d
00245       );
00246 
00247    void Clear (
00248       ) {
00249       m_Scene = 0; 
00250       m_Terrain = 0;
00251       };
00252 
00253    void SetHighlightedColor (
00254       const COLOR color
00255       ) { m_HighlightedColor = color; return; };
00256 
00257    void SetActiveColor (
00258       const COLOR color
00259       ) { m_ActiveColor = color; return; };
00260 
00261    void SetElementsMode (
00262       const ELEMMODE mode
00263       ) { m_ElementsMode = mode; return; };
00264 
00265 protected:
00266 
00267    GEOMETRIC3D_BUILDER () {};
00268    virtual ~GEOMETRIC3D_BUILDER () {};
00269 
00270 private:
00271 
00272    static bool Intersect (
00273       const FPOINT2D& ps,
00274       const FPOINT2D& pe,
00275       const FPOINT2D& qs,
00276       const FPOINT2D& qe,
00277       FPOINT2D& p
00278       );
00279 
00280 // class BUILDER_DEVICE : public MGD::DEVICE {
00281 // public:
00282 // private:
00283 //    };
00284 
00285    static const INT32 s_IcosahedronNumVertices = 12;
00286    static const INT32 s_IcosahedronNumTriangles = 20;
00287    static const float s_IcosahedronTriangleArea;
00288 
00289    static const FPOINT3D s_IcosahedronVertices[12];
00290    static const GRE::TRIANGLEINDEX s_IcosahedronTriangles[20];
00291 
00292    static const double s_FScale;
00293    static const double s_FXOffset;
00294    static const double s_FYOffset;
00295 
00296    GRE::SCENE3D* m_Scene; 
00297    GRE::TERRAIN* m_Terrain;
00298    DPOINT3D m_Direction;
00299    DPOINT3D m_Viewer;
00300    ELEMMODE m_ElementsMode;
00301    COLOR m_HighlightedColor;
00302    COLOR m_ActiveColor;
00303    FPOINT3D m_SunDirection;
00304 
00305    SIMPLE_ARRAY<FPOINT3D> m_Points;
00306    POLYLINE m_Polyline;
00307    POLYLINE m_PolylineE;
00308    SIMPLE_ARRAY<double> m_Offset;
00309    GRE::TRIANGULATION m_Triangulation;
00310    GRE::PIXALIZATION m_Pixalization;
00311    TRIANGULATOR2D m_Triangulator;
00312    SIMPLE_ARRAY<DTRIANGLE2D> m_Triangles;
00313 // BUILDER_DEVICE m_Device;
00314 
00315    double m_S2D;
00316    double m_S3D;
00317    double m_SF;
00318 
00319    virtual void OnConstruction (
00320       GRE::TRIANGULATION& triangulation
00321       ) = 0;
00322 
00323    virtual void OnConstruction (
00324       GRE::PIXALIZATION& pixalization
00325       ) = 0;
00326 
00327    ERRVALUE DrawSegment2D (
00328       const FPOINT2D& pt1,
00329       const FPOINT2D& pt2,
00330       const COLOR& color
00331       );
00332 
00333    ERRVALUE OutlinePolygon2D (
00334       const POLYLINE& polyline, 
00335       const float thickness,
00336       const COLOR& color,
00337       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00338       );
00339 
00340    ERRVALUE OutlineSubRegion2D (
00341       const SUBREGION2D& subregion, 
00342       const float thickness,
00343       const COLOR& color,
00344       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00345       );
00346 
00347    ERRVALUE OutlineRegion2D (
00348       const REGION2D& region, 
00349       const float thickness,
00350       const COLOR& color,
00351       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00352       );
00353 
00354    ERRVALUE FillPoint2DBuildIn (
00355       const DPOINT2D& point, 
00356       const POINTSTYLE& style
00357       );
00358 
00359    ERRVALUE FillPoint2DUseSymbol (
00360       const DPOINT2D& point, 
00361       const POINTSTYLE& style,
00362       const RVC::STYLE::SYMBOLPATTERN& pattern
00363       );
00364 
00365    ERRVALUE FillPoint3DBuildIn (
00366       const DPOINT3D& point, 
00367       const POINTSTYLE& style
00368       );
00369 
00370    ERRVALUE FillPoint3DUseSymbol (
00371       const DPOINT3D& point, 
00372       const POINTSTYLE& style
00373       );
00374 
00375    ERRVALUE FillLine2DSolid (
00376       const POLYLINE& polyline, 
00377       const LINESTYLE& style,
00378       const MGD::LINECAP linecap = MGD::LINECAP_Round
00379       );
00380 
00381    ERRVALUE FillLine2DSolid (
00382       const POLYLINE& polyline, 
00383       const float thickness,
00384       const COLOR& color,
00385       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round,
00386       const MGD::LINECAP linecap = MGD::LINECAP_Round
00387       );
00388 
00389 
00390    ERRVALUE FillLine2DUsePattern (
00391       const POLYLINE& polyline, 
00392       const LINESTYLE& style,
00393       const RVC::STYLE::LINEPATTERN& pattern
00394       );
00395 
00396    ERRVALUE FillLine3DSolid (
00397       const POLYLINE& polyline, 
00398       const LINESTYLE& style
00399       );
00400 
00401    ERRVALUE FillLine3DUsePattern (
00402       const POLYLINE& polyline, 
00403       const LINESTYLE& style
00404       );
00405 
00406    ERRVALUE FillTriangle2D (
00407       const FPOINT2D& pt1,
00408       const FPOINT2D& pt2,
00409       const FPOINT2D& pt3,
00410       const COLOR& color
00411       );
00412 
00413    ERRVALUE GRE::GEOMETRIC3D_BUILDER::FillTriangle2D (
00414       const FPOINT2D& pt1,
00415       const FPOINT2D& pt2,
00416       const FPOINT2D& pt3,
00417       const COLOR& color,
00418       const RVC::STYLE::BITMAPPATTERN& pattern
00419       );
00420 
00421    ERRVALUE FillRectangle2D (
00422       const DRECT2D& rectangle,
00423       const COLOR& color
00424       );
00425 
00426    ERRVALUE FillTriangle3D (
00427       const FPOINT3D& pt1,
00428       const FPOINT3D& pt2,
00429       const FPOINT3D& pt3,
00430       const COLOR& color
00431       );
00432 
00433    ERRVALUE DrawCircle2D (
00434       const FPOINT2D& point,
00435       const float radius,
00436       const float thickness,
00437       const COLOR& color
00438       );
00439 
00440    ERRVALUE DrawArc2D (
00441       const FPOINT2D& point,
00442       const float radius,
00443       const float thickness,
00444       const float start,
00445       const float sweep,
00446       const COLOR& color,
00447       const MGD::SHAPECLOSE shapeclose = MGD::SHAPECLOSE_None
00448       );
00449 
00450    ERRVALUE DrawEllipse2D (
00451       const FPOINT2D& point,
00452       const float x,
00453       const float y,
00454       const float thickness,
00455       const float rotation,
00456       const COLOR& color
00457       );
00458 
00459    ERRVALUE FillCircle2D (
00460       const FPOINT2D& point,
00461       const float radius,
00462       const COLOR& color
00463       );
00464 
00465    ERRVALUE FillArcWedge2D (
00466       const FPOINT2D& point,
00467       const float radius,
00468       const float start,
00469       const float sweep,
00470       const COLOR& color
00471       );
00472 
00473    ERRVALUE FillArcChord2D (
00474       const FPOINT2D& point,
00475       const float radius,
00476       const float start,
00477       const float sweep,
00478       const COLOR& color
00479       );
00480 
00481    ERRVALUE FillArcChord(
00482       const FPOINT2D& point1,
00483       const FPOINT2D& point2,
00484       const FPOINT2D& center,
00485       const float radius,
00486       const COLOR& color
00487       );
00488 
00489    ERRVALUE FillEllipse2D (
00490       const FPOINT2D& point,
00491       const float x,
00492       const float y,
00493       const float rotation,
00494       const COLOR& color
00495       );
00496 
00497    ERRVALUE FillSphericalTriangle3D (
00498       const FPOINT3D& center,
00499       const float radius,
00500       const INT32 depth,
00501       const FPOINT3D& pt1,
00502       const FPOINT3D& pt2,
00503       const FPOINT3D& pt3,
00504       const COLOR& color
00505       );
00506 
00507    ERRVALUE FillSphere3D (
00508       const FPOINT3D& center,
00509       const float radius,
00510       const COLOR& color
00511       );
00512 
00513    ERRVALUE FillCube3D (
00514       const FPOINT3D& center,
00515       const float x,
00516       const float y,
00517       const float z,
00518       const COLOR& color
00519       );
00520 
00521    ERRVALUE FillCylindricalRectangle3D (
00522       const FPOINT3D& scenter,
00523       const float sradius,
00524       const FPOINT3D& ecenter,
00525       const float eradius,
00526       const FPOINT3D& n1,
00527       const FPOINT3D& n2,
00528       const INT32 depth,
00529       const COLOR& color
00530       );
00531 
00532    ERRVALUE FillCylinder3D (
00533       const FPOINT3D& scenter,
00534       const float sradius,
00535       const FPOINT3D& ecenter,
00536       const float eradius,
00537       const COLOR& color
00538       );
00539 
00540    ERRVALUE FillTriangles2DSolid (
00541       const SIMPLE_ARRAY<DTRIANGLE2D>& triangles,
00542       const COLOR& color
00543       );
00544 
00545    ERRVALUE FillTriangles2DUseBitmap (
00546       const SIMPLE_ARRAY<DTRIANGLE2D>& triangles,
00547       const POLYSTYLE& style,
00548       const RVC::STYLE::BITMAPPATTERN& pattern
00549       );
00550 
00551    DRECT2D ComputeExtents (
00552       const SIMPLE_ARRAY<DTRIANGLE2D>& triangles
00553       );
00554 
00555    ERRVALUE FillRectangle2DUseHatch (
00556       const DRECT2D& extents,
00557       const POLYSTYLE& style,
00558       const RVC::STYLE::HATCHPATTERN& pattern
00559       );
00560 
00561    ERRVALUE FillBorder2DSolid (
00562       const POLYLINE& polyline, 
00563       const POLYSTYLE& style
00564       );
00565 
00566    ERRVALUE FillBorder2DSolid (
00567       const POLYLINE& polyline, 
00568       const float thickness,
00569       const COLOR& color,
00570       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00571       );
00572 
00573    ERRVALUE FillBorder2DUsePattern (
00574       const POLYLINE& polyline, 
00575       const POLYSTYLE& style,
00576       const RVC::STYLE::LINEPATTERN& pattern
00577       );
00578 
00579    ERRVALUE FillPolygon2D (
00580       const POLYLINE& polyline, 
00581       const bool fill,
00582       const float thickness,
00583       const COLOR& color,
00584       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00585       );
00586 
00587    ERRVALUE FillSubRegion2D (
00588       const SUBREGION2D& subregion, 
00589       const bool fill,
00590       const float thickness,
00591       const COLOR& color,
00592       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00593       );
00594 
00595    ERRVALUE FillRegion2D (
00596       const REGION2D& region, 
00597       const bool fill,
00598       const float thickness,
00599       const COLOR& color,
00600       const MGD::LINEJOIN linejoin = MGD::LINEJOIN_Round
00601       );
00602 
00603    void ApplyAffineForward (
00604       const TRANS2D_AFFINE& affine, 
00605       FPOINT2D& point
00606       );
00607 
00608    void ApplyAffineInverse (
00609       const TRANS2D_AFFINE& affine, 
00610       FPOINT2D& point
00611       );
00612 
00613    void SetMask (
00614       const SIMPLE_ARRAY<DTRIANGLE2D> triangles,
00615       GRE::POINTSFIELD& PointsField
00616       );
00617 
00618    void ClearMask (
00619       GRE::POINTSFIELD& PointsField
00620       );
00621 
00622    ERRVALUE DrawPixels (
00623       SIMPLE_ARRAY<FPOINT3D>& points,
00624       const COLOR& color
00625       );
00626 
00627    ERRVALUE GRE::GEOMETRIC3D_BUILDER::DrawPixels (
00628       SIMPLE_ARRAY<FPOINT3D>& points,
00629       const COLOR& color,
00630       const RVC::STYLE::BITMAPPATTERN& pattern
00631       );
00632 
00633    ERRVALUE GRE::GEOMETRIC3D_BUILDER::DrawTriangle3D (
00634       const FPOINT3D& pt1,
00635       const FPOINT3D& pt2,
00636       const FPOINT3D& pt3,
00637       const COLOR& color
00638       );
00639 
00640    ERRVALUE ConstructScales ();
00641    double GetElevation( const double x, const double y);
00642 
00643    };
00644 
00645 
00646 //! GEOMETRIC3D_ELEMENTS class describes base container class of geometric elements
00647 class GEOMETRIC3D_ELEMENTS {
00648 
00649 public:
00650 
00651    class ITERATOR_BASE {
00652    public:
00653 
00654       virtual ~ITERATOR_BASE (
00655          ) {};
00656 
00657       // Dereference operator
00658       virtual INT32 operator* (
00659          ) const = 0;
00660    
00661       // Pre-increment operator.
00662       virtual ITERATOR_BASE* operator++ (
00663          ) = 0;
00664 
00665       // Equality operator.
00666       virtual bool operator== (
00667          const ITERATOR_BASE* rhs
00668          ) const = 0;
00669 
00670       // Inequality operator.
00671       virtual bool operator!= (
00672          const ITERATOR_BASE* rhs
00673          ) const = 0;
00674 
00675    protected:
00676 
00677       ITERATOR_BASE () {};
00678 
00679       };
00680 
00681 
00682    class BITSET_ITERATOR_BASE : public ITERATOR_BASE {
00683    public:
00684 
00685       ~BITSET_ITERATOR_BASE () {};
00686 
00687       void Begin();
00688 
00689       void End();
00690 
00691       INT32 operator* () const;
00692    
00693       GRE::GEOMETRIC3D_ELEMENTS::ITERATOR_BASE* operator++ ();
00694 
00695       bool operator== (
00696          const GRE::GEOMETRIC3D_ELEMENTS::ITERATOR_BASE* rhs
00697          ) const;
00698 
00699       bool operator!= (
00700          const GRE::GEOMETRIC3D_ELEMENTS::ITERATOR_BASE* rhs
00701          ) const;
00702    
00703    protected:
00704 
00705       BITSET_ITERATOR_BASE (const bool selected) : m_Selected(selected) { End(); };
00706 
00707    private:
00708 
00709       const bool m_Selected;
00710       BITSET m_Bitset;
00711       BITSET::ITERATOR m_Iterator;
00712 
00713       BITSET_ITERATOR_BASE ();
00714 
00715       virtual ERRVALUE ComputeSelectedElements (BITSET& bitset) = 0;
00716       virtual ERRVALUE ComputeHighlightedElements (BITSET& bitset) = 0;
00717 
00718       };
00719 
00720    class ITERATOR;
00721    friend class ITERATOR;
00722 
00723    class ITERATOR {
00724       public:
00725 
00726          ITERATOR () : m_Base(0) {};
00727          ~ITERATOR () {};
00728 
00729          // Dereference operator
00730          INT32 operator* (
00731             ) const {return m_Base->operator*();};
00732    
00733          // Pre-increment operator.
00734          ITERATOR& operator++ (
00735             ) {m_Base->operator++(); return *this; }
00736 
00737          // Equality operator.
00738          bool operator== (
00739             const ITERATOR& rhs
00740             ) const { return m_Base->operator==(rhs.m_Base); };
00741 
00742          // Inequality operator.
00743          bool operator!= (
00744             const ITERATOR& rhs
00745             ) const { return m_Base->operator!=(rhs.m_Base); };
00746 
00747       private:
00748 
00749          ITERATOR_BASE *m_Base;
00750 
00751          ITERATOR (ITERATOR_BASE* base) : m_Base(base) {};
00752 
00753          friend class GEOMETRIC3D_ELEMENTS;
00754          };
00755 
00756    GEOMETRIC3D_ELEMENTS (                          //! Constructor 
00757       ) {};
00758 
00759    virtual ~GEOMETRIC3D_ELEMENTS (                    //! Destructor 
00760       ) {};
00761 
00762    //!   Is terrain needed for geometric construction 
00763    //!
00764    //! @return true id needed or false if not
00765    bool IsTerrainNeeded (
00766       ) { return v_IsTerrainNeeded(); };
00767 
00768    //!   Is points field needed for geometric construction 
00769    //!
00770    //! @return true id needed or false if not
00771    bool IsPointsFieldNeeded (
00772       ) { return v_IsPointsFieldNeeded(); };
00773 
00774    void ConstructWireframe (
00775       const INT32 id,
00776       GEOMETRIC3D_BUILDER* builder
00777       ) { v_ConstructWireframe(id, builder); return; };
00778 
00779    void ConstructSolid (
00780       const INT32 id,
00781       GEOMETRIC3D_BUILDER* builder
00782       ) { v_ConstructSolid(id, builder); return; };
00783 
00784    void OnConstructionBegin (
00785       const bool wireframe
00786       ) { v_OnConstructionBegin(wireframe); return; };
00787 
00788    void OnConstructionEnd (
00789       ) { v_OnConstructionEnd(); return; };
00790 
00791    ITERATOR BeginSelected (
00792       ) { return ITERATOR(GetSelectedBase(true)); };
00793 
00794    ITERATOR EndSelected (
00795       ) { return ITERATOR(GetSelectedBase(false)); }; 
00796 
00797    ITERATOR BeginHighlited (
00798       ) { return ITERATOR(GetHighlightedBase(true)); };
00799 
00800    ITERATOR EndHighlited (
00801       ) { return ITERATOR(GetHighlightedBase(false)); }; 
00802 
00803    INT32 GetActiveElement (
00804       ) { return v_GetActiveElement(); };
00805 
00806    INT32 GetNumSelectedElements (
00807       ) { return v_GetNumSelectedElements(); };
00808 
00809    INT32 GetNumHighlightedElements (
00810       ) { return v_GetNumHighlightedElements(); };
00811 
00812 private:
00813 
00814    #ifndef GENERATING_DOXYGEN_OUTPUT
00815 
00816    virtual ITERATOR_BASE* GetSelectedBase (const bool begin) = 0;
00817    virtual ITERATOR_BASE* GetHighlightedBase (const bool begin) = 0;
00818    virtual INT32 v_GetActiveElement () = 0;
00819    virtual INT32 v_GetNumSelectedElements () = 0;
00820    virtual INT32 v_GetNumHighlightedElements () = 0;
00821    virtual void v_ConstructWireframe (const INT32 id, GEOMETRIC3D_BUILDER* builder) = 0;
00822    virtual void v_ConstructSolid (const INT32 id, GEOMETRIC3D_BUILDER* builder) = 0;
00823    virtual void v_OnConstructionBegin (const bool /*wireframe*/) { return; };
00824    virtual void v_OnConstructionEnd () { return; };
00825    virtual bool v_IsTerrainNeeded () = 0;
00826    virtual bool v_IsPointsFieldNeeded () = 0;
00827 
00828 
00829    #endif //!< GENERATING_DOXYGEN_OUTPUT
00830    };
00831 
00832 typedef SIMPLE_ARRAY<GEOMETRIC3D_ELEMENTS*> GEOMETRIC3D_ELEMENTS_ARRAY;
00833 
00834 }     // End of GRE namespace
00835 
00836 #endif
00837 

Generated on Thu Apr 26 04:44:38 2007 for TNTsdk by  doxygen 1.5.2