- Main Page
- Related Pages
- Modules
- Classes
- Files

# EnvelopeImpl.h

Go to the documentation of this file.

    00001 #ifndef _ENVELOPEIMPL_H_
    00002 #define _ENVELOPEIMPL_H_
    00003
    00004 //
    00005 // Copyright (C) 2004-2006  Autodesk, Inc.
    00006 //
    00007 // This library is free software; you can redistribute it and/or
    00008 // modify it under the terms of version 2.1 of the GNU Lesser
    00009 // General Public License as published by the Free Software Foundation.
    00010 //
    00011 // This library is distributed in the hope that it will be useful,
    00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00014 // Lesser General Public License for more details.
    00015 //
    00016 // You should have received a copy of the GNU Lesser General Public
    00017 // License along with this library; if not, write to the Free Software
    00018 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    00019 //
    00020
    00021
    00022
    00023 #ifdef _WIN32
    00024 #pragma once
    00025 #endif
    00026
    00027 #include <Geometry/IEnvelope.h>
    00028 #include <Geometry/IDirectPosition.h>
    00029
    00030 /// \brief
    00031 /// The FdoEnvelopeImpl class is a default implementation of FdoIEnvelope.
    00032 /// FdoEnvelopeImpl implements accessors from FdoIEnvelope, matching mutators, and simple data members.
    00033 /// Assignment, exact equality operators, and utility methods are also provided.
    00034 class FdoEnvelopeImpl : public FdoIEnvelope
    00035 {
    00036
    00037 /// \cond DOXYGEN-IGNORE
    00038 protected:
    00039     /// \brief
    00040     /// Constructs a default instance of a FdoEnvelopeImpl object.
    00041     ///
    00042     /// \remarks
    00043     ///  Ordinate values default to numeric_limits<double>::quiet_NaN().
    00044     ///
    00045     /// \return
    00046     /// Returns nothing
    00047     ///
    00048     FDO_GEOM_API FdoEnvelopeImpl();
    00049
    00050     /// \brief
    00051     /// Constructs a 2D FdoEnvelopeImpl object from X and Y ordinates.
    00052     ///
    00053     /// \remarks
    00054     ///  Z ordinate value defaults to numeric_limits<double>::quiet_NaN().
    00055     ///
    00056     /// \param minX
    00057     /// Input Lower-left X ordinate
    00058     /// \param minY
    00059     /// Input Lower-left Y ordinate
    00060     /// \param maxX
    00061     /// Input Upper-right X ordinate
    00062     /// \param maxY
    00063     /// Input Upper-right Y ordinate
    00064     ///
    00065     /// \return
    00066     /// Returns nothing
    00067     ///
    00068     FDO_GEOM_API FdoEnvelopeImpl(double minX, double minY,
    00069                  double maxX, double maxY);
    00070
    00071     /// \brief
    00072     /// Constructs a 3D FdoEnvelopeImpl object from X, Y and Z ordinates.
    00073     ///
    00074     /// \param minX
    00075     /// Input Lower-left X ordinate
    00076     /// \param minY
    00077     /// Input Lower-left Y ordinate
    00078     /// \param minZ
    00079     /// Input Lower-left, rear Z ordinate
    00080     /// \param maxX
    00081     /// Input Upper-right X ordinate
    00082     /// \param maxY
    00083     /// Input Upper-right Y ordinate
    00084     /// \param maxZ
    00085     /// Input Upper-right, front Z ordinate
    00086     ///
    00087     /// \return
    00088     /// Returns nothing
    00089     ///
    00090     FDO_GEOM_API FdoEnvelopeImpl(double minX, double minY, double minZ,
    00091                  double maxX, double maxY, double maxZ);
    00092
    00093     /// \brief
    00094     /// Copy constructor for FdoEnvelopeImpl.
    00095     ///
    00096     /// \param envelopeImpl
    00097     /// Input envelope to copy
    00098     ///
    00099     /// \return
    00100     /// Returns nothing
    00101     ///
    00102     FDO_GEOM_API FdoEnvelopeImpl(FdoEnvelopeImpl& envelopeImpl);
    00103
    00104     /// \brief
    00105     /// Constructs a FdoEnvelopeImpl object from two positions.
    00106     ///
    00107     /// \param lowerLeft
    00108     /// Input Lower-left position
    00109     /// \param upperRight
    00110     /// Input Upper-right position
    00111     ///
    00112     /// \return
    00113     /// Returns nothing
    00114     ///
    00115     FDO_GEOM_API FdoEnvelopeImpl(FdoIDirectPosition* lowerLeft, FdoIDirectPosition * upperRight);
    00116
    00117     /// \brief
    00118     ///  Constructs a FdoEnvelopeImpl object by copying from an array of ordinates.
    00119     ///
    00120     /// \param dimensionType
    00121     /// Input dimensionality of the ordinates (see FdoDimensionality)
    00122     /// \param ordinates
    00123     /// Input ordinate array representing two positions
    00124     ///
    00125     /// \return
    00126     /// Returns nothing
    00127     ///
    00128     FDO_GEOM_API FdoEnvelopeImpl(FdoInt32 dimensionType, double * ordinates);
    00129
    00130     /// \brief
    00131     /// Default destructor.
    00132     ///
    00133     /// \return
    00134     /// Returns nothing
    00135     ///
    00136     virtual ~FdoEnvelopeImpl();
    00137
    00138 /// \endcond
    00139
    00140 public:
    00141
    00142     /// \brief
    00143     /// Constructs a default instance of a FdoEnvelopeImpl object.
    00144     ///
    00145     /// \remarks
    00146     ///  Ordinate values default to numeric_limits<double>::quiet_NaN().
    00147     ///
    00148     /// \return
    00149     /// Returns nothing
    00150     ///
    00151     FDO_GEOM_API static FdoEnvelopeImpl* Create();
    00152
    00153     /// \brief
    00154     /// Constructs a 2D FdoEnvelopeImpl object from X and Y ordinates.
    00155     ///
    00156     /// \remarks
    00157     ///  Z ordinate value defaults to numeric_limits<double>::quiet_NaN().
    00158     ///
    00159     /// \param minX
    00160     /// Input Lower-left X ordinate
    00161     /// \param minY
    00162     /// Input Lower-left Y ordinate
    00163     /// \param maxX
    00164     /// Input Upper-right X ordinate
    00165     /// \param maxY
    00166     /// Input Upper-right Y ordinate
    00167     ///
    00168     /// \return
    00169     /// Returns nothing
    00170     ///
    00171     FDO_GEOM_API static FdoEnvelopeImpl* Create(double minX, double minY,
    00172                  double maxX, double maxY);
    00173
    00174     /// \brief
    00175     /// Constructs a 3D FdoEnvelopeImpl object from X, Y and Z ordinates.
    00176     ///
    00177     /// \param minX
    00178     /// Input Lower-left X ordinate
    00179     /// \param minY
    00180     /// Input Lower-left Y ordinate
    00181     /// \param minZ
    00182     /// Input Lower-left, rear Z ordinate
    00183     /// \param maxX
    00184     /// Input Upper-right X ordinate
    00185     /// \param maxY
    00186     /// Input Upper-right Y ordinate
    00187     /// \param maxZ
    00188     /// Input Upper-right, front Z ordinate
    00189     ///
    00190     /// \return
    00191     /// Returns nothing
    00192     ///
    00193     FDO_GEOM_API static FdoEnvelopeImpl* Create(double minX, double minY, double minZ,
    00194                  double maxX, double maxY, double maxZ);
    00195
    00196     /// \brief
    00197     /// Constructs a copy of a FdoEnvelopeImpl.
    00198     ///
    00199     /// \param envelopeImpl
    00200     /// Input envelope to copy
    00201     ///
    00202     /// \return
    00203     /// Returns nothing
    00204     ///
    00205     FDO_GEOM_API static FdoEnvelopeImpl* Create(FdoEnvelopeImpl& envelopeImpl);
    00206
    00207     /// \brief
    00208     /// Constructs a FdoEnvelopeImpl object from two positions.
    00209     ///
    00210     /// \param lowerLeft
    00211     /// Input Lower-left position
    00212     /// \param upperRight
    00213     /// Input Upper-right position
    00214     ///
    00215     /// \return
    00216     /// Returns nothing
    00217     ///
    00218     FDO_GEOM_API static FdoEnvelopeImpl* Create(FdoIDirectPosition* lowerLeft, FdoIDirectPosition * upperRight);
    00219
    00220     /// \brief
    00221     ///  Constructs a FdoEnvelopeImpl object by copying from an array of ordinates.
    00222     ///
    00223     /// \param dimensionType
    00224     /// Input dimensionality of the ordinates (see FdoDimensionality)
    00225     /// \param ordinates
    00226     /// Input ordinate array representing two positions
    00227     ///
    00228     /// \return
    00229     /// Returns nothing
    00230     ///
    00231     FDO_GEOM_API static FdoEnvelopeImpl *Create(FdoInt32 dimensionType, double * ordinates);
    00232
    00233     /// \brief
    00234     /// Equality operator for FdoEnvelopeImpl.
    00235     ///
    00236     /// \param rhs
    00237     /// Input envelope for comparison (right-hand-side of equation)
    00238     ///
    00239     /// \return
    00240     /// Returns true if all non-NaN ordinates exactly equal.  All NaN values compare as equal to each other.
    00241     ///
    00242     FDO_GEOM_API bool operator==(FdoEnvelopeImpl& rhs) const;
    00243
    00244     /// \brief
    00245     /// Gets the minimum X coordinate value.
    00246     ///
    00247     /// \return
    00248     /// Returns the minimum X ordinate; numeric_limits<double>::quiet_NaN() by default
    00249     ///
    00250     FDO_GEOM_API double GetMinX() const;
    00251
    00252     /// \brief
    00253     /// Gets the minimum Y coordinate value.
    00254     ///
    00255     /// \return
    00256     /// Returns the minimum Y ordinate; numeric_limits<double>::quiet_NaN() by default
    00257     ///
    00258     FDO_GEOM_API double GetMinY() const;
    00259
    00260     /// \brief
    00261     /// Gets the minimum Z coordinate value.
    00262     ///
    00263     /// \return
    00264     /// Returns the minimum Z ordinate; numeric_limits<double>::quiet_NaN() by default
    00265     ///
    00266     FDO_GEOM_API double GetMinZ() const;
    00267
    00268     /// \brief
    00269     /// Gets the maximum X coordinate value.
    00270     ///
    00271     /// \return
    00272     /// Returns the maximum X ordinate; numeric_limits<double>::quiet_NaN() by default
    00273     ///
    00274     FDO_GEOM_API double GetMaxX() const;
    00275
    00276     /// \brief
    00277     /// Gets the maximum Y coordinate value.
    00278     ///
    00279     /// \return
    00280     /// Returns the maximum Y ordinate; numeric_limits<double>::quiet_NaN() by default
    00281     ///
    00282     FDO_GEOM_API double GetMaxY() const;
    00283
    00284     /// \brief
    00285     /// Gets the maximum Z coordinate value.
    00286     ///
    00287     /// \return
    00288     /// Returns the maximum Z ordinate; numeric_limits<double>::quiet_NaN() by default
    00289     ///
    00290     FDO_GEOM_API double GetMaxZ() const;
    00291
    00292     /// \brief
    00293     /// Gets the ordinates as an array.
    00294     ///
    00295     /// \remarks
    00296     /// The caller must not free the returned array.
    00297     /// The ordinates are in the order XYZM, with only those present
    00298     /// according to the dimensionality.
    00299     ///
    00300     /// \return
    00301     /// Returns the ordinates
    00302     ///
    00303     FDO_GEOM_API virtual const double * GetOrdinates();
    00304
    00305     /// \brief
    00306     /// Indicates whether the envelope's extents are set.
    00307     ///
    00308     /// \return
    00309     /// Returns 'true' if none of the X, Y and Z extents have been set; 'false' otherwise
    00310     ///
    00311     FDO_GEOM_API bool GetIsEmpty() const;
    00312
    00313     /// \brief
    00314     /// Sets the minimum X coordinate value.
    00315     ///
    00316     /// \param minX
    00317     /// Input Lower-left X ordinate
    00318     ///
    00319     /// \return
    00320     /// Returns nothing
    00321     ///
    00322     FDO_GEOM_API void SetMinX(double minX);
    00323
    00324     /// \brief
    00325     /// Sets the minimum Y coordinate value.
    00326     ///
    00327     /// \param minY
    00328     /// Input Lower-left Y ordinate
    00329     ///
    00330     /// \return
    00331     /// Returns nothing
    00332     ///
    00333     FDO_GEOM_API void SetMinY(double minY);
    00334
    00335     /// \brief
    00336     /// Sets the minimum Z coordinate value.
    00337     ///
    00338     /// \param minZ
    00339     /// Input Lower-left, rear Z ordinate
    00340     ///
    00341     /// \return
    00342     /// Returns nothing
    00343     ///
    00344     FDO_GEOM_API void SetMinZ(double minZ);
    00345
    00346     /// \brief
    00347     /// Sets the maximum X coordinate value.
    00348     ///
    00349     /// \param maxX
    00350     /// Input Upper-right X ordinate
    00351     ///
    00352     /// \return
    00353     /// Returns nothing
    00354     ///
    00355     FDO_GEOM_API void SetMaxX(double maxX);
    00356
    00357     /// \brief
    00358     /// Sets the maximum Y coordinate value.
    00359     ///
    00360     /// \param maxY
    00361     /// Input Upper-right Y ordinate
    00362     ///
    00363     /// \return
    00364     /// Returns nothing
    00365     ///
    00366     FDO_GEOM_API void SetMaxY(double maxY);
    00367
    00368     /// \brief
    00369     /// Sets the maximum Z coordinate value.
    00370     ///
    00371     /// \param maxZ
    00372     /// Input Upper-right, front Z ordinate
    00373     ///
    00374     /// \return
    00375     /// Returns nothing
    00376     ///
    00377     FDO_GEOM_API void SetMaxZ(double maxZ);
    00378
    00379     /// \brief
    00380     /// Expands the envelope's extents to include a given position.
    00381     ///
    00382     /// \param position
    00383     /// Input position to include in extent
    00384     ///
    00385     /// \return
    00386     /// Returns nothing
    00387     ///
    00388     FDO_GEOM_API void Expand(FdoIDirectPosition* position);
    00389
    00390     /// \brief
    00391     /// Expands the envelope's extents to include another envelope.
    00392     ///
    00393     /// \param envelope
    00394     /// Input envelope to include in extent
    00395     ///
    00396     /// \return
    00397     /// Returns nothing
    00398     ///
    00399     FDO_GEOM_API void Expand(FdoIEnvelope* envelope);
    00400
    00401 /// \cond DOXYGEN-IGNORE
    00402 protected:
    00403
    00404     void Dispose();
    00405
    00406     double  m_minX;
    00407     double  m_minY;
    00408     double  m_minZ;
    00409     double  m_maxX;
    00410     double  m_maxY;
    00411     double  m_maxZ;
    00412     bool    m_isEmpty;
    00413
    00414     /// The following is just to retain ownership of the ordinate array in
    00415     /// case GetOrdinates() is called.  An alternative implementation might
    00416     /// optimise for GetOrdinates() by always using "double m_ordinates[4]"
    00417     /// instead of the individual ordinate members above.
    00418     double *    m_ordinates;
    00419 /// \endcond
    00420 };
    00421 #endif
    00422
    00423

Please send us your comment about this page