// Created by: Peter KURNEV
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.

#ifndef BOPDS_CoupleOfPaveBlocks_HeaderFile
#define BOPDS_CoupleOfPaveBlocks_HeaderFile

#include <BOPDS_PaveBlock.hxx>

/**
 * The Class BOPDS_CoupleOfPaveBlocks is to store
 * the information about two pave blocks
 * and some satellite information
 *
 */
//=======================================================================
// class : BOPDS_CoupleOfPaveBlocks
// purpose  :
//=======================================================================
class BOPDS_CoupleOfPaveBlocks
{
public:
  /**
   * Constructor
   */
  BOPDS_CoupleOfPaveBlocks()
      : myIndexInterf(-1),
        myIndex(-1),
        myTolerance(0)
  {
  }

  //
  /**
   * Constructor
   * @param thePB1
   *  first pave block
   * @param thePB2
   *  secondt pave block
   */
  BOPDS_CoupleOfPaveBlocks(const Handle(BOPDS_PaveBlock)& thePB1,
                           const Handle(BOPDS_PaveBlock)& thePB2)
      : myIndexInterf(-1),
        myIndex(-1),
        myTolerance(0)
  {
    SetPaveBlocks(thePB1, thePB2);
  }

  //
  /**
   * Destructor
   */
  ~BOPDS_CoupleOfPaveBlocks() {}

  //
  /**
   * Sets an index
   * @param theIndex
   *  index
   */
  void SetIndex(const Standard_Integer theIndex) { myIndex = theIndex; }

  //
  /**
   * Returns the index
   * @return
   *   index
   */
  Standard_Integer Index() const { return myIndex; }

  //
  /**
   * Sets an index of an interference
   * @param theIndex
   *  index of an interference
   */
  void SetIndexInterf(const Standard_Integer theIndex) { myIndexInterf = theIndex; }

  //
  /**
   * Returns the index of an interference
   * @return
   *   index of an interference
   */
  Standard_Integer IndexInterf() const { return myIndexInterf; }

  //
  /**
   * Sets pave blocks
   * @param thePB1
   *  first pave block
   * @param thePB2
   *  secondt pave block
   */
  void SetPaveBlocks(const Handle(BOPDS_PaveBlock)& thePB1, const Handle(BOPDS_PaveBlock)& thePB2)
  {
    myPB[0] = thePB1;
    myPB[1] = thePB2;
  }

  //
  /**
   * Returns pave blocks
   * @param thePB1
   *  the first pave block
   * @param thePB2
   *  the second pave block
   */
  void PaveBlocks(Handle(BOPDS_PaveBlock)& thePB1, Handle(BOPDS_PaveBlock)& thePB2) const
  {
    thePB1 = myPB[0];
    thePB2 = myPB[1];
  }

  //
  /**
   * Sets the first pave block
   * @param thePB
   *  the first pave block
   */
  void SetPaveBlock1(const Handle(BOPDS_PaveBlock)& thePB) { myPB[0] = thePB; }

  /**
   * Returns the first pave block
   * @return
   * the first pave block
   */
  const Handle(BOPDS_PaveBlock)& PaveBlock1() const { return myPB[0]; }

  //
  /**
   * Sets the second pave block
   * @param thePB
   *  the second pave block
   */
  void SetPaveBlock2(const Handle(BOPDS_PaveBlock)& thePB) { myPB[1] = thePB; }

  //
  /**
   * Returns the second pave block
   * @return
   * the second pave block
   */
  const Handle(BOPDS_PaveBlock)& PaveBlock2() const { return myPB[1]; }

  /**
   * Sets the tolerance associated with this couple
   */
  void SetTolerance(const Standard_Real theTol) { myTolerance = theTol; }

  //
  /**
   * Returns the tolerance associated with this couple
   */
  Standard_Real Tolerance() const { return myTolerance; }

protected:
  Standard_Integer        myIndexInterf;
  Standard_Integer        myIndex;
  Handle(BOPDS_PaveBlock) myPB[2];
  Standard_Real           myTolerance;
};

//
#endif
