Files
Extern/C3d/Include/op_curve_parameter.h
T
2021-04-30 17:06:43 +02:00

181 lines
9.9 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Параметры операций над кривыми.
\en Parameters of operations on the curves. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __OP_CURVE_PARAMETERS_H
#define __OP_CURVE_PARAMETERS_H
#include <math_version.h>
#include <math_define.h>
#include <templ_sptr.h>
#include <mb_vector3d.h>
#include <mb_axis3d.h>
#include <curve3d.h>
#include <surface.h>
#include <topology.h>
//------------------------------------------------------------------------------
/** \brief \ru Параметры кривой пересечения поверхностей.
\en Parameters of an surface intersection curve. \~
\details \ru Параметры эквидистантной кривой в пространстве по трехмерной кривой и вектору направления. \n
\en Parameters of an offset curve in space from a three-dimensional curve and a direction vector. \n \~
\ingroup Build_Parameters
*/ // ---
struct MATH_CLASS MbIntCurveParams {
public:
bool mergeCurves; ///< \ru Объединять кривые, разрезанные швом. \en Merge curves cut by a surface seam.
bool cutCurves; ///< \ru Разрезать кривые в точках пересечения. \en Cut curves at intersection points.
protected:
const MbSNameMaker & snMaker; ///< \ru Именователь с версией операции. \en Names maker with operation version.
public:
/** \brief \ru Конструктор.
\en Constructor. \~
\details \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\param[in] _mergeCurves - \ru Объединять кривые, разрезанные швом.
\en Merge curves cut by a surface seam. \~
\param[in] _cutCurves - \ru Разрезать кривые в точках пересечения.
\en Cut curves at intersection points. \~
\param[in] _snMaker - \ru Именователь с версией операции.
\en Names maker with operation version. \~
*/
MbIntCurveParams( const MbSNameMaker & _snMaker )
: mergeCurves( true )
, cutCurves ( false )
, snMaker ( _snMaker )
{
if ( _snMaker.GetMathVersion() > MATH_19_VERSION ) // KOMPAS-39273 + KOMPAS-40408
cutCurves = true;
}
/** \brief \ru Конструктор.
\en Constructor. \~
\details \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\param[in] _cutCurves - \ru Разрезать кривые в точках пересечения.
\en Cut curves at intersection points. \~
\param[in] _snMaker - \ru Именователь с версией операции.
\en Names maker with operation version. \~
*/
MbIntCurveParams( bool _cutCurves, const MbSNameMaker & _snMaker )
: mergeCurves( true )
, cutCurves ( _cutCurves )
, snMaker ( _snMaker )
{}
/** \brief \ru Конструктор.
\en Constructor. \~
\details \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\param[in] _mergeCurves - \ru Объединять кривые, разрезанные швом.
\en Merge curves cut by a surface seam. \~
\param[in] _cutCurves - \ru Разрезать кривые в точках пересечения.
\en Cut curves at intersection points. \~
\param[in] _snMaker - \ru Именователь с версией операции.
\en Names maker with operation version. \~
*/
MbIntCurveParams( bool _mergeCurves, bool _cutCurves, const MbSNameMaker & _snMaker )
: mergeCurves( _mergeCurves )
, cutCurves ( _cutCurves )
, snMaker ( _snMaker )
{}
public:
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return snMaker; }
OBVIOUS_PRIVATE_COPY( MbIntCurveParams )
};
//------------------------------------------------------------------------------
/** \brief \ru Параметры эквидистантной кривой в пространстве.
\en Parameters of an offset curve in space. \~
\details \ru Параметры эквидистантной кривой в пространстве по трехмерной кривой и вектору направления. \n
\en Parameters of an offset curve in space from a three-dimensional curve and a direction vector. \n \~
\ingroup Build_Parameters
*/ // ---
struct MATH_CLASS MbSpatialOffsetCurveParams {
public:
MbVector3D offsetVect; ///< \ru Вектор, задающий смещение в точке кривой. \en The displacement vector at a point of the curve.
bool useFillet; ///< \ru Если true, то разрывы заполнять скруглением, иначе продолженными кривыми. \en If 'true', the gaps are to be filled with fillet, otherwise with the extended curves.
bool keepRadius; ///< \ru Если true, то в существующих скруглениях сохранять радиусы. \en If 'true', the existent fillet radii are to be kept.
bool bluntAngle; ///< \ru Если true, то в притуплять острые углы. \en If 'true', sharp corners are to be blunt.
bool fromBeg; ///< \ru Вектор смещения привязан к началу (если true). \en The translation vector is associated with the beginning (if true).
protected:
bool useSurfaceNormal; ///< \ru Эквидистанта согласована с нормалью к поверхности. \en Offset point is moved according to surface normal.
c3d::ConstSurfaceSPtr surface; ///< \ru Поверхность кривой или подобная ей. \en Curve's surface or similar to such surface.
const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSpatialOffsetCurveParams( const MbVector3D & v, const MbSNameMaker & nm )
: offsetVect ( v )
, useFillet ( false )
, keepRadius ( false )
, bluntAngle ( false )
, fromBeg ( true )
, useSurfaceNormal( false )
, surface ( c3d_null )
, snMaker ( nm )
{}
public:
/// \ru Установка режима по поверхности, переносится ли эквидистантная точка согласованно с нормалью к поверхности. \en Setting the mode whether offset point is moved according to surface normal or not.
void SetBySurfaceNormal( bool set, c3d::ConstSurfaceSPtr * s = c3d_null )
{
if ( set ) {
useSurfaceNormal = set;
if ( s != c3d_null )
surface = *s;
}
else {
useSurfaceNormal = false;
surface = c3d_null;
}
}
/// \ru Получить поверхность. \en Get surface.
bool BySurfaceNormal() const { return useSurfaceNormal; }
/// \ru Получить поверхность. \en Get surface.
const c3d::ConstSurfaceSPtr & GetSurface() const { return surface; }
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return snMaker; }
OBVIOUS_PRIVATE_COPY( MbSpatialOffsetCurveParams )
};
//------------------------------------------------------------------------------
/** \brief \ru Параметры эквидистантной кривой на поверхности.
\en Parameters of an offset curve on a surface. \~
\details \ru Параметры эквидистантной кривой на поверхности по поверхностной кривой и значению смещения. \n
\en Parameters of an offset curve on surface from a curve on the surface and a shift value. \n \~
\ingroup Build_Parameters
*/ // ---
struct MATH_CLASS MbSurfaceOffsetCurveParams {
public:
c3d::ConstFaceSPtr face; ///< \ru Грань, на которой строится эквидистанта. \en The face on which to build the offset curve.
MbAxis3D dirAxis; ///< \ru Направление смещения с точкой приложения. \en The offset direction with a reference point.
double dist; ///< \ru Величина смещения. \en The offset distance.
protected:
const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSurfaceOffsetCurveParams( const MbFace & f, const MbAxis3D & a, double d, const MbSNameMaker & nm )
: face ( &f )
, dirAxis( a )
, dist ( d )
, snMaker( nm )
{}
public:
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return snMaker; }
OBVIOUS_PRIVATE_COPY( MbSurfaceOffsetCurveParams )
};
#endif // __OP_CURVE_PARAMETERS_H