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

Generated on Wed May 31 15:26:37 2006 for TNTsdk by  doxygen 1.3.8-20040913