1644cf0841a7539f1426e0d4b852fa9894515e52
[occt.git] / src / IntAna / IntAna_Curve.hxx
1 // Created on: 1992-06-30
2 // Created by: Laurent BUCHARD
3 // Copyright (c) 1992-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 _IntAna_Curve_HeaderFile
18 #define _IntAna_Curve_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Real.hxx>
25 #include <Standard_Boolean.hxx>
26 #include <GeomAbs_SurfaceType.hxx>
27 #include <gp_Ax3.hxx>
28 class Standard_DomainError;
29 class gp_Cylinder;
30 class gp_Cone;
31 class gp_Pnt;
32 class gp_Vec;
33
34
35 //! Definition of a parametric Curve which is the result
36 //! of the intersection between two quadrics.
37 class IntAna_Curve 
38 {
39 public:
40
41   DEFINE_STANDARD_ALLOC
42
43   
44   //! Empty Constructor
45   Standard_EXPORT IntAna_Curve();
46   
47   //! Sets the parameters used to compute Points and Derivative
48   //! on the curve.
49   Standard_EXPORT void SetCylinderQuadValues (const gp_Cylinder& Cylinder, const Standard_Real Qxx, const Standard_Real Qyy, const Standard_Real Qzz, const Standard_Real Qxy, const Standard_Real Qxz, const Standard_Real Qyz, const Standard_Real Qx, const Standard_Real Qy, const Standard_Real Qz, const Standard_Real Q1, const Standard_Real Tol, const Standard_Real DomInf, const Standard_Real DomSup, const Standard_Boolean TwoZForATheta, const Standard_Boolean ZIsPositive);
50   
51   //! Sets  the parameters used    to compute Points  and
52   //! Derivative on the curve.
53   Standard_EXPORT void SetConeQuadValues (const gp_Cone& Cone, const Standard_Real Qxx, const Standard_Real Qyy, const Standard_Real Qzz, const Standard_Real Qxy, const Standard_Real Qxz, const Standard_Real Qyz, const Standard_Real Qx, const Standard_Real Qy, const Standard_Real Qz, const Standard_Real Q1, const Standard_Real Tol, const Standard_Real DomInf, const Standard_Real DomSup, const Standard_Boolean TwoZForATheta, const Standard_Boolean ZIsPositive);
54   
55   //! Returns TRUE if the curve is not  infinite  at the
56   //! last parameter or at the first parameter of the domain.
57   Standard_EXPORT Standard_Boolean IsOpen() const;
58   
59   //! Returns the paramatric domain of the curve.
60   Standard_EXPORT void Domain (Standard_Real& Theta1, Standard_Real& Theta2) const;
61   
62   //! Returns TRUE if the function is constant.
63   Standard_EXPORT Standard_Boolean IsConstant() const;
64   
65   //! Returns TRUE if the domain is open at the beginning.
66   Standard_EXPORT Standard_Boolean IsFirstOpen() const;
67   
68   //! Returns TRUE if the domain is open at the end.
69   Standard_EXPORT Standard_Boolean IsLastOpen() const;
70   
71   //! Returns the point at parameter Theta on the curve.
72   Standard_EXPORT gp_Pnt Value (const Standard_Real Theta);
73   
74   //! Returns the point and the first derivative at parameter
75   //! Theta on the curve.
76   Standard_EXPORT Standard_Boolean D1u (const Standard_Real Theta, gp_Pnt& P, gp_Vec& V);
77   
78   //! Tries to find the parameter of the point P on the curve.
79   //! If the method returns False, the "projection" is
80   //! impossible, and the value of Para is not significant.
81   //! If the method returns True, Para is the parameter of the
82   //! nearest intersection between the curve and the iso-theta
83   //! containing P.
84   Standard_EXPORT Standard_Boolean FindParameter (const gp_Pnt& P, Standard_Real& Para) const;
85   
86   //! If flag is True, the Curve is not defined at the
87   //! first parameter of its domain.
88   Standard_EXPORT void SetIsFirstOpen (const Standard_Boolean Flag);
89   
90   //! If flag is True, the Curve is not defined at the
91   //! first parameter of its domain.
92   Standard_EXPORT void SetIsLastOpen (const Standard_Boolean Flag);
93   
94   //! Protected function.
95   Standard_EXPORT void InternalUVValue (const Standard_Real Param, Standard_Real& U, Standard_Real& V, Standard_Real& A, Standard_Real& B, Standard_Real& C, Standard_Real& Co, Standard_Real& Si, Standard_Real& Di) const;
96   
97   Standard_EXPORT void SetDomain (const Standard_Real Theta1, const Standard_Real Theta2);
98
99
100
101
102 protected:
103
104   
105   //! Protected function.
106   Standard_EXPORT gp_Pnt InternalValue (const Standard_Real Theta1, const Standard_Real Theta2) const;
107
108
109
110
111 private:
112
113
114
115   Standard_Real Z0Cte;
116   Standard_Real Z0Sin;
117   Standard_Real Z0Cos;
118   Standard_Real Z0SinSin;
119   Standard_Real Z0CosCos;
120   Standard_Real Z0CosSin;
121   Standard_Real Z1Cte;
122   Standard_Real Z1Sin;
123   Standard_Real Z1Cos;
124   Standard_Real Z1SinSin;
125   Standard_Real Z1CosCos;
126   Standard_Real Z1CosSin;
127   Standard_Real Z2Cte;
128   Standard_Real Z2Sin;
129   Standard_Real Z2Cos;
130   Standard_Real Z2SinSin;
131   Standard_Real Z2CosCos;
132   Standard_Real Z2CosSin;
133   Standard_Boolean TwoCurves;
134   Standard_Boolean TakeZPositive;
135   Standard_Real Tolerance;
136   Standard_Real DomainInf;
137   Standard_Real DomainSup;
138   Standard_Boolean RestrictedInf;
139   Standard_Boolean RestrictedSup;
140   Standard_Boolean firstbounded;
141   Standard_Boolean lastbounded;
142   GeomAbs_SurfaceType typequadric;
143   Standard_Real RCyl;
144   Standard_Real Angle;
145   gp_Ax3 Ax3;
146
147
148 };
149
150
151
152
153
154
155
156 #endif // _IntAna_Curve_HeaderFile