- C3d aggiornamento librerie ( 118019).
This commit is contained in:
SaraP
2024-12-12 08:37:52 +01:00
parent ab8d108357
commit d6eac07eea
57 changed files with 1049 additions and 244 deletions
+2 -1
View File
@@ -122,8 +122,8 @@ public:
MbeCreateBRepMode bMode = cbm_Default )
: useRelativeTolerance( useRelTol )
, smoothBoundaryEdges ( smoothBoundary )
, tolerance ( tol )
, bAngle ( angle )
, tolerance ( tol )
, surfReconstructMode ( reconMode )
, brepCreationMode ( bMode )
{}
@@ -491,4 +491,5 @@ MATH_FUNC( MbResultType ) ConvertCollectionToShell( MbCollection & collection, M
*/
// ---
MATH_FUNC( MbResultType ) FitSurfaceToGrid( const MbGrid & grid, const MbSurfaceFitToGridParameters & params, MbSurfaceFitToGridResults & results );
#endif // __ACTION_B_SHAPER_H
+6 -6
View File
@@ -217,12 +217,12 @@ MATH_FUNC (MbResultType) NurbsCurve( const SArray<MbCartPoint3D> & pointList,
\ingroup Curve3D_Modeling
*/
// ---
MATH_FUNC (double) NurbsFitting( const std::vector<MbCartPoint3D> & pointList,
bool curveClosed,
size_t degree,
size_t mode,
double & accuracy,
MbCurve3D *& result );
DEPRECATE_DECLARE MATH_FUNC (double) NurbsFitting( const std::vector<MbCartPoint3D> & pointList,
bool curveClosed,
size_t degree,
size_t mode,
double & accuracy,
MbCurve3D *& result );
//------------------------------------------------------------------------------
+1 -2
View File
@@ -315,11 +315,10 @@ MATH_FUNC( MbResultType ) DrapeShell( const MbDrapeShellParams & params, MbDrape
\en Merging parameters. \~
\param[in-out] meshTo - \ru Полигональный объект, который аккумулирует результат объединения.
\en A polygonal object, accumulating merged objects. \~
\return \ru Код результата операции, rt_Success если объекты успешно объединены.
\return \ru Код результата операции, rt_Success, если объекты успешно объединены.
\en Returns the operation result code, rt_Success if the objects are successfully merged. \n
\warning \ru В разработке.
\en Under development.\~
*/ // ---
MATH_FUNC( MbResultType ) MergePolymeshes( const MbPolymesh & meshFrom, const MbMergePolymeshParams & params, MbPolymesh & meshTo );
#endif // __ACTION_POLYMESH_H
+25
View File
@@ -19,6 +19,7 @@ class MbNurbsWireFrameParams;
class MbTrimmedWireFrameParams;
class MbWireFrameProjParams;
class MbWireFrameProjResult;
class MbOffsetWireFrameParams;
//------------------------------------------------------------------------------
@@ -201,4 +202,28 @@ MATH_FUNC( MbResultType ) ExtendWireFrame( c3d::WireFrameSPtr &
const MbCurveExtensionParameters3D & params,
c3d::WireFrameSPtr & result );
//------------------------------------------------------------------------------
/** \brief \ru Создать эквидистантный каркас.
\en Create an offset wire frame. \~
\details \ru Создать эквидистантный каркас смещением базового каркаса.
\en Create an offset wire frame by shifting the base wire frame. \~
\param[in] wireFrame - \ru Исходный каркас.
\en The initial wire frame. \~
\param[in] sameWire - \ru Режим копирования входного каркаса.
\en Whether to copy the input wire frame. \~
\param[in] params - \ru Параметры операции.
\en Operation parameters. \~
\param[out] result - \ru Эквидистантный каркас.
\en The offset wire frame. \~
\return \ru Возвращает код результата операции.
\en Returns operation result code. \~
\ingroup WireFrame_Modeling
*/
// ---
MATH_FUNC( MbResultType ) CreateOffsetWireFrame( c3d::WireFrameSPtr & wireFrame,
MbeCopyMode sameWire,
const MbOffsetWireFrameParams & params,
c3d::WireFrameSPtr & result );
#endif // __ACTION_WIREFRAME_H
+8 -7
View File
@@ -44,13 +44,14 @@ public:
*/
//---
enum class MbeHotPointType : uint16 {
undefinedHP = 0, ///< \ru Неопределенный тип. \en Undefined type.
draftHP, ///< \ru Хот-точка операции уклона. \en The draft operation hot point.
conicSectionHP, ///< \ru Хот-точка операции построения переменного конического сечения. \en The conic section operation hot point.
DMFilletRadiusSetHP, ///< \ru Хот-точка операции прямого моделирования по установке радиусов граням скругления. \en The direct modeling operation's hot point by set fillet face's radius.
elementaryHP, ///< \ru Хот-точка операции построения элементарного тела. \en The elementary solid operation hot point.
DMReplaceFacesHP, ///< \ru Хот-точка операции замены граней. \en Hot point of the face replacement operation.
DMOffsetFacesHP, ///< \ru Хот-точка операции замены граней на эквидистантные. \en Hot point of the operation of replacement faces with the offset ones.
undefinedHP = 0, ///< \ru Неопределенный тип. \en Undefined type.
draftHP, ///< \ru Хот-точка операции уклона. \en The draft operation hot point.
conicSectionHP, ///< \ru Хот-точка операции построения переменного конического сечения. \en The conic section operation hot point.
DMFilletRadiusSetHP, ///< \ru Хот-точка операции прямого моделирования по установке радиусов граням скругления. \en The direct modeling operation's hot point by set fillet face's radius.
elementaryHP, ///< \ru Хот-точка операции построения элементарного тела. \en The elementary solid operation hot point.
DMReplaceFacesHP, ///< \ru Хот-точка операции замены граней. \en Hot point of the face replacement operation.
DMOffsetFacesHP, ///< \ru Хот-точка операции замены граней на эквидистантные. \en Hot point of the operation of replacement faces with the offset ones.
DMReplaceFacesGroupHP, ///< \ru Хот-точка операции замены группы граней. \en Hot point of the operation of replacement faces group.
// \ru Вставлять новые типы перед этим типом. \en Insert new types before this type.
endHP = SYS_MAX_INT16
};
+2
View File
@@ -40,6 +40,8 @@ class MATH_CLASS MbFixAttrSet;
class IAttrDefinition
{
public:
virtual ~IAttrDefinition() = default;
/// \ru Преобразовать из пользовательского в "системный". \en Convert user attribute to "system" one.
virtual MbUserAttribute * ReduceUserAttrib ( const MbExternalAttribute & source ) = 0;
+3 -1
View File
@@ -600,7 +600,9 @@ namespace c3d // namespace C3D
constexpr TCHAR c3dStr_SavedViewUpVector[] = _T( "c3d_SavedView_UpVector" );
/** \ru Подсказка для масштаба текущего вида. \en Hint for the scale of the current view. \~*/
constexpr TCHAR c3dStr_SavedViewScale[] = _T( "c3d_SavedView_Scale" );
/** \ru Подсказка для типа текущего вида (ортогональный/перспективный). Хранится в виде значения bool.
\en Hint for the type of the current view (orthogonal/perspective). Stored as a bool value. \~*/
constexpr TCHAR c3dStr_SavedViewPerspective[] = _T( "c3d_SavedView_Perspective" );
} // namespace C3D
+28 -6
View File
@@ -18,6 +18,7 @@
#include <topology.h>
#include <solid.h>
#include <point_frame.h>
#include <templ_dptr.h>
#include <vector>
#include <iterator>
#include <curve3d.h>
@@ -1227,7 +1228,7 @@ public:
/// \ru Режим проверки самопересечений. \en Mode of self intersection checking.
enum class MbeCheckSelfIntMode
{
Auto , /// \ru Автоматический режим. \en Auto mode.
Auto , /// \ru Автоматический режим (проверять пересечение граней, включая самопересечения). \en Auto mode (check intersection of faces including self-intersections).
SelfIntFacesOnly , /// \ru Проверять только самопересечение граней. \en Check only self-intersection of faces.
IntDfferentFacesOnly /// \ru Проверять только пересечение различных граней. \en Check only the intersection of different faces.
};
@@ -1235,6 +1236,8 @@ public:
private:
MbeCheckSelfIntMode _mode; ///< \ru Режим проверки самопересечений. \en Mode of self intersection checking.
VERSION _version; ///< \ru Версия алгоритма. \en Algorithm version.
std::unique_ptr<MbStepData> _stepData; ///< \ru Данные для вычисления шага при триангуляции. \en Data for step calculation during triangulation.
public:
mutable IProgressIndicator * _progress; ///< \ru Индикатор прогресса выполнения операции. \en A progress indicator of the operation.
@@ -1243,7 +1246,7 @@ public:
MbShellSelfIntParams();
/** \brief \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\details \ru Конструктор проверки на самопересечение оболчки.
\details \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
@@ -1253,7 +1256,7 @@ public:
MbShellSelfIntParams( VERSION version, IProgressIndicator * prog = nullptr );
/** \brief \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\details \ru Конструктор проверки на самопересечение оболчки.
\details \ru Конструктор проверки на самопересечение оболочки.
\en Constructor of checking for self-intersection of shell. \~
\param[in] mode - \ru Режим проверки самопересечений.
\en Mode of self intersection checking. \~
@@ -1263,6 +1266,20 @@ public:
\en A progress indicator of the operation.
*/
MbShellSelfIntParams( MbeCheckSelfIntMode mode, VERSION version, IProgressIndicator * prog = nullptr );
/** \brief \ru Конструктор проверки на самопересечение оболочки с помощью анализа сеток.
\en Constructor of checking for self-intersection of shell by meshes check. \~
\details \ru Конструктор проверки на самопересечение оболочки с помощью анализа сеток.
\en Constructor of checking for self-intersection of shell by meshes check. \~
\param[in] stepData - \ru Данные для вычисления шага при триангуляции.
\en Data for step calculation during triangulation. \~
\param[in] version - \ru Версия алгоритма.
\en Algorithm version. \~
\param[in] prog - \ru Индикатор прогресса выполнения операции.
\en A progress indicator of the operation.
\warning \ru Пока не готово. \en Not yet ready.
*/
MbShellSelfIntParams( const MbStepData & stepData, VERSION version = Math::DefaultMathVersion(), IProgressIndicator * prog = nullptr );
/// \ru Деструктор. \en Destructor.
~MbShellSelfIntParams() {}
public:
@@ -1272,6 +1289,9 @@ public:
void SetMode( MbeCheckSelfIntMode mode ) { _mode = mode; }
/// \ru Получить версию алгоритма. \en Get the algorithm version.
VERSION GetVersion() const { return _version; }
// \ru Получить данные для расчета шага. \en Get data for the step calculation. \~
const MbStepData * GetStepData() const { return _stepData.get(); }
OBVIOUS_PRIVATE_COPY( MbShellSelfIntParams )
};
@@ -1292,7 +1312,7 @@ private:
\en Result of intersection/self-intersection of faces. \~
\details \ru Результат пересечения/самопересечения граней. Если '_facesIndices' содержат
одинаковые индексы, значит грань с данным индексом самопересекается.
Кривые пересечения не вычисляются для сомопересечения и '_curves' будет пустым. \n
Кривые пересечения не вычисляются для самопересечения и '_curves' будет пустым. \n
\en The result of intersection/self-intersection of edges. If '_facesIndices' contains
identical indices, which means the face with this index intersects itself.
Intersection curves are not calculated for self-intersection and '_curves' will be empty. \n \~
@@ -1359,8 +1379,8 @@ public:
If intersectionCurves = nullptr - intersection curves
do not return. \~
\return \ru Возвращает:
false, если результата с заданым индексом не содержится;
true, если результата с заданым индексом найден;
false, если результата с заданным индексом не содержится;
true, если результата с заданным индексом найден;
\en Returns:
false, if there is no result with the given index;
true, if a result with the given index is found; \~
@@ -1370,6 +1390,8 @@ public:
size_t Count() const { return _selfIntResults.size(); }
/// \ru Установить значения по умолчанию. \en Set defaults.
void Reset() { _selfIntResults.clear(); };
/// \ru Зарезервировать размер массива пар пересекающихся и самопересекающихся граней. \en Reserve the size the array of pairs of intersecting and self-intersecting faces.
void ReserveResult( size_t count ) { _selfIntResults.reserve( count ); }
OBVIOUS_PRIVATE_COPY( MbShellSelfIntResults )
};
+36 -3
View File
@@ -409,9 +409,9 @@ public :
public:
/// \ru Получить имя документа. \en Get document's name.
virtual const std::string GetDocumentName () const = 0; //{ return std::string( GetDocName().get_str() ); };
/// \ru Получить имя файла для конвертирования. \en Get file name for converting.
virtual const c3d::path_string FullFilePath () const = 0 ;//{ return c3d::path_string( GetFileName().c_str() ); };
/// \ru Является ли файл текстовым. \en Whether the file is a text file.
/// \ru Получить имя файла для конвертирования. \en Get file name for converting.
virtual const c3d::path_string FullFilePath() const = 0;//{ return c3d::path_string( GetFileName().c_str() ); };
/// \ru Является ли файл текстовым. \en Whether the file is a text file.
virtual bool IsFileAscii () const = 0;
/// \ru Получить версию формата при экспорте. \en Get the version of format for export.
virtual long int GetFormatVersion () const { return EXPORT_DEFAULT; };
@@ -529,6 +529,9 @@ public:
/// \ru Определить способ формирования визуальных свойст при чтении из C3D. \en Specify the way how visual properties form while reading from C3D.
virtual ColorProcessing GetC3DVisualPropertiesResolutionStrategy() const { return ColorProcessing::cr_Both; }
/// \ru Импортировать полигональные объекты как объекты с топологической информацией. \en Import polygonal objects as objects with topological information.
virtual bool ImportMeshesWithTopology() const { return false; }
}; // IConvertorProperty3D
@@ -576,6 +579,7 @@ public:
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;
bool importMeshesWithTopology; ///< \ru Сохранять сетки в MbMesh (false) или в MbPolymesh (true). \en Save meshes to MbMesh (false) or to MbPolymesh (true).
ColorProcessing visualPropertiesFormation; ///< \ru Способ формирования визуальных свойст при чтении из C3D. \en The way how visual properties form while reading from C3D.
SPtr<IProductIdMaker> pruductIdMaker; ///< \ru Генератор однострочного идентификатора по данным об изделии. \en Generator of a single-line id based on product information attribute.
SPtr<IScaleRequestor> scaleRequester; /// \ru Запросчик масштабного коэффициента единиц длины. \en Scale requester.
@@ -715,6 +719,9 @@ public:
/// \ru Определить способ формирования визуальных свойст при чтении из C3D. \en Specify the way how visual properties form while reading from C3D.
ColorProcessing GetC3DVisualPropertiesResolutionStrategy() const override;
/// \ru Импортировать полигональные объекты как объекты с топологической информацией. \en Import polygonal objects as objects with topological information.
bool ImportMeshesWithTopology() const override { return importMeshesWithTopology; }
OBVIOUS_PRIVATE_COPY( ConvConvertorProperty3D )
}; // IConvertorProperty3D
@@ -803,4 +810,30 @@ public:
bool StdToC3D( const std::string & from, c3d::string_t& to ) override;
};
//------------------------------------------------------------------------------
/** \brief \ru Преобразование строк с использованием кодировки Windows-1251.
\en Transform strings using the Windows-1251 encoding.
\ingroup Base_Tools_String
*/
class CONV_CLASS IC3DCharEncodingTransformerWindows1251 : public IC3DCharEncodingTransformer
{
public:
~IC3DCharEncodingTransformerWindows1251() override = default;
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать строку C3D в строку STD.
\en Transform C3D string to the STD one. \~
\ingroup Base_Tools_String
*/
bool C3DToStd( const c3d::string_t& from, std::string & to ) override;
//------------------------------------------------------------------------------
/** \brief \ru Преобразовать строку STD в строку C3D.
\en Transform STD string to the C3D one. \~
\ingroup Base_Tools_String
*/
bool StdToC3D( const std::string & from, c3d::string_t& to ) override;
};
#endif // __CONV_EXCHANGE_SETTINGS_H
+20 -10
View File
@@ -1,4 +1,7 @@
#include <conv_model_document.h>
#ifndef MODEL_TREE_LINEARIZED_H
#define MODEL_TREE_LINEARIZED_H
#include <conv_model_document.h>
#include <mb_matrix.h>
#include <solid.h>
#include <vector>
@@ -50,18 +53,18 @@ class LinearizedContainer {
ReferencedItemType item;
mutable std::vector<MbMatrix3D> references;
public:
// Конструктор по умолчанию
LinearizedContainer() = default;
// Конструктор копирования по умолчанию
LinearizedContainer(const LinearizedContainer& i) = default;
// Конструктор
LinearizedContainer( const ReferencedItemType& it )
LinearizedContainer(const ReferencedItemType& it)
: item( it )
, references() {
}
// Конструктор копирования
LinearizedContainer( const LinearizedContainer& i )
: item( i.item )
, references( i.references ) {
}
// Оператор сравнения
bool operator ==(const LinearizedContainer& to) const {
return item == to.item;
@@ -117,9 +120,14 @@ public:
// Деструктор
~LinearizedTreeDocument();
public:
PartsLinearized GetPartsList() const;
AssembliesLinearized GetAssembliesList() const;
// Заполнить данные
void FillLinearizedData();
private:
// Заполнены ли данные
bool IsFilled();
@@ -153,4 +161,6 @@ public:
void SolidPlaneCutting( const MbSolid & solid, std::vector<MbResultType> & cutRes );
// Резка тела
MbResultType SolidCut( const MbSolid & solid, const MbSurface & surf, bool forward );
};
};
#endif //MODEL_TREE_LINEARIZED_H
+10 -10
View File
@@ -19,8 +19,7 @@
class MbGrid;
class MbFloatGrid;
class MbMesh;
class MbTriangle;
class MbItem;
namespace JTC {
@@ -45,14 +44,12 @@ namespace JTC {
typedef std::vector<MeshVertexPtr> MeshVertexVector;
typedef std::vector<MeshPolygonPtr> MeshPolygonVector;
typedef std::pair<MbTriangle, MbTriangle> TrianglePair;
//------------------------------------------------------------------------------
// Сетка с топологической информацией
// ---
class CONV_CLASS TopoMesh : public MbRefItem {
SPtr<const MbMesh> mesh;
protected:
SPtr<const MbItem> item;
TopoGridVector grids;
MeshVertexVector ownPoints;
MeshPolygonVector ownFacePolygons;
@@ -67,10 +64,10 @@ namespace JTC {
virtual ~TopoMesh();
/// Инициализировать
bool Init( const MbMesh& mesh, bool enableDiagnostics = false );
bool Init( const MbItem& mesh, bool enableDiagnostics = false );
/// Получить сетку
const MbMesh* GetMesh() const;
SPtr<const MbItem> GetMesh() const;
/// Число полигонов
size_t MeshPolygonsCount() const;
@@ -89,7 +86,7 @@ namespace JTC {
/// Получить вырожденные треуголники
std::map< size_t, std::vector<size_t> > GetDegeneratedTriangles() const;
/// Получить граничные точки сетки
std::vector<MbCartPoint3D> GetBoundaryPoints() const;
@@ -97,7 +94,7 @@ namespace JTC {
void Reset();
/// Получить следующую в цепочке граничную вершину.
size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector<size_t>& allBoundary ) const;
//unused:size_t NextBoundaryVertex( size_t indexBoundaryVertex, const std::vector<size_t>& allBoundary ) const;
/// Сформировать внешнюю границу начиная с указанной вершины.
bool InitVoidBoundFrom( std::vector<size_t>& freeBoundaryVerticis );
@@ -105,6 +102,9 @@ namespace JTC {
/// Получить точность задания расстояния.
double MetricTolerance() const;
/// Получить нормаль на сетке
void GetNormal( size_t indexGrid, size_t indexNormal, MbFloatVector3D& vNormal ) const;
OBVIOUS_PRIVATE_COPY( TopoMesh )
};
+75
View File
@@ -0,0 +1,75 @@
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Строитель эквидистантного каркаса.
\en Creator of an offset wire frame.
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __CR_OFFSET_WIREFRAME_H
#define __CR_OFFSET_WIREFRAME_H
#include <creator.h>
#include <op_wireframe_parameter.h>
//------------------------------------------------------------------------------
/** \brief \ru Строитель эквидистантного каркаса.
\en Creator of an offset wire frame. \~
\details \ru Строитель эквидистантного каркаса.
\en Creator of an offset wire frame. \~
\ingroup Model_Creators
*/
// ---
class MATH_CLASS MbOffsetWireFrameCreator : public MbCreator {
private:
MbOffsetWireFrameParams _parameters; ///< \ru Параметры эквидистантного каркаса. \en Parameters of an offset wire frame.
public:
/** \brief \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\details \ru Конструктор эквидистантного карскаса в пространстве.
\en Constructor of an offset wire frame in the space. \~
\param[in] params - \ru Параметры.
\en Parameters. \~
*/
MbOffsetWireFrameCreator( const MbOffsetWireFrameParams & params );
/// \ru Деструктор. \en Destructor.
virtual ~MbOffsetWireFrameCreator();
protected:
/// \ru Конструктор копирования. \en Copy-constructor.
MbOffsetWireFrameCreator( const MbOffsetWireFrameCreator & other,
MbRegDuplicate * iReg );
private:
MbOffsetWireFrameCreator(); ///< \ru Не реализовано. \en Not implemented.
public:
// \ru Общие функции строителя. \en The common functions of the creator.
MbeCreatorType IsA() const override; ///< \ru Тип элемента. \en A type of element.
MbCreator & Duplicate( MbRegDuplicate * iReg = nullptr) const override; ///< \ru Сделать копию. \en Create a copy.
bool IsSame ( const MbCreator &, double accuracy) const override; ///< \ru Являются ли объекты равными? \en Determine whether an object is equal?
bool IsSimilar( const MbCreator & ) const override; ///< \ru Являются ли объекты подобными. \en Whether the objects are similar.
bool SetEqual ( const MbCreator & ) override; ///< \ru Сделать равным. \en Make equal.
void Transform( const MbMatrix3D &, MbRegTransform * = nullptr ) override; ///< \ru Преобразовать элемент согласно матрице. \en Transform element according to the matrix.
void Move ( const MbVector3D &, MbRegTransform * = nullptr ) override; ///< \ru Сдвиг. \en Translation.
void Rotate ( const MbAxis3D &, double angle, MbRegTransform * = nullptr ) override; ///< \ru Повернуть вокруг оси. \en Rotate about an axis.
MbePrompt GetPropertyName() override; ///< \ru Дать имя свойства объекта. \en Get the object property name.
void GetProperties ( MbProperties & ) override; ///< \ru Выдать свойства объекта. \en Get properties of the object.
void SetProperties ( const MbProperties & ) override; ///< \ru Записать свойства объекта. \en Set properties of the object.
bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray<MbSpaceItem> * items = nullptr ) override; ///< \ru Построить каркас по журналу построения \en Create an offset wire frame from the history tree.
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbOffsetWireFrameCreator )
}; // MbOffsetWireFrameCreator
IMPL_PERSISTENT_OPS( MbOffsetWireFrameCreator )
#endif // __CR_OFFSET_WIREFRAME_H
+20 -20
View File
@@ -84,10 +84,10 @@ private:
public:
/// \ru Конструктор. \en Constructor.
MbSplitData()
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -96,10 +96,10 @@ public:
}
/// \ru Конструктор по двумерному контуру в локальной системе координат. \en Constructor by two-dimensional contour in the local coordinate system.
MbSplitData( const MbPlacement3D & pl, MbeSenseValue dirSense, const MbContour & item, bool same )
: place ( pl )
: sketchContours( )
, place ( pl )
, direction ( )
, sense ( dirSense )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -111,10 +111,10 @@ public:
}
/// \ru Конструктор по двумерному контуру в локальной системе координат. \en Constructor by two-dimensional contour in the local coordinate system.
MbSplitData( const MbPlacement3D & pl, const MbVector3D & dir, const MbContour & item, bool same )
: place ( pl )
: sketchContours( )
, place ( pl )
, direction ( dir )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -129,10 +129,10 @@ public:
/// \ru Конструктор по двумерным контурам в локальной системе координат. \en Constructor by two-dimensional contours in the local coordinate system.
template <class PlaneContoursVector>
MbSplitData( const MbPlacement3D & pl, MbeSenseValue dirSense, const PlaneContoursVector & items, bool same )
: place ( pl )
: sketchContours( )
, place ( pl )
, direction ( )
, sense ( dirSense )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -143,10 +143,10 @@ public:
/// \ru Конструктор по двумерным контурам в локальной системе координат. \en Constructor by two-dimensional contours in the local coordinate system.
template <class PlaneContoursVector>
MbSplitData( const MbPlacement3D & pl, const MbVector3D & dir, const PlaneContoursVector & items, bool same )
: place ( pl )
: sketchContours( )
, place ( pl )
, direction ( dir )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -158,10 +158,10 @@ public:
}
/// \ru Конструктор по пространственным кривым. \en Constructor by spatial curves.
MbSplitData( const c3d::ConstSpaceCurvesSPtrVector & items, bool same )
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -171,10 +171,10 @@ public:
}
/// \ru Конструктор по пространственным кривым. \en Constructor by spatial curves.
MbSplitData( const c3d::ConstSpaceCurvesVector & items, bool same )
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -184,10 +184,10 @@ public:
}
/// \ru Конструктор по поверхности. \en Constructor by a surface.
MbSplitData( const MbSurface & item, bool same )
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -199,10 +199,10 @@ public:
}
/// \ru Конструктор по поверхностям. \en Constructor by surfaces.
MbSplitData( const c3d::ConstSurfacesSPtrVector & items, bool same )
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
@@ -212,10 +212,10 @@ public:
}
/// \ru Конструктор по поверхностям. \en Constructor by surfaces.
MbSplitData( const c3d::ConstSurfacesVector & items, bool same )
: place ( )
: sketchContours( )
, place ( )
, direction ( )
, sense ( orient_BOTH )
, sketchContours( )
, spaceCurves ( )
, surfaces ( )
, creators ( )
+2
View File
@@ -102,6 +102,8 @@ enum MbeCreatorType {
ct_UnwrapPointCreator = 220, ///< \ru Строитель развёрнутой точки. \en Constructor of the unwrapped point. \n
ct_WrapPointCreator = 221, ///< \ru Строитель свёрнутой точки. \en Constructor of the wrapped point. \n
ct_OffsetWireFrameCreator = 222, ///< \ru Строитель эквидистантного каркаса. \en Constructor of the offset wireframe. \n
// \ru Строители полигональных объектов. \en Creators of polygonal objects.
ct_SimpleMeshCreator = 400, ///< \ru Строитель полигонального объекта без истории. \en Constructor of a polygonal object without history.
ct_ReverseMeshCreator = 401, ///< \ru Строитель вывернутого полигонального объекта. \en Constructor of a reversed polygonal object.
+4 -4
View File
@@ -72,10 +72,10 @@ namespace c3d // namespace C3D
Кривая пересечения поверхностей используется для стыковки поверхностей или для описания ребра стыковки двух граней.
Кривая пересечения может описывать разные типы рёбер стыковки двух граней: \n
обычное ребро - поверхности разные, двумерные кривые разные,\n
ребро-шов - поверхность одина и та же, двумерные кривые разные не равные,\n
ребро-шов - поверхность одна и та же, двумерные кривые разные не равные,\n
Ребро-линия разъема - поверхности копии, двумерные кривые копии,\n
ребро-край - поверхность одина и та же, двумерная кривая одина и та же,\n
ребро-полюс - поверхность одина и та же, двумерные кривые копии.\n
ребро-край - поверхность одна и та же, двумерная кривая одна и та же,\n
ребро-полюс - поверхность одна и та же, двумерные кривые копии.\n
Если две двумерные кривые кривых на поверхности curveOne curveTwo являются контурами, то количество сегментов в них должно быть одинаковым.
\en Intersection curve of surfaces contains two curves on intersected surfaces -
curveOne and curveTwo, conformed to the next rules:\n
@@ -128,7 +128,7 @@ private :
{
SPtr<MbCurve3D> spaceCurve; ///< \ru Пространственная аппроксимационная кривая. \en The spatial approximating curve. \~
SpaceCurveAuxiliaryData() : spaceCurve( nullptr ) {}
SpaceCurveAuxiliaryData( const SpaceCurveAuxiliaryData & c ) : spaceCurve( nullptr ) {
SpaceCurveAuxiliaryData( const SpaceCurveAuxiliaryData & c ) : AuxiliaryData {}, spaceCurve( nullptr ) {
if ( c.spaceCurve != nullptr ) {
spaceCurve = static_cast<MbCurve3D *>( &c.spaceCurve->Duplicate() );
}
+1 -1
View File
@@ -53,7 +53,7 @@ protected:
public:
MbNurbsFunctionAuxiliaryData() : values(), pointsM(), weightM() {}
MbNurbsFunctionAuxiliaryData( const MbNurbsFunctionAuxiliaryData & ) : values(), pointsM(), weightM() {}
MbNurbsFunctionAuxiliaryData( const MbNurbsFunctionAuxiliaryData & ) : AuxiliaryData {}, values(), pointsM(), weightM() {}
virtual ~MbNurbsFunctionAuxiliaryData() {}
};
+1 -1
View File
@@ -21,7 +21,7 @@
#include <math_version.h>
#include <gce_types.h>
#include <gce_kompas_interface.h>
#include <gce_equations.h>
template <class Type> class SArray;
+111 -4
View File
@@ -337,6 +337,25 @@ GCE_FUNC(pattern_item) GCE_AddLinearPattern( GCE_system gSys, GCE_vec2d trans );
//---
GCE_FUNC(pattern_item) GCE_AddAngularPattern( GCE_system gSys, GCE_point point, double angle );
//----------------------------------------------------------------------------------------
/** \brief \ru Объявить составной паттерн по двум данным.
\en Declare a composition pattern of two patterns. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] pItem1 - \ru Первый паттерн.
\en The first pattern. \~
\param[in] pItem2 - \ru Второй паттерн.
\en The second patttern. \~
\return \ru Дескриптор зарегистрированного паттерна.
\en Descriptor of registered pattern. \~
\details \ru Метод создает паттерн - композицию двух паттернов.
\en The method creates an composition pattern defined by two patterns. \~
*/
//---
GCE_FUNC(pattern_item) GCE_AddCompositionPattern( GCE_system gSys, pattern_item pItem1, pattern_item pItem2 );
//----------------------------------------------------------------------------------------
/** \brief \ru Создать k-й экземпляр образца в данном паттерне.
\en Create k-th instance of the sample in a given pattern. \~
@@ -359,13 +378,38 @@ GCE_FUNC(pattern_item) GCE_AddAngularPattern( GCE_system gSys, GCE_point point,
//---
GCE_FUNC(geom_item) GCE_AddInstance( GCE_system gSys, pattern_item pItem, geom_item sample, int k );
//----------------------------------------------------------------------------------------
/** \brief \ru Создать (i, j) экземпляр образца в данном составном паттерне.
\en Create (i, j) instance of the sample in a given composition pattern. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] pItem - \ru Дескриптор паттерна.
\en Descriptor of pattern. \~
\param[in] sample - \ru Дескриптор образца.
\en Descriptor of sample. \~
\param[in] i - \ru Номер экземпляра.
\en Copy number. \~
\param[in] j - \ru Номер экземпляра.
\en Copy number. \~
\return \ru Дескриптор зарегистрированного экземпляра.
\en Descriptor of registered instance. \~
\details \ru Метод создает (i, j) экземпляр образца в данном составном паттерне.
При i = 0, j = 0 возвращает идентификатор образца.
\en The method creates the (i, j) instance of the sample in the given pattern.
It returns the sample descriptor if i = 0 and j = 0. \~
*/
//---
GCE_FUNC(geom_item) GCE_AddInstance( GCE_system gSys, pattern_item pItem, geom_item sample, int i, int j );
//----------------------------------------------------------------------------------------
/** \brief \ru Добавить в систему жёсткое множество геометрических объектов.
\en Add a rigid set of geometric objects to the system. \~
\details \ru Жёсткое множество - это массив геометрических объектов, зафиксированных друг относительно друга.
Жёсткое множество представляет собой геометрический объект, для которого доступен весь функционал
работы с геометрическими объектами. Например, у него можно спросить тип (#GCE_GeomType -> GCE_SET) или запросить
положение. С помощью вызовов #GCE_GetPoint и #GCE_GetCoordValue можно получить начало координат и направление оси OX
положение. С помощью вызовов #GCE_GetPointXY и #GCE_GetCoordValue можно получить начало координат и направление оси OX
ЛСК жёсткого множества. Чтобы удалить жёсткое множество, надо, как и для любого другого геометрического объекта,
вызвать функцию #GCE_RemoveGeom. При этом составляющие жёсткое множество объекты (geoms) при удалении жёсткого
множества не удаляются и могут далее быть использованы в решателе. С геометрическими объектами, образующими
@@ -375,7 +419,7 @@ GCE_FUNC(geom_item) GCE_AddInstance( GCE_system gSys, pattern_item pItem, geom_i
дескриптор самого геометрического объекта из массива geoms, на который накладывается ограничение.
\en A rigid set is an array of geometric objects which are fixed relative to each other. It is considered as a
geometric object and hence all the functionality for working with geometric objects is available for it. For
example, it's possible to request its type (#GCE_GeomType -> GCE_SET) or get its position invoking #GCE_GetPoint
example, it's possible to request its type (#GCE_GeomType -> GCE_SET) or get its position invoking #GCE_GetPointXY
and #GCE_GetCoordValue to get the origin and the direction of the OX axis of the LCS of the rigid set. To remove
a rigid set it's necessary to call the function #GCE_RemoveGeom. Geometric objects (geoms) are not deleted together
with a rigid set and can be used in the solver after it will be deleted. With geometric objects that have been
@@ -828,6 +872,21 @@ GCE_FUNC(geom_item) GCE_FixOffset( GCE_system gSys, geom_item curve );
//---
GCE_FUNC(bool) GCE_IsConstrainedGeom( GCE_system gSys, geom_item g );
//----------------------------------------------------------------------------------------
/** \brief \ru Определить смежные ли это ограничение и геометрический объект.
\en Determine whether the constraint and the geometric object are adjacent. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] g - \ru Дескриптор геометрического объекта.
\en Descriptor of geometric object. \~
\param[in] cItem - \ru Дескриптор ограничения.
\en Descriptor of constraint. \~
\return \ru true, если ограничение и геометрический объект смежные.
\en true if the constraint and the geometric object are adjacent. \~
*/
//---
GCE_FUNC(bool) GCE_IsAdjacentConstraint( GCE_system gSys, geom_item g, constraint_item cItem );
//----------------------------------------------------------------------------------------
/** \brief \ru Функция отвечает на вопрос: Имеется ли хотя бы один экземпляр паттерна?
\en The function answers the question: Is there an instance of the pattern? \~
@@ -1507,6 +1566,32 @@ GCE_FUNC(constraint_item) GCE_AddLength( GCE_system gSys, geom_item curve, GCE_d
//---
GCE_FUNC(constraint_item) GCE_AddPatterned( GCE_system gSys, pattern_item pItem, geom_item sample, geom_item instance, int k );
//----------------------------------------------------------------------------------------
/** \brief \ru Связать ограничением паттерна два геометрических объекта.
\en Bind two geometric objects by a pattern constraint. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] pItem1 - \ru Дескриптор первого паттерна.
\en Descriptor of first pattern. \~
\param[in] pItem2 - \ru Дескриптор второго паттерна.
\en Descriptor of second pattern. \~
\param[in] sample - \ru Дескриптор образца.
\en Descriptor of sample. \~
\param[in] instance - \ru Дескриптор экземпляра.
\en Descriptor of instance. \~
\param[in] i - \ru Номер экземпляра в первом паттерне.
\en Copy number in first pattern. \~
\param[in] j - \ru Номер экземпляра во втором паттерне.
\en Copy number in second pattern. \~
\return \ru Дескриптор зарегистрированного ограничения.
\en Descriptor of registered constrained. \~
\details \ru Метод связывает два объекта ограничением паттерна.
\en The method binds the two objects by a pattern constraint. \~
*/
//---
GCE_FUNC(constraint_item) GCE_AddPatterned( GCE_system gSys, pattern_item pItem, geom_item sample, geom_item instance, int i, int j );
//----------------------------------------------------------------------------------------
/** \brief \ru Задать ограничение "Управляющий параметр" или "Фиксация переменной"
\en Set the constraint "Driving parameter" or "Fixation of variable" \~
@@ -1825,6 +1910,30 @@ GCE_FUNC(constraint_item) GCE_AddDirectedDistance( GCE_system gSys, geom_item p[
GCE_FUNC(constraint_item) GCE_AddLinearEquation( GCE_system gSys, const double * a
, const var_item * v, size_t n, double c );
//----------------------------------------------------------------------------------------
/** \brief \ru Задать ориентацию касания.
\en Set the tangent orientation.
\param[in] \ru gSys Система ограничений.
\en gSys System of constraints. \~
\param[in] \ru constraint Дескриптор ограничения.
\en constraint Constraint's descriptor. \~
\param[in] \ru alignment Опция выравнивания касания кривых.
\en alignment Curve tangency alignment option. \~
\return \ru В случае успешного вызова функция вернет новое значение выравнивания, заданного вызовом.
\en If the call is successful, the function will return the new alignment value specified by the call. \~
\details
\ru В настоящее время функция применяется к ограничению касания (GCE_TANGENT). Данный вызов устанавливает
сонаправленность или противонаправленность касательных (GCE_COORIENTED, GCE_OPPOSITE),
либо делает выбор автоматически, если задать опцию GCE_AUTO_ALIGNMENT. Когда выбрана опцию GCE_CLOSEST,
солвер будет поддерживать взаимную ориентацию согласно текущего размещения геометрии.
\en The function currently applies to the tangency constraint (GCE_TANGENT). The call sets whether
the direction of the geometry tangents are cooriented/opposite or makes the selection automatically
if you set the GCE_AUTO_ALIGNMENT option. When the option GCE_CLOSEST is selected the C3D Solver
should maintain the current geometry positions. \~
*/
//---
GCE_FUNC(GCE_alignment) GCE_SetAlignment( GCE_system gSys, constraint_item constraint, GCE_alignment alignment = GCE_AUTO_ALIGNMENT );
//----------------------------------------------------------------------------------------
/** \brief \ru Изменить значение управляющего размера.
\en Change the value of driving dimension. \~
@@ -2126,8 +2235,6 @@ GCE_FUNC(GCE_result) GCE_Transform( GCE_system gSys, const MbMatrix & mat );
//---
GCE_FUNC(bool) GCE_SetJournal( GCE_system gSys, const char * fName );
#define FB_NULL_GEOM 0
//----------------------------------------------------------------------------------------
/**
\brief \ru Устаревшая функция. Вызов будет удален в одной из следующих версий.
+131
View File
@@ -0,0 +1,131 @@
//////////////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Нелинейные уравнения и неравенства, определяемые на стороне Приложения.
\en Nonlinear equations and inequations defined by the application. \~
*/
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GCE_EQUATIONS_H
#define __GCE_EQUATIONS_H
#include <mt_ref_item.h>
#include "gce_geom.h"
class MtVectorN;
template <class Type> class RPArray;
//----------------------------------------------------------------------------------------
/** \brief \ru Интерфейс численного уравнения, выраженного через набор координат.
\en Interface of the numeric equation expressed via a set of coordinates.
\details \ru Как правило, это алгебраические уравнение общего вида f(x1,x2,..,xn) = g(x1,x2,..,xn)
явно-выраженной форме: x1 = g(x2,x3,..,xn).
\en As a rule, it is an algebraic equation of a general form f(x1,x2,..,xn) = g(x1,x2,..,xn)
or, as a special case, it is an equation in explicit form: x1 = g(x2,x3,..,xn). \~
*/
//---
struct GCE_CLASS ItNumericEquation
{
enum eval_result_code: char
{
EVAL_RESULT_Undefined = 0,
EVAL_RESULT_Ok,
EVAL_RESULT_OutOfDomaint
};
struct eval_result
{
eval_result_code resCode = EVAL_RESULT_Undefined;
double funDer = MB_MAXDOUBLE; // Derivative value.
double funVal = MB_MAXDOUBLE; // Function value.
};
/// \ru Выдать координату с индексом crdIdx. \en Get coordinate with crdIdx index.
virtual ItCoord* Coord( size_t crdIdx ) const = 0;
/// \ru Количество координат, связанных с уравнением. \en Count of coordinates connected with the equation.
virtual size_t NumCoords() const = 0;
/// \ru Вычисление первой производной по координате и значений функции. \en The first derivative by coordinate and the function values calculation.
virtual eval_result Evaluate(const ItCoord* crd, const std::vector<double>& crdVals) const;
/// \ru Выдать координату зависимой переменной (для уравнений заданных в явно-выраженной форме). \en Get the coordinate of dependent variable (for explicit equations).
virtual const ItCoord* DependedCoord() const = 0;
/** \brief \ru Признак уравнения, заданного в форме присвоения (начиная с Компас V12).
\en Flag of equation specified in form of assignment.
\details
\ru Уравнения, заданные в явно выраженной форме, считающиеся присвоением выражения зависимой переменной: x1 = g(x2,x3,..,xn).
Такие уравнения стремимся вычислять иерархическим способом, сверху-вниз.
\en Equations specified explicitly, considered to be the assignment of dependent variable: x1 = g(x2,x3,..,xn).
It is preferred to compute such equations by hierarchical top-down method. \~
*/
virtual bool IsExplicit() const = 0;
public:
virtual refcount_t AddRef() const = 0;
virtual refcount_t Release() const = 0;
private:
// It will be removed
virtual bool CalcDerive( ItGeomCoord &, const MtVectorN &, double &, double & ) const { return false; }
// It will be removed.
virtual ItGeomCoord * GetCoord( ptrdiff_t ) const { return nullptr; }
// It will be removed.
virtual bool CalcDerive( ItGeomCoord &, const std::vector<double> & /*argLine*/, double & /*fd*/, double & /*f*/ ) const { return false; }
// It will be removed.
virtual ptrdiff_t GetCoordCount() const { return 0; }
// It will be removed.
virtual ptrdiff_t GetDependedCoordIdx() const { return -1; }
protected:
~ItNumericEquation() {}
};
//----------------------------------------------------------------------------------------
/** \brief \ru Вычисление первой производной по координате и значений функции.
\en The first derivative by coordinate and the function values calculation.
*/
//---
inline ItNumericEquation::eval_result ItNumericEquation::Evaluate(const ItCoord* crd, const std::vector<double>& crdVals) const
{
eval_result res;
ItGeomCoord * gCrd = dynamic_cast<ItGeomCoord*>(const_cast<ItCoord*>(crd));
if ( gCrd!=nullptr && CalcDerive(*gCrd, crdVals, res.funDer, res.funVal))
{
res.resCode = EVAL_RESULT_Ok;
}
return res;
}
using ItAlgebraicConstraint = ItNumericEquation;
/**
\addtogroup Constraints2D_API
\{
*/
//----------------------------------------------------------------------------------------
/** \brief \ru Задать ограничение, реализуемое на стороне клиента.
\en Specify a constraint implemented by the user. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] iEqu - \ru Интерфейс уравнения, заданного пользователем.
\en Interface of the equation specified by the user. \~
\param[in] varsCount - \ru Количество переменных.
\en Count of variables. \~
\param[in] varsVector - \ru Вектор переменных.
\en Vector of variables. \~
\return \ru Дескриптор нового ограничения.
\en Descriptor of a new constraint. \~
*/
// ---
GCE_FUNC(constraint_item) GCE_AddEquation( GCE_system gSys
, ItAlgebraicConstraint & iEqu
, size_t varsCount
, const var_item * varsVector );
/**
\}
Constraints2D_API
*/
#endif // __GCE_EQUATIONS_H
// eof
+25
View File
@@ -0,0 +1,25 @@
//////////////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru API процедур и функций 2D решателя.
\en API of procedures and functions of 2D solver. \~
*/
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GCE_ROUTINES_H
#define __GCE_ROUTINES_H
/**
\addtogroup Constraints2D_API
\{
*/
/**
\}
Constraints2D_API
*/
#endif // __GCE_ROUTINES_H
// eof
+33 -4
View File
@@ -76,7 +76,7 @@ const pattern_item GCE_NULL_P = GCE_NULL;
const double GCE_UNDEFINED_DBL = UNDEFINED_DBL;
//----------------------------------------------------------------------------------------
/// \ru Словарь типов геометрических примитивов. \en Dictionary of geometric primitives types.
/// \ru Словарь геометрических типов данных. \en Dictionary of а geometric data types.
//---
typedef enum
{
@@ -363,6 +363,34 @@ typedef enum
} GCE_bisec_variant;
//----------------------------------------------------------------------------------------
/** \brief \ru Варианты выравнивания направлений.
\en Variants of alignment. \~
\details \en Значение опции выравнивания используется для выбора из альтернативных решений
ограничения, такого как `GCE_TANGENT`.
\en The alignment value is used to alternate between solutions of a constraint such as `GCE_TANGENT`.
\note \ru Значения этого перечисления могут быть использованы для постоянного хранения и
останутся неизменными в следующих версиях.
\en Values of this enum can be used for permanent storage and will be kept
in the future versions. \~
*/
//---
typedef enum
{
GCE_NO_ALIGNMENT = 0, ///< \ru Неопределенное значение выравнивания (=не применима к данному ограничению). \en Undefined alignment value (=not applicable to this constraint).
GCE_COORIENTED, ///< \ru Для касания это сонаправленные касательные вектора (=нормали). \en For tangency, these are co-directional tangent vectors (=normal).
GCE_OPPOSITE, ///< \ru Для касания это противонаправленные касательные вектора (=нормали). \en For tangency, these are the opposing tangent vectors (=normal).
/** \brief \ru Поддерживать способ выравнивания согласно начальному или текущему положению геометрии (соответствует поведению прежних версий).
\en Maintain the alignment according to the initial or current position of the geometry (reproduces behaviour from previous versions). \~ */
GCE_CLOSEST,
/** \brief \ru Автоматически выбрать опцию выравнивания, используя начальное приближение геометрии.
\en Automatically determine alignment options using initial geometry approximation. \~ */
GCE_AUTO_ALIGNMENT,
} GCE_alignment;
//----------------------------------------------------------------------------------------
/// \ru Координаты вектора. \en Vector coordinates.
@@ -380,7 +408,7 @@ struct GCE_CLASS GCE_vecNd
{
size_t size;
double * arg;
GCE_vecNd(): arg(0), size(0) {}
GCE_vecNd(): size(0), arg(0) {}
};
//----------------------------------------------------------------------------------------
@@ -568,8 +596,9 @@ struct GCE_CLASS GCE_dim_pars
double dimValue; ///< \ru Значение размера, когда var == GCE_NULL_V. \en Value of dimension when var == GCE_NULL_V.
GCE_dim_pars()
: dimValue( 0.0 )
, var( GCE_NULL_V )
: var( GCE_NULL_V )
, dimValue( 0.0 )
{}
};
+26
View File
@@ -1134,6 +1134,32 @@ GCM_FUNC(GCM_geom) GCM_GetMovingGeom( GCM_system gSys );
GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom g,
const MbPlacement3D & newPos, GCM_reposition movType );
//----------------------------------------------------------------------------------------
/**
\brief \ru Решить систему для произвольного изменения положения тела в заданной плоскости.
\en Solve the system for an arbitrary change of position of one solid in a given plane.
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] movGeom - \ru Компонент, деталь, которой манипулируют.
\en Component, part which is manipulated. \~
\param[in] projPlane - \ru Нормаль к плоскости, в которой происходит перетаскивание, заданная в ГСК сборки.
\en The normal to the plane in which the dragging occurs, specified in the assembly WCS. \~
\param[in] cursor - \ru Текущее положение курсора в ГСК..
\en Current position of a cursor in the WCS. \~
\return \ru Код результата. \en Result code. \~
\details
\ru Процедура, управляющая режимом перетаскивания. При использовании данной функции не требуется предварительно
делать соответствующий ей вызов GCM_PrepareReposition, а так же не требуется вызывать GCM_FinishReposition
по окончании её использования.
\en The procedure that controls the drag and drop mode. When using this function, there is no need to make
a preliminary invoke of GCM_PrepareReposition, and there is no need to invoke GCM_FinishReposition
after using it. \~
*/
//---
GCM_FUNC(GCM_result) GCM_SolveReposition( GCM_system gSys, GCM_geom moveGeom, const MbCartPoint3D & cursor,
const MbVector3D & projPlane );
/**
\brief \ru Решить систему сопряжений для новой позиции курсора в режиме драггинга.
\en Solve the system of constraints for new position of cursor in the dragging mode.
+5 -5
View File
@@ -88,12 +88,12 @@ public:
static const MtParVariant undef; ///< \ru Неопределенное значение. \en Undefined value.
public:
MtParVariant() : tag( GCM_ARG_UNDEFINED ), enumVal( SYS_MAX_INT64-2 ) {} // \ru Неопределенное значение \en Undefined value
MtParVariant( float val ) : tag( GCM_ARG_NUMBER ), numVal( static_cast<double>(val) ) {}
MtParVariant( double val ) : tag( GCM_ARG_NUMBER ), numVal( val ) {}
MtParVariant() : enumVal( SYS_MAX_INT64-2 ), tag( GCM_ARG_UNDEFINED ) {} // \ru Неопределенное значение \en Undefined value
MtParVariant( float val ) : numVal( static_cast<double>(val) ), tag( GCM_ARG_NUMBER ) {}
MtParVariant( double val ) : numVal( val ), tag( GCM_ARG_NUMBER ) {}
template< class _EnumType >
MtParVariant( _EnumType val ) : tag( GCM_ARG_ENUM ), enumVal( static_cast<ptrdiff_t>(val) ) {}
MtParVariant( const GCM_interval & interval ) : tag( GCM_ARG_INTERVAL ), interVal( interval ) {}
MtParVariant( _EnumType val ) : enumVal( static_cast<ptrdiff_t>(val) ), tag( GCM_ARG_ENUM ) {}
MtParVariant( const GCM_interval & interval ) : interVal( interval ), tag( GCM_ARG_INTERVAL ) {}
public:
template< typename _EnumType >
+5 -5
View File
@@ -32,13 +32,13 @@ struct GCM_CLASS TMParameters
double realpar; // Dimension value.
TMParameters( AlignCondition al, MtMateType mtype, double par = 0. )
: align ( al )
, matetype( mtype )
: matetype( mtype )
, align ( al )
, realpar ( par )
{}
TMParameters( GCM_c_type mtype, double par = 0.0, GCM_alignment al = GCM_NO_ALIGNMENT )
: align ( al )
, matetype( mtype )
: matetype( mtype )
, align ( al )
, realpar ( par )
{}
};
@@ -267,7 +267,7 @@ private:
MtGeomSolver & manager; ///< \ru Решатель сборки. \en Solver of the assembly.
public:
explicit AssemblyGenerator( MtGeomSolver & m ) : manager( m ), dimConstrs() {}
explicit AssemblyGenerator( MtGeomSolver & m ) : dimConstrs(), manager( m ) {}
private:
AssemblyGenerator( const AssemblyGenerator & );
+4 -4
View File
@@ -77,8 +77,8 @@ struct GCM_CLASS MtMateParameters
public:
MtMateParameters()
: myAlignVal( GCM_NO_ALIGNMENT )
, myDimVal( 0.0 )
: myDimVal( 0.0 )
, myAlignVal( GCM_NO_ALIGNMENT )
, myDimEvaluated( false )
, myDimSigned( false )
{}
@@ -154,9 +154,9 @@ struct GCM_CLASS MtADimensionTraits
double value; ///< \ru Значение размера - угол вращения. \en Dimension value - the angle of rotation.
MtADimensionTraits()
: axisZ()
, firstVector()
: firstVector()
, secondVector()
, axisZ()
, value( 0.0 )
{}
};
+13 -11
View File
@@ -339,18 +339,19 @@ typedef enum
/*
Произвольное поведение (arbitrary behavior).
*/
GCM_REPOSITION_FreeRotation ///< \ru Произвольная репозиция с преимуществом вращения. \en Arbitrary reposition with predominant rotation. \~
, GCM_REPOSITION_FreeMoving ///< \ru Произвольная репозиция с преимуществом перемещения. \en Arbitrary reposition with predominant moving. \~
GCM_REPOSITION_FreeRotation = 1 ///< \ru Произвольная репозиция с преимуществом вращения. \en Arbitrary reposition with predominant rotation. \~
, GCM_REPOSITION_FreeMoving = 2 ///< \ru Произвольная репозиция с преимуществом перемещения. \en Arbitrary reposition with predominant moving. \~
/*
Строгое поведение (strict behavior).
*/
, GCM_REPOSITION_Dragging ///< \ru Перетаскивание в плоскости "экрана". \en Dragging in the plane of the screen. \~
, GCM_REPOSITION_Rotation ///< \ru Вращение вокруг неподвижной оси. \en Rotation around fixed axis. \~
, GCM_REPOSITION_Transfer /**< \ru Перенос только для одного твердого тела. \en Shift only one solid. \~
, GCM_REPOSITION_Dragging = 3///< \ru Перетаскивание в плоскости "экрана". \en Dragging in the plane of the screen. \~
, GCM_REPOSITION_Rotation = 4///< \ru Вращение вокруг неподвижной оси. \en Rotation around fixed axis. \~
, GCM_REPOSITION_Transfer = 5/**< \ru Перенос только для одного твердого тела. \en Shift only one solid. \~
\note \ru Этот режим #GCM_REPOSITION_Transfer был задуман для процессов вставки нового тела в сборку САПР.
\en This mode #GCM_REPOSITION_Transfer have been intended for insertion processes of a new solid in the CAD assembly. \~
*/
, GCM_REPOSITION_Inactive = 1000
} GCM_reposition;
//----------------------------------------------------------------------------------------
@@ -421,19 +422,20 @@ typedef enum
\note Internal use only. The feature is under development.
*/
//---
typedef struct
struct GCM_CLASS GCM_dof_record
{
GCM_dof_result result; ///< \ru Код результата вычисления степени свободы геометрического объекта. \en Resulting code of evaluating the geometric degrees of freedom. \~
/// \ru Код результата вычисления степени свободы геометрического объекта. \en Resulting code of evaluating the geometric degrees of freedom. \~
GCM_dof_result result;
// Translational degree of freedom info.
size_t tdof;
size_t tdof;
GCM_vec3d dir1;
GCM_vec3d dir2;
// Rotational degree of freedom info.
size_t rdof;
GCM_point center;
GCM_vec3d axis1;
GCM_vec3d axis2;
} GCM_dof_record;
GCM_vec3d axis1 ;
GCM_vec3d axis2 ;
};
//----------------------------------------------------------------------------------------
/** \brief \ru Статус геометрического объекта.
+2 -1
View File
@@ -181,7 +181,8 @@ public:
{}
/// \ru Конструктор копирования с регистратором. \en Copy-constructor with the registrator.
MbLumpCube( const MbLumpCube & other )
: cube( other.cube )
: MbRefItem {}
, cube( other.cube )
, from( other.from )
, component( other.component )
, identifier( other.identifier )
+2 -2
View File
@@ -209,8 +209,8 @@ public:
: component ( _comp )
, identifier( _ident )
, solid ( _solid )
, name ( &_name )
, from ( _from )
, name ( &_name )
, wtCurves ( 0, 1, true )
{
name.SetOwn(false);
@@ -231,8 +231,8 @@ public:
: component ( _comp )
, identifier( _ident )
, solid ( nullptr )
, name ( &_name )
, from ( )
, name ( &_name )
, wtCurves ( 0, 1, true )
{
name.SetOwn(false);
+2
View File
@@ -97,10 +97,12 @@
#define MATH_22_HF3_VERSION 0x16000004L ///< \ru Версия файла - 22.0 HF3. \en The file version - 22.0 HF3. \~ \ingroup Base_Tools
#define MATH_22_HF4_VERSION 0x16000005L ///< \ru Версия файла - 22.0 HF4. \en The file version - 22.0 HF4. \~ \ingroup Base_Tools
#define MATH_22_HF5_VERSION 0x16000006L ///< \ru Версия файла - 22.0 HF5. \en The file version - 22.0 HF5. \~ \ingroup Base_Tools
#define MATH_22_HF6_VERSION 0x16000007L ///< \ru Версия файла - 22.0 HF6. \en The file version - 22.0 HF6. \~ \ingroup Base_Tools
#define MATH_22_UHF_VERSION 0x16000011L ///< \ru Версия файла - 22.0 UHF (Upper Hot Fix). \en The file version - 22.0 UHF (Upper Hot Fix). \~ \ingroup Base_Tools
#define C3D_2023_VERSION 0x16001001L ///< \ru Версия файла - C3D 2023. \en The file version - C3D 2023. \~ \ingroup Base_Tools
#define MATH_23_VERSION 0x17000001L ///< \ru Версия файла - 23.0. \en The file version - 23.0. \~ \ingroup Base_Tools
#define MATH_23_HF1_VERSION 0x17000003L ///< \ru Версия файла - 23.0 HF1. \en The file version - 23.0 HF1. \~ \ingroup Base_Tools
#define MATH_23_HF2_VERSION 0x17000004L ///< \ru Версия файла - 23.0 HF2. \en The file version - 23.0 HF2. \~ \ingroup Base_Tools
#define MATH_23_UHF_VERSION 0x17000101L ///< \ru Версия файла - 23.0 UHF (Upper Hot Fix). \en The file version - 23.0 UHF (Upper Hot Fix). \~ \ingroup Base_Tools
#define C3D_2024_VERSION 0x17001002L ///< \ru Версия файла - C3D 2024. \en The file version - C3D 2024. \~ \ingroup Base_Tools
+1 -1
View File
@@ -93,7 +93,7 @@ namespace c3d {
#define CONCAT_TKNS(A, B, C, D) A B C D // Concatenate tokens without expanding macro (if invoked from macro, arguments are expanded).
#define CONCAT_TOKENS(A, B, C, D) CONCAT_TKNS(A, B, C, D) // Concatenate tokens with expanding macro.
#define DEPR_MSG "This is a deprecated API that will be removed in version 2024!" // Message about a deprecated API.
#define DEPR_MSG "This is a deprecated API that will be removed in version 2025!" // Message about a deprecated API.
#define DEPR_MSG_EX(msg) CONCAT_TOKENS(DEPR_MSG, " Use ", #msg, " instead it.") // Message about a deprecated API indicating a replacement API.
+4 -4
View File
@@ -131,12 +131,12 @@ MbPntMatingData<Vector>::MbPntMatingData( const MbeMatingType nType,
bool nMovePnts,
bool nAttach )
: MbRefItem ( )
, type ( nType )
, tangent ( (nTang != nullptr) ? new Vector( *nTang ) : nullptr )
, tangentDer1 ( (nTangDer1 != nullptr) ? new Vector( *nTangDer1 ) : nullptr )
, tangentDer2 ( (nTangDer2 != nullptr) ? new Vector( *nTangDer2 ) : nullptr )
, movePnts ( nMovePnts )
, changedPnts ( nChangedPnts )
, type ( nType )
, movePnts ( nMovePnts )
, attach ( nAttach )
{
if ( type <= trt_Position ) { // BUG_52162
@@ -153,12 +153,12 @@ MbPntMatingData<Vector>::MbPntMatingData( const MbeMatingType nType,
template <class Vector>
MbPntMatingData<Vector>::MbPntMatingData( const MbPntMatingData<Vector> & d )
: MbRefItem ( )
, type ( d.type )
, tangent ( (d.tangent != nullptr) ? new Vector( *d.tangent ) : nullptr )
, tangentDer1 ( (d.tangentDer1 != nullptr) ? new Vector( *d.tangentDer1 ) : nullptr )
, tangentDer2 ( (d.tangentDer2 != nullptr) ? new Vector( *d.tangentDer2 ) : nullptr )
, movePnts ( d.movePnts )
, changedPnts ( d.changedPnts )
, type ( d.type )
, movePnts ( d.movePnts )
, attach ( d.attach )
{
}
+4
View File
@@ -181,6 +181,7 @@ enum MbePrompt
IDS_ITEM_0274, ///< \ru Усеченный каркас. \en Trimmed wire frame.
IDS_ITEM_0275, ///< \ru Развернутая точка. \en Unwrapped point.
IDS_ITEM_0276, ///< \ru Свёрнутая точка. \en Wrapped point.
IDS_ITEM_0277, ///< \ru Эквидистантный каркас. \en Offset wire frame.
// \ru Типы параметрических поверхностей. \en Types of parametric surfaces.
@@ -202,6 +203,7 @@ enum MbePrompt
IDS_ITEM_0315, ///< \ru Конически согнутая поверхность. \en Conically Bent Surface.
IDS_ITEM_0316, ///< \ru Конически разогнутая поверхность. \en Conically Unbent Surface.
IDS_ITEM_0317, ///< \ru Поверхность заметания с изменением образующей. \en Sweep Surface with Changin Generatin.
IDS_ITEM_0318, ///< \ru Линейчато согнутая/разогнутая поверхность. \en Ruled Bent/Unbent Surface.
IDS_ITEM_0319, ///< \ru Плоскость. \en Plane.
IDS_ITEM_0320, ///< \ru Сферическая поверхность. \en Spherical Surface.
IDS_ITEM_0321, ///< \ru Тороидальная поверхность. \en Toroidal Surface.
@@ -1341,6 +1343,8 @@ enum MbePrompt
IDS_PROP_2033, ///< \ru Индекс части скругления. \en Index of fillet part.
IDS_PROP_2034, ///< \ru Опция выбора результата. \en Option for the result selection.
IDS_PROP_2035, ///< \ru Режим адаптации. \en Adaptation mode.
IDS_PROP_LAST = 9999, ///< \ru Наибольшее значение. \en The greatest value.
};
+2 -2
View File
@@ -182,11 +182,11 @@ private:
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbApproxNurbsParameters( VERSION version = Math::DefaultMathVersion() )
: _order ( c3d::NURBS_DEGREE )
: _bClosed ( false )
, _order ( c3d::NURBS_DEGREE )
, _methodSmoothing( sm_CurvatureVariance )
, _coefSmoothing ( -1. )
, _tolerance ( c3d::DELTA_MIN )
, _bClosed ( false )
, _pReference ( nullptr )
, _version ( version )
{}
+1 -1
View File
@@ -623,7 +623,7 @@ MATH_FUNC(const char *) C3DFileNameOnly( const char * path );
// Suppress a warning "unreferenced formal parameter"
#define C3D_UNUSED_PARAMETER( param ) (void*)(&param)
#define C3D_UNUSED_PARAMETER( param ) (std::ignore = param)
#ifdef C3D_DEBUG
+16 -4
View File
@@ -22,11 +22,13 @@ class MbHalfedge;
#define SIMPLE_FACET_ATTRIBUTE(type, value, nameAttr, typeAttr) \
class MATH_CLASS nameAttr : public MbHalfedgeAttrSimpleValueFacetBase<type>\
{\
private:\
const type _def = value;\
public:\
nameAttr( const MbHalfedge & topo ) : MbHalfedgeAttrSimpleValueFacetBase<type>( topo, typeAttr ) {}\
virtual ~nameAttr() {}\
static MbeTypeAttr IsA() { return typeAttr; }\
type DefaultValue() const override { return value; }\
const type& DefaultValue() const override { return _def; }\
HALFEDGE_VISITING();\
DECLARE_PERSISTENT_CLASS( nameAttr );\
};
@@ -35,11 +37,13 @@ class MbHalfedge;
#define SIMPLE_EDGE_ATTRIBUTE(type, value, nameAttr, typeAttr) \
class MATH_CLASS nameAttr : public MbHalfedgeAttrSimpleValueEdgeBase<type>\
{\
private:\
const type _def = value;\
public:\
nameAttr( const MbHalfedge & topo ) : MbHalfedgeAttrSimpleValueEdgeBase<type>( topo, typeAttr ) {}\
virtual ~nameAttr() {}\
static MbeTypeAttr IsA() { return typeAttr; }\
type DefaultValue() const override { return value; }\
const type& DefaultValue() const override { return _def; }\
HALFEDGE_VISITING();\
DECLARE_PERSISTENT_CLASS( nameAttr );\
};
@@ -48,11 +52,13 @@ class MbHalfedge;
#define SIMPLE_VERTEX_ATTRIBUTE(type, value, nameAttr, typeAttr) \
class MATH_CLASS nameAttr : public MbHalfedgeAttrSimpleValueVertexBase<type>\
{\
private:\
const type _def = value;\
public:\
nameAttr( const MbHalfedge & topo ) : MbHalfedgeAttrSimpleValueVertexBase<type>( topo, typeAttr ) {}\
virtual ~nameAttr() {}\
static MbeTypeAttr IsA() { return typeAttr; }\
type DefaultValue() const override { return value; }\
const type& DefaultValue() const override { return _def; }\
HALFEDGE_VISITING();\
DECLARE_PERSISTENT_CLASS( nameAttr );\
};
@@ -105,6 +111,8 @@ public:
bool CalculateEdgePoint( size_t iEd, double prm, MbCartPoint3D & pt ) const;
/// \ru Получить 3Д вершины для последовательности ребер. \en Get 3D points for all vertices in the edges chain.
bool GetEdgePathVertices( const c3d::IndicesVector & edges, c3d::SpacePointsVector & points ) const;
/// \ru Получить 3Д вершины для последовательности ребер. \en Get 3D points for all vertices in the edges chain.
bool GetEdgePathVertices( const c3d::IndicesPairsVector & edges, c3d::SpacePointsVector & points ) const;
/// \ru Посчитать нормаль треугольного фасета. \en Calculate the normal for the triangle facet.
bool CalculateTriangleNormal( size_t iTr, MbVector3D & normal ) const;
/// \ru Посчитать aspect ratio треугольного фасета. \en Calculate aspect ratio for the triangle facet.
@@ -123,8 +131,10 @@ public:
bool CalculateLengthEdge( size_t iEd, double & len ) const;
/// \ru Посчитать квадрат длины ребра. \en Calculate the square of the edge's length.
bool CalculateLengthEdge2( size_t iEd, double & len2 ) const;
// \ru Рассчитать габарит в локальной системы координат. \en Calculate the bounding box int the given coordinate system.
// \ru Рассчитать габарит в локальной системе координат. \en Calculate the bounding box int the given coordinate system.
void CalculateLocalGabarit( const MbMatrix3D & matrInto, MbCube & localCube ) const;
// \ru Рассчитать габарит фасета в локальной системе координат. \en Calculate the facet's bounding box int the given coordinate system.
void CalculateFacetLocalGabarit( const MbMatrix3D & matrInto, size_t iF, MbCube & localCube ) const;
// \ru Рассчитать уравнение плоскости треугольного фасета. \en Calculate the plane where the given triangle facet is located.
bool GetTrianglePlaneEquation( size_t iTr, bool bNormalize, std::array<double, 4> & plane ) const;
// \ru Рассчитать нормаль в вершине усреднением нормалей соседних треугольных фасетов. \en Calculate the normal at a vertex as the average normal of all triangle facets around it.
@@ -192,6 +202,8 @@ public:
bool CalculateLengthEdge2( size_t iEd, double & len2 ) const;
/// \ru Получить параметры для последовательности ребер. \en Get 2D parameters for all vertices in the edges chain.
bool GetEdgePathVertices( const c3d::IndicesVector & edges, c3d::ParamPointsVector & points ) const;
/// \ru Получить параметры для последовательности ребер. \en Get 2D parameters for all vertices in the edges chain.
bool GetEdgePathVertices( const c3d::IndicesPairsVector & edges, c3d::ParamPointsVector & points ) const;
/// \ru Рассчитать габаритный прямоугольник. \en Calculate the bounding rect.
void CalculateRect( MbRect & rect ) const;
+8 -2
View File
@@ -121,6 +121,8 @@ public:
void SetId( size_t id ) { _id = id; }
/// \ru Получить индекс. \en Get identifier.
size_t GetId() const { return _id; }
/// \ru Получить топологию. \en GetTopology.
const MbHalfedge & GetTopo() const { return *_topo; }
/// \ru Принять посетителя. \en Accept Visitor
virtual void Accept( HalfedgeVisitor & visitor ) = 0;
@@ -179,7 +181,7 @@ const T * CastHalfedgeAttribute( const MbHalfedgeAttrBase * pObj )
\ingroup Data_Structures
*/
// ---
template<class Value>
template<typename Value>
class MbHalfedgeAttrSimpleValueBase : public MbHalfedgeAttrBase
{
protected:
@@ -192,7 +194,7 @@ public:
virtual ~MbHalfedgeAttrSimpleValueBase() {}
/// \ru Получить значение по умолчанию. \en Get default value.
virtual Value DefaultValue() const = 0;
virtual const Value & DefaultValue() const = 0;
/// \ru Установить размер массива величин, заполнить его значением по умолчанию. \en Set size of the values array filled with default values.
void SetSize( size_t size ) { _values.assign( size, DefaultValue() ); }
/// \ru Получить размер массива величин. \en Get size of the values array.
@@ -200,7 +202,11 @@ public:
/// \ru Определено ли значение элемента. \en Check if value is undefined (default).
virtual bool IsUndefined( size_t i ) const { return _values[i] == DefaultValue(); }
/// \ru Получить значение элемента. \en Get value by identifier.
template<typename T = Value, typename = typename std::enable_if< std::is_fundamental<T>::value >::type>
Value GetValue( size_t i ) const { return _values[i]; }
/// \ru Получить значение элемента. \en Get value by identifier.
template<typename T = Value, typename = typename std::enable_if< !std::is_fundamental<T>::value >::type>
const Value & GetValue( size_t i ) const { return _values[i]; }
/// \ru Установить значение элемента в указанную величину. \en Set value to the element given by identifier.
void SetValue( size_t i, Value val ) { _values[i] = val; }
/// \ru Установить значение набора элементов в указанную величину. \en Set value to the set of elements.
+107 -51
View File
@@ -161,12 +161,12 @@ public:
const MbVector3D & dir )
: _uv1beg ( uv1beg )
, _uv1end ( uv1end )
, _ext1 ( ext1 )
, _uv2beg ( uv2beg )
, _uv2end ( uv2end )
, _ext2 ( ext2 )
, _direction ( dir )
, _guideCurve ( nullptr )
, _ext1 ( ext1 )
, _ext2 ( ext2 )
, _useRedetermination ( false )
, _checkPoles ( false )
{}
@@ -205,11 +205,11 @@ public:
bool checkPoles )
: _uv1beg ( uv1beg )
, _uv1end ( uv1end )
, _ext1 ( ext1 )
, _uv2beg ( uv2beg )
, _uv2end ( uv2end )
, _ext2 ( ext2 )
, _guideCurve ( guideCurve )
, _ext1 ( ext1 )
, _ext2 ( ext2 )
, _useRedetermination ( useRedetermination )
, _checkPoles ( checkPoles )
{}
@@ -287,8 +287,8 @@ public:
MbIntCurveParams( const MbSNameMaker & snMaker )
: mergeCurves( true )
, cutCurves ( false )
, _snMaker ( &snMaker.Duplicate() )
, _type ( ict_General )
, _snMaker ( &snMaker.Duplicate() )
{
if ( snMaker.GetMathVersion() > MATH_19_VERSION ) // KOMPAS-39273 + KOMPAS-40408
cutCurves = true;
@@ -305,8 +305,8 @@ public:
MbIntCurveParams( bool _cutCurves, const MbSNameMaker & snMaker )
: mergeCurves( true )
, cutCurves ( _cutCurves )
, _snMaker ( &snMaker.Duplicate() )
, _type ( ict_General )
, _snMaker ( &snMaker.Duplicate() )
{}
/** \brief \ru Конструктор.
\en Constructor. \~
@@ -322,8 +322,8 @@ public:
MbIntCurveParams( bool _mergeCurves, bool _cutCurves, const MbSNameMaker & snMaker )
: mergeCurves( _mergeCurves )
, cutCurves ( _cutCurves )
, _snMaker ( &snMaker.Duplicate() )
, _type ( ict_General )
, _snMaker ( &snMaker.Duplicate() )
{}
/** \brief \ru Конструктор.
@@ -349,12 +349,12 @@ public:
const MbCartPoint & uvInitOnSurface2,
const MbVector3D & initDirection,
const MbSNameMaker & nameMaker )
: _values ( new MbIntCurveOnePointValues(
surface1Domain, surface2Domain, uvInitOnSurface1, uvInitOnSurface2, initDirection) )
, _type ( ict_OnePoint )
, mergeCurves( true )
: mergeCurves( true )
, cutCurves ( true )
, _type ( ict_OnePoint )
, _snMaker ( &nameMaker.Duplicate() )
, _values ( new MbIntCurveOnePointValues(
surface1Domain, surface2Domain, uvInitOnSurface1, uvInitOnSurface2, initDirection) )
{}
/** \brief \ru Конструктор.
@@ -386,11 +386,11 @@ public:
bool ext2,
const MbVector3D & dir,
const MbSNameMaker & nameMaker )
: _values ( new MbIntCurveLimitPointsValues(uv1beg, uv1end, ext1, uv2beg, uv2end, ext2, dir) )
, _type ( ict_TwoPoints )
, mergeCurves( true )
: mergeCurves( true )
, cutCurves ( true )
, _type ( ict_TwoPoints )
, _snMaker ( &nameMaker.Duplicate() )
, _values ( new MbIntCurveLimitPointsValues(uv1beg, uv1end, ext1, uv2beg, uv2end, ext2, dir) )
{}
@@ -429,12 +429,12 @@ public:
bool useRedetermination,
bool checkPoles,
const MbSNameMaker & nameMaker )
: _values ( new MbIntCurveLimitPointsValues(
uv1beg, uv1end, ext1, uv2beg, uv2end, ext2, guideCurve, useRedetermination, checkPoles) )
, _type ( ict_TwoPointsGuide )
, mergeCurves( true )
: mergeCurves( true )
, cutCurves ( true )
, _type ( ict_TwoPointsGuide )
, _snMaker ( &nameMaker.Duplicate() )
, _values ( new MbIntCurveLimitPointsValues(
uv1beg, uv1end, ext1, uv2beg, uv2end, ext2, guideCurve, useRedetermination, checkPoles) )
{}
/// \ru Получить параметры создания кривой по начальной точке. \en Get the parameters for the curve creation by the initial point.
@@ -490,8 +490,8 @@ public:
const MbSNameMaker & snMaker )
: MbIntCurveParams( mergeCrvs, cutCrvs, snMaker )
, _faces1 ( faceIndices1 )
, _same1 ( same1 )
, _faces2 ( faceIndices2 )
, _same1 ( same1 )
, _same2 ( same2 )
, _useCreators( true ) {}
@@ -515,8 +515,8 @@ public:
const MbSNameMaker & snMaker )
: MbIntCurveParams( snMaker )
, _faces1 ( faceIndices1 )
, _same1 ( same1 )
, _faces2 ( faceIndices2 )
, _same1 ( same1 )
, _same2 ( same2 )
, _useCreators( true ) {}
@@ -541,8 +541,8 @@ public:
const MbSNameMaker & snMaker )
: MbIntCurveParams( mergeCrvs, cutCrvs, snMaker )
, _faces1 ( faceIndices1 )
, _same1 ( false )
, _faces2 ( faceIndices2 )
, _same1 ( false )
, _same2 ( false )
, _useCreators( false ) {}
@@ -562,8 +562,8 @@ public:
const MbSNameMaker & snMaker )
: MbIntCurveParams( snMaker )
, _faces1 ( faceIndices1 )
, _same1 ( false )
, _faces2 ( faceIndices2 )
, _same1 ( false )
, _same2 ( false )
, _useCreators( false ) {}
@@ -639,21 +639,48 @@ public:
protected:
bool useSurfaceNormal; ///< \ru Эквидистанта согласована с нормалью к поверхности. \en Offset point is moved according to surface normal.
c3d::ConstSurfaceSPtr surface; ///< \ru Поверхность кривой или подобная ей. \en Curve's surface or similar to such surface.
const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
c3d::SNameMakerSPtr snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSpatialOffsetCurveParams( const MbVector3D & v, const MbSNameMaker & nm )
: offsetVect ( v )
, useFillet ( false )
, keepRadius ( false )
, bluntAngle ( false )
, fromBeg ( true )
, useSurfaceNormal( false )
, surface ( nullptr )
, snMaker ( nm )
: offsetVect ( v )
, useFillet ( false )
, keepRadius ( false )
, bluntAngle ( false )
, fromBeg ( true )
, useSurfaceNormal( false )
, surface ( nullptr )
, snMaker ( &nm.Duplicate() )
{}
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbSpatialOffsetCurveParams( const MbVector3D & offset, bool useFllt, bool keepRds, bool bluntAngl, bool beg, bool useNrm, c3d::ConstSurfaceSPtr surf, const MbSNameMaker & nm )
: offsetVect ( offset )
, useFillet ( useFllt )
, keepRadius ( keepRds )
, bluntAngle ( bluntAngl )
, fromBeg ( beg )
, useSurfaceNormal( useNrm )
, surface ( nullptr )
, snMaker ( &nm.Duplicate() )
{
if ( surface != nullptr )
SetBySurfaceNormal( useSurfaceNormal, &surface );
}
/// \ru Конструктор копирования. \en Copy constructor.
MbSpatialOffsetCurveParams( const MbSpatialOffsetCurveParams & other );
/// \ru Конструктор для чтения. \en Constructor for reading.
MbSpatialOffsetCurveParams( TapeInit tapeInit );
public:
/// \ru Преобразовать элемент согласно матрице. \en Transform element by matrix.
void Transform( const MbMatrix3D & matrix );
/// \ru поворот точкек вокруг произвольной оси \en rotate points around an arbitrary axis.
void Rotate( const MbAxis3D & axis, double angle );
/// \ru Сдвиг точкек на произвольный вектор \en Move points on arbitrary vector.
void Move( const MbVector3D & to );
/// \ru Проверка на равенство. \en Check if *this == other.
bool IsEqual( const MbSpatialOffsetCurveParams & other, double accuracy ) const;
/// \ru Установка режима по поверхности, переносится ли эквидистантная точка согласованно с нормалью к поверхности. \en Setting the mode whether offset point is moved according to surface normal or not.
void SetBySurfaceNormal( bool set, c3d::ConstSurfaceSPtr * s = nullptr )
{
@@ -667,14 +694,19 @@ public:
surface = nullptr;
}
}
/// \ru Получить поверхность. \en Get surface.
/// \ru Получить флаг согласованности с нормалью к поверхности. \en Get the surface normal according flag.
bool BySurfaceNormal() const { return useSurfaceNormal; }
/// \ru Получить поверхность. \en Get surface.
/// \ru Получить поверхность. \en Get surface.
const c3d::ConstSurfaceSPtr & GetSurface() const { return surface; }
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return snMaker; }
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return *snMaker; }
/// \ru Задать именователь. \en Set names maker.
void SetNameMaker( const MbSNameMaker & newName ) const { snMaker->SetNameMaker( newName, true ); }
OBVIOUS_PRIVATE_COPY( MbSpatialOffsetCurveParams )
/// \ru Оператор присваивания. \en Assignment operator.
MbSpatialOffsetCurveParams & operator=( const MbSpatialOffsetCurveParams & );
KNOWN_OBJECTS_RW_REF_OPERATORS( MbSpatialOffsetCurveParams ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. \~
};
@@ -687,11 +719,11 @@ OBVIOUS_PRIVATE_COPY( MbSpatialOffsetCurveParams )
*/ // ---
struct MATH_CLASS MbSurfaceOffsetCurveParams {
public:
c3d::ConstFaceSPtr face; ///< \ru Грань, на которой строится эквидистанта. \en The face on which to build the offset curve.
MbAxis3D dirAxis; ///< \ru Направление смещения с точкой приложения. \en The offset direction with a reference point.
double dist; ///< \ru Величина смещения. \en The offset distance.
c3d::ConstFaceSPtr face; ///< \ru Грань, на которой строится эквидистанта. \en The face on which to build the offset curve.
MbAxis3D dirAxis; ///< \ru Направление смещения с точкой приложения. \en The offset direction with a reference point.
double dist; ///< \ru Величина смещения. \en The offset distance.
protected:
const MbSNameMaker & snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
c3d::SNameMakerSPtr snMaker; ///< \ru Именователь кривых каркаса. \en An object defining the frame curves names.
public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
@@ -699,13 +731,37 @@ public:
: face ( &f )
, dirAxis( a )
, dist ( d )
, snMaker( nm )
, snMaker( &nm.Duplicate() )
{}
public:
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return snMaker; }
/// \ru Конструктор копирования. \en Copy constructor.
MbSurfaceOffsetCurveParams( const MbSurfaceOffsetCurveParams & other );
/// \ru Конструктор для чтения. \en Constructor for reading.
MbSurfaceOffsetCurveParams( TapeInit tapeInit );
OBVIOUS_PRIVATE_COPY( MbSurfaceOffsetCurveParams )
public:
/// \ru Преобразовать элемент согласно матрице. \en Transform element by matrix.
void Transform( const MbMatrix3D & matrix );
/// \ru Поворот точкек вокруг произвольной оси \en Rotate points around an arbitrary axis.
void Rotate( const MbAxis3D & axis, double angle );
/// \ru Сдвиг точкек на произвольный вектор \en Move points on arbitrary vector.
void Move( const MbVector3D & to );
/// \ru Проверка на равенство. \en Check if *this == other.
bool IsEqual( const MbSurfaceOffsetCurveParams & other, double accuracy ) const;
/// \ru Установка поверхности. \en Setting the surface.
void SetFace( c3d::ConstFaceSPtr * f = nullptr )
{
if ( f != nullptr )
face = *f;
}
/// \ru Получить ссылку на именователь. \en Get names maker reference.
const MbSNameMaker & GetNameMaker() const { return *snMaker; }
/// \ru Задать именователь. \en Set names maker.
void SetNameMaker( const MbSNameMaker & newName ) const { snMaker->SetNameMaker( newName, true ); }
/// \ru Оператор присваивания. \en Assignment operator.
MbSurfaceOffsetCurveParams & operator=( const MbSurfaceOffsetCurveParams & );
KNOWN_OBJECTS_RW_REF_OPERATORS( MbSurfaceOffsetCurveParams ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. \~
};
@@ -1096,23 +1152,23 @@ public:
/// \ru Конструктор по параметрам. \en Constructor by parameters.
MbCornerChamferParams( size_t _index, double _distance, double _distAngle, bool _type = false )
: index ( _index )
, distance ( _distance )
: distance ( _distance )
, distAngle( _distAngle )
, index ( _index )
, type ( _type )
{}
/// \ru Конструктор по умолчанию. \en Default constructor.
MbCornerChamferParams()
: index ( -1 )
, distance ( 0 )
: distance ( 0 )
, distAngle( 0 )
, index ( -1 )
, type ( false )
{}
/// \ru Конструктор копирования. \en Copy constructor.
MbCornerChamferParams(const MbCornerChamferParams & other)
: index ( other.index )
, distance ( other.distance )
: distance ( other.distance )
, distAngle( other.distAngle )
, index ( other.index )
, type ( other.type )
{}
/// \ru Оператор присваивания. \en Assignment operator. \~
+16
View File
@@ -1011,6 +1011,22 @@ public:
bool GetOffsetFacesHotPoint( MbCartPoint3D & pnt,
MbVector3D & dir ) const;
/** \brief \ru Получить хот-точку и её вектор направления смещения для операции замены группы граней.
\en Get hot point and its displacement direction vector for the replacement faces group operation. \~
\details \ru В случае успешного выполнения операции хот-точка размещается в центре грани, ближайшей к центру заменяющей группы граней.
В случае неудачного выполнения операции хот-точка располагается в центре заменяющей группы граней плюс смещение.
\en If the operation is successful, the hot point is placed in the center of the face, closest to the replacement group faces center.
If the operation fails, the hot point is located in the center of a replacement group faces, plus the offset is taken relative to this center.\~
\param[out] pnt - \ru Хот-точка.
\en Hot point. \~
\param[out] dir - \ru Вектор направления смещения хот-точки.
\en Hot point displacement direction vector.\~
\return \ru Возвращает "true", если хот-точка была рассчитана.
\en Returns "true" if the hot-point is calculated. \~
*/
bool GetReplaceFacesGroupHotPoint( MbCartPoint3D & pnt,
MbVector3D & dir ) const;
/** \brief \ru Получить константную ссылку на массив вариантов замены граней.
\en Get a constant reference to an array of face replacement options. \~
\details \ru Получить константную ссылку на массив вариантов замены граней.
+1 -1
View File
@@ -516,7 +516,7 @@ public:
/// \ru Получить индексы выбранных граней оболочки. \en Get indices of selected shell faces.
void GetFacesIndices( c3d::IndicesVector & selIndices ) const { selIndices = _selIndices; }
/// \ru Установить индексы выбранных граней оболочки. \en Set indices of selected shell faces.
void SetFacesIndices( c3d::IndicesVector & selIndices ) { _selIndices = selIndices; }
void SetFacesIndices( const c3d::IndicesVector & selIndices ) { _selIndices = selIndices; }
/// \ru Режим адаптации открытых оболочек. \en Open shell instances adaptation mode.
bool IsAdaptMode() const { return _adaptMode; }
/// \ru Режим адаптации открытых оболочек. \en Open shell instances adaptation mode.
+31 -30
View File
@@ -140,18 +140,18 @@ private:
public:
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams( const c3d::ParamPointsVector & points, double tolerance, bool makeContour, bool makeGrid, bool makeDelaunay )
: _points ( points )
, _tolerance ( tolerance )
, _makeContour ( makeContour )
, _makeGrid ( makeGrid )
: _makeGrid ( makeGrid )
, _makeDelaunay( makeDelaunay )
, _makeContour ( makeContour )
, _tolerance ( tolerance )
, _points ( points )
{}
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams( const std::vector<MbFloatPoint> & points, double tolerance, bool makeContour, bool makeGrid, bool makeDelaunay )
: _tolerance ( tolerance )
, _makeContour ( makeContour )
, _makeGrid ( makeGrid )
: _makeGrid ( makeGrid )
, _makeDelaunay( makeDelaunay )
, _makeContour ( makeContour )
, _tolerance ( tolerance )
{
_points.clear();
_points.reserve( points.size() );
@@ -160,10 +160,10 @@ public:
}
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams( const SArray<MbFloatPoint> & points, double tolerance, bool makeContour, bool makeGrid, bool makeDelaunay )
: _tolerance ( tolerance )
, _makeContour ( makeContour )
, _makeGrid ( makeGrid )
: _makeGrid ( makeGrid )
, _makeDelaunay( makeDelaunay )
, _makeContour ( makeContour )
, _tolerance ( tolerance )
{
_points.clear();
_points.reserve( points.size() );
@@ -172,10 +172,10 @@ public:
}
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams( const SArray<MbCartPoint> & points, double tolerance, bool makeContour, bool makeGrid, bool makeDelaunay )
: _tolerance ( tolerance )
, _makeContour ( makeContour )
, _makeGrid ( makeGrid )
: _makeGrid ( makeGrid )
, _makeDelaunay( makeDelaunay )
, _makeContour ( makeContour )
, _tolerance ( tolerance )
{
_points.clear();
_points.reserve( points.size() );
@@ -248,8 +248,9 @@ private:
public:
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams3D( const c3d::SpacePointsVector & points, double tolerance )
: _points ( points )
, _tolerance( tolerance )
: _tolerance( tolerance )
, _points ( points )
{}
/// \ru Конструктор.. \en Constructor. \~
MbConvexHullParams3D( const std::vector<MbFloatPoint3D> & points, double tolerance )
@@ -1362,12 +1363,12 @@ private:
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _closed ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
{}
public:
@@ -1383,12 +1384,12 @@ public:
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _closed ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
{}
/// \ru Конструктор по параметрам. \en Constructor by parameters.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
@@ -1404,12 +1405,12 @@ public:
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _closed ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
{}
/// \ru Конструктор по параметрам для вписывания аналитических поверхностей. \en Constructor by parameters for analytic surfaces fitting.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
@@ -1428,12 +1429,12 @@ public:
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _closed ( false )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
, _angleConeMin ( angleConeMin )
, _angleConeMax ( angleConeMax )
, _radiusAnalyticShapeMax( radiusAnalyticShapeMax )
, _order ( c3d::NURBS_DEGREE )
, _countCpMax ( c3d::NURBS_POINTS_MAX_COUNT )
, _smoothCoef ( METRIC_ACCURACY )
{}
/// \ru Конструктор по параметрам для вписывания нурбс поверхности. \en Constructor by parameters for NURBs surface fitting.
explicit MbSurfaceFitToGridParameters( MbeSpaceType surfaceType,
@@ -1450,12 +1451,12 @@ public:
, _pointsFittingMax ( 10000 )
, _withRefinement ( false )
, _closed ( false )
, _order ( order )
, _countCpMax ( countCpMax )
, _smoothCoef ( smoothCoef )
, _angleConeMin ( 1. )
, _angleConeMax ( 89. )
, _radiusAnalyticShapeMax( 1500. )
, _order ( order )
, _countCpMax ( countCpMax )
, _smoothCoef ( smoothCoef )
{}
/// \ru Выдать тип поверхности. \en Get surface type.
+12 -1
View File
@@ -335,7 +335,8 @@ private:
std::vector<c3d::SpacePointsVector> _weft; ///< \ru Полилинии для нулевой нити утка. \en Weft polylines. \~
MbHalfedgeAttrSizetEdge * _pAttrId; ///< \ru Атрибут индексов сторон ячеек. \en An attribute for cell sides indices. \~
MbHalfedgeAttrDoubleEdge * _pAttrAng; ///< \ru Атрибут углов сторон ячеек. \en An attribute for cell sides angles. \~
MbHalfedgeAttrBoolVertex * _pAttrNode; ///< \ru Атрибут флагов узлов ткани. \en An attribute for the fiber nodes. \~
MbHalfedgeAttrBoolVertex * _pAttrNode; ///< \ru Атрибут флагов узлов ткани. \en An attribute for fiber nodes flags. \~
MbHalfedgeAttrSizetEdge * _pAttrDir; ///< \ru Атрибут направлений сторон ячеек ткани. \en An attribute for cell sides directions. \~
public:
/// \ru Конструктор. \en Constructor.
@@ -420,6 +421,16 @@ public:
\en Polylines represented a line mapping to the shell. \~
*/
void GetSplitPolylines( const MbCartPoint & uv, const MbVector & dir, std::vector<c3d::SpacePointsVector> & polys ) const;
/** \brief \ru Получить атрибут направлений сторон ячеек.
\en Get an attribute for cell sides directions. \~
\details \ru Получить атрибут направлений сторон ячеек.
Возможные значения:
0 - вдоль основы, 1 - вдоль утка, 2 - против основы, 3 - против утка, SYS_MAX_T - не определено.
\en Get an attribute for cell sides directions.
Possible values are:
0 - along warp, 1 - along weft, 2 - against warp, 3 - against weft, SYS_MAX_T - undefined.
*/
const MbHalfedgeAttrSizetEdge * GetDirectionalAttribute() const { return _pAttrDir; }
// \ru Инициализировать атрибуты сетки. \en Initialize the mesh attributes. \~
void InitAttributes();
+16 -11
View File
@@ -689,7 +689,7 @@ KNOWN_OBJECTS_RW_REF_OPERATORS( PocketValues ) // \ru Для работы со
// ---
class MATH_CLASS SlotValues : public HoleValues {
public:
// \ru Вид паза сверху. \en View of slot from above. \~
/* \ru Вид паза сверху. \en View of slot from above. \~
// --
// / \
// | |
@@ -698,6 +698,7 @@ public:
// | |
// \ /
// --
*/
enum SlotType {
// ________ *
// | | *
@@ -2834,6 +2835,10 @@ public:
const MbFaceShell * GetShell() const { return shell; }
/// \ru Номер грани в оболочке. \en The index of face in the shell.
const MbItemIndex & GetFaceIndex() const { return faceIndex; }
/// \ru Номер грани в оболочке. \en The index of face in the shell.
void SetFaceIndex( const MbItemIndex & index ) { faceIndex.Init( index ); }
/// \ru Номер грани в оболочке. \en The index of face in the shell.
void SetFaceIndex( size_t index ) { faceIndex.Init( index ); }
/// \ru Получить режим обработки оболочки-препятствия. \en Get obstacle shell processing mode.
ShellObstacleType GetObstacleType() const { return toShellType; }
/// \ru Получить вариант представления результирующего тела. \en Get options for representing the resulting body.
@@ -4263,9 +4268,9 @@ public:
\en An object for naming the new objects. \~
*/
MbShellChamferParams( const c3d::EdgesSPtrVector & initCurves, const SmoothValues & params, const MbSNameMaker & names )
: _params( params )
: _initCurves( initCurves )
, _nameMaker( &names.Duplicate() )
, _initCurves( initCurves ) {}
, _params( params ) {}
public:
/// \ru Получить именователь операции. \en Get the object defining names generation in the operation.
@@ -4436,8 +4441,8 @@ public:
MbShellFilletValues( const std::vector<MbEdgeFunction> & initFunctions, c3d::FacesSPtrVector & initBounds,
const MbSNameMaker & names, const SmoothValues & params )
: MbShellChamferParams( c3d::EdgesSPtrVector(), params, names )
, _initBounds ( initBounds )
, _initFunctions( initFunctions ) {}
, _initFunctions( initFunctions )
, _initBounds ( initBounds ) {}
public:
/// \ru Получить набор скругляемых ребер тела с функциями изменения радиуса. \en Get the edges to fillet together with the radius laws.
@@ -5544,8 +5549,8 @@ public:
: _initFaces ( initFaces )
, _initFacesLeft ( initFacesLeft )
, _initFacesRight( initFacesRight )
, _params ( params )
, _nameMaker ( &names.Duplicate() ) {}
, _nameMaker ( &names.Duplicate() )
, _params ( params ) {}
public:
/// \ru Получить набор граней для скругления. \en Get faces to fillet.
@@ -6179,15 +6184,15 @@ public:
public:
/// \ru Конструктор. \en Constructor.
MbShellPartResults()
: _solid()
, _partIndices()
: _partIndices()
, _solid()
{
}
/// \ru Конструктор по индексам частей тела. \en Constructor by the indices of the parts of the solid.
MbShellPartResults( const MbPartSolidIndices & partIndices )
: _solid()
, _partIndices( partIndices )
: _partIndices( partIndices )
, _solid()
{
}
+2 -2
View File
@@ -1603,9 +1603,9 @@ protected:
protected:
/// \ru Конструктор. \en Constructor.
MbSweptLayout( const MbSurface & surf, Direction dir ) : surface( &surf ), direction( dir ), skipUnion( false ) {}
MbSweptLayout( const MbSurface & surf, Direction dir ) : direction( dir ), skipUnion( false ), surface( &surf ) {}
/// \ru Конструктор копирования. \en Copy-constructor.
MbSweptLayout( const MbSweptLayout & other ) : surface( other.surface ), direction( other.direction ), skipUnion( other.skipUnion ) {}
MbSweptLayout( const MbSweptLayout & other ) : direction( other.direction ), skipUnion( other.skipUnion ), surface( other.surface ) {}
/// \ru Деструктор. \en Destructor.
virtual ~MbSweptLayout();
public:
+111 -1
View File
@@ -12,7 +12,7 @@
#include <wire_frame.h>
#include <templ_dptr.h>
#include <op_curve_parameter.h>
#include <wireframe_point.h>
@@ -433,4 +433,114 @@ public:
};
//-------------------------------------------------------------------------------
/** \brief \ru Параметры эквидистантного каркаса.
\en Parameters of an offset wire frame. \~
\details \ru Параметры эквидистантного каркаса.
\en Parameters of an offset wire frame. \~
\ingroup WireFrame_Parameters
*/
// ---
class MATH_CLASS MbOffsetWireFrameParams : public MbPrecision {
private:
std::unique_ptr<MbSpatialOffsetCurveParams> _spatialParameters; ///< \ru Параметры для смещения пространственной кривой. \en Parameters for offsetting a spatial curve. \~
std::unique_ptr<MbSurfaceOffsetCurveParams> _surfaceParameters; ///< \ru Параметры для смещения кривой вдоль поверхности. \en Parameters for offsetting a curve along a surface. \~
MbVector3D _offset; ///< \ru Вспомогательный вектор смещения. \en The auxiliary offset vector.
public:
/** \brief \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\details \ru Конструктор для смещения пространственной кривой.
\en Constructor for offsetting a spatial curve. \~
\param[in] offsetVect - \ru Вектор, задающий смещение в точке кривой.
\en The displacement vector at a point of the curve. \~
\param[in] useFillet - \ru Если true, то разрывы заполнять скруглением, иначе продолженными кривыми.
\en If 'true', the gaps are to be filled with fillet, otherwise with the extended curves. \~
\param[in] keepRadius - \ru Если true, то в существующих скруглениях сохранять радиусы.
\en If 'true', the existent fillet radii are to be kept. \~
\param[in] bluntAngle - \ru Если true, то в притуплять острые углы.
\en If 'true', sharp corners are to be blunt. \~
\param[in] fromBeg - \ru Вектор смещения привязан к началу (если true).
\en The translation vector is associated with the beginning (if true). \~
\param[in] nameMaker - \ru Именователь кривых каркаса.
\en An object defining the frame curves names. \~
\param[in] useSurfaceNormal - \ru Эквидистанта согласована с нормалью к поверхности.
\en Offset point is moved according to surface normal. \~
\param[in] surface - \ru Поверхность кривой или подобная ей.
\en Curve's surface or similar to such surface. \~
*/
explicit MbOffsetWireFrameParams( const MbVector3D & offsetVect,
bool useFillet,
bool keepRadius,
bool bluntAngle,
bool fromBeg,
const MbSNameMaker & nameMaker,
bool useSurfaceNormal,
c3d::ConstSurfaceSPtr surface = nullptr );
/** \brief \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\details \ru Конструктор для смещения пространственной кривой.
\en Constructor for offsetting a spatial curve. \~
\param[in] offsetVect - \ru Вектор, задающий смещение в точке кривой.
\en The displacement vector at a point of the curve. \~
\param[in] nameMaker - \ru Именователь кривых каркаса.
\en An object defining the frame curves names. \~
*/
explicit MbOffsetWireFrameParams( const MbVector3D & offsetVect,
const MbSNameMaker & nameMaker );
/** \brief \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\details \ru Конструктор для смещения кривой вдоль поверхности.
\en Constructor for offsetting a curve along a surface. \~
\param[in] face - \ru Грань, на которой строится эквидистанта.
\en The face on which to build the offset curve. \~
\param[in] axis - \ru Направление смещения с точкой приложения.
\en The offset direction with a reference point. \~
\param[in] dist - \ru Величина смещения.
\en The offset distance. \~
\param[in] nameMaker - \ru Именователь кривых каркаса.
\en An object defining the frame curves names. \~
*/
explicit MbOffsetWireFrameParams( const MbFace & face, const MbAxis3D & axis, double dist, const MbSNameMaker & nameMaker );
/// \ru Конструктор копирования. \en Copy constructor.
MbOffsetWireFrameParams( const MbOffsetWireFrameParams & other );
/// \ru Конструктор для чтения. \en Constructor for reading.
MbOffsetWireFrameParams( TapeInit ti );
/// \ru Деструктор. \en Destructor.
virtual ~MbOffsetWireFrameParams() {}
public:
/// \ru Получить параметры. \en Get parameters.
const MbSpatialOffsetCurveParams * GetSpatialParams() const { return _spatialParameters.get(); }
/// \ru Получить параметры. \en Get parameters.
const MbSurfaceOffsetCurveParams * GetSurfaceParams() const { return _surfaceParameters.get(); }
/// \ru Выдать вектор смещения. \en Get offset vector.
const MbVector3D & GetOffsetVector() const;
/// \ru Установить вектор смещения. \en Set offset vector.
MbVector3D & SetOffsetVector();
/// \ru Установить параметры по вектору смещения. \en Set parameters by offset vector.
void SetOffsetParams( const MbVector3D & offset );
/// \ru Являются ли параметры параметрами для смещением кривой вдоль вектора. \en Are the parameters for a shift of the curve along the vector.
bool IsParamsForSpatialCurve() const;
/// \ru Преобразовать элемент согласно матрице. \en Transform element by matrix.
void Transform( const MbMatrix3D & matrix );
/// \ru поворот точек вокруг произвольной оси \en rotate points around an arbitrary axis.
void Rotate( const MbAxis3D & axis, double angle );
/// \ru Сдвиг точек на произвольный вектор \en Move points on arbitrary vector.
void Move( const MbVector3D & to );
/// \ru Проверка на равенство. \en Check if *this == other.
bool IsEqual( const MbOffsetWireFrameParams & other, double accuracy ) const;
/// \ru Получить именователь операции. \en Get names maker.
const MbSNameMaker & GetNameMaker() const;
/// \ru Оператор присваивания. \en An assignment operator.
const MbOffsetWireFrameParams & operator=( const MbOffsetWireFrameParams & other );
KNOWN_OBJECTS_RW_REF_OPERATORS( MbOffsetWireFrameParams ) // \ru Для работы со ссылками и объектами класса. \en For working with references and objects of the class. \~
};
#endif // __OP_WIREFRAME_PARAMETERS_H
+4 -2
View File
@@ -691,7 +691,8 @@ public:
\en Object to copy. \~
*/
IntervalConstNode( const IntervalConstNode & other )
: m_firstValue ( other.m_firstValue->Duplicate() ) // ( other.m_firstValue )
: TreeIntervalNode {}
, m_firstValue ( other.m_firstValue->Duplicate() ) // ( other.m_firstValue )
, m_secondValue( other.m_secondValue->Duplicate() ) // ( other.m_secondValue )
{}
/** \brief \ru Деструктор.
@@ -1529,7 +1530,8 @@ class MATH_CLASS BTreeUserFunc : public BTreeNode
public:
// Конструктор копирования
BTreeUserFunc( const BTreeUserFunc & other )
: func( &other.func->Duplicate() )
: BTreeNode {}
, func( &other.func->Duplicate() )
{
for ( size_t i = 0, c = other.pars.size(); i < c; ++i ) {
pars.Add( other.pars[i]->Duplicate() );
+16
View File
@@ -367,6 +367,22 @@ public:
\en Keep old regions (i.e. do not make separate regions from new subregions). \~
*/
virtual void SplitByEdgesTopo( const c3d::IndicesVector & splitSet, bool bKeepRegions ) = 0;
/** \brief \ru Удалить ребра сетки из ребер сегментации.
\en Remove mesh edges from segmentation edges. \~
\param[in] edgesToDel - \ru Удаляемые ребра сетки.
\en Mesh edges to remove. \~
*/
virtual void RemoveTopoEdgesFromSegm( const c3d::IndicesVector & edgesToDel ) = 0;
/** \brief \ru Удалить ребра сегментации.
* После удаления ребер общие регионы объединяются и
* сохраняется регион, у которого наибольшая площадь.
\en Segmentation edges to remove.
* Merges all regions connected through removed edges into one.
This region has the ID of the original region with the largest area. \~
\param[in] edgesToDel - \ru Удаляемые ребра сегментации.
\en Remove segmentation edges. \~
*/
virtual bool RemoveSegmEdges( const c3d::IndicesVector & edgesToDel ) = 0;
/** \brief \ru Объединить несколько регионов в один.
\en Merge several regions into one. \~
\param[in] regions - \ru Регионы.
+39 -2
View File
@@ -46,7 +46,7 @@ namespace c3d
//------------------------------------------------------------------------------
/** \brief \ru Форма ограничения кривой STEP.
\en . \~
\en . Trimming form of STEP curve\~
\note \ru ЭКСПЕРИМЕНТАЛЬНАЯ.
\en EXPEREIMENTAL. \~
*/
@@ -184,6 +184,8 @@ namespace c3d
std::vector<ptrdiff_t> m_knotMultiplicities; ///< \ru Множители узлов. \en Knots multiplicities.
std::vector<double> m_knots; ///< \ru Узлы. \en Knots.
SeBKnotsType m_knotsType; ///< \ru Тип вектора. \en Type of knots vector.
bool m_weightsDefined; ///< \ru Заданы ли веса точек. \en Wether the weights of points are defined.
std::vector<double> m_weights; ///< \ru Веса точек. \en Weights of points.
public:
@@ -220,7 +222,13 @@ namespace c3d
/// \ru Получить тип вектора. \en Get type of vector.
SeBKnotsType GetKnotsType() const;
/// \ru . \en .
/// \ru Заданы ли веса. \en Wether the weights defined.
bool AreWeightsDefined() const;
/// \ru Получить вес точки. \en Get weightf of a point.
double GetWeight( size_t index );
/// \ru Создать сплайн. \en Create a spline.
static std::shared_ptr<SeBSplineWithKnotsCurve> Create(
size_t const thisId,
ptrdiff_t const degree,
@@ -233,6 +241,21 @@ namespace c3d
SeBKnotsType const knotsType
);
/// \ru Создать сплайн. \en Create a spline.
static std::shared_ptr<SeBSplineWithKnotsCurve> Create(
size_t const thisId,
ptrdiff_t const degree,
std::vector<size_t> && controlPointsList,
SeBCurveForm const curveForm,
bool const isClosed,
bool const isSelfIntersected,
std::vector<ptrdiff_t> && knotMultiplicities,
std::vector<double> && knots,
std::vector<double> && weights,
SeBKnotsType const knotsType
);
VISITING_CLASS( SeBSplineWithKnotsCurve )
void Accept( Visitor & visitor ) const override
@@ -255,6 +278,20 @@ namespace c3d
std::vector<double> && knots,
SeBKnotsType const knotsType
);
/// \ru Конструктор. \en Constructor.
SeBSplineWithKnotsCurve(
size_t const thisId,
ptrdiff_t const degree,
std::vector<size_t> && controlPointsList,
SeBCurveForm const curveForm,
bool const isClosed,
bool const isSelfIntersected,
std::vector<ptrdiff_t> && knotMultiplicities,
std::vector<double> && knots,
std::vector<double> && weights,
SeBKnotsType const knotsType
);
};
//------------------------------------------------------------------------------
+26 -7
View File
@@ -13,6 +13,20 @@ namespace c3d
{
namespace converter
{
//------------------------------------------------------------------------------
/** \brief \ru Форма тора STEP.
\en STEP Torus form. \~
\note \ru ЭКСПЕРИМЕНТАЛЬНАЯ.
\en EXPEREIMENTAL. \~
*/
enum class SeTorusForm {
Donut, ///< \ru Тор. \en Donut.
Apple, ///< \ru Яблоко. \en Apple.
Lemon, ///< \ru Лимон. \en Lemon.
};
//------------------------------------------------------------------------------
/** \brief \ru Плоскость.
\en Plane. \~
@@ -151,22 +165,27 @@ namespace c3d
*/
class CONV_CLASS SeTorusSurface : public SeBase
{
size_t m_placement; ///< \ru Локальная система координат. \en Location.
double m_majorRadius, ///< \ru . \en .
m_minorRadius; ///< \ru . \en .
size_t m_placement; ///< \ru Локальная система координат. \en Location.
double m_majorRadius, ///< \ru Радиус. \en Radius.
m_minorRadius; ///< \ru Толщина. \en Thickness.
SeTorusForm m_torusForm; ///< \ru Torus form. \en Form.
public:
/// \ru . \en .
/// \ru Создать поверхность тора. \en Create toroidal surace.
static std::shared_ptr<SeTorusSurface> Create( size_t thisId, size_t placement, double majorRadius, double minorRadius );
/// \ru . \en .
size_t GetPlacement() const;
/// \ru . \en .
/// \ru Получить радиус. \en Get radius.
double GetMajorRadius() const;
/// \ru . \en .
/// \ru Получить толщину. \en GetThickness.
double GetMinorRadius() const;
/// \ru Получить форму. \en Get form.
SeTorusForm GetTorusForm() const;
VISITING_CLASS( SeTorusSurface )
void Accept( Visitor & visitor ) const override
@@ -178,7 +197,7 @@ namespace c3d
private:
/// \ru Конструктор. \en Constructor.
SeTorusSurface( size_t thisId, size_t placement, double majorRadius, double minorRadius );
SeTorusSurface( size_t thisId, size_t placement, double majorRadius, double minorRadius, SeTorusForm torusForm );
};
+1
View File
@@ -150,6 +150,7 @@ enum MbeSpaceType {
st_ExplorationSurface = 347, ///< \ru Поверхность заметания с масштабированием и поворотом образующей кривой. \en Swept surface with scaling and winding of generating curve.
st_SectionSurface = 348, ///< \ru Поверхность заметания переменного сечения. \en The swept mutable section surface.
st_SimplexSpline = 349, ///< \ru Поверхность, моделирующая симплексный сплайн.
st_RuledBendedUnbendedSurface=341, ///< \ru Поверхность, полученная линейчатым сгибом/разгибом. \en Surface constructed by ruled fold / unbending.
st_FreeSurface = 400, ///< \ru Тип для поверхностей, созданных пользователем. \en Type for the user-defined surfaces. \n
// \ru Типы вспомогательных объектов. \en Helper object types.
+2 -1
View File
@@ -36,13 +36,14 @@ protected :
size_t index[_C3D_3_]; ///< \ru Номера вершин треугольника в массиве точек. \en The numbers of vertices in points array.
size_t neighbour[_C3D_3_]; ///< \ru Номера соседних треугольников. \en The numbers of neighbour triangles. SYS_MAX_T if it is absent.
// points[index[2]]
/* points[index[2]]
// +
// / \
// neighbour[2] / \ neighbour[1]
// / \
// points[index[0]] +---------------+ points[index[1]]
// neighbour[0]
*/
public :
MbTrigon() { index[0] = SYS_MAX_T; index[1] = SYS_MAX_T; index[2] = SYS_MAX_T;
+2 -2
View File
@@ -266,7 +266,7 @@ size_t MultiMap<KeyType,ValType>::LowerBoundEx( const SArray<typename MultiMap<K
if ( key <= pairs[0].m_key )
return 0;
if ( firstNotLess <= last && firstNotLess >= 0 && key <= pairs[firstNotLess].m_key )
if ( firstNotLess <= last && key <= pairs[firstNotLess].m_key )
return firstNotLess;
if ( key == pairs[last].m_key )
return last;
@@ -330,7 +330,7 @@ size_t MultiMap<KeyType,ValType>::UpperBoundEx( const SArray<typename MultiMap<K
if ( key < pairs[0].m_key )
return 0;
if ( firstGreater <= end && firstGreater >= 0 && key < pairs[firstGreater].m_key )
if ( firstGreater <= end && key < pairs[firstGreater].m_key )
return firstGreater;
if ( key < pairs[last].m_key )
return last;
+20 -7
View File
@@ -107,31 +107,44 @@ public:
*/
static MbResultType SetError( MbResultType );
/** \brief \ru Достаточно ли памяти для работы. \en Whether is enough memory to work.
\param[in] memRatio - \ru Максимальный процент использования памяти (при memRatio == -1 используются значения по умолчанию).
\en The maximum percentage of memory usage (with memRatio == -1, the default values are used). \~
*/
static bool IsEnoughMemory( double memRatio = -1 );
/** \brief \ru Сбросить все данные.
\en Reset all data.
*/
static void Reset();
///> \ru Следующие методы будут удалены. \en The next methods will be removed.
/** \brief \ru Инициализировать обработчик перед началом мониторинга ошибок.
Возвращает true, если обработчик стартовал, или false, если обработчик уже работает.
Парная функция Recover() должна вызываться, только если Init() вернул true.
\en Initialize handler before starting error monitoring.
Returns true if the handler is started or false if the handler is already working.
The paired function Recover() should be called only if Init() returnes true.
The paired function Recover() should be called only if Init() returns true.
*/
static bool Init();
DEPRECATE_DECLARE static bool Init();
/** \brief \ru Восстановиться, если обнаружена фатальная ошибка.
\en Recover if a fatal error is detected.
*/
static void Recover();
DEPRECATE_DECLARE static void Recover();
/** \brief \ru Достаточно ли памяти для работы. \en Whether is enough memory to work.
/** \brief \ru Коэффициент использования памяти [0.0, 1.0]. \en Memory use coefficient [0.0, 1.0].
*/
static bool IsEnoughMemory();
DEPRECATE_DECLARE static double MemoryUseRatio();
/** \brief \ru Установить допустимый порог памяти для работы (Mb). \en Set an acceptable memory threshold for work (Mb).
*/
static void SetMemoryThreshold( double );
DEPRECATE_DECLARE static void SetMemoryThreshold( double memThreshold );
/** \brief \ru Установить порог памяти по умолчанию. \en Set default memory threshold.
*/
static void ResetMemoryThreshold();
DEPRECATE_DECLARE static void ResetMemoryThreshold();
};
#endif // __TOOL_ERR_HANDLING_H
+4 -4
View File
@@ -962,8 +962,8 @@ public :
/// \ru Получить параметры разрезки для периодического ребра. \en Get the cutting parameters for a periodic edge.
bool CutPeriodicEdge( const MbVector3D & eye, SSArray<double> & trimParams,
double & delT1, double & delT2 ) const;
/// \ru Согласовать тип кроивой пересечения. \en Agree on the type of intersection curve.
void AgreeBuildType( double tCurve );
/// \ru Согласовать тип кривой пересечения. \en Agree on the type of intersection curve.
DEPRECATE_DECLARE void AgreeBuildType( double tCurve );
// \ru Объявление оператора присваивания без реализации, чтобы не было присваивания по умолчанию. \en The declaration of the assignment operator without implementation to prevent an assignment by default.
OBVIOUS_PRIVATE_COPY( MbCurveEdge )
@@ -1504,7 +1504,7 @@ public:
{
MbFaceTemp * _temporal; ///< \ru Объект сопровождения грани (для скорости вычислений). \en An object for maintenance of a face (to improve calculations speed).
MbFaceAuxiliaryData() : AuxiliaryData(), _temporal( nullptr ) {}
MbFaceAuxiliaryData( const MbFaceAuxiliaryData & ) : _temporal( nullptr ) {}
MbFaceAuxiliaryData( const MbFaceAuxiliaryData & ) : AuxiliaryData {}, _temporal( nullptr ) {}
virtual ~MbFaceAuxiliaryData();
};
@@ -1526,9 +1526,9 @@ public:
template <class Loops>
MbFace( const Loops & bnds, const MbSurface & surf, bool sense )
: MbTopologyItem()
, loops ( bnds.size(), 1 )
, surface ( const_cast<MbSurface *>(&surf) )
, sameSense ( sense ) // признак совпадения нормали
, loops ( bnds.size(), 1 )
, cache ( nullptr )
{
surface->AddRef();
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.