Построение заплатки

MbResultType PatchShell( const MbPatchShellParams & params,
                               c3d::SolidSPtr &     result );

Функция выполняет построение заплатки по множеству кривых.

Функция принимает в качестве входного параметра объект params класса MbPatchShellParams, содержащий параметры, необходимые для операции (см. определение в op_shell_parameter.h):

  • initCurves – набор кривых;

  • patchValues – объект, содержащий параметры построения;

  • names – именователь.

Класс MbPatchShellParams содержит 3 конструктора по набору кривых, параметрам и именователю:

MbPatchShellParams( const std::vector<SPtr<MbPatchCurve>> & initCurves,
                    const PatchValues &                     patchValues,
                    const MbSNameMaker &                    names );


MbPatchShellParams( const RPArray<MbPatchCurve> & initCurves,
                    const PatchValues &           patchValues,
                    const MbSNameMaker &          names );


MbPatchShellParams( const RPArray<MbCurve3D> & initCurves,
                    const PatchValues &        patchValues,
                    const MbSNameMaker &       names );

Выходным параметром функции является построенное тело result.

Функция возвращает код результата операции из перечисления MbResultType (см. mb_operation_result.h).

Функция объявлена в файле action_shell.h.

Функция выполняет построение тела, состоящего из грани, края которой проходят по заданным кривым. Для построения корректного тела кривые множества initCurves должны стыковаться друг с другом и образовывать замкнутый контур.

Если кривые initCurves лежат в одной плоскости, то заплатка будет представлять собой часть плоскости, лежащую внутри контура, образованного кривыми.

Если все кривые initCurves лежат на одной и той же криволинейной поверхности, то заплатка будет представлять собой часть общей поверхности, ограниченную заданными кривыми.

Если множество initCurves состоит из одной кривой, то эта кривая будет разбита на две части, а поверхность заплатки будет линейчатой поверхностью, имеющей два полюса.

Аналогично строится заплатка, если множество initCurves содержит две кривые – поверхность заплатки будет линейчатой поверхностью, имеющей два полюса.

Если количество кривых initCurves равно трем, то поверхность заплатки будет поверхностью MbCornerSurface, построенной по трем кривым и имеющей полюс.

Если количество кривых initCurves равно четырем, то поверхность заплатки будет поверхностью MbCoverSurface, построенной по четырем кривым. В других случаях возможен отказ от построения.

Объект patchValues cодержит информацию о типе заплатки и флаге проверки самопересечений. Для инициализации объекта в структуре PatchValues по умолчанию задан следующий конструктор:

PatchValues()
  : type               ( ts_none  )
  , checkSelfInt       ( false    )
  , mergeEdges         ( true     )
  , tolerantData       ( false    )
  , internalMatingType ( pmt_None )
{ }

где

  • type – тип заплатки;

  • checkSelfInt – флаг проверки самопересечений;

  • mergeEdges – флаг слияния подобных ребер (true – сливать подобные ребра);

  • tolerantData – флаг построения неточной заплатки по неточным входным данным;

  • internalMatingType – тип сопряжения между частями заплатки. Используется при type = ts_byCurves.

Для объекта patchValues определены следующие типы заплатки (см. перечисление SurfaceType):

  • ts_tang – по касательной;

  • ts_norm – по нормали;

  • ts_none – не определено;

  • ts_plane – плоская заплатка;

  • ts_byCurves – построение задается сопряжениями по каждой кривой.

Типы ts_tang, ts_norm задаются при построении заплатки по касательной или по нормали соответственно.

Если задан тип заплатки ts_plane, будет построена заплатка с плоскими гранями.

Тип ts_byCurves задается, если требуется построить заплатку с сопряжением по некоторым границам. В этом случае для нужной границы MbPatchCurve нужно задать сопряжение методом SetMating().

На рис. 1 приведено восемь кривых, лежащих на краю внутреннего выреза грани. На рис. 2 приведена заплатка, построенная по кривым, приведенным на рис. 1:

../../../../_images/M.1.12.1.png

Рис. 1

../../../../_images/M.1.12.2.png

Рис. 2

На рис. 3 приведено шесть кривых, лежащих на краях разных граней, полученных путем резки граней общей поверхностью:

../../../../_images/M.1.12.3.png

Рис. 3

Если после резки в краевых ребрах сохранилась информация о режущей поверхности, то при построении заплатки может быть использована режущая поверхность. На рис. 4 приведен пример построения заплатки в виде некоторой части режущей поверхности, которая образовала краевые ребра, приведенные на рис. 3:

../../../../_images/M.1.12.4.png

Рис. 4

Как правило, кривые для множества initCurves берутся от краевых ребер. После построения заплатку часто сшивают с другими телами, примыкающими к ее краям.

Функция PatchShell() добавляет в журнал построенного тела строитель MbPatchCreator. Строитель MbPatchCreator объявлен в файле cr_patch_creator.h.

В тестовом приложении test.exe построение заплатки можно реализовать командой меню «Создать→Оболочку→Заплатку».