0024166: Unable to create file with "Save" menu of voxeldemo Qt sample
[occt.git] / src / BRep / BRep_CurveOnSurface.cxx
1 // Created on: 1993-07-06
2 // Created by: Remi LEQUETTE
3 // Copyright (c) 1993-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 <BRep_CurveOnSurface.ixx>
24 #include <Precision.hxx>
25
26
27 //=======================================================================
28 //function : BRep_CurveOnSurface
29 //purpose  : 
30 //=======================================================================
31
32 BRep_CurveOnSurface::BRep_CurveOnSurface(const Handle(Geom2d_Curve)& PC, 
33                                          const Handle(Geom_Surface)& S, 
34                                          const TopLoc_Location& L) :
35        BRep_GCurve(L,PC->FirstParameter(),PC->LastParameter()),
36        myPCurve(PC),
37        mySurface(S)
38 {
39 }
40
41
42 //=======================================================================
43 //function : D0
44 //purpose  : 
45 //=======================================================================
46
47 void BRep_CurveOnSurface::D0(const Standard_Real U, gp_Pnt& P) const
48 {
49   // shoud be D0 NYI
50   gp_Pnt2d P2d = myPCurve->Value(U);
51   P = mySurface->Value(P2d.X(),P2d.Y());
52   P.Transform(myLocation.Transformation());
53 }
54
55 //=======================================================================
56 //function : IsCurveOnSurface
57 //purpose  : 
58 //=======================================================================
59
60 Standard_Boolean  BRep_CurveOnSurface::IsCurveOnSurface()const 
61 {
62   return Standard_True;
63 }
64
65 //=======================================================================
66 //function : IsCurveOnSurface
67 //purpose  : 
68 //=======================================================================
69
70 Standard_Boolean  BRep_CurveOnSurface::IsCurveOnSurface
71   (const Handle(Geom_Surface)& S, const TopLoc_Location& L)const 
72 {
73   return (S == mySurface) && (L == myLocation);
74 }
75
76
77
78 //=======================================================================
79 //function : Surface
80 //purpose  : 
81 //=======================================================================
82
83 const Handle(Geom_Surface)&  BRep_CurveOnSurface::Surface()const 
84 {
85   return mySurface;
86 }
87
88
89 //=======================================================================
90 //function : PCurve
91 //purpose  : 
92 //=======================================================================
93
94 const Handle(Geom2d_Curve)&  BRep_CurveOnSurface::PCurve()const 
95 {
96   return myPCurve;
97 }
98
99 //=======================================================================
100 //function : PCurve
101 //purpose  : 
102 //=======================================================================
103
104 void  BRep_CurveOnSurface::PCurve(const Handle(Geom2d_Curve)& C)
105 {
106   myPCurve = C;
107 }
108
109
110 //=======================================================================
111 //function : Copy
112 //purpose  : 
113 //=======================================================================
114
115 Handle(BRep_CurveRepresentation) BRep_CurveOnSurface::Copy() const
116 {
117   Handle(BRep_CurveOnSurface) C = new BRep_CurveOnSurface(myPCurve,
118                                                           mySurface,
119                                                           Location());
120  
121   C->SetRange(First(),Last());
122   C->SetUVPoints(myUV1,myUV2);
123
124   return C;
125 }
126
127
128 //=======================================================================
129 //function : Update
130 //purpose  : 
131 //=======================================================================
132
133 void  BRep_CurveOnSurface::Update()
134 {
135   Standard_Real f = First();
136   Standard_Real l = Last();
137   Standard_Boolean isneg = Precision::IsNegativeInfinite(f);
138   Standard_Boolean ispos = Precision::IsPositiveInfinite(l);
139   if (!isneg) {
140     myPCurve->D0(f,myUV1);
141   }
142   if (!ispos) {
143     myPCurve->D0(l,myUV2);
144   }
145 }
146
147