0027105: Make code ISO-compliant [-Wpedantic fixes]
[occt.git] / src / GeomLib / GeomLib.hxx
CommitLineData
42cf5bc1 1// Created on: 1993-07-07
2// Created by: Jean Claude VAUTHIER
3// Copyright (c) 1993-1999 Matra Datavision
4// Copyright (c) 1999-2014 OPEN CASCADE SAS
5//
6// This file is part of Open CASCADE Technology software library.
7//
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.
13//
14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
16
17#ifndef _GeomLib_HeaderFile
18#define _GeomLib_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_DefineAlloc.hxx>
22#include <Standard_Handle.hxx>
23
24#include <Standard_Real.hxx>
25#include <GeomAbs_Shape.hxx>
26#include <Standard_Integer.hxx>
27#include <Standard_Boolean.hxx>
28#include <TColgp_Array1OfPnt.hxx>
29#include <TColStd_Array1OfReal.hxx>
30#include <TColStd_HArray1OfReal.hxx>
31#include <TColStd_SequenceOfReal.hxx>
32class Geom_Curve;
33class gp_Ax2;
34class Geom2d_Curve;
35class gp_GTrsf2d;
36class Adaptor3d_CurveOnSurface;
37class Geom_BoundedCurve;
38class gp_Pnt;
39class gp_Vec;
40class Geom_BoundedSurface;
41class gp_Dir;
42class Adaptor3d_Curve;
43class Geom_BSplineSurface;
44class Geom_Surface;
45class gp_Pnt2d;
46class GeomLib_MakeCurvefromApprox;
47class GeomLib_Interpolate;
48class GeomLib_DenominatorMultiplier;
49class GeomLib_CheckBSplineCurve;
50class GeomLib_Check2dBSplineCurve;
51class GeomLib_IsPlanarSurface;
52class GeomLib_Tool;
53class GeomLib_PolyFunc;
54class GeomLib_LogSample;
55
56
57//! Geom Library. This package provides an
58//! implementation of functions for basic computation
59//! on geometric entity from packages Geom and Geom2d.
60class GeomLib
61{
62public:
63
64 DEFINE_STANDARD_ALLOC
65
66
67 //! Computes the curve 3d from package Geom
68 //! corresponding to curve 2d from package Geom2d, on
69 //! the plan defined with the local coordinate system
70 //! Position.
71 Standard_EXPORT static Handle(Geom_Curve) To3d (const gp_Ax2& Position, const Handle(Geom2d_Curve)& Curve2d);
72
73 //! Computes the curve 3d from package Geom
74 //! corresponding to the curve 3d from package Geom,
75 //! transformed with the transformation <GTrsf>
76 //! WARNING : this method may return a null Handle if
77 //! it's impossible to compute the transformation of
78 //! a curve. It's not implemented when :
79 //! 1) the curve is an infinite parabola or hyperbola
80 //! 2) the curve is an offsetcurve
81 Standard_EXPORT static Handle(Geom2d_Curve) GTransform (const Handle(Geom2d_Curve)& Curve, const gp_GTrsf2d& GTrsf);
82
83 //! Make the curve Curve2dPtr have the imposed
84 //! range First to List the most economic way,
85 //! that is if it can change the range without
86 //! changing the nature of the curve it will try
87 //! to do that. Otherwise it will produce a Bspline
88 //! curve that has the required range
89 Standard_EXPORT static void SameRange (const Standard_Real Tolerance, const Handle(Geom2d_Curve)& Curve2dPtr, const Standard_Real First, const Standard_Real Last, const Standard_Real RequestedFirst, const Standard_Real RequestedLast, Handle(Geom2d_Curve)& NewCurve2dPtr);
90
91 Standard_EXPORT static void BuildCurve3d (const Standard_Real Tolerance, Adaptor3d_CurveOnSurface& CurvePtr, const Standard_Real FirstParameter, const Standard_Real LastParameter, Handle(Geom_Curve)& NewCurvePtr, Standard_Real& MaxDeviation, Standard_Real& AverageDeviation, const GeomAbs_Shape Continuity = GeomAbs_C1, const Standard_Integer MaxDegree = 14, const Standard_Integer MaxSegment = 30);
92
93 Standard_EXPORT static void AdjustExtremity (Handle(Geom_BoundedCurve)& Curve, const gp_Pnt& P1, const gp_Pnt& P2, const gp_Vec& T1, const gp_Vec& T2);
94
95 //! Extends the bounded curve Curve to the point Point.
96 //! The extension is built:
97 //! - at the end of the curve if After equals true, or
98 //! - at the beginning of the curve if After equals false.
99 //! The extension is performed according to a degree of
100 //! continuity equal to Cont, which in its turn must be equal to 1, 2 or 3.
101 //! This function converts the bounded curve Curve into a BSpline curve.
102 //! Warning
103 //! - Nothing is done, and Curve is not modified if Cont is
104 //! not equal to 1, 2 or 3.
105 //! - It is recommended that the extension should not be
106 //! too large with respect to the size of the bounded
107 //! curve Curve: Point must not be located too far from
108 //! one of the extremities of Curve.
109 Standard_EXPORT static void ExtendCurveToPoint (Handle(Geom_BoundedCurve)& Curve, const gp_Pnt& Point, const Standard_Integer Cont, const Standard_Boolean After);
110
111
112 //! Extends the bounded surface Surf along one of its
113 //! boundaries. The chord length of the extension is equal to Length.
114 //! The direction of the extension is given as:
115 //! - the u parametric direction of Surf, if InU equals true, or
116 //! - the v parametric direction of Surf, if InU equals false.
117 //! In this parametric direction, the extension is built on the side of:
118 //! - the last parameter of Surf, if After equals true, or
119 //! - the first parameter of Surf, if After equals false.
120 //! The extension is performed according to a degree of
121 //! continuity equal to Cont, which in its turn must be equal to 1, 2 or 3.
122 //! This function converts the bounded surface Surf into a BSpline surface.
123 //! Warning
124 //! - Nothing is done, and Surf is not modified if Cont is
125 //! not equal to 1, 2 or 3.
126 //! - It is recommended that Length, the size of the
127 //! extension should not be too large with respect to the
128 //! size of the bounded surface Surf.
129 //! - Surf must not be a periodic BSpline surface in the
130 //! parametric direction corresponding to the direction of extension.
131 Standard_EXPORT static void ExtendSurfByLength (Handle(Geom_BoundedSurface)& Surf, const Standard_Real Length, const Standard_Integer Cont, const Standard_Boolean InU, const Standard_Boolean After);
132
133 //! Compute axes of inertia, of some points -- -- --
134 //! <Axe>.Location() is the BaryCentre -- -- -- -- --
135 //! <Axe>.XDirection is the axe of upper inertia -- -- --
136 //! -- <Axe>.Direction is the Normal to the average plane
137 //! -- -- -- IsSingular is True if points are on line --
138 //! Tol is used to determine singular cases.
139 Standard_EXPORT static void AxeOfInertia (const TColgp_Array1OfPnt& Points, gp_Ax2& Axe, Standard_Boolean& IsSingular, const Standard_Real Tol = 1.0e-7);
140
141 //! Compute principale axes of inertia, and dispertion
142 //! value of some points.
143 Standard_EXPORT static void Inertia (const TColgp_Array1OfPnt& Points, gp_Pnt& Bary, gp_Dir& XDir, gp_Dir& YDir, Standard_Real& Xgap, Standard_Real& YGap, Standard_Real& ZGap);
144
145 //! Warning! This assume that the InParameter is an increasing sequence
146 //! of real number and it will not check for that : Unpredictable
147 //! result can happen if this is not satisfied. It is the caller
148 //! responsability to check for that property.
149 //!
150 //! This method makes uniform NumPoints segments S1,...SNumPoints out
151 //! of the segment defined by the first parameter and the
152 //! last parameter ofthe InParameter ; keeps only one
153 //! point of the InParameters set of parameter in each of
154 //! the uniform segments taking care of the first and the
155 //! last parameters. For the ith segment the element of
156 //! the InParameter is the one that is the first to exceed
157 //! the midpoint of the segment and to fall before the
158 //! midpoint of the next segment
159 //! There will be at the end at most NumPoints + 1 if
160 //! NumPoints > 2 in the OutParameters Array
161 Standard_EXPORT static void RemovePointsFromArray (const Standard_Integer NumPoints, const TColStd_Array1OfReal& InParameters, Handle(TColStd_HArray1OfReal)& OutParameters);
162
163 //! this makes sure that there is at least MinNumPoints
164 //! in OutParameters taking into account the parameters in
165 //! the InParameters array provided those are in order,
166 //! that is the sequence of real in the InParameter is strictly
167 //! non decreasing
168 Standard_EXPORT static void DensifyArray1OfReal (const Standard_Integer MinNumPoints, const TColStd_Array1OfReal& InParameters, Handle(TColStd_HArray1OfReal)& OutParameters);
169
170 Standard_EXPORT static void FuseIntervals (const TColStd_Array1OfReal& Interval1, const TColStd_Array1OfReal& Interval2, TColStd_SequenceOfReal& Fusion, const Standard_Real Confusion = 1.0e-9);
171
172 //! this will compute the maximum distance at the
173 //! parameters given in the Parameters array by
174 //! evaluating each parameter the two curves and taking
175 //! the maximum of the evaluated distance
176 Standard_EXPORT static void EvalMaxParametricDistance (const Adaptor3d_Curve& Curve, const Adaptor3d_Curve& AReferenceCurve, const Standard_Real Tolerance, const TColStd_Array1OfReal& Parameters, Standard_Real& MaxDistance);
177
178 //! this will compute the maximum distancef at the parameters
179 //! given in the Parameters array by projecting from the Curve
180 //! to the reference curve and taking the minimum distance
181 //! Than the maximum will be taken on those minimas.
182 Standard_EXPORT static void EvalMaxDistanceAlongParameter (const Adaptor3d_Curve& Curve, const Adaptor3d_Curve& AReferenceCurve, const Standard_Real Tolerance, const TColStd_Array1OfReal& Parameters, Standard_Real& MaxDistance);
183
184 //! Cancel,on the boudaries,the denominator first derivative
185 //! in the directions wished by the user and set its value to 1.
186 Standard_EXPORT static void CancelDenominatorDerivative (Handle(Geom_BSplineSurface)& BSurf, const Standard_Boolean UDirection, const Standard_Boolean VDirection);
187
188 Standard_EXPORT static Standard_Integer NormEstim (const Handle(Geom_Surface)& S, const gp_Pnt2d& UV, const Standard_Real Tol, gp_Dir& N);
189
190
191
192
193protected:
194
195
196
197
198
199private:
200
201
202
203
204friend class GeomLib_MakeCurvefromApprox;
205friend class GeomLib_Interpolate;
206friend class GeomLib_DenominatorMultiplier;
207friend class GeomLib_CheckBSplineCurve;
208friend class GeomLib_Check2dBSplineCurve;
209friend class GeomLib_IsPlanarSurface;
210friend class GeomLib_Tool;
211friend class GeomLib_PolyFunc;
212friend class GeomLib_LogSample;
213
214};
215
216
217
218
219
220
221
222#endif // _GeomLib_HeaderFile