0030686: Visualization, SelectMgr_ViewerSelector - sorting issues of transformation...
[occt.git] / src / BRepExtrema / BRepExtrema_ShapeProximity.hxx
CommitLineData
558e68ea 1// Created on: 2014-10-20
2// Created by: Denis BOGOLEPOV
3// Copyright (c) 2014 OPEN CASCADE SAS
4//
5// This file is part of Open CASCADE Technology software library.
6//
7// This library is free software; you can redistribute it and/or modify it under
8// the terms of the GNU Lesser General Public License version 2.1 as published
9// by the Free Software Foundation, with special exception defined in the file
10// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11// distribution for complete text of the license and disclaimer of any warranty.
12//
13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
15
16#ifndef _BRepExtrema_ShapeProximity_HeaderFile
17#define _BRepExtrema_ShapeProximity_HeaderFile
18
19#include <BVH_Geometry.hxx>
558e68ea 20#include <NCollection_DataMap.hxx>
ae9a414a 21#include <TColStd_PackedMapOfInteger.hxx>
558e68ea 22
ae9a414a 23#include <BRepExtrema_TriangleSet.hxx>
24#include <BRepExtrema_OverlapTool.hxx>
558e68ea 25
26//! Tool class for shape proximity detection.
27//! For two given shapes and given tolerance (offset from the mesh) the algorithm allows
28//! to determine whether or not they are overlapped. The algorithm input consists of any
29//! shapes which can be decomposed into individual faces (used as basic shape elements).
30//! High performance is achieved through the use of existing triangulation of faces. So
31//! poly triangulation (with the desired deflection) should already be built. Note that
32//! solution is approximate (and corresponds to the deflection used for triangulation).
33//!
34//! The algorithm can be run in two modes. If tolerance is set to zero, the algorithm
35//! will detect only intersecting faces (containing triangles with common points). If
36//! tolerance is set to positive value, the algorithm will also detect faces located
37//! on distance less than the given tolerance from each other.
38class BRepExtrema_ShapeProximity
39{
ae9a414a 40public:
558e68ea 41
42 //! Creates empty proximity tool.
43 Standard_EXPORT BRepExtrema_ShapeProximity (const Standard_Real theTolerance = 0.0);
44
45 //! Creates proximity tool for the given two shapes.
46 Standard_EXPORT BRepExtrema_ShapeProximity (const TopoDS_Shape& theShape1,
47 const TopoDS_Shape& theShape2,
48 const Standard_Real theTolerance = 0.0);
49
50public:
51
52 //! Returns tolerance value for overlap test (distance between shapes).
53 Standard_Real Tolerance() const
54 {
55 return myTolerance;
56 }
57
58 //! Sets tolerance value for overlap test (distance between shapes).
59 void SetTolerance (const Standard_Real theTolerance)
60 {
61 myTolerance = theTolerance;
62 }
63
64 //! Loads 1st shape into proximity tool.
65 Standard_EXPORT Standard_Boolean LoadShape1 (const TopoDS_Shape& theShape1);
66
67 //! Loads 2nd shape into proximity tool.
68 Standard_EXPORT Standard_Boolean LoadShape2 (const TopoDS_Shape& theShape2);
69
ae9a414a 70 //! Performs search of overlapped faces.
558e68ea 71 Standard_EXPORT void Perform();
72
73 //! True if the search is completed.
74 Standard_Boolean IsDone() const
75 {
ae9a414a 76 return myOverlapTool.IsDone();
558e68ea 77 }
78
ae9a414a 79 //! Returns set of IDs of overlapped faces of 1st shape (started from 0).
80 const BRepExtrema_MapOfIntegerPackedMapOfInteger& OverlapSubShapes1() const
558e68ea 81 {
ae9a414a 82 return myOverlapTool.OverlapSubShapes1();
558e68ea 83 }
84
ae9a414a 85 //! Returns set of IDs of overlapped faces of 2nd shape (started from 0).
86 const BRepExtrema_MapOfIntegerPackedMapOfInteger& OverlapSubShapes2() const
558e68ea 87 {
ae9a414a 88 return myOverlapTool.OverlapSubShapes2();
558e68ea 89 }
90
ae9a414a 91 //! Returns sub-shape from 1st shape with the given index (started from 0).
558e68ea 92 const TopoDS_Face& GetSubShape1 (const Standard_Integer theID) const
93 {
94 return myFaceList1.Value (theID);
95 }
96
ae9a414a 97 //! Returns sub-shape from 1st shape with the given index (started from 0).
558e68ea 98 const TopoDS_Face& GetSubShape2 (const Standard_Integer theID) const
99 {
100 return myFaceList2.Value (theID);
101 }
102
ae9a414a 103 //! Returns set of all the face triangles of the 1st shape.
104 const Handle(BRepExtrema_TriangleSet)& ElementSet1() const
105 {
106 return myElementSet1;
107 }
558e68ea 108
ae9a414a 109 //! Returns set of all the face triangles of the 2nd shape.
110 const Handle(BRepExtrema_TriangleSet)& ElementSet2() const
111 {
112 return myElementSet2;
113 }
558e68ea 114
115private:
116
117 //! Maximum overlapping distance.
118 Standard_Real myTolerance;
119
120 //! Is the 1st shape initialized?
121 Standard_Boolean myIsInitS1;
122 //! Is the 2nd shape initialized?
123 Standard_Boolean myIsInitS2;
124
125 //! List of faces of the 1st shape.
126 BRepExtrema_ShapeList myFaceList1;
127 //! List of faces of the 2nd shape.
128 BRepExtrema_ShapeList myFaceList2;
129
130 //! Set of all the face triangles of the 1st shape.
ae9a414a 131 Handle(BRepExtrema_TriangleSet) myElementSet1;
558e68ea 132 //! Set of all the face triangles of the 2nd shape.
ae9a414a 133 Handle(BRepExtrema_TriangleSet) myElementSet2;
558e68ea 134
ae9a414a 135 //! Overlap tool used for intersection/overlap test.
136 BRepExtrema_OverlapTool myOverlapTool;
558e68ea 137
138};
139
140#endif // _BRepExtrema_ShapeProximity_HeaderFile