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
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.
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.
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.
23 #include <BRep_CurveOnSurface.ixx>
24 #include <Precision.hxx>
27 //=======================================================================
28 //function : BRep_CurveOnSurface
30 //=======================================================================
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()),
42 //=======================================================================
45 //=======================================================================
47 void BRep_CurveOnSurface::D0(const Standard_Real U, gp_Pnt& P) const
50 gp_Pnt2d P2d = myPCurve->Value(U);
51 P = mySurface->Value(P2d.X(),P2d.Y());
52 P.Transform(myLocation.Transformation());
55 //=======================================================================
56 //function : IsCurveOnSurface
58 //=======================================================================
60 Standard_Boolean BRep_CurveOnSurface::IsCurveOnSurface()const
65 //=======================================================================
66 //function : IsCurveOnSurface
68 //=======================================================================
70 Standard_Boolean BRep_CurveOnSurface::IsCurveOnSurface
71 (const Handle(Geom_Surface)& S, const TopLoc_Location& L)const
73 return (S == mySurface) && (L == myLocation);
78 //=======================================================================
81 //=======================================================================
83 const Handle(Geom_Surface)& BRep_CurveOnSurface::Surface()const
89 //=======================================================================
92 //=======================================================================
94 const Handle(Geom2d_Curve)& BRep_CurveOnSurface::PCurve()const
99 //=======================================================================
102 //=======================================================================
104 void BRep_CurveOnSurface::PCurve(const Handle(Geom2d_Curve)& C)
110 //=======================================================================
113 //=======================================================================
115 Handle(BRep_CurveRepresentation) BRep_CurveOnSurface::Copy() const
117 Handle(BRep_CurveOnSurface) C = new BRep_CurveOnSurface(myPCurve,
121 C->SetRange(First(),Last());
122 C->SetUVPoints(myUV1,myUV2);
128 //=======================================================================
131 //=======================================================================
133 void BRep_CurveOnSurface::Update()
135 Standard_Real f = First();
136 Standard_Real l = Last();
137 Standard_Boolean isneg = Precision::IsNegativeInfinite(f);
138 Standard_Boolean ispos = Precision::IsPositiveInfinite(l);
140 myPCurve->D0(f,myUV1);
143 myPCurve->D0(l,myUV2);