Files
Extern/C3d/Include/surf_channel_surface.h
T
SaraP bf6235c0d6 Extern :
- C3d aggiornamento librerie ( 118030).
2025-04-29 09:09:40 +02:00

421 lines
36 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Поверхность скругления с переменным радиусом обычная или с сохранением кромки.
\en Fillet surface with variable radius is normal or with preservation of edges. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __SURF_CHANNEL_SURFACE_H
#define __SURF_CHANNEL_SURFACE_H
#include <surf_fillet_surface.h>
//------------------------------------------------------------------------------
/** \brief \ru Поверхность скругления с переменным радиусом обычная или с сохранением кромки.
\en Fillet surface with variable radius is normal or with preservation of edges. \~
\details \ru Поверхность скругления с переменным радиусом является NURBS-поверхностью,
построенной по трём кривым: curve1, curve0, curve2.
Первый параметр поверхности совпадает с параметром кривых curve1, curve0, curve2.
Второй параметр изменяется от нуля (точки совпадают с curve1) до единицы (точки совпадают с curve2).
Функция function определяет изменение радиуса и равна отношению текущего радиуса к заданному для поверхности радиусу.
Параметр функции радиуса совпадает с параметром кривых curve1, curve0, curve2.
Если коэффициент формы conic = _ARC_ ( 0 ), то вес каждой точки кривой curve0 задаётся функцией weights0 и
вычислен так, что сечение поверхности вдоль её второго параметра будет дугой окружности,
то есть при любом параметре u три точки curve1(u), curve0(u), curve2(u) определяют NURBS-кривую в форме дуги окружности.
Если коэффициент формы conic != _ARC_, то вес каждой точки кривой curve0 равен conic / ( 1.0 - conic ).
При conic = 0.5 сечение поверхности вдоль её второго параметра будет параболой. \n
\en Fillet surface with variable radius is NURBS-surface
constructed on three curves: curve1, curve0, curve2.
The first surface parameter coincides with the parameter of curve1, curve0, curve2 curves.
The second parameter is changed from zero (points coincide with curve1) to unit (points coincide with curve2).
Function "function" determines the change of the radius and equals the ratio of the current radius to given for surface.
The parameter of radius function coincides with the parameter of curves curve1, curve0, curve2.
If coefficient of shape conic = _ARC_ ( 0 ), then the weight of each point of the curve0 curve determined by the function weights0 and
calculated so that the section of surface along its second parameter is a circular arc
i.e. for any parameter u three points of curve1(u), curve0(u), curve2(u) determine the NURBS-curve with the shape of a circular arc.
If coefficient of shape conic != _ARC_, then the weight of each point of the curve0 curve is equal to conic / ( 1.0 - conic ).
If conic = 0.5, then the surface section along its second parameter is parabola. \n \~
\ingroup Surfaces
*/
// ---
class MATH_CLASS MbChannelSurface : public MbFilletSurface {
private:
MbFunction * function1; ///< \ru Функция изменения радиуса (переменный коэффициент). \en Function of change of the radius (variable coefficient).
MbFunction * function2; ///< \ru Функция изменения радиуса (переменный коэффициент). \en Function of change of the radius (variable coefficient).
public:
/** \brief \ru Конструктор по двум кривым и типу сопряжения.
\en Constructor by two curves and type of mate. \~
\details \ru Конструктор по двум кривым и типу сопряжения.
\en Constructor by two curves and type of mate. \~
\param[in] curv1 - \ru Опорная кривая на первой поверхности
\en Support curve on the first surface \~
\param[in] curv2 - \ru Опорная кривая на второй поверхности
\en Support curve on the second surface \~
\param[in] d1 - \ru Радиус скругления со знаком для поверхности кривой crve1
\en Fillet radius with sign for surface of crve1 curve \~
\param[in] d2 - \ru Радиус скругления со знаком для поверхности кривой crve2
\en Fillet radius with sign for surface of crve2 curve \~
\param[in] fm - \ru Тип сопряжения: \n
st_Span - скругление с заданной хордой \n
st_Fillet - скругление с заданными радиусами
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса
\en Function of change of the radius \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
\en Uniform parametrization by arc or not \~
*/
MbChannelSurface( MbSurfaceCurve & curv1, MbSurfaceCurve & curv2,
double d1, double d2, MbeSmoothForm fm, double cn, MbFunction & func, bool ev );
/** \brief \ru Конструктор по двум кривым и типу сопряжения.
\en Constructor by two curves and type of mate. \~
\details \ru Конструктор поверхности с сохранением кромки по двум кривым и типу сопряжения.
\en Constructor of surface with preservation of edges by two curves and mate type. \~
\param[in] curv1 - \ru Опорная кривая на первой поверхности
\en Support curve on the first surface \~
\param[in] curv2 - \ru Опорная кривая на второй поверхности
\en Support curve on the second surface \~
\param[in] d1 - \ru Радиус скругления со знаком для поверхности кривой crve1
\en Fillet radius with sign for surface of crve1 curve \~
\param[in] d2 - \ru Радиус скругления со знаком для поверхности кривой crve2
\en Fillet radius with sign for surface of crve2 curve \~
\param[in] fm - \ru Тип сопряжения: \n
st_Span - скругление с заданной хордой \n
st_Fillet - скругление с заданными радиусами
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса
\en Function of change of the radius \~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
\en True - curve2 curve is edge, false - curve1 curve is edge \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
\en Uniform parametrization by arc or not \~
*/
MbChannelSurface( MbSurfaceCurve & curv1, MbSurfaceCurve & curv2,
double d1, double d2, MbeSmoothForm fm, double cn, MbFunction & func, bool byFirst, bool ev );
/** \brief \ru Конструктор по двум кривым и типу сопряжения.
\en Constructor by two curves and type of mate. \~
\details \ru Конструктор поверхности с сохранением кромки по двум кривым и типу сопряжения.
\en Constructor of surface with preservation of edges by two curves and mate type. \~
\param[in] surf1 - \ru Первая поверхность
\en First surface \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности
\en Support curve at parameters of the first surface \~
\param[in] surf2 - \ru Вторая поверхность
\en Second surface \~
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности
\en Support curve at parameters of the second surface \~
\param[in] curv0 - \ru Кривая пересеченния касательных к поверхностям
\en Intersection curve of tangents to surfaces \~
\param[in] weig0 - \ru Функция изменения веса.
\en Function of change of the weights. \~
\param[in] d1 - \ru Радиус скругления со знаком для поверхности кривой crve1
\en Fillet radius with sign for surface of crve1 curve \~
\param[in] d2 - \ru Радиус скругления со знаком для поверхности кривой crve2
\en Fillet radius with sign for surface of crve2 curve \~
\param[in] fm - \ru Тип сопряжения: \n
st_Span - скругление с заданной хордой \n
st_Fillet - скругление с заданными радиусами
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса.
\en Function of change of the radius. \~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
\en True - curve2 curve is edge, false - curve1 curve is edge \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
\en Uniform parametrization by arc or not \~
*/
MbChannelSurface( MbSurface & surf1, MbCurve & curv1,
MbSurface & surf2, MbCurve & curv2,
MbCurve3D & curv0, MbFunction & weig0,
double d1, double d2, MbeSmoothForm fm, double cn, MbFunction & func, bool ev );
/** \brief \ru Создать поверхность скругления по двум поверхностям по закону.
\en Create a fillet surface from two surfaces according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.\n
\en If successful, a fillet surface is created with version >= fsv_Ver1. \n\~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] law - \ru Функция домножения радиуса rad, зависящая от параметра u поверхности.
\en Multiplication function of radius rad, depending on the parameter u of the surface. \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности.
\en Support curve at parameters of the first surface. \~
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности.
\en Support curve at parameters of the second surface. \~
\param[in] sgn1, sgn2 - \ru Ориентации опорных поверхностей. В случае true отступ выполняетя по нормали, в случае false - против нормали.
\en Orientations of the support surfaces. If true, the indentation is performed along the normal,
if false, it is performed against the normal.\~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
DEPRECATE_DECLARE_REPLACE( CreateLawFillet with a variable shape coefficient )
static MbChannelSurface * CreateLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям по закону.
\en Create a fillet surface from two surfaces according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1. \n
\en If successful, a fillet surface is created with version >= fsv_Ver1. \n\~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] law - \ru Функция домножения радиуса rad, зависящая от параметра u поверхности.
\en Multiplication function of radius rad, depending on the parameter u of the surface. \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности.
\en Support curve at parameters of the first surface. \~
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности.
\en Support curve at parameters of the second surface. \~
\param[in] sgn1, sgn2 - \ru Ориентации опорных поверхностей. В случае true отступ выполняетя по нормали, в случае false - против нормали.
\en Orientations of the support surfaces. If true, the indentation is performed along the normal,
if false, it is performed against the normal.\~
\param[in] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям по закону.
\en Create a fillet surface from two surfaces according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.\n
\en If successful, a fillet surface is created with version >= fsv_Ver1. \n\~
\param[in] curv1, curv2 - \ru Опорные кривые в параметрах поверхности
\en Support curves at parameters of surfaces \~
\param[in] fRad1, fRad2 - \ru Функции радиуса, зависящая от параметра u поверхности.
\en Radii function, depending on the parameter u of the surface. \~
\param[in] sgn1, sgn2 - \ru Ориентации опорных поверхностей. В случае true отступ выполняетя по нормали, в случае false - против нормали.
\en Orientations of the support surfaces. If true, the indentation is performed along the normal,
if false, it is performed against the normal.\~
\param[in] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateLawFillet( MbSurfaceCurve & curv1, bool sgn1, MbFunction & fRad1,
MbSurfaceCurve & curv2, bool sgn2, MbFunction & fRad2,
MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям с переменной хордой.
\en Create a fillet surface by two surfaces with a constant chord. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.\n
\en If successful, a fillet surface is created with version >= fsv_Ver1. \n\~
\param[in] curv1, curv2 - \ru Опорные кривые в параметрах поверхности.
\en Support curves at parameters of surfaces. \~
\param[in] sgn1, sgn2 - \ru Ориентации опорных поверхностей. В случае true отступ выполняетя по нормали, в случае false - против нормали.
\en Orientations of the support surfaces. If true, the indentation is performed along the normal,
if false, it is performed against the normal.\~
\param[in] h - \ru Функция величины хорды.
\en Chord function. \~
\param[in] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateChordLawFillet( MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2,
MbFunction & hFunc, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по поверхности и кромке с радиусом по закону
\en Create fillet surface by support surface and by kerb-curve with a radius that varies according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.\n
\en If successful, a fillet surface is created with version >= fsv_Ver1.\n\~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] law - \ru Функция домножения радиуса rad, зависящая от параметра u поверхности.
\en Multiplication function of radius rad, depending on the parameter u of the surface. \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности.
\en Support curve at parameters of the first surface. \~
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности.
\en Support curve at parameters of the second surface. \~
\param[in] sgn1, sgn2 - \ru Ориентации опорных поверхностей. В случае true отступ выполняетя по нормали, в случае false - против нормали.
\en Orientations of the support surfaces. If true, the indentation is performed along the normal,
if false, it is performed against the normal.\~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой.
\en True - curve2 curve is edge, false - curve1 curve is edge. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateKerbLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, bool byFirst, VERSION vers );
protected:
/// \ru Конструктор для наследников обычной поверхности скругления. \en Constructor for inheritors of ordinary fillet surface.
MbChannelSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbFunction * cn, MbFunction & func );
MbChannelSurface( MbSurfaceCurve & curv1, double d1, MbFunction & func1,
MbSurfaceCurve & curv2, double d2, MbFunction & func2, MbFunction * cn );
MbChannelSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbFunction & func, bool byFirst );
MbChannelSurface( const MbChannelSurface &, MbRegDuplicate * );
MbChannelSurface( const MbChannelSurface * ); // \ru Конструктор копирования с теми же опорными поверхностями для CurvesDuplicate() \en Copy constructor with the same support surfaces for CurvesDuplicate()
private:
MbChannelSurface( const MbChannelSurface & ); // \ru Не реализовано. \en Not implemented.
public:
virtual ~MbChannelSurface ();
public:
VISITING_CLASS( MbChannelSurface );
/** \ru \name Общие функции геометрического объекта
\en \name Common functions of a geometric object
\{ */
MbeSpaceType IsA() const override; // \ru Тип элемента. \en A type of element.
MbSpaceItem & Duplicate( MbRegDuplicate * = nullptr ) const override; // \ru Сделать копию элемента. \en Create a copy of the element.
bool IsSame ( const MbSpaceItem & other, double accuracy = LENGTH_EPSILON ) const override; // \ru Является ли объект копией. \en Whether the object is a copy.
bool SetEqual ( const MbSpaceItem & ) override; // \ru Сделать равным. \en Make equal.
bool IsSimilar( const MbSpaceItem & ) const override; // \ru Являются ли объекты подобными. \en Determine whether the objects are similar.
// \ru Подобные ли поверхности для объединения (слива). \en Whether the surfaces to union (joining) are similar.
bool IsSimilarToSurface( const MbSurface & surf, VERSION version, double precision = METRIC_PRECISION ) const override;
void GetProperties( MbProperties & properties ) override; // \ru Выдать свойства объекта. \en Get properties of the object.
/** \} */
/** \ru \name Общие функции поверхности
\en \name Common functions of surface
\{ */
MbSurface * Offset( double d, bool same ) const override; // \ru Создание эквидистантной поверхности. \en Creation of an offset surface.
double GetFilletRadius( const MbCartPoint3D & p, double accuracy = METRIC_REGION ) const override;
double GetFilletRadius( double u ) const override;
/** \} */
/** \ru \name Функции поверхности сопряжения
\en \name Functions of smooth surface
\{ */
MbSmoothSurface & CurvesDuplicate() const override; // \ru Копия с теми же опорными поверхностями. \en Copy with the same support surfaces.
double GetSmoothRadius() const override; // \ru Дать радиус. \en Get radius.
double DistanceRatio( bool firstCurve, MbCartPoint3D & p, double distance ) const override;
/** \} */
/** \ru \name Функции поверхности скругления с переменным радиусом обычная или с сохранением кромки
\en \name Functions of fillet surface with variable radius is normal or with preservation of edges
\{ */
/** \brief \ru Добавить точку в опорные кривые границы.
\en Add a point to the support curves of the boundary. \~
\details \ru Добавить точку в опорные кривые границы.\n
Точка будет добавлена в кривую, если она имеет тип pt_LineSegment, pt_CubicSpline или pt_Hermit.
\en Add a point to the support curves of the boundary.\n
A point will be added into a curve if it has a type pt_LineSegment, pt_CubicSpline or pt_Hermit. \~
\param[out] t1 - \ru Параметр точки на первой кривой (если add1 = true)
\en Parameter of a point on the first curve (if add1 equals true) \~
\param[in] p1 - \ru Точка на первой кривой
\en Point on the first curve \~
\param[in] add1 - \ru Нужно ли добавлять точку в первую кривую
\en Whether to add a point to the first curve \~
\param[out] t2 - \ru Параметр точки на второй кривой (если add2 = true)
\en Parameter of a point on the second curve (if add2 equals true) \~
\param[in] p2 - \ru Точка на второй кривой
\en Point on the second curve \~
\param[in] add2 - \ru Нужно ли добавлять точку во вторую кривую
\en Whether to add a point to the second curve \~
*/
bool InsertPoints( double & t1, const MbCartPoint & p1, bool add1,
double & t2, const MbCartPoint & p2, bool add2 ) override;
/** \brief \ru Проверить наличие полюса.
\en Check pole availability. \~
\details \ru Проверить наличие полюса.
\en Check pole availability. \~
\param[in] u - \ru Начальное приближение параметра по U для поиска полюса
\en Initial approximation of parameter U to search pole \~
\param[in] bModify - \ru Флаг модификации поверхности \n
если true, то поверхность корректирует свои параметры по U
и соответственно им опорные кривые curve1 и curve2
\en Flag of surface modification \n
if true, then the surface corrects its parameters along U
and according to them the support curves curve1 and curve2 \~
\return \ru true - если нашли полюс
\en True - if pole has been found \~
*/
bool CheckPole( double & u, bool bModify = true );
/// \ru Получить функцию изменения радиуса (0 - первая кривая, иначе - вторая кривая) . \en Get a function of radius changing (0 - first curve, otherwise - second curve).
const MbFunction & GetFunction( size_t ind ) const { return ind == 0 ? *function1 : *function2; }
/// \ru Получить функцию изменения радиуса (0 - первая кривая, иначе - вторая кривая) . \en Get a function of radius changing (0 - first curve, otherwise - second curve).
MbFunction & SetFunction( size_t ind ) { return ind == 0 ? *function1 : *function2; }
/// \ru Заменить функцию изменения радиуса (0 - первая кривая, иначе - вторая кривая) . \en Set a function of radius changing (0 - first curve, otherwise - second curve).
void SetFunction( size_t ind, MbFunction & funcNew ); // \ru (новая функция должна быть корректна) \en (new function must be correct)
/// \ru Построить функцию изменения радиуса от параметра u1 до параметра u2 (0 - первая кривая, иначе - вторая кривая).
/// \en Construct a function for changing the radius from parameter u1 to parameter u2 (0 - first curve, otherwise - second curve).
MbFunction * MakeFunction( size_t ind, double u1, double u2 ) const;
/** \} */
private:
// \ru Дать коэффициент для радиуса (0 - первая кривая, иначе - вторая кривая).
// \en Get coefficient for radius (0 - first curve, otherwise - second curve).
double FunctionValue( size_t ind, double u ) const override;
void CheckPole(); // \ru Проверить полюса \en Check poles
// \ru Добавить точку в опорные кривые границы поверхности с постоянной хордой. \en Add a point to the support curves of the boundary of surface with constant chord. \~
bool InsertForSpan( double & t1, const MbCartPoint & p1, bool add1,
double & t2, const MbCartPoint & p2, bool add2 );
void operator = ( const MbChannelSurface & ); // \ru Не реализовано. \en Not implemented.
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbChannelSurface )
};
IMPL_PERSISTENT_OPS( MbChannelSurface )
//------------------------------------------------------------------------------
// \ru Создать поверхность переменного радиуса \en Create surface with variable radius
// ---
MbSmoothSurface * CreateChannelSurface( const MbSurface & surface1, SArray<MbCartPoint> & points1,
const MbSurface & surface2, SArray<MbCartPoint> & points2,
MbeSmoothForm form, double distance1, double distance2, double conic,
SArray<double> & dFactor, SArray<double> & dTendency,
bool even, VERSION vers );
//------------------------------------------------------------------------------
// \ru Создать поверхность переменного радиуса с сохранением кромки \en Create surface with variable radius with preservation of edges
// ---
MbSmoothSurface * CreateKerbChannelSurface( const MbSurface & surface1, SArray<MbCartPoint> & points1,
const MbSurface & surface2, SArray<MbCartPoint> & points2,
MbeSmoothForm form, double distance1, double distance2, double conic,
const MbSurfaceIntersectionCurve & guideCurve, SArray<double> & params,
SArray<double> & dFactor,
bool byFirstSurface, bool even, VERSION version );
#endif // __SURF_CHANNEL_SURFACE_H