Files
Extern/C3d/Include/action_polymesh.h
T
SaraP f05795ffff Extern :
- C3d aggiornamento librerie ( 118044).
2025-08-28 14:47:28 +02:00

527 lines
32 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Методы построения полигональных геометрических объектов с топологией.
\en Functions for construction of the polygonal geometric object with topology. \~
\details \ru Полигональные геометрические объекты могут быть построены по набору точек или на базе других объектов.
\en Polygonal geometric objects can be constructed using a set of points or on the basis of other objects. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __ACTION_POLYMESH_H
#define __ACTION_POLYMESH_H
#include <mb_cart_point.h>
#include <mb_cart_point3d.h>
#include <mb_operation_result.h>
#include <curve3d.h>
class MbPolymesh;
class MbFaceShell;
class MbPolymeshTopo;
class MbHalfedgeBoundaryCriterionBase;
class MbMeshCurvatureParams;
class MbDrapeShellParams;
class MbDrapeShellResults;
class MbRemeshParams;
class MbShellLinearizationParams;
class MbMergePolymeshParams;
class MbMeshSmoothingParams;
class MbPolyline3D;
class MbPolylinePolymeshProjectParams;
class MbPolylinePolymeshProjectResults;
class MbFillClosedCurveParams;
class MbFillPolymeshHoleParams;
class MbPolymeshNormalsParams;
class MbCurvePolymeshProjectParams;
class MbPolymeshProjectResults;
class MbPathPolymeshOffsetParams;
class MbPolymeshBooleanParams;
class MbPolymeshBooleanResults;
//------------------------------------------------------------------------------
/** \brief \ru Создать полигональный объект по оболочке.
\en Create the polymesh by the shell. \~
\details \ru Создать полигональный объект по оболочке.
В нем будет сохранен маппинг от регионов и ребер сегментации к граням и ребрам оболочки.
Любые операции, изменяющие топологию сегментации, приведут к невалидности маппинга.
\en Create the polymesh by the shell.
Creates mapping from segmentation edges to shell edges and from segmentation regions to shell faces.
Any operations that change segmentation topology will lead to invalid mapping.
\param[in] params - \ru Параметры алгоритма.
\en The parameters. \~
\param[in] shell - \ru Оболочка.
\en The shell. \~
\param[in,out] mesh - \ru Полигональная сетка.
\en The polymesh. \~
\return \ru Код результата операции, rt_Success в случае успеха.
\en Returns the operation result code, rt_Success if polymesh has been created. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/
// ---
MATH_FUNC( MbResultType ) CreatePolymeshByShell( const MbShellLinearizationParams & params, const MbFaceShell & shell, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Выделить связные группы из набора фасетов.
\en Get connected groups from facets. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] facets - \ru Набор фасетов.
\en Facet array. \~
\param[out] groups - \ru Связные группы фасетов.
\en Groups of connected facets. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetConnectedFacetGroups( const MbPolymesh & mesh,
const c3d::IndicesVector & facets,
std::vector<c3d::IndicesVector> & groups );
//------------------------------------------------------------------------------
/** \brief \ru Выделить связные группы из набора регионов.
\en Get connected groups from regions. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] regions - \ru Набор регионов.
\en Region array. \~
\param[out] groups - \ru Связные группы регионов.
\en Groups of connected regions. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetConnectedRegionGroups( const MbPolymesh & mesh,
const c3d::IndicesVector & regions,
std::vector<c3d::IndicesVector> & groups );
//------------------------------------------------------------------------------
/** \brief \ru Разбить сетку на регионы согласно критерию границы.
\en Divide a polymesh into regions according to a given boundary criterion. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] crit - \ru Критерий границы.
\en Boundary criterion. \~
\param[out] facets - \ru Группы фасетов, разделенные по регионам.
\en Groups of facets divided into regions. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetPolymeshRegions( const MbPolymesh & mesh,
const MbHalfedgeBoundaryCriterionBase & crit,
std::vector<c3d::IndicesVector> & facets );
//------------------------------------------------------------------------------
/** \brief \ru Получить регион сетки согласно критерию границы по указанному фасету-затравке.
\en Get the region containing a given facet according to a given boundary criterion. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] crit - \ru Критерий границы.
\en Boundary criterion. \~
\param[in] seed - \ru Фасет-затравка.
\en A seed facet. \~
\param[out] facets - \ru Все фасеты региона.
\en All the facets of a region. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetPolymeshRegion( const MbPolymesh & mesh,
const MbHalfedgeBoundaryCriterionBase & crit,
size_t seed,
c3d::IndicesVector & facets );
//------------------------------------------------------------------------------
/** \brief \ru Получить границы региона фасетов.
\en Get the boundary edges of a given region. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] region - \ru Набор фасетов, составляющих регион.
\en Facet array which forms a region. \~
\param[out] boundaries - \ru Границы региона (набор граничных ребер).
\en Boundary edges of a region. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetPolymeshRegionBoundaries( const MbPolymesh & mesh,
const c3d::IndicesVector & region,
std::vector<c3d::IndicesVector> & boundaries );
//------------------------------------------------------------------------------
/** \brief \ru Получить открытые границы сетки.
\en Get the open boundary edges of a polymesh. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[out] boundaries - \ru Открытые границы (наборы граничных ребер).
\en Arrays of open boundary edges. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetPolymeshOpenBoundaries( const MbPolymesh & mesh, std::vector<c3d::IndicesVector> & boundaries );
//------------------------------------------------------------------------------
/** \brief \ru Получить открытые границы сегментации.
\en Get open segmentation boundaries. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[out] boundaries - \ru Открытые границы (наборы граничных ребер сегментации).
\en Arrays of open boundary edges of a segmentation. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( void ) GetSegmOpenBoundaries( const MbPolymesh & mesh, std::vector<c3d::IndicesVector> & boundaries );
/// \ru Получить полилинию для ребра сегментации.
MATH_FUNC( bool ) GetPolymeshEdgePolyline( const MbPolymesh & mesh, size_t iEdSegm, c3d::SpacePointsVector & polyline );
/// \ru Получить полилинию для цикла сегментации.
MATH_FUNC( void ) GetPolymeshLoopPolyline( const MbPolymesh & mesh, size_t iLoop, c3d::SpacePointsVector & polyline );
//------------------------------------------------------------------------------
/** \brief \ru Построить контур сечения полигонального объекта плоскостью.
\en Create a section contour for a polygonal object. \~
\param[in] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\param[in] place - \ru Секущая плоскость.
\en A cutting plane. \~
\param[out] polylines - \ru Построенные ломаные контура сечения объекта.
\en The resultant contours. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( MbResultType ) PolymeshSection( const MbPolymesh & mesh,
const MbPlacement3D & place,
c3d::SpaceCurvesSPtrVector & polylines );
//------------------------------------------------------------------------------
/** \brief \ru Отрезать часть полигонального объекта плоскостью.
\en Cut the part of a polygonal object by a plane. \~
\param[in] place - \ru Секущая плоскость.
\en A cutting plane. \~
\param[in] bTriangulate - \ru Триангулировать ли разрезанные фасеты.
\en Should cut facets be triangulated. \~
\param[in,out] mesh - \ru Полигональный объект с топологией.
\en A polygonal object with topology. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( bool ) CutPolymeshByPlane( const MbPlacement3D & place,
bool bTriangulate,
MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Скопировать часть полигонального объекта в другой полигональный объект.
\en Copy the part of a polygonal object into another polygonal object. \~
\param[in] mesh - \ru Оригинальный полигональный объект.
\en An original polygonal object. \~
\param[in] facets - \ru Набор копируемых фасетов.
\en A polygonal object with topology. \~
\param[in,out] meshSub - \ru Полигональный объект, в который производится копирование.
\en A polygonal object in which data should be copied to. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( void ) CopyPolymeshPart( const MbPolymesh & mesh, const c3d::IndicesVector & facets, MbPolymesh & meshSub );
//------------------------------------------------------------------------------
/** \brief \ru Проверить, является ли полигональный объект триангуляцией.
\en Verify if polymesh is triangulation. \~
\param[in] mesh - \ru Полигональный объект.
\en Polygonal object. \~
\return \ru True если полигональный объект является триангуляцией, иначе false.
\en True if polymesh is triangulation, otherwise false. \~
\ingroup Polygonal_Objects
*/ // ---
MATH_FUNC( bool ) IsPolymeshTriangulation( const MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Ремешировать полигональный объект.
\en Remesh a polygonal object. \~
\details \ru Ремешировать полигональный объект.
Он должен быть триангуляцией. Если метод ремешинга по кривизне, в сетке должен
присутствовать атрибут кривизн.
Атрибуты нормалей и кривизн будут удалены.
Если в сетке есть оболочка как параметрическая подложка, она будет использована для проецирования
вершин триангуляции.
\en Remesh a polygonal object.
The polymesh must contains only triangle facets.
For remeshing by curvature method a curvature attribute must be defined.
Deletes curvature and normal attributes.
If the polymesh has a shell as a parametric substrate, it will be used for a polymesh vertices projection. \~
\param[in] params - \ru Параметры алгоритма.
\en The parameters. \~
\param[in,out] mesh - \ru Полигональная сетка.
\en The polymesh. \~
\return \ru Код результата операции, rt_Success в случае успеха.
\en Returns the operation result code, rt_Success if remeshing is successful. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/
// ---
MATH_FUNC( MbResultType ) Remesh( const MbRemeshParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Рассчитать кривизны полигональной сетки.
\en Calculates mesh curvatures. \~
\details \ru Рассчитать кривизны полигональной сетки.
Результатом операции является появление у полигональной сетки атрибута кривизн.
Если атрибут уже был, он будет удален и создан заново.
\en Calculates mesh curvatures.
Operation result is a curvature half edge attribute inserted into the original polymesh.
If mesh has one it will be removed before caclulation. \~
\param[in] params - \ru Параметры алгоритма.
\en The parameters. \~
\param[in,out] mesh - \ru Полигональная сетка.
\en Polymesh. \~
\return \ru Код результата операции, rt_Success если кривизны были рассчитаны.
\en Returns the operation result code, rt_Success if curvatures were calculated. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/
// ---
MATH_FUNC( MbResultType ) CalculatePolymeshCurvatures( const MbMeshCurvatureParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Драпировка оболочки тканью.
\en Drap a shell with fabric. \~
\details \ru Драпировка оболочки тканью.
\en Drap a shell with fabric.
\param[in] params - \ru Параметры алгоритма.
\en The parameters. \~
\param[out] results - \ru Результаты алгоритма.
\en Results. \~
\return \ru Код результата операции, rt_Success если драпировка получилась.
\en Returns the operation result code, rt_Success if drape is successful. \n
\ingroup Shell_Modeling
\warning \ru В разработке.
\en Under development. \~
*/
// ---
MATH_FUNC( MbResultType ) DrapeShell( const MbDrapeShellParams & params, MbDrapeShellResults & results );
//------------------------------------------------------------------------------
/** \brief \ru Объединить полигональный объект с другим полигональным объектом.
\en Merge a polygonal object with another polygonal object. \~
\param[in] meshFrom - \ru Полигональный объект, который копируется в meshTo.
\en A polygonal object, being copied into meshTo. \~
\param[in] params - \ru Параметры объединения.
\en Merging parameters. \~
\param[in-out] meshTo - \ru Полигональный объект, который аккумулирует результат объединения.
\en A polygonal object, accumulating merged objects. \~
\return \ru Код результата операции, rt_Success, если объекты успешно объединены.
\en Returns the operation result code, rt_Success if the objects are successfully merged. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) MergePolymeshes( const MbPolymesh & meshFrom, const MbMergePolymeshParams & params, MbPolymesh & meshTo );
//------------------------------------------------------------------------------
/** \brief \ru Сгладить полигональный объект по набору входных параметров сглаживания.
\en Smooth a polygonal object using a set of input smoothing parameters. \~
\param[in] params - \ru Параметры сглаживания.
\en Smoothing parameters. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object. \~
\return \ru Код результата операции, rt_Success если объект успешно сглажен.
\en Returns the operation result code, rt_Success if the object is successfully smoothed. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) SmoothPolymesh( const MbMeshSmoothingParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Спроецировать полилинию на полигональный объект.
\en Project a polyline on a polygonal object. \~
\details \ru Спроецировать полилинию на полигональный объект.
Если на некотором участке полилиния проецируется внутрь фасета, он разделяется на несколько фасетов.
При этом создаются новые рёбра полигонального объекта.
\en Project a polyline on a polygonal object.
In case of projecting a polyline's fragment inside a facet, it splits into new ones, so new edges are created. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object being projected on. \~
\param[in] params - \ru Параметры проецирования полилинии на полигональный объект.
\en Parameters for projecting a polyline on a polymesh. \~
\param[out] results - \ru Результат проецирования полилинии на полигональный объект.
\en Result of projecting a polyline on a polymesh. \~
\return \ru Код результата операции, rt_Success, если проекция успешно построена.
\en Returns the operation result code, rt_Success if a polyline is successfully projected. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) ProjectPolylineOnPolymesh( MbPolymesh & mesh, const MbPolylinePolymeshProjectParams & params, MbPolylinePolymeshProjectResults & results );
//------------------------------------------------------------------------------
/** \brief \ru Заполнить отверстие, заданное замкнутой кривой.
\en Fill a hole defined by a closed curve. \~
\details \ru Заполнить отверстие, заданное замкнутой кривой.
\en Fill a hole defined by a closed curve. \~
\param[in] params - \ru Параметры заполнения.
\en Filling parameters. \~
\param[out] patch - \ru Заплатка.
\en A patch. \~
\return \ru Код результата операции.
\en Returns the operation result code. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( MbResultType ) FillClosedCurve( const MbFillClosedCurveParams & params, MbPolymesh & patch );
//------------------------------------------------------------------------------
/** \brief \ru Заполнить отверстие полигонального объекта.
\en Fill a polygonal object hole. \~
\details \ru Заполнить отверстие полигонального объекта.
В результате операции в полигональном объекте могут появиться неактивные элементы.
Впоследствии их можно удалить вручную функцией DeleteInactive.
\en Fill a polygonal object hole.
Some inactive elements can appear during the operation.
They can be explicitly removed by the DeleteInactive function afterwards. \~
\param[in] params - \ru Параметры заполнения.
\en Filling parameters. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object. \~
\return \ru Код результата операции.
\en Returns the operation result code. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( MbResultType ) FillPolymeshHole( const MbFillPolymeshHoleParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Рассчитать нормали в вершинах полигонального объекта.
\en Calculate normal vectors at the vertices of a polygonal object. \~
\details \ru Рассчитать нормали в вершинах полигонального объекта.
В результате операции у полигонального объекта появится атрибут нормалей, если его не было,
и обновится, если был.
\en Calculate normal vectors at the vertices of a polygonal object.
As a result of the operation, the polygonal object will have a attribute with normals if it did not exist,
and will be updated if it did. \~
\param[in] params - \ru Параметры расчета нормалей.
\en Parameters for calculation of normal vectors. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object. \~
\return \ru Код результата операции.
\en Returns the operation result code. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( MbResultType ) CalculatePolymeshNormals( const MbPolymeshNormalsParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Обрезать полигональный объект набором кривых.
\en Cut a polygonal object by a set of curves. \~
\details \ru Обрезать полигональный объект набором кривых.
В результате операции в полигональном объекте могут появиться неактивные элементы.
Впоследствии их можно удалить вручную функцией DeleteInactive.
\en Cut a polygonal object by a set of curves.
Some inactive elements can appear during the operation.
They can be explicitly removed by the DeleteInactive function afterwards. \~
\param[in] params - \ru Параметры обрезки полигонального объекта набором кривых.
\en Parameters for cutting a polymesh with a set of curves. \~
\param[out] results - \ru Результаты обрезки полигонального объекта набором кривых.
\en Results of cutting a polymesh with a set of curves. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object being projected on. \~
\return \ru Код результата операции, rt_Success в случае успеха операции.
\en Returns the operation result code, rt_Success if an operation is successful. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) CutPolymeshByCurves( const MbCurvePolymeshProjectParams & params, MbPolymeshProjectResults & results, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Выполнить эквидистантное смещение цепочек ребер по поверхности полигонального объекта.
\en Offset polymesh edge paths. \~
\details \ru Выполнить эквидистантное смещение цепочек ребер по поверхности полигонального объекта.
В результате операции в полигональном объекте могут появиться неактивные элементы.
Впоследствии их можно удалить вручную функцией DeleteInactive.
\en Offset polymesh edge paths.
Some inactive elements can appear during the operation.
They can be explicitly removed by the DeleteInactive function afterwards. \~
\param[in] params - \ru Параметры оффсета цепочки ребер полигонального объекта.
\en Parameters for polymesh edge paths offsetting. \~
\param[out] results - \ru Результаты оффсета цепочки ребер полигонального объекта
\en Results of polymesh edge paths offsetting. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object. \~
\return \ru Код результата операции, rt_Success в случае успеха операции.
\en Returns the operation result code, rt_Success if an operation is successful. \n
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) OffsetPolymeshPath( const MbPathPolymeshOffsetParams & params, MbPolymeshProjectResults & results, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Булева операция на двух полигональных объектах.
\en Boolean operation for two polygonal objects. \~
\details \ru Булева операция на двух полигональных объектах.
Поддерживаются сетки, содержащие только треугольные фасеты.
Первый полигональный объект будет содержать сетку - результат операции.
Второй полигональный объект будет невалиден после операции.
\en Boolean operation for two polygonal objects. \~
Supports meshes with triangular facets only.
The first polygonal object will contain the polymesh with boolean operation result.
The second polygonal object will be invalid after operation.
\param[in] params - \ru Параметры операции.
\en The parameters. \~
\param[out] results - \ru Результаты операции.
\en The results. \~
\param[in-out] mesh0 - \ru Первый полигональный объект.
\en The first polygonal object. \~
\param[in-out] mesh1 - \ru Второй полигональный объект.
\en The second polygonal object. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\warning \ru В разработке.
\en Under development.\~
\ingroup Polygonal_Objects
*/ // ---
MATH_FUNC( MbResultType ) PolymeshBoolean( const MbPolymeshBooleanParams & params, MbPolymeshBooleanResults & results, MbPolymesh & mesh0, MbPolymesh & mesh1 );
#endif // __ACTION_POLYMESH_H