0024166: Unable to create file with "Save" menu of voxeldemo Qt sample
[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
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
7fd59977 21
22
23#include <BRep_CurveOnSurface.ixx>
24#include <Precision.hxx>
25
26
27//=======================================================================
28//function : BRep_CurveOnSurface
29//purpose :
30//=======================================================================
31
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