- C3d aggiornamento delle librerie.
This commit is contained in:
Dario Sassi
2020-11-21 18:27:05 +00:00
parent d5b135998e
commit 905577a744
97 changed files with 3002 additions and 1177 deletions
+18 -6
View File
@@ -45,6 +45,8 @@ class IProgressIndicator;
\en Check if the closed shell can be subdivided into separate parts with inclusion analysis. \n \~
\param[in] shell - \ru Исходная оболочка.
\en The initial shell. \~
\param[in] checkNesting - \ru Включить анализ вложенности оболочек.
\en Do nesting analysis of shells. \~
\result \ru Возвращает true, если оболочка состоит из нескольких частей.
\en Returns 'true' if the shell consists of several parts. \~
\ingroup Algorithms_3D
@@ -68,12 +70,14 @@ MATH_FUNC (bool) IsMultiShell( const MbFaceShell * shell, bool checkNesting = tr
\en The shells separated from 'shell'. \~
\param[in] sort - \ru Выполнять ли сортировку частей оболочки по убыванию габарита?
\en If 'sort' == true, the parts separated from the initial shell will be sorted by bounding box size in descending order. \~
\param[out] partIndices - \ru Индексы позиций частей оболочки при разделении на части до сортировки по габариту (количество индексов - количество частей parts + 1). Последний индекс - индекс части shell.
\en Positions' indices of shell parts when dividing into parts before sorting by size (number of indices is number of parts + 1). The last index is the index of the "shell". \~
\result \ru Возвращает количество оболочек в parts.
\en Returns number of shells in 'parts'. \~
\ingroup Algorithms_3D
*/
// ---
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray<MbFaceShell> & parts, bool sort );
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray<MbFaceShell> & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR );
//------------------------------------------------------------------------------
@@ -91,12 +95,14 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, RPArray<MbFaceShell> & par
\en The shells separated from 'shell'. \~
\param[in] sort - \ru Выполнять ли сортировку частей оболочки по убыванию габарита?
\en If 'sort' == true, the parts separated from the initial shell will be sorted by bounding box size in descending order. \~
\param[out] partIndices - \ru Индексы позиций частей оболочки при разделении на части до сортировки по габариту (количество индексов - количество частей parts + 1). Последний индекс - индекс части shell.
\en Positions' indices of shell parts when dividing into parts before sorting by size (number of indices is number of parts + 1). The last index is the index of the "shell". \~
\result \ru Возвращает количество оболочек в parts.
\en Returns number of shells in 'parts'. \~
\ingroup Algorithms_3D
*/
// ---
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts, bool sort );
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR );
//------------------------------------------------------------------------------
@@ -114,12 +120,14 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsVector & parts,
\en The shells separated from 'shell'. \~
\param[in] sort - \ru Выполнять ли сортировку частей оболочки по убыванию габарита?
\en If 'sort' == true, the parts separated from the initial shell will be sorted by bounding box size in descending order. \~
\param[out] partIndices - \ru Индексы позиций частей оболочки при разделении на части до сортировки по габариту (количество индексов - количество частей parts + 1). Последний индекс - индекс части shell.
\en Positions' indices of shell parts when dividing into parts before sorting by size (number of indices is number of parts + 1). The last index is the index of the "shell". \~
\result \ru Возвращает количество оболочек в parts.
\en Returns number of shells in 'parts'. \~
\ingroup Algorithms_3D
*/
// ---
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & parts, bool sort );
MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & parts, bool sort, c3d::IndicesVector * partIndices = C3D_NULL_PTR );
//------------------------------------------------------------------------------
@@ -141,12 +149,16 @@ MATH_FUNC (size_t) DetachShells( MbFaceShell & shell, c3d::ShellsSPtrVector & pa
*/
// ---
template <class ShellsVector>
size_t CreateShells( MbFaceShell & shell, ShellsVector & parts, bool sort = true )
size_t CreateShells( const MbFaceShell & shell, ShellsVector & parts, bool sort = true )
{
c3d::ShellSPtr outer( new MbFaceShell( shell ) ); // new shell on the same faces (новая оболочка с теми же гранями)
if ( ::DetachShells( *outer, parts, sort ) > 0 )
parts.push_back( ::DetachItem( outer ) );
c3d::IndicesVector * partIndices = C3D_NULL_PTR;
if ( ::DetachShells( *outer, parts, sort, partIndices ) > 0 ) {
parts.push_back( outer );
::DetachItem( outer );
}
return parts.size();
}
+58 -16
View File
@@ -824,10 +824,21 @@ MATH_FUNC (MbResultType) CreateFairBSplineCurveOnTangentPolyline( MbCurve3D *
MATH_FUNC(MbResultType) CreateFairBezierCurveOnBasePolyline( MbCurve3D * polyline,
MbFairCurveData & data,
MbCurve3D *& result);
//------------------------------------------------------------------------------
// Создать плавную кривую Безье сопряжения.
// ---
MATH_FUNC(MbResultType) CreateFairBezierFilletOnPolyline( MbCurve3D * pllne,
/** \brief \ru Создать плавную кривую Безье сопряжения на опорной ломаной.
\en Create a fair Bezier curve on base polyline. \~
\details \ru Создать плавную V-кривую на опорной ломаной и аппроксимировать рациональной кубической кривой Безье. \n
\param[in] polyline - \ru Исходная ломаная. \en An initial polyline. \~
\param[in] data - \ru Данные построения кривой. \en The curve construction data. \~
\param[out] resCurve - \ru Сплайновая кривая. \en The spline curve. \~
\return \ru Возвращает код результата операции. \en Returns operation result code. \~
\ingroup Curve3D_Modeling
*/
//---
MATH_FUNC( MbResultType ) CreateFairBezierFilletOnPolyline( MbCurve3D * pllne,
MbFairCurveData & data,
MbCurve3D *& resCurve );
@@ -1162,7 +1173,7 @@ MATH_FUNC(MbResultType) SubdivideNurbs( MbNurbs3D * curve,
//------------------------------------------------------------------------------
/** \brief \ru Выделить участок NURBS кривой / изменить формат NURBS кривой.
\en To extrct part of NURBS curve / change the format of the NURBS curve. \~
\en To extract part of NURBS curve / change the format of the NURBS curve. \~
\details \ru Выделить участок NURBS кривой / изменить формат NURBS кривой. \n
В data устанавливаются переменые преобразований. Выделямый участок определяется номером начального сегмента в переменной numSegment
и количеством сегментов в переменной numSegments. Выходной формат сплайна определяется в переменной outFormat.
@@ -1187,10 +1198,27 @@ MATH_FUNC(MbResultType) ExtractChangeNurbs( MbNurbs3D * curve,
MbCurve3D *& result );
//------------------------------------------------------------------------------
// Выделить участок / изменить формат NURBS кривой.
// Передать параметры созданной.
/** \brief \ru Выделить участок NURBS кривой / изменить формат NURBS кривой. Выдать параметры созданной кривой.
\en To extract part of NURBS curve / change the format of the NURBS curve. Return parameters of created curve.\~
\details \ru Выделить участок NURBS кривой / изменить формат NURBS кривой. Выдать параметры созданной кривой. \n
В data устанавливаются переменые преобразований. Выделямый участок определяется номером начального сегмента в переменной numSegment
и количеством сегментов в переменной numSegments. Выходной формат сплайна определяется в переменной outFormat.
При значении 2 - NURBS кривая с управляющим S-полигоном. При значении 3 - рациональная кривая Безье
с управляющим GB-полигоном.
\en To extract part of NURBS curve / change the format of the NURBS curve. Return parameters of created curve. \n
Transformation variables are set in data. The extracting part is determined by the number of the starting segment in the variable numSegment and the number of segments in the variable numSegments.
The output spline format is defined in the outFormat variable.    If the value is 2 - NURBS curve with control S-polygon. If the value is 3 - rational Bezier curve with GB-control polygon.\~
\param[in] curve - \ru Исходная кривая. \en An initial curve. \~
\param[in] data - \ru Данные построения и преобразования кривой. \en Curve construction and transformation data. \~
\param[out] resWts - \ru Веса результирующей кривой. \en Weights of the result curve. \~
\param[out] resKnots - \ru Узлы результирующей кривой. \en Knots of the result curve. \~
\param[out] result - \ru Сплайновая кривая. \en The spline curve. \~
\return \ru Возвращает значение результата операции.
\en Returns operation result value.
\ingroup Curve3D_Modeling
*/
// ---
MATH_FUNC(MbResultType) ExtractChangeNurbsParams( MbNurbs3D * curve,
MATH_FUNC( MbResultType ) ExtractChangeNurbsParams( MbNurbs3D * curve,
MbFairCurveData & data,
SArray<double> & resWts,
SArray<double> & resKnots,
@@ -1215,16 +1243,30 @@ MATH_FUNC(MbResultType) ExtractChangeNurbsParams( MbNurbs3D * curve,
\ingroup Curve3D_Modeling
*/
// ---
MATH_FUNC(MbResultType) AddKnotNurbs( MbNurbs3D * curve,
MbFairCurveData & data,
MbCurve3D *& result );
MATH_FUNC( MbResultType ) AddKnotNurbs( MbNurbs3D * curve,
MbFairCurveData & data,
MbCurve3D *& result );
//-----------------------------------------------------
/** \brief \ru Выполнить вставку узла в односегментную NURBS кривую произвольного формата.
\en Insert a knot into the onesegmented NURBS curve \~
\details \ru Выполнить вставку узла в односегментную NURBS кривую произвольного формата.\n
Выходным параметром метода является NURBS кривая первого или второго сегмента. \n
\en Insert a knot into the onesegmented NURBS curve.\n
The output parameter of the method is a NURBS curve of first segment. \~
\param[in] curve - \ru NURBS кривая в произвольном формате. \en NURBS curve in any format. \~
\param[in] data - \ru Данные построения кривой. \en The curve construction data. \~
\param[out] result - \ru NURBS Кривая. \en NURBS curve. \~
\return \ru Возвращает значение результата операции. \en Returns operation result value.
\ingroup Curve3D_Modeling
*/
MATH_FUNC( MbResultType ) ExtractExtrapolFromSegment( MbNurbs3D * curve,
MbFairCurveData & data,
MbCurve3D *& resCurve );
//------------------------------------------------------------------------------
// Вставить узел в NURBS кривую и выделить один сегмент.
// ---
MATH_FUNC(MbResultType)ExtractExtrapolFromSegment( MbNurbs3D * curve,
MbFairCurveData & data,
MbCurve3D *& resCurve );
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать конический NURBzS в конический NURBS.
+23 -23
View File
@@ -476,7 +476,7 @@ MATH_FUNC (MbResultType) BendSheetSolidOverSegment( MbSolid &
MbCurve3D & curve,
bool unbended,
const MbBendOverSegValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -529,7 +529,7 @@ MATH_FUNC (MbResultType) SheetSolidJog( MbSolid & solid,
bool unbended,
const MbJogValues & jogParams,
const MbBendValues & secondBendParams,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
RPArray<MbFace> & firstBendFaces,
RPArray<MbFace> & secondBendFaces,
MbSolid *& result );
@@ -570,7 +570,7 @@ MATH_FUNC (MbResultType) BendSheetSolid( MbSolid & solid
const RPArray<MbSheetMetalBend> & bends,
const MbFace & fixedFace,
const MbCartPoint & fixedPoint,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -611,7 +611,7 @@ MATH_FUNC (MbResultType) UnbendSheetSolid( MbSolid & sol
const RPArray<MbSheetMetalBend> & bends,
const MbFace & fixedFace,
const MbCartPoint & fixedPoint,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result,
RPArray<MbContour3D> * ribContours = NULL );
@@ -761,7 +761,7 @@ MATH_FUNC (MbResultType) BendSheetSolidByEdges( MbSolid & s
const RPArray<MbCurveEdge> & edges,
const bool unbended,
const MbBendByEdgeValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
RPArray<MbSMBendNames> & resultBends,
MbSolid *& result );
@@ -772,7 +772,7 @@ MATH_FUNC (MbResultType) BendSheetSolidByEdges( MbSolid & so
const RPArray<MbCurveEdge> & edges,
const bool unbended,
const MbBendByEdgeValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -829,7 +829,7 @@ MATH_FUNC (MbResultType) SheetSolidJointBend( MbSolid &
const RPArray<MbCurveEdge> & edges,
const bool unbended,
const MbJointBendValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
RPArray< RPArray<MbSMBendNames> > & resultBends,
MbSolid *& result );
@@ -869,7 +869,7 @@ MATH_FUNC (MbResultType) CloseCorner( MbSolid & solid,
MbCurveEdge * curveEdgePlus,
MbCurveEdge * curveEdgeMinus,
const MbClosedCornerValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -941,7 +941,7 @@ MATH_FUNC (MbResultType) CreateStampParts( const MbFace * face,
const MbContour & contour,
const MbStampingValues & params,
const double thickness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -953,7 +953,7 @@ MATH_FUNC (MbResultType) CreateStampParts( const MbPlacement3D & placement,
const MbContour & contour,
const MbStampingValues & params,
const double thickness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -996,7 +996,7 @@ MATH_FUNC (MbResultType) Stamp( MbSolid & solid,
const MbPlacement3D & placement,
const MbContour & contour,
const MbStampingValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -1077,7 +1077,7 @@ MATH_FUNC (MbResultType) CreateSphericalStampParts( const MbFace * fac
const MbStampingValues & params,
const double thickness,
const MbCartPoint & center,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1089,7 +1089,7 @@ MATH_FUNC (MbResultType) CreateSphericalStampParts( const MbPlacement3D & pl
const MbStampingValues & params,
const double thickness,
const MbCartPoint & center,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1128,7 +1128,7 @@ MATH_FUNC (MbResultType) SphericalStamp( MbSolid & solid,
const MbPlacement3D & placement,
const MbStampingValues & params,
const MbCartPoint & center,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -1168,7 +1168,7 @@ MATH_FUNC (MbResultType) CreateBeadParts( const MbFace * face,
const SArray<MbCartPoint> & centers,
const MbBeadValues & params,
const double thinkness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1181,7 +1181,7 @@ MATH_FUNC (MbResultType) CreateBeadParts( const MbPlacement3D & placement,
const SArray<MbCartPoint> & centers,
const MbBeadValues & params,
const double thinkness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1225,7 +1225,7 @@ MATH_FUNC (MbResultType) CreateBead( MbSolid & solid,
const RPArray<MbContour> & contours,
const SArray<MbCartPoint> & centers,
const MbBeadValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -1236,7 +1236,7 @@ MATH_FUNC (MbResultType) CreateBead( MbSolid & solid,
const MbPlacement3D & placement,
const RPArray<MbContour> & contours,
const MbBeadValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -1273,7 +1273,7 @@ MATH_FUNC (MbResultType) CreateJalousieParts( const MbFace * fac
const RPArray<MbLineSegment> & segments,
const MbJalousieValues & params,
const double thickness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1285,7 +1285,7 @@ MATH_FUNC (MbResultType) CreateJalousieParts( const MbPlacement3D & pla
const RPArray<MbLineSegment> & segments,
const MbJalousieValues & params,
const double thickness,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& partToAdd,
MbSolid *& partToSubtract );
@@ -1328,7 +1328,7 @@ MATH_FUNC (MbResultType) CreateJalousie( MbSolid & solid,
const MbPlacement3D & placement,
const RPArray<MbLineSegment> & segments,
const MbJalousieValues & params,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -1442,7 +1442,7 @@ MATH_FUNC (MbResultType) RestoreSideEdges( MbSolid & sol
const RPArray<MbFace> & outerFaces,
const bool strict,
RPArray<MbSheetMetalBend> & bends,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
@@ -2387,7 +2387,7 @@ MATH_FUNC (MbResultType) ConvertSolidToSheetMetal( MbSolid &
const MbFace & initFace,
bool sence,
MbSolidToSheetMetalValues & parameters,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbSolid *& result );
+1 -1
View File
@@ -28,7 +28,7 @@ class MATH_CLASS MbSolid;
\ingroup Algorithms_3D
*/
// ---
struct PrimitiveDifference {
struct MATH_CLASS PrimitiveDifference {
public:
/// \ru Типы различий в именовании \en Types of naming differences
enum DifferenceType
+1 -1
View File
@@ -15,7 +15,7 @@
#include <mb_variables.h>
const_expr uint __RGB__ = 3;
c3d_constexpr uint __RGB__ = 3;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -24,8 +24,8 @@
*/
class MATH_CLASS MbSheetFlangingAttribute : public MbCommonAttribute {
protected :
MbBendByEdgeValues params; ///< \ru Параметры операции. \en The operation parameters.
MbSNameMaker names; ///< \ru Именователь операции. \en An object defining names generation in the operation.
MbBendByEdgeValues params; ///< \ru Параметры операции. \en The operation parameters.
SPtr<MbSNameMaker> names; ///< \ru Именователь операции. \en An object defining names generation in the operation.
public :
/// \ru Конструктор. \en Constructor.
@@ -68,7 +68,7 @@ public:
/// \ru Дать параметры операции. \en Get operation parameters.
const MbBendByEdgeValues & GetFlangeValues() const { return params; }
/// \ru Дать именователь операции. \en Get an object defining a name of the operation.
const MbSNameMaker & GetNameMaker() const { return names; }
const MbSNameMaker & GetNameMaker() const { return *names; }
DECLARE_PERSISTENT_CLASS( MbSheetFlangingAttribute )
OBVIOUS_PRIVATE_COPY( MbSheetFlangingAttribute )
+6 -6
View File
@@ -29,11 +29,11 @@
class MATH_CLASS MbStampRibAttribute : public MbGeomAttribute
{
protected :
size_t index; ///< \ru Индекс сегмента в контуре, от которого будет установлено направление уклона. \en Index of a segment in the contour at which the inclination direction will be set.
SheetRibValues pars; ///< \ru Параметры операции. \en The operation parameters.
MbSNameMaker names; ///< \ru Именователь операции. \en An object defining names generation in the operation.
MbVector3D bendNorm; ///< \ru Нормаль поверхности сгиба (только для внутреннего использования). \en A normal to bend surface (for internal usage only).
MbCartPoint3D bendPoint; ///< \ru Точка на оси сгиба сгиба (только для внутреннего использования). \en A point on bend axis (for internal usage only).
size_t index; ///< \ru Индекс сегмента в контуре, от которого будет установлено направление уклона. \en Index of a segment in the contour at which the inclination direction will be set.
SheetRibValues pars; ///< \ru Параметры операции. \en The operation parameters.
SPtr<MbSNameMaker> names; ///< \ru Именователь операции. \en An object defining names generation in the operation.
MbVector3D bendNorm; ///< \ru Нормаль поверхности сгиба (только для внутреннего использования). \en A normal to bend surface (for internal usage only).
MbCartPoint3D bendPoint; ///< \ru Точка на оси сгиба сгиба (только для внутреннего использования). \en A point on bend axis (for internal usage only).
private:
// \ru Конструктор копирования. \en Copy constructor.
MbStampRibAttribute( const MbStampRibAttribute & init, MbRegDuplicate * iReg );
@@ -75,7 +75,7 @@ public:
/// \ru Дать параметры операции. \en Get operation parameters.
const SheetRibValues & GetRibValues() const { return pars; }
/// \ru Дать именователь операции. \en Get an object defining a name of the operation.
const MbSNameMaker & GetNameMaker() const { return names; }
const MbSNameMaker & GetNameMaker() const { return *names; }
/// \ru Дать нормаль к поверхности сгиба. \en Get normal to bend surface.
const MbVector3D & GetBendNormal() const { return bendNorm; }
/// \ru Установить нормаль к поверхности сгиба. \en Set normal to bend surface.
+19 -19
View File
@@ -505,49 +505,49 @@ OBVIOUS_PRIVATE_COPY( MbAttributeAction )
namespace c3d // namespace C3D
{
/// \ru Подсказка для эквидистантной грани c нулевым значением эквидистанты. \en Hint for an offset face with the null value of offset.
const_expr TCHAR c3dStr_ShellFace[] = _T( "c3d_ShellFace" );
c3d_constexpr TCHAR c3dStr_ShellFace[] = _T( "c3d_ShellFace" );
/// \ru Подсказка для эквидистантной грани. \en Hint for an offset face.
const_expr TCHAR c3dStr_OffsetFace[] = _T( "c3d_OffsetFace" );
c3d_constexpr TCHAR c3dStr_OffsetFace[] = _T( "c3d_OffsetFace" );
/// \ru Подсказка для вскрываемой грани. \en Hint for an open face.
const_expr TCHAR c3dStr_OpenFace[] = _T( "c3d_OpenFace" );
c3d_constexpr TCHAR c3dStr_OpenFace[] = _T( "c3d_OpenFace" );
/// \ru Подсказка для доп.эквидистантного смещения слипшейся грани. \en Hint for an offset of a stuck face.
const_expr TCHAR c3dStr_StuckOffset[] = _T( "c3d_StuckOffset" );
c3d_constexpr TCHAR c3dStr_StuckOffset[] = _T( "c3d_StuckOffset" );
/// \ru Подсказка для удаляемой слипшейся грани. \en Hint for a deleted stuck face.
const_expr TCHAR c3dStr_StuckDelete[] = _T( "c3d_StuckDelete" );
c3d_constexpr TCHAR c3dStr_StuckDelete[] = _T( "c3d_StuckDelete" );
/// \ru Подсказка для расшивки граней по ребру. \en Hint for separation neighbour faces by an edge.
const_expr TCHAR c3dStr_UnstitchByEdge[] = _T( "c3d_UnstitchByEdge" );
c3d_constexpr TCHAR c3dStr_UnstitchByEdge[] = _T( "c3d_UnstitchByEdge" );
/// \ru Подсказка для проверки идентификатора боковой грани. \en Hint for checking flank's identifier.
const_expr TCHAR c3dStr_CheckFlankId[] = _T( "c3d_CheckFlankId" );
c3d_constexpr TCHAR c3dStr_CheckFlankId[] = _T( "c3d_CheckFlankId" );
/// \ru Подсказка для порядкового номера оболочки. \en Hint for shell sequence number.
const_expr TCHAR c3dStr_ShellSequenceNumber[] = _T( "c3d_ShellSequenceNumber" );
c3d_constexpr TCHAR c3dStr_ShellSequenceNumber[] = _T( "c3d_ShellSequenceNumber" );
/// \ru Подсказка для сохраняемого объекта. \en Hint for kept object.
const_expr TCHAR c3dStr_KeptObject[] = _T( "c3d_KeptObject" );
c3d_constexpr TCHAR c3dStr_KeptObject[] = _T( "c3d_KeptObject" );
/// \ru Подсказка для удаляемого объекта. \en Hint for deleting object.
const_expr TCHAR c3dStr_DeletingObject[] = _T( "c3d_DeletingObject" );
c3d_constexpr TCHAR c3dStr_DeletingObject[] = _T( "c3d_DeletingObject" );
/// \ru Подсказка для временного объекта. \en Hint for temporal object.
const_expr TCHAR c3dStr_TemporalObject[] = _T( "c3d_TemporalObject" );
c3d_constexpr TCHAR c3dStr_TemporalObject[] = _T( "c3d_TemporalObject" );
/// \ru Подсказка для временного маркера слитых атрибутов. \en Hint for a temporary marker of merged attributes.
const_expr TCHAR c3dStr_MergedStateMarker[] = _T( "c3d_MergedStateMarker" );
c3d_constexpr TCHAR c3dStr_MergedStateMarker[] = _T( "c3d_MergedStateMarker" );
/**\ru Для плоской грани, сгибаемой в цилиндр - параметр u, который меньше соответствующего параметра любой точки грани,
сгибаемой в конус - угловой параметр луча, выходящего из начала координат плоскости параметров и не пересекающего контуры грани.
\en For a planar face bended in cylinder - u-parameter which is less than corresponding parameter of any point on the face,
bended in cone - angular parameter of the ray which goes out from the parameters plane origin and does not intersect contours of the face. \~*/
const_expr TCHAR c3dStr_BendMinAnlge[] = _T( "BendMinAnlge" );
c3d_constexpr TCHAR c3dStr_BendMinAnlge[] = _T( "BendMinAnlge" );
/// \ru Для цилиндрической и конической грани параметр u, который меньше соответствующего параметра любой точки грани. \en For a cylindrical and conical face - parameter u which is less than corresponding parameter of any point on the face.
const_expr TCHAR c3dStr_UnbendMinAngle[] = _T( "UnbendMinAngle" );
c3d_constexpr TCHAR c3dStr_UnbendMinAngle[] = _T( "UnbendMinAngle" );
/// \ru Подсказка для продленной грани. \en Hint for extended face.
const_expr TCHAR c3dStr_ExtendedFace[] = _T( "c3d_ExtendedFace" );
c3d_constexpr TCHAR c3dStr_ExtendedFace[] = _T( "c3d_ExtendedFace" );
/// \ru Подсказка для контрольного значения массы. \en Hint for the mass validation property.
const_expr TCHAR c3dStr_ValidationPropertyMassExchange[] = _T( "c3d_ValidationPropertyMassExchange" );
c3d_constexpr TCHAR c3dStr_ValidationPropertyMassExchange[] = _T( "c3d_ValidationPropertyMassExchange" );
/// \ru Подсказка для контрольного значения объёма. \en Hint for the volume validation property.
const_expr TCHAR c3dStr_ValidationPropertyVolumeExchange[] = _T( "c3d_ValidationPropertyVolumeExchange" );
c3d_constexpr TCHAR c3dStr_ValidationPropertyVolumeExchange[] = _T( "c3d_ValidationPropertyVolumeExchange" );
/// \ru Подсказка для контрольного значения площади поверхности. \en Hint for the surface area validation property.
const_expr TCHAR c3dStr_ValidationPropertySurfaceAreaExchange[] = _T( "c3d_ValidationPropertySurfaceAreaExchange" );
c3d_constexpr TCHAR c3dStr_ValidationPropertySurfaceAreaExchange[] = _T( "c3d_ValidationPropertySurfaceAreaExchange" );
/// \ru Подсказка для идентификатора элемента при обмене данными. \en Hint for the item identifier in model exchange operations.
const_expr TCHAR c3dStr_ItemIdentifierExchange[] = _T( "c3d_ItemIdentifierExchange" );
c3d_constexpr TCHAR c3dStr_ItemIdentifierExchange[] = _T( "c3d_ItemIdentifierExchange" );
} // namespace C3D
#endif // __ATTRIBUTE_H
+30 -10
View File
@@ -120,7 +120,7 @@ IMPL_PERSISTENT_OPS( MpVertex )
*/
// ---
class MATH_CLASS MpEdge : public TapeBase {
public :
private :
const MbCurve * baseCurve; ///< \ru Базовая кривая. \en The base curve.
ptrdiff_t name; ///< \ru Имя базовой кривой. \en The base curve name.
double tBeg; ///< \ru Параметр начала ребра. \en The edge start parameter.
@@ -197,7 +197,9 @@ public:
/// \ru Начальный параметр. \en Get the start parameter.
double GetTBeg() const { return tBeg; }
/// \ru Конечный параметр. \en End parameter.
double GetTEnd() const { return tEnd; }
double GetTEnd() const { return tEnd; }
/// \ru Тип кривой. \en Curve type.
uint GetType() const { return type; }
/// \ru Выдать декартову точку вершины-начала. \en Get the Cartesian point of the start vertex.
void GetBegPoint( MbCartPoint & cp ) const;
@@ -215,6 +217,8 @@ public:
/**\ru \name Функции изменения данных.
\en \name Functions for changing data.
\{ */
/// \ru Выдать кривую, по которой проходит ребро. \en Get the curve the edge passes through.
void SetCurve( const MbCurve * newCurve ) { baseCurve = newCurve; }
/// \ru Установить имя базовой кривой. \en Set name of the base curve.
void SetName( ptrdiff_t n ) { name = n; }
/// \ru Установить направление по отношению к кривой. \en Set the direction relative to the curve.
@@ -275,6 +279,7 @@ private:
IMPL_PERSISTENT_OPS( MpEdge )
//------------------------------------------------------------------------------
/** \brief \ru Цикл.
\en Loop. \~
@@ -284,7 +289,7 @@ IMPL_PERSISTENT_OPS( MpEdge )
*/
// ---
class MATH_CLASS MpLoop : public TapeBase {
public :
private :
PArray<MpEdge> edgeList; ///< \ru Список ребер. \en List of edges.
bool orientation; ///< \ru Ориентация цикла. \en Loop orientation.
int mode; ///< \ru Направление построения. \en Construction direction.
@@ -327,6 +332,16 @@ public:
\en An edge index. \~
*/
MpEdge * GetEdge( ptrdiff_t index ) const { return edgeList[index]; }
/** \brief \ru Ребро по индексу для изменения.
\en Edge by index to change. \~
\details \ru Ребро по его индексу для изменения. Без проверки корректности индекса.\n
\en Edge by its index to change. Without check for index correctness.\n \~
\param[in] index - \ru Индекс ребра.
\en An edge index. \~
*/
MpEdge *& GetEdge( ptrdiff_t index ) { return edgeList[index]; }
/// \ru Выдать последнее ребро. \en Get the last edge.
MpEdge * GetEdge() const;
@@ -428,6 +443,7 @@ private:
IMPL_PERSISTENT_OPS( MpLoop )
//------------------------------------------------------------------------------
/** \brief \ru Граф построения контуров.
\en Contours construction graph. \~
@@ -439,7 +455,7 @@ IMPL_PERSISTENT_OPS( MpLoop )
*/
// ---
class MATH_CLASS MpGraph : public TapeBase {
public :
private :
PArray<MpLoop> loops; ///< \ru Список границ. \en List of boundaries.
int mode; ///< \ru Направление обхода. \en Traversal direction.
ptrdiff_t nameCount; ///< \ru Количество имен ребер. \en Edge names count.
@@ -508,7 +524,7 @@ public:
\return \ru Ориентацию цикла.
\en The loop orientation. \~
*/
bool GetLoopOrientation( size_t i ) const { return loops[i]->orientation; }
bool GetLoopOrientation( size_t i ) const { return loops[i]->GetOrientation(); }
/** \} */
/**\ru \name Функции изменения данных.
@@ -532,23 +548,27 @@ public:
\en The list of unused curves for setting the names. \~
\param[in] g - \ru Граф для поиска неиспользованных ребер.\n
Если в нем или в его массиве неиспользованных ребер
нашлось ребро с только что установленным именем,
нашлось ребро с именем неиспользованной кривой,
то оно запоминается в массиве неиспользованных ребер unusedEdges.\n
\en Graph for searching unused edges.\n
If there is an edge with a name just specified
If there is an edge by the names of an unused curve
in the graph or its array of unused edges,
then it is stored in the array of unused edges unusedEdges.\n \~
\param[in] curvesNames - \ru Имена кривых.
\en Curves names. \n \~
*/
void SetAllName( const RPArray<MbCurve> & curveList, MpGraph * g );
void SetAllName( const RPArray<MbCurve> & curveList, MpGraph * g, std::map<const MbCurve *, ptrdiff_t> & curvesNames );
/** \brief \ru Дать имена ребрам.
\en Give names to edges. \~
\details \ru Дать имена ребрам по списку кривых.\n
\en Give names to edges by the list of curves.\n \~
\param[in] curveList - \ru Список кривых для именования.
\en The list of curves for naming. \~
\en The list of curves for naming. \~
\param[in] curvesNames - \ru Имена кривых.
\en Curves names. \n \~
*/
void SetEdgeName( const RPArray<MbCurve> & curveList );
void SetEdgeName( const RPArray<MbCurve> & curveList, std::map<const MbCurve *, ptrdiff_t> & curvesNames );
/** \brief \ru Определить ориентацию контуров.
\en Determine the contours' orientation. \~
+10 -5
View File
@@ -281,7 +281,7 @@ and management of modes of operations - stitching of surfaces with possibility o
objects filtration, generation of translation journal. \~
\ingroup Exchange_Interface
*/
class IConvertorProperty3D {
class CONV_CLASS IConvertorProperty3D {
public :
virtual ~IConvertorProperty3D() {}
@@ -378,9 +378,6 @@ public:
virtual bool DualSeams() const { return true; }
/// \ru Флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual void DualSeams( bool ) {}
/// \ru Проводить ли аудит траснляции. \en Whether to audit the translation.
virtual bool TotalAudit() { return false; }
/// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces.
virtual bool JoinSimilarFaces() const { return true; }
/// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells.
@@ -388,6 +385,11 @@ public:
/// \ru Получить генератор однострочного идентификтора изделия. \en Get generator of one-line product identifier.
virtual SPtr<IProductIdMaker> ProductIdentifierGenerator() const { return SPtr<IProductIdMaker>(); }
/// \ru Проводить ли аудит траснляции. \en Whether to audit the translation.
virtual bool TotalAudit() const { return false; }
/// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute.
virtual bool AttatchIdAttributes() const { return true; }
}; // IConvertorProperty3D
@@ -431,6 +433,7 @@ public:
bool addRemovedFacesAsShells; ///< \ru Добавлять ли удаленные грани в качестве отдельных оболочек. \en Whether to add removed faces as shells.
double lengthUnitsFactor; ///< \ru Единицы длины модели. \en Length units of the model.
double appUnitsFactor; ///< \ru Единицы длины модели пользовательского приложения. \en Length units of the model used in user application.
bool attatchIdAttributes; ///< \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute.
bool auditEnabled;
/// \ru Сведения о сообщениях конвертера. \en Converter message data.
@@ -518,7 +521,9 @@ public:
/// \ru Задать флаг сохранения совпадающих точек швов. (для конвертера STL и VRML). \en Whether to keep coincident points of seams (for STL, VRML only).
virtual void DualSeams( bool );
/// \ru Проводить ли аудит траснляции. \en Whether to audit the translation.
virtual bool TotalAudit();
virtual bool TotalAudit() const;
/// \ru Следует ли формировать атрибут на основе идентификатора элемнта в файле. \en Whether to attatch the element's id in file as attribute.
virtual bool AttatchIdAttributes() const;
/// \ru Выполнять ли слияние подобных граней. \en Whether to join similar faces.
virtual bool JoinSimilarFaces() const { return joinSimilarFaces; }
/// \ru Добавлять ли удаленные грани в качестве оболочек. \en Whether to add removed faces as shells.
+1 -1
View File
@@ -44,7 +44,7 @@ typedef SPtr<ItModelInstance> ModelInstancePtr;
\ingroup Exchange_Interface
*/
// ---
class ItModelDocument : public MbRefItem
class CONV_CLASS ItModelDocument : public MbRefItem
{
public:
/// \ru Это сборка? \en Is it an assembly?
+6 -6
View File
@@ -25,12 +25,12 @@
// ---
class MATH_CLASS MbCurveEvolutionSolid : public MbCurveSweptSolid {
protected :
MbSweptData sweptData; ///< \ru Данные об образующей. \en Generating curve data.
SPtr<MbCurve3D> spineCurve; ///< \ru Направляющая кривая. \en Spine curve.
SPtr<MbCurve3D> directionCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть NULL для простой траектории). \en A curve of the transformation matrix orientation (it may be NULL for a simple trajectory).
MbVector3D direction; ///< \ru Вектор ориентации матрицы преобразования (может быть нулевой, в случае автоопределения). \en Vector of transformation matrix orientation (it's equal zero in the mode of automatic direction calculation).
MbSNameMaker spineNames; ///< \ru Именователь направляющей. \en An object defining the name of the spine curve.
EvolutionValues parameters; ///< \ru Параметры. \en Parameters.
MbSweptData sweptData; ///< \ru Данные об образующей. \en Generating curve data.
SPtr<MbCurve3D> spineCurve; ///< \ru Направляющая кривая. \en Spine curve.
SPtr<MbCurve3D> directionCurve; ///< \ru Кривая вектора ориентации матрицы преобразования (может быть NULL для простой траектории). \en A curve of the transformation matrix orientation (it may be NULL for a simple trajectory).
MbVector3D direction; ///< \ru Вектор ориентации матрицы преобразования (может быть нулевой, в случае автоопределения). \en Vector of transformation matrix orientation (it's equal zero in the mode of automatic direction calculation).
SPtr<MbSNameMaker> spineNames; ///< \ru Именователь направляющей. \en An object defining the name of the spine curve.
EvolutionValues parameters; ///< \ru Параметры. \en Parameters.
public :
/** \brief \ru Конструктор.
+7 -7
View File
@@ -139,14 +139,14 @@ IMPL_PERSISTENT_OPS( MbFaceModifiedSolid )
\ingroup Model_Creators
*/
// ---
MATH_FUNC (MbCreator *) CreateFaceModifiedSolid( MbFaceShell * outer,
MbeCopyMode sameShell,
const ModifyValues & parameters,
const RPArray<MbFace> & faces,
MATH_FUNC (MbCreator *) CreateFaceModifiedSolid( MbFaceShell * outer,
MbeCopyMode sameShell,
const ModifyValues & parameters,
const RPArray<MbFace> & faces,
const RPArray<MbCurveEdge> & edges,
const MbSNameMaker & names,
MbResultType & res,
MbFaceShell *& shell );
const MbSNameMaker & names,
MbResultType & res,
MbFaceShell *& shell );
#endif // __CR_MODIFIED_SOLID_H
+1 -1
View File
@@ -137,7 +137,7 @@ MATH_FUNC (MbCreator *) CreateBendsByEdges( SPtr<MbFaceShell> & initi
const RPArray<MbCurveEdge> & edges,
const bool unbended,
const MbBendByEdgeValues & parameters,
MbSNameMaker & names,
const MbSNameMaker & names,
RPArray<MbSMBendNames> & resultBends,
MbResultType & res,
MbFaceShell *& shell );
+1 -1
View File
@@ -123,7 +123,7 @@ MATH_FUNC (MbCreator *) CreateBendOverSegment( SPtr<MbFaceShell> & initi
MbCurve3D & curve,
const bool unbended,
const MbBendOverSegValues & parameters,
MbSNameMaker & names,
const MbSNameMaker & names,
MbResultType & res,
MbFaceShell *& shell );
+1 -1
View File
@@ -119,7 +119,7 @@ MATH_FUNC (MbCreator *) CreateBendUnbend( SPtr<MbFaceShell> & init
const MbFace & fixedFace,
const MbCartPoint & fixedPoint,
bool bend,
MbSNameMaker & names,
const MbSNameMaker & names,
MbResultType & res,
MbFaceShell *& shell,
RPArray<MbContour3D> * ribContours = NULL );
+1 -1
View File
@@ -106,7 +106,7 @@ MATH_FUNC (MbCreator *) ConvertShellToSheetMetall( MbFaceShell *
const MbFace & initFace, // базовая грань, относительно которой будет строиться листовое тело,
bool sense, // признак совпадения придания толщины с нормалью базовой грани,
MbSolidToSheetMetalValues & params, // параметры построения листового тела,
MbSNameMaker & nameMaker, // именователь,
const MbSNameMaker & nameMaker, // именователь,
MbResultType & res, // флаг успешности операции,
SPtr<MbFaceShell> & resultShell ); // результирующая оболочка.
+1 -1
View File
@@ -123,7 +123,7 @@ MATH_FUNC (MbCreator *) CreateClosedCorner( SPtr<MbFaceShell> & initial
MbCurveEdge * curveEdgePlus,
MbCurveEdge * curveEdgeMinus,
const MbClosedCornerValues & parameters,
MbSNameMaker & names,
const MbSNameMaker & names,
MbResultType & res,
MbFaceShell *& shell );
+1 -1
View File
@@ -137,7 +137,7 @@ MATH_FUNC (MbCreator *) CreateJointBend( c3d::ShellSPtr &
const RPArray<MbCurveEdge> & edges,
const bool unbended,
const MbJointBendValues & parameters,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
RPArray< RPArray<MbSMBendNames> > & resultBends,
MbResultType & res,
MbFaceShell *& shell );
+1 -1
View File
@@ -152,7 +152,7 @@ MATH_FUNC (MbCreator *) CreateBead( SPtr<MbFaceShell> & initialShell,
const MbBeadValues & parameters,
const double thickness,
const bool add,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbResultType & res,
SPtr<MbFaceShell> & resultShell );
+1 -1
View File
@@ -142,7 +142,7 @@ MATH_FUNC (MbCreator *) CreateJalousie( SPtr<MbFaceShell> & initialSh
const MbJalousieValues & parameters,
const double thickness,
const bool add,
MbSNameMaker & nameMaker,
const MbSNameMaker & nameMaker,
MbResultType & res,
SPtr<MbFaceShell> & resultShell );
+1 -1
View File
@@ -145,7 +145,7 @@ MATH_FUNC (MbCreator *) CreateSheetSolidJog( SPtr<MbFaceShell> & solid,
const bool unbended,
const MbJogValues & parameters,
const MbBendValues & secondBendParams,
MbSNameMaker & names,
const MbSNameMaker & names,
RPArray<MbFace> & firstBendFaces,
RPArray<MbFace> & secondBendFaces,
MbResultType & res,
+1 -1
View File
@@ -139,7 +139,7 @@ MATH_FUNC (MbCreator *) CreateStamp( SPtr<MbFaceShell> & initialShell, /
const MbStampingValues & params, // параметры штамповки
const double thickness, // толщина листа
const bool add, // создать добавляемую часть
MbSNameMaker & nameMaker, // именователь
const MbSNameMaker & nameMaker, // именователь
MbResultType & res, // флаг успешности операции
SPtr<MbFaceShell> & resultShell ); // результирующая оболочка
+1 -1
View File
@@ -138,7 +138,7 @@ MATH_FUNC (MbCreator *) CreateSphericalStamp( SPtr<MbFaceShell> & solid,
const double thickness,
const bool add,
const MbCartPoint & center,
MbSNameMaker & operNames,
const MbSNameMaker & operNames,
MbResultType & res,
SPtr<MbFaceShell> & shell );
+8 -8
View File
@@ -198,7 +198,7 @@ enum MbeCreatorType {
// ---
class MATH_CLASS MbCreator : public MbRefItem, public TapeBase {
protected :
MbSNameMaker names; ///< \ru Именователь создаваемых строителем элементов и объектов. \en An object defining the names of elements and objects created by the constructor.
SPtr<MbSNameMaker> names; ///< \ru Именователь создаваемых строителем элементов и объектов. \en An object defining the names of elements and objects created by the constructor.
mutable MbeProcessState status; ///< \ru Состояние строителя и результата выполнения операции. \en State of the constructor and of the operation result.
protected :
@@ -377,7 +377,7 @@ public :
\return \ru Выполнено ли построение.
\en Whether the construction is performed. \~
*/
bool CreateShell( SPtr<MbFaceShell> & shell, MbeCopyMode sameShell,
bool CreateShell( c3d::ShellSPtr & shell, MbeCopyMode sameShell,
RPArray<MbSpaceItem> * items = NULL );
/** \brief \ru Построить проволочный каркас по исходным данным.
@@ -464,19 +464,19 @@ public :
/// \ru Установить версию объектов. \en Set the objects version.
virtual void SetYourVersion( VERSION version, bool forAll );
/// \ru Выдать версию объекта. \en Get the object version.
VERSION GetYourVersion() const { return names.GetMathVersion(); }
VERSION GetYourVersion() const { return names->GetMathVersion(); }
/// \ru Выдать именователь объекта. \en Get the name-maker.
const MbSNameMaker & GetYourNameMaker() const { return names; }
const MbSNameMaker & GetYourNameMaker() const { return *names; }
/// \ru Выдать именователь объекта для редактирования. \en Get the object's name-maker for editing.
MbSNameMaker & SetYourNameMaker() { return names; }
MbSNameMaker & SetYourNameMaker() { return *names; }
/// \ru Установить именователь объекта. \en Set the object's name-maker.
void SetNameMaker( const MbSNameMaker & n ) { names.SetNameMaker( n ); }
void SetNameMaker( const MbSNameMaker & n ) { names->SetNameMaker( n ); }
/// \ru Выдать главное имя объекта. \en Get the main name of the object.
SimpleName GetMainName() const { return names.GetMainName(); }
SimpleName GetMainName() const { return names->GetMainName(); }
/// \ru Установить главное имя объекта. \en Set the main name of the object.
void SetMainName( SimpleName n ) { names.SetMainName(n); }
void SetMainName( SimpleName n ) { names->SetMainName(n); }
/// \ru Выдать флаг состояния. \en Get the flag of state.
MbeProcessState GetStatus() const { return status; }
/// \ru Установить флаг состояния. \en Set the flag of state.
+36 -4
View File
@@ -110,9 +110,25 @@ public:
/// \ru Добавить свои строители в присланный массив. \en Add your own creators to the given array.
virtual bool GetCreators( c3d::CreatorsSPtrVector & ) const;
/// \ru Добавить копии своих строителей в присланный массив. \en Add copies of your own creators to the given array.
bool GetCreatorsCopies( RPArray<MbCreator> & ) const;
/// \ru Добавить копии своих строителей в присланный массив. \en Add copies of your own creators to the given array.
bool GetCreatorsCopies( c3d::CreatorsSPtrVector & ) const;
template <class CreatorsVector>
bool GetCreatorsCopies( CreatorsVector & creators ) const
{
bool res = false;
size_t addCnt = transactions.size();
if ( addCnt > 0 ) {
c3d::CreatorSPtr creator;
creators.reserve( creators.size() + addCnt );
for ( size_t i = 0; i < addCnt; ++i ) {
if ( transactions[i] != NULL ) {
creator = static_cast<MbCreator *>(&transactions[i]->Duplicate());
creators.push_back( creator );
::DetachItem( creator );
res = true;
}
}
}
return res;
}
/// \ru Найти номер строителя в журнале или вернуть SYS_MAX_T в случае отсутствия. \en Find the number of creators in the history tree or return SYS_MAX_T if it is absent.
size_t FindCreator( const MbCreator * creator );
/// \ru Добавить строитель (addSame = false) или его копию (addSame = true) в журнал. \en Add the constructor (addSame = false) or its copy (addSame = true) to the history tree.
@@ -120,7 +136,23 @@ public:
/// \ru Добавить строитель (addSame = false) или его копию (addSame = true) в журнал. \en Add the constructor (addSame = false) or its copy (addSame = true) to the history tree.
bool AddCreator ( const MbCreator *, bool addSame = false );
/// \ru Добавить строители в журнал. \en Add creators to the history tree.
void AddCreators( const RPArray<MbCreator> & );
template <class CreatorsVector>
void AddCreators( const CreatorsVector & creators )
{
if ( !Math::SupressCreators() ) {
c3d::CreatorSPtr creator;
for ( size_t i = 0, addCnt = creators.size(); i < addCnt; ++i ) {
creator = creators[i];
if ( creator != NULL ) {
creator->AddRef();
transactions.push_back( creator );
::DetachItem( creator );
}
}
}
else
DeleteCreators();
}
/// \ru Вытереть строитель с указанным номером из журнала и отдать его. \en Remove the constructor with the specified index from the history tree and return it.
MbCreator * DetachCreator ( size_t ind );
/// \ru Удалить строитель с указанным номером и вытереть его из журнала. \en Delete the constructor with the specified index and remove it from the history tree.
+2 -2
View File
@@ -15,8 +15,8 @@
#include <mb_placement3d.h>
const_expr size_t CONIC_COUNT = 32;
const_expr size_t LINES_COUNT = 10;
c3d_constexpr size_t CONIC_COUNT = 32;
c3d_constexpr size_t LINES_COUNT = 10;
class MATH_CLASS MbArc;
+4 -1
View File
@@ -16,6 +16,7 @@
#include <templ_s_list.h>
#include <templ_sptr.h>
#include <alg_base.h>
#include <mb_cube_tree.h>
class MATH_CLASS MbArc;
@@ -34,6 +35,8 @@ typedef std::vector<const MbContour *> ConstPlaneContoursVector;
typedef std::vector<PlaneContourSPtr> PlaneContoursSPtrVector;
typedef std::vector<ConstPlaneContourSPtr> ConstPlaneContoursSPtrVector;
typedef MbCubeTree<MbContour, MbRect, MbCartPoint> ContourRectsTree;
}
@@ -165,7 +168,7 @@ public:
virtual double GetTMin() const; // \ru Вернуть минимальное значение параметра. \en Get the minimum value of parameter.
virtual double GetTMax() const; // \ru Вернуть максимальное значение параметра. \en Get the maximum value of parameter.
virtual bool IsClosed() const; // \ru Проверка замкнутости кривой. \en Check for curve closedness.
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой. \en An attribute of curve straightness.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой. \en An attribute of curve straightness.
virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of contour\curve are smooth.
/** \} */
+7 -7
View File
@@ -24,14 +24,14 @@ class SimpleNameArray;
class MATH_CLASS MbContour3D;
namespace c3d // namespace C3D
{
typedef SPtr<MbContour3D> SpaceContourSPtr;
typedef SPtr<const MbContour3D> ConstSpaceContourSPtr;
typedef SPtr<MbContour3D> SpaceContourSPtr;
typedef SPtr<const MbContour3D> ConstSpaceContourSPtr;
typedef std::vector<MbContour3D *> SpaceContoursVector;
typedef std::vector<const MbContour3D *> ConstSpaceContoursVector;
typedef std::vector<MbContour3D *> SpaceContoursVector;
typedef std::vector<const MbContour3D *> ConstSpaceContoursVector;
typedef std::vector<SpaceContourSPtr> SpaceContoursSPtrVector;
typedef std::vector<ConstSpaceContourSPtr> ConstSpaceContoursSPtrVector;
typedef std::vector<SpaceContourSPtr> SpaceContoursSPtrVector;
typedef std::vector<ConstSpaceContourSPtr> ConstSpaceContoursSPtrVector;
}
@@ -114,7 +114,7 @@ public:
virtual double GetTMax () const; // \ru Вернуть максимальное значение параметра \en Get the maximum value of parameter
virtual bool IsClosed() const; // \ru Проверка замкнутости кривой \en Check for curve closedness
virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of contour\curve are smooth.
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
/** \} */
/** \ru \name Функции для работы в области определения кривой.
+1 -1
View File
@@ -110,7 +110,7 @@ public :
virtual void GetWeightCentre( MbCartPoint3D & ) const; // \ru Дать центр тяжести. \en Get the center of gravity.
virtual void CalculateGabarit( MbCube & ) const; // \ru Вычислить габарит кривой. \en Calculate the bounding box of curve.
virtual bool IsStraight() const; // \ru Определить, является ли линия прямолинейной? \en Determine whether the line is straight.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной? \en Determine whether the line is straight.
virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D *pRgn = NULL,
VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve.
+1 -1
View File
@@ -178,7 +178,7 @@ public :
virtual bool NearPointProjection( const MbCartPoint3D &, double & t, bool ext, MbRect1D * tRange = NULL ) const; // \ru Вычислить ближайшую проекцию точки на кривую. \en Calculate the nearest projection of the point on the curve.
virtual bool IsStraight() const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual MbCurve * GetMap( const MbMatrix3D &, MbRect1D * pRgn = NULL,
VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve.
+6 -1
View File
@@ -249,6 +249,8 @@ public :
virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменить направление \en Change direction
virtual double Step( double t, double sag ) const; // \ru Вычисление шага аппроксимации с учетом радиуса кривизны \en Calculation of approximation step with consideration of curvature radius
virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага аппроксимации по угловой толерантности \en Calculation of approximation step by angular tolerance
virtual void IntersectHorizontal( double y, SArray<double> & ) const; // \ru Пересечение кривой с горизонтальной прямой \en Intersection of a curve with a horizontal line
virtual void IntersectVertical( double x, SArray<double> & ) const; // \ru Пересечение с вертикальной прямой \en Intersection with a vertical line
virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую \en Point projection on the curve
virtual bool NearPointProjection( const MbCartPoint & pnt, double xEpsilon, double yEpsilon,
@@ -263,7 +265,7 @@ public :
virtual void GetAnalyticalFunctionsBounds( std::vector<double> & params ) const;
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual size_t GetCount() const;
@@ -337,6 +339,9 @@ private:
void CheckClosed( double epsilon ); // \ru Проверить и установить признак замкнутости кривой. \en Check and set closedness attribute of curve.
bool SetCorrection( size_t ind, double tDelta ); // \ru Скорректировать кривую по индексу. \en Curve correction by index.
void CalculateValues( size_t i1, size_t i2 ); // \ru Скорректировать кривую на интервале i1-i2. \en Curve correction on the interval i1-i2.
/// \ru Найти параметры пересечение сплайна с прямой x = val или y=val.
/// \ ru Find the parameters of the intersection of the spline with the line x = val or y = val.
void HorVertRoots( bool isVert, double val, SArray<double> & params ) const;
void operator = ( const MbHermit & ); // \ru Не реализовано. \en Not implemented.
+2 -2
View File
@@ -246,8 +246,8 @@ public :
virtual MbCurve3D * Trimmed( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve
virtual MbCurve3D * TrimmBreak( double t1, double t2, int sense ) const; // \ru Создание усеченной кривой \en Creation of a trimmed curve
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar.
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar
// \ru Дать плоскую кривую и плейсмент, если пространственная кривая плоская (после использования вызывать DeleteItem на двумерную кривую) \en Give a planar curve and placement, if the spatial curve is planar (after using the DeleteItem must be called for a two-dimensional curve)
+1 -1
View File
@@ -189,7 +189,7 @@ public :
virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve
virtual bool IsClosed() const; // \ru Проверка замкнутости \en Check for closedness
virtual bool IsBounded() const; // \ru Определить, является ли кривая ограниченной. \en Define whether the curve is bounded.
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness
// \ru Дать приращение параметра, соответствующее единичной длине в пространстве \en Get increment of parameter, corresponding to the unit length in space
virtual double GetParamToUnit() const;
+1 -1
View File
@@ -117,7 +117,7 @@ public :
virtual void GetCentre ( MbCartPoint3D & c ) const; // \ru Выдать центр кривой \en Get the center of curve
virtual void GetWeightCentre( MbCartPoint3D & wc ) const; // \ru Выдать центр тяжести кривой \en Get the center of gravity of the curve
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar
virtual double GetParamToUnit() const; // \ru Дать приращение параметра, осреднённо соответствующее единичной длине в пространстве \en Get increment of parameter, corresponding to the unit length in space
+1 -1
View File
@@ -170,7 +170,7 @@ public :
virtual MbeState Deformation( const MbRect &, const MbMatrix & ); // \ru Деформация \en Deformation
virtual bool IsInRectForDeform( const MbRect & r ) const; // \ru Виден ли объект в заданном прямоугольнике для деформации \en Whether the object is visible in the specified rectangle for the deformation
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
// \ru Положение точки относительно кривой. \en The point position relative to the curve.
// \ru iloc_InItem = 1 - точка находится слева по направлению, \en Iloc_InItem = 1 - the point is on the left,
+1 -1
View File
@@ -121,7 +121,7 @@ public :
VERSION version = Math::DefaultMathVersion(), bool * coincParams = NULL ) const; // \ru Дать плоскую проекцию кривой. \en Get a planar projection of curve.
virtual MbCurve * GetMapPsp( const MbMatrix3D &, double zNear, MbRect1D * pRgn = NULL ) const; // \ru Дать перспективную плоскую проекцию кривой. \en Get a planar geometric projection of curve.
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual size_t GetCount () const;
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar
virtual bool DistanceAlong( double & t, double len, int curveDir, double eps = Math::metricPrecision,
+1 -1
View File
@@ -687,7 +687,7 @@ public :
\{ */
// \ru Добавить габарит в прямоугольник. \en Add a bounding box to rectangle.
virtual void CalculateGabarit ( MbRect & ) const;
virtual bool IsStraight() const; // \ru Прямолинейность кривой. \en Straightness of curve.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Прямолинейность кривой. \en Straightness of curve.
// \ru Посчитать метрическую длину \en Calculate the metric length
virtual double CalculateMetricLength() const;
// \ru Сдвинуть параметр t на расстояние len. \en Move parameter t on the metric distance len.
+1 -1
View File
@@ -452,7 +452,7 @@ public:
virtual double GetTMax() const; // \ru Вернуть максимальное значение параметра. \en Get the maximum value of parameter.
virtual bool IsClosed() const; // \ru Замкнутость кривой. \en A curve closedness.
virtual bool IsPeriodic() const; // \ru Периодичность замкнутой кривой. \en Periodicity of a closed curve.
virtual bool IsStraight() const; // \ru Прямолинейность кривой. \en Straightness of curve.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Прямолинейность кривой. \en Straightness of curve.
// \ru Функции для работы внутри области определения кривой. \en Functions for working inside of the curve domain. \~
virtual void PointOn ( double & t, MbCartPoint3D & ) const; // \ru Точка на кривой. \en Point on the curve.
virtual void FirstDer ( double & t, MbVector3D & ) const; // \ru Первая производная. \en The first derivative.
+1 -1
View File
@@ -190,7 +190,7 @@ public :
/** \ru \name Общие функции кривой
\en \name Common function of curve.
\{ */
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual MbCurve * Offset( double rad ) const; // \ru Смещение смещенной кривой \en Offset of the offset curve
virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change to the opposite direction of a curve
virtual void Refresh(); // \ru Сбросить все временные данные \en Reset all temporary data
+1 -1
View File
@@ -151,7 +151,7 @@ public:
virtual size_t GetCount() const;
virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Changing of carrier
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether a curve is planar
virtual bool GetPlacement( MbPlacement3D & place, VERSION version = Math::DefaultMathVersion() ) const; // \ru Заполнить плейсемент, ести кривая плоская \en Fill the placement if curve is planar
+1 -1
View File
@@ -133,7 +133,7 @@ public :
virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get the curve axis
virtual void GetCentre ( MbCartPoint3D & wc ) const;
virtual void GetWeightCentre( MbCartPoint3D & wc ) const;
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual size_t GetCount () const;
virtual void GetPointsByEvenLengthDelta( size_t n, std::vector<MbCartPoint3D> & pnts ) const; // \ru Выдать n точек кривой с равными интервалами по длине дуги \en Get n points of curves equally spaced by the arc length
+1 -1
View File
@@ -145,7 +145,7 @@ public :
virtual MbeState DeletePart( double t1, double t2, MbCurve *& part2 );
// \ru Оставить часть усеченной кривой между параметрами t1 и t2 \en Keep a part of the trimmed curve between parameters t1 and t2
virtual MbeState TrimmPart( double t1, double t2, MbCurve *& part2 );
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
// \ru Положение точки относительно кривой. \en The point position relative to the curve.
// \ru Возвращает результат : \en Returning result:
+1 -1
View File
@@ -91,7 +91,7 @@ public :
/** \ru \name Общие функции кривой
\en \name Common functions of curve
\{ */
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
virtual bool HasLength( double & length ) const;
virtual void Inverse( MbRegTransform * iReg = NULL ) = 0; // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one
+2
View File
@@ -187,6 +187,8 @@ public :
virtual double Step( double t, double sag ) const; // \ru Вычисление шага аппроксимации \en Calculation of step of approximation
virtual double DeviationStep( double t, double angle ) const; // \ru Вычисление шага аппроксимации по угловой толерантности \en Calculation of step of approximation by angular tolerance
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
virtual void Inverse( MbRegTransform * iReg = NULL ); // \ru Изменение направления кривой на противоположное \en Change curve direction to the opposite one
virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate the metric length
+2
View File
@@ -135,6 +135,8 @@ public :
virtual double Step ( double t, double sag ) const; // \ru Шаг параметра с учетом радиуса кривизны \en Step of parameter with consideration of curvature
virtual double DeviationStep( double t, double angle ) const; // \ru Шаг параметра по заданному углу отклонения касательной \en Step of parameter by a given angle of deviation of tangent
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
virtual void CalculateGabarit( MbCube & ) const; // \ru Определить габариты кривой \en Determine the bounding box of a curve
virtual void CalculateLocalGabarit( const MbMatrix3D &, MbCube & ) const; // \ru Рассчитать габарит относительно л.с.к. \en Calculate bounding box relative to the local coordinate system
+1 -1
View File
@@ -167,7 +167,7 @@ public :
virtual bool IsBounded() const; // \ru Признак ограниченной кривой \en Attribute of a bounded curve
virtual bool IsDegenerate( double eps = Math::LengthEps ) const; // \ru Проверка вырожденности кривой \en Check for curve degeneracy
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsSmoothConnected( double angleEps ) const; // \ru Являются ли стыки контура\кривой гладкими? \en Whether the joints of a contour\curve are smooth.
virtual bool IsCompleteInRect( const MbRect & r ) const; // \ru Виден ли объект полностью в в заданном прямоугольнике \en Whether the object is completely visible in the given rectangle
virtual double CalculateMetricLength() const; // \ru Посчитать метрическую длину \en Calculate the metric length
+1 -1
View File
@@ -166,7 +166,7 @@ public :
virtual size_t GetCount() const;
virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Change a carrier
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible.
virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get axis of curve
+1 -1
View File
@@ -194,7 +194,7 @@ public:
MbCurve * GetParticularMap( const MbMatrix3D & into, MbRect1D * pRgn,
VERSION version ) const;
virtual bool IsStraight() const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual void ChangeCarrier ( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носитель. \en Change the carrier.
virtual bool ChangeCarrierBorne( const MbSpaceItem &, MbSpaceItem &, const MbMatrix & matr ); // \ru Изменить носимые элементы. \en Change a carrier elements.
virtual bool IsPlanar() const; // \ru Определить, является ли кривая плоской. Прямолинейные кривые являются плоскими, но без определённой ЛСК. \en Determine whether the curve is planar. Straight lines is planar but without certain placement.
+1 -1
View File
@@ -385,7 +385,7 @@ public:
// \ru Определить количество разбиений для прохода в операциях. \en Define the number of splittings for one passage in operations.
virtual size_t GetCount() const;
virtual bool IsStraight() const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Определить, является ли линия прямолинейной. \en Determine whether the line is straight.
virtual void ChangeCarrier ( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменить носитель. \en Change the carrier.
virtual bool ChangeCarrierBorne( const MbSpaceItem & item, MbSpaceItem & init, const MbMatrix & matr ); // \ru Изменение носимые элементы. \en Change a carrier elements.
virtual bool IsPlanar() const; // \ru Определить, является ли кривая плоской. \en Determine whether the curve is planar.
+1 -1
View File
@@ -152,7 +152,7 @@ public :
virtual double PointProjection( const MbCartPoint & pnt ) const; // \ru Проекция точки на кривую \en Point projection on the curve
virtual bool IsStraight() const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Признак прямолинейности кривой \en An attribute of curve straightness.
// \ru Положение точки относительно кривой. \en The point position relative to the curve.
// \ru Возвращает результат : \en Returning result:
// \ru iloc_InItem = 1 - точка находится слева от кривой, \en Iloc_InItem = 1 - point is to the left of the curve,
+1 -1
View File
@@ -116,7 +116,7 @@ public :
virtual size_t GetCount() const;
virtual void ChangeCarrier( const MbSpaceItem & item, MbSpaceItem & init ); // \ru Изменение носителя \en Change a carrier
virtual bool IsPlanar () const; // \ru Является ли кривая плоской \en Whether the curve is planar
virtual bool IsStraight() const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual bool IsStraight( bool ignoreParams = false ) const; // \ru Является ли линия прямолинейной \en Whether the line is straight
virtual double GetRadius() const; // \ru Дать физический радиус объекта или ноль, если это невозможно. \en Get the physical radius of the object or null if it impossible.
virtual bool GetCircleAxis ( MbAxis3D & ) const; // \ru Дать ось кривой \en Get axis of curve
virtual void GetCentre( MbCartPoint3D &wc ) const; // \ru Посчитать центр кривой \en Calculate the center of a curve
+1 -1
View File
@@ -405,7 +405,7 @@ public :
/// \ru Определить, является ли кривая ограниченной. \en Define whether the curve is bounded.
virtual bool IsBounded() const;
/// \ru Определить, является ли кривая прямолинейной. \en Define whether the curve is rectilinear..
virtual bool IsStraight() const;
virtual bool IsStraight( bool ignoreParams = false ) const;
/// \ru Определить, является ли кривая вырожденной. \en Define whether the curve is degenerate..
virtual bool IsDegenerate( double eps = Math::LengthEps ) const;
/// \ru Определить, являются ли стыки контура/кривой гладкими. \en Define whether joints of contour/curve are smooth.
+1 -1
View File
@@ -550,7 +550,7 @@ public :
/// \ru Проверить вырожденная ли кривая. \en Check whether the curve is degenerated.calculate.
virtual bool IsDegenerate( double eps = METRIC_PRECISION ) const;
/// \ru Является ли линия прямолинейной? \en Whether the line is straight?
virtual bool IsStraight () const;
virtual bool IsStraight( bool ignoreParams = false ) const;
/// \ru Является ли кривая плоской? \en Is a curve planar?
virtual bool IsPlanar () const;
/// \ru Являются ли стыки контура/кривой гладкими? \en Are joints of contour/curve smooth?
+1 -1
View File
@@ -15,7 +15,7 @@
#include <templ_s_array.h>
const_expr size_t FUNC_NUMB = 4; ///< \ru Количество элементов расчетного массива кубической функции Эрмита. \en The number of elements of calculation array of a cubic Hermite function.
c3d_constexpr size_t FUNC_NUMB = 4; ///< \ru Количество элементов расчетного массива кубической функции Эрмита. \en The number of elements of calculation array of a cubic Hermite function.
//------------------------------------------------------------------------------
+1 -1
View File
@@ -12,7 +12,7 @@
#include <math_define.h>
#include <tool_cstring.h>
const_expr double GC_GOLDEN_SECTION = 0.381966011250105; // \ru Золотое сечение. \en Golden ratio.
c3d_constexpr double GC_GOLDEN_SECTION = 0.381966011250105; // \ru Золотое сечение. \en Golden ratio.
/**
\addtogroup Constraints2D_API
+4 -4
View File
@@ -955,8 +955,8 @@ GCM_FUNC(void) GCM_SetPlacement( GCM_system gSys, GCM_geom g, const MbPlacement3
the special function to exit from the dragging mode explicitly - #GCM_FinishReposition. \~
*/
//---
GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom movGeom
, const MbPlacement3D & projPlane, const MbCartPoint3D & curPnt );
GCM_FUNC(GCM_result) GCM_PrepareReposition( GCM_system gSys, GCM_geom movGeom,
const MbPlacement3D & projPlane, const MbCartPoint3D & curPnt );
/** \brief \ru Инициализировать режим вращения компонента вокруг фиксированной оси.
\en To initialize the rotation mode of the component around a fixed axis.
@@ -993,8 +993,8 @@ GCM_FUNC(GCM_geom) GCM_GetMovingGeom( GCM_system gSys );
'newPos' doesn't allow to satisfy the system of constraints, then new position of solid
will be the most nearest to newPos (while preserving solvability). \~
*/
GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom g
, const MbPlacement3D & newPos, GCM_reposition movType );
GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom g,
const MbPlacement3D & newPos, GCM_reposition movType );
/**
\brief \ru Решить систему сопряжений для новой позиции курсора в режиме драггинга.
+1 -1
View File
@@ -80,7 +80,7 @@ struct GCM_c_params
\ingroup GCM_3D_ObjectAPI
*/
//---
struct ItConstraintItem
struct GCM_CLASS ItConstraintItem
{
public: /*
Constraint data inquiries
+1 -1
View File
@@ -60,7 +60,7 @@ typedef GCM_c_type MtMateType;
\ingroup GCM_3D_ObjectAPI
*/
//---
struct ItGeom
struct GCM_CLASS ItGeom
{
MtGeomId objectId; // (!) Будет закрыто
ItGeom() : objectId( GCM_NULL ) {}
+1 -1
View File
@@ -63,7 +63,7 @@ struct ItGeom;
usually corresponds to the assembly of which the mates system is solved.
*/
//---
struct ItPositionManager
struct GCM_CLASS ItPositionManager
{
/// \ru Установить новое положение объекта. \en Set new position of the object.
virtual void Reposition( ItGeom & geom, const MbPlacement3D & pos ) = 0;
+1 -1
View File
@@ -157,7 +157,7 @@ const SimpleName INIT_HASH32_VAL = size_t( 31415926 );
\en Golden section - an arbitrary number for hash-function. \~
*/
// ---
const_expr uint GOLDENRATIO = 0x9e3779b9;
c3d_constexpr uint GOLDENRATIO = 0x9e3779b9;
/**
\}
+7 -7
View File
@@ -39,7 +39,7 @@ struct MbItemData;
\ingroup Base_Tools_IO
*/
// ---
class IModelTreeNode
class MATH_CLASS IModelTreeNode
{
protected:
// \ru Непосредственные потомки узла. \en The immediate children of the node.
@@ -115,7 +115,7 @@ class IEmbodimentTree;
\ingroup Base_Tools_IO
*/
// ---
class IModelTree
class MATH_CLASS IModelTree
{
public:
enum TreeType
@@ -209,16 +209,16 @@ public:
// \ru Построить поддерево из потомков заданного узла.
// \en Build a tree from children of a given node.
static EXPORT_DECLARATION std_unique_ptr<const IModelTree> GetSubtree ( const IModelTreeNode* node );
static std_unique_ptr<const IModelTree> GetSubtree ( const IModelTreeNode* node );
// \ru Получить значимые узлы поддерева с указанным корнем (исключив узлы, которые добавлены для восстановления иерархии дерева).
// Возвращает количество значимых узлов.
// \en Get significant nodes in a subtree with the given root (excluding nodes that were added to reconstruct the tree hierarchy).
// Return a number of significant nodes.
static EXPORT_DECLARATION size_t GetSubtreeSignificantNodes ( const c3d::IModelTreeNode* node, std::set<const c3d::IModelTreeNode*>& nodes );
static size_t GetSubtreeSignificantNodes ( const c3d::IModelTreeNode* node, std::set<const c3d::IModelTreeNode*>& nodes );
// \ru Создать экземпляр дерева. \en Create a tree instance.
static EXPORT_DECLARATION IModelTree* CreateModelTree();
static IModelTree* CreateModelTree();
// \ru Операторы для записи дерева в поток в xml формате. \en Operators to output a tree to a stream in xml format.
friend MATH_FUNC( c3d::t_ofstream & ) operator << ( c3d::t_ofstream& file, IModelTree& tree );
@@ -235,7 +235,7 @@ OBVIOUS_PRIVATE_COPY(IModelTree)
\ingroup Base_Tools_IO
*/
// ---
class IEmbodimentNode
class MATH_CLASS IEmbodimentNode
{
protected:
// \ru Непосредственные потомки узла. \en The immediate children of the node.
@@ -281,7 +281,7 @@ public:
MbAssembly object with an attribute of type at_Embodiment. \n \~
\ingroup Base_Tools_IO
*/
class IEmbodimentTree
class MATH_CLASS IEmbodimentTree
{
protected:
std::vector<const IEmbodimentNode*> m_roots;
+2 -5
View File
@@ -297,18 +297,15 @@ private: \
#define MATH_CLASS __declspec( dllexport )
#define MATH_FUNC(retType) __declspec( dllexport ) retType CALL_DECLARATION
#define MATH_FUNC_EX __declspec( dllexport ) // \ru для KNOWN_OBJECTS_RW_REF_OPERATORS_EX и KNOWN_OBJECTS_RW_PTR_OPERATORS_EX \en for KNOWN_OBJECTS_RW_REF_OPERATORS_EX and KNOWN_OBJECTS_RW_PTR_OPERATORS_EX
#define MATH_SYMBOL __declspec( dllexport )
#else
#define MATH_CLASS __declspec( dllimport )
#define MATH_FUNC(retType) __declspec( dllimport ) retType CALL_DECLARATION
#define MATH_FUNC_EX __declspec( dllimport )
#define MATH_SYMBOL __declspec( dllimport )
#endif
#else // C3D_WINDOWS
#define MATH_CLASS
#define MATH_FUNC(retType) retType
#define MATH_FUNC_EX
#define MATH_SYMBOL
#endif
// \ru Модуль геометрических ограничений. \en Geometric constraints module.
@@ -334,12 +331,12 @@ namespace c3d // namespace C3D
//------------------------------------------------------------------------------
/// \ru Максимальное количество элементов матрицы MxN. \en Maximum number of MxN matrix elements.
//---
const_expr size_t MATRIX_MAX_COUNT = 1000000000; // 1e9
c3d_constexpr size_t MATRIX_MAX_COUNT = 1000000000; // 1e9
//------------------------------------------------------------------------------
/// \ru Максимальный размер массива. \en Maximum size of array.
//---
const_expr size_t ARRAY_MAX_COUNT = 1000000; // 1e6
c3d_constexpr size_t ARRAY_MAX_COUNT = 1000000; // 1e6
//------------------------------------------------------------------------------
/**
+1 -1
View File
@@ -318,7 +318,7 @@ public :
\return \ru Искомое расстояние.
\en The required distance. \~
*/
double DistanceToLineSeg( const MbCartPoint & p1, const MbCartPoint & p2 ) const;
double DistanceToLineSeg( const MbCartPoint & p1, const MbCartPoint & p2, double eps = Math::LengthEps ) const;
/// \ru Длина вектора ( 0, p(x,y) ). \en The vector length ( 0, p(x,y) ).
double Length() const;
+21 -15
View File
@@ -12,14 +12,15 @@
#include <mb_cart_point3d.h>
#include <mb_cube_tree.h>
#include <utility>
#include <vector>
const_expr size_t CUBE_CONTROL_POINTS_COUNT = 26; ///< \ru Количество характерных точек куба. \en The number of control points of cube.
const_expr size_t CUBE_VERTEX_COUNT = 8; ///< \ru Количество вершин куба. \en The number of cube vertices.
const_expr size_t CUBE_EDGES_COUNT = 12; ///< \ru Количество рёбер куба. \en The number of cube edges.
const_expr size_t CUBE_FACES_COUNT = 6; ///< \ru Количество граней куба. \en The number of cube faces.
c3d_constexpr size_t CUBE_CONTROL_POINTS_COUNT = 26; ///< \ru Количество характерных точек куба. \en The number of control points of cube.
c3d_constexpr size_t CUBE_VERTEX_COUNT = 8; ///< \ru Количество вершин куба. \en The number of cube vertices.
c3d_constexpr size_t CUBE_EDGES_COUNT = 12; ///< \ru Количество рёбер куба. \en The number of cube edges.
c3d_constexpr size_t CUBE_FACES_COUNT = 6; ///< \ru Количество граней куба. \en The number of cube faces.
class MATH_CLASS MbRect;
@@ -30,11 +31,12 @@ class MATH_CLASS MbSurface;
namespace c3d // namespace C3D
{
typedef std::pair<MbCube *, size_t> CubePtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::pair<const MbCube *, size_t> ConstCubePtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::vector<CubePtrIndex> CubesPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<ConstCubePtrIndex> ConstCubesPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<MbCube> CubesVector; ///< \ru Вектор габаритных кубов. \en Vector of bounding boxes.
typedef std::pair<MbCube *, size_t> CubePtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::pair<const MbCube *, size_t> ConstCubePtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::vector<CubePtrIndex> CubesPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<ConstCubePtrIndex> ConstCubesPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<MbCube> CubesVector; ///< \ru Вектор габаритных кубов. \en Vector of bounding boxes.
typedef MbCubeTree<MbCube, MbCube, MbCartPoint3D> CubesTree; ///< \ru Дерево габаритных кубов. \en Tree of bounding boxes.
} // namespace C3D
@@ -60,7 +62,7 @@ public :
MbCartPoint3D pmax; ///< \ru Точка диагонали параллелепипеда с максимальными координатами. \en A point of a box diagonal with maximal coordinates.
public :
/// \ru Пустой конструктор \en The empty constructor
/// \ru Пустой конструктор. \en The empty constructor.
MbCube() { SetEmpty(); }
/// \ru Конструктор копирования. \en Copy constructor.
MbCube( const MbCube & init ) : pmin( init.pmin ), pmax( init.pmax ) {}
@@ -329,8 +331,10 @@ public :
\return \ru true, если пересечение есть, \n false в противном случае.
\en Returns true if intersection exists, \n false otherwise. \~
*/
bool Intersect( const MbCartPoint3D & p, const MbVector3D & axis,
SArray<double> & param, double delta = Math::metricRegion ) const;
bool Intersect( const MbCartPoint3D & p,
const MbVector3D & axis,
SArray<double> & param,
double delta = Math::metricRegion ) const;
/// \ru Пересечение куба и окружности. \en The intersection of the box with a circle.
/**
@@ -345,8 +349,10 @@ public :
\return \ru true, если пересечение есть, \n false в противном случае.
\en Returns true if intersection exists, \n false otherwise. \~
*/
bool Intersect( const MbPlacement3D & placement, double radius,
SArray<double> & param, double delta = Math::metricRegion ) const;
bool Intersect( const MbPlacement3D & placement,
double radius,
SArray<double> & param,
double delta = Math::metricRegion ) const;
/// \ru Куб пересечения двух кубов. \en A box of intersection of two boxes.
/**
@@ -395,7 +401,7 @@ public :
/** \brief \ru Вычислить расстояние до куба.
\en Calculate the distance to the cube. \~
\details \ru Возвращается ноль если кубы пересекаются или один содержится в другом.
\details \ru Возвращается ноль, если кубы пересекаются или один содержится в другом.
\en It returns zero if the cubes intersect or one is contained in the other. \~
\param[in] cube - \ru Другой куб.
\en Other cube. \~
File diff suppressed because it is too large Load Diff
+21 -10
View File
@@ -16,10 +16,10 @@
#include <mb_homogeneous3d.h>
const_expr size_t MATRIX_DIM_3D = 4; // \ru Размер матрицы \en A matrix size
const_expr size_t AXIS_0X = 0; // \ru Ось 0X \en 0X-axis
const_expr size_t AXIS_0Y = 1; // \ru Ось 0Y \en 0Y-axis
const_expr size_t AXIS_0Z = 2; // \ru Ось 0Z \en 0Z-axis
c3d_constexpr size_t MATRIX_DIM_3D = 4; // \ru Размер матрицы \en A matrix size
c3d_constexpr size_t AXIS_0X = 0; // \ru Ось 0X \en 0X-axis
c3d_constexpr size_t AXIS_0Y = 1; // \ru Ось 0Y \en 0Y-axis
c3d_constexpr size_t AXIS_0Z = 2; // \ru Ось 0Z \en 0Z-axis
class MATH_CLASS MbMatrix;
@@ -160,13 +160,13 @@ public:
\en \name Initialization functions.
\{ */
/// \ru Инициализировать матрицу как единичную. \en Initialize a matrix as unit one.
void Init();
MbMatrix3D & Init();
/// \ru Инициализировать элементами другой матрицы. \en Initialize by elements of another matrix.
void Init( const MbMatrix3D & init ) { flag = init.flag; ::memcpy( el, init.el, sizeof(el) ); }
MbMatrix3D & Init( const MbMatrix3D & );
/// \ru Инициализировать двумерной матрицей. \en Initialize by a two-dimensional matrix.
void Init( const MbMatrix & );
MbMatrix3D & Init( const MbMatrix & );
/// \ru Инициализировать плейсментом. \en Initialize by a placement.
void Init( const MbPlacement3D & );
MbMatrix3D & Init( const MbPlacement3D & );
/**
\brief \ru Инициализировать произведением заданных матриц.
\en Initialize by the product of given matrices. \~
@@ -175,7 +175,7 @@ public:
\param[in] a, b - \ru Исходные матрицы.
\en Initial matrices. \~
*/
void Init( const MbMatrix3D & a, const MbMatrix3D & b );
MbMatrix3D & Init( const MbMatrix3D & a, const MbMatrix3D & b );
/** \} */
public:
@@ -736,7 +736,7 @@ void CheckAffine3D( const Transform & trans, uint8 & flag )
//------------------------------------------------------------------------------
// \ru Инициализация матрицы. \en Initialization of a matrix.
// ---
inline void MbMatrix3D::Init()
inline MbMatrix3D & MbMatrix3D::Init()
{
el[0][1] = el[0][2] = el[0][3] = 0.0;
el[1][0] = el[1][2] = el[1][3] = 0.0;
@@ -744,8 +744,19 @@ inline void MbMatrix3D::Init()
el[3][0] = el[3][1] = el[3][2] = 0.0;
el[0][0] = el[1][1] = el[2][2] = el[3][3] = 1.0;
flag = MB_IDENTITY;
return *this;
}
//-----------------------------------------------------------------------------
// \ru Инициализировать элементами другой матрицы. \en Initialize by elements of another matrix.
//
inline MbMatrix3D & MbMatrix3D::Init( const MbMatrix3D & init )
{
flag = init.flag; ::memcpy( el, init.el, sizeof(el) );
return *this;
}
//-------------------------------------------------------------------------------
// \ru Есть только перенос. \en Only translation.
+22 -7
View File
@@ -14,6 +14,7 @@
#include <mb_cart_point.h>
#include <mb_homogeneous.h>
#include <mb_cube_tree.h>
#include <utility>
#include <vector>
@@ -23,11 +24,12 @@ class MATH_CLASS MbRect;
namespace c3d // namespace C3D
{
typedef std::pair<MbRect *, size_t> RectPtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::pair<const MbRect *, size_t> ConstRectPtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::vector<RectPtrIndex> RectsPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<ConstRectPtrIndex> ConstRectsPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<MbRect> RectsVector; ///< \ru Вектор габаритных кубов. \en Vector of bounding boxes.
typedef std::pair<MbRect *, size_t> RectPtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::pair<const MbRect *, size_t> ConstRectPtrIndex; ///< \ru Габаритный куб и индекс. \en Bounding box and index.
typedef std::vector<RectPtrIndex> RectsPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<ConstRectPtrIndex> ConstRectsPtrIndices; ///< \ru Вектор габаритных кубов и индексов. \en Vector of bounding boxes and indices.
typedef std::vector<MbRect> RectsVector; ///< \ru Вектор габаритных кубов. \en Vector of bounding boxes.
typedef MbCubeTree<MbRect, MbRect, MbCartPoint> RectsTree; ///< \ru Дерево габаритных кубов. \en Tree of bounding boxes.
} // namespace C3D
@@ -90,9 +92,9 @@ public:
void Set( const MbRect & r );
/// \ru Установить заданные значения границ. \en Set given values of bounds.
void Set( const MbCartPoint & p1, const MbCartPoint & p2 );
/// \ru Установить значения границ как окрестность точки. \en Set values of bounds as point neighbourhood.
/// \ru Установить значения границ как окрестность точки. \en Set values of bounds as point neighborhood.
void Set( const MbCartPoint & p, double eps );
/// \ru Установить значения границ как окрестнсть точки. \en Set values of bounds as point neighbourhood.
/// \ru Установить значения границ как окрестность точки. \en Set values of bounds as point neighborhood.
void Set( const MbCartPoint & p, double dx, double dy );
/// \ru Установить нулевым. \en Set to zero.
void SetNull();
@@ -206,6 +208,19 @@ public:
double DistanceToPoint( const MbCartPoint & to,
unsigned int & outcodes ) const;
/** \brief \ru Вычислить расстояние до куба.
\en Calculate the distance to the cube. \~
\details \ru Возвращается ноль, если кубы пересекаются или один содержится в другом.
\en It returns zero if the cubes intersect or one is contained in the other. \~
\param[in] cube - \ru Другой куб.
\en Other cube. \~
\param[in] eps - \ru Метрическая точность.
\en A metric tolerance. \~
\return \ru Возвращает расстояние до границы.
\en Returns the distance to the boundary. \~
*/
double DistanceToCube( const MbRect & cube, double eps = Math::metricRegion ) const;
/// \ru Вычислить минимальное и максимальное расстояния до точки. \en Calculate minimal and maximal distances to a point.
void CalcDistances( const MbCartPoint & to,
double & dmin, double & dmax,
+278 -230
View File
@@ -19,188 +19,188 @@
/** \ru \name Общие константы
\en \name Common constants
\{ */
const_expr double MB_MAXDOUBLE = 1.0E+300; ///< \ru Максимальное значение double 1.7976931348623158E+308. \en Maximum value of double 1.7976931348623158E+308.
const_expr double MB_MINDOUBLE = 1.0E-300; ///< \ru Минимальное значение double 2.2250738585072014E-308. \en Minimum value of double 2.2250738585072014E-308.
c3d_constexpr double MB_MAXDOUBLE = 1.0E+300; ///< \ru Максимальное значение double 1.7976931348623158E+308. \en Maximum value of double 1.7976931348623158E+308.
c3d_constexpr double MB_MINDOUBLE = 1.0E-300; ///< \ru Минимальное значение double 2.2250738585072014E-308. \en Minimum value of double 2.2250738585072014E-308.
// \ru Математические константы, округленные до 21 значащей цифры, определены в math.h \en Mathematical constants rounded to 21 significant digits, defined in math.h
#if !defined( _MATH_DEFINES_DEFINED )
#ifdef C3D_WINDOWS// _MSC_VER // \ru Константы определены в math.h [Linux] \en Constants defined in math.h [Linux]
const_expr double M_E = 2.71828182845904523536; ///< \ru Экспонента. \en Exponent.
const_expr double M_LOG2E = 1.44269504088896340736; ///< \ru Логарифм M_E по основанию 2. \en Logarithm M_E to base 2.
const_expr double M_LOG10E = 0.434294481903251827651; ///< \ru Логарифм M_E по основанию 10. \en Logarithm M_E to base 10.
const_expr double M_LN2 = 0.693147180559945309417; ///< \ru Натуральный логарифм 2. \en Natural logarithm 2.
const_expr double M_PI_4 = 0.785398163397448309616; ///< M_PI / 4.0
const_expr double M_1_PI = 0.318309886183790671538; ///< 1.0 / M_PI
const_expr double M_2_PI = 0.636619772367581343076; ///< 2.0 / M_PI
const_expr double M_SQRT1_2 = 0.707106781186547524401; ///< \ru Корень из одной второй, sqrt(1/2). \en Root of one half, sqrt(1/2).
c3d_constexpr double M_E = 2.71828182845904523536; ///< \ru Экспонента. \en Exponent.
c3d_constexpr double M_LOG2E = 1.44269504088896340736; ///< \ru Логарифм M_E по основанию 2. \en Logarithm M_E to base 2.
c3d_constexpr double M_LOG10E = 0.434294481903251827651; ///< \ru Логарифм M_E по основанию 10. \en Logarithm M_E to base 10.
c3d_constexpr double M_LN2 = 0.693147180559945309417; ///< \ru Натуральный логарифм 2. \en Natural logarithm 2.
c3d_constexpr double M_PI_4 = 0.785398163397448309616; ///< M_PI / 4.0
c3d_constexpr double M_1_PI = 0.318309886183790671538; ///< 1.0 / M_PI
c3d_constexpr double M_2_PI = 0.636619772367581343076; ///< 2.0 / M_PI
c3d_constexpr double M_SQRT1_2 = 0.707106781186547524401; ///< \ru Корень из одной второй, sqrt(1/2). \en Root of one half, sqrt(1/2).
#else // C3D_WINDOWS
#ifndef M_E
const_expr double M_E = 2.71828182845904523536; ///< \ru Экспонента. \en Exponent.
c3d_constexpr double M_E = 2.71828182845904523536; ///< \ru Экспонента. \en Exponent.
#endif // M_E
#ifndef M_LOG2E
const_expr double M_LOG2E = 1.44269504088896340736; ///< \ru Логарифм M_E по основанию 2. \en Logarithm M_E to base 2.
c3d_constexpr double M_LOG2E = 1.44269504088896340736; ///< \ru Логарифм M_E по основанию 2. \en Logarithm M_E to base 2.
#endif // M_LOG2E
#ifndef M_LOG10E
const_expr double M_LOG10E = 0.434294481903251827651; ///< \ru Логарифм M_E по основанию 10. \en Logarithm M_E to base 10.
c3d_constexpr double M_LOG10E = 0.434294481903251827651; ///< \ru Логарифм M_E по основанию 10. \en Logarithm M_E to base 10.
#endif // M_LOG10E
#ifndef M_LN2
const_expr double M_LN2 = 0.693147180559945309417; ///< \ru Натуральный логарифм 2. \en Natural logarithm 2.
c3d_constexpr double M_LN2 = 0.693147180559945309417; ///< \ru Натуральный логарифм 2. \en Natural logarithm 2.
#endif // M_LN2
#ifndef M_PI_4
const_expr double M_PI_4 = 0.785398163397448309616; ///< M_PI / 4.0
c3d_constexpr double M_PI_4 = 0.785398163397448309616; ///< M_PI / 4.0
#endif // M_PI_4
#ifndef M_1_PI
const_expr double M_1_PI = 0.318309886183790671538; ///< 1.0 / M_PI
c3d_constexpr double M_1_PI = 0.318309886183790671538; ///< 1.0 / M_PI
#endif // M_1_PI
#ifndef M_2_PI
const_expr double M_2_PI = 0.636619772367581343076; ///< 2.0 / M_PI
c3d_constexpr double M_2_PI = 0.636619772367581343076; ///< 2.0 / M_PI
#endif // M_2_PI
#ifndef M_SQRT1_2
const_expr double M_SQRT1_2 = 0.707106781186547524401; ///< \ru Корень из одной второй, sqrt(1/2). \en Root of one half, sqrt(1/2).
c3d_constexpr double M_SQRT1_2 = 0.707106781186547524401; ///< \ru Корень из одной второй, sqrt(1/2). \en Root of one half, sqrt(1/2).
#endif // M_SQRT1_2
#endif // C3D_WINDOWS
#ifndef M_LN10
const_expr double M_LN10 = 2.30258509299404568402; ///< \ru Натуральный логарифм 10, ln(10). \en Natural logarithm 10, ln(10).
c3d_constexpr double M_LN10 = 2.30258509299404568402; ///< \ru Натуральный логарифм 10, ln(10). \en Natural logarithm 10, ln(10).
#endif
#ifndef M_PI
const_expr double M_PI = 3.14159265358979323846; ///< \ru Отношение длины окружности к её диаметру, pi. \en Relation between circle length and its diameter, pi.
c3d_constexpr double M_PI = 3.14159265358979323846; ///< \ru Отношение длины окружности к её диаметру, pi. \en Relation between circle length and its diameter, pi.
#endif
#ifndef M_PI_2
const_expr double M_PI_2 = 1.57079632679489661923; ///< M_PI / 2.0
c3d_constexpr double M_PI_2 = 1.57079632679489661923; ///< M_PI / 2.0
#endif
#ifndef M_2_SQRTPI
const_expr double M_2_SQRTPI = 1.12837916709551257390; ///< \ru Два разделить на корень из числа пи, 2/sqrt(pi). \en Two divided by root of pi, 2/sqrt(pi).
c3d_constexpr double M_2_SQRTPI = 1.12837916709551257390; ///< \ru Два разделить на корень из числа пи, 2/sqrt(pi). \en Two divided by root of pi, 2/sqrt(pi).
#endif
#ifndef M_SQRT2
const_expr double M_SQRT2 = 1.41421356237309504880; ///< \ru Корень из двух, sqrt(2). \en Root of two, sqrt(2).
c3d_constexpr double M_SQRT2 = 1.41421356237309504880; ///< \ru Корень из двух, sqrt(2). \en Root of two, sqrt(2).
#endif
#endif // _MATH_DEFINES_DEFINED
const_expr double M_1_SQRTPI = 0.564189583547756286948; ///< \ru Единица, деленная на корень из числа пи, 1/sqrt(pi). \en One divided by root of pi, 1/sqrt(pi).
const_expr double M_FI = 1.61803398874989484; ///< \ru Число золотого сечения, 1/M_FI = 0.6180339887499. \en Golden ratio, 1/M_FI = 0.6180339887499.
const_expr double MM_INCH = 25.4; ///< \ru Количество миллиметров в дюйме. \en Millimeters per inch.
c3d_constexpr double M_1_SQRTPI = 0.564189583547756286948; ///< \ru Единица, деленная на корень из числа пи, 1/sqrt(pi). \en One divided by root of pi, 1/sqrt(pi).
c3d_constexpr double M_FI = 1.61803398874989484; ///< \ru Число золотого сечения, 1/M_FI = 0.6180339887499. \en Golden ratio, 1/M_FI = 0.6180339887499.
c3d_constexpr double MM_INCH = 25.4; ///< \ru Количество миллиметров в дюйме. \en Millimeters per inch.
const_expr double EPSILON = 1E-10; ///< \ru Погрешность. \en Tolerance.
const_expr double MAXIMON = 1E+10; ///< \ru 10 в 10-й степени. \en 10 to the power of 10.
const_expr double MAX_OVERALL_DIM = 1E+12; ///< \ru Максимальное значение габарита. \en Maximal value of bounding box.
c3d_constexpr double EPSILON = 1E-10; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double MAXIMON = 1E+10; ///< \ru 10 в 10-й степени. \en 10 to the power of 10.
c3d_constexpr double MAX_OVERALL_DIM = 1E+12; ///< \ru Максимальное значение габарита. \en Maximal value of bounding box.
const_expr double DETERMINANT_MAX = 1E+137; ///< \ru Максимальная величина. \en Maximal value.
const_expr double DETERMINANT_MIN = 1E-171; ///< \ru Минимальная величина. \en Minimal value.
c3d_constexpr double DETERMINANT_MAX = 1E+137; ///< \ru Максимальная величина. \en Maximal value.
c3d_constexpr double DETERMINANT_MIN = 1E-171; ///< \ru Минимальная величина. \en Minimal value.
const_expr double NULL_EPSILON = 1E-30; ///< \ru Погрешность для проверки на равенство нулю. \en Tolerance for equality to zero.
const_expr double NULL_REGION = 1E-20; ///< \ru Погрешность для проверки на равенство нулю. \en Tolerance for equality to zero.
c3d_constexpr double NULL_EPSILON = 1E-30; ///< \ru Погрешность для проверки на равенство нулю. \en Tolerance for equality to zero.
c3d_constexpr double NULL_REGION = 1E-20; ///< \ru Погрешность для проверки на равенство нулю. \en Tolerance for equality to zero.
const_expr double DOUBLE_EPSILON = 1E-16; ///< \ru Погрешность. \en Tolerance.
const_expr double DOUBLE_REGION = 1E-15; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double DOUBLE_EPSILON = 1E-16; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double DOUBLE_REGION = 1E-15; ///< \ru Погрешность. \en Tolerance.
#ifdef C3D_STANDARD_CXX_11
const_expr double EXTENT_EQUAL = 1E-14; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double EXTENT_EQUAL = 1E-14; ///< \ru Погрешность. \en Tolerance.
#else
#define EXTENT_EQUAL 1E-14 ///< \ru Погрешность. \en Tolerance.
#endif
const_expr double EXTENT_EPSILON = 1E-12; ///< \ru Погрешность. \en Tolerance.
const_expr double EXTENT_REGION = 1E-11; ///< \ru Погрешность. \en Tolerance.
const_expr double LENGTH_EPSILON = 1E-10; ///< \ru Погрешность длины. \en Tolerance for length.
const_expr double LENGTH_REGION = 1E-9; ///< \ru Погрешность региона. \en Tolerance for region.
c3d_constexpr double EXTENT_EPSILON = 1E-12; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double EXTENT_REGION = 1E-11; ///< \ru Погрешность. \en Tolerance.
c3d_constexpr double LENGTH_EPSILON = 1E-10; ///< \ru Погрешность длины. \en Tolerance for length.
c3d_constexpr double LENGTH_REGION = 1E-9; ///< \ru Погрешность региона. \en Tolerance for region.
const_expr double METRIC_EPSILON = 1E-8; ///< \ru Погрешность расстояния в итерационных функциях. \en Tolerance for distance in iterative functions.
const_expr double METRIC_REGION = 1E-7; ///< \ru Неразличимая метрическая область. \en Indistinguishable metric region.
const_expr double METRIC_PRECISION = 1E-6; ///< \ru Метрическая погрешность. \en Metric tolerance.
const_expr double METRIC_ACCURACY = 1E-5; ///< \ru Наибольшая метрическая погрешность (абсолютная точность в мм ("размер" атома 5e-8 мм)). \en The largest metric tolerance (absolute tolerance expressed in mm ("size" of atom is 5e-8 mm)).
const_expr double METRIC_NEAR = 1E-4; ///< \ru Метрическая близость. \en Metric proximity tolerance.
c3d_constexpr double METRIC_EPSILON = 1E-8; ///< \ru Погрешность расстояния в итерационных функциях. \en Tolerance for distance in iterative functions.
c3d_constexpr double METRIC_REGION = 1E-7; ///< \ru Неразличимая метрическая область. \en Indistinguishable metric region.
c3d_constexpr double METRIC_PRECISION = 1E-6; ///< \ru Метрическая погрешность. \en Metric tolerance.
c3d_constexpr double METRIC_ACCURACY = 1E-5; ///< \ru Наибольшая метрическая погрешность (абсолютная точность в мм ("размер" атома 5e-8 мм)). \en The largest metric tolerance (absolute tolerance expressed in mm ("size" of atom is 5e-8 mm)).
c3d_constexpr double METRIC_NEAR = 1E-4; ///< \ru Метрическая близость. \en Metric proximity tolerance.
const_expr double PARAM_EPSILON = 1E-8; ///< \ru Погрешность параметра в итерационных функциях. \en Tolerance for parameter in iterative functions.
const_expr double PARAM_REGION = 1E-7; ///< \ru Неразличимая параметрическая область. \en Indistinguishable parametric region.
const_expr double PARAM_PRECISION = 1E-6; ///< \ru Параметрическая погрешность. \en Parametric tolerance.
const_expr double PARAM_ACCURACY = 1E-5; ///< \ru Наибольшая параметрическая погрешность. \en The largest parametric tolerance.
const_expr double PARAM_NEAR = 1E-4; ///< \ru Параметрическая близость. \en Parametric proximity.
c3d_constexpr double PARAM_EPSILON = 1E-8; ///< \ru Погрешность параметра в итерационных функциях. \en Tolerance for parameter in iterative functions.
c3d_constexpr double PARAM_REGION = 1E-7; ///< \ru Неразличимая параметрическая область. \en Indistinguishable parametric region.
c3d_constexpr double PARAM_PRECISION = 1E-6; ///< \ru Параметрическая погрешность. \en Parametric tolerance.
c3d_constexpr double PARAM_ACCURACY = 1E-5; ///< \ru Наибольшая параметрическая погрешность. \en The largest parametric tolerance.
c3d_constexpr double PARAM_NEAR = 1E-4; ///< \ru Параметрическая близость. \en Parametric proximity.
const_expr ptrdiff_t UNDEFINED_INT_T = SYS_MIN_ST; ///< \ru Неопределенный int. \en Undefined int.
const_expr size_t FAIR_MAX_DEGREE = 11; ///< \ru Максимальный порядок NURBS при аппроксимации. \en Maxinum degree of the NURBS approximation.
c3d_constexpr ptrdiff_t UNDEFINED_INT_T = SYS_MIN_ST; ///< \ru Неопределенный int. \en Undefined int.
c3d_constexpr size_t FAIR_MAX_DEGREE = 11; ///< \ru Максимальный порядок NURBS при аппроксимации. \en Maxinum degree of the NURBS approximation.
const_expr double M_PI2 = M_PI * 2.0; ///< \ru Отношение длины окружности к её радиусу, 2.0 * M_PI, 6.28318530717958647692 \en Relation between circle length and its radius, 2.0 * M_PI, 6.28318530717958647692
const_expr double M_DEGRAD = M_PI / 180.0; ///< \ru Коэффициент перевода градусов в радианы. \en Factor of conversion from degrees to radians.
const_expr double M_RADDEG = 180.0 / M_PI; ///< \ru Коэффициент перевода радиан в градусы. \en Factor of conversion from radians to degrees.
const_expr double UNDEFINED_DBL = -MB_MAXDOUBLE; ///< \ru Неопределенный double. \en Undefined double.
const_expr double DEVIATION_SAG = M_PI * 0.04; ///< \ru Угловая толерантность. \en Angular tolerance.
const_expr double ANGLE_EPSILON = PARAM_EPSILON * M_PI; ///< \ru Погрешность угла. \en Angular tolerance.
const_expr double ANGLE_REGION = ANGLE_EPSILON * 40; ///< \ru Погрешность угла, при которой углы считаются равными. \en Angular tolerance for equality of angles.
c3d_constexpr double M_PI2 = M_PI * 2.0; ///< \ru Отношение длины окружности к её радиусу, 2.0 * M_PI, 6.28318530717958647692 \en Relation between circle length and its radius, 2.0 * M_PI, 6.28318530717958647692
c3d_constexpr double M_DEGRAD = M_PI / 180.0; ///< \ru Коэффициент перевода градусов в радианы. \en Factor of conversion from degrees to radians.
c3d_constexpr double M_RADDEG = 180.0 / M_PI; ///< \ru Коэффициент перевода радиан в градусы. \en Factor of conversion from radians to degrees.
c3d_constexpr double UNDEFINED_DBL = -MB_MAXDOUBLE; ///< \ru Неопределенный double. \en Undefined double.
c3d_constexpr double DEVIATION_SAG = M_PI * 0.04; ///< \ru Угловая толерантность. \en Angular tolerance.
c3d_constexpr double ANGLE_EPSILON = PARAM_EPSILON * M_PI; ///< \ru Погрешность угла. \en Angular tolerance.
c3d_constexpr double ANGLE_REGION = ANGLE_EPSILON * 40; ///< \ru Погрешность угла, при которой углы считаются равными. \en Angular tolerance for equality of angles.
namespace c3d // namespace C3D
{
const_expr double METRIC_PORTION = 0.075; ///< \ru Доля расстояния между контрольными точками. \en Proportion of distance between control points.
const_expr double METRIC_DELTA = 0.05; ///< \ru Величина отшагивания. \en Metric offset.
const_expr double PARAM_DELTA_MIN = 0.005; ///< \ru Минимальная доля приращения параметра. \en Minimal portion of parameter increment.
const_expr double PARAM_DELTA_MAX = 1.0; ///< \ru Максимальная доля приращения параметра. \en Maximal portion of parameter increment.
c3d_constexpr double METRIC_PORTION = 0.075; ///< \ru Доля расстояния между контрольными точками. \en Proportion of distance between control points.
c3d_constexpr double METRIC_DELTA = 0.05; ///< \ru Величина отшагивания. \en Metric offset.
c3d_constexpr double PARAM_DELTA_MIN = 0.005; ///< \ru Минимальная доля приращения параметра. \en Minimal portion of parameter increment.
c3d_constexpr double PARAM_DELTA_MAX = 1.0; ///< \ru Максимальная доля приращения параметра. \en Maximal portion of parameter increment.
const_expr double MIN_LENGTH = 1.0E-4; ///< \ru Минимальная длина объекта. \en Minimal object length.
const_expr double MAX_LENGTH = 5.0E+7; ///< \ru Максимальная длина объекта. \en Maximal object length.
const_expr double MIN_RADIUS = 1.0E-4; ///< \ru Минимальный радиус объекта. \en Minimal object radius.
const_expr double MAX_RADIUS = 2.5E+7; ///< \ru Максимальный радиус объекта. \en Maximal object radius.
c3d_constexpr double MIN_LENGTH = 1.0E-4; ///< \ru Минимальная длина объекта. \en Minimal object length.
c3d_constexpr double MAX_LENGTH = 5.0E+7; ///< \ru Максимальная длина объекта. \en Maximal object length.
c3d_constexpr double MIN_RADIUS = 1.0E-4; ///< \ru Минимальный радиус объекта. \en Minimal object radius.
c3d_constexpr double MAX_RADIUS = 2.5E+7; ///< \ru Максимальный радиус объекта. \en Maximal object radius.
const_expr double DELTA_MIN = 1E-3; ///< \ru Коэффициент уменьшения. \en Reduction factor.
const_expr double DELTA_MID = 1E-2; ///< \ru Коэффициент уменьшения. \en Reduction factor.
const_expr double DELTA_MOD = 1E-1; ///< \ru Коэффициент уменьшения. \en Reduction factor.
const_expr double DELTA_MAX = 1E+3; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double POWER_1 = 1E+1; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double POWER_2 = 1E+2; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double POWER_3 = 1E+3; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double POWER_4 = 1E+4; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double POWER_5 = 1E+5; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double DELTA_MIN = 1E-3; ///< \ru Коэффициент уменьшения. \en Reduction factor.
c3d_constexpr double DELTA_MID = 1E-2; ///< \ru Коэффициент уменьшения. \en Reduction factor.
c3d_constexpr double DELTA_MOD = 1E-1; ///< \ru Коэффициент уменьшения. \en Reduction factor.
c3d_constexpr double DELTA_MAX = 1E+3; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double POWER_1 = 1E+1; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double POWER_2 = 1E+2; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double POWER_3 = 1E+3; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double POWER_4 = 1E+4; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr double POWER_5 = 1E+5; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr double ONE_THIRD = 0.33333333333333333333; ///< 1/3.
const_expr double TWO_THIRD = 0.66666666666666666666; ///< 2/3.
const_expr double ONE_SIXTH = 0.166666666666666666667; ///< 1/6.
const_expr double ONE_FIFTH = 0.2; ///< 1/5.
const_expr double TWO_FIFTH = 0.4; ///< 2/5.
const_expr double ONE_QUARTER = 0.25; ///< 1/4.
const_expr double ONE_HALF = 0.5; ///< 1/2.
const_expr double ONE_SEVENTH = 0.14285714285714285714; ///< 1/7.
const_expr double ONE_EIGHTH = 0.125; ///< 1/8.
c3d_constexpr double ONE_THIRD = 0.33333333333333333333; ///< 1/3.
c3d_constexpr double TWO_THIRD = 0.66666666666666666666; ///< 2/3.
c3d_constexpr double ONE_SIXTH = 0.166666666666666666667; ///< 1/6.
c3d_constexpr double ONE_FIFTH = 0.2; ///< 1/5.
c3d_constexpr double TWO_FIFTH = 0.4; ///< 2/5.
c3d_constexpr double ONE_QUARTER = 0.25; ///< 1/4.
c3d_constexpr double ONE_HALF = 0.5; ///< 1/2.
c3d_constexpr double ONE_SEVENTH = 0.14285714285714285714; ///< 1/7.
c3d_constexpr double ONE_EIGHTH = 0.125; ///< 1/8.
// \ru Способы построения поверхности сопряжения (скругления или фаски). \en Ways for construction of smooth surface (fillet or chamfer).
const_expr double _CONIC_MIN_ = 0.05; ///< \ru Минимальный коэффициент полноты сечения поверхности сопряжения (при 0.5 - парабола, меньше - эллипс). \en Minimum factor of smooth surface section completeness (0.5 for parabola, less for ellipse).
const_expr double _CONIC_MAX_ = 0.95; ///< \ru Максимальный коэффициент полноты сечения поверхности сопряжения (при 0.5 - парабола, больше - гипербола). \en Maximum factor of smooth surface section completeness (0.5 for parabola, greater for hyperbola).
const_expr double _ARC_ = 0.0; ///< \ru Коэффициент полноты сечения поверхности скругления при u = const соответствует дуге окружности. \en Factor of smooth surface section completeness in case of u = const corresponds to circle arc.
c3d_constexpr double _CONIC_MIN_ = 0.05; ///< \ru Минимальный коэффициент полноты сечения поверхности сопряжения (при 0.5 - парабола, меньше - эллипс). \en Minimum factor of smooth surface section completeness (0.5 for parabola, less for ellipse).
c3d_constexpr double _CONIC_MAX_ = 0.95; ///< \ru Максимальный коэффициент полноты сечения поверхности сопряжения (при 0.5 - парабола, больше - гипербола). \en Maximum factor of smooth surface section completeness (0.5 for parabola, greater for hyperbola).
c3d_constexpr double _ARC_ = 0.0; ///< \ru Коэффициент полноты сечения поверхности скругления при u = const соответствует дуге окружности. \en Factor of smooth surface section completeness in case of u = const corresponds to circle arc.
const_expr int32 TEN = 10; ///< \ru Число 10. \en Number 10.
const_expr int32 TWENTY = 20; ///< \ru Число 20. \en Number 20.
const_expr int32 TESSERA_MAX = 4000; ///< \ru Максимальное количество ячеек в строке и ряду триангуляционной сетки. \en Maximum count of cell in rows and columns for triangulation grid.
const_expr int32 COUNT_MAX = 512; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr int32 COUNT_MID = 256; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr int32 COUNT_MIN = 128; ///< \ru Коэффициент увеличения. \en Magnification factor.
const_expr int32 COUNT_BIN = 64; ///< \ru Уровень вложенности. \en Inclusion level.
const_expr int32 WIRE_MAX = 256; ///< \ru Максимальное количество линий отрисовочной сетки. \en The maximum number of mesh lines.
c3d_constexpr int32 TEN = 10; ///< \ru Число 10. \en Number 10.
c3d_constexpr int32 TWENTY = 20; ///< \ru Число 20. \en Number 20.
c3d_constexpr int32 TESSERA_MAX = 4000; ///< \ru Максимальное количество ячеек в строке и ряду триангуляционной сетки. \en Maximum count of cell in rows and columns for triangulation grid.
c3d_constexpr int32 COUNT_MAX = 512; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr int32 COUNT_MID = 256; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr int32 COUNT_MIN = 128; ///< \ru Коэффициент увеличения. \en Magnification factor.
c3d_constexpr int32 COUNT_BIN = 64; ///< \ru Уровень вложенности. \en Inclusion level.
c3d_constexpr int32 WIRE_MAX = 256; ///< \ru Максимальное количество линий отрисовочной сетки. \en The maximum number of mesh lines.
const_expr int32 ITERATE_COUNT = 16; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 ITERATE_LIMIT = 32; ///< \ru Количество итераций для построения касательных окружностей. \en Count of iterations for construction of tangent circles.
c3d_constexpr int32 ITERATE_COUNT = 16; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 ITERATE_LIMIT = 32; ///< \ru Количество итераций для построения касательных окружностей. \en Count of iterations for construction of tangent circles.
const_expr int32 NEWTON_COUNT = 8; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 NEWTON_COUNT_2X = 16; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 NEWTON_COUNT_3X = 24; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 NEWTON_COUNT_4X = 32; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 NEWTON_COUNT_8X = 64; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 NEWTON_COUNT = 8; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 NEWTON_COUNT_2X = 16; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 NEWTON_COUNT_3X = 24; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 NEWTON_COUNT_4X = 32; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 NEWTON_COUNT_8X = 64; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 LIMIT_COUNT = 4; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
const_expr int32 COUNT_DELTA = 10; ///< \ru Коэффициент увеличения или уменьшения. \en Reduction or magnification factor.
const_expr int32 COUNT_DELTA_2X = 20; ///< \ru Коэффициент увеличения или уменьшения. \en Reduction or magnification factor.
const_expr int32 ITEMS_COUNT = 12; ///< \ru Число точек в шаговом методе. \en Number of points in step method.
c3d_constexpr int32 LIMIT_COUNT = 4; ///< \ru Число приближений в итерационном методе. \en Number of approximations in iterative method.
c3d_constexpr int32 COUNT_DELTA = 10; ///< \ru Коэффициент увеличения или уменьшения. \en Reduction or magnification factor.
c3d_constexpr int32 COUNT_DELTA_2X = 20; ///< \ru Коэффициент увеличения или уменьшения. \en Reduction or magnification factor.
c3d_constexpr int32 ITEMS_COUNT = 12; ///< \ru Число точек в шаговом методе. \en Number of points in step method.
const_expr int32 BEZIER_DEGREE = 4; ///< \ru Порядок Безье-сплайна по умолчанию. \en Default degree of Bezier-spline.
const_expr int32 NURBS_DEGREE = 4; ///< \ru Порядок NURBS по умолчанию. \en Degree of NURBS.
c3d_constexpr int32 BEZIER_DEGREE = 4; ///< \ru Порядок Безье-сплайна по умолчанию. \en Default degree of Bezier-spline.
c3d_constexpr int32 NURBS_DEGREE = 4; ///< \ru Порядок NURBS по умолчанию. \en Degree of NURBS.
const_expr int32 NURBS_POINTS_COUNT = 6; ///< \ru Число точек для NURBS по умолчанию для прямого редактирования. \en Default number of points for NURBS direct editing.
const_expr int32 NURBS_POINTS_MAX_COUNT = 100; ///< \ru Максимальное число точек для NURBS по умолчанию для прямого редактирования. \en Default maximum number of points for NURBS direct editing.
const_expr int32 APPROX_POINTS_MUL_COEFF = 3; ///< \ru Коэффициент увеличения количества точек для метода наименьших квадратов. \en Factor of points count incrementing in method of least squares.
c3d_constexpr int32 NURBS_POINTS_COUNT = 6; ///< \ru Число точек для NURBS по умолчанию для прямого редактирования. \en Default number of points for NURBS direct editing.
c3d_constexpr int32 NURBS_POINTS_MAX_COUNT = 100; ///< \ru Максимальное число точек для NURBS по умолчанию для прямого редактирования. \en Default maximum number of points for NURBS direct editing.
c3d_constexpr int32 APPROX_POINTS_MUL_COEFF = 3; ///< \ru Коэффициент увеличения количества точек для метода наименьших квадратов. \en Factor of points count incrementing in method of least squares.
const_expr int32 SPACE_DIM = 3; ///< \ru Размерность 3D-пространства. \en Dimension of 3D space.
c3d_constexpr int32 SPACE_DIM = 3; ///< \ru Размерность 3D-пространства. \en Dimension of 3D space.
const_expr int32 TRT_FREE = 0; ///< \ru Сопряжение отсутствует. \en No conjugation.
const_expr int32 TRT_TANGENT = 1; ///< \ru Сопряжение по касательной. \en Tangent conjugation.
const_expr int32 TRT_NORMAL = 2; ///< \ru Сопряжение по нормали. \en Normal conjugation.
c3d_constexpr int32 TRT_FREE = 0; ///< \ru Сопряжение отсутствует. \en No conjugation.
c3d_constexpr int32 TRT_TANGENT = 1; ///< \ru Сопряжение по касательной. \en Tangent conjugation.
c3d_constexpr int32 TRT_NORMAL = 2; ///< \ru Сопряжение по нормали. \en Normal conjugation.
/** \ru \name Способ информирования о нарушении требований.~
@@ -215,27 +215,27 @@ enum eAssertViolationNotify {
} // namespace C3D
const_expr float MB_AMBIENT = 0.4f; ///< \ru Коэффициент рассеянного освещения (фон). \en Coefficient of backlighting.
const_expr float MB_DIFFUSE = 0.7f; ///< \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection.
const_expr float MB_SPECULARITY = 0.8f; ///< \ru Коэффициент зеркального отражения. \en Coefficient of specular reflection.
const_expr float MB_SHININESS = 50.0f; ///< \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection).
const_expr float MB_OPACITY = 1.0f; ///< \ru Коэффициент суммарного отражения (коэффициент непрозрачности). \en Coefficient of total reflection (opacity coefficient).
const_expr float MB_EMISSION = 0.0f; ///< \ru Коэффициент излучения. \en Emissivity coefficient.
c3d_constexpr float MB_AMBIENT = 0.4f; ///< \ru Коэффициент рассеянного освещения (фон). \en Coefficient of backlighting.
c3d_constexpr float MB_DIFFUSE = 0.7f; ///< \ru Коэффициент диффузного отражения. \en Coefficient of diffuse reflection.
c3d_constexpr float MB_SPECULARITY = 0.8f; ///< \ru Коэффициент зеркального отражения. \en Coefficient of specular reflection.
c3d_constexpr float MB_SHININESS = 50.0f; ///< \ru Блеск (показатель степени в законе зеркального отражения). \en Shininess (index according to the law of specular reflection).
c3d_constexpr float MB_OPACITY = 1.0f; ///< \ru Коэффициент суммарного отражения (коэффициент непрозрачности). \en Coefficient of total reflection (opacity coefficient).
c3d_constexpr float MB_EMISSION = 0.0f; ///< \ru Коэффициент излучения. \en Emissivity coefficient.
const_expr uint32 MB_DEFCOLOR = 0x7F7F7F; ///< \ru Цвет по умолчанию при импорте и экспорте (серый). \en Default color for import and export (grey).
const_expr uint32 MB_C3DCOLOR = 0xFF7F00; ///< \ru Цвет по умолчанию для геометрических объектов. \en Default color for geometric objects.
c3d_constexpr uint32 MB_DEFCOLOR = 0x7F7F7F; ///< \ru Цвет по умолчанию при импорте и экспорте (серый). \en Default color for import and export (grey).
c3d_constexpr uint32 MB_C3DCOLOR = 0xFF7F00; ///< \ru Цвет по умолчанию для геометрических объектов. \en Default color for geometric objects.
/// \ru Битовые флаги для матрицы и локальной системы координат. \en Bit flags for matrix and local coordinate system.
const_expr uint8 MB_IDENTITY = 0x00; ///< \ru Единичная матрица. \en Identity.
const_expr uint8 MB_TRANSLATION = 0x01; ///< \ru Присутствует смещение. \en Translation.
const_expr uint8 MB_ROTATION = 0x02; ///< \ru Присутствует вращение. \en Rotation.
const_expr uint8 MB_SCALING = 0x04; ///< \ru Присутствует масштабирование (компонент не 1.0). \en Scaling (factor is not equal to 1.0).
const_expr uint8 MB_REFLECTION = 0x08; ///< \ru Присутствует зеркальная инверсия. \en Reflection.
const_expr uint8 MB_LEFT = 0x08; ///< \ru Присутствует зеркальная инверсия (признак левой системы координат). \en Reflection (left coordinate system attribute).
const_expr uint8 MB_ORTOGONAL = 0x10; ///< \ru Присутствует ортогональность, взводится только в случае аффинности. \en Orthogonality, is set up in case of affinity.
const_expr uint8 MB_AFFINE = 0x20; ///< \ru Отсутствует ортогональность и нормированность (аффинное преобразование). \en Absence of orthogonality and normalization (affine transformation).
const_expr uint8 MB_PERSPECTIVE = 0x40; ///< \ru Присутствует вектор перспективы (не нулевой). \en Vector of perspective (non-zero).
const_expr uint8 MB_UNSET = 0x80; ///< \ru Битовые флаги не установлены. \en Bit flags not set.
c3d_constexpr uint8 MB_IDENTITY = 0x00; ///< \ru Единичная матрица. \en Identity.
c3d_constexpr uint8 MB_TRANSLATION = 0x01; ///< \ru Присутствует смещение. \en Translation.
c3d_constexpr uint8 MB_ROTATION = 0x02; ///< \ru Присутствует вращение. \en Rotation.
c3d_constexpr uint8 MB_SCALING = 0x04; ///< \ru Присутствует масштабирование (компонент не 1.0). \en Scaling (factor is not equal to 1.0).
c3d_constexpr uint8 MB_REFLECTION = 0x08; ///< \ru Присутствует зеркальная инверсия. \en Reflection.
c3d_constexpr uint8 MB_LEFT = 0x08; ///< \ru Присутствует зеркальная инверсия (признак левой системы координат). \en Reflection (left coordinate system attribute).
c3d_constexpr uint8 MB_ORTOGONAL = 0x10; ///< \ru Присутствует ортогональность, взводится только в случае аффинности. \en Orthogonality, is set up in case of affinity.
c3d_constexpr uint8 MB_AFFINE = 0x20; ///< \ru Отсутствует ортогональность и нормированность (аффинное преобразование). \en Absence of orthogonality and normalization (affine transformation).
c3d_constexpr uint8 MB_PERSPECTIVE = 0x40; ///< \ru Присутствует вектор перспективы (не нулевой). \en Vector of perspective (non-zero).
c3d_constexpr uint8 MB_UNSET = 0x80; ///< \ru Битовые флаги не установлены. \en Bit flags not set.
/** \} */
@@ -279,12 +279,13 @@ public:
{
protected:
size_t _id;
double * _value;
public:
DoubleVariable( double v );
const double & operator()();
double operator()() const;
operator double() const;
const double & operator()() { return *_value; }
double operator()() const { return *_value; }
operator double() const { return *_value; }
void SetVarValue( double val );
void RestoreVarValue();
@@ -301,12 +302,13 @@ public:
{
protected:
size_t _id;
size_t * _value;
public:
SizeVariable( size_t v );
const size_t & operator()();
size_t operator()() const;
operator size_t() const;
const size_t & operator()() { return *_value; }
size_t operator()() const { return *_value; }
operator size_t() const { return *_value; }
void SetVarValue( size_t val );
void RestoreVarValue();
@@ -346,7 +348,11 @@ public:
void RestoreVarValue();
};
// \ru Константы \en Constants
//------------------------------------------------------------------------------
// \ru Константы. \en Constants.
//---
public:
static const double PI2; ///< \ru Отношение длины окружности к её радиусу. \en Relation between circle length and its radius.
static const double invPI2; ///< \ru Отношение радиуса окружности к её длине. \en Relation between circle radius and its length.
static const double RADDEG; ///< \ru Количество угловых градусов в радиане. \en Count of angular degrees in radian.
@@ -388,11 +394,10 @@ public:
static const double deltaMax; ///< \ru Максимальное приращение. \en Maximum increment.
//------------------------------------------------------------------------------
// \ru Изменяемые переменные.
// \en Controlled variables.
//------------------------------------------------------------------------------
// \ru Изменяемые переменные. \en Controlled variables.
//---
public:
// \ru Изменяются только в группе с помощью функций SetUserValue() и SetDefaultValues().
// \en Can be changed only in a group using functions SetUserValue() and SetDefaultValues().
static GroupVariable LengthEps; ///< \ru Точность вычисления длины (PARAM_PRECISION). \en Length calculation tolerance (PARAM_PRECISION).
@@ -421,126 +426,121 @@ public:
static SizeVariable vSurfaceDegree; ///< \ru Порядок поверхности по V. \en Surface degree by V.
//------------------------------------------------------------------------------
// \ru Временные переменные. \en Temporary variables.
//---
static size_t tempIndex; ///< \ru Временный коэффициент. \en Temporary coefficient.
static size_t nameIndex; ///< \ru Индекс имени. \en Name index.
static size_t currentIndex; ///< \ru Текущее имя. \en Current name.
static size_t mathState; ///< \ru Состояние математического ядра. \en State of mathematical kernel.
//------------------------------------------------------------------------------
// \ru Временные переменные. \en Temporary variables.
//---
public:
static size_t tempIndex; ///< \ru Временный коэффициент\индекс. \en Temporary coefficient\index.
static MbRefItem * selectCurve; ///< \ru Запомненный объект (для отладки). \en Stored object (for debug).
static MbRefItem * selectSurface; ///< \ru Запомненный объект (для отладки). \en Stored object (for debug).
static MbRefItem * selectEdge; ///< \ru Запомненный объект (для отладки). \en Stored object (for debug).
static MbRefItem * selectFace; ///< \ru Запомненный объект (для отладки). \en Stored object (for debug).
static MbRefItem * selectSolid; ///< \ru Запомненный объект (для отладки). \en Stored object (for debug).
//------------------------------------------------------------------------------
// \ru Функции статических данных. \en Functions of static data.
//---
public:
// \ru Функции статических данных \en Functions of static data
/// \ru Математическая версия по умолчанию. \en Default mathematical version.
static const VersionContainer & DefaultVersion();
/// \ru Математическая версия по умолчанию. \en Default mathematical version.
static VERSION DefaultMathVersion();
/// \ru Идентификатор ядра как приложения. \en Kernel ID.
static const MbUuid & MathID();
/** \brief \ru Необходимо ли полное именование объекта.
\en Is it necessary to full object naming. \~
\details \ru Необходимо ли полное именование объекта.
Если возвращает true, то после создания оболочки именуются грани, рёбра, вершины,
если возвращает false, то после создания оболочки именуются только грани. \n
\en Is it necessary to full object naming.
If returns true then faces, edges, vertices are named after shell creation,
If returns false then only faces are named after shell creation. \n \~
\ingroup Base_Items
*/
/** \brief \ru Необходимо ли полное именование объекта.
\en Is it necessary to full object naming. \~
\details \ru Необходимо ли полное именование объекта.
Если возвращает true, то после создания оболочки именуются грани, рёбра, вершины,
если возвращает false, то после создания оболочки именуются только грани. \n
\en Is it necessary to full object naming.
If returns true then faces, edges, vertices are named after shell creation,
If returns false then only faces are named after shell creation. \n \~
\ingroup Base_Items
*/
static bool NamesComplete();
/** \brief \ru Установить необходимость полного именования объекта.
\en Set flag of full object naming. \~
\details \ru Установить необходимость полного именования объекта.
Если передано true, то после создания оболочки будут именоваться грани, рёбра, вершины,
если передано false, то после создания оболочки будут именоваться только грани. \n
\en Set flag of full object naming.
If passed true then faces, edges, vertices are named after shell creation,
if passed false then only faces are named after shell creation. \n \~
\ingroup Base_Items
*/
/** \brief \ru Установить необходимость полного именования объекта.
\en Set flag of full object naming. \~
\details \ru Установить необходимость полного именования объекта.
Если передано true, то после создания оболочки будут именоваться грани, рёбра, вершины,
если передано false, то после создания оболочки будут именоваться только грани. \n
\en Set flag of full object naming.
If passed true then faces, edges, vertices are named after shell creation,
if passed false then only faces are named after shell creation. \n \~
\ingroup Base_Items
*/
static void SetNamesComplete( bool b );
/** \brief \ru Необходимо ли отключить работу построителей.
\en Is it necessary to disable the work of constructors. \~
\details \ru Необходимо ли отключить работу построителей. \n
\en Is it necessary to disable the work of constructors. \n \~
\ingroup Base_Items
*/
/** \brief \ru Необходимо ли отключить работу построителей.
\en Is it necessary to disable the work of constructors. \~
\details \ru Необходимо ли отключить работу построителей. \n
\en Is it necessary to disable the work of constructors. \n \~
\ingroup Base_Items
*/
static bool SupressCreators();
/** \brief \ru Установить флаг отключения работы построителей.
\en Set the flag to disable the constructors. \~
\details \ru Установить флаг отключения работы построителей. \n
\en Set the flag to disable the constructors. \~
\ingroup Base_Items
*/
/** \brief \ru Установить флаг отключения работы построителей.
\en Set the flag to disable the constructors. \~
\details \ru Установить флаг отключения работы построителей. \n
\en Set the flag to disable the constructors. \~
\ingroup Base_Items
*/
static void SetSupressCreators( bool b );
/** \brief \ru Используются ли многопоточные вычисления?
\en Are multithreaded calculations used? \~
\details \ru Используются ли многопоточные вычисления? \n
\en Are multithreaded calculations used? \n \~
\ingroup Base_Items
*/
/** \brief \ru Используются ли многопоточные вычисления?
\en Are multithreaded calculations used? \~
\details \ru Используются ли многопоточные вычисления? \n
\en Are multithreaded calculations used? \n \~
\ingroup Base_Items
*/
static bool Multithreaded();
/** \brief \ru Разрешить использовать многопоточные вычисления.
\en Set flag for use multithreaded calculations. \~
\details \ru Разрешить использовать многопоточные вычисления. \n
Если передано true, то будут использоваться многопоточные вычисления. Устанавливается стандартный режим
если передано false, то не будут использоваться многопоточные вычисления. \n
\en Set flag for use multithreaded calculations.
If passed true then will use multithreaded calculations, multithreaded mode will be set to the standard mode
if passed false then will not use multithreaded calculations. \n \~
\ingroup Base_Items
*/
/** \brief \ru Разрешить использовать многопоточные вычисления.
\en Set flag for use multithreaded calculations. \~
\details \ru Разрешить использовать многопоточные вычисления. \n
Если передано true, то будут использоваться многопоточные вычисления. Устанавливается стандартный режим
если передано false, то не будут использоваться многопоточные вычисления. \n
\en Set flag for use multithreaded calculations.
If passed true then will use multithreaded calculations, multithreaded mode will be set to the standard mode
if passed false then will not use multithreaded calculations. \n \~
\ingroup Base_Items
*/
static void SetMultithreaded( bool b );
/** \brief \ru Режим многопоточных вычислений
\en Multithreaded mode \~
\details \ru Режим многопоточных вычислений \n
\en Multithreaded mode \n \~
\ingroup Base_Items
*/
/** \brief \ru Режим многопоточных вычислений
\en Multithreaded mode \~
\details \ru Режим многопоточных вычислений \n
\en Multithreaded mode \n \~
\ingroup Base_Items
*/
static MbeMultithreadedMode MultithreadedMode();
/** \brief \ru Проверить режим многопоточных вычислений
\en Check multithreaded mode \~
\details \ru Проверить режим многопоточных вычислений \n
\en Check multithreaded mode \n \~
\ingroup Base_Items
*/
/** \brief \ru Проверить режим многопоточных вычислений
\en Check multithreaded mode \~
\details \ru Проверить режим многопоточных вычислений \n
\en Check multithreaded mode \n \~
\ingroup Base_Items
*/
static bool CheckMultithreadedMode( MbeMultithreadedMode );
/** \brief \ru Установить режим многопоточных вычислений.
\en Set flag for mode of multithreaded calculations. \~
\details \ru Установить режим многопоточных вычислений. \n
\en Set flag for mode of multithreaded calculations. \n \~
\ingroup Base_Items
*/
/** \brief \ru Установить режим многопоточных вычислений.
\en Set flag for mode of multithreaded calculations. \~
\details \ru Установить режим многопоточных вычислений. \n
\en Set flag for mode of multithreaded calculations. \n \~
\ingroup Base_Items
*/
static void SetMultithreadedMode( MbeMultithreadedMode );
/** \brief \ru Получить режим оповещения о нарушении требований.
\en Get the mode of assert violations notification. \~
\en Get the mode of assert violations notification. \~
\ingroup Base_Items
*/
static c3d::eAssertViolationNotify CheckAssertNotify();
/** \brief \ru Установить режим оповещения о нарушении требований.
\en Set the mode of assert violations notification. \~
\en Set the mode of assert violations notification. \~
\ingroup Base_Items
*/
static void SetAssertNotify( c3d::eAssertViolationNotify );
@@ -551,7 +551,8 @@ public:
//------------------------------------------------------------------------------
// Оставить от пути только имя файла.
// ---
MATH_FUNC( const char* ) C3DFileNameOnly( const char* path );
MATH_FUNC(const char *) C3DFileNameOnly( const char * path );
#if defined( C3D_WINDOWS )
#define C3D_ASSERT_AS_CERR(expr) std::cerr << "C3D ASSERT VIOLATION in " << C3DFileNameOnly(__FILE__) << "@" << __LINE__ << std::endl;
@@ -559,16 +560,17 @@ MATH_FUNC( const char* ) C3DFileNameOnly( const char* path );
#define C3D_ASSERT_AS_CERR(expr) fprintf(stderr, "C3D ASSERT VIOLATION in file %s, %d:\n `%s' in function: %s.\n", C3DFileNameOnly(__FILE__), __LINE__, #expr, __PRETTY_FUNCTION__);
#endif
// Supress a warning "unreferenced formal parameter"
#define C3D_UNUSED_PARAMETER( param ) (void*)(&param)
#ifdef C3D_DEBUG
#define C3D_ASSERT_UNCONDITIONAL(expr) \
{ const c3d::eAssertViolationNotify notify = Math::CheckAssertNotify(); \
if ( c3d::avn_ASSERT == notify ) { _ASSERT(false); } \
else if ( c3d::avn_CERR == notify ) { C3D_ASSERT_AS_CERR(expr) } \
}
//------------------------------------------------------------------------------
// Не рекомендуется использовать с параметром-константой
// (при сборке в VS2012 выдается - warning C4127: conditional expression is constant).
@@ -584,9 +586,55 @@ MATH_FUNC( const char* ) C3DFileNameOnly( const char* path );
extern "C"
{
extern MATH_SYMBOL const char * const c3dVersionInfo; ///< \ru Информация о версии c3d.dll \en c3d.dll version information
extern MATH_SYMBOL const char * const c3dBuildInfo; ///< \ru Информация о сборке c3d.dll \en c3d.dll building information
/** \brief \ru Получить информацию о версии файла c3d.
\en Get information about the c3d file version. \~
\details \ru Функция копирует в указанный буфер строку с информацией о версии файла c3d. \n
\en The function copies a string with information about the c3d file version to the specified buffer. \n \~
\param[in] buffer - \ru Указатель на начало буфера.
\en Pointer to the beginning of the buffer. \~
\param[in] bufferSize - \ru Размер буфера, в символах.
\en The size of the buffer in characters. \~
\return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == nullptr возвращается необходимый размер буфера без учета null-символа.
\en Returns the number of copied characters, excluding the null character. If buffer = = null ptr returns the required buffer size without the null character. \~
*/
extern MATH_FUNC(size_t) GetC3dVersionInfo( char * const buffer, size_t bufferSize ); ///< \ru Информация о версии c3d.dll \en c3d.dll version information
/** \brief \ru Получить информацию о варианте сборки файла c3d.
\en Get information about the c3d file build option. \~
\details \ru Функция копирует в указанный буфер строку с информацией о варианте сборки файла c3d. \n
\en The function copies a string with information about the c3d file build option to the specified buffer. \n \~
\param[in] buffer - \ru Указатель на начало буфера.
\en Pointer to the beginning of the buffer. \~
\param[in] bufferSize - \ru Размер буфера, в символах.
\en The size of the buffer in characters. \~
\return \ru Возвращает количество скопированных символов, без учета null-символа. Если buffer == nullptr возвращается необходимый размер буфера без учета null-символа.
\en Returns the number of copied characters, excluding the null character. If buffer = = null ptr returns the required buffer size without the null character. \~
*/
extern MATH_FUNC(size_t) GetC3dBuildInfo( char * const buffer, size_t bufferSize ); ///< \ru Информация о сборке c3d.dll \en c3d.dll building information
}
/** \brief \ru Получить информацию о файле c3d.
\en Get information about the c3d file. \~
\details \ru Эта функция - обертка для функций GetC3dVersionInfo и GetC3dBuildInfo. Возвращает строку с информацией о версии файла или варианте сборки файла. \n
\en This function is a wrapper for the GetC3dVersionInfo and GetC3dBuildInfo functions. Returns a string with information about the file version or build version of the file. \n \~
\param[in] needVersionInfo - \ru needVersionInfo == true - возвращается информация о версии файла, иначе информаиця о варианте сборки файла.
\en need Version Info == true - returns information about the file version, otherwise information about the file build option. \~
\return \ru Возвращает строку с запрошенной информацией.
\en Returns a string with the requested information. \~
*/
inline std::string GetC3dLibInfo( bool needVersionInfo = true )
{
size_t( *GetLibInfo )( char * const buffer, size_t bufferSize );
GetLibInfo = ( needVersionInfo ) ? GetC3dVersionInfo : GetC3dBuildInfo;
std::vector<char> buffer( GetLibInfo( C3D_NULL_PTR, 1 ) );
GetLibInfo( &buffer[0], buffer.size() );
return std::string(buffer.begin(), buffer.end());
}
#endif // __MB_VARIABLES_H
+1 -1
View File
@@ -13,7 +13,7 @@
#include <mb_axis3d.h>
const_expr float MB_MAXFLOAT = (float)MAXIMON; // \ru Максимальное значение. \en Maximum value.
c3d_constexpr float MB_MAXFLOAT = (float)MAXIMON; // \ru Максимальное значение. \en Maximum value.
class MATH_CLASS MbFloatVector3D;
+1 -1
View File
@@ -20,7 +20,7 @@ struct IfProgressIndicator;
/// \ru Неинициализированное значение double. \en Uninitialized value of double.
const_expr double NOT_INITIAL_DBL = -DETERMINANT_MAX;
c3d_constexpr double NOT_INITIAL_DBL = -DETERMINANT_MAX;
//------------------------------------------------------------------------------
+609 -545
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -9,7 +9,7 @@
#ifndef __MT_REF_ITEM_H
#define __MT_REF_ITEM_H
#include <system_types.h>
#include <math_define.h>
//////////////////////////////////////////////////////////////////////////////////////////
@@ -21,7 +21,7 @@
*/
//////////////////////////////////////////////////////////////////////////////////////////
class MtRefItem
class MATH_CLASS MtRefItem
{
mutable refcount_t useCount;
+39 -16
View File
@@ -60,7 +60,7 @@ inline void SwapIT( IntegralType & a, IntegralType & b ) { a^=b; b^=a; a^=b; }
\ingroup Names
*/
// ---
const_expr size_t sizeofSimpleName = sizeof( SimpleName );
c3d_constexpr size_t sizeofSimpleName = sizeof( SimpleName );
//////////////////////////////////////////////////////////////////////////////////////////
@@ -78,7 +78,7 @@ const_expr size_t sizeofSimpleName = sizeof( SimpleName );
\ingroup Names
*/
// ---
class SimpleNameArray {
class MATH_CLASS SimpleNameArray {
private:
SArray<SimpleName> m_array; ///< \ru Множество простых имен. \en Array of simple names.
@@ -997,6 +997,7 @@ public:
{
defName.MakeTemplate();
}
protected:
/** \brief \ru Конструктор другому генератору имен.
\en Constructor by another generator of names. \~
\details \ru Конструктор другому генератору имен. \n
@@ -1013,6 +1014,7 @@ public:
, nameList( nm.nameList )
#endif // ORIGINAL_MAIN_NAME
{}
public:
/// \ru Деструктор. \en Destructor.
virtual ~MbNameMaker() {}
@@ -1225,6 +1227,10 @@ public:
, cpyHist ( true )
, addParentNamesAttributes( false )
{}
/// \ru Деструктор. \en Destructor.
virtual ~MbSNameMaker() {}
protected:
/// \ru Конструктор по другому именователю (конструктор копирования). \en Constructor by other name-maker (copy-constructor).
MbSNameMaker ( const MbSNameMaker & other )
: SimpleNameArray( other.Count(), 2 )
@@ -1236,13 +1242,8 @@ public:
{
SetNameMaker( other, true );
}
/// \ru Деструктор. \en Destructor.
virtual ~MbSNameMaker() {}
public:
/// \ru Инициализировать по другому именователю. \en Initialize by another name-maker.
void SetNameMaker( const MbSNameMaker & other, bool setVersion = false );
/// \ru Получить простое имя из массива с контролем выхода за границы. \en Get simple name from array with control of overruning.
SimpleName GetSimpleName( size_t i ) const;
/// \ru Инверсия простых имен именователя. \en Inversion of simple names array.
@@ -1266,21 +1267,34 @@ public:
/// \ru Установить количество имен. \en Set count of names.
void SetNamesCount( size_t newCount );
public:
/** \brief \ru Создать копию.
\en Create a copy. \~
\details \ru Создать копию оболочки с регистратором.
\en Create a copy of a shell with registrator. \~
\return \ru Копия объекта.
\en Copy of the object. \~
*/
virtual MbSNameMaker & Duplicate() const;
/// \ru Инициализировать по другому именователю. \en Initialize by another name-maker.
virtual void SetNameMaker( const MbSNameMaker & other, bool setVersion = false );
public:
/// \ru Генерация имени name торцевой грани: mainName, +/-defName, знак определяется направлением. \en Generate name for butt face: mainName, +/-defName, sign is defined by direction.
virtual void MakeButtFaceName( MbTopologyItem & item, MbSNameMaker::ESides side ) const;
virtual void MakeButtFaceName( MbTopologyItem & item, MbSNameMaker::ESides side ) const;
/// \ru Генерация имени грани: mainName, hash( sideName, add ). \en Generate name for face: mainName, hash( sideName, add ).
virtual void MakeFaceName( MbTopologyItem & item, size_t i, SimpleName add ) const;
virtual void MakeFaceName( MbTopologyItem & item, size_t i, SimpleName add ) const;
/// \ru Генерация имени на основе главного имени и простого имени из именователя. \en Generate name on the base of main name and simple name from this names generator.
virtual void MakeItemName( MbTopologyItem & item, size_t i ) const;
virtual void MakeItemName( MbTopologyItem & item, size_t i ) const;
/// \ru Генерация имени ребра из имен граней (sense - направление ребра по отношению к подлежащей кривой). \en Generate name for edge from names of faces ('sense' is a direction of edge relative to underlined curve).
virtual void CompileEdgeName( MbTopologyItem & item,
const MbName * faceName1,
const MbName * faceName2,
size_t ind,
bool sameSense ) const;
virtual void CompileEdgeName( MbTopologyItem & item,
const MbName * faceName1,
const MbName * faceName2,
size_t ind,
bool sameSense ) const;
/// \ru Генерация имени по другому имени, полное совпадение. \en Generate name by other name, full coincidence.
virtual void CompileEdgeName( MbTopologyItem & item, const MbName & other ) const;
virtual void CompileEdgeName( MbTopologyItem & item, const MbName & other ) const;
public:
/// \ru Добавить генератор имен. \en Add name generator.
@@ -1330,6 +1344,15 @@ void MbSNameMaker::SetNameMaker( const MbSNameMaker & other, bool setVersion )
}
//------------------------------------------------------------------------------
// создать копию набора граней
// ---
inline
MbSNameMaker & MbSNameMaker::Duplicate() const {
return *new MbSNameMaker( *this );
}
//////////////////////////////////////////////////////////////////////////////////////////
//
// \ru Неклассные функция имён. \en Out-of-class functions for names.
+61 -55
View File
@@ -446,17 +446,23 @@ public:
// /| | |
// +-+---------+---+
bt_ArcCylinder = 5, ///< \ru Центровое отверстие формы R (дугообразное). \en Center hole of form R (arcuate).
// __
// ||
// ____________/||
// /| | ||
// +-+----------+-++
bt_DoubleCylinder = 6, ///< \ru Двойное цилиндрическое отверстие со скруглением. \en Double cylindrical hole with a fillet.
};
public:
double capDiameter; ///< \ru Диаметр головки (для отверстий типа #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder). \en Diameter cap (for hole with type #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder).
double capDepth; ///< \ru Глубина под головку (для отверстий типа #bt_TwofoldCylinder, #bt_ComplexCylinder). \en Depth for cap (for hole with type #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder).
double capDiameter; ///< \ru Диаметр головки (для отверстий типа #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder, #bt_DoubleCylinder). \en Diameter cap (for hole with type #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder, #bt_DoubleCylinder).
double capDepth; ///< \ru Глубина под головку (для отверстий типа #bt_TwofoldCylinder, #bt_ComplexCylinder, #bt_DoubleCylinder). \en Depth for cap (for hole with type #bt_TwofoldCylinder, #bt_ChamferCylinder, #bt_ComplexCylinder, #bt_DoubleCylinder).
double capAngle; ///< \ru Угол фаски под головку (для отверстий типа #bt_ChamferCylinder, #bt_ComplexCylinder), capAngle <= M_PI. \en Chamfer angle for cap (for holes with type #bt_ChamferCylinder, #bt_ComplexCylinder), capAngle <= M_PI.
double diameter; ///< \ru Диаметр отверстия под резьбу (для всех типов отверстий). \en Hole diameter for thread (for all the types of holes).
double depth; ///< \ru Глубина отверстия под резьбу (для всех типов отверстий). \en Hole depth for thread (for all the types of holes).
double angle; ///< \ru Угол конусности отверстия под резьбу (для отверстия типа #bt_SimpleCone), 0 < angle < M_PI. \en Angle of hole conicity for thread (for hole with type #bt_SimpleCone), 0 < angle < M_PI.
double spikeAngle; ///< \ru Угол раствора конца отверстия (для всех типов отверстий), spikeAngle <= M_PI. \en Apex angle of the hole end (for all the types of holes), spikeAngle <= M_PI.
double arcRadius; ///< \ru Радиус дуги (для отверстия типа #bt_ArcCylinder). \en Arc radius (for hole with type #bt_ArcCylinder).
double depth; ///< \ru Глубина отверстия под резьбу (для всех типов отверстий). \en Hole depth for thread (for all the types of holes).
double angle; ///< \ru Угол конусности отверстия под резьбу (для отверстия типа #bt_SimpleCone), 0 < angle < M_PI. \en Angle of hole conicity for thread (for hole with type #bt_SimpleCone), 0 < angle < M_PI.
double spikeAngle; ///< \ru Угол раствора конца отверстия (для всех типов отверстий), spikeAngle <= M_PI. \en Apex angle of the hole end (for all the types of holes), spikeAngle <= M_PI.
double arcRadius; ///< \ru Радиус дуги или скругления (для отверстия типа #bt_ArcCylinder и #bt_DoubleCylinder). \en Arc radius or Fillet radius (for hole with type #bt_ArcCylinder andc #bt_DoubleCylinder).
bool prolong; ///< \ru Флаг продления сверла в обратную сторону (для всех типов отверстий), по умолчанию true (есть продление). \en Flag of drill extension along the opposite direction (for all the types of holes), default true (the extension exists).
bool down; ///< \ru Направление оси отверстия: true - прямое (против оси Z локальной системы), false - обратное. \en Direction of hole axis: true - forward (opposite to the Z of the local system), false - backward.
BorerType type; ///< \ru Тип отверстия. \en Type of hole.
@@ -481,7 +487,7 @@ public:
, depth ( 25.0 )
, angle ( M_PI_2 )
, spikeAngle ( M_PI * c3d::TWO_THIRD )
, arcRadius ( 10. )
, arcRadius ( 5.0 )
, prolong ( true )
, down ( true )
, type ( bt_SimpleCylinder )
@@ -2667,10 +2673,10 @@ KNOWN_OBJECTS_RW_REF_OPERATORS( MedianShellFaces ) // \ru Для работы с
// ---
struct MATH_CLASS MbShellStitchParams {
private:
MbSNameMaker nameMaker; ///< \ru Именователь операции. \en An object defining names generation in the operation.
double stitchAccuracy; ///< \ru Точность сшивки (точность поиска парных ребер). \en Stitching accuracy (search accuracy of edges pairs).
bool formSolidBody; ///< \ru Флаг формирования твердого тела из результирующей оболочки. \en Whether to form a solid solid from the resultant shell.
bool mergeEdges; ///< \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
SPtr<MbSNameMaker> nameMaker; ///< \ru Именователь операции. \en An object defining names generation in the operation.
double stitchAccuracy; ///< \ru Точность сшивки (точность поиска парных ребер). \en Stitching accuracy (search accuracy of edges pairs).
bool formSolidBody; ///< \ru Флаг формирования твердого тела из результирующей оболочки. \en Whether to form a solid solid from the resultant shell.
bool mergeEdges; ///< \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
private:
MbShellStitchParams();
public:
@@ -2688,16 +2694,16 @@ public:
\en Whether to merge similar edges (true). \~
*/
MbShellStitchParams( const MbSNameMaker & operNames, bool formBody, double sewingAccuracy, bool edgesMerging = true )
: nameMaker ( operNames )
, stitchAccuracy( sewingAccuracy )
, formSolidBody ( formBody )
, mergeEdges ( edgesMerging )
: nameMaker ( &operNames.Duplicate() )
, stitchAccuracy( sewingAccuracy )
, formSolidBody ( formBody )
, mergeEdges ( edgesMerging )
{}
~MbShellStitchParams()
{}
public:
/// \ru Получить именователь операции. \en Get the object defining names generation in the operation.
const MbSNameMaker & GetNameMaker() const { return nameMaker; }
const MbSNameMaker & GetNameMaker() const { return *nameMaker; }
/// \ru Получить точность поиска парных ребер. \en Get search accuracy of edges pairs.
double GetStitchAccuracy() const { return stitchAccuracy; }
/// \ru Пытаться формировать твердое тело из результирующей оболочки.. \en Whether to try forming a solid solid from the resultant shell.
@@ -2781,11 +2787,11 @@ public:
void AddActiveType( bool a, MbeSurfaceProlongType t ) { active = a; type |= (UintType)t; }
};
private:
MbSplitData cutterData; ///< \ru Данные секущего объекта. \en Cutter object(s) data.
MbBooleanFlags booleanFlags; ///< \ru Управляющие флаги булевой операции. \en Control flags of the Boolean operation.
MbSNameMaker nameMaker; ///< \ru Именователь операции. \en An object defining names generation in the operation.
ThreeStates retainedPart; ///< \ru Направление отсечения (сохраняемая часть исходной оболочки). \en The direction of cutting off (a part of the source shell to be kept).
ProlongState prolongState; ///< \ru Тип продления режущей поверхности. \en Prolongation type of cutter surface.
MbSplitData cutterData; ///< \ru Данные секущего объекта. \en Cutter object(s) data.
MbBooleanFlags booleanFlags; ///< \ru Управляющие флаги булевой операции. \en Control flags of the Boolean operation.
SPtr<MbSNameMaker> nameMaker; ///< \ru Именователь операции. \en An object defining names generation in the operation.
ThreeStates retainedPart; ///< \ru Направление отсечения (сохраняемая часть исходной оболочки). \en The direction of cutting off (a part of the source shell to be kept).
ProlongState prolongState; ///< \ru Тип продления режущей поверхности. \en Prolongation type of cutter surface.
public:
/** \brief \ru Конструктор.
@@ -2803,11 +2809,11 @@ public:
*/
MbShellCuttingParams( int part, const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData ( )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -2837,11 +2843,11 @@ public:
MbShellCuttingParams( const MbPlacement3D & place, const MbContour & contour, bool sameContour, const MbVector3D & dir, int part,
const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData( place, dir, contour, sameContour )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( place, dir, contour, sameContour )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -2871,11 +2877,11 @@ public:
MbShellCuttingParams( const MbPlacement3D & place, const MbContour & contour, bool sameContour, const MbVector3D & dir,
const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData( place, dir, contour, sameContour )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( place, dir, contour, sameContour )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -2900,11 +2906,11 @@ public:
MbShellCuttingParams( const MbSurface & surface, bool sameSurface, int part,
const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData( surface, sameSurface )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( surface, sameSurface )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -2930,11 +2936,11 @@ public:
MbShellCuttingParams( const MbSurface & surface, bool sameSurface,
const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData( surface, sameSurface )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( surface, sameSurface )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -2959,11 +2965,11 @@ public:
MbShellCuttingParams( const MbSolid & solid, bool sameSolid,
int part, const MbMergingFlags & mergingFlags, bool cutAsClosed,
const MbSNameMaker & snMaker )
: cutterData( solid, sameSolid, true )
, booleanFlags( )
, nameMaker ( snMaker )
, retainedPart( ts_neutral )
, prolongState( )
: cutterData ( solid, sameSolid, true )
, booleanFlags( )
, nameMaker ( &snMaker.Duplicate() )
, retainedPart( ts_neutral )
, prolongState( )
{
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
@@ -3007,7 +3013,7 @@ public:
const MbSNameMaker & snMaker )
{
if ( cutterData.InitPlaneContour( place, dir, contour, sameContour ) ) {
nameMaker.SetNameMaker( snMaker, true );
nameMaker->SetNameMaker( snMaker, true );
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
SetRetainedPart( part );
@@ -3059,7 +3065,7 @@ public:
const MbSNameMaker & snMaker )
{
if ( cutterData.InitSurfaces( surface, sameSurface ) ) {
nameMaker.SetNameMaker( snMaker, true );
nameMaker->SetNameMaker( snMaker, true );
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
SetRetainedPart( part );
@@ -3109,7 +3115,7 @@ public:
const MbSNameMaker & snMaker )
{
if ( cutterData.InitSolid( solid, sameSolid, true ) ) {
nameMaker.SetNameMaker( snMaker, true );
nameMaker->SetNameMaker( snMaker, true );
booleanFlags.InitCutting( cutAsClosed );
booleanFlags.SetMerging( mergingFlags );
SetRetainedPart( part );
@@ -3170,7 +3176,7 @@ public:
MbBooleanFlags & SetBooleanFlags() { return booleanFlags; }
/// \ru Получить именователь операции. \en Get the object defining names generation in the operation.
const MbSNameMaker & GetNameMaker() const { return nameMaker; }
const MbSNameMaker & GetNameMaker() const { return *nameMaker; }
/// \ru Получить требование по оставляемой части. \en Get retained part demand.
ThreeStates GetRetainedPart() const { return retainedPart; }
+2 -2
View File
@@ -124,7 +124,7 @@ struct ItCoord
\ingroup Parser
*/
// ---
struct ItTreeVariable
struct MATH_CLASS ItTreeVariable
{
ItTreeVariable() {}
@@ -195,7 +195,7 @@ class MbUserFunc;
\ingroup Parser
*/
// ---
struct ItUserFunc
struct MATH_CLASS ItUserFunc
{
ItUserFunc() {};
virtual ~ItUserFunc() {};
+2 -2
View File
@@ -23,9 +23,9 @@ struct ItIntervalTreeVariable;
/// \ru Максимальная длина переменной. \en Maximum length of variable.
const_expr size_t MAX_VARIABLE_NAME_LENGTH = 512;
c3d_constexpr size_t MAX_VARIABLE_NAME_LENGTH = 512;
/// \ru Максимальная длина выражения. \en Maximum length of expression.
const_expr size_t MAX_EQU_LENGTH = 2048;
c3d_constexpr size_t MAX_EQU_LENGTH = 2048;
//-------------------------------------------------------------------------------
+1 -1
View File
@@ -400,7 +400,7 @@ public :
MbFace * FindFaceByName ( const MbName & );
/// \ru Создать именователь тела. \en Create name-maker of solid.
MbSNameMaker GetYourNameMaker() const;
SPtr<MbSNameMaker> GetYourNameMaker() const;
/// \ru Установить заданный флаг измененности для всех граней, рёбер и вершин. \en Set flag of changes for all the faces, edges and vertices.
void SetOwnChangedThrough( MbeChangedType );
+90 -22
View File
@@ -11,7 +11,9 @@
#define __SURF_COONS_SURFACE_H
#include <templ_dptr.h>
#include <surface.h>
#include <surf_coons_surface_.h>
#include <cur_surface_curve.h>
#include <mb_operation_result.h>
@@ -19,20 +21,18 @@
class MATH_CLASS MbCurve;
#define COONS_COUNT 4 ///< \ru Число кривых, используемых для построения поверхности Кунса \en Count of curves used to construct Coons surface.
//------------------------------------------------------------------------------
/** \brief \ru Способ расчёта поверхности Кунса.
\en Type of calculation of Coons surface. \~
\details \ru Способ расчёта поверхности Кунса. \n
\en Type of calculation of Coons surface. \n \~
\ingroup Surfaces
\en Type of calculation of Coons surface. \~
\details \ru Способ расчёта поверхности Кунса. \n
\en Type of calculation of Coons surface. \n \~
\ingroup Surfaces
*/
// ---
enum MbeCoonsSurfaceCalcType {
cst_DefaultType = 0, ///< \ru Способ по умолчанию. \en Default type.
cst_SurfaceType, ///< \ru Точный способ по кривым на поверхностях. \en Exact type by Curves on surfaces.
cst_DefaultType = 0, ///< \ru Способ по умолчанию. \en Default type.
cst_SurfaceType, ///< \ru Точный способ по кривым на поверхностях. \en Exact type by Curves on surfaces.
cst_GregoryPatchType, ///< \ru Патч Грегори. \en Gregory patch.
};
@@ -97,6 +97,21 @@ private:
bool poleVMax; ///< \ru Полюс в конце. \en Pole at the end.
MbeCoonsSurfaceCalcType calcType; ///< \ru Версия реализации определяет способ расчёта поверхности. \en Version of implementation determines a type of calculation of surface.
//------------------------------------------------------------------------------
/** \brief \ru Вспомогательные данные.
\en Auxiliary data. \~
\details \ru Вспомогательные данные служат для ускорения работы объекта.
\en Auxiliary data are used for fast calculations. \n \~
*/
// ---
class MbCoonsSurfaceAuxiliaryData: public AuxiliaryData {
public:
DPtr<MbCoonsWorkingData> mp; ///< \ru Дополнительные временные данные для ускорения вычислений. \en Additional temporary data to speed up computations.
MbCoonsSurfaceAuxiliaryData();
virtual ~MbCoonsSurfaceAuxiliaryData();
};
mutable CacheManager<MbCoonsSurfaceAuxiliaryData> cache;
protected:
/** \brief \ru Конструктор поверхности Кунса.
\en Constructor of Coons surface. \~
@@ -137,12 +152,7 @@ public:
const MbCurve3D & curve1,
const MbCurve3D & curve2,
const MbCurve3D & curve3,
MbResultType & resType );
/// \ru Создание поверхности Кунса по заданным кривым на поверхностях. \en Creation of Coons surface by curves on surfaces.
static MbCoonsPatchSurface * Create( const MbCurve3D & curve0, bool tangent0,
const MbCurve3D & curve1, bool tangent1,
const MbCurve3D & curve2, bool tangent2,
const MbCurve3D & curve3, bool tangent3,
MbeCoonsSurfaceCalcType type,
MbResultType & resType );
/// \ru Инициализация поверхности Кунса заданной поверхностью Кунса. \en Initialization of Coons surface by specified Coons surface.
@@ -182,6 +192,7 @@ public:
virtual bool GetPoleVMin() const;
virtual bool GetPoleVMax() const;
virtual bool IsPole( double u, double v ) const; // \ru Является ли точка особенной \en Whether the point is special
virtual void Refresh(); // \ru Сбросить все временные данные \en Flush all the temporary data
/** \} */
/** \ru \name Функции для работы в области определения поверхности
@@ -311,7 +322,9 @@ public:
private:
void operator = ( const MbCoonsPatchSurface & ); // \ru Не реализовано. \en Not implemented.
void Setup();
// void SetVertexUV( double u, double v ) const;
void CheckParams( double & u, double & v, bool ext = false ) const; // \ru Проверить и изменить при необходимости параметры. \en Check and correct parameters.
void CalculateTwist( double u, double v ) const;
// \ru Определение местных координат. \en Determination of local coordinates.
void CalculateCoordinate( double & u, double & v,
double & t0, double & t1, double & t2, double & t3 ) const;
@@ -335,7 +348,18 @@ private:
inline void ParamSecond( double w, double * t ) const;
inline void ParamThird ( double w, double * t ) const;
// \ru Добавить матрицу поверхности. \en Add the matrix of the surface.
inline void AddMatrix ( double * uu, double * vv, MbVector3D & p ) const;
inline void AddMatrix ( double u, double v, double * uu, double * vv, MbVector3D & p ) const;
void AddDeriveU ( double u, double v, MbVector3D & p ) const;
void AddDeriveV ( double u, double v, MbVector3D & p ) const;
void AddDeriveUU ( double u, double v, MbVector3D & p ) const;
void AddDeriveVV ( double u, double v, MbVector3D & p ) const;
void AddDeriveUV ( double u, double v, MbVector3D & p ) const;
void AddDeriveUUU( double u, double v, MbVector3D & p ) const;
void AddDeriveUUV( double u, double v, MbVector3D & p ) const;
void AddDeriveUVV( double u, double v, MbVector3D & p ) const;
void AddDeriveVVV( double u, double v, MbVector3D & p ) const;
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbCoonsPatchSurface )
}; // MbCoonsSurface
@@ -391,11 +415,27 @@ inline void MbCoonsPatchSurface::ParamThird ( double /*w*/, double * t ) const {
//------------------------------------------------------------------------------
// \ru Добавить матрицу поверхности. \en Add the matrix of the surface.
// ---
inline void MbCoonsPatchSurface::AddMatrix( double * uu, double * vv, MbVector3D & p ) const {
p.Add( vertex[0], -uu[0]*vv[0], vertex[1], -uu[1]*vv[0], vertex[2], -uu[1]*vv[1], vertex[3], -uu[0]*vv[1] );
p.Add( vertexU[0], -uu[2]*vv[0], vertexU[1], -uu[3]*vv[0], vertexU[2], -uu[3]*vv[1], vertexU[3], -uu[2]*vv[1] );
p.Add( vertexV[0], -uu[0]*vv[2], vertexV[1], -uu[1]*vv[2], vertexV[2], -uu[1]*vv[3], vertexV[3], -uu[0]*vv[3] );
p.Add( vertexUV[0], -uu[2]*vv[2], vertexUV[1], -uu[3]*vv[2], vertexUV[2], -uu[3]*vv[3], vertexUV[3], -uu[2]*vv[3] );
inline void MbCoonsPatchSurface::AddMatrix( double u, double v, double * uu, double * vv, MbVector3D & p ) const {
MbCartPoint3D twist[COONS_COUNT];
if ( calcType == cst_GregoryPatchType ) {
// SetVertexUV( u, v );
CalculateTwist( u, v );
MbCoonsSurfaceAuxiliaryData * loccache = cache();
for ( size_t i = 0; i < COONS_COUNT; ++i )
twist[i] = loccache->mp->twist[i];
}
else {
for ( size_t i = 0; i < COONS_COUNT; ++i )
twist[i] = vertexUV[i];
}
p.Add( vertex[0], -uu[0] * vv[0], vertex[1], -uu[1] * vv[0], vertex[2], -uu[1] * vv[1], vertex[3], -uu[0] * vv[1] );
p.Add( vertexU[0], -uu[2] * vv[0], vertexU[1], -uu[3] * vv[0], vertexU[2], -uu[3] * vv[1], vertexU[3], -uu[2] * vv[1] );
p.Add( vertexV[0], -uu[0] * vv[2], vertexV[1], -uu[1] * vv[2], vertexV[2], -uu[1] * vv[3], vertexV[3], -uu[0] * vv[3] );
p.Add( twist[0], -uu[2] * vv[2], twist[1], -uu[3] * vv[2], twist[2], -uu[3] * vv[3], twist[3], -uu[2] * vv[3] );
}
@@ -437,6 +477,32 @@ protected :
MbVector rail2; ///< \ru Вектор для вычисления поперечной производной во второй точке кривой. \en The vector for calculation of the transverse derivative in second point of curve.
double turner; ///< \ru Угол поворота векторов на единицу изменения параметра. \en The angle of rotation of vectors per unit of parameter change.
//------------------------------------------------------------------------------
/** \brief \ru Вспомогательные данные.
\en Auxiliary data. \~
\details \ru Вспомогательные данные служат для ускорения работы объекта.
\en Auxiliary data are used for fast calculations. \n \~
*/
// ---
class MbCoonsDerivativeAuxiliaryData: public AuxiliaryData {
public:
double t; ///< \ru Параметр. \en Parameter.
MbCartPoint3D point; ///< \ru Точка. \en Point.
MbVector3D first; ///< \ru Первая производная. \en First derivative.
MbVector3D second; ///< \ru Вторая производная. \en Second derivative.
MbVector3D third; ///< \ru Третья производная. \en Third derivative.
MbCoonsDerivativeAuxiliaryData();
MbCoonsDerivativeAuxiliaryData( const MbCoonsDerivativeAuxiliaryData & );
virtual ~MbCoonsDerivativeAuxiliaryData();
void Init();
void Init( const MbCoonsDerivativeAuxiliaryData & );
void Move( const MbVector3D & );
};
mutable CacheManager<MbCoonsDerivativeAuxiliaryData> cache;
public :
/// \ru Конструктор кривой на поверхности. \en Constructor of curve on surface.
MbCoonsDerivative( MbSurfaceCurve & c, double t1, const MbVector & r1, double t2, const MbVector & r2 );
@@ -465,6 +531,8 @@ public:
virtual void Transform( const MbMatrix3D &, MbRegTransform * = NULL ); // \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix.
virtual void Move ( const MbVector3D &, MbRegTransform * = NULL ); // \ru Сдвинуть вдоль вектора. \en Move along a vector.
virtual void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = NULL ); // \ru Повернуть вокруг оси. \en Rotate about an axis.
/// \ru Перевести все временные (mutable) данные объекта в неопределённое (исходное) состояние. \en Translate all the time (mutable) data objects in an inconsistent (initial) state.
virtual void Refresh();
virtual void GetProperties( MbProperties & ); // \ru Выдать свойства объекта. \en Get properties of the object.
virtual void SetProperties( const MbProperties & ); // \ru Записать свойства объекта. \en Set properties of the object.
@@ -478,7 +546,7 @@ public:
virtual double GetTMax() const; // \ru Вернуть максимальное значение параметра. \en Get the maximum value of parameter.
virtual bool IsClosed() const; // \ru Проверить замкнутость кривой. \en Check for curve closedness.
virtual double GetPeriod() const; // \ru Вернуть период периодической кривой. \en Get period of a periodic curve.
// \ru Функции для работы в области определения. \en Functions for working in the definition domain.
virtual void PointOn ( double & t, MbCartPoint3D & ) const; // \ru Вычислить точку на кривой. \en Calculate a point on the curve.
virtual void FirstDer ( double & t, MbVector3D & ) const; // \ru Вычислить первую производную. \en Calculate the first derivative.
+86
View File
@@ -0,0 +1,86 @@
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Бикубическая поверхность Кунса на четырех кривых и их поперечных производных.
Временные данные.
\en Bicubic Coons surface on four curves and its transverse derivatives.
Temporary data. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __SURF_COONS_SURFACE__H
#define __SURF_COONS_SURFACE__H
#include <mb_cart_point3d.h>
#define COONS_COUNT 4 ///< \ru Число кривых, используемых для построения поверхности Кунса \en Count of curves used to construct Coons surface.
//------------------------------------------------------------------------------
/** \brief \ru Временные данные поверхности Кунса.
\en Temporary data of Coons surface. \~
\details \ru Временные данные поверхности Кунса для патча Грегори. \n
\en Temporary data of Coons surface for Gregory patch. \n \~
*/
// ---
class MbCoonsWorkingData {
friend class MbCoonsPatchSurface;
private:
double calcU;
double calcV;
// Зависят от u и v.
MbCartPoint3D twist[COONS_COUNT]; // Смешанные производные. Если r''uv=r''vu, то twist равен им обеим и не зависит от u и v.
MbCartPoint3D twistU[COONS_COUNT]; // Производная по U.
MbCartPoint3D twistV[COONS_COUNT]; // Производная по V.
MbCartPoint3D twistUU[COONS_COUNT]; // Производная по UU.
MbCartPoint3D twistUV[COONS_COUNT]; // Производная по UV.
MbCartPoint3D twistVV[COONS_COUNT]; // Производная по VV.
MbCartPoint3D twistUUU[COONS_COUNT]; // Производная по UUU.
MbCartPoint3D twistUUV[COONS_COUNT]; // Производная по UUV.
MbCartPoint3D twistUVV[COONS_COUNT]; // Производная по UVV.
MbCartPoint3D twistVVV[COONS_COUNT]; // Производная по VVV.
public:
// Конструктор.
MbCoonsWorkingData()
: calcU ( UNDEFINED_DBL )
, calcV ( UNDEFINED_DBL )
{
for ( size_t i = 0; i < COONS_COUNT; ++i ) {
twist[i] .SetZero();
twistU[i] .SetZero();
twistV[i] .SetZero();
twistUU[i] .SetZero();
twistUV[i] .SetZero();
twistVV[i] .SetZero();
twistUUU[i].SetZero();
twistUUV[i].SetZero();
twistUVV[i].SetZero();
twistVVV[i].SetZero();
}
}
// Деструктор.
~MbCoonsWorkingData() {}
void SetZeroVectors() {
for ( size_t i = 0; i < COONS_COUNT; ++i ) {
twist[i] .SetZero();
twistU[i] .SetZero();
twistV[i] .SetZero();
twistUU[i] .SetZero();
twistUV[i] .SetZero();
twistVV[i] .SetZero();
twistUUU[i].SetZero();
twistUUV[i].SetZero();
twistUVV[i].SetZero();
twistVVV[i].SetZero();
}
}
OBVIOUS_PRIVATE_COPY( MbCoonsWorkingData )
};
#endif // __SURF_COONS_SURFACE__H
+3 -3
View File
@@ -15,9 +15,9 @@
#include <mb_placement3d.h>
const_expr size_t CIRC_COUNT = 32;
const_expr size_t HIDE_COUNT = 16;
const_expr size_t LINE_COUNT = 10;
c3d_constexpr size_t CIRC_COUNT = 32;
c3d_constexpr size_t HIDE_COUNT = 16;
c3d_constexpr size_t LINE_COUNT = 10;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -18,11 +18,11 @@
class MATH_CLASS MbSurfaceContiguousData;
const_expr size_t LOFT_NUMB = 4; ///< \ru Вспомогательный параметр для поверхности MbLoftedSurface. Используется для определения количества элементов в массивах, где хранится точка и первые три производные в этой точке. \en Auxiliary parameter for MbLoftedSurface surface. Used for determination of count of elements in arrays of points and first three derivatives at this point.
const_expr VERSION LOFTED_SURFACE_VERSION1 = 0x0F000013L; ///< \ru Корректировка коэффициентов уравнения поверхности. \en Correction of surface equation coefficients.
const_expr VERSION LOFTED_SURFACE_VERSION2 = 0x13000015L; ///< \ru Возможность устанавливать нормали на торцевых сечениях в виде точки. \en Ability to set normals on end sections as a point.
const_expr VERSION LOFTED_SURFACE_VERSION3 = 0x13000019L; ///< \ru Введены множители производной в случае установки нормали на торцевых сечениях. \en Factors of the derivative are added in the case of setting the normal on the end sections.
const_expr VERSION LOFTED_SURFACE_VERSION4 = 0x1300001BL; ///< \ru Добавлен вектор направлени движение повехности в случае установки нормали. Необходимо для тела с операцией Купол. \en The direction vector of the surface progress is added in the case of setting the normal. Necessary for the body with the operation Dome.
c3d_constexpr size_t LOFT_NUMB = 4; ///< \ru Вспомогательный параметр для поверхности MbLoftedSurface. Используется для определения количества элементов в массивах, где хранится точка и первые три производные в этой точке. \en Auxiliary parameter for MbLoftedSurface surface. Used for determination of count of elements in arrays of points and first three derivatives at this point.
c3d_constexpr VERSION LOFTED_SURFACE_VERSION1 = 0x0F000013L; ///< \ru Корректировка коэффициентов уравнения поверхности. \en Correction of surface equation coefficients.
c3d_constexpr VERSION LOFTED_SURFACE_VERSION2 = 0x13000015L; ///< \ru Возможность устанавливать нормали на торцевых сечениях в виде точки. \en Ability to set normals on end sections as a point.
c3d_constexpr VERSION LOFTED_SURFACE_VERSION3 = 0x13000019L; ///< \ru Введены множители производной в случае установки нормали на торцевых сечениях. \en Factors of the derivative are added in the case of setting the normal on the end sections.
c3d_constexpr VERSION LOFTED_SURFACE_VERSION4 = 0x1300001BL; ///< \ru Добавлен вектор направлени движение повехности в случае установки нормали. Необходимо для тела с операцией Купол. \en The direction vector of the surface progress is added in the case of setting the normal. Necessary for the body with the operation Dome.
//------------------------------------------------------------------------------
+3 -1
View File
@@ -260,6 +260,7 @@ private:
*/
MbMeshSurface( c3d::SpaceCurvesSPtrVector & initU, c3d::SpaceCurvesSPtrVector & initV,
c3d::DoubleVector & parsU, c3d::DoubleVector & parsV,
c3d::DoubleVector * tuCurvePars, c3d::DoubleVector * tvCurvePars,
bool uClosed, bool vClosed,
const bool (&adjPatch)[4],
const MbeMatingType( &types )[4],
@@ -495,7 +496,8 @@ public:
private:
void AddCurvesRef();
void ReleaseCurves();
void Init( bool calcParams, bool callFromMultiPatchGenerator = false );
void Init( bool calcParams, bool callFromMultiPatchGenerator,
c3d::DoubleVector * tuCurvePars, c3d::DoubleVector * tvCurvePars );
bool CheckPoles( MbMeshSurfaceAuxiliaryData * ) const; // \ru Инициализировать полюсы на границе параметрической области. \en Initialize poles on the border of parameters area.
// \ru Аналоги публичных функций для внутреннего использования (используют присланный кэш). \en Analongs of public functions for internal use (use the sent cache).
+1 -1
View File
@@ -14,7 +14,7 @@
#include <surface.h>
const_expr bool _EVEN_ = false; // \ru Неравномерная параметризация по дуге при u = const \en Uneven parameterization along an arc where u = const
c3d_constexpr bool _EVEN_ = false; // \ru Неравномерная параметризация по дуге при u = const \en Uneven parameterization along an arc where u = const
class MATH_CLASS MbSurfaceCurve;
+4 -2
View File
@@ -95,8 +95,8 @@ class MATH_CLASS MbSurface : public MbSpaceItem, public MbNestSyncItem {
protected :
/** \brief \ru Габаритный куб поверхности.
\en Bounding box of surface. \~
\details \ru Габаритный куб поверхности рассчитывается только при запросе габарита объекта. Габаритный куб в конструкторе объекта и после модификации объекта принимает неопределенное значение.
\en Bounding box of surface is calculated only at the request. Bounding box of surface is undefined after object constructor and after object modifications \n \~
\details \ru Габаритный куб поверхности рассчитывается только при запросе габарита объекта. Габаритный куб в конструкторе объекта и после модификации объекта принимает неопределенное значение. \n
\en Bounding box of surface is calculated only at the request. Bounding box of surface is undefined after object constructor and after object modifications. \n \~
*/
mutable MbCube cube;
@@ -387,6 +387,8 @@ public:
/// \ru Вычислить производную нормали в точке с параметрами u v вдоль линии du dv. \en Calculate derivative of normal vector at the point with the given parameters u and v along the line with the given direction (du,dv).
virtual void _NormalD ( double u, double v, double du, double dv, MbVector3D & der ) const;
/// \ru Вычислить вторую производную нормали в точке с параметрами u v вдоль линии du dv. \en Calculate second derivative of normal vector at the point with the given parameters u and v along the line with the given direction (du,dv).
virtual void _NormalDD( double u, double v, double du, double dv, MbVector3D & der ) const;
/** \brief \ru Вычислить значения точки и производных для заданных параметров.
\en Calculate point and derivatives of object for given parameters. \~
+12 -3
View File
@@ -161,12 +161,12 @@
#endif
//------------------------------------------------------------------------------
/// \ru Обертка для constexpr. \en Wrapper for constexpr.
/// \ru Обертка для c o n s t e x p r. \en Wrapper for c o n s t e x p r.
//---
#ifdef C3D_STANDARD_CXX_11
#define const_expr constexpr
#define c3d_constexpr constexpr
#else
#define const_expr const
#define c3d_constexpr const
#endif // C3D_STANDARD_CXX_11
//------------------------------------------------------------------------------
@@ -178,5 +178,14 @@
#define C3D_NULL_PTR NULL
#endif // C3D_STANDARD_CXX_11_PARTIAL
//------------------------------------------------------------------------------
// \ru Нулевой указатель. \en Null pointer.
//---
#ifdef C3D_STANDARD_CXX_11
#define c3d_final final
#else
#define c3d_final
#endif // C3D_STANDARD_CXX_11_PARTIAL
#endif // __SYSTEM_CPP_STANDARD_H
+22 -22
View File
@@ -116,46 +116,46 @@ typedef ptrdiff_t refcount_t; // Возвращаемый тип счет
#if defined(PLATFORM_64)
/// \ru Максимальное значение uint. \en Maximum value of uint. \~ \ingroup Base_Tools
const_expr uint SYS_MAX_UINT = 0xffffffff; // ((uint)-1) //-V112
c3d_constexpr uint SYS_MAX_UINT = 0xffffffff; // ((uint)-1) //-V112
/// \ru Максимальное значение size_t. \en Maximum value of size_t. \~ \ingroup Base_Tools
const_expr size_t SYS_MAX_T = 0xffffffffffffffff; // ((size_t)-1) //-V112
c3d_constexpr size_t SYS_MAX_T = 0xffffffffffffffff; // ((size_t)-1) //-V112
/// \ru Максимальное значение ptrdiff_t. \en Maximum value of ptrdiff_t. \~ \ingroup Base_Tools
const_expr ptrdiff_t SYS_MAX_ST = 0x7fffffffffffffff; //-V112
c3d_constexpr ptrdiff_t SYS_MAX_ST = 0x7fffffffffffffff; //-V112
/// \ru Минимальное значение ptrdiff_t. \en Minimum value of ptrdiff_t. \~ \ingroup Base_Tools
const_expr ptrdiff_t SYS_MIN_ST = 0x8000000000000000; //-V112
c3d_constexpr ptrdiff_t SYS_MIN_ST = 0x8000000000000000; //-V112
#else // PLATFORM_64
/// \ru Максимальное значение uint. \en Maximum value of uint. \~ \ingroup Base_Tools
const_expr uint SYS_MAX_UINT = 0xffffffff; // ((uint)-1) //-V112
c3d_constexpr uint SYS_MAX_UINT = 0xffffffff; // ((uint)-1) //-V112
/// \ru Максимальное значение size_t. \en Maximum value of size_t. \~ \ingroup Base_Tools
const_expr size_t SYS_MAX_T = 0xffffffff; // ((size_t)-1) //-V112
c3d_constexpr size_t SYS_MAX_T = 0xffffffff; // ((size_t)-1) //-V112
/// \ru Максимальное значение ptrdiff_t. \en Maximum value of ptrdiff_t. \~ \ingroup Base_Tools
const_expr ptrdiff_t SYS_MAX_ST = 0x7fffffff; //-V112
c3d_constexpr ptrdiff_t SYS_MAX_ST = 0x7fffffff; //-V112
/// \ru Минимальное значение ptrdiff_t. \en Minimum value of ptrdiff_t. \~ \ingroup Base_Tools
const_expr ptrdiff_t SYS_MIN_ST = 0x80000000; //-V112
c3d_constexpr ptrdiff_t SYS_MIN_ST = 0x80000000; //-V112
#endif // PLATFORM_64
/// \ru Максимальное значение uint8. \en Maximum value of uint8. \~ \ingroup Base_Tools
const_expr uint8 SYS_MAX_UINT8 = 0xFF; //-V112
c3d_constexpr uint8 SYS_MAX_UINT8 = 0xFF; //-V112
/// \ru Максимальное значение uint16. \en Maximum value of uint16. \~ \ingroup Base_Tools
const_expr uint16 SYS_MAX_UINT16 = 0xFFFF; //-V112
c3d_constexpr uint16 SYS_MAX_UINT16 = 0xFFFF; //-V112
/// \ru Максимальное значение uint32. \en Maximum value of uint32. \~ \ingroup Base_Tools
const_expr uint32 SYS_MAX_UINT32 = 0xFFFFFFFF; //-V112
c3d_constexpr uint32 SYS_MAX_UINT32 = 0xFFFFFFFF; //-V112
/// \ru Максимальное значение uint64. \en Maximum value of uint64. \~ \ingroup Base_Tools
const_expr uint64 SYS_MAX_UINT64 = 0xFFFFFFFFFFFFFFFF; //-V112
c3d_constexpr uint64 SYS_MAX_UINT64 = 0xFFFFFFFFFFFFFFFF; //-V112
/// \ru Максимальное значение int16. \en Maximum value of int16. \~ \ingroup Base_Tools
const_expr int16 SYS_MAX_INT16 = 0x7FFF; //-V112
c3d_constexpr int16 SYS_MAX_INT16 = 0x7FFF; //-V112
/// \ru Максимальное значение int32. \en Maximum value of int32. \~ \ingroup Base_Tools
const_expr int32 SYS_MAX_INT32 = 0x7FFFFFFF; //-V112
c3d_constexpr int32 SYS_MAX_INT32 = 0x7FFFFFFF; //-V112
/// \ru Максимальное значение int64. \en Maximum value of int64. \~ \ingroup Base_Tools
const_expr int64 SYS_MAX_INT64 = 0x7FFFFFFFFFFFFFFF; //-V112
c3d_constexpr int64 SYS_MAX_INT64 = 0x7FFFFFFFFFFFFFFF; //-V112
/// \ru Минимальное значение int16. \en Minimum value of int16. \~ \ingroup Base_Tools
const_expr int16 SYS_MIN_INT16 = (int16)(uint16)0x8000; //-V112
c3d_constexpr int16 SYS_MIN_INT16 = (int16)(uint16)0x8000; //-V112
/// \ru Минимальное значение int32. \en Minimum value of int32. \~ \ingroup Base_Tools
const_expr int32 SYS_MIN_INT32 = (int32)(uint32)0x80000000; //-V112
c3d_constexpr int32 SYS_MIN_INT32 = (int32)(uint32)0x80000000; //-V112
/// \ru Минимальное значение int64. \en Minimum value of int64. \~ \ingroup Base_Tools
const_expr int64 SYS_MIN_INT64 = (int64)(uint64)0x8000000000000000; //-V112
c3d_constexpr int64 SYS_MIN_INT64 = (int64)(uint64)0x8000000000000000; //-V112
//#endif // NOMINMAX
@@ -202,12 +202,12 @@ inline int8 HiInt8 ( uint16 u16 ) { return int8(u16 >> 8); } //-V
//------------------------------------------------------------------------------
/// \ru Неопределенный размер. \en Undefined size. \~ \ingroup Base_Tools
//---
const_expr size_t NSIZE = SYS_MAX_T; //OV_x64 (size_t)-1;
c3d_constexpr size_t NSIZE = SYS_MAX_T; //OV_x64 (size_t)-1;
//------------------------------------------------------------------------------
/// \ru Неопределенная позиция (для 32 битных данных). \en Undefined position (for 32-bit data). \~ \ingroup Base_Tools
//---
const_expr uint NPOS32 = (uint)SYS_MAX_UINT32; // \ru КВН x64 -1 для работы с таблицами \en КВН x64 -1 for dealing with tables
c3d_constexpr uint NPOS32 = (uint)SYS_MAX_UINT32; // \ru КВН x64 -1 для работы с таблицами \en КВН x64 -1 for dealing with tables
//------------------------------------------------------------------------------
@@ -218,7 +218,7 @@ const_expr uint NPOS32 = (uint)SYS_MAX_UINT32; // \ru КВН x64 -1 для ра
\ingroup Base_Tools
*/
//---
const_expr size_t SIZE_OF_POINTER = sizeof(char *);
c3d_constexpr size_t SIZE_OF_POINTER = sizeof(char *);
//------------------------------------------------------------------------------
@@ -239,7 +239,7 @@ SignedType abs_t( const SignedType x ) { return ((x >= 0) ? x : -x); } //KYA K13
#if defined (C3D_WINDOWS ) && !defined(ALL_WARNINGS) //_MSC_VER // Set warnings level
// http://support.microsoft.com/kb/134980/ru
#pragma warning(disable: 4275) //AP non dll-interface class '1' used as base for dll-interface class '2' (deriving exported from non-exported)
//#pragma warning(disable: 4275) //AP non dll-interface class '1' used as base for dll-interface class '2' (deriving exported from non-exported)
#pragma warning(disable: 4251) //AP class '1' needs to have dll-interface to be used by clients of class '2' (using non-exported in exported)
// have to be disabled
+26 -16
View File
@@ -24,11 +24,21 @@
*/
//---
enum MbeMultithreadedMode {
mtm_Off = 0, ///< \ru Многопоточность ядра отключена. \en Kernel multithreading is off.
mtm_Standard = 1, ///< \ru Включена многопоточность ядра при обработке независимых объектов (без общих данных). \en Kernel multithreading is ON for independent objects (without common data).
mtm_SafeItems = 2, ///< \ru Обеспечивается потокобезопасность объектов типа MbItem. Выключена многопоточность ядра при обработке объектов, имеющих общие данные. \en Ensured thread-safety of objects MbItem. Kernel multithreading is OFF for objects with shared data.
mtm_Items = 3, ///< \ru Обеспечивается потокобезопасность объектов типа MbItem. Включена многопоточность ядра при обработке объектов с общими данными. \en Ensured thread-safety of objects MbItem. Kernel multithreading is ON for objects with shared data.
mtm_Max = 31 ///< \ru Включена максимальная многопоточность ядра. \en Maximal kernel multithreading is ON.
///< \ru Многопоточность ядра полностью отключена. Использовать интерфейсы ядра в многопоточном приложении нельзя.
///< \en Kernel multithreading is completely off. The kernel interfaces can't be used in a multithreaded application.
mtm_Off = 0,
///< \ru Включена внутренняя многопоточность ядра при обработке независимых объектов (без общих данных). Можно использовать интерфейсы ядра для параллельной обработки независимых объектов.
///< \en Internal kernel multithreading is ON for independent objects (without common data). The kernel interfaces can be used to process independent objects in parallel.
mtm_Standard = 1,
///< \ru Обеспечивается потокобезопасность объектов ядра. Можно использовать интерфейсы ядра для параллельной обработки объектов. Но внутренняя многопоточность ядра при обработке объектов с общими данными отключена.
///< \en Ensured thread-safety of the kernel objects. The kernel interfaces can be used to process objects in parallel. But internal multithreading is OFF for objects with shared data.
mtm_SafeItems = 2,
///< \ru Обеспечивается потокобезопасность объектов ядра. Можно использовать интерфейсы ядра для параллельной обработки объектов. Включена многопоточность ядра при обработке любых объектов.
///< \en Ensured thread-safety of kernel objects. The kernel interfaces can be used to process objects in parallel. Kernel multithreading is ON for any objects.
mtm_Items = 3,
///< \ru Включена максимальная многопоточность ядра. Можно использовать интерфейсы ядра для параллельной обработки объектов. Включена многопоточность ядра при обработке любых объектов.
///< \en Maximal kernel multithreading is ON. The kernel interfaces can be used to process objects in parallel. Kernel multithreading is ON for any objects.
mtm_Max = 31
};
//------------------------------------------------------------------------------
@@ -56,8 +66,8 @@ public:
*/
bool IsSubscribed() { return subscribed > 0; }
/** \brief \ru Очистить кэшированные данные. Возвращает true, если объект был отписан от сборки мусора.
\en Reset cached data. Return true if the object was unsubscribed from garbage collection.\~
/** \brief \ru Очистить кэшированные данные. Возвращает true, если кэшированные данные были очищены и объект отписан от сборки мусора.
\en Reset cached data. Return true if cached data was reset and the object was unsubscribed from garbage collection.\~
*/
virtual bool ResetCacheData() = 0;
@@ -268,7 +278,7 @@ public:
/** \brief \ru Функция очистки, используемая сборщиком мусора.
\en Cleaning function, used by the garbage collector. \~
*/
virtual bool ResetCacheData() { CleanAll(); return true; }
virtual bool ResetCacheData() { CleanAll( true); return true; }
/** \brief \ru Принудительное удаление всех кэшей (используется сборщиком мусора).
\en Forced deletion of all caches (used by the garbage collector). \~
@@ -279,7 +289,7 @@ private:
/** \brief \ru Удалить все кэши и отписаться от сборки мусора. Должна вызываться в последовательном участке кода.
\en Delete all caches and unsubscribe from the garbage collection. Should be called in sequential code. \~
*/
void CleanAll( bool doPostproc = true );
void CleanAll( bool doPostproc, bool force = false );
/** \brief \ru Получить указатель на блокировку для операций с кэшем главного потока. Всегда возвращает ненулевое значение.
\en Get a pointer to the lock for operations with the main thread cache. Always returns non-null value. \~
@@ -335,7 +345,7 @@ inline CacheManager<T>::CacheManager( const CacheManager<T> & item )
template<class T>
inline CacheManager<T>::~CacheManager()
{
CleanAll( false );
CleanAll( false, true );
if ( longTerm != NULL )
delete longTerm;
if ( lock != NULL )
@@ -389,7 +399,7 @@ inline T * CacheManager<T>::operator()()
#define INIT_BY_LONGTERM ( longTerm != NULL ? new T( *longTerm ) : new T() )
if ( !IsSafeMultithreading() || !IsInParallel() ) {
CleanAll();
CleanAll( true );
return LongTerm();
}
@@ -469,8 +479,8 @@ inline T * CacheManager<T>::operator()()
//------------------------------------------------------------------------------
// \ru Удалить данные в кэшах. Если resetLongTerm == true, удалить также данные кэша главного потока.
// \en Delete caches data. If resetLongTerm == true, also delete data of the main thread cache.
// \ru Аннулировать данные в кэшах. Если resetLongTerm == true, удалить данные кэша главного потока.
// \en Invalidate caches data. If resetLongTerm == true, delete data of the main thread cache.
// ---
template<class T>
inline void CacheManager<T>::Reset( bool resetLongTerm )
@@ -500,12 +510,12 @@ inline void CacheManager<T>::Reset( bool resetLongTerm )
//------------------------------------------------------------------------------
// \ru Удалить все кэши и отписаться от сборки мусора. Должна вызываться в последовательном участке кода.
// \en Delete all caches and unsubscribe from the garbage collection.Should be called in sequential code.
// \en Delete all caches and unsubscribe from the garbage collection. Should be called in sequential code.
// ---
template<class T>
inline void CacheManager<T>::CleanAll( bool doPostproc )
inline void CacheManager<T>::CleanAll( bool doPostproc, bool force )
{
if ( CacheCleanupAllowed() ) {
if ( force || CacheCleanupAllowed() ) {
if ( tcache != NULL ) {
if ( doPostproc )
Postprocess();
+27 -19
View File
@@ -24,7 +24,7 @@
//
// \ru Переменная C3D_NATIVE_LOCK включает использование блокировок на базе
// \ru системных механизмов синхронизации вместо OpenMP,
// \ru что позволяет использование механизмов распараллеливания, отличных от OpenMP.
// \ru что позволяет использовать механизмы распараллеливания, отличные от OpenMP.
//
// \en The variable C3D_NATIVE_LOCK enables using locks on base of system
// \en synchronization mechanisms instead of OpenMP, that allows
@@ -114,25 +114,28 @@ public:
////////////////////////////////////////////////////////////////////////////////
//
// \ru Поддержка многопоточности при использовании произвольного параллельного фреймворка
// \ru в пользовательском приложении.
// \ru Поддержка многопоточности в пользовательском приложении.
// \ru Перед запуском параллельных вычислений, приложение должно проверить, что установленный режим
// многопоточности ядра, позволяет использовать параллельные вычисления.
// \ru Чтобы использовать интерфейсы ядра в нескольких потоках,
// \ru для ядра должен быть установлен режим многопоточных вычислений не ниже mtm_SafeItems.
//
// \ru При использовании параллельных механизмов, отличных от OpenMP, пользовательское приложение
// \ru обязано нотифицировать ядро о входе в каждый параллельный регион и выходе из него.
// \ru При использовании параллельных вычислений, пользовательское приложение
// \ru обязано нотифицировать ядро о входе в параллельный регион и выходе из него.
// \ru Для этого могут быть использованы класс ParallelRegionGuard (защитник параллельного региона
// \ru в области видимости), функции EnterParallelRegion и ExitParallelRegion
// или макросы ENTER_PARALLEL и EXIT_PARALLEL.
// \ru Примеры:
// {
//
// if( Math::CheckMultithreadedMode( mtm_Items ) ){
// ParallelRegionGuard l;
// std::thread t1( function1 );
// std::thread t2( function2 );
// t1.join();
// t2.join();
// }
// {
//
// if( Math::CheckMultithreadedMode( mtm_Items ) ){
// EnterParallelRegion();
// std::thread t1( function1 );
// std::thread t2( function2 );
@@ -142,17 +145,21 @@ public:
// }
//
//
// \en Support of multithreading when using an arbitrary parallel framework in user application.
// \en Support of multithreading in user application.
//
// \en Before running parallel calculations, the application must check that the kernel multithreading mode
// \en allows parallel computing.
// \en For using the kernel interfaces in several threads, the multithreading mode mtm_SafeItems
// \en or higher should be defined for the kernel.
//
// \en When using a parallel framework other than OpenMP in user code, the application must notify
// \en the kernel about entering and exiting a parallel region.
// \en When using parallel calculations, the application must notify the kernel about entering
// \en and exiting a parallel region.
// \en For that, the class ParallelRegionGuard (a scoped guard of parallel region),
// \en the functions EnterParallelRegion and ExitParallelRegion,
// or macros ENTER_PARALLEL and EXIT_PARALLEL could be used.
// \en Examples:
//
// if( Math::CheckMultithreadedMode( mtm_Items ) )
// {
// ParallelRegionGuard l;
// std::thread t1( function1 );
@@ -160,6 +167,8 @@ public:
// t1.join();
// t2.join();
// }
//
// if( Math::CheckMultithreadedMode( mtm_Items ) )
// {
// EnterParallelRegion();
// std::thread t1( function1 );
@@ -174,11 +183,10 @@ public:
//------------------------------------------------------------------------------
/** \brief \ru Защитник параллельного региона в области видимости.
\en Scoped guard of parallel region. \~
\details \ru Класс защищает регион кода, выполняющийся параллельно.
Работает в области видимости.
Должен использоваться для защиты параллельного кода,
если используются средства распараллеливания, отличные от OpenMP.
\details \ru Класс защищает регион кода, выполняющийся параллельно. Работает в области видимости.
Должен использоваться для защиты параллельного кода.
Пример использования:
if( Math::CheckMultithreadedMode( mtm_Items ) )
{
ParallelRegionGuard l;
std::thread t1( function1 );
@@ -186,10 +194,10 @@ public:
t1.join();
t2.join();
}
\en The class guards a code region running in parallel.
Works in scope.
Should be used to protect parallel code if parallel framework other than OpenMP is used.
\en The class guards a code region running in parallel. Works in scope.
Should be used to protect parallel code.
Example of use:
if( Math::CheckMultithreadedMode( mtm_Items ) )
{
ParallelRegionGuard l;
std::thread t1( function1 );
@@ -293,7 +301,7 @@ MATH_FUNC( void ) ExitParallelRegion();
Using a macro speeds up parallel OpenMP cycles significantly.
*/
// ---
#define EXIT_PARALLEL_FORCED ExitParallelRegion();
#define ENTER_PARALLEL_FORCED EnterParallelRegion();
//------------------------------------------------------------------------------
/** \brief \ru Нотифицирует ядро о выходе из параллельного блока кода.
@@ -306,7 +314,7 @@ MATH_FUNC( void ) ExitParallelRegion();
Using a macro speeds up parallel OpenMP cycles significantly.
*/
// ---
#define ENTER_PARALLEL_FORCED EnterParallelRegion();
#define EXIT_PARALLEL_FORCED ExitParallelRegion();
//------------------------------------------------------------------------------
/** \brief \ru Функция определяет, выполняется ли код параллельно.
+1 -1
View File
@@ -20,7 +20,7 @@ class reader;
class writer;
const_expr uint8 uuidSize = 16;
c3d_constexpr uint8 uuidSize = 16;
//------------------------------------------------------------------------------
+5 -3
View File
@@ -432,7 +432,7 @@ public :
double GetTEndVertex() const;
/// \ru Является ли ребро прямолинейным? \en Is an edge rectilinear?
bool IsStraight() const;
bool IsStraight( bool ignoreParams = false ) const;
/// \ru Выдать декартову точку начальной вершины. \en Get Cartesian point of start vertex.
void GetBegVertexPoint( MbCartPoint3D & cp ) const { begVertex->GetCartPoint(cp); }
/// \ru Выдать декартову точку конечной вершины. \en Get Cartesian point of end vertex.
@@ -977,7 +977,7 @@ public :
/// \ru Выдать направление по отношению к кривой. \en Get the direction relative to the curve.
bool IsSameSense() const;
/// \ru Является ли ребро прямолинейным? \en Is an edge rectilinear?
bool IsStraight() const;
bool IsStraight( bool ignoreParams = false ) const;
/// \ru Является ли ребро швом? \en Is an edge a seam?
bool IsSeam() const;
/// \ru Параллельно ли ребро плейсменту. \en Is an edge parallel to the placement?
@@ -1054,7 +1054,7 @@ public :
// \ru Дать информацию для конвертеров. \en Get information for converters.
void GetFinCurve( const MbSurface &, MbCurve *&, bool & );
// \ru Дать информацию для конвертеров. \en Get information for converters.
void GetFin( const MbSurface &, bool, MbCurve *&, bool & );
void GetFin( const MbSurface &, bool, MbCurve *&, bool & ) const;
// \ru Нормализовать fin по ChooseCurve() и установить правило выбора для конвертеров. \en Normalize 'fin' by ChooseCurve() and set the rule for selection of convertors.
void NormalizeFin();
// \ru Установить правило выбора для конвертеров. \en Set the rule for selection of converters.
@@ -1767,6 +1767,8 @@ public:
MbRect GetRect() const;
/// \ru Обновить габарит цикла с указанным индексом. \en Update rectangle bound of loop by index.
bool UpdateLoopRect( size_t loopIndex );
/// \ru Сбросить габариты циклов. \en Reset rectangle bounds of loops.
void ResetLoopsRects() const;
public:
/// \ru Создан ли временный объект сопровождения грани? \en Is a temporary object for the maintenance of a face created?
+5 -2
View File
@@ -40,6 +40,9 @@ typedef SPtr<const MbFaceShell> ConstShellSPtr;
typedef std::pair<size_t, MbFaceShell *> IndexShell;
typedef std::pair<size_t, const MbFaceShell *> IndexConstShell;
typedef std::pair<size_t, ShellSPtr> IndexShellSPtr;
typedef std::pair<size_t, ConstShellSPtr> IndexConstShellSPtr;
typedef std::vector<MbFaceShell *> ShellsVector;
typedef std::vector<const MbFaceShell *> ConstShellsVector;
@@ -335,7 +338,7 @@ public :
void GetFaces( FacesVector & faces ) const
{
faces.reserve( faces.size() + faceSet.size() );
SPtr<MbFace> face;
c3d::FaceSPtr face;
for ( size_t k = 0, kcnt = faceSet.size(); k < kcnt; ++k ) {
face = const_cast<MbFace *>( faceSet[k] );
faces.push_back( face );
@@ -750,7 +753,7 @@ public :
/// \ru Создан ли временный объект сопровождения? \en Is a temporary object for the maintenance created?
bool IsTemporal() const { return (temporal != NULL); }
/// \ru Удалить временный объект сопровождения. \en Delete a temporary maintenance object.
void RemoveTemporal( bool removeFacesTemporal = true ) const;
void RemoveTemporal( bool removeFacesTemporal = false ) const;
/// \ru Создать новый временный объект сопровождения. \en Create new temporary maintenance object.
const MbFaceSetTemp * CreateTemporal( bool keepExisting ) const;
/// \ru Обновить временный объект сопровождения грани. \en Update a temporary maintenance object of a face.
+6 -6
View File
@@ -419,10 +419,10 @@ void ExtractCurveDeleteFrame( MbWireFrame *& wireFrame,
\ingroup Curve3D_Modeling
*/
// ---
MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result,
MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result,
const RPArray<MbCurve3D> & curves,
const MbSNameMaker & snMaker,
const MbCreator * creator = NULL );
const MbSNameMaker & snMaker,
const MbCreator * creator = NULL );
//------------------------------------------------------------------------------
@@ -443,10 +443,10 @@ MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result,
\ingroup Curve3D_Modeling
*/
// ---
MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result,
const MbCurve3D & curve,
MATH_FUNC (bool) CreateWireFrame( MbWireFrame *& result,
const MbCurve3D & curve,
const MbSNameMaker & snMaker,
const MbCreator * creator = NULL );
const MbCreator * creator = NULL );
#endif // __WIRE_FRAME_H
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.