0027961: Visualization - remove unused and no more working OpenGl_AVIWriter
[occt.git] / src / BRepMesh / BRepMesh_WireChecker.hxx
CommitLineData
01a6e62b 1// Created on: 2014-06-03
2// Created by: Oleg AGASHIN
3// Copyright (c) 1997-1999 Matra Datavision
4// Copyright (c) 1999-2014 OPEN CASCADE SAS
5//
6// This file is part of Open CASCADE Technology software library.
7//
8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
13//
14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
16
17#ifndef _BRepMesh_WireChecker_HeaderFile
18#define _BRepMesh_WireChecker_HeaderFile
19
20#include <Standard.hxx>
21#include <TopoDS_Face.hxx>
22#include <BRepMesh_Status.hxx>
fc9b36d6 23#include <BRepMesh_DataStructureOfDelaun.hxx>
848fa7e3 24#include <BRepMesh.hxx>
b7c077b9 25#include <TColStd_IndexedMapOfInteger.hxx>
01a6e62b 26#include <TopoDS_Edge.hxx>
27#include <Bnd_Box2d.hxx>
28#include <gp_Pnt2d.hxx>
29#include <gp_XY.hxx>
30
31#include <vector>
32
01a6e62b 33
34//! Auxilary class intended to check correctness of discretized face.
35//! In particular, checks boundaries of discretized face for self
36//! intersections and gaps.
37class BRepMesh_WireChecker
38{
39public:
40
01a6e62b 41 //! Selector.
42 //! Used to identify segments with overlapped bounding boxes.
43 //! Note that instance of selector can be used only once due to
44 //! unextentable array of indices.
848fa7e3 45 class BndBox2dTreeSelector : public BRepMesh::BndBox2dTree::Selector
01a6e62b 46 {
47 public:
48 Standard_EXPORT BndBox2dTreeSelector(const Standard_Integer theReservedSize);
49 Standard_EXPORT virtual Standard_Boolean Reject(const Bnd_Box2d& theBox2D) const;
50 Standard_EXPORT virtual Standard_Boolean Accept(const Standard_Integer& theIndex);
51
52 Standard_EXPORT void Clear();
53 Standard_EXPORT void SetBox(const Bnd_Box2d& theBox2D);
54 Standard_EXPORT void SetSkippedIndex(const Standard_Integer theIndex);
848fa7e3 55 Standard_EXPORT const BRepMesh::Array1OfInteger& Indices() const;
01a6e62b 56 Standard_EXPORT Standard_Integer IndicesNb() const;
57
58 protected:
848fa7e3 59 Bnd_Box2d myBox2D;
60 Standard_Integer mySkippedIndex;
61 BRepMesh::Array1OfInteger myIndices;
62 Standard_Integer myIndicesNb;
01a6e62b 63 };
64
65private:
66
848fa7e3 67 typedef NCollection_List<TopoDS_Edge> ListOfEdges;
68 typedef NCollection_Sequence<ListOfEdges> SeqOfWireEdges;
69
70 typedef NCollection_Sequence<gp_Pnt2d> SeqOfPnt2d;
71 typedef NCollection_Sequence<SeqOfPnt2d> SeqOfDWires;
01a6e62b 72
73public:
74
75 //! Constructor.
848fa7e3 76 //! @param theFace Face to be checked.
77 //! @param theTolUV Tolerance to be used for calculations in parametric space.
78 //! @param theEdges Map of edges with associated polygon on triangulation.
79 //! @param theVertexMap Map of face vertices.
80 //! @param theStructure Discretized representation of face in parametric space.
81 //! @param theUmin Lower U boundary of the face in parametric space.
82 //! @param theUmax Upper U boundary of the face in parametric space.
83 //! @param theVmin Lower V boundary of the face in parametric space.
84 //! @param theVmax Upper V boundary of the face in parametric space.
01a6e62b 85 Standard_EXPORT BRepMesh_WireChecker(
86 const TopoDS_Face& theFace,
87 const Standard_Real theTolUV,
848fa7e3 88 const BRepMesh::HDMapOfShapePairOfPolygon& theEdges,
89 const BRepMesh::HIMapOfInteger& theVertexMap,
01a6e62b 90 const Handle(BRepMesh_DataStructureOfDelaun)& theStructure,
91 const Standard_Real theUmin,
92 const Standard_Real theUmax,
93 const Standard_Real theVmin,
94 const Standard_Real theVmax,
95 const Standard_Boolean isInParallel);
96
97 //! Recompute data using parameters passed in constructor.
848fa7e3 98 //! @param[out] theClassifier Classifier to be updated using calculated data.
99 Standard_EXPORT void ReCompute(BRepMesh::HClassifier& theClassifier);
01a6e62b 100
101 //! Returns status of the check.
102 inline BRepMesh_Status Status() const
103 {
104 return myStatus;
105 }
106
107private:
108
d94fa32e 109 //! Collects discrete wires.
848fa7e3 110 //! @param[out] theDWires sequence of discretized wires to be filled.
111 //! @return TRUE on success, FALSE in case of open wire.
01a6e62b 112 Standard_Boolean collectDiscretizedWires(SeqOfDWires& theDWires);
113
114 //! Fills array of BiPoints for corresponding wire.
848fa7e3 115 //! @param theDWires Sequence of wires to be processed.
116 //! @param theWiresSegmentsTree Array of segments with corresponding
01a6e62b 117 //! bounding boxes trees to be filled.
118 void fillSegmentsTree(
848fa7e3 119 const SeqOfDWires& theDWires,
120 BRepMesh::Array1OfSegmentsTree& theWiresSegmentsTree);
01a6e62b 121
122 //! Assignment operator.
123 void operator =(BRepMesh_WireChecker& /*theOther*/)
124 {
125 }
126
127private:
128
129 const Standard_Real myTolUV;
848fa7e3 130 const BRepMesh::HDMapOfShapePairOfPolygon& myEdges;
131 const BRepMesh::HIMapOfInteger& myVertexMap;
01a6e62b 132 const Handle(BRepMesh_DataStructureOfDelaun)& myStructure;
133 const Standard_Real myUmin;
134 const Standard_Real myUmax;
135 const Standard_Real myVmin;
136 const Standard_Real myVmax;
137 BRepMesh_Status myStatus;
138 SeqOfWireEdges myWiresEdges;
139 Standard_Boolean myIsInParallel;
140};
141
142#endif