Integration of OCCT 6.5.0 from SVN
[occt.git] / src / BRep / BRep_CurveOnSurface.cxx
1 // File:        BRep_CurveOnSurface.cxx
2 // Created:     Tue Jul  6 18:24:27 1993
3 // Author:      Remi LEQUETTE
4 //              <rle@phylox>
5
6
7 #include <BRep_CurveOnSurface.ixx>
8 #include <Precision.hxx>
9
10
11 //=======================================================================
12 //function : BRep_CurveOnSurface
13 //purpose  : 
14 //=======================================================================
15
16 BRep_CurveOnSurface::BRep_CurveOnSurface(const Handle(Geom2d_Curve)& PC, 
17                                          const Handle(Geom_Surface)& S, 
18                                          const TopLoc_Location& L) :
19        BRep_GCurve(L,PC->FirstParameter(),PC->LastParameter()),
20        myPCurve(PC),
21        mySurface(S)
22 {
23 }
24
25
26 //=======================================================================
27 //function : D0
28 //purpose  : 
29 //=======================================================================
30
31 void BRep_CurveOnSurface::D0(const Standard_Real U, gp_Pnt& P) const
32 {
33   // shoud be D0 NYI
34   gp_Pnt2d P2d = myPCurve->Value(U);
35   P = mySurface->Value(P2d.X(),P2d.Y());
36   P.Transform(myLocation.Transformation());
37 }
38
39 //=======================================================================
40 //function : IsCurveOnSurface
41 //purpose  : 
42 //=======================================================================
43
44 Standard_Boolean  BRep_CurveOnSurface::IsCurveOnSurface()const 
45 {
46   return Standard_True;
47 }
48
49 //=======================================================================
50 //function : IsCurveOnSurface
51 //purpose  : 
52 //=======================================================================
53
54 Standard_Boolean  BRep_CurveOnSurface::IsCurveOnSurface
55   (const Handle(Geom_Surface)& S, const TopLoc_Location& L)const 
56 {
57   return (S == mySurface) && (L == myLocation);
58 }
59
60
61
62 //=======================================================================
63 //function : Surface
64 //purpose  : 
65 //=======================================================================
66
67 const Handle(Geom_Surface)&  BRep_CurveOnSurface::Surface()const 
68 {
69   return mySurface;
70 }
71
72
73 //=======================================================================
74 //function : PCurve
75 //purpose  : 
76 //=======================================================================
77
78 const Handle(Geom2d_Curve)&  BRep_CurveOnSurface::PCurve()const 
79 {
80   return myPCurve;
81 }
82
83 //=======================================================================
84 //function : PCurve
85 //purpose  : 
86 //=======================================================================
87
88 void  BRep_CurveOnSurface::PCurve(const Handle(Geom2d_Curve)& C)
89 {
90   myPCurve = C;
91 }
92
93
94 //=======================================================================
95 //function : Copy
96 //purpose  : 
97 //=======================================================================
98
99 Handle(BRep_CurveRepresentation) BRep_CurveOnSurface::Copy() const
100 {
101   Handle(BRep_CurveOnSurface) C = new BRep_CurveOnSurface(myPCurve,
102                                                           mySurface,
103                                                           Location());
104  
105   C->SetRange(First(),Last());
106   C->SetUVPoints(myUV1,myUV2);
107
108   return C;
109 }
110
111
112 //=======================================================================
113 //function : Update
114 //purpose  : 
115 //=======================================================================
116
117 void  BRep_CurveOnSurface::Update()
118 {
119   Standard_Real f = First();
120   Standard_Real l = Last();
121   Standard_Boolean isneg = Precision::IsNegativeInfinite(f);
122   Standard_Boolean ispos = Precision::IsPositiveInfinite(l);
123   if (!isneg) {
124     myPCurve->D0(f,myUV1);
125   }
126   if (!ispos) {
127     myPCurve->D0(l,myUV2);
128   }
129 }
130
131