Построение заплатки
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:
Рис. 1
Рис. 2
На рис. 3 приведено шесть кривых, лежащих на краях разных граней, полученных путем резки граней общей поверхностью:
Рис. 3
Если после резки в краевых ребрах сохранилась информация о режущей поверхности, то при построении заплатки может быть использована режущая поверхность. На рис. 4 приведен пример построения заплатки в виде некоторой части режущей поверхности, которая образовала краевые ребра, приведенные на рис. 3:
Рис. 4
Как правило, кривые для множества initCurves берутся от краевых ребер. После построения заплатку часто сшивают с другими телами, примыкающими к ее краям.
Функция PatchShell() добавляет в журнал построенного тела строитель MbPatchCreator. Строитель MbPatchCreator объявлен в файле cr_patch_creator.h.
В тестовом приложении test.exe построение заплатки можно реализовать командой меню «Создать→Оболочку→Заплатку».