// 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_PaveBlock_HeaderFile #define _BOPDS_PaveBlock_HeaderFile #include "Standard.hxx" #include "Bnd_Box.hxx" #include "NCollection_List.hxx" #include "BOPDS_Pave.hxx" #include "Standard_Handle.hxx" #include "NCollection_BaseAllocator.hxx" #include "Standard_Integer.hxx" #include "Standard_Transient.hxx" #include "NCollection_Map.hxx" class BOPDS_PaveBlock; //! The class BOPDS_PaveBlock is to store //! the information about pave block on an edge. //! Two adjacent paves on edge make up pave block. class BOPDS_PaveBlock : public Standard_Transient { public: //! Empty constructor Standard_EXPORT BOPDS_PaveBlock(); //! Constructor //! @param theAllocator the allocator to manage the memory Standard_EXPORT BOPDS_PaveBlock(const occ::handle& theAllocator); //! Modifier //! Sets the first pave Standard_EXPORT void SetPave1(const BOPDS_Pave& thePave); //! Selector //! Returns the first pave Standard_EXPORT const BOPDS_Pave& Pave1() const; //! Modifier //! Sets the second pave Standard_EXPORT void SetPave2(const BOPDS_Pave& thePave); //! Selector //! Returns the second pave Standard_EXPORT const BOPDS_Pave& Pave2() const; //! Modifier //! Sets the index of edge of pave block Standard_EXPORT void SetEdge(const int theEdge); //! Selector //! Returns the index of edge of pave block Standard_EXPORT int Edge() const; //! Query //! Returns true if the pave block has edge Standard_EXPORT bool HasEdge() const; //! Query //! Returns true if the pave block has edge //! Returns the index of edge Standard_EXPORT bool HasEdge(int& theEdge) const; //! Modifier //! Sets the index of original edge //! of the pave block Standard_EXPORT void SetOriginalEdge(const int theEdge); //! Selector //! Returns the index of original edge of pave block Standard_EXPORT int OriginalEdge() const; //! Query //! Returns true if the edge is equal to the original edge //! of the pave block Standard_EXPORT bool IsSplitEdge() const; //! Selector //! Returns the parametric range //! of the pave block Standard_EXPORT void Range(double& theT1, double& theT2) const; //! Query //! Returns true if the pave block has pave indices //! that equal to the pave indices of the pave block //! Standard_EXPORT bool HasSameBounds(const occ::handle& theOther) const; //! Selector //! Returns the pave indices //! of the pave block Standard_EXPORT void Indices(int& theIndex1, int& theIndex2) const; //! Query //! Returns true if the pave block contains extra paves Standard_EXPORT bool IsToUpdate() const; //! Modifier //! Appends extra paves Standard_EXPORT void AppendExtPave(const BOPDS_Pave& thePave); //! Modifier //! Appends extra pave Standard_EXPORT void AppendExtPave1(const BOPDS_Pave& thePave); //! Modifier //! Removes a pave with the given vertex number from extra paves Standard_EXPORT void RemoveExtPave(const int theVertNum); //! Selector //! Returns the extra paves Standard_EXPORT const NCollection_List& ExtPaves() const; //! Selector / Modifier //! Returns the extra paves Standard_EXPORT NCollection_List& ChangeExtPaves(); //! Modifier //! Updates the pave block. The extra paves are used //! to create new pave blocks . //! - if true, the first and second //! pave are used to produce new pave blocks. Standard_EXPORT void Update(NCollection_List>& theLPB, const bool theFlag = true); //! Query //! Returns true if the extra paves contain the pave //! with given value of the parameter //! - the value of the tolerance to compare //! - index of the found pave Standard_EXPORT bool ContainsParameter(const double thePrm, const double theTol, int& theInd) const; //! Modifier //! Sets the shrunk data for the pave block //! , - shrunk range //! - the bounding box //! - defines whether the edge can be split Standard_EXPORT void SetShrunkData(const double theTS1, const double theTS2, const Bnd_Box& theBox, const bool theIsSplittable); //! Selector //! Returns the shrunk data for the pave block //! , - shrunk range //! - the bounding box //! - defines whether the edge can be split Standard_EXPORT void ShrunkData(double& theTS1, double& theTS2, Bnd_Box& theBox, bool& theIsSplittable) const; //! Query //! Returns true if the pave block contains //! the shrunk data Standard_EXPORT bool HasShrunkData() const; Standard_EXPORT void Dump() const; //! Query //! Returns FALSE if the pave block has a too short //! shrunk range and cannot be split, otherwise returns TRUE bool IsSplittable() const { return myIsSplittable; } DEFINE_STANDARD_RTTIEXT(BOPDS_PaveBlock, Standard_Transient) protected: occ::handle myAllocator; int myEdge; int myOriginalEdge; BOPDS_Pave myPave1; BOPDS_Pave myPave2; NCollection_List myExtPaves; double myTS1; double myTS2; Bnd_Box myShrunkBox; NCollection_Map myMFence; bool myIsSplittable; }; #endif // _BOPDS_PaveBlock_HeaderFile