Поверхность скругления MbFilletSurface
Класс MbFilletSurface объявлен в файле surf_fillet_surface.h.
Поверхность скругления MbFilletSurface принадлежит к группе поверхностей сопряжения MbSmoothSurface. Поверхность скругления описывается кривой на первой сопрягаемой поверхности MbSurfaceCurve curve1, кривой на второй сопрягаемой поверхности MbSurfaceCurve curve2, кривой MbCurve3D curve0, функцией MbFunction weights0 веса кривой curve0, способом построения скругления form, радиусами скругления distance1 и distance2, коэффициентом формы conic, граничными значениями umin и umax параметра кривых curve1, curve2, curve0 и функции weights0, граничными значениями второго параметра поверхности vmin и vmax, признаком периодичности первого параметра поверхности uclosed, признаком наличия полюса поверхности при начальном значении первого параметра poleMin, признаком наличия полюса поверхности при конечном значении первого параметра poleMax, признаком равномерной параметризации поверхности по второму параметру even, признаком гладкого сопряжения поверхности с сопрягаемыми поверхностями equable, признаком byCurve1 наличия кромки вдоль кривой curve2 или curve1 (equable = false). У поверхности есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов поверхности.
Кривые curve1, curve2, curve0 и функция weights0 согласованы друг с другом и имеют одинаковую область определения параметра. Первый параметр поверхности u совпадает с параметром кривых curve1, curve2, curve0 и функции weights0, который является общим для них. Первый параметр поверхности принимает значения на отрезке umin ≤ u ≤ umax, который соответствует области определения кривых curve1, curve2, curve0 и функции weights0. Поверхность может быть периодической по первому параметру, если периодическими являются кривые curve1, curve2, curve0 и функция weights0.
Второй параметр поверхности v принимает значения на отрезке vmin ≤ v ≤ vmax. Значение v = vmin соответствует точке на кривой curve1, значение v = vmax соответствует точке на кривой curve2. Поверхность не может быть периодической по второму параметру.
В методе PointOn( double u, double v, MbCartPoint3D & s ) радиус-вектор поверхности s описывается векторной функцией
Каждая кривая s(const, v) с фиксированным первым параметром поверхности u = const является NURBS-кривой третьего порядка, построенной по точкам curve1(u), curve0(u), curve2(u), у которой крайние точки имеют единичный вес, а средняя точка curve0(u) имеет вес weights0(u). При conic = _ARC_ функция weights0(u) вычисляется из условия, что все кривые s(const, v) являются дугами окружности. При conic ≠ _ARC_ функция weights0 является константой и равна коэффициенту формы conic. Поверхность скругления приведена на рис. 1.
Рис. 1
В общем случае поверхность гладко сопрягается с поверхностями, на которых расположены кривые curve1(u) и curve2(u). В этом случае параметр equable = true. Если equable = false, то по одной из кривых curve1 или curve2 сопряжение является гладким, а другая кривая является кромкой. При byCurve1 = true сопряжение является гладким по кривой curve1, в противном случае сопряжение является гладким по кривой curve2. Поверхность скругления с сохранением кромки приведена на рис. 2.
Рис. 2
Если радиусы скругления distance1 и distance2 не равны, то поверхность скругления в сечении s(const, v) с параметрами u = const описывает эллипс. Эллиптическая поверхность скругления приведена на рис. 3.
Рис. 3
В общем случае способ скругления form = st_Fillet. Если способ скругления form = st_Span, то distance1 = distance2 и равны расстоянию между кривыми curve1 и curve2, а радиус поверхности скругления является переменным. Поверхность скругления с сохранением расстояния между опорными кривыми приведена на рис. 4.
Рис. 4
Кривые поверхности s(const, v) с параметрами u = const являются коническими сечениями, форма которых зависит от параметра conic. Если conic = _ARC_ = 0, то кривые поверхности s(const, v) являются дугами окружности. Если conic = 0.5, то кривые поверхности s(const, v) являются дугами параболы. Если 0.05 < conic < 0.5, то кривые поверхности s(const, v) являются дугами эллипса. Если 0.5 < conic < 0.95, то кривые поверхности s(const, v) являются дугами гиперболы. Поверхность может иметь полюс при u = umin и u = umax, если соответствующие края кривых curve0, curve1 и curve2 совпадают.