799c099835daca7e09cfd75c66116ed602714b61
[occt.git] / src / IntPatch / IntPatch_Intersection.hxx
1 // Created on: 1993-01-21
2 // Created by: Jacques GOUSSARD
3 // Copyright (c) 1993-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 _IntPatch_Intersection_HeaderFile
18 #define _IntPatch_Intersection_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Boolean.hxx>
25 #include <IntPatch_SequenceOfPoint.hxx>
26 #include <IntPatch_SequenceOfLine.hxx>
27 #include <Standard_Real.hxx>
28 #include <IntSurf_ListOfPntOn2S.hxx>
29 #include <GeomAbs_SurfaceType.hxx>
30 #include <Standard_Integer.hxx>
31 class StdFail_NotDone;
32 class Standard_OutOfRange;
33 class Standard_DomainError;
34 class Standard_ConstructionError;
35 class Adaptor3d_HSurface;
36 class Adaptor3d_TopolTool;
37 class IntPatch_Point;
38 class IntPatch_Line;
39
40
41 //! This class provides a generic algorithm to intersect
42 //! 2 surfaces.
43 class IntPatch_Intersection 
44 {
45 public:
46
47   DEFINE_STANDARD_ALLOC
48
49   
50   Standard_EXPORT IntPatch_Intersection();
51   
52   Standard_EXPORT IntPatch_Intersection(const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang);
53   
54   Standard_EXPORT IntPatch_Intersection(const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Standard_Real TolArc, const Standard_Real TolTang);
55   
56   //! Set the tolerances used by the algorithms:
57   //! --- Implicit   - Parametric
58   //! --- Parametric - Parametric
59   //! --- Implicit   - Implicit
60   //!
61   //! TolArc   is  used  to   compute  the intersections
62   //! between the restrictions   of  a  surface   and  a
63   //! walking line.
64   //!
65   //! TolTang is used to compute the points on a walking
66   //! line, and in geometric algorithms.
67   //!
68   //! Fleche  is  a  parameter   used in    the  walking
69   //! algorithms to provide small curvatures on a line.
70   //!
71   //! UVMaxStep is  a  parameter   used in  the  walking
72   //! algorithms  to    compute the  distance between to
73   //! points in their respective parametrtic spaces.
74   Standard_EXPORT void SetTolerances (const Standard_Real TolArc, const Standard_Real TolTang, const Standard_Real UVMaxStep, const Standard_Real Fleche);
75   
76   //! Flag theIsReqToKeepRLine has been enterred only for
77   //! compatibility with TopOpeBRep package. It shall be deleted
78   //! after deleting TopOpeBRep.
79   //! When intersection result returns IntPatch_RLine and another
80   //! IntPatch_Line (not restriction) we (in case of theIsReqToKeepRLine==TRUE)
81   //! will always keep both lines even if they are coincided.
82   Standard_EXPORT void Perform (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang, const Standard_Boolean isGeomInt = Standard_True, const Standard_Boolean theIsReqToKeepRLine = Standard_False);
83   
84   //! If isGeomInt == Standard_False, then method
85   //! Param-Param intersection will be used.
86   Standard_EXPORT void Perform (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang, IntSurf_ListOfPntOn2S& LOfPnts, const Standard_Boolean RestrictLine = Standard_True, const Standard_Boolean isGeomInt = Standard_True);
87   
88   Standard_EXPORT void Perform (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real U1, const Standard_Real V1, const Standard_Real U2, const Standard_Real V2, const Standard_Real TolArc, const Standard_Real TolTang);
89   
90   Standard_EXPORT void Perform (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Standard_Real TolArc, const Standard_Real TolTang);
91   
92   //! Returns True if the calculus was succesfull.
93     Standard_Boolean IsDone() const;
94   
95   //! Returns true if the is no intersection.
96     Standard_Boolean IsEmpty() const;
97   
98   //! Returns True if the two patches are considered as
99   //! entierly tangent, i-e every restriction arc of one
100   //! patch is inside the geometric base of the other patch.
101     Standard_Boolean TangentFaces() const;
102   
103   //! Returns True when the TangentFaces returns True and the
104   //! normal vectors evaluated at a point on the first and the
105   //! second surface are opposite.
106   //! The exception DomainError is raised if TangentFaces
107   //! returns False.
108     Standard_Boolean OppositeFaces() const;
109   
110   //! Returns the number of "single" points.
111     Standard_Integer NbPnts() const;
112   
113   //! Returns the point of range Index.
114   //! An exception is raised if Index<=0 or Index>NbPnt.
115     const IntPatch_Point& Point (const Standard_Integer Index) const;
116   
117   //! Returns the number of intersection lines.
118     Standard_Integer NbLines() const;
119   
120   //! Returns the line of range Index.
121   //! An exception is raised if Index<=0 or Index>NbLine.
122     const Handle(IntPatch_Line)& Line (const Standard_Integer Index) const;
123   
124   Standard_EXPORT const IntPatch_SequenceOfLine& SequenceOfLine() const;
125   
126   //! Dump of each result line.
127   //! Mode for more accurate dumps.
128   Standard_EXPORT void Dump (const Standard_Integer Mode, const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2) const;
129
130
131
132
133 protected:
134
135
136
137
138
139 private:
140
141   
142   Standard_EXPORT void ParamParamPerfom (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang, IntSurf_ListOfPntOn2S& LOfPnts, const Standard_Boolean RestrictLine, const GeomAbs_SurfaceType typs1, const GeomAbs_SurfaceType typs2);
143   
144   //! Flag theIsReqToKeepRLine has been enterred only for
145   //! compatibility with TopOpeBRep package. It shall be deleted
146   //! after deleting TopOpeBRep.
147   //! When intersection result returns IntPatch_RLine and another
148   //! IntPatch_Line (not restriction) we (in case of theIsReqToKeepRLine==TRUE)
149   //! will always keep both lines even if they are coincided.
150   Standard_EXPORT void GeomGeomPerfom (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang, IntSurf_ListOfPntOn2S& LOfPnts, const Standard_Boolean RestrictLine, const GeomAbs_SurfaceType typs1, const GeomAbs_SurfaceType typs2, const Standard_Boolean theIsReqToKeepRLine = Standard_False);
151   
152   //! Flag theIsReqToKeepRLine has been enterred only for
153   //! compatibility with TopOpeBRep package. It shall be deleted
154   //! after deleting TopOpeBRep.
155   //! When intersection result returns IntPatch_RLine and another
156   //! IntPatch_Line (not restriction) we (in case of theIsReqToKeepRLine==TRUE)
157   //! will always keep both lines even if they are coincided.
158   Standard_EXPORT void GeomGeomPerfomTrimSurf (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Real TolArc, const Standard_Real TolTang, IntSurf_ListOfPntOn2S& LOfPnts, const Standard_Boolean RestrictLine, const GeomAbs_SurfaceType typs1, const GeomAbs_SurfaceType typs2, const Standard_Boolean theIsReqToKeepRLine = Standard_False);
159   
160   Standard_EXPORT void GeomParamPerfom (const Handle(Adaptor3d_HSurface)& S1, const Handle(Adaptor3d_TopolTool)& D1, const Handle(Adaptor3d_HSurface)& S2, const Handle(Adaptor3d_TopolTool)& D2, const Standard_Boolean isNotAnalitical, const GeomAbs_SurfaceType typs1, const GeomAbs_SurfaceType typs2);
161
162
163   Standard_Boolean done;
164   Standard_Boolean empt;
165   Standard_Boolean tgte;
166   Standard_Boolean oppo;
167   IntPatch_SequenceOfPoint spnt;
168   IntPatch_SequenceOfLine slin;
169   Standard_Real myTolArc;
170   Standard_Real myTolTang;
171   Standard_Real myUVMaxStep;
172   Standard_Real myFleche;
173   Standard_Boolean myIsStartPnt;
174   Standard_Real myU1Start;
175   Standard_Real myV1Start;
176   Standard_Real myU2Start;
177   Standard_Real myV2Start;
178
179
180 };
181
182
183 #include <IntPatch_Intersection.lxx>
184
185
186
187
188
189 #endif // _IntPatch_Intersection_HeaderFile