- C3d aggiornamento librerie ( 118012).
This commit is contained in:
SaraP
2024-10-08 16:14:52 +02:00
parent 05ac02d9d3
commit 0a27141ada
211 changed files with 3824 additions and 1523 deletions
+32
View File
@@ -16,6 +16,10 @@
#include <topology.h>
class MbCurveMinMaxCurvatureParams;
class MbCurveMinMaxCurvatureResults;
//------------------------------------------------------------------------------
/** \brief \ru Алгоритмы поиска экстремумов на поверхности.
\en Algorithms for finding extremes on the surface. \~
@@ -483,6 +487,8 @@ MATH_FUNC( double ) CurveOrientedCurvature( const MbCurve3D & curve,
Для неплоской кривой наибольшее и наименьшее значение всегда неотрицательны.
\en For a flat curve, the largest and smallest value may go into the negative region.
For a non-planar curve, the largest and smallest values are always non-negative. \~
\deprecated \ru Метод устарел, взамен использовать #CurveMinMaxCurvature с набором параметров #MbCurveMinMaxCurvatureParams.
\en The method is deprecated, instead use #CurveMinMaxCurvature with the parameter list #MbCurveMinMaxCurvatureParams. \~
\param[in] curve - \ru Исследуемая кривая.
\en Test curve. \~
\param[out] maxCurv - \ru Наибольшее значение кривизны.
@@ -505,6 +511,7 @@ MATH_FUNC( double ) CurveOrientedCurvature( const MbCurve3D & curve,
For each break two points are inserted, before and after. \~
\ingroup Algorithms_3D
*/
DEPRECATE_DECLARE_REPLACE( CurveMinMaxCurvature with MbCurveMinMaxCurvatureParams)
MATH_FUNC( void ) CurveMinMaxCurvature( const MbCurve3D & curve,
double & maxCurv,
double & maxParam,
@@ -784,4 +791,29 @@ MATH_FUNC( bool ) SurfacesJointMinMaxValues( const MbSurfacesJointAnalysisParams
MbSurfacesJointAnalysisResults & results );
//------------------------------------------------------------------------------
/** \brief \ru Найти точки на кривой, в которых кривизна принимает наибольшее и наименьшее значения.
\en Find the points on the curve at which the curvature takes the largest and smallest values. \~
\details \ru Для плоской кривой наибольшее и наименьшее значение может уходить в отрицательную область.
Для неплоской кривой наибольшее и наименьшее значение всегда неотрицательны. \n
Метод может быть использован для поиска экстремумов, точек разрыва и точек перегиба функции кривизны кривой,
а также для расчета потенциальной энергии кривой. Энергия вычисляется как интеграл от квадрата кривизны по длине кривой. \n
\en For a flat curve, the largest and smallest value may go into the negative region.
For a non-planar curve, the largest and smallest values are always non-negative. \n
The method can be used to find local minimum and maximum, break points and bending points of the curvature function and
to calculate the potential energy of the curve. The energy is calculated as the integral of the square of curvature along the length of the curve. \n \~
\param[in] curve - \ru Исследуемая кривая.
\en Test curve. \~
\param[in] params - \ru Параметры расчета особых точек кривизны кривой и вычисления потенциальной энергии кривой.
\en Parameters for calculation of special points of curvature and curve potential energy.\~
\param[out] results - \ru Результаты поиска особых точек кривизны и вычисления потенциальной энергии кривой.
\en Results of curvature special points search and calculation of curve potential energy.\~
\ingroup Algorithms_3D
\warning \ru В разработке.
\en Under development. \~
*/
MATH_FUNC( void ) CurveMinMaxCurvature( const MbCurve3D & curve,
const MbCurveMinMaxCurvatureParams & params,
MbCurveMinMaxCurvatureResults & results );
#endif // __ACTION_CURVATURE_ANALYSIS_H
+6 -521
View File
@@ -22,13 +22,13 @@
#include <vector>
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbMesh;
class MATH_CLASS MbSurface;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbFace;
class MbPlacement3D;
class MbMesh;
class MbSurface;
class MbSNameMaker;
class MbFace;
class MATH_CLASS MbCollection;
struct MATH_CLASS MbCurvature;
struct MbCurvature;
//------------------------------------------------------------------------------
@@ -130,521 +130,6 @@ public:
};
//------------------------------------------------------------------------------
/** \brief \ru Параметры вписывания поверхности.
\en Parameters of surface fitting. \~
\ingroup Polygonal_Objects
*/
// ---
class MATH_CLASS MbSurfaceFitToGridParameters {
private:
MbeSpaceType _surfaceType; ///< \ru Тип поверхности. \en A surface type.
double _tolerance; ///< \ru Точность распознавания. \en A fitting tolerance.
c3d::IndicesVector _indicies; ///< \ru Индексы полигонов сетки. \en Indicies of polygons.
MbeRejectOutliersType _typeReject; ///< \ru Способ отбраковки выбросов. \en Outliers rejection mode.
double _valueReject; ///< \ru Пороговое значения для отбраковки выбросов. \en Outliers rejection mode treshold value.
MbSurfaceFitConstraint _fitConstraint; ///< \ru Ограничение. \en Constraint.
size_t _pointsFittingMax; ///< \ru Максимальное количество точек для вписывания. \en Maximum count of fitting points.
bool _withRefinement; ///< \ru Уточнять ли поверхность по всем точкам. \en Refine the surface by all the points or not.
///< \ru Предельные значения параметров аналитических поверхностей. \en Thresholds for analytical surfaces parameters.
double _angleConeMin; ///< \ru Минимально возможный половинный угол конуса (градусы). \en Mininmum allowed cone half-angle ( degrees ).
double _angleConeMax; ///< \ru Максимально возможный половинный угол конуса (градусы). \en Maximum allowed cone half-angle( degrees ).
double _radiusAnalyticShapeMax; ///< \ru Максимально возможный радиальный размер аналитических поверхностей. \en Maximum allowed analytical shapes radial size.
///< \ru Параметры для вписывания нурбс поверхности. \en NURBs surface fitting parameters.
size_t _order; ///< \ru Порядок нурбс поверхности. \en NURBs surface order.
size_t _countCpMax; ///< \ru Максимально разрешенное количество контрольных точек. \en Maximum allowed control points count.
double _smoothCoef; ///< \ru Коэффициент сглаживания [1e-9 - 1e-3]. \en Smoothing coefficient [1e-9 - 1e-3].
private:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbSurfaceFitToGridParameters()
: _surfaceType ( st_Undefined )
, _tolerance ( c3d::DELTA_MIN )
, _indicies ( )
, _typeReject ( rot_NoReject )
, _valueReject ( 0. )
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
{}
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
double tolerance,
const c3d::IndicesVector & indicies )
: _surfaceType ( surfaceType )
, _tolerance ( tolerance )
, _indicies ( indicies )
, _typeReject ( rot_NoReject )
, _valueReject ( 0. )
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
{}
/// \ru Конструктор по параметрам. \en Constructor by parameters.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
double tolerance,
const c3d::IndicesVector & indicies,
MbeRejectOutliersType rejectType,
double rejectValue )
: _surfaceType ( surfaceType )
, _tolerance ( tolerance )
, _indicies ( indicies )
, _typeReject ( rejectType )
, _valueReject ( rejectValue )
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
{}
/// \ru Конструктор по параметрам для вписывания аналитических поверхностей. \en Constructor by parameters for analytic surfaces fitting.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
double tolerance,
const c3d::IndicesVector & indicies,
MbeRejectOutliersType rejectType,
double rejectValue,
double angleConeMin,
double angleConeMax,
double radiusAnalyticShapeMax )
: _surfaceType ( surfaceType )
, _tolerance ( tolerance )
, _indicies ( indicies )
, _typeReject ( rejectType )
, _valueReject ( rejectValue )
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( angleConeMin )
, _angleConeMax ( angleConeMax )
, _radiusAnalyticShapeMax( radiusAnalyticShapeMax )
{}
/// \ru Конструктор по параметрам для вписывания нурбс поверхности. \en Constructor by parameters for NURBs surface fitting.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
double tolerance,
const c3d::IndicesVector & indicies,
size_t order,
size_t countCpMax,
double smoothCoef )
: _surfaceType ( surfaceType )
, _tolerance ( tolerance )
, _indicies ( indicies )
, _typeReject ( rot_NoReject )
, _valueReject ( 0. )
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _order ( order )
, _countCpMax ( countCpMax )
, _smoothCoef ( smoothCoef )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
{}
/// \ru Выдать тип поверхности. \en Get surface type.
MbeSpaceType GetSurfaceType() const { return _surfaceType; }
/// \ru Выдать точность распознавания. \en Get fitting tolerance.
double GetTolerance() const { return _tolerance; }
/// \ru Выдать индексы полигонов. \en Get indicies of polygons.
const c3d::IndicesVector & GetIndicies() const { return _indicies; }
/// \ru Выдать метод отбраковки выбросов. \en Get outliers rejection mode.
MbeRejectOutliersType GetOutliersRejectionMode() const { return _typeReject; }
/// \ru Выдать пороговое значения для отбраковки выбросов. \en Get outliers rejection mode treshold value.
double GetOutliersRejectionValue() const { return _valueReject; }
/// \ru Выдать порядок нурбс поверхности. \en Get NURBs order.
size_t GetNurbsOrder() const { return _order; }
/// \ru Выдать максимально разрешенное количество контрольных точек. \en Get maximum allowed control points count.
size_t GetCountCpMax() const { return _countCpMax; }
/// \ru Выдать коэффициент сглаживания. \en Get smoothing coefficient.
double GetSmoothCoef() const { return _smoothCoef; }
/// \ru Выдать минимально возможный половинный угол конуса. \en Get mininmum allowed cone half-angle.
double GetAngleConeMin() const { return _angleConeMin; }
/// \ru Выдать максимально возможный половинный угол конуса. \en Get maximum allowed cone half-angle.
double GetAngleConeMax() const { return _angleConeMax; }
/// \ru Выдать максимально возможный радиальный размер аналитических поверхностей. \en Get maximum allowed analytical shapes radial size.
double GetRadiusAnalyticShapeMax() const { return _radiusAnalyticShapeMax; }
/// \ru Выдать ограничение. \en Get the constraint.
const MbSurfaceFitConstraint & GetFitConstraint() const { return _fitConstraint; }
/// \ru Выдать максимальное количество точек для вписывания. \en Get the maximum count of fitting points.
size_t GetPointsFittingMax() const { return _pointsFittingMax; }
/// \ru Выдать флаг уточнения поверхности по всем точкам. \en Get the flag of surface refinement by all the points.
bool GetWithRefinement() const { return _withRefinement; }
/// \ru Установить предельные значения параметров аналитических поверхностей. \en Set thresholds for analytical surfaces parameters.
void SetAnalyticBounds( double angleConeMin, double angleConeMax, double radiusAnalyticShapeMax )
{
_angleConeMin = angleConeMin;
_angleConeMax = angleConeMax;
_radiusAnalyticShapeMax = radiusAnalyticShapeMax;
}
/// \ru Установить параметры для вписывания нурбс поверхности. \en Set NURBs surface fitting parameters.
void SetNurbsFitParams( size_t order, size_t countCpMax, double smoothCoef )
{
_order = order;
_countCpMax = countCpMax;
_smoothCoef = smoothCoef;
}
/** \brief \ru Ограничить ось примитива.
\en Add an axis constraint. \~
\details \ru Ограничить ось цилиндра, конуса или тора, а также нормаль плоскости.
По умолчанию ось примитива или нормаль плоскости будет коллинеарна направлению direction.
Дополнительно можно задать желаемый угол angle между осью примитива или нормалью плоскости и заданным направлением из промежутка [0; П/2].
Для построения плоскости с нормалью, которая перпендикулярна заданному направлению, необходимо задать угол П/2.
Функция сбрасывает выставленные ранее ограничения на ось.
\en Add an axis constraint to a cylinder, cone, torus or plane.
The axis of a primitive or plane normal will be collinear to a given direction by default.
Besides there may be given a desired angle between the axis of a primitive or plane normal and a given direction from [0; П/2].
Fitting a plane with a normal, which is perpendicular to a given direction, implies an angle П/2.
The function resets all previous axis constraints. \~
\param[in] direction - \ru Эталонное направление.
\en Reference direction. \~
\param[in] angle - \ru Угол между осью примитива и заданным направлением.
\en Angle between the axis of a primitive and a given direction. \~
\return \ru Возвращает true, если задан корректный угол, и false - иначе.
\en Returns true, if an angle is correct, or false otherwise. \~
\ingroup Polygonal_Objects
*/
bool AddAxisConstraint( const MbVector3D & direction, double angle = 0. )
{
return _fitConstraint.AddAxisConstraint( direction, angle );
}
/** \brief \ru Зафиксировать ось примитива.
\en Add a coaxial constraint. \~
\details \ru Зафиксировать ось цилиндра, конуса, тора или сферы.
Вписывается примитив с заданной осью.
Если вписывается сфера, ее центр лежит на заданной оси.
Функция сбрасывает выставленные ранее ограничения на ось.
\en Add a coaxial constraint to a cylinder, cone, torus or sphere.
A primitive will be fit with a given axis.
If a sphere is fit, its center lies on a given axis.
The function resets all previous axis constraints. \~
\param[in] axis - \ru Ось.
\en Axis. \~
\ingroup Polygonal_Objects
*/
void AddCoaxialConstraint( const MbAxis3D & axis )
{
return _fitConstraint.AddCoaxialConstraint( axis );
}
/** \brief \ru Зафиксировать радиус цилиндра.
\en Fix cylinder radius. \~
\details \ru Зафиксировать радиус цилиндра.
Радиус должен быть положительным.
\en Fix cylinder radius.
The value has to be positive. \~
\param[in] radius - \ru Радиус цилиндра.
\en Cylinder radius. \~
\return \ru Возвращает true, если задан корректный радиус, и false - иначе.
\en Returns true, if a radius is correct, or false otherwise. \~
\ingroup Polygonal_Objects
*/
bool AddCylinderRadiusConstraint( double radius )
{
return _fitConstraint.AddCylinderRadiusConstraint( radius );
}
/** \brief \ru Зафиксировать радиус сферы.
\en Fix sphere radius. \~
\details \ru Зафиксировать радиус сферы.
Радиус должен быть положительным.
\en Fix sphere radius.
The value has to be positive. \~
\param[in] radius - \ru Радиус сферы.
\en Sphere radius. \~
\return \ru Возвращает true, если задан корректный радиус, и false - иначе.
\en Returns true, if a radius is correct, or false otherwise. \~
\ingroup Polygonal_Objects
*/
bool AddSphereRadiusConstraint( double radius )
{
return _fitConstraint.AddSphereRadiusConstraint( radius );
}
/** \brief \ru Зафиксировать угол конуса.
\en Fix cone angle. \~
\details \ru Зафиксировать угол конуса.
Угол должен быть из промежутка (0; П/2).
\en Fix cone angle.
The angle has to be from (0; П/2). \~
\param[in] angle - \ru Угол конуса.
\en Cone angle. \~
\return \ru Возвращает true, если задан корректный угол, и false - иначе.
\en Returns true, if an angle is correct, or false otherwise. \~
\ingroup Polygonal_Objects
*/
bool AddConeAngleConstraint( double angle )
{
return _fitConstraint.AddConeAngleConstraint( angle );
}
/** \brief \ru Зафиксировать радиусы тора.
\en Fix torus radii. \~
\details \ru Зафиксировать радиусы тора.
Можно зафиксировать большой и малый радиусы тора (только один их них или сразу оба).
Малый радиус должен быть положительным (=0 - значение не зафиксировано).
Большой радиус может быть отрицательным для торов типа "лимон" (=0 - значение не зафиксировано).
Большой радиус (центров) должен быть больше малого радиуса (трубки), взятого с обратным знаком: majorRadius>minorRadius.
\en Fix torus radii.
There may be fixed the major radius (_size1) or the minor radius (_size2) of a torus (one or both of them).
The minor radius has to be positive (=0 - value is not fixed).
The major radius may be negative if a torus is of "lemon" type (=0 - value is not fixed).
The major radius (of centers) has to be greater than the opposite of the minor radius (of a tube): majorRadius>minorRadius. \~
\param[in] majorRadius - \ru Большой радиус тора.
\en Major torus radius. \~
\param[in] minorRadius - \ru Малый радиус тора.
\en Minor torus radius. \~
\return \ru Возвращает true, если заданы корректные радиусы, и false - иначе.
\en Returns true, if radii are correct, or false otherwise. \~
\ingroup Polygonal_Objects
*/
bool AddTorusRadiiConstraint( double majorRadius, double minorRadius )
{
return _fitConstraint.AddTorusRadiiConstraint( majorRadius, minorRadius );
}
/** \brief \ru Установить ограничение типа XYW.
\en Set the XYW-constraint. \~
\details \ru Установить ограничение типа XYW.
Ограничение типа XYW допускает только параллельный перенос вдоль осей OX и OY и поворот вокруг оси OZ заданной системы координат.
Для плоскости, цилиндра, конуса или тора должен быть зафиксирован угол theta между осью объекта и осью OZ заданной СК.
Угол theta должен принадлежать отрезку [0; П/2].
Для сферы должна быть зафиксирована координата z ее центра в заданной СК.
Для тора должна быть зафиксирована координата z центра его направляющей окружности в заданной СК.
При необходимости можно зафиксировать размерные параметры объекта.
Функция сбрасывает выставленные ранее ограничения (например, добавленные с помощью методов "Add*Constraint").
\en Set the XYW-constraint.
Translation along the OX и OY axes and rotation about the OZ axis of a local coordinate system are only allowed.
For a plane, a cylinder, a cone or a torus there has to be fixed the angle theta between an object's axis and the OZ axis of a given coordinate system.
The angle theta has to belong to [0; П/2].
For a sphere there has to be fixed the Z coordinate of its center.
For a torus there has to be fixed the Z coordinate of its directrix circle.
There may be fixed some dimensional parameters of an object if necessary.
The function resets all previous constraints (for example, having been set by "Add*Constraint"). \~
\param[in] typeSurface - \ru Тип поверхности.
\en Surface type. \~
\param[in] typeDim - \ru Тип размерного ограничения.
\en Dimensional constraint type. \~
\param[in] fixedValues - \ru Фиксированные значения параметров поверхности.
\en Structure with fixed values of surface parameters. \~
\param[in] place - \ru Локальная система координат.
\en Local coordinate system. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
*/
MbResultType SetFitConstraintXYW( MbeSpaceType typeSurface,
MbeDimensionalConstraintType typeDim,
const MbConstraintFixedValues & fixedValues,
const MbPlacement3D & place )
{
return _fitConstraint.InitializeXYW( typeSurface, typeDim, fixedValues, place );
}
/** \brief \ru Установить ограничение типа Z.
\en Set the Z-constraint. \~
\details \ru Установить ограничение типа Z.
Ограничение типа Z допускает только сдвиг вдоль оси OZ заданной системы координат.
Для плоскости, цилиндра, конуса или тора должны быть зафиксированы:
- зенитный угол theta: угол между осью объекта и осью OZ заданной СК, должен принадлежать отрезку [0; П/2],
- азимутальный угол phi: угол между проекцией оси объекта на плоскость OXY и осью OX заданной СК,
должен принадлежать промежутку [0; 2П).
Для цилиндра, конуса или тора должны быть зафиксированы координаты x и y некоторой точки на оси объекта.
Для сферы должны быть зафиксированы координаты x и y ее центра в заданной СК.
При необходимости можно зафиксировать размерные параметры объекта.
Функция сбрасывает выставленные ранее ограничения (например, добавленные с помощью методов "Add*Constraint").
\en Set the Z-constraint.
Translation along the OZ axis of a local coordinate system is only allowed.
For a plane, a cylinder, a cone or a torus there have to be fixed:
- the zenith angle theta: the angle between an object's axis and the OZ axis of a given CS, has to belong to [0; П/2],
- the azimuthal angle phi: the angle between the projection of an object's axis onto the OXY plane
and the OX axis of a given CS, has to belong to [0; 2П).
For a cylinder, a cone or a torus there have to be fixed the X and Y coordinates of a point of an object's axis.
For a sphere there have to be fixed the X and Y coordinates of its center.
There may be fixed some dimensional parameters of an object if necessary.
The function resets all previous constraints (for example, having been set by "Add*Constraint"). \~
\param[in] typeSurface - \ru Тип поверхности.
\en Surface type. \~
\param[in] typeDim - \ru Тип размерного ограничения.
\en Dimensional constraint type. \~
\param[in] fixedValues - \ru Фиксированные значения параметров поверхности.
\en Structure with fixed values of surface parameters. \~
\param[in] place - \ru Локальная система координат.
\en Local coordinate system. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
*/
MbResultType SetFitConstraintZ( MbeSpaceType typeSurface,
MbeDimensionalConstraintType typeDim,
const MbConstraintFixedValues & fixedValues,
const MbPlacement3D & place )
{
return _fitConstraint.InitializeZ( typeSurface, typeDim, fixedValues, place );
}
/** \brief \ru Установить ограничение типа XYZ.
\en Set the XYZ-constraint. \~
\details \ru Установить ограничение типа XYZ.
Ограничение типа XYZ допускает только параллельный перенос (запрещены повороты вокруг координатных осей заданной системы координат).
Для плоскости, цилиндра, конуса или тора должны быть зафиксированы:
- зенитный угол theta: угол между осью объекта и осью OZ заданной СК, должен принадлежать отрезку [0; П/2],
- азимутальный угол phi: угол между проекцией оси объекта на плоскость OXY и осью OX заданной СК,
должен принадлежать промежутку [0; 2П).
При необходимости можно зафиксировать размерные параметры объекта.
Функция сбрасывает выставленные ранее ограничения (например, добавленные с помощью методов "Add*Constraint").
\en Set the XYZ-constraint.
Translation is only allowed (any rotation is forbidden).
For a plane, a cylinder, a cone or a torus there have to be fixed:
- the zenith angle theta: the angle between an object's axis and the OZ axis of a given CS, has to belong to [0; П/2],
- the azimuthal angle phi: the angle between the projection of an object's axis onto the OXY plane
and the OX axis of a given CS, has to belong to [0; 2П).
There may be fixed some dimensional parameters of an object if necessary.
The function resets all previous constraints (for example, having been set by "Add*Constraint"). \~
\param[in] typeSurface - \ru Тип поверхности.
\en Surface type. \~
\param[in] typeDim - \ru Тип размерного ограничения.
\en Dimensional constraint type. \~
\param[in] fixedValues - \ru Фиксированные значения параметров поверхности.
\en Structure with fixed values of surface parameters. \~
\param[in] place - \ru Локальная система координат.
\en Local coordinate system. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
*/
MbResultType SetFitConstraintXYZ( MbeSpaceType typeSurface,
MbeDimensionalConstraintType typeDim,
const MbConstraintFixedValues & fixedValues,
const MbPlacement3D & place )
{
return _fitConstraint.InitializeXYZ( typeSurface, typeDim, fixedValues, place );
}
/** \brief \ru Установить ограничение типа ZW.
\en Set the ZW-constraint. \~
\details \ru Установить ограничение типа ZW.
Ограничение типа ZW допускает только сдвиг вдоль оси OZ и поворот вокруг оси OZ заданной системы координат.
Для плоскости, цилиндра, конуса или тора должны быть зафиксированы:
- зенитный угол theta: угол между осью объекта и осью OZ заданной СК, должен принадлежать отрезку [0; П/2],
- начальный азимутальный угол phi: угол между проекцией оси объекта в начальной позиции на плоскость OXY и осью OX заданной СК,
должен принадлежать промежутку [0; 2П),
- расстояние dist от оси OZ заданной СК до оси объекта.
Для сферы должно быть зафиксировано расстояние dist от ее центра до оси OZ заданной СК.
При необходимости можно зафиксировать размерные параметры объекта.
Функция сбрасывает выставленные ранее ограничения (например, добавленные с помощью методов "Add*Constraint").
\en Set the ZW-constraint.
Translation along the OZ axis and rotation about the OZ axis of a local coordinate system are only allowed.
For a plane, a cylinder, a cone or a torus there have to be fixed:
- the zenith angle theta: the angle between an object's axis and the OZ axis of a given CS, has to belong to [0; П/2],
- the initial azimuthal angle phi: the angle between the projection of an object's axis in the initial position onto the OXY plane
and the OX axis of a given CS, has to belong to [0; 2П),
- the distance between an object's axis the OZ axis of a given CS.
For a sphere there has to be fixed the distance between its center and the OZ axis of a given CS.
There may be fixed some dimensional parameters of an object if necessary.
The function resets all previous constraints (for example, having been set by "Add*Constraint"). \~
\param[in] typeSurface - \ru Тип поверхности.
\en Surface type. \~
\param[in] typeDim - \ru Тип размерного ограничения.
\en Dimensional constraint type. \~
\param[in] fixedValues - \ru Фиксированные значения параметров поверхности.
\en Structure with fixed values of surface parameters. \~
\param[in] place - \ru Локальная система координат.
\en Local coordinate system. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
*/
MbResultType SetFitConstraintZW( MbeSpaceType typeSurface,
MbeDimensionalConstraintType typeDim,
const MbConstraintFixedValues & fixedValues,
const MbPlacement3D & place )
{
return _fitConstraint.InitializeZW( typeSurface, typeDim, fixedValues, place );
}
/// \ru Установить максимальное количество точек для вписывания. \en Set the maximum count of fitting points.
void SetPointsFittingMax( size_t value ) { _pointsFittingMax = value; }
/// \ru Установить флаг уточнения поверхности по всем точкам. \en Set the flag of surface refinement by all the points.
void SetWithRefinement( bool value ) { _withRefinement = value; }
OBVIOUS_PRIVATE_COPY( MbSurfaceFitToGridParameters )
};
//------------------------------------------------------------------------------
/** \brief \ru Результат вписывания поверхности.
\en Parameters of surface fitting. \~
\ingroup Polygonal_Objects
*/
// ---
class MATH_CLASS MbSurfaceFitToGridResults {
private:
c3d::SurfaceSPtr _surface; ///< \ru Поверхность. \en A surface.
double _devMax; ///< \ru Максимальное получившееся отклонение. \en A maximal deviation.
double _devMean; ///< \ru Среднее получившееся отклонение. \en A mean deviation.
double _rmsd; ///< \ru Среднее квадратическое отклонение. \en A root-mean-square deviation.
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbSurfaceFitToGridResults()
: _surface( nullptr )
, _devMax ( 0.0 )
, _devMean( 0.0 )
, _rmsd ( 0.0 )
{}
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSurfaceFitToGridResults( MbSurface * surface, double tolerance )
: _surface( surface )
, _devMax ( tolerance )
, _devMean( 0.0 )
, _rmsd ( 0.0 )
{}
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSurfaceFitToGridResults( MbSurface * surface, double devMax, double devMean, double rmsd )
: _surface( surface )
, _devMax ( devMax )
, _devMean( devMean )
, _rmsd ( rmsd )
{}
/// \ru Инициализировать данные. \en Initialize data.
void Init( MbSurface * surface, double tolerance ) {
_surface = surface;
_devMax = tolerance;
_devMean = 0.;
_rmsd = 0.;
}
/// \ru Инициализировать данные. \en Initialize data.
void Init( MbSurface * surface, double devMax, double devMean, double rmsd ) {
_surface = surface;
_devMax = devMax;
_devMean = devMean;
_rmsd = rmsd;
}
/// \ru Выдать поверхность. \en Get surface.
c3d::SurfaceSPtr GetSurface() const { return _surface; }
/// \ru Выдать максимальное отклонение. \en Get maximal deviation.
double GetTolerance() const { return _devMax; }
/// \ru Выдать среднее отклонение. \en Get mean deviation.
double GetMeanDeviation() const { return _devMean; }
/// \ru Выдать среднее квадратическое отклонение. \en Get root-mean-square deviation.
double GetRmsd() const { return _rmsd; }
OBVIOUS_PRIVATE_COPY( MbSurfaceFitToGridResults )
};
//------------------------------------------------------------------------------
/** \brief \ru Класс для создания оболочки в граничном представлении по полигональной сетке.
\en Class for creating a BRep shell by polygonal mesh. \~
+39 -12
View File
@@ -16,20 +16,18 @@
#include <templ_s_array.h>
#include <mb_cart_point.h>
#include <plane_item.h>
#include <mb_operation_result.h>
#include <vector>
#include <op_curve_parameter.h>
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbCurve;
class MATH_CLASS MbContour;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbFace;
class MATH_CLASS MbCurveFitParameters;
class MATH_CLASS MbCurveFitResults;
class MbPlacement3D;
class MbCurve;
class MbContour;
class MbCurve3D;
class MbSurface;
class MbSNameMaker;
class MbFace;
class MbCurveFitParameters;
class MbCurveFitResults;
//------------------------------------------------------------------------------
/** \brief \ru Перечисление способов создания эллипса (окружности) или их дуг в двумерном пространстве.
@@ -810,6 +808,35 @@ MATH_FUNC( MbContour * ) DeleteDegenerateSegments( const MbContour & cntr,
MbSNameMaker * names = nullptr );
//------------------------------------------------------------------------------
/** \brief \ru Удалить самопересечения из контура.
\en Remove self-intersections from contour. \~
\details \ru Если контур самопересекается, удаляет части контура, чтобы в результате не осталось самопересечений. \n
\en If the contour self-intersects, removes parts of the contour so that the result is free of self-intersections. \n \~
\param[in, out] contour - \ru Исходный контур для изменения.
\en The initial contour to be modified. \~
\param[in] params - \ru Параметры операции.
\en Operation parameters. \~
\param[out] parts - \ru Набор несамопересекающихся замкнутых контуров, оставшихся после удаления самопересечений.
\en The set of non-self-intersecting closed contours remaining after removing self-intersections. \~
\return \ru Возвращает код результата операции:
MbResultType::rt_NoIntersect, если самопересечений не найдено;
MbResultType::rt_Success, если самопересечения успешно удалены;
MbResultType::rt_Error в случае ошибки выполнения операции.
\en Returns operation result code:
MbResultType::rt_NoIntersect if no self-intersections were found;
MbResultType::rt_Success if self-intersections were successfully removed;
MbResultType::rt_Error if the operation failed. \~
\ingroup Curve_Modeling
\warning \ru В разработке.
\en Under development. \~
*/
// ---
MATH_FUNC( MbResultType ) RemoveSelfIntersections( MbContour & contour,
const MbRemoveSelfIntParams & params,
std::vector<SPtr<MbContour>> * parts = nullptr );
//------------------------------------------------------------------------------
/** \brief \ru Установить параметризацию кривой пропорционально длине кривой.
\en Set curve parametrization proportional to the curve length. \~
+21 -21
View File
@@ -27,24 +27,24 @@
#include <vector>
class MATH_CLASS MbCurve;
class MATH_CLASS MbContour3D;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbFace;
class MATH_CLASS MbSurface;
class MATH_CLASS MbItem;
class MATH_CLASS MbName;
class MATH_CLASS MbSweptData;
class MATH_CLASS MbContourChamferParams;
struct MATH_CLASS MbNurbsParameters;
class MATH_CLASS MbNurbsCopyCurveResult;
class MATH_CLASS MbCurvesWrappingParams;
class MATH_CLASS MbCurvesWrappingResults;
class MATH_CLASS MbCurveFitParameters3D;
class MATH_CLASS MbCurveFitResults3D;
class MATH_CLASS MbCurveExtensionParameters3D;
class MbCurve;
class MbContour3D;
class MbWireFrame;
class MbFace;
class MbSurface;
class MbItem;
class MbName;
class MbSweptData;
class MbContourChamferParams;
struct MbNurbsParameters;
class MbNurbsCopyCurveResult;
class MbCurvesWrappingParams;
class MbCurvesWrappingResults;
class MbCurveFitParameters3D;
class MbCurveFitResults3D;
class MbCurveExtensionParameters3D;
struct MATH_CLASS EvolutionValues;
struct EvolutionValues;
//------------------------------------------------------------------------------
/** \brief \ru Создать прямую.
@@ -1165,15 +1165,15 @@ MATH_FUNC( MbResultType ) CreateFairBSplineCurveOnBasePolylineOfHermiteGDInflex(
// ---
//------------------------------------------------------------------------------
/** \brief \ru Создать плавную B-сплайновую кривую (со сглаживанием и репараметризацией) на зашумленных данных.
\en Create a fair B-spline curve with smoothing and reparametrization on noisy data. \~
\en Create a fair B-spline curve with smoothing and reparameterization on noisy data. \~
\details \ru Создать плавную B-сплайновую кривую [со сглаживанием и репараметризацией] на зашумленных данных
(опорной ломаной, ГО Эрмита).
\en Create a fair B-spline curve with smoothing and reparametrization on noisy data (base polyline of Hermite GD). \n
\attention \ru Экспериментальный класс. \en Experimental class. \~
\param[in] polyline - \ru Исходная ломаная.
\en An initial polyline. \~
\param[in] inType - \ru Тип данных построения кривой.
\en The type of the curve construction data. \~
\param[in] plnNoisy - \ru Зашумленная ломаная (может быть nullptr).
\en The noisy polyline (can be nullptr). \~
\param[in] data - \ru Данные построения кривой.
\en The curve construction data. \~
\param[out] resCurve - \ru Сплайновая кривая.
@@ -1184,7 +1184,7 @@ MATH_FUNC( MbResultType ) CreateFairBSplineCurveOnBasePolylineOfHermiteGDInflex(
*/
// ---
MATH_FUNC( MbResultType ) CreateFairBSplineCurveOnNoisyData( MbCurve3D* pllne,
int inType, // 1 - простая ломаная, 2 - ГО Эрмита
MbCurve3D* plnNoisy,
MbFairCurveData & data,
MbCurve3D *& resCurve );
+29 -19
View File
@@ -16,25 +16,25 @@
#include <op_direct_mod_parameter.h>
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFace;
class MATH_CLASS MbFaceShell;
class MATH_CLASS MbModifiedSolidParams;
class MATH_CLASS MbModifiedSolidResults;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbSolid;
class MATH_CLASS MbSplineSurface;
class MATH_CLASS MbSurface;
class MATH_CLASS MbSurfaceIntersectionCurve;
class MbCartPoint3D;
class MbCurve;
class MbCurve3D;
class MbCurveEdge;
class MbFace;
class MbFaceShell;
class MbModifiedSolidParams;
class MbModifiedSolidResults;
class MbPlacement3D;
class MbSNameMaker;
class MbSolid;
class MbSplineSurface;
class MbSurface;
class MbSurfaceIntersectionCurve;
struct MATH_CLASS ModifyValues;
struct MATH_CLASS NurbsBlockValues;
struct MATH_CLASS NurbsValues;
struct MATH_CLASS TransformValues;
struct ModifyValues;
struct NurbsBlockValues;
struct NurbsValues;
struct TransformValues;
template <class Type> class Array2;
template <class Type> class SArray;
@@ -198,7 +198,17 @@ MATH_FUNC (MbResultType) CollectFacesForModification( MbFaceShell * shell,
\param[out] results - \ru Результаты модификации.
\en Results of the modifcation. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
Возможные коды ошибок:
Для типа dmm_ReplaceGroupFaces:
rt_StitchShellsError -- Невозможно сшить итоговоую оболочку.
rt_CuttingError -- Невозможно усечь оболочку новой группой граней.
rt_FacesGroupsOverlapError -- Ошибка в параметрах. Среди заменяющих граней есть заменяемые, массивы не должны пересекаться.
\en Returns operation result code.
Possible error codes:
For the type dmm_ReplaceGroupFaces:
rt_StitchShellsError -- Impossible to stitch the final shell.
rt_CuttingError -- Impossible to cut the shell with the new faces group
rt_FacesGroupsOverlapError -- Parameter error. There are replacement faces among the replaced faces. Those arrays must not overlap. \~
\ingroup Direct_Modeling
*/
// ---
+58 -4
View File
@@ -16,10 +16,11 @@
#include <op_swept_parameter.h>
#include <mb_operation_result.h>
class MATH_CLASS MbPlanarGrid;
class MATH_CLASS MbGrid;
struct MATH_CLASS MbShellsIntersectionData;
class IProgressIndicator;
class MbPlanarGrid;
class MbGrid;
struct MbShellsIntersectionData;
class MbShellProjectionParams;
class IProgressIndicator;
//------------------------------------------------------------------------------
/** \brief \ru Проверить оболочку на предмет разделения на отдельные части.
@@ -1341,4 +1342,57 @@ SPtr<Item> GetTransformedItem( SPtr<Item> & item, const MbMatrix3D & matr, MbReg
}
return resItem;
}
//------------------------------------------------------------------------------
/** \brief \ru Класс для проецирования на оболочку.
\en Class for projection onto shell. \~
\details \ru Класс для проецирования на оболочку. \n
\en Class for projection onto shell. \n \~
\ingroup Algorithms_3D
\warning \ru В разработке.
\en Under development. \~
*/
// ---
class MATH_CLASS MbFaceShellProjector
{
protected:
MbFaceShellProjector() {}
public:
/// \ru Деструктор. \en Destructor.
virtual ~MbFaceShellProjector() {}
/** \brief \ru Создать экземпляр класса по оболочке и параметрам.
\en Create class instance by shell and parameters. \~
\details \ru Создать экземпляр класса по оболочке и параметрам. Пользователь должен сам удалить объект.
\en Create class instance by shell and parameters. User must delete created object. \~
\param[in] shell - \ru Оболочка. \n
\en Shell. \~
\param[in] params - \ru Параметры для многократного проецирования точек на оболочку. \n
\en Parameters for multiple projection of points onto the shell. \~
\return \ru Возвращает указатель на созданный объект.
\en Returns pointer to created object. \~
*/
static MbFaceShellProjector * Create( const MbFaceShell & shell, const MbShellProjectionParams & params );
/** \brief \ru Найти ближайшую проекцию точки на оболочку.
\en Find nearest point projection to the shell. \~
\details \ru Найти номер грани и параметры её поверхности для ближайшей проекции точки на оболочку. \n
\en Find face index and surface parameters for the nearest point projection to the shell. \n \~
\param[in] p - \ru Проецируемая точка.
\en A point to project. \~
\param[out] faceIndex - \ru Номер грани в оболочке для ближайшей проекции.
\en The index of nearest face of the shell. \~
\param[out] u - \ru Первый параметр поверхности грани проекций для ближайшей проекции точки на оболочку.
\en The first parameter of the face surface for the nearest projection. \~
\param[out] v - \ru Второй параметр поверхности грани проекций для ближайшей проекции точки на оболочку.
\en The second parameter of the face surface for the nearest projection. \~
\return \ru Удалось ли определить положение точки.
\en Whether the point projection was successfully defined. \~
*/
virtual bool NearPointProjection( const MbCartPoint3D & point, size_t & faceIndex, double & u, double & v ) const = 0;
OBVIOUS_PRIVATE_COPY( MbFaceShellProjector );
};
#endif // __ACTION_GENERAL_H
+41 -25
View File
@@ -20,25 +20,26 @@
#include <curve3d.h>
#include <vector>
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbMesh;
class MATH_CLASS MbSurface;
class MATH_CLASS MbSolid;
class MATH_CLASS MbPlaneItem;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbFace;
class MATH_CLASS MbCollection;
class MATH_CLASS MbMeshSimplificationParams;
class MATH_CLASS MbConvexHullParams;
struct MATH_CLASS MbConvexHullResults;
class MATH_CLASS MbConvexHullParams3D;
class MATH_CLASS MbMeshToInstanceParams;
class MATH_CLASS MbMeshToInstanceResults;
class MATH_CLASS MbOrientedBox;
class MATH_CLASS MbMeshUnwrapParams;
class MATH_CLASS MbMeshUnwrapResult;
class MATH_CLASS MbObjectAlignmentParams;
class MATH_CLASS MbObjectAlignmentResult;
class MbPlacement3D;
class MbMesh;
class MbSurface;
class MbSolid;
class MbPlaneItem;
class MbSNameMaker;
class MbFace;
class MbCollection;
class MbMeshSimplificationParams;
class MbConvexHullParams;
struct MbConvexHullResults;
class MbConvexHullParams3D;
class MbRepairInconsistentMeshParams;
class MbMeshToInstanceParams;
class MbMeshToInstanceResults;
class MbOrientedBox;
class MbMeshUnwrapParams;
class MbMeshUnwrapResult;
class MbObjectAlignmentParams;
class MbObjectAlignmentResult;
//------------------------------------------------------------------------------
/** \brief \ru Данные диагностики полигонального объекта.
@@ -627,15 +628,31 @@ MATH_FUNC(MbOrientedBox) CalculateBoundingBox( const MbMesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Исправить несовместную ориентацию полигонов сетки по отношению друг к другу.
\en Repair inconsistent orientation of mesh polygons with respect to each other. \~
\param[out] result - \ru Полигональный объект.
\en The polygonal object. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
\deprecated
*/ // ---
DEPRECATE_DECLARE_REPLACE( RepairInconsistentMesh with parameter )
MATH_FUNC (MbResultType) RepairInconsistentMesh( MbMesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Исправить несовместную ориентацию полигонов сетки по отношению друг к другу.
\en Repair inconsistent orientation of mesh polygons with respect to each other. \~
\param[in] params - \ru Параметры операции.
\en Parameters of the operation \~
\param[in] mesh - \ru Полигональный объект.
\en The polygonal object. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC (MbResultType) RepairInconsistentMesh( MbMesh & mesh );
MATH_FUNC (MbResultType) RepairInconsistentMesh( const MbRepairInconsistentMeshParams & params,
MbMesh & mesh );
//------------------------------------------------------------------------------
@@ -777,8 +794,7 @@ MATH_FUNC( MbResultType ) AlignObjects( const MbItem & fixed,
\details \ru Класс для драпировки оболочки тканью. \n
\en Class for shell draping. \n \~
\ingroup Polygonal_Objects
\warning \ru В разработке.
\en Under development. \~
\deprecated
*/
// ---
class MATH_CLASS MbDrapMaker
@@ -798,6 +814,7 @@ public:
\return \ru Возвращает указатель на созданный объект.
\en Returns pointer to created object. \~
*/
DEPRECATE_DECLARE_REPLACE( DrapeShell )
static MbDrapMaker * Create( const MbMeshUnwrapParams & params, double cellSize );
/// \ru Деструктор. \en Destructor.
virtual ~MbDrapMaker() {}
@@ -861,5 +878,4 @@ public:
OBVIOUS_PRIVATE_COPY( MbDrapMaker );
};
#endif // __ACTION_MESH_H
+7 -7
View File
@@ -21,13 +21,13 @@
#include <mb_operation_result.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFace;
class MATH_CLASS MbSolid;
class MATH_CLASS MbSNameMaker;
class MbCurve;
class MbCurve3D;
class MbSurface;
class MbCurveEdge;
class MbFace;
class MbSolid;
class MbSNameMaker;
//------------------------------------------------------------------------------
+6 -6
View File
@@ -22,12 +22,12 @@
#include <mb_variables.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbLineSegment;
class MATH_CLASS MbLine3D;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbFaceShell;
class MbCurve;
class MbLineSegment;
class MbLine3D;
class MbCurve3D;
class MbSurface;
class MbFaceShell;
//------------------------------------------------------------------------------
+22 -3
View File
@@ -17,10 +17,12 @@
#include <mb_operation_result.h>
#include <curve3d.h>
class MATH_CLASS MbPolymesh;
class MATH_CLASS MbPolymeshTopo;
class MATH_CLASS MbHalfedgeBoundaryCriterionBase;
class MbPolymesh;
class MbPolymeshTopo;
class MbHalfedgeBoundaryCriterionBase;
class MATH_CLASS MbMeshCurvatureParams;
class MATH_CLASS MbDrapeShellParams;
class MATH_CLASS MbDrapeShellResults;
//------------------------------------------------------------------------------
@@ -228,4 +230,21 @@ MATH_FUNC( bool ) IsPolymeshTriangulation( const MbPolymesh & mesh );
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 );
#endif // __ACTION_POLYMESH_H
+9 -9
View File
@@ -37,14 +37,14 @@
#include <mb_operation_result.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFace;
class MATH_CLASS MbSolid;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbPatchCurve;
class MbCurve;
class MbCurve3D;
class MbSurface;
class MbCurveEdge;
class MbFace;
class MbSolid;
class MbSNameMaker;
class MbPatchCurve;
class IProgressIndicator;
@@ -468,7 +468,7 @@ MATH_FUNC (MbCurve3D *) CreateJoinedCurve( const RPArray<MbCurveEdge> & edges,
\ingroup Shell_Modeling
*/
// ---
MATH_FUNC (MbResultType) FacesFillet( const MbFilletData & params,
MATH_FUNC (MbResultType) FacesFillet( const MbSectionData & params,
c3d::SolidSPtr & result );
+13 -13
View File
@@ -41,20 +41,20 @@
#include <op_duplication_parameter.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFace;
class MATH_CLASS MbSolid;
class MATH_CLASS MbItem;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbPartSolidIndices;
class MATH_CLASS MbSpine;
class MATH_CLASS MbMesh;
class MATH_CLASS MbGrid;
class MbCurve;
class MbCurve3D;
class MbSurface;
class MbCurveEdge;
class MbFace;
class MbSolid;
class MbItem;
class MbSNameMaker;
class MbPartSolidIndices;
class MbSpine;
class MbMesh;
class MbGrid;
class MATH_CLASS MbCollection;
class MATH_CLASS IProgressIndicator;
class IProgressIndicator;
//------------------------------------------------------------------------------
+7 -7
View File
@@ -22,13 +22,13 @@
#include <vector>
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSolid;
class MATH_CLASS MbSurfaceCurve;
class MATH_CLASS MbFunction;
class MATH_CLASS MbGrid;
class MATH_CLASS MbRegion;
class MbCurve;
class MbCurve3D;
class MbSolid;
class MbSurfaceCurve;
class MbFunction;
class MbGrid;
class MbRegion;
//------------------------------------------------------------------------------
+12 -12
View File
@@ -28,18 +28,18 @@
#include <op_curve_parameter.h>
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbCurve;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbContour3D;
class MATH_CLASS MbSurfaceCurve;
class MATH_CLASS MbSurface;
class MATH_CLASS MbElementarySurface;
class MATH_CLASS MbFace;
class MATH_CLASS MbSolid;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbSNameMaker;
class MbAxis3D;
class MbPlacement3D;
class MbCurve;
class MbCurve3D;
class MbContour3D;
class MbSurfaceCurve;
class MbSurface;
class MbElementarySurface;
class MbFace;
class MbSolid;
class MbWireFrame;
class MbSNameMaker;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -12,11 +12,11 @@
#include <wire_frame.h>
class MATH_CLASS MbWireFrameFilletsParams;
class MATH_CLASS MbNurbsWireFrameParams;
class MATH_CLASS MbTrimmedWireFrameParams;
class MATH_CLASS MbWireFrameProjParams;
class MATH_CLASS MbWireFrameProjResult;
class MbWireFrameFilletsParams;
class MbNurbsWireFrameParams;
class MbTrimmedWireFrameParams;
class MbWireFrameProjParams;
class MbWireFrameProjResult;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -23,8 +23,8 @@
#include <vector>
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbMatrix3D;
class MbCurve3D;
class MbMatrix3D;
namespace c3d // namespace C3D
{
+3 -3
View File
@@ -15,9 +15,9 @@
#include <alg_curve_distance.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbLine;
class MATH_CLASS MbArc;
class MbCurve;
class MbLine;
class MbArc;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -16,10 +16,10 @@
#include <templ_s_array.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbLineSegment;
class MbCurve;
class MbLineSegment;
class MATH_CLASS MbArc;
class MATH_CLASS MbLine;
class MbLine;
class MATH_CLASS MbTempCircle;
+3 -3
View File
@@ -13,9 +13,9 @@
#include <curve.h>
class MATH_CLASS MbLineSegment;
class MATH_CLASS MbArc;
class MATH_CLASS MbContour;
class MbLineSegment;
class MbArc;
class MbContour;
//------------------------------------------------------------------------------
+6 -6
View File
@@ -22,12 +22,12 @@
#include <surface.h>
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbVector3D;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbPlaneCurve;
class MATH_CLASS IProgressIndicator;
class MbCartPoint3D;
class MbVector3D;
class MbPlacement3D;
class MbAxis3D;
class MbPlaneCurve;
class IProgressIndicator;
////////////////////////////////////////////////////////////////////////////////
+7
View File
@@ -198,6 +198,9 @@ public:
/// \ru Перерисовать модель. \en Redraw the model.
virtual void RedrawModel() = 0;
// Получить плейсмент активного окна (например для прорисовки плоской кривой).
virtual void GetWindowPlace( MbPlacement3D & place ) = 0;
OBVIOUS_PRIVATE_COPY( IfDrawGI )
};
@@ -1005,6 +1008,10 @@ public:
*/
static void RedrawModel();
/** \brief Получить плейсмент активного окна (например для прорисовки плоской кривой).
\ingroup Drawing
*/
static void GetWindowPlace( MbPlacement3D & place );
}; // class DrawGI
+5 -5
View File
@@ -19,11 +19,11 @@
#include <math_define.h>
class MATH_CLASS MbCartPoint;
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MbCartPoint;
class MbCartPoint3D;
class MbAxis3D;
class MbCurve3D;
class MbSurface;
//------------------------------------------------------------------------------
+11 -11
View File
@@ -21,18 +21,18 @@
#include <plane_item.h>
class MATH_CLASS MbVector;
class MATH_CLASS MbCurve;
class MATH_CLASS MbCartPoint;
class MATH_CLASS MbPlacement3D;
class MbVector;
class MbCurve;
class MbCartPoint;
class MbPlacement3D;
class MATH_CLASS MbBezier;
class MATH_CLASS MbNurbs;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbMatrix3D;
class MATH_CLASS MbNurbs3D;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbContour3D;
class MATH_CLASS MbCubicSpline3D;
class MbNurbs;
class MbCurve3D;
class MbMatrix3D;
class MbNurbs3D;
class MbCurve3D;
class MbContour3D;
class MbCubicSpline3D;
//-------------------------------------------------------------------------------
+5 -5
View File
@@ -16,11 +16,11 @@
#include <mb_variables.h>
class MATH_CLASS MbVector3D;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbCurve;
class MATH_CLASS MbSurface;
class MATH_CLASS MbMesh;
class MbVector3D;
class MbPlacement3D;
class MbCurve;
class MbSurface;
class MbMesh;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -17,9 +17,9 @@
#include <math_define.h>
class MATH_CLASS MbCube;
class MATH_CLASS MbProperties;
class MATH_CLASS MbMesh;
class MbCube;
class MbProperties;
class MbMesh;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -372,7 +372,7 @@ public :
void SetChromInt ( uint8 v ) { _chrom = v; } // \ru Установить коэффициент зеркального отражения объектов. \en Set a coefficient of specular reflection for objects.
/// \ru Методы работы с составляющей цвета (использовать в случае, если используется только цвет). \en Methods working with a color component (use in case only the color is used).
uint32 GetColor() const { return _diffuse.Get(); } // \ru Выдать составляющую цвета. \en Get a color component.
uint32 GetColor() const { return MbRGBA(_diffuse[0], _diffuse[1], _diffuse[2], 0).Get(); } // \ru Выдать составляющую цвета. \en Get a color component.
void SetColor( uint32 c ); // \ru Установить составляющую цвета. \en Set a color component.
void SetColor( const MbRGBA & c ); // \ru Установить составляющую цвета. \en Set a color component.
void SetColor( int iR, int iG, int iB ); // \ru Установить составляющую цвета. \en Set a color component.
+3 -3
View File
@@ -17,9 +17,9 @@
#include <creator.h>
class MATH_CLASS MbSpaceItem;
class MATH_CLASS MbProperty;
class MATH_CLASS MbProperties;
class MbSpaceItem;
class MbProperty;
class MbProperties;
class MbRegTransform;
class MbRegDuplicate;
+12 -12
View File
@@ -18,18 +18,18 @@
#include <attr_registry.h>
class MATH_CLASS reader;
class MATH_CLASS writer;
class MATH_CLASS MbVector3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbMatrix3D;
class MATH_CLASS MbAttribute;
class MATH_CLASS MbUserAttribute;
class MATH_CLASS MbExternalAttribute;
class MATH_CLASS MbRGBA;
class MATH_CLASS MbProperties;
class MbRegDuplicate;
class MbRegTransform;
class reader;
class writer;
class MbVector3D;
class MbAxis3D;
class MbMatrix3D;
class MbAttribute;
class MbUserAttribute;
class MbExternalAttribute;
class MbRGBA;
class MbProperties;
class MbRegDuplicate;
class MbRegTransform;
//------------------------------------------------------------------------------
+4 -4
View File
@@ -17,10 +17,10 @@
#include <mb_property_title.h>
class MATH_CLASS MbVector3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbMatrix3D;
class MATH_CLASS MbProperties;
class MbVector3D;
class MbAxis3D;
class MbMatrix3D;
class MbProperties;
class MATH_CLASS MbAttributeContainer;
class MbRegDuplicate;
class MbRegTransform;
+4 -4
View File
@@ -17,9 +17,9 @@
#include <vector>
class MATH_CLASS MbSolid;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbCurveEdge;
class MbSolid;
class MbSNameMaker;
class MbCurveEdge;
//----------------------------------------------------------------------------------------
@@ -55,4 +55,4 @@ MATH_FUNC (MbResultType) InterferenceSolids( MbSolid & solid1, MbSolid & solid2,
#endif // __CDET_BOOL_H
// eof
// eof
+1 -1
View File
@@ -494,4 +494,4 @@ using MbProximityParameters = CdProximityParameters;
#endif // __CDET_DATA_H
// eof
// eof
+9 -9
View File
@@ -73,14 +73,14 @@ public:
cdet_item AddMesh( const MbMesh & mesh, const MbPlacement3D & place
, cdet_app_item appItem = CDET_APP_NULL, double gap = 0. );
/**
\brief \ru Добавить новый компонент контроля соударений и параметров близости.
\brief \ru Добавить новый компонент контроля столкновений и параметров близости.
\en Add a new component to track collisions and proximity parameters. \~
\details \ru Компонент позволяет объединять тела в геометрически-жесткие множества.
\en Component is able to unite solids into the rigid geometric sets.
*/
cdet_item AddComponent( cdet_app_item );
/**
\brief \ru Добавить новый экземпляр тела в компонент контроля соударений.
\brief \ru Добавить новый экземпляр тела в компонент контроля столкновений.
\en Add a new instance of a reused solid into the component. \~
\param[in] compItem - \ru Компонент, которому будет принадлежать экземпляр.
\en A component to witch the instance will belong.
@@ -88,7 +88,7 @@ public:
\en An original solid added by the method #AddSolid by which the instance is made.
\param[in] place - \ru Положение, которое занимает тело экземпляра в глобальной СК.
\en The placement that the instance solid takes in global space.
\return \ru Новый экземпляр тела, зарегистрированный в аппарате контроля соударений.
\return \ru Новый экземпляр тела, зарегистрированный в аппарате контроля столкновений.
\en The new solid instance registered in the detector.
\note \ru Значение compItem может быть нулевым. Значит просто вставка не будет
принадлежать ни одному компоненту.
@@ -97,7 +97,7 @@ public:
*/
cdet_item AddInstance( cdet_item compItem, cdet_item solidItem, const MbPlacement3D & place );
/**
\brief \ru Добавить новый экземпляр тела по образцу в компонент контроля соударений.
\brief \ru Добавить новый экземпляр тела по образцу в компонент контроля столкновений.
\en Add a new instance of a reused solid into the component. \~
\param[in] compItem - \ru Компонент, которому будет принадлежать экземпляр.
\en A component to witch the instance will belong.
@@ -106,7 +106,7 @@ public:
\param[in] place - \ru Положение, которое занимает тело экземпляра в глобальной СК.
\en The placement that the instance solid takes in global space.
\param[in] appItem - \ru Геометрический объект пользователя. \en User geometric item.
\return \ru Новый экземпляр тела, зарегистрированный в сцене контроля соударений.
\return \ru Новый экземпляр тела, зарегистрированный в сцене контроля столкновений.
\en The new solid instance registered in the detector.
\note \ru Значение compItem может быть нулевым. Значит просто вставка не будет
принадлежать ни одному компоненту.
@@ -126,14 +126,14 @@ public:
*/
void Reposition( cdet_item, const MbPlacement3D & );
/**
\brief \ru Проверить соударения между геометрическими объектами набора.
\brief \ru Проверить столкновения между геометрическими объектами набора.
\en Check collisions between geometric objects of the set. \~
\return \ru Функция вернет CDM_RESULT_CollisionDetected при обранужении хотя бы одной коллизии.
\en The function will return CDM_RESULT_CollisionDetected if it detects at least one collision.
*/
cdet_result CheckCollisions( cdet_query & );
/**
\brief \ru Проверить соударения между геометрическими объектами набора.
\brief \ru Проверить столкновения между геометрическими объектами набора.
\en Check collisions between geometric objects of the set. \~
\return \ru Функция вернет CDM_RESULT_CollisionDetected при обранужении хотя бы одной коллизии.
\en The function will return CDM_RESULT_CollisionDetected if it detects at least one collision.
@@ -155,7 +155,7 @@ public: // the functions below can be deprecated in future version.
*/
cdet_item AddSolid( const MbLumpAndFaces & );
/// \ru Добавить тело с заданным положением. \en Add a solid with a given placement.
cdet_item AddSolid( const MbSolid &, const MbPlacement3D &, cdet_app_item = CDET_APP_NULL, double gap = 0. );
DEPRECATE_DECLARE cdet_item AddSolid(const MbSolid &, const MbPlacement3D &, cdet_app_item = CDET_APP_NULL, double gap = 0.);
/// \ru Удалить твердотельную модель или луч из детектора столкновений. \en Remove a solid model or ray from a collision detector.
void RemoveSolid( cdet_item );
/// \ru Выдать количество добавленных твердотельных моделей или лучей. \en Get number of added solid models or rays.
@@ -250,4 +250,4 @@ using MbCollisionDetectionUtility = CdCollisionDetection;
/** \} */
// eof
// eof
+186
View File
@@ -0,0 +1,186 @@
//////////////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Программный интерфейс модуля обнаружения столкновений.
\en Program interface of collision detection module. \~
*/
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef __CDM_API_H
#define __CDM_API_H
#include <cdm_types.h>
#include <solid.h>
#include <conv_res_type.h>
/**
\addtogroup Collision_Detection
\{
*/
/*
Creation and removing a scene of collision detection.
*/
//----------------------------------------------------------------------------------------
/** \brief \ru Создать пустую сцену для обнаружения столкновений.
\en Create an empty collision detection scene. \~
\return \ru Дескриптор сцены для обнаружения столкновений и запросов на близость тел.
\en Descriptor of collision detection scene and proximity queries. \~
*/
//---
MATH_FUNC(cdet_scene) CDM_CreateScene();
//----------------------------------------------------------------------------------------
/** \brief \ru Удалить сцену обнаружения столкновений.
\en Delete collision detection scene. \~
\details \ru Данный метод освобождает память от внутренних структур данных, обслуживающих
детектор столкновений. Удаляемая сцена становится недействительной после
данного вызова.
\en This method releases memory from internal data structures maintaining
the collision detector. The removed collision scene is invalidated after this call. \~
\param[in] scn - \ru Сцена запросов на столкновения и близость тел.
\en Scene of the collision and proximity queries. \~
*/
//---
MATH_FUNC(void) CDM_RemoveScene( cdet_scene scn );
//---------------------------------------------------------------------------------------
/**
\brief \ru Добавить новый компонент контроля столкновений и параметров близости.
\en Add a new component to track collisions and proximity parameters. \~
\param[in] comp - \ru Компонент, являющийся геометрическим объединением тел или
полигональных объектов, наделенный собственной локальной системой координат.
\en A component that is a geometric union of bodies or polygonal objects. It have
its own local coordinate system. \~
\return \ru Новый компонет, зарегистрированный в сцене контроля столкновений.
\en New component registered in the collision control scene. \~
\details \ru Компонент позволяет объединять тела в геометрически-жесткие множества.
\en Component is able to unite solids into the rigid geometric sets. \~
*/
//---
MATH_FUNC(cdet_item) CDM_AddComponent( cdet_scene scn, const CDM_component & comp );
//---------------------------------------------------------------------------------------
/**
\brief \ru Добавить экземпляр тела с заданным положением в набор для контроля столкновений.
\en Add a solid with given placement to the collision detection set. \~
\param[in] inst - \ru Запись экземпляра геометрического объекта (полигональное или граничное представление).
\en The instance record of geometric object (polygonal or boundary representation). \~
\return \ru Дескриптор объекта для контроля столкновений. \en Descriptor of object for collision detection. \~
\details
\par \ru Повторно-используемые элементы сцены
\en Reused scene elements.
\ru Один и тот же экземпляр класса 'MbItem' может быть добавлен в сцену сколько угодно раз с помощью данного вызова.
При многократном добавлении одного и того же геометрического объекта модуль столкновений создает только одну
поисковую структуру данных (BVT). Ресурсы памяти и времени вычислений, потраченные на создание такой структуры,
повторно используется для всех экземпляров сцены, основанные на одном и том же объекте 'MbItem'. \~
\en The same instance of the 'MbItem' class can be added to the scene as many times as necessary using this call.
When the same geometric object is added multiple times, the collision module creates only one
search data structure (BVT). The memory and computation time resources spent to create this structure,
are reused for all scene instances based on the same 'MbItem' object. \~
*/
//---
MATH_FUNC(cdet_item) CDM_AddInstance( cdet_scene scn, const CDM_instance & inst );
//---------------------------------------------------------------------------------------
/**
\brief \ru Добавить новый экземпляр тела в компонент контроля столкновений.
\en Add a new instance of a reused solid into the component. \~
\param[in] compItem - \ru Компонент, которому будет принадлежать экземпляр.
\en A component to witch the instance will belong. \~
\param[in] inst - \ru Запись экземпляра геометрического объекта (полигональное или граничное представление).
\en The instance record of geometric object (polygonal or boundary representation). \~
\return \ru Новый экземпляр тела, зарегистрированный в аппарате контроля столкновений.
\en The new solid instance registered in the detector. \~
\note \ru Значение compItem может быть нулевым. Значит просто вставка не будет
принадлежать ни одному компоненту.
\en The value compItem can be CDM_NULL. This just means that the
instance doesn't belong to any component. \~
*/
//---
MATH_FUNC(cdet_item) CDM_AddInstance( cdet_scene scn, cdet_item compItem, const CDM_instance & inst );
//---------------------------------------------------------------------------------------
/**
\brief \ru Удалить геометрический объект из сцены контроля столкновений.
\en Remove a geometric object from the set of collision detection. \~
\param[in] cItem - \ru Дескриптор объекта в сцене детектора столкновений.
\en Decriptor of object in collision detector scene. \~
*/
//---
MATH_FUNC(void) CDM_RemoveItem( cdet_scene scn, cdet_item cItem );
//---------------------------------------------------------------------------------------
/**
\brief \ru Поменять текущее положение геометрического объекта в наборе.
\en Change current position of a geometric object. \~
\param[in] cItem - \ru Дескриптор объекта в сцене детектора столкновений.
\en Decriptor of object in collision detector scene. \~
\param[in] place - \ru Положение, которое занимает объект в глобальной СК.
\en The placement that the object takes in global space. \~
*/
//---
MATH_FUNC(void) CDM_Reposition( cdet_scene scn, cdet_item cItem, const MbPlacement3D & place );
//---------------------------------------------------------------------------------------
/**
\brief \ru Запросить поиск столкновений между элементами сцены.
\en Request a collision search between scene elements. \~
\return \ru Коды результата контроля столкновений и измерение расстояния.
\en Collision control result codes and distance measurement. \~
\details
\ru Осуществляется поиск столкновения между элементами сцены согласно запроса `cdQuery`,
а именно проверяются пары, как на уровне сборки, включая компоненты целиком, так и
на уровне отдельных компонент. Клиентское приложение имеет возможность настроить запрос
так, чтобы искать столкновения не всех со всеми, а только между группами объектов.
\en The search for collisions between scene elements is performed according to the `cdQuery`
structure, namely, pairs are checked both at the root level, including entire components,
and at the level within a component. The client application has the ability to configure
the query so as to search not for collisisons "all with all", but only between groups of objects. \~
*/
//---
MATH_FUNC(cdet_result) CDM_CheckCollisions( cdet_scene scn, cdet_query & cdQuery );
//---------------------------------------------------------------------------------------
/**
\brief \ru Проверить столкновения между геометрическими объектами набора.
\en Check collisions between geometric objects of the set. \~
\return \ru Коды результата контроля столкновений и измерение расстояния.
\en Collision control result codes and distance measurement. \~
*/
//---
MATH_FUNC(cdet_result) CDM_CheckCollisions( cdet_scene scn );
//---------------------------------------------------------------------------------------
/**
\brief \ru Выдать дескриптор клиентского приложения по дескриптору объекта сцены детктора столкновений.
\en Get an application pointer by object descriptor of the collision detection scenet. \~
\param[in] cItem - \ru Дескриптор объекта в сцене детектора столкновений.
\en Object descriptor in the collision detector scene.
\return cdet_app_item - \ru Дескриптор клиентского приложения.
\en Descriptor of client application. \~
*/
//---
MATH_FUNC(cdet_app_item) CDM_AppItem( cdet_scene scn, cdet_item cItem );
//---------------------------------------------------------------------------------------
/**
\brief \ru Экспортировать сцену поиска столкновений в модель C3D.
\en Export collision detection scene into C3D model.
\return \ru Результат конвертирования
\en Result of converting operation. \~
*/
//---
MATH_FUNC(MbeConvResType) CDM_ExportToC3D( cdet_scene scn, const TCHAR * c3dFile );
/*
The functions below can be deprecated in future version.
*/
/** \} */ // Collision_Detection
#endif // __CDM_API_H
// eof
+89
View File
@@ -0,0 +1,89 @@
//////////////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Типы данных модуля обнаружения столкновений.
\en Data types of collision detection module. \~
*/
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef __CDM_TYPES_H
#define __CDM_TYPES_H
#include <cdet_data.h>
#include <model_item.h>
class CdCollisionManager;
/**
\addtogroup Collision_Detection
\{
*/
/*
Data structures of Collision Detection Basic API.
*/
typedef CdCollisionManager * cdet_scene;
//---------------------------------------------------------------------------------------
// \ru Структура, определяющая экземпляр геометрического объекта (полигональное или граничное представление).
// \en The structure specifing the instance of geometric object (polygonal or boundary representation).
//---
struct CDM_instance
{
SPtr<const MbItem> sample = nullptr; // \ru Геометрический объект, являющийся образцом экземпляра. \en The geometric object that is a sample of the instance.
MbPlacement3D place = MbPlacement3D::global; // \ru Локальная система координат, указанная в компоненте-владельце экземпляра. \en The local coordinate system specified in the owning component of the instance.
cdet_app_item appItem = CDET_APP_NULL; // \ru Инстанс, представляющий экземпляр на стороне приложения. \en Application-side instance representative.
CDM_instance() = default;
CDM_instance(const CDM_instance & ) = default;
CDM_instance & operator= (const CDM_instance&) = default;
CDM_instance(const SPtr<MbItem> & mbItem, const MbPlacement3D & lcs, cdet_app_item aItem) : sample(mbItem), place(lcs), appItem(aItem) {};
};
//---------------------------------------------------------------------------------------
// \ru Компонентом является геометрическое объединение тел или полигональных объектов,
// наделенных собственной локальной системой координат.
// \en A component is a geometric union of bodies or polygonal objects which have their
// own local coordinate system.
struct CDM_component
{
MbPlacement3D place = MbPlacement3D::global; // \ru Локальная система координат, позиционирующая компонент. \en The local coordinate system positioning the component.
cdet_app_item appItem = CDET_APP_NULL; // \ru Инстанс, представляющий экземпляр на стороне приложения. \en Application-side instance representative.
CDM_component() = default;
CDM_component(const CDM_component & ) = default;
CDM_component & operator= (const CDM_component & ) = default;
CDM_component(const MbPlacement3D & lcs, cdet_app_item aItem) : place(lcs), appItem(aItem) {};
};
//---------------------------------------------------------------------------------------
// Callback enquiries
//---
typedef SPtr<MbItem> (*CDM_item_registered)( cdet_app_item appItem ); ///< Application item was registered in the scene.
typedef void (*CDM_item_unregistered)( cdet_app_item appItem ); ///< Application item was unregistered in the scene.
typedef bool (*CDM_abort)(); ///< Query to interrupt calculations
//----------------------------------------------------------------------------------------
/** \brief \ru Структура, объединяющая обратные вызовы детектора столкновений.
\en The structure uniting collision detection callbacks.
*/
//---
typedef struct
{
/*
General system callbacks;
*/
CDM_item_registered gRegister;
CDM_item_unregistered gUnregister;
CDM_abort abortFunc;
/*
Geometry properties
*/
} CDM_callback_table;
/** \} */ // Collision_Detection
#endif // __CDM_DATA_H
// eof
+308
View File
@@ -20,6 +20,7 @@
#include <point_frame.h>
#include <vector>
#include <iterator>
#include <curve3d.h>
#include <utility>
@@ -1091,4 +1092,311 @@ MATH_FUNC (const MbDoubleRangeAttribute *) GetEdgeSmoothnessAttribute( const MbC
*/ //---
MATH_FUNC (MbResultType) IsDegeneratedElementary( const MbSurface & inputSurface, double accuracy = Math::metricPrecision );
//------------------------------------------------------------------------------
/** \brief \ru Параметры проверки на самопересечение поверхности.
\en Parameters for checking surface self-intersection. \~
\details \ru Параметры проверки на самопересечение поверхности. \n
\en Parameters for checking surface self-intersection. \n \~
\warning \ru В разработке.
\en Under development. \~
\ingroup Algorithms_3D
*/
//---
class MATH_CLASS MbSurfaceSelfIntParams {
public:
/// \ru Метод проверки самопересечений. \en Method of self intersection checking.
enum class MbeCheckSelfIntMethod {
csim_Auto , /// \ru Автоматический режим. \en Auto mode.
csim_UVLine , /// \ru Вдоль uv линий. \en Along uv lines.
csim_SegmIntersect /// \ru Сегментированное пересечение. \en Segmented intersection.
};
private:
MbeCheckSelfIntMethod _method; ///< \ru Метод проверки самопересечений. \en Method of self intersection checking.
c3d::DoubleVector _uParams; ///< \ru Набор u параметров поверхности. \en Set of u parameters of surface.
c3d::DoubleVector _vParams; ///< \ru Набор v параметров поверхности. \en Set of v parameters of surface.
bool _ext; ///< \ru Опция проверки на расширенной поверхности. \en Extended surface option.
const MbRect2D * _uvRange; ///< \ru Область uv для проверки. \en uv surface range for checking.
VERSION _version; ///< \ru Версия алгоритма. \en Algorithm version.
public:
mutable IProgressIndicator * _progress; ///< \ru Индикатор прогресса выполнения операции. \en A progress indicator of the operation.
public:
/// \ru Конструктор по умолчанию(автоматический режим). \en Default constructor(auto mode).
MbSurfaceSelfIntParams();
/** \brief \ru Конструктор проверки на самопересечение поверхности в автоматическом режиме.
\en Constructor of checking for self-intersection of surface automatically. \~
\details \ru Конструктор проверки на самопересечение поверхности в автоматическом режиме.
\en Constructor of checking for self-intersection of surface automatically. \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
*/
MbSurfaceSelfIntParams( VERSION version, IProgressIndicator * prog = nullptr );
/** \brief \ru Конструктор проверки на самопересечение поверхности вдоль вдоль uv линий.
\en Constructor of checking for self-intersection of surface along uv lines. \~
\details \ru Конструктор проверки на самопересечение поверхности вдоль вдоль uv линий.
\en Constructor of checking for self-intersection of surface along uv lines. \~
\param[in] uParams - \ru Набор u параметров поверхности.
\en Set of u parameters of surface. \~
\param[in] vParams - \ru Набор v параметров поверхности.
\en Set of v parameters of surface. \~
\param[in] ext - \ru Опция проверки на расширенной поверхности.
\en Extended surface option. \~
\param[in] uvRange - \ru Область uv для проверки.
\en uv surface range for checking \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
*/
MbSurfaceSelfIntParams( const c3d::DoubleVector & uParams,
const c3d::DoubleVector & vParams,
bool ext,
const MbRect2D * uvRange,
VERSION version,
IProgressIndicator * prog = nullptr );
/** \brief \ru Конструктор проверки на самопересечение поверхности путем сегментированного пересечения.
\en Constructor of checking for self-intersection of surface by segmented intersection. \~
\details \ru Конструктор проверки на самопересечение поверхности путем сегментированного пересечения.
\en Constructor of checking for self-intersection of surface by segmented intersection. \~
\param[in] umin - \ru Минимальный u параметр поверхности.
\en Minimal u parameter of surface. \~
\param[in] umax - \ru Максимальный u параметр поверхности.
\en Maximal u parameter of surface. \~
\param[in] vmin - \ru Минимальный v параметр поверхности.
\en Minimal v parameter of surface. \~
\param[in] vmax - \ru Максимальный v параметр поверхности.
\en Maximal v parameter of surface. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
*/
MbSurfaceSelfIntParams( double umin, double umax, double vmin, double vmax, IProgressIndicator * prog = nullptr );
/// \ru Деструктор. \en Destructor.
~MbSurfaceSelfIntParams() {}
public:
/// \ru Получить метод проверки самопересечений. \en Get the method of self intersection checking.
MbeCheckSelfIntMethod GetMethod() const { return _method; }
/// \ru Получить набор u параметров поверхности. \en Get the set of u parameters of surface.
const c3d::DoubleVector & GetUParams() const { return _uParams; }
/// \ru Получить набор v параметров поверхности. \en Get the set of v parameters of surface.
const c3d::DoubleVector & GetVParams() const { return _vParams; }
/// \ru Получить опцию проверки на расширенной поверхности. \en Get the extended surface option.
bool GetExt() const { return _ext; }
/// \ru Получить uv область для проверки. \en Get uv surface range for checking.
const MbRect2D * GetUVRange() const { return _uvRange; }
/// \ru Получить версию алгоритма. \en Get the algorithm version.
VERSION GetVersion() const { return _version; }
OBVIOUS_PRIVATE_COPY( MbSurfaceSelfIntParams )
};
//------------------------------------------------------------------------------
/** \brief \ru Проверить, имеет ли поверхность самопересечения.
\en Check whether the surface is self-intersected. \~
\details \ru Проверить, имеет ли поверхность самопересечения.
\en Check whether the surface is self-intersected.\~
\param[in] surface - \ru Проверяемая поверхность.
\en Surface to check.\~
\param[in] params - \ru Параметры проверки на самопересечение.
\en Self-intersection checking parameters.\~
\return \ru Возвращает true, если поверхность имеет самопересечения.
\en Returns true if surface self-intersection is found. \~
\warning \ru В разработке.
\en Under development. \~
\ingroup Algorithms_3D
*/ //---
MATH_FUNC( bool ) IsSelfIntersectSurface( const MbSurface & surface,
const MbSurfaceSelfIntParams & params );
//------------------------------------------------------------------------------
/** \brief \ru Параметры проверки на самопересечение оболочки.
\en Parameters for checking shell self-intersection. \~
\details \ru Параметры проверки на самопересечение оболочки. \n
\en Parameters for checking shell self-intersection. \n \~
\warning \ru В разработке.
\en Under development. \~
\ingroup Algorithms_3D
*/
//---
class MATH_CLASS MbShellSelfIntParams {
public:
/// \ru Режим проверки самопересечений. \en Mode of self intersection checking.
enum class MbeCheckSelfIntMode
{
Auto , /// \ru Автоматический режим. \en Auto mode.
SelfIntFacesOnly , /// \ru Проверять только самопересечение граней. \en Check only self-intersection of faces.
IntDfferentFacesOnly /// \ru Проверять только пересечение различных граней. \en Check only the intersection of different faces.
};
private:
MbeCheckSelfIntMode _mode; ///< \ru Режим проверки самопересечений. \en Mode of self intersection checking.
VERSION _version; ///< \ru Версия алгоритма. \en Algorithm version.
public:
mutable IProgressIndicator * _progress; ///< \ru Индикатор прогресса выполнения операции. \en A progress indicator of the operation.
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbShellSelfIntParams();
/** \brief \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\details \ru Конструктор проверки на самопересечение оболчки.
\en Constructor of checking for self-intersection of shell. \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
*/
MbShellSelfIntParams( VERSION version, IProgressIndicator * prog = nullptr );
/** \brief \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\details \ru Конструктор проверки на самопересечение оболчки.
\en Constructor of checking for self-intersection of shell. \~
\param[in] mode - \ru Режим проверки самопересечений.
\en Mode of self intersection checking. \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
*/
MbShellSelfIntParams( MbeCheckSelfIntMode mode, VERSION version, IProgressIndicator * prog = nullptr );
/// \ru Деструктор. \en Destructor.
~MbShellSelfIntParams() {}
public:
/// \ru Получить режим проверки самопересечений. \en Get the mode of self intersection checking.
MbeCheckSelfIntMode GetMode() const { return _mode; }
/// \ru Установить режим проверки самопересечений. \en Set the mode of self intersection checking.
void SetMode( MbeCheckSelfIntMode mode ) { _mode = mode; }
/// \ru Получить версию алгоритма. \en Get the algorithm version.
VERSION GetVersion() const { return _version; }
OBVIOUS_PRIVATE_COPY( MbShellSelfIntParams )
};
//------------------------------------------------------------------------------
/** \brief \ru Результаты проверки на самопересечение оболочки.
\en Results for checking sell self-intersection. \~
\details \ru Результаты проверки на самопересечение оболочки. \n
\en Results for checking sell self-intersection. \n \~
\warning \ru В разработке.
\en Under development. \~
\ingroup Algorithms_3D
*/
//---
class MATH_CLASS MbShellSelfIntResults {
private:
/** \brief \ru Результат пересечения/самопересечения граней.
\en Result of intersection/self-intersection of faces. \~
\details \ru Результат пересечения/самопересечения граней. Если '_facesIndices' содержат
одинаковые индексы, значит грань с данным индексом самопересекается.
Кривые пересечения не вычисляются для сомопересечения и '_curves' будет пустым. \n
\en The result of intersection/self-intersection of edges. If '_facesIndices' contains
identical indices, which means the face with this index intersects itself.
Intersection curves are not calculated for self-intersection and '_curves' will be empty. \n \~
*/
struct SelfIntResult {
c3d::IndicesPair _facesIndices; ///< \ru Индексы пересекающихся/самопересекающихся граней. \en Indices of intersecting/self-intersecting faces.
c3d::SpaceCurvesSPtrVector _curves; ///< \ru Кривые пересечения граней. \en Face intersection curves.
/// \ru Конструктор по умолчанию. \en Default constructor.
SelfIntResult() {};
/// \ru Конструктор по копирования. \en Copy constructor.
SelfIntResult( const SelfIntResult & other );
/// \ru Оператор присваивания. \en Assignment operator.
SelfIntResult & operator =( const SelfIntResult & other );
/** \brief \ru Конструктор результата проверки на самопересечение пары граней.
\en Constructor of the result of checking for self-intersection of a pair of faces. \~
\details \ru Конструктор результата проверки на самопересечение пары граней.
\en Constructor of the result of checking for self-intersection of a pair of faces. \~
\param[in] faceIndex1 - \ru Индекс первой грани.
\en First face index. \~
\param[in] faceIndex2 - \ru Индекс второй грани.
\en Second face index. \~
\param[in] intCurves - \ru Указатель на вектор кривых пересечения двух граней.
\en Pointer to a vector of curves where two faces intersect. \~
*/
SelfIntResult( size_t faceIndex1, size_t faceIndex2, c3d::SpaceCurvesSPtrVector * intCurves = nullptr );
/// \ru Обмен. \en Swap.
void Swap( SelfIntResult & other );
};
private:
std::vector<SelfIntResult> _selfIntResults;
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbShellSelfIntResults() {};
/// \ru Деструктор. \en Destructor.
~MbShellSelfIntResults() {};
public:
/// \ru Добавить результат самопересечения оболочки для пары граней. \en Add the result of self-intersection processing for a pair of faces.
void AddResult( size_t faceIndex1, size_t faceIndex2, c3d::SpaceCurvesSPtrVector * intersectionCurves = nullptr );
/** \brief \ru Получить результат самопересечения оболочки для пары граней по индексу.
\en Get the result of self-intersection processing for a pair of faces. \~
\details \ru Получить индексы пересекающихся/самопересекающихся граней и кривые пересечения
(для пары различных граней) по индексу. Если параметр 'intersectionCurves' - nullptr,
кривые пересечения не возвращаются. Если faceIndex1 == faceIndex2 значит грань
с индексом faceIndex1 самопересекается. Кривые пересечения не вычисляются и
'intersectionCurves' будет пустым.
\en Get indices of intersecting/self-intersecting faces and intersection curves
(for a pair of different faces) by index. If the 'intersectionCurves' parameter is nullptr,
intersection curves are not returned. If faceIndex1 == faceIndex2 means face
with the index faceIndex1 self-intersects. Intersection curves are not calculated and
'intersectionCurves' will be empty. \~
\param[in] index - \ru Индекс результата для пары граней.
\en Result index for a pair of faces. \~
\param[out] faceIndex1 - \ru Индекс первой грани.
\en First face index. \~
\param[out] faceIndex2 - \ru Индекс второй грани.
\en Second face index. \~
\param[out] intersectionCurves - \ru Указатель на вектор кривых пересечения двух граней.
Если intersectionCurves = nullptr - кривые пересечения
не возвращаются.
\en Pointer to a vector of curves where two faces intersect.
If intersectionCurves = nullptr - intersection curves
do not return. \~
\return \ru Возвращает:
false, если результата с заданым индексом не содержится;
true, если результата с заданым индексом найден;
\en Returns:
false, if there is no result with the given index;
true, if a result with the given index is found; \~
*/
bool GetResult( size_t index, size_t & faceIndex1, size_t & faceIndex2, c3d::SpaceCurvesSPtrVector * intersectionCurves ) const;
/// \ru Получить количество пар пересекающихся и самопересекающихся граней. \en Get the number of pairs of intersecting and self-intersecting faces.
size_t Count() const { return _selfIntResults.size(); }
/// \ru Установить значения по умолчанию. \en Set defaults.
void Reset() { _selfIntResults.clear(); };
OBVIOUS_PRIVATE_COPY( MbShellSelfIntResults )
};
//------------------------------------------------------------------------------
/** \brief \ru Проверить оболочку на наличие самопересечений.
\en Check shell for self-intersections. \~
\details \ru Проверить оболочку на наличие самопересечений. Находит все кривые самопересечения оболочки.
\en Check shell for self-intersections. Finds all shell self-intersection curves.\~
\param[in] shell - \ru Оболочка, которую проверяем.
\en Shell to check.\~
\param[in] params - \ru Параметры проверки на самопересечение.
\en Self-intersection checking parameters.\~
\param[out] results - \ru Результаты проверки на самопересечение.
\en Self-intersection checking results.\~
\return \ru Возвращает:
false, если оболочка не имеет самопересечений;
true, если оболочка имеет самопересечения;
\en Returns:
false, if shell has no self-intersections;
true, if shell has self-intersections.\~
\warning \ru В разработке.
\en Under development. \~
\ingroup Algorithms_3D
*/ //---
MATH_FUNC( bool ) IsSelfIntersectShell( const MbFaceShell & shell,
const MbShellSelfIntParams & params,
MbShellSelfIntResults & results );
#endif // __CHECK_GEOMETRY_H
+2 -2
View File
@@ -19,8 +19,8 @@
#include <vector>
class MATH_CLASS MbMesh;
class MATH_CLASS MbGrid;
class MbMesh;
class MbGrid;
class MbGridTopology;
+1 -1
View File
@@ -18,7 +18,7 @@
class MATH_CLASS MpEdge;
class MATH_CLASS ProgressBarWrapper;
class ProgressBarWrapper;
class IProgressIndicator;
+20 -27
View File
@@ -13,6 +13,7 @@
#include <mb_placement.h>
#include <mb_placement3d.h>
#include <mb_pmi.h>
#include <conv_pmi_depricated_convert.h>
#include <vector>
#include <set>
@@ -541,30 +542,6 @@ typedef std::vector< SPtr<MaTextItem> > vector_of_text;
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент аннотации.
\en Transform annotation item. \~
*/
// ---
CONV_FUNC( SPtr<MbPMI> ) ConvertPMI( const MaAnnotationItem& it );
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент технического требования.
\en Transform technical requirements. \~
*/
// ---
CONV_FUNC( SPtr<MbPMI> ) ConvertTechnicalRequirements( const MaAnnotationItem& it );
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент аннотации.
\en Transform annotation item. \~
*/
// ---
CONV_FUNC( SPtr<MaAnnotationItem> ) ConvertPMI( const MbPMI& it );
//------------------------------------------------------------------------------
/** \brief \ru Размер - родоначальник классов для размеров различных типов.
\en Dimension is the parent of all classes for dimensions of different types. \~
@@ -933,14 +910,30 @@ void MaAnnotationItem::GetAnnotationText( Out dest ) const {
// ---
c3d::ItemsSPtrVector GetPMIGeometry( const MbPMI & it );
//------------------------------------------------------------------------------
// Преобразовать текстовый элемент
// Получить строковое название спецсимвола
// ---
SPtr<MbTextItem> CreateTextItem( const MaTextItem & it );
SPtr<MaTextItem> CreateTextItem( const MbTextItem & it );
c3d::string_t PredefinedSymbolToString( const MbeDefinedDimensionSymbol & symb );
//------------------------------------------------------------------------------
// Получить спецсимвол из строки
// ---
bool StringToPredefinedSymbol( const c3d::string_t & txt, MbeDefinedDimensionSymbol & predefSymb );
//------------------------------------------------------------------------------
// Получить строковое название тэга форматирования
// ---
c3d::string_t TextTagToString( const MaeTextFormatTag & tag );
//------------------------------------------------------------------------------
// Получить тэг форматирования из строки
// ---
MaeTextFormatTag StringToTextTag( const c3d::string_t & txt );
//------------------------------------------------------------------------------
// Получить строковое название типа терминатора
// ---
c3d::string_t GetTerminatorTypeStr( const MbeDefinedTerminatorSymbol termTrype );
#endif // __CONV_ANNOTATION_ITEM_H
+121 -12
View File
@@ -13,9 +13,11 @@
#include <model_item.h>
#include <attribute_item.h>
#include <instance_item.h>
#include <conv_annotation_item.h>
#include <conv_predefined.h>
#include <tool_cstring.h>
#include <assisting_item.h>
#include <vector>
#include <map>
@@ -377,7 +379,8 @@ enum MbeGettingItemType {
git_AssociatedGeometry, ///< \ru Получить ассоциированные геометрические объекты (резьбы). \en Get associated geometry objects (threads).
git_Polygonal, ///< \ru Получить полгональные объекты (MbMesh). !!! ЭКСПЕРИМЕНТАЛЬНЫЙ ФУНКЦИОНАЛ !!! \en Get polygonal objects (MbMesh). !!! EXPEREIMENTAL FUNCTIONALITY !!!
git_PMI, ///< \ru Получить размеры и иные элементы аннотации. \en Get dimensions and other annotation items.
git_TechnicalRquirments ///< \ru Получить технические требования. \en Get thecnical requirements.
git_TechnicalRquirments, ///< \ru Получить технические требования. \en Get thecnical requirements.
git_Placement ///< \ru Получить системы координат. \en Get placements.
};
@@ -450,14 +453,59 @@ public:
virtual AnnotationSptrVector GetAnnotationItems( eTextForm, bool ) const { return AnnotationSptrVector(); }; // Реализация будет удалена после того, как она будет осуществлена на стороне 3D
virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D
/** \brief \ru Задать элементы аннотации в сборке.
\en Set elements of annotation in the assembly. \~
\param[in] sourceDim - \ru Элементы аннотации
\en Elements of annotation. \~
*/
/** \brief \ru Задать элементы аннотации в сборке.
\en Set elements of annotation in the assembly. \~
\param[in] sourceDim - \ru Элементы аннотации
\en Elements of annotation. \~
*/
virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0;
};
/** \brief \ru Добавить объект с заданной ЛСК в корень сборки при импорте.
\en Add object with a placement to the assembly root while importing. \~
\param[in] item - \ru Объект, добавляемые в модель.
\en Object to add to the model. \~
\param[in] placement - \ru ЛСК.
\en Placement. \~
*/
virtual void AddMappedItem( MbItem &, MbPlacement3D const &, c3d::AttrSPtrVector const& ) {};
/** \brief \ru Получить следующий объект с заданной ЛСК.
\en Get the next item with placement. \~
\return \ru Объект с заданной ЛС или nullptr.
\en Item with placement and nullptr otherwise. \~
*/
virtual SPtr<MbInstance> NextMappedItem() const { return {}; }
/** \brief \ru Получить следующую группу конструкционных осей.
\en Get the next construction axes grid. \~
\return \ru Очередная группа конструкционных осей или нуль в случае исчерпания.
\en Next construction axes grid or null in case of depletion. \~
*/
virtual c3d::ItemSPtr NextAxesGrid() const { return c3d::ItemSPtr{}; }
/** \brief \ru Добавить следующую группу конструкционных осей.
\en Add next construction axes grid. \~
\param[in] group \ru Очередная группа конструкционных осей.
\en Next construction axes grid. \~
*/
virtual void AddAxesGrid( c3d::ItemSPtr const & ) {}
/** \brief \ru Получить следующую систему координат.
\en Get the next coordinate system. \~
\return \ru Очередная система координат или нуль в случае исчерпания.
\en Next coordinate system or null in case of depletion. \~
*/
virtual SPtr<MbAssistingItem> NextCoordinateSystem() const { return {}; }
/** \brief \ru Добавить систему координат.
\en Add a coordinate system. \~
\param[in] group \ru Система координат.
\en Coordinate system. \~
*/
virtual void AddCoordinateSystem( SPtr<MbAssistingItem> const & ) {}
};
//------------------------------------------------------------------------------
@@ -532,14 +580,75 @@ public:
virtual AnnotationSptrVector GetAnnotationItems( eTextForm ) const { return AnnotationSptrVector(); }; // Будет удалена после её реализации на стороне 3D
/** \brief \ru Задать элементы аннотации в детали.
\en Set elements of annotation in the part. \~
\param[in] sourceDim - \ru Элементы аннотации
\en Elements of annotation. \~
*/
/** \brief \ru Задать элементы аннотации в детали.
\en Set elements of annotation in the part. \~
\param[in] sourceDim - \ru Элементы аннотации
\en Elements of annotation. \~
*/
virtual void SetAnnotationItems( const AnnotationSptrVector & ) = 0;
/** \brief \ru Добавить объект с заданной ЛСК в корень сборки при импорте.
\en Add object with a placement to the assembly root while importing. \~
\param[in] item - \ru Объект, добавляемые в модель.
\en Object to add to the model. \~
\param[in] placement - \ru ЛСК.
\en Placement. \~
*/
virtual void AddMappedItem( MbItem &, MbPlacement3D const &, c3d::AttrSPtrVector const& ) {};
/** \brief \ru Получить следующий объект с заданной ЛСК.
\en Get the next item with placement. \~
\return \ru Объект с заданной ЛС или nullptr.
\en Item with placement and nullptr otherwise. \~
*/
virtual SPtr<MbInstance> NextMappedItem() const { return {}; }
/** \brief \ru Получить следующую группу конструкционных осей.
\en Get the next conxtruction axes grid. \~
\return \ru Очередная группа конструкционных осей или нуль в случае исчерпания.
\en Next construction axes grid or null in case of depletion. \~
*/
virtual c3d::ItemSPtr NextAxesGrid() const { return c3d::ItemSPtr{}; }
/** \brief \ru Добавить следующую группу конструкционных осей.
\en Get the next conxtruction axes grid. \~
\param[in] group \ru Очередная группа конструкционных осей или нуль в случае исчерпания.
\en Next construction axes grid or null in case of depletion. \~
*/
virtual void AddAxesGrid( c3d::ItemSPtr const & ) {}
/** \brief \ru Получить следующую систему координат.
\en Get the next coordinate system. \~
\return \ru Очередная система координат или нуль в случае исчерпания.
\en Next coordinate system or null in case of depletion. \~
*/
virtual SPtr<MbAssistingItem> NextCoordinateSystem() const { return {}; }
/** \brief \ru Добавить систему координат.
\en Add a coordinate system. \~
\param[in] group \ru Система координат.
\en Coordinate system. \~
*/
virtual void AddCoordinateSystem( SPtr<MbAssistingItem> const & ) {}
};
namespace c3d
{
namespace converter {
/** \brief \ru Проверить корректность набора осей.
\en Validate axes grid. \~
\details \ru Либо это объект типа MbPlaneInstance либо MbAssembly, содержащий только MbPlaneInstance с одинаковыми ЛСК плоскостей\~
\en. The item is or MbPlaneInstance or MbAssembly containing only MbPlaneInstance items with same LCS of the plane.\~
\return \ru Пройдена ли валидация.
\en Wether validation passed. \~
\param[in] item - \ru Группа конструкционных осей.
\en Construction axes grid. \~
*/
CONV_FUNC (bool) IsAxesGridValid( c3d::ItemSPtr const & );
}
}
#endif // __CONV_MODEL_DOCUMENT_H
+17 -1
View File
@@ -830,7 +830,23 @@ public:
\en EXPEREIMENTAL \~.
\ingroup ASCII_Exchange
*/
virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName, const c3d::optionNameValuePairs_t& pluginSpecificSettings, IConfigurationSelector * configSelector = 0 ) = 0;
virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName, const c3d::optionNameValuePairs_t& pluginSpecificSettings, IConfigurationSelector * configSelector ) = 0;
/** \brief \ru Загрузить плагин получения данных для построения модели.
\en Load plugin for getting information necessary to build model. \~
\details \ru Описание специфичных для плагина настроек следует получить у поставщика комопонента.
\en The description of plugin-specific settings shoud be taken from the plugin's vendor. \~
\note \ru Экспериментальное API. \en Expereimental API. \~
\param[in] pluginName - \ru Имя подключаемого файла.
\en Name of the file to link. \~
\param[in] pluginSpecificSettings - \ru Специфические для плагина настройки.
\en Plugin-specific settings. \~
\return \ru Код завершения операции.
\en Code of the operation termination. \~
\ingroup ASCII_Exchange
*/
virtual MbeConvResType LoadForeignReader( const c3d::path_string& pluginName, const c3d::optionNameValuePairs_t& pluginSpecificSettings ) = 0;
/** \brief \ru Отключить загруженный плагин получения данных для построения модели.
+156
View File
@@ -0,0 +1,156 @@
#include <conv_model_document.h>
#include <mb_matrix.h>
#include <solid.h>
#include <vector>
//------------------------------------------------------------------------------
// Данные терминатора
// ---
struct TerminatorData
{
int type;
double parameter;
double sizeX;
double sizeY;
bool sameDirection;
};
//------------------------------------------------------------------------------
// Данные кривой с терминаторами
// ---
struct DecoratedCurveData
{
int curveType;
std::vector<TerminatorData> terminators;
};
//------------------------------------------------------------------------------
// Данные размера
// ---
struct DimensionData
{
double value;
double valuePlus;
double valueMinus;
bool isRangeSet;
bool isValueDefined;
std::vector<DecoratedCurveData> decoratedCurves;
};
//------------------------------------------------------------------------------
// Контейнер элементов с вхождениями
// ---
template <typename ReferencedItemType>
class LinearizedContainer {
ReferencedItemType item;
mutable std::vector<MbMatrix3D> references;
public:
// Конструктор
LinearizedContainer( const ReferencedItemType& it )
: item( it )
, references() {
}
// Конструктор копирования
LinearizedContainer( const LinearizedContainer& i )
: item( i.item )
, references( i.references ) {
}
// Оператор сравнения
bool operator ==(const LinearizedContainer& to) const {
return item == to.item;
}
// Получить элемент-ключ
ReferencedItemType Item() const {
return item;
}
// Получить число вхождений
size_t ReferencesCount() const {
return references.size();
}
// Получить матрицу вхождения по индексу
MbMatrix3D Reference( size_t index ) const {
MbMatrix3D result;
if ( index < ReferencesCount() )
result = references[index];
return result;
}
// Добавить матрицу вхождения
void AddReference( const MbMatrix3D& matr ) {
references.push_back( matr );
}
};
typedef std::vector<LinearizedContainer<ModelPartPtr>> PartsLinearized;
typedef std::vector<LinearizedContainer<ModelAssemblyPtr>> AssembliesLinearized;
typedef std::vector<LinearizedContainer<c3d::SolidSPtr>> SolidsLinearized;
//------------------------------------------------------------------------------
// Документ
// ---
class CONV_CLASS LinearizedTreeDocument : public C3dModelDocument
{
PartsLinearized parts;
AssembliesLinearized assemblies;
SolidsLinearized solids;
std::vector<SPtr<MbCurve3D>> spaceCurves;
std::vector<SPtr<MbMesh>> meshes;
vector_of_annotation annotations;
vector_of_annotation techReq;
bool calculateMIP;
bool sliceSolids;
public:
// Конструктор
LinearizedTreeDocument();
// Деструктор
~LinearizedTreeDocument();
public:
// Заполнить данные
void FillLinearizedData();
// Заполнены ли данные
bool IsFilled();
bool GetSolid( const size_t ind, c3d::SolidSPtr& sld ) const;
void SetSliceSolids( const bool val ) { sliceSolids = val; }
// Заполнить списки компонент
void FillComponents();
// Заполнить списки объектов
void FillObjectsFromComponents();
// Обработать сборку со вставками
void ProcessAssembly( ModelAssemblyPtr assm, const MbMatrix3D & matr );
// Добавить деталь
void AddPart( ModelPartPtr prt, const MbMatrix3D & matr );
// Добавить сборку
void AddAssembly( ModelAssemblyPtr assm, const MbMatrix3D & matr );
// Добавить тело
void AddSolid( c3d::SolidSPtr sld, const MbMatrix3D & matr );
// Выдать данные размера
void GetPmiDimensionData( MaDimension & dimension, DimensionData & dimData );
// Сбросить данные размера
void UnsetPmiDimensionData( DimensionData & dimData );
// Выдать данные кривой с терминаторами
void GetPmiDecoratedCurveData( MaDecoratedCurve & decoratedCurve, DecoratedCurveData & decCurveData );
// Выдать данные терминатора
void GetPmiTerminatorData( MaTerminatorSymbol & terminator, TerminatorData & termData );
// Выдать идентификатор
bool GetCadItemIdentifier( const MbAttributeContainer& item, ptrdiff_t & id );
// Резка тела координатными плоскостями
void SolidPlaneCutting( const MbSolid & solid, std::vector<MbResultType> & cutRes );
// Резка тела
MbResultType SolidCut( const MbSolid & solid, const MbSurface & surf, bool forward );
};
+54
View File
@@ -0,0 +1,54 @@
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Функции преобразования данных из устаревшего MaAnnotationItem в актуальный MbPmi и обратно.
\en Functions for converting data from depicated MaAnnotationItem to current MbPmi and back. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __CONV_PMI_DEPRICATED_CONVERT_H
#define __CONV_PMI_DEPRICATED_CONVERT_H
#include <mb_pmi.h>
#include <conv_annotation_item.h>
class MaAnnotationItem;
class MbPMI;
class MaTextItem;
class MbTextItem;
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент аннотации.
\en Transform annotation item. \~
*/
// ---
CONV_FUNC( SPtr<MbPMI> ) ConvertPMI( const MaAnnotationItem & it );
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент технического требования.
\en Transform technical requirements. \~
*/
// ---
CONV_FUNC( SPtr<MbPMI> ) ConvertTechnicalRequirements( const MaAnnotationItem & it );
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать элемент аннотации.
\en Transform annotation item. \~
*/
// ---
CONV_FUNC( SPtr<MaAnnotationItem> ) ConvertPMI( const MbPMI & it );
//------------------------------------------------------------------------------
// Преобразовать текстовый элемент
// ---
SPtr<MbTextItem> CreateTextItem( const MaTextItem & it );
//------------------------------------------------------------------------------
// Преобразовать текстовый элемент
// ---
SPtr<MaTextItem> CreateTextItem( const MbTextItem & it );
#endif // __CONV_PMI_DEPRICATED_CONVERT_H
+1 -1
View File
@@ -17,7 +17,7 @@
class MATH_CLASS MbNamedAttributeContainer;
class MATH_CLASS MbFaceShell;
class MbFaceShell;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -13,9 +13,9 @@
#include <creator.h>
class MATH_CLASS MbSolid;
class MATH_CLASS MbBooleanOperationParams;
struct MATH_CLASS MbBooleanFlags;
class MbSolid;
class MbBooleanOperationParams;
struct MbBooleanFlags;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -13,11 +13,11 @@
#include <creator.h>
class MATH_CLASS MbCartPoint;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MATH_CLASS MbElementarySurface;
class MATH_CLASS MbEdge;
class MbCartPoint;
class MbCurve3D;
class MbSurface;
class MbElementarySurface;
class MbEdge;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -15,8 +15,8 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbSurface;
class MATH_CLASS MbContour;
class MbSurface;
class MbContour;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -12,7 +12,7 @@
#include <creator.h>
class MATH_CLASS MbDraftSolidParams;
class MbDraftSolidParams;
//------------------------------------------------------------------------------
/** \brief \ru Строитель оболочки с уклонёнными гранями.
+3 -2
View File
@@ -14,7 +14,7 @@
#include <op_duplication_parameter.h>
class MATH_CLASS MbFaceShell;
class MbFaceShell;
class MbRegTransform;
class MbRegDuplicate;
@@ -29,7 +29,8 @@ class MbRegDuplicate;
// ---
class MATH_CLASS MbDuplicationSolid : public MbCreator {
protected:
DuplicationValues * parameters; ///< \ru Параметры размножения. \en Parameters of duplication.
DuplicationValues * _parameters; ///< \ru Параметры размножения. \en Parameters of duplication.
c3d::ItemIndices _faceIndices; ///< \ru Индексы выбранных граней оболочки. \en Indices of selected shell faces.
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
+2 -2
View File
@@ -13,8 +13,8 @@
#include <creator.h>
#include <mb_enum.h>
class MATH_CLASS MbElementarySurface;
class MATH_CLASS MbElementarySolidParams;
class MbElementarySurface;
class MbElementarySolidParams;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -15,8 +15,8 @@
#include <cr_swept_solid.h>
#include <cur_contour_on_surface.h>
class MATH_CLASS MbEvolutionShellParams;
struct MATH_CLASS MeshSurfaceValues;
class MbEvolutionShellParams;
struct MeshSurfaceValues;
//------------------------------------------------------------------------------
/** \brief \ru Направляющая кинематической операции.
+1 -1
View File
@@ -14,7 +14,7 @@
#include <cr_swept_solid.h>
class MATH_CLASS MbRect;
class MbRect;
//------------------------------------------------------------------------------
+4 -17
View File
@@ -11,6 +11,7 @@
#include <solid.h>
#include <op_shell_parameter.h>
class MbFilletInternalMaker;
@@ -24,24 +25,13 @@ class MbFilletInternalMaker;
// ---
class MATH_CLASS MbFaceFilletMaker
{
c3d::SolidSPtr _initSolid; ///< \ru Исходная оболочка. \en Initial shell.
MbFilletInternalMaker * _impl; ///< \ru Реализация алгоритма. \en The algorithm implementation.
public:
/// \ru Способ подрезки базовых объектов скруглением. \en The method for cutting the base objects with the fillet.
enum class MbeModifySolidOption {
noCut, ///< \ru Не модифицировать базовые объекты. \en Do not modify the base objects.
cutFirstFaces, ///< \ru Подрезать только первый набор граней. \en Cut only the first set of faces.
cutSecondFaces, ///< \ru Подрезать только второй набор граней. \en Cut only the second set of faces.
sewAll ///< \ru Подрезать и сшить. \en Cut and sew.
};
public:
/// \ru Конструктор по телу. \en Constructor by a solid.
explicit MbFaceFilletMaker( const c3d::SolidSPtr & solid, MbeCopyMode sameShell, const MbSectionData & data );
/// \ru Конструктор по оболочке. \en Constructor by a shell.
explicit MbFaceFilletMaker( const c3d::ShellSPtr & solid, MbeCopyMode sameShell, const MbSectionData & data );
/// \ru Конструктор. \en Constructor.
explicit MbFaceFilletMaker( MbeCopyMode /*Будет удалено*/, const MbSectionData & data );
/// \ru Деструктор. \en Destructor.
~MbFaceFilletMaker();
@@ -52,10 +42,7 @@ public:
/// \ru Модифицировать базовые объекты указанными частями скругления. Если массив индексов пустой, то выполняется подрезка всеми частями скругления.
/// \en Modify base objects by the defines parts of the fillet. If indices array is empty then performed cutting with the all parts of the fillet.
///
MbResultType ModifyBaseObjects( const c3d::IndicesVector & partsIndicies, MbeModifySolidOption option, MbSectionResults & result );
/// \ru Построить скругления вместе с подрезкой базовых объектов за одну операцию. \en Create fillets together with cutting of base objects in a single operation.
MbResultType CreateFillets( MbeModifySolidOption option, const c3d::IndicesVector & partsIndicies, MbSectionResults & result );
MbResultType ModifyBaseObjects( const c3d::IndicesVector & partsIndicies, std::vector<MbSectionResults> & result );
/// \ru Получить параметры построения. \en Get the constructing parameters.
const MbSectionData & GetSectionData() const;
+1 -1
View File
@@ -14,7 +14,7 @@
#include <function.h>
struct MATH_CLASS MbEdgeFunction;
struct MbEdgeFunction;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -11,7 +11,7 @@
#include <creator.h>
class MATH_CLASS MbWireFrameFilletsParams;
class MbWireFrameFilletsParams;
//------------------------------------------------------------------------------
/** \brief \ru Строитель скругления каркаса.
+1 -1
View File
@@ -15,7 +15,7 @@
#include <cr_swept_solid.h>
#include <templ_sptr.h>
class MATH_CLASS MbLoftedSolidParams;
class MbLoftedSolidParams;
//------------------------------------------------------------------------------
/** \brief \ru Строитель оболочки тела по сечениям.
+2 -2
View File
@@ -17,8 +17,8 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MedianShellFaces;
class MbSNameMaker;
class MedianShellFaces;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -14,11 +14,11 @@
#include <creator.h>
class MATH_CLASS MbMesh;
class MATH_CLASS MbGrid;
class MATH_CLASS MbPolygon3D;
class MATH_CLASS MbApex3D;
class MATH_CLASS MbItem;
class MbMesh;
class MbGrid;
class MbPolygon3D;
class MbApex3D;
class MbItem;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -17,7 +17,7 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbFaceShell;
class MbFaceShell;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -12,9 +12,9 @@
#include <mb_operation_result.h>
class MATH_CLASS MbCreator;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbFaceShell;
class MbCreator;
class MbSNameMaker;
class MbFaceShell;
struct NurbsSurfaceValues;
class IProgressIndicator;
+4 -4
View File
@@ -17,10 +17,10 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbCreator;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbFaceShell;
struct MATH_CLASS NurbsSurfaceValues;
class MbCreator;
class MbSNameMaker;
class MbFaceShell;
struct NurbsSurfaceValues;
class IProgressIndicator;
+1 -1
View File
@@ -16,7 +16,7 @@
#include <vector>
class MATH_CLASS MbCurve3D;
class MbCurve3D;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -17,9 +17,9 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFaceShell;
class MbCurve3D;
class MbCurveEdge;
class MbFaceShell;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -18,11 +18,11 @@
#include <op_shell_parameter.h>
class MATH_CLASS MbFaceShell;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbOrientedEdge;
class MATH_CLASS MbLoop;
struct MATH_CLASS RuledSurfaceValues;
class MbFaceShell;
class MbCurveEdge;
class MbOrientedEdge;
class MbLoop;
struct RuledSurfaceValues;
//------------------------------------------------------------------------------
+10 -11
View File
@@ -18,8 +18,8 @@
#include <cr_face_fillet_maker.h>
class MATH_CLASS MbFaceShell;
class MATH_CLASS MbFaceFilletMaker;
class MbFaceShell;
class MbFaceFilletMaker;
//------------------------------------------------------------------------------
@@ -31,10 +31,10 @@ class MATH_CLASS MbFaceFilletMaker;
*/
// ---
class MATH_CLASS MbSectionShell : public MbCreator {
protected :
MbSectionData sectionData; ///< \ru Данные о поверхности переменного сечения. \en Data about mutable section surface.
MbFaceFilletMaker::MbeModifySolidOption cutOption; ///< \ru Способ подрезки базовых объектов скруглением. \en The method for cutting the base objects with the fillet.
c3d::IndicesVector partsIndicies;///< \ru Индексы частей скругления, которыми подрезать базовые объекты. \en Indices of the fillet parts by which to cut the base objects.
MbSectionData sectionData; ///< \ru Данные о поверхности переменного сечения. \en Data about mutable section surface.
c3d::IndicesVector partsIndicies;///< \ru Индексы частей скругления, которыми подрезать базовые объекты. \en Indices of the fillet parts by which to cut the base objects.
/** \brief \ru Конструктор.
\en Constructor. \~
@@ -43,7 +43,7 @@ protected :
\param[in] names - \ru Именователь грани оболочки.
\en Generating face names. \~
*/
MbSectionShell( const MbSectionData & data, MbFaceFilletMaker::MbeModifySolidOption option, const c3d::IndicesVector & indices = c3d::IndicesVector() );
MbSectionShell( const MbSectionData & data, const c3d::IndicesVector & indices = c3d::IndicesVector() );
private :
MbSectionShell( const MbSectionShell & init, MbRegDuplicate * ireg );
// \ru Объявление конструктора копирования без реализации, чтобы не было копирования по умолчанию. \en Declaration without implementation of the copy-constructor to prevent copying by default.
@@ -86,11 +86,9 @@ public :
\{ */
/// \ru Дать параметры. \en Get the parameters.
const MbSectionData & GetSectionData() { return sectionData; }
MbFaceFilletMaker::MbeModifySolidOption & GetCutOption() { return cutOption; }
const c3d::IndicesVector & GetIndices() { return partsIndicies; }
/// \ru Установить параметры. \en Set the parameters.
void SetSectionData( const MbSectionData & data ) { sectionData = data; }
void SetCutOption( MbFaceFilletMaker::MbeModifySolidOption option ) { cutOption = option; }
void SetIndices( const c3d::IndicesVector & indices ) { partsIndicies = indices; }
/** \} */
@@ -138,15 +136,16 @@ DEPRECATE_DECLARE_REPLACE( Create with MbFaceFilletMaker )
The function simultaneously creates the shell and its constructor.\n \~
\param[in] fMaker - \ru Генератор скруглений граней.
\en Maker of faces fillets. \~
\param[in] option - \ru Способ подрезки базовых объектов скруглением.
\en The method for cutting the base objects with the fillet. \~
\param[in] option - \ru Опция выбора результата.
\en Option for the result selection. \~
\param[in] indices - \ru Индексы частей скругления, которыми подрезать базовые объекты. Если массив индексов пустой, то выполняется подрезка всеми частями скругления.
\en Indices of the fillet parts by which to cut the base objects. If indices array is empty then performed cutting with the all parts of the fillet. \~
\result \ru Возвращает строитель.
\en Returns the constructor of operation. \~
*/
static
c3d::CreatorSPtr Create( const MbFaceFilletMaker & fMaker, MbFaceFilletMaker::MbeModifySolidOption option, const c3d::IndicesVector & indices = c3d::IndicesVector() );
c3d::CreatorSPtr Create( const MbFaceFilletMaker & fMaker,
const c3d::IndicesVector & indices = c3d::IndicesVector() );
private :
// \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default.
+1 -1
View File
@@ -15,7 +15,7 @@
#include <op_shell_parameter.h>
struct MATH_CLASS MbSheetMetalBend;
struct MbSheetMetalBend;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -14,8 +14,8 @@
#include <creator.h>
class MATH_CLASS MbFaceShell;
class MATH_CLASS MbSolid;
class MbFaceShell;
class MbSolid;
//------------------------------------------------------------------------------
/** \brief \ru Строитель оболочки тела без истории.
+9 -9
View File
@@ -26,15 +26,15 @@
class reader;
class writer;
class MATH_CLASS MbProperties;
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbSpaceItem;
class MATH_CLASS MbCurve;
class MATH_CLASS MbSurfaceIntersectionCurve;
class MATH_CLASS MbSNameMaker;
class MATH_CLASS MbSolid;
struct MATH_CLASS MbControlData3D;
class MbProperties;
class MbCartPoint3D;
class MbAxis3D;
class MbSpaceItem;
class MbCurve;
class MbSurfaceIntersectionCurve;
class MbSNameMaker;
class MbSolid;
struct MbControlData3D;
class MbRegDuplicate;
class MbRegTransform;
enum MbeSenseValue;
+1 -1
View File
@@ -14,7 +14,7 @@
#include <sheet_metal_param.h>
class MATH_CLASS MbPlacement3D;
class MbPlacement3D;
class MATH_CLASS MbCurveBoundedSurface;
+1 -1
View File
@@ -16,7 +16,7 @@
//#include <surf_plane.h>
class MATH_CLASS MbRemoveOperationResultParams;
class MbRemoveOperationResultParams;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -17,8 +17,8 @@
#include <templ_rp_array.h>
class MATH_CLASS MbCartPoint;
class MATH_CLASS MbSurface;
class MbCartPoint;
class MbSurface;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -13,7 +13,7 @@
#include <creator.h>
class MATH_CLASS MbSymmetrySolidParams;
class MbSymmetrySolidParams;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -14,7 +14,7 @@
#include <templ_dptr.h>
class MATH_CLASS MbTrimmedWireFrameParams;
class MbTrimmedWireFrameParams;
class MbTrimmedWireFrameInfo;
+9 -9
View File
@@ -18,15 +18,15 @@
#include <mb_operation_result.h>
class MATH_CLASS MbCurve;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbSpaceItem;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbFace;
class MATH_CLASS MbSolid;
class MATH_CLASS MbSNameMaker;
struct MATH_CLASS MbMergingFlags;
class MbCurve;
class MbAxis3D;
class MbSpaceItem;
class MbPlacement3D;
class MbCurve3D;
class MbFace;
class MbSolid;
class MbSNameMaker;
struct MbMergingFlags;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -16,8 +16,8 @@
#include <topology_faceset.h>
#include <name_item.h>
class MATH_CLASS MbVertex;
class MATH_CLASS MbCurveEdge;
class MbVertex;
class MbCurveEdge;
class MATH_CLASS MbPointFrame;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbCreator;
+11 -11
View File
@@ -17,19 +17,19 @@
#include <vector>
class MATH_CLASS reader;
class MATH_CLASS writer;
class MATH_CLASS IProgressIndicator;
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbVector3D;
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbMatrix3D;
class MATH_CLASS MbSpaceItem;
class MATH_CLASS MbFaceShell;
class reader;
class writer;
class IProgressIndicator;
class MbCartPoint3D;
class MbVector3D;
class MbAxis3D;
class MbMatrix3D;
class MbSpaceItem;
class MbFaceShell;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbPointFrame;
class MATH_CLASS MbProperties;
struct MATH_CLASS MbControlData3D;
class MbProperties;
struct MbControlData3D;
class MbRegDuplicate;
class MbRegTransform;
enum MbeCopyMode;
+2 -2
View File
@@ -19,8 +19,8 @@
#include <mb_dim_accuracy.h>
class MATH_CLASS MbLine;
class MATH_CLASS MbContour;
class MbLine;
class MbContour;
class MbTrimmedCurve;
class MbRect1D;
class DiskreteLengthData;
+1 -1
View File
@@ -21,7 +21,7 @@ constexpr size_t CONIC_COUNT = 32;
constexpr size_t LINES_COUNT = 10;
class MATH_CLASS MbArc;
class MbArc;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -15,8 +15,8 @@
#include <curve3d.h>
class MATH_CLASS MbNurbs3D;
class MATH_CLASS MbNurbs;
class MbNurbs3D;
class MbNurbs;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -16,7 +16,7 @@
#include <mb_dim_accuracy.h>
class MATH_CLASS MbArc;
class MbArc;
class MbRegDuplicate;
class MbRegTransform;
+2 -2
View File
@@ -14,8 +14,8 @@
#include <cur_polycurve3d.h>
class MATH_CLASS MbBezier;
class MATH_CLASS MbArc3D;
class MbBezier;
class MbArc3D;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -17,7 +17,7 @@
#include <vector>
class MATH_CLASS MbFunction;
class MbFunction;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -20,8 +20,8 @@
#include <vector>
class MATH_CLASS MbFunction;
class MATH_CLASS MbCharacterCurve;
class MbFunction;
class MbCharacterCurve;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -19,7 +19,7 @@
#include <mb_cube_tree.h>
class MATH_CLASS MbArc;
class MbArc;
class SimpleNameArray;
class MbCurveIntoNurbsInfo;
+2 -2
View File
@@ -315,8 +315,8 @@ public:
/// \ru Получить границы участков кривой, которые описываются одной аналитической функцией. \en Get the boundaries of the curve sections that are described by one analytical function. \~
void GetAnalyticalFunctionsBounds( std::vector<double> & params ) const override;
/// \ru Найти все особые точки функции кривизны кривой. \en Find all the special points of the curvature function of the curve.
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points ) const override;
/// \ru Найти все особые точки функции кривизны кривой и вычислить значение потенциальной энергии кривой. \en Find all the special points of the curvature function of the curve and calculate potential energy of the curve.
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points, double * energy = nullptr ) const override;
/// \ ru Определение точек излома контура. \en The determination of contour smoothness break points.
void BreakPoints( std::vector<double> & vBreaks, double precision = ANGLE_REGION ) const override;
+1 -1
View File
@@ -15,7 +15,7 @@
#include <surf_plane.h>
class MATH_CLASS MbAxis3D;
class MbAxis3D;
//------------------------------------------------------------------------------
+8 -8
View File
@@ -16,12 +16,12 @@
#include <cur_surface_curve.h>
class MATH_CLASS MbMatrix;
class MATH_CLASS MbContour;
class MATH_CLASS MbSurface;
class MATH_CLASS MbSurfaceCurve;
class MATH_CLASS MbContour3D;
class MATH_CLASS MbCurveTessellation;
class MbMatrix;
class MbContour;
class MbSurface;
class MbSurfaceCurve;
class MbContour3D;
class MbCurveTessellation;
class MbCurveIntoNurbsInfo;
class MbSegmentsSearchTree;
@@ -204,8 +204,8 @@ public :
// \ru Получить границы участков кривой, которые описываются одной аналитической функцией. \en Get the boundaries of the curve sections that are described by one analytical function. \~
void GetAnalyticalFunctionsBounds( std::vector<double> & params ) const override;
// \ru Найти все особые точки функции кривизны кривой. \en Find all the special points of the curvature function of the curve.
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points ) const override;
// \ru Найти все особые точки функции кривизны кривой и вычислить значение потенциальной энергии кривой. \en Find all the special points of the curvature function of the curve and calculate potential energy of the curve.
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points, double * energy = nullptr ) const override;
// \ru Непрерывна ли первая производная? \en Have the first derivative the continuous?
bool IsContinuousDerivative( bool & contLength, bool & contDirect, c3d::DoubleVector * params = nullptr, double epsilon = EPSILON ) const override;
// \ru Устранить разрывы первых производных по длине. \en Eliminate the discontinuities of the first derivative at length.
+1 -1
View File
@@ -14,7 +14,7 @@
#include <cur_polycurve3d.h>
class MATH_CLASS MbHermit;
class MbHermit;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -14,7 +14,7 @@
#include <curve3d.h>
class MATH_CLASS MbLine;
class MbLine;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -15,7 +15,7 @@
#include <mb_rect1d.h>
class MATH_CLASS MbLine;
class MbLine;
class DiskreteLengthData;
+3 -3
View File
@@ -14,9 +14,9 @@
#include <curve3d.h>
class MATH_CLASS MbLineSegment;
class MATH_CLASS MbLine3D;
class MATH_CLASS MbCurveExtensionParameters;
class MbLineSegment;
class MbLine3D;
class MbCurveExtensionParameters;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -23,9 +23,9 @@
#include <iterator>
class MATH_CLASS MbLine;
class MATH_CLASS MbBezier;
class MATH_CLASS MbContour;
class MbLine;
class MbBezier;
class MbContour;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -23,8 +23,8 @@
#include <iterator>
class MATH_CLASS MbNurbs;
class MATH_CLASS MbBezier3D;
class MbNurbs;
class MbBezier3D;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -17,7 +17,7 @@
#include <mb_cube.h>
class MATH_CLASS MbSpine;
class MbSpine;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -17,7 +17,7 @@
#include <mb_cube.h>
class MATH_CLASS MbContour;
class MbContour;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -14,9 +14,9 @@
#include <vector>
class MATH_CLASS MbLineSegment;
class MATH_CLASS MbCubicSpline;
class MATH_CLASS MbContour;
class MbLineSegment;
class MbCubicSpline;
class MbContour;
class MbRegDuplicate;
class MbRegTransform;
class MbPolylineSearchTree;
+2 -2
View File
@@ -17,8 +17,8 @@
#include <vector>
class MATH_CLASS MbPolyline;
class MATH_CLASS MbItem;
class MbPolyline;
class MbItem;
//------------------------------------------------------------------------------
+4 -4
View File
@@ -19,10 +19,10 @@
#include <mb_cart_point3d.h>
class MATH_CLASS MbAxis3D;
class MATH_CLASS MbMatrix3D;
class MATH_CLASS MbCurve3D;
class MATH_CLASS MbSurface;
class MbAxis3D;
class MbMatrix3D;
class MbCurve3D;
class MbSurface;
class MbRegTransform;
class MbRegDuplicate;
class MbCurveIntoNurbsInfo;
+3 -3
View File
@@ -168,9 +168,9 @@ public :
bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = nullptr ) const override;
// \ru Определение точек касания изоклины \en Determination of tangent points of isocline
void GetIsoclinal( const MbVector3D & nor, SArray<double> & tIso ) const override;
/// \ru Найти все особые точки функции кривизны кривой.
/// \en Find all the special points of the curvature function of the curve.
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points ) const override;
/// \ru Найти все особые точки функции кривизны кривой и вычислить значение потенциальной энергии кривой.
/// \en Find all the special points of the curvature function of the curve and calculate potential energy of the curve. \~
void GetCurvatureSpecialPoints( std::vector<c3d::DoublePair> & points, double * energy = nullptr ) const override;
/// \ ru Определение точек излома кривой. \en The determination of curve smoothness break points.
void BreakPoints( std::vector<double> & vBreaks, double precision = ANGLE_REGION ) const override;
+2 -1
View File
@@ -186,7 +186,8 @@ private:
MbeNewtonResult SilhouetteNewton( const MbCartPoint3D & point, const MbVector3D & vector,
const MbRect & wrkRect, // \ru Рабочая область поиска \en Working region of search
double funcEpsilon, size_t iterLimit,
double & u, double & v ) const;
double & u, double & v,
MbCartPoint3D * pnt = nullptr ) const;
private:
/// \ru Построить точную пространственную копию кривой. \en Construct the exact spatial curve copy.
+5 -5
View File
@@ -19,13 +19,13 @@
#include <surf_tessellation.h>
class MATH_CLASS MbRect;
class MATH_CLASS MbPlacement3D;
class MATH_CLASS MbCurve;
class MATH_CLASS MbSurface;
class MbRect;
class MbPlacement3D;
class MbCurve;
class MbSurface;
class MATH_CLASS MbSurfaceIntersectionCurve;
class MATH_CLASS MbContourOnSurface;
class MATH_CLASS MbCurveTessellation;
class MbCurveTessellation;
class MbCurveIntoNurbsInfo;

Some files were not shown because too many files have changed in this diff Show More