0024157: Parallelization of assembly part of BO
[occt.git] / src / GCPnts / GCPnts_TangentialDeflection.cxx
1 // Created on: 1996-11-08
2 // Created by: Jean Claude VAUTHIER
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21
22
23 #include <GCPnts_TangentialDeflection.ixx>
24
25 #include <gp_Pnt2d.hxx>
26 #include <gp_Vec.hxx>
27 #include <gp_Vec2d.hxx>
28 #include <gp_XYZ.hxx>
29 #include <Precision.hxx>
30
31 inline static void D0 (const Adaptor3d_Curve& C, const Standard_Real U, gp_Pnt& P)
32 {
33   C.D0 (U, P);
34 }
35
36 inline static void D2 (const Adaptor3d_Curve& C, const Standard_Real U, 
37                        gp_Pnt& P, gp_Vec& V1, gp_Vec& V2)
38 {
39   C.D2 (U, P, V1, V2);
40 }
41
42
43 static void D0 (const Adaptor2d_Curve2d& C, const Standard_Real U, gp_Pnt& PP)
44 {
45   Standard_Real X, Y;
46   gp_Pnt2d P;
47   C.D0 (U, P);
48   P.Coord (X, Y);
49   PP.SetCoord (X, Y, 0.0);
50 }
51
52 static void D2 (const Adaptor2d_Curve2d& C, const Standard_Real U,
53                 gp_Pnt& PP, gp_Vec& VV1, gp_Vec& VV2)
54 {
55   Standard_Real X, Y;
56   gp_Pnt2d P;
57   gp_Vec2d V1,V2;
58   C.D2 (U, P, V1, V2);
59   P.Coord (X, Y);
60   PP.SetCoord  (X, Y, 0.0);
61   V1.Coord (X, Y);
62   VV1.SetCoord (X, Y, 0.0);
63   V2.Coord (X, Y);
64   VV2.SetCoord (X, Y, 0.0);
65 }
66
67
68 //=======================================================================
69 //function : CPnts_TangentialDeflection
70 //purpose  : 
71 //=======================================================================
72
73 GCPnts_TangentialDeflection::GCPnts_TangentialDeflection () { }
74
75 //=======================================================================
76 //function : AddPoint
77 //purpose  : 
78 //=======================================================================
79
80 Standard_Integer GCPnts_TangentialDeflection::AddPoint
81  (const gp_Pnt& thePnt,
82   const Standard_Real theParam,
83   const Standard_Boolean theIsReplace)
84 {
85   const Standard_Real tol = Precision::PConfusion();
86   Standard_Integer index = -1;
87   const Standard_Integer nb = parameters.Length();
88   for ( Standard_Integer i = 1; index == -1 && i <= nb; i++ )
89   {
90     Standard_Real dist = parameters.Value( i ) - theParam;
91     if ( fabs( dist ) <= tol )
92     {
93       index = i;
94       if ( theIsReplace )
95       {
96         points.ChangeValue(i) = thePnt;
97         parameters.ChangeValue(i) = theParam;
98       }
99     }
100     else if ( dist > tol )
101     {
102       points.InsertBefore( i, thePnt );
103       parameters.InsertBefore( i, theParam );
104       index = i;
105     }
106   }
107   if ( index == -1 )
108   {
109     points.Append( thePnt );
110     parameters.Append( theParam );
111     index = parameters.Length();
112   }
113   return index;
114 }
115
116
117 #include <Geom_BezierCurve.hxx>
118 #include <Geom_BSplineCurve.hxx>
119 #include <gp_Circ.hxx>
120 #define TheCurve Adaptor3d_Curve
121 #define Handle_TheBezierCurve   Handle(Geom_BezierCurve)
122 #define Handle_TheBSplineCurve  Handle(Geom_BSplineCurve)
123 #include <GCPnts_TangentialDeflection.gxx>
124 #undef Handle_TheBezierCurve
125 #undef Handle_TheBSplineCurve
126 #undef TheCurve
127
128
129 #include <Geom2d_BezierCurve.hxx>
130 #include <Geom2d_BSplineCurve.hxx>
131 #include <gp_Circ2d.hxx>
132 #define TheCurve Adaptor2d_Curve2d
133 #define Handle_TheBezierCurve   Handle(Geom2d_BezierCurve)
134 #define Handle_TheBSplineCurve  Handle(Geom2d_BSplineCurve)
135 #include <GCPnts_TangentialDeflection.gxx>
136 #undef Handle_TheBezierCurve
137 #undef Handle_TheBSplineCurve
138 #undef TheCurve
139
140
141
142