1 // Created on: 1993-03-10
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
19 #include <Geom_Circle.hxx>
20 #include <Geom_Curve.hxx>
21 #include <Geom_Geometry.hxx>
22 #include <Geom_ToroidalSurface.hxx>
23 #include <GeomAbs_UVSense.hxx>
26 #include <gp_Circ.hxx>
29 #include <gp_Torus.hxx>
30 #include <gp_Trsf.hxx>
33 #include <Standard_ConstructionError.hxx>
34 #include <Standard_DimensionError.hxx>
35 #include <Standard_RangeError.hxx>
36 #include <Standard_Type.hxx>
38 IMPLEMENT_STANDARD_RTTIEXT(Geom_ToroidalSurface,Geom_ElementarySurface)
40 typedef Geom_ToroidalSurface ToroidalSurface;
41 typedef TColStd_Array1OfReal Array1OfReal;
54 //=======================================================================
57 //=======================================================================
59 Handle(Geom_Geometry) Geom_ToroidalSurface::Copy () const {
61 Handle(Geom_ToroidalSurface) Cs;
62 Cs = new ToroidalSurface (pos, majorRadius, minorRadius);
68 //=======================================================================
69 //function : Geom_ToroidalSurface
71 //=======================================================================
73 Geom_ToroidalSurface::Geom_ToroidalSurface
75 const Standard_Real MajorRadius,
76 const Standard_Real MinorRadius )
78 : majorRadius (MajorRadius), minorRadius (MinorRadius) {
80 if (MinorRadius < 0.0 || MajorRadius < 0.0) {
81 throw Standard_ConstructionError();
89 //=======================================================================
90 //function : Geom_ToroidalSurface
92 //=======================================================================
94 Geom_ToroidalSurface::Geom_ToroidalSurface (const gp_Torus& T)
95 : majorRadius (T.MajorRadius()), minorRadius (T.MinorRadius()) {
102 //=======================================================================
103 //function : MajorRadius
105 //=======================================================================
107 Standard_Real Geom_ToroidalSurface::MajorRadius () const {
112 //=======================================================================
114 //function : MinorRadius
116 //=======================================================================
118 Standard_Real Geom_ToroidalSurface::MinorRadius () const {
124 //=======================================================================
125 //function : UReversedParameter
127 //=======================================================================
129 Standard_Real Geom_ToroidalSurface::UReversedParameter( const Standard_Real U) const {
131 return (2.*M_PI - U);
135 //=======================================================================
136 //function : VReversedParameter
138 //=======================================================================
140 Standard_Real Geom_ToroidalSurface::VReversedParameter( const Standard_Real V) const {
142 return (2.*M_PI - V);
146 //=======================================================================
147 //function : IsUClosed
149 //=======================================================================
151 Standard_Boolean Geom_ToroidalSurface::IsUClosed () const {
153 return Standard_True;
156 //=======================================================================
157 //function : IsVClosed
159 //=======================================================================
161 Standard_Boolean Geom_ToroidalSurface::IsVClosed () const {
163 return Standard_True;
166 //=======================================================================
167 //function : IsUPeriodic
169 //=======================================================================
171 Standard_Boolean Geom_ToroidalSurface::IsUPeriodic () const {
173 return Standard_True;
176 //=======================================================================
177 //function : IsVPeriodic
179 //=======================================================================
181 Standard_Boolean Geom_ToroidalSurface::IsVPeriodic () const {
183 return Standard_True;
187 //=======================================================================
188 //function : SetMajorRadius
190 //=======================================================================
192 void Geom_ToroidalSurface::SetMajorRadius (const Standard_Real MajorRadius) {
194 if (MajorRadius - minorRadius <= gp::Resolution())
195 throw Standard_ConstructionError();
197 majorRadius = MajorRadius;
201 //=======================================================================
202 //function : SetMinorRadius
204 //=======================================================================
206 void Geom_ToroidalSurface::SetMinorRadius (const Standard_Real MinorRadius) {
208 if (MinorRadius < 0.0 || majorRadius - MinorRadius <= gp::Resolution())
209 throw Standard_ConstructionError();
211 minorRadius = MinorRadius;
215 //=======================================================================
216 //function : SetTorus
218 //=======================================================================
220 void Geom_ToroidalSurface::SetTorus (const gp_Torus& T) {
222 minorRadius = T.MinorRadius();
223 majorRadius = T.MajorRadius();
228 //=======================================================================
231 //=======================================================================
233 Standard_Real Geom_ToroidalSurface::Area () const {
234 return 4.0 * M_PI * M_PI * minorRadius * majorRadius;
238 //=======================================================================
241 //=======================================================================
243 void Geom_ToroidalSurface::Bounds (Standard_Real& U1,
246 Standard_Real& V2 ) const {
255 //=======================================================================
256 //function : Coefficients
258 //=======================================================================
260 void Geom_ToroidalSurface::Coefficients (Array1OfReal& Coef) const {
262 gp_Torus Tor (pos, majorRadius, minorRadius);
263 Tor.Coefficients (Coef);
267 //=======================================================================
270 //=======================================================================
272 void Geom_ToroidalSurface::D0 (const Standard_Real U, const Standard_Real V, Pnt& P) const
275 ElSLib::TorusD0 (U, V, pos, majorRadius, minorRadius,P);
279 //=======================================================================
282 //=======================================================================
284 void Geom_ToroidalSurface::D1
285 (const Standard_Real U, const Standard_Real V,
287 Vec& D1U, Vec& D1V) const
289 ElSLib::TorusD1 (U, V, pos, majorRadius, minorRadius, P, D1U, D1V);
293 //=======================================================================
296 //=======================================================================
298 void Geom_ToroidalSurface::D2
299 (const Standard_Real U , const Standard_Real V,
302 Vec& D2U, Vec& D2V, Vec& D2UV ) const
304 ElSLib::TorusD2 (U, V, pos, majorRadius, minorRadius, P, D1U, D1V,
309 //=======================================================================
312 //=======================================================================
314 void Geom_ToroidalSurface::D3
315 (const Standard_Real U, const Standard_Real V,
318 Vec& D2U, Vec& D2V, Vec& D2UV,
319 Vec& D3U, Vec& D3V, Vec& D3UUV, Vec& D3UVV ) const
322 ElSLib::TorusD3 (U, V, pos, majorRadius, minorRadius, P, D1U, D1V,
323 D2U, D2V, D2UV, D3U, D3V, D3UUV, D3UVV);
327 //=======================================================================
330 //=======================================================================
332 Vec Geom_ToroidalSurface::DN
333 (const Standard_Real U , const Standard_Real V,
334 const Standard_Integer Nu, const Standard_Integer Nv ) const {
336 Standard_RangeError_Raise_if (Nu + Nv < 1 || Nu < 0 || Nv <0, " ");
337 return ElSLib::TorusDN (U, V, pos, majorRadius, minorRadius, Nu, Nv);
341 //=======================================================================
344 //=======================================================================
346 gp_Torus Geom_ToroidalSurface::Torus () const {
348 return gp_Torus (pos, majorRadius, minorRadius);
352 //=======================================================================
355 //=======================================================================
357 Handle(Geom_Curve) Geom_ToroidalSurface::UIso (const Standard_Real U) const
360 GC = new Geom_Circle(ElSLib::TorusUIso(pos,majorRadius,minorRadius,U));
365 //=======================================================================
368 //=======================================================================
370 Handle(Geom_Curve) Geom_ToroidalSurface::VIso (const Standard_Real V) const
372 Handle(Geom_Circle) GC =
373 new Geom_Circle(ElSLib::TorusVIso(pos,majorRadius,minorRadius,V));
378 //=======================================================================
381 //=======================================================================
383 Standard_Real Geom_ToroidalSurface::Volume () const {
385 return (M_PI * minorRadius * minorRadius) * (2.0 * M_PI * majorRadius);
389 //=======================================================================
390 //function : Transform
392 //=======================================================================
394 void Geom_ToroidalSurface::Transform (const Trsf& T) {
396 majorRadius = majorRadius * Abs(T.ScaleFactor());
397 minorRadius = minorRadius * Abs(T.ScaleFactor());
401 //=======================================================================
402 //function : DumpJson
404 //=======================================================================
405 void Geom_ToroidalSurface::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
407 OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
409 OCCT_DUMP_BASE_CLASS (theOStream, theDepth, Geom_ElementarySurface)
411 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, majorRadius)
412 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, minorRadius)