/*=========================================================================

  Program: GDCM (Grassroots DICOM). A DICOM library

  Copyright (c) 2006-2011 Mathieu Malaterre
  All rights reserved.
  See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
#ifndef GDCMBOXREGION_H
#define GDCMBOXREGION_H

#include "gdcmRegion.h"

namespace gdcm
{
class BoxRegionInternals;
/**
 * \brief Class for manipulation box region
 * \details This is a very simple implementation of the Region class.
 * It only support 3D box type region.
 * It assumes the 3D Box does not have a tilt
 * Origin is as (0,0,0)
 */
//-----------------------------------------------------------------------------
class GDCM_EXPORT BoxRegion : public Region
{
public :
  BoxRegion();
  ~BoxRegion() override;

  /// Set domain
  void SetDomain(unsigned int xmin, unsigned int xmax,
    unsigned int ymin, unsigned int ymax,
    unsigned int zmin, unsigned int zmax);

  /// Get domain
  unsigned int GetXMin() const;
  unsigned int GetXMax() const;
  unsigned int GetYMin() const;
  unsigned int GetYMax() const;
  unsigned int GetZMin() const;
  unsigned int GetZMax() const;

  // Satisfy pure virtual parent class
  Region *Clone() const override;
  bool Empty() const override;
  bool IsValid() const override;
  size_t Area() const override;
  BoxRegion ComputeBoundingBox() override;

  void Print(std::ostream &os = std::cout) const override;

  /// Helper class to compute the bounding box of two BoxRegion
  static BoxRegion BoundingBox(BoxRegion const & b1, BoxRegion const & b2 );

  /// copy/cstor and al.
  BoxRegion(const BoxRegion&);
  void operator=(const BoxRegion&);
private:
  BoxRegionInternals *Internals;
};

} // end namespace gdcm
//-----------------------------------------------------------------------------
#endif //GDCMREGION_H
