1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-21 10:13:43 +03:00
occt/src/Geom/Geom_Curve.hxx
abv 92efcf78a6 0026936: Drawbacks of inlining in new type system in OCCT 7.0 -- automatic
Automatic restore of IMPLEMENT_STANDARD_RTTIEXT macro (upgrade -rtti)
2015-12-04 14:15:06 +03:00

252 lines
9.2 KiB
C++

// Created on: 1993-03-10
// Created by: JCV
// Copyright (c) 1993-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Geom_Curve_HeaderFile
#define _Geom_Curve_HeaderFile
#include <Standard.hxx>
#include <Standard_Type.hxx>
#include <Geom_Geometry.hxx>
#include <Standard_Real.hxx>
#include <Standard_Boolean.hxx>
#include <GeomAbs_Shape.hxx>
#include <Standard_Integer.hxx>
class Standard_RangeError;
class Standard_NoSuchObject;
class Geom_UndefinedDerivative;
class Geom_UndefinedValue;
class gp_Trsf;
class gp_Pnt;
class gp_Vec;
class Geom_Curve;
DEFINE_STANDARD_HANDLE(Geom_Curve, Geom_Geometry)
//! The abstract class Curve describes the common
//! behavior of curves in 3D space. The Geom package
//! provides numerous concrete classes of derived
//! curves, including lines, circles, conics, Bezier or
//! BSpline curves, etc.
//! The main characteristic of these curves is that they
//! are parameterized. The Geom_Curve class shows:
//! - how to work with the parametric equation of a curve
//! in order to calculate the point of parameter u,
//! together with the vector tangent and the derivative
//! vectors of order 2, 3,..., N at this point;
//! - how to obtain general information about the curve
//! (for example, level of continuity, closed
//! characteristics, periodicity, bounds of the parameter field);
//! - how the parameter changes when a geometric
//! transformation is applied to the curve or when the
//! orientation of the curve is inverted.
//! All curves must have a geometric continuity: a curve is
//! at least "C0". Generally, this property is checked at
//! the time of construction or when the curve is edited.
//! Where this is not the case, the documentation states so explicitly.
//! Warning
//! The Geom package does not prevent the
//! construction of curves with null length or curves which
//! self-intersect.
class Geom_Curve : public Geom_Geometry
{
public:
//! Changes the direction of parametrization of <me>.
//! The "FirstParameter" and the "LastParameter" are not changed
//! but the orientation of the curve is modified. If the curve
//! is bounded the StartPoint of the initial curve becomes the
//! EndPoint of the reversed curve and the EndPoint of the initial
//! curve becomes the StartPoint of the reversed curve.
Standard_EXPORT virtual void Reverse() = 0;
//! Returns the parameter on the reversed curve for
//! the point of parameter U on <me>.
//!
//! me->Reversed()->Value(me->ReversedParameter(U))
//!
//! is the same point as
//!
//! me->Value(U)
Standard_EXPORT virtual Standard_Real ReversedParameter (const Standard_Real U) const = 0;
//! Returns the parameter on the transformed curve for
//! the transform of the point of parameter U on <me>.
//!
//! me->Transformed(T)->Value(me->TransformedParameter(U,T))
//!
//! is the same point as
//!
//! me->Value(U).Transformed(T)
//!
//! This methods returns <U>
//!
//! It can be redefined. For example on the Line.
Standard_EXPORT virtual Standard_Real TransformedParameter (const Standard_Real U, const gp_Trsf& T) const;
//! Returns a coefficient to compute the parameter on
//! the transformed curve for the transform of the
//! point on <me>.
//!
//! Transformed(T)->Value(U * ParametricTransformation(T))
//!
//! is the same point as
//!
//! Value(U).Transformed(T)
//!
//! This methods returns 1.
//!
//! It can be redefined. For example on the Line.
Standard_EXPORT virtual Standard_Real ParametricTransformation (const gp_Trsf& T) const;
//! Returns a copy of <me> reversed.
Standard_EXPORT Handle(Geom_Curve) Reversed() const;
//! Returns the value of the first parameter.
//! Warnings :
//! It can be RealFirst from package Standard
//! if the curve is infinite
Standard_EXPORT virtual Standard_Real FirstParameter() const = 0;
//! Returns the value of the last parameter.
//! Warnings :
//! It can be RealLast from package Standard
//! if the curve is infinite
Standard_EXPORT virtual Standard_Real LastParameter() const = 0;
//! Returns true if the curve is closed.
//! Some curves such as circle are always closed, others such as line
//! are never closed (by definition).
//! Some Curves such as OffsetCurve can be closed or not. These curves
//! are considered as closed if the distance between the first point
//! and the last point of the curve is lower or equal to the Resolution
//! from package gp wich is a fixed criterion independant of the
//! application.
Standard_EXPORT virtual Standard_Boolean IsClosed() const = 0;
//! Is the parametrization of the curve periodic ?
//! It is possible only if the curve is closed and if the
//! following relation is satisfied :
//! for each parametric value U the distance between the point
//! P(u) and the point P (u + T) is lower or equal to Resolution
//! from package gp, T is the period and must be a constant.
//! There are three possibilities :
//! . the curve is never periodic by definition (SegmentLine)
//! . the curve is always periodic by definition (Circle)
//! . the curve can be defined as periodic (BSpline). In this case
//! a function SetPeriodic allows you to give the shape of the
//! curve. The general rule for this case is : if a curve can be
//! periodic or not the default periodicity set is non periodic
//! and you have to turn (explicitly) the curve into a periodic
//! curve if you want the curve to be periodic.
Standard_EXPORT virtual Standard_Boolean IsPeriodic() const = 0;
//! Returns the period of this curve.
//! Exceptions Standard_NoSuchObject if this curve is not periodic.
Standard_EXPORT virtual Standard_Real Period() const;
//! It is the global continuity of the curve
//! C0 : only geometric continuity,
//! C1 : continuity of the first derivative all along the Curve,
//! C2 : continuity of the second derivative all along the Curve,
//! C3 : continuity of the third derivative all along the Curve,
//! G1 : tangency continuity all along the Curve,
//! G2 : curvature continuity all along the Curve,
//! CN : the order of continuity is infinite.
Standard_EXPORT virtual GeomAbs_Shape Continuity() const = 0;
//! Returns true if the degree of continuity of this curve is at least N.
//! Exceptions - Standard_RangeError if N is less than 0.
Standard_EXPORT virtual Standard_Boolean IsCN (const Standard_Integer N) const = 0;
//! Returns in P the point of parameter U.
//! If the curve is periodic then the returned point is P(U) with
//! U = Ustart + (U - Uend) where Ustart and Uend are the
//! parametric bounds of the curve.
//!
//! Raised only for the "OffsetCurve" if it is not possible to
//! compute the current point. For example when the first
//! derivative on the basis curve and the offset direction
//! are parallel.
Standard_EXPORT virtual void D0 (const Standard_Real U, gp_Pnt& P) const = 0;
//! Returns the point P of parameter U and the first derivative V1.
//! Raised if the continuity of the curve is not C1.
Standard_EXPORT virtual void D1 (const Standard_Real U, gp_Pnt& P, gp_Vec& V1) const = 0;
//! Returns the point P of parameter U, the first and second
//! derivatives V1 and V2.
//! Raised if the continuity of the curve is not C2.
Standard_EXPORT virtual void D2 (const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) const = 0;
//! Returns the point P of parameter U, the first, the second
//! and the third derivative.
//! Raised if the continuity of the curve is not C3.
Standard_EXPORT virtual void D3 (const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const = 0;
//! The returned vector gives the value of the derivative for the
//! order of derivation N.
//! Raised if the continuity of the curve is not CN.
//!
//! Raised if the derivative cannot be computed
//! easily. e.g. rational bspline and n > 3.
//! Raised if N < 1.
Standard_EXPORT virtual gp_Vec DN (const Standard_Real U, const Standard_Integer N) const = 0;
//! Computes the point of parameter U on <me>.
//! If the curve is periodic then the returned point is P(U) with
//! U = Ustart + (U - Uend) where Ustart and Uend are the
//! parametric bounds of the curve.
//! it is implemented with D0.
//!
//! Raised only for the "OffsetCurve" if it is not possible to
//! compute the current point. For example when the first
//! derivative on the basis curve and the offset direction are parallel.
Standard_EXPORT gp_Pnt Value (const Standard_Real U) const;
DEFINE_STANDARD_RTTIEXT(Geom_Curve,Geom_Geometry)
protected:
private:
};
#endif // _Geom_Curve_HeaderFile