0024002: Overall code and build procedure refactoring -- automatic
[occt.git] / src / BRep / BRep_CurveOnSurface.cxx
CommitLineData
b311480e 1// Created on: 1993-07-06
2// Created by: Remi LEQUETTE
3// Copyright (c) 1993-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
7fd59977 17
42cf5bc1 18#include <BRep_CurveOnSurface.hxx>
19#include <BRep_CurveRepresentation.hxx>
20#include <Geom2d_Curve.hxx>
21#include <Geom_Surface.hxx>
22#include <gp_Pnt.hxx>
23#include <gp_Pnt2d.hxx>
24#include <Precision.hxx>
25#include <Standard_Type.hxx>
26#include <TopLoc_Location.hxx>
7fd59977 27
28//=======================================================================
29//function : BRep_CurveOnSurface
30//purpose :
31//=======================================================================
7fd59977 32BRep_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
47void 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
60Standard_Boolean BRep_CurveOnSurface::IsCurveOnSurface()const
61{
62 return Standard_True;
63}
64
65//=======================================================================
66//function : IsCurveOnSurface
67//purpose :
68//=======================================================================
69
70Standard_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
83const Handle(Geom_Surface)& BRep_CurveOnSurface::Surface()const
84{
85 return mySurface;
86}
87
88
89//=======================================================================
90//function : PCurve
91//purpose :
92//=======================================================================
93
94const Handle(Geom2d_Curve)& BRep_CurveOnSurface::PCurve()const
95{
96 return myPCurve;
97}
98
99//=======================================================================
100//function : PCurve
101//purpose :
102//=======================================================================
103
104void BRep_CurveOnSurface::PCurve(const Handle(Geom2d_Curve)& C)
105{
106 myPCurve = C;
107}
108
109
110//=======================================================================
111//function : Copy
112//purpose :
113//=======================================================================
114
115Handle(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
133void 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