summaryrefslogtreecommitdiff
path: root/inc/IntPatch_Intersection.hxx
blob: d515988eba483fd5e34bbd20791d4895392fb6c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _IntPatch_Intersection_HeaderFile
#define _IntPatch_Intersection_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _IntPatch_SequenceOfPoint_HeaderFile
#include <IntPatch_SequenceOfPoint.hxx>
#endif
#ifndef _IntPatch_SequenceOfLine_HeaderFile
#include <IntPatch_SequenceOfLine.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _Handle_Adaptor3d_HSurface_HeaderFile
#include <Handle_Adaptor3d_HSurface.hxx>
#endif
#ifndef _Handle_Adaptor3d_TopolTool_HeaderFile
#include <Handle_Adaptor3d_TopolTool.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Handle_IntPatch_Line_HeaderFile
#include <Handle_IntPatch_Line.hxx>
#endif
class StdFail_NotDone;
class Standard_OutOfRange;
class Standard_DomainError;
class Standard_ConstructionError;
class Adaptor3d_HSurface;
class Adaptor3d_TopolTool;
class IntSurf_ListOfPntOn2S;
class IntPatch_Point;
class IntPatch_Line;
class IntPatch_SequenceOfLine;


//! This class provides a generic algorithm to intersect <br>
//!          2 surfaces. <br>
class IntPatch_Intersection  {
public:

  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  
  Standard_EXPORT   IntPatch_Intersection();
  
  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);
  
  Standard_EXPORT   IntPatch_Intersection(const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& D1,const Standard_Real TolArc,const Standard_Real TolTang);
  //! Set the tolerances used by the algorithms: <br>
//!          --- Implicit   - Parametric <br>
//!          --- Parametric - Parametric <br>
//!          --- Implicit   - Implicit <br>
//! <br>
//!          TolArc   is  used  to   compute  the intersections <br>
//!          between the restrictions   of  a  surface   and  a <br>
//!          walking line. <br>
//! <br>
//!          TolTang is used to compute the points on a walking <br>
//!          line, and in geometric algorithms. <br>
//! <br>
//!          Fleche  is  a  parameter   used in    the  walking <br>
//!          algorithms to provide small curvatures on a line. <br>
//! <br>
//!          UVMaxStep is  a  parameter   used in  the  walking <br>
//!          algorithms  to    compute the  distance between to <br>
//!          points in their respective parametrtic spaces. <br>
//! <br>
  Standard_EXPORT     void SetTolerances(const Standard_Real TolArc,const Standard_Real TolTang,const Standard_Real UVMaxStep,const Standard_Real Fleche) ;
  
  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) ;
  
  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) ;
  
  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) ;
  
  Standard_EXPORT     void Perform(const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& D1,const Standard_Real TolArc,const Standard_Real TolTang) ;
  //! Returns True if the calculus was succesfull. <br>
        Standard_Boolean IsDone() const;
  //! Returns true if the is no intersection. <br>
        Standard_Boolean IsEmpty() const;
  //! Returns True if the two patches are considered as <br>
//!          entierly tangent, i-e every restriction arc of one <br>
//!          patch is inside the geometric base of the other patch. <br>
        Standard_Boolean TangentFaces() const;
  //! Returns True when the TangentFaces returns True and the <br>
//!          normal vectors evaluated at a point on the first and the <br>
//!          second surface are opposite. <br>
//!          The exception DomainError is raised if TangentFaces <br>
//!          returns False. <br>
        Standard_Boolean OppositeFaces() const;
  //! Returns the number of "single" points. <br>
        Standard_Integer NbPnts() const;
  //! Returns the point of range Index. <br>
//!          An exception is raised if Index<=0 or Index>NbPnt. <br>
       const IntPatch_Point& Point(const Standard_Integer Index) const;
  //! Returns the number of intersection lines. <br>
        Standard_Integer NbLines() const;
  //! Returns the line of range Index. <br>
//!          An exception is raised if Index<=0 or Index>NbLine. <br>
       const Handle_IntPatch_Line& Line(const Standard_Integer Index) const;
  
  Standard_EXPORT    const IntPatch_SequenceOfLine& SequenceOfLine() const;
  //! Dump of each result line. <br>
//!         Mode for more accurate dumps. <br>
//! <br>
  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;





protected:





private:



Standard_Boolean done;
Standard_Boolean empt;
Standard_Boolean tgte;
Standard_Boolean oppo;
IntPatch_SequenceOfPoint spnt;
IntPatch_SequenceOfLine slin;
Standard_Real myTolArc;
Standard_Real myTolTang;
Standard_Real myUVMaxStep;
Standard_Real myFleche;
Standard_Boolean myIsStartPnt;
Standard_Real myU1Start;
Standard_Real myV1Start;
Standard_Real myU2Start;
Standard_Real myV2Start;


};


#include <IntPatch_Intersection.lxx>



// other Inline functions and methods (like "C++: function call" methods)


#endif