Merge branch 'master' of https://gitlab.steamware.net/egaltech/Extern
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -1577,8 +1577,8 @@ MATH_FUNC (MbResultType) CreateContourChamfer( const MbContourChamferParams & pa
|
||||
//-------------------------------------------------------------------------------
|
||||
/** \brief \ru Построить развертку кривых и точек на плоскость.
|
||||
\en Construct unwrapped curves and points. \~
|
||||
\details \ru Построение развертки кривых и точек на плоскость. См. также #CurvesUnwrapping.\n
|
||||
\en Construct unwrapped curves and points on a plane. Also check out #CurvesUnwrapping.\n \~
|
||||
\details \ru Построение развертки кривых и точек на плоскость.\n
|
||||
\en Construct unwrapped curves and points on a plane.\n \~
|
||||
\param[in] params - \ru Параметры разворачивания.
|
||||
\en Unwrapping parameters. \~
|
||||
\param[out] result - \ru Результат разворачивания.
|
||||
@@ -1595,8 +1595,8 @@ MATH_FUNC (MbResultType) UnwrapCurve( const MbCurvesWrappingParams & parameters
|
||||
//-------------------------------------------------------------------------------
|
||||
/** \brief \ru Выполнить операцию сворачивания кривых и точек на поверхность.
|
||||
\en Perform the operation of wrapping curves and points on a surface. \~
|
||||
\details \ru Выполнить операцию сворачивания кривых на поверхность. См. также #CurvesWrapping.\n
|
||||
\en Perform the operation of wrapping curves on a surface. Also check out #CurvesWrapping.\n \~
|
||||
\details \ru Выполнить операцию сворачивания кривых на поверхность.\n
|
||||
\en Perform the operation of wrapping curves on a surface.\n \~
|
||||
\param[in] params - \ru Параметры сворачивания.
|
||||
\en Wrapping parameters. \~
|
||||
\param[out] result - \ru Результат сворачивания.
|
||||
|
||||
@@ -27,6 +27,10 @@ class MbDrapeShellResults;
|
||||
class MbRemeshParams;
|
||||
class MbShellLinearizationParams;
|
||||
class MbMergePolymeshParams;
|
||||
class MbMeshSmoothingParams;
|
||||
class MbPolyline3D;
|
||||
class MbPolylinePolymeshProjectParams;
|
||||
class MbPolylinePolymeshProjectResults;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -315,11 +319,50 @@ 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 );
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Сгладить полигональный объект по набору входных параметров сглаживания.
|
||||
\en Smooth a polygonal object using a set of input smoothing parameters. \~
|
||||
\param[in] params - \ru Параметры сглаживания.
|
||||
\en Smoothing parameters. \~
|
||||
\param[in-out] mesh - \ru Полигональный объект.
|
||||
\en A polygonal object. \~
|
||||
\return \ru Код результата операции, rt_Success если объект успешно сглажен.
|
||||
\en Returns the operation result code, rt_Success if the object is successfully smoothed. \n
|
||||
\warning \ru В разработке.
|
||||
\en Under development.\~
|
||||
*/ // ---
|
||||
MATH_FUNC( MbResultType ) SmoothPolymesh( const MbMeshSmoothingParams & params, MbPolymesh & mesh );
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Спроецировать полилинию на полигональный объект.
|
||||
\en Project a polyline on a polygonal object. \~
|
||||
\details \ru Спроецировать полилинию на полигональный объект.
|
||||
Если на некотором участке полилиния проецируется внутрь фасета, он разделяется на несколько фасетов.
|
||||
При этом создаются новые рёбра полигонального объекта.
|
||||
\en Project a polyline on a polygonal object.
|
||||
In case of projecting a polyline's fragment inside a facet, it splits into new ones, so new edges are created. \~
|
||||
\param[in-out] mesh - \ru Полигональный объект.
|
||||
\en A polygonal object being projected on. \~
|
||||
\param[in] params - \ru Параметры проецирования полилинии на полигональный объект.
|
||||
\en Parameters for projecting a polyline on a polymesh. \~
|
||||
\param[out] results - \ru Результат проецирования полилинии на полигональный объект.
|
||||
\en Result of projecting a polyline on a polymesh. \~
|
||||
\return \ru Код результата операции, rt_Success, если проекция успешно построена.
|
||||
\en Returns the operation result code, rt_Success if a polyline is successfully projected. \n
|
||||
\warning \ru В разработке.
|
||||
\en Under development.\~
|
||||
*/ // ---
|
||||
MATH_FUNC( MbResultType ) ProjectPolylineOnPolymesh( MbPolymesh & mesh, const MbPolylinePolymeshProjectParams & params, MbPolylinePolymeshProjectResults & results );
|
||||
|
||||
|
||||
#endif // __ACTION_POLYMESH_H
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ struct MATH_CLASS cdet_query
|
||||
enum cback_res ///< Result code of the callback function
|
||||
{
|
||||
CBACK_VOID
|
||||
, CBACK_SUFFICIENT ///< This code means that an app stops collision query for given pair of lumps.
|
||||
, CBACK_SUFFICIENT ///< This code means that an app stops collision query for the given pair of geometric objects.
|
||||
, CBACK_SKIP ///< Skip testing the given pair.
|
||||
, CBACK_NEED ///< Enable testing the given pair.
|
||||
, CBACK_BREAK ///< Break search of all collisions of the set.
|
||||
@@ -112,9 +112,9 @@ struct MATH_CLASS cdet_query
|
||||
|
||||
struct geom_element ///< Structure representing a collision detection geometry.
|
||||
{
|
||||
cdet_app_item appItem;
|
||||
const MbRefItem * refItem;
|
||||
const MbMatrix3D * wMatrix;
|
||||
cdet_app_item appItem; ///< Application pointer to a geometric object.
|
||||
const MbRefItem * refItem; ///< Pointer to the collided face or grid.
|
||||
const MbMatrix3D * wMatrix; ///< Matrix mapping the collided item to The world CS of the scene.
|
||||
geom_element()
|
||||
: appItem( nullptr )
|
||||
, refItem( nullptr )
|
||||
|
||||
@@ -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 )
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -32,5 +32,12 @@ enum MbeConvResType {
|
||||
cnv_UnsupportedVersion ///< \ru Неподдерживаемая версия формата. \en Unsupported format version.
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Получить строковое описание результата конвертирования.
|
||||
\en Get string description of the result of converting operation.
|
||||
\ingroup Data_Interface
|
||||
*/
|
||||
// ---
|
||||
CONV_FUNC (std::string) MbeConvResTypeToString(MbeConvResType result);
|
||||
|
||||
#endif
|
||||
@@ -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 )
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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 ( )
|
||||
|
||||
@@ -32,6 +32,9 @@ public:
|
||||
/// \ru Конструктор по параметрам. \en Constructor by parameters.
|
||||
MbWrapCurveCreator( const MbCurvesWrappingParams & params );
|
||||
|
||||
private:
|
||||
MbWrapCurveCreator(); // \ru Не реализовано \en Not implemented
|
||||
|
||||
public:
|
||||
virtual ~MbWrapCurveCreator() {};
|
||||
|
||||
@@ -55,11 +58,8 @@ public:
|
||||
bool CreateWireFrame( MbWireFrame *&, MbeCopyMode, RPArray<MbSpaceItem> * items = nullptr ) override;
|
||||
|
||||
private:
|
||||
MbWrapCurveCreator(); // \ru Не реализовано \en Not implemented
|
||||
|
||||
OBVIOUS_PRIVATE_COPY( MbWrapCurveCreator )
|
||||
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbWrapCurveCreator )
|
||||
}; // MbWrapCurveCreator
|
||||
|
||||
|
||||
#endif // __CR_WRAP_CURVE_H
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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() );
|
||||
}
|
||||
|
||||
@@ -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() {}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+119
-3
@@ -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,7 +2235,14 @@ 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 Выдать журнал записывающий вызовы Solver API, а также другие события, имеющие отношение к взаимодействием с солвером.
|
||||
\en Get a logger that recording API calls, as well as other events related to interaction with the solver. \~
|
||||
\note \ru Вызов используется пока только для тестовых целей. Может быть изменен или удален из API в следующих ревизиях.
|
||||
\en The call is used for testing purposes only. It may be changed or removed in future revisions. \~
|
||||
*/
|
||||
//---
|
||||
GCE_FUNC(GCE_journal) GCE_SubscribeJournal( GCE_system gSys, GCE_log_func logFunc, GCE_extra_param extParam );
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
/**
|
||||
|
||||
@@ -30,7 +30,7 @@ using GCE_geom_registered = void (*)( GCE_app_geom ag); ///< Application geom
|
||||
using GCE_geom_unregistered = void (*)( GCE_app_geom ag);
|
||||
using GCE_allow_zero_radius = bool (*)( GCE_app_geom ag); ///< \ru Разрешает окружность нулевого радиуса. \en Allow zero radius of a circle.
|
||||
using GCE_allow_zero_length = bool (*)( GCE_app_geom ag); ///< \ru Разрешает участок кривой или отрезок нулевой длины. \en Allow zero length of a bounded curve or line segments.
|
||||
using GCE_get_lseg_direction = GCE_vec2d (*)(GCE_app_geom ag); ///< \ru Функция, которая выдет направляющий вектор отрезка. \en Function that returns the direction of a line segment.
|
||||
using GCE_get_lseg_direction = GCE_vec2d (*)(GCE_app_geom ag); ///< \ru Функция, которая выдает направляющий вектор отрезка. \en Function that returns the direction of a line segment.
|
||||
using GCE_abort = bool (*)(); ///< Query to interrupt calculations
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
@@ -90,6 +90,11 @@ GCE_FUNC(GCE_result) GCE_Register( GCE_system gSys, const GCE_callback_table & c
|
||||
//---
|
||||
GCE_FUNC(void) GCE_Bind( GCE_system, geom_item, GCE_app_geom );
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
/// Disassociate an application geometry and a solver's descriptor.
|
||||
//---
|
||||
GCE_FUNC(void) GCE_Unbind( GCE_system, geom_item );
|
||||
|
||||
/**
|
||||
\}
|
||||
Constraints2D_API
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
+75
-4
@@ -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 )
|
||||
|
||||
{}
|
||||
};
|
||||
|
||||
@@ -718,6 +747,48 @@ struct GCT_CLASS GCT_diagnostic_pars
|
||||
{}
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
/** \brief \ru Дополнительные данные колбэка #GCE_log_func, интерпретируемые на стороне приложения.
|
||||
\en Additional #GCE_log_func callback data interpreted on the application side. \~
|
||||
\sa #GCE_log_func
|
||||
*/
|
||||
//---
|
||||
struct GCE_CLASS GCE_extra_param
|
||||
{
|
||||
size_t funcId; // Integral identifier of a user-defined callback.
|
||||
void * funcData; // Pointer to an application data structure.
|
||||
GCE_extra_param() { funcId = 0, funcData = 0; }
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
// It represents a journal that logs Solver API transactions.
|
||||
//---
|
||||
struct ItJrnLogger;
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
// It represents a journal that logs Solver API transactions.
|
||||
//---
|
||||
typedef struct
|
||||
{
|
||||
const ItJrnLogger * logger; // Internal C3D Solver logger.
|
||||
GCE_extra_param extra; // Callback extra data interpreted in the application side.
|
||||
} GCE_journal;
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
// Type of log string.
|
||||
//---
|
||||
typedef enum
|
||||
{
|
||||
GCE_LOG_JournalLine /// \ru Строка отчета о вызове Solver API. \en Reporting string about the Solver API call.
|
||||
, GCE_LOG_Message /// \ru Строка передает некоторое информативное сообщение. \en The string notifies that something informative happend.
|
||||
, GCE_LOG_Error /// \ru Строка извещает об ошибочной ситуации. \en Error notification.
|
||||
} GCE_log_type;
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
// Callback function for logging messages from the solver.
|
||||
//---
|
||||
typedef void ( *GCE_log_func )( GCE_journal, GCE_log_type logType, const char* recStr );
|
||||
|
||||
/**
|
||||
\}
|
||||
Constraints2D_API
|
||||
|
||||
+27
-1
@@ -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.
|
||||
@@ -1214,7 +1240,7 @@ struct GCT_diagnostic_pars;
|
||||
It's used for testing purposes only.
|
||||
*/
|
||||
//---
|
||||
GCM_FUNC(const GCT_diagnostic_pars) GCM_DiagnosticPars( GCM_system gSys );
|
||||
GCM_FUNC(GCT_diagnostic_pars) GCM_DiagnosticPars( GCM_system gSys );
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
// Deprecated (2021). Use GCM_GeometryStatus to query about GCM_G_STATUS_Frozen.
|
||||
|
||||
@@ -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 >
|
||||
|
||||
@@ -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 & );
|
||||
|
||||
@@ -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
@@ -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 Статус геометрического объекта.
|
||||
|
||||
@@ -170,6 +170,12 @@ struct MATH_CLASS ActiveFacetsBegEndPair
|
||||
*/
|
||||
struct MATH_CLASS EdgeConstIterator
|
||||
{
|
||||
using iterator_category = std::forward_iterator_tag;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using value_type = MbHalfedgeEdge;
|
||||
using pointer = MbHalfedgeEdge *;
|
||||
using reference = MbHalfedgeEdge &;
|
||||
|
||||
const MbHalfedge & _topo; //< \ru Ссылка на топологию. \en Topology reference.
|
||||
bool _bFirst = true; //< \ru Признак того, что не нужно проверять окончание итерации. \en If true there is no need to check the end of the iteration.
|
||||
size_t _edge = SYS_MAX_T; //< \ru Индекс текущего ребра. \en An actual edge index.
|
||||
@@ -236,10 +242,15 @@ struct MATH_CLASS EdgesAroundFacetBegEndPair
|
||||
*/
|
||||
struct MATH_CLASS VertexFacetConstIterator : EdgeFacetConstIterator
|
||||
{
|
||||
using value_type = MbHalfedgeEdge;
|
||||
using pointer = MbHalfedgeEdge *;
|
||||
using reference = MbHalfedgeEdge &;
|
||||
|
||||
/// \ru Конструктор. \en Constructor.
|
||||
VertexFacetConstIterator( const MbHalfedge & topo, size_t iF, bool begin = true ) noexcept;
|
||||
/// \ru Доступ к данным. \en Data access.
|
||||
const MbHalfedgeVertex & operator*() const noexcept;
|
||||
const MbHalfedgeVertex * operator->() const noexcept;
|
||||
};
|
||||
|
||||
|
||||
|
||||
+2
-1
@@ -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 )
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
};
|
||||
|
||||
|
||||
@@ -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 )
|
||||
{}
|
||||
|
||||
@@ -623,7 +623,7 @@ MATH_FUNC(const char *) C3DFileNameOnly( const char * path );
|
||||
|
||||
|
||||
// Suppress a warning "unreferenced formal parameter"
|
||||
#define C3D_UNUSED_PARAMETER( param ) (void*)(¶m)
|
||||
#define C3D_UNUSED_PARAMETER( param ) (std::ignore = param)
|
||||
|
||||
|
||||
#ifdef C3D_DEBUG
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/**
|
||||
\file
|
||||
\brief Вспомогательный интерфейс для полигональной топологии.
|
||||
|
||||
*/
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __MESH_PROVIDER_H
|
||||
#define __MESH_PROVIDER_H
|
||||
|
||||
#include <mb_cart_point3d.h>
|
||||
|
||||
class MbAttributeContainer;
|
||||
class MbPolymeshTopo;
|
||||
class MbPolymesh;
|
||||
class MbMesh;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Абстрактный контейнер данных полигонального объекта.
|
||||
\en An abstract container for polygonal object data. \~
|
||||
\details \ru Абстрактный контейнер данных полигонального объекта.
|
||||
\en An abstract container for polygonal object data. \~
|
||||
\warning \ru В разработке.
|
||||
\en Under development. \~
|
||||
*/
|
||||
// ---
|
||||
class MATH_CLASS IMeshProvider
|
||||
{
|
||||
protected:
|
||||
/// \ru Конструктор. \en Constructor.
|
||||
IMeshProvider() = default;
|
||||
|
||||
public:
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
virtual ~IMeshProvider() = default;
|
||||
/** \brief \ru Создать экземпляр класса на основе MbMesh.
|
||||
\en Create an object by MbMesh. \~
|
||||
\param[in] mesh - \ru Полигональный геометрический объект.
|
||||
\en A polygonal geometric object. \~
|
||||
\return \ru Возвращает указатель на созданный объект.
|
||||
\en Returns pointer to created object. \~
|
||||
*/
|
||||
static IMeshProvider * Create( const MbMesh & mesh );
|
||||
|
||||
/// \ru Валидны ли данные. \en Returns true if the object is ready to be used.
|
||||
virtual bool IsReady() const = 0;
|
||||
/// \ru Получить количество точек \en Get the number of points.
|
||||
virtual size_t GetPointsCount() const = 0;
|
||||
/// \ru Получить количество нормалей \en Get the number of normals.
|
||||
virtual size_t GetNormalsCount() const = 0;
|
||||
/// \ru Получить точку с индексом index \en Get the point with given index.
|
||||
virtual void GetPoint( size_t index, MbCartPoint3D & point ) const = 0;
|
||||
/// \ru Получить нормаль с индексом index \en Get the normal with given index.
|
||||
virtual void GetNormal( size_t index, MbVector3D & normal ) const = 0;
|
||||
/// \ru Получить количество вершин \en Get the number of normals.
|
||||
virtual size_t GetVerticesCount() const { return GetPointsCount(); }
|
||||
/// \ru Получить количество граней \en Get the number of facets.
|
||||
virtual size_t GetFacetsCount() const = 0;
|
||||
/// \ru Получить индекс точки для вершины с индексом index \en Get point index for the vertex with the given index.
|
||||
virtual size_t GetVertexPointIndex( size_t index ) const = 0;
|
||||
/// \ru Получить количество вершин на грани с индексом index \en Get the number of vertices for the face with the given index.
|
||||
virtual size_t GetFacetVerticesCount( size_t index ) const = 0;
|
||||
/// \ru Получить индекс для вершины с порядковым номером number на грани с индексом index. \en Get the vertex index for the vertex on the facet with the given index with the given position number.
|
||||
virtual size_t GetFacetVertexIndex( size_t index, size_t number ) const = 0;
|
||||
/// \ru Получить флаг наличия нормалей граней. \en Returns true if facets normals exist.
|
||||
virtual bool HasFacetNormals() const { return false; }
|
||||
/// \ru Получить индекс нормали для грани с индексом index \en Get normal index for the facet with the given index.
|
||||
virtual size_t GetFacetNormalIndex( size_t index ) const { return index; }
|
||||
/// \ru Получить флаг наличия нормалей вершин граней \en Returns true if vertices normals exist.
|
||||
virtual bool HasFacetVertexNormals() const { return false; }
|
||||
/// \ru Получить индекс нормали для вершины с порядковым номером number на грани с индексом index. \en Get the vertex normal index for the vertex on the facet with the given index with the given position number.
|
||||
virtual size_t GetFacetVertexNormalIndex( size_t index, size_t number ) const = 0;
|
||||
/// \ru Получить количество групп граней \en Get the number of facet groups.
|
||||
virtual size_t GetFacetGroupsCount() const { return 1; }
|
||||
/// \ru Получить индекс группы для грани с индексом index. \en Get the facet group index for the facet with the given index.
|
||||
virtual size_t GetFacetGroup( size_t /*index*/ ) const { return 0; }
|
||||
/// \ru Получить флаг наличия атрибутов групп граней. \en Returns true if facets groups attributes exist.
|
||||
virtual bool HasFacetGroupAttributes() const { return false; }
|
||||
/// \ru Получить атрибуты для группы граней с индексом index \en Get facets group attributes.
|
||||
virtual void GetFacetGroupAttributes( size_t /*index*/, std::unique_ptr<MbAttributeContainer> & /*cont*/ ) const {}
|
||||
/** \brief \ru Установить атрибуты топологии.
|
||||
\en Set mesh topology attributes. \~
|
||||
\details \ru Предполагается, что объект polymesh содержит аттрибут маппинга от ребер сетки к порядковому номеру вершины на грани MbHalfedgeAttrSizetEdge
|
||||
и атрибут для пометок перевернутых в процессе алгоритма фасетов MbHalfedgeAttrBoolFacet.
|
||||
Среди всех атрибутов данная функция устанавливает только атрибуты нормалей вида MbHalfedgeAttrNormalsVertex.
|
||||
Для установки других атрибутов следует создать наследника этого класса.
|
||||
\en It's assumed that the polymesh object contains MbHalfedgeAttrSizetEdge attribute with edge mapping to the vertex facet position number
|
||||
and MbHalfedgeAttrBoolFacet attribute with bool marks if facets were inverted during topology creation.
|
||||
Among all attributes this function sets up only normals through MbHalfedgeAttrNormalsVertex attribute.
|
||||
To add more attributes an inherited class should be created.
|
||||
\param[in] bNormalsAveraging - \ru Флаг усреднения нормалей по веерам объединенных вершин.
|
||||
\en A flag for normal vectors averaging around merged vertices fans. \~
|
||||
\param[in,out] polymesh - \ru Полигональный геометрический объект.
|
||||
\en A polygonal geometric object. \~
|
||||
*/
|
||||
virtual void SetMeshAttributes( bool bNormalsAveraging, MbPolymeshTopo & polymesh ) const;
|
||||
/** \brief \ru Установить атрибуты сегментации.
|
||||
\en Set attributes mesh segmentation attributes. \~
|
||||
\details \ru Данная функция сохраняет аттрибуты C3D оригинальных групп фасетов.
|
||||
Для установки других атрибутов следует создать наследника этого класса.
|
||||
\en This function saves original C3D attributes from original facet groups.
|
||||
To add more attributes an inherited class should be created.
|
||||
*/
|
||||
virtual void SetSegmAttributes( MbPolymeshTopo & polymesh ) const;
|
||||
/** \brief \ru Установить атрибуты полигонального объекта.
|
||||
\en Set the polygonal object attributes. \~
|
||||
*/
|
||||
virtual void SetPolymeshAttributes( MbPolymesh & /*polymesh*/ ) const {}
|
||||
|
||||
protected:
|
||||
/** \brief \ru Установить нормали сетки без усреднения в вершинах.
|
||||
\en Set mesh normal vectors without averaging. \~
|
||||
*/
|
||||
void InitFacetVertexNormals( MbPolymeshTopo & polymesh ) const;
|
||||
/** \brief \ru Установить нормали сетки с усреднением в вершинах.
|
||||
\en Set mesh normal vectors with averaging. \~
|
||||
*/
|
||||
void InitFacetVertexNormalsWithAveraging( MbPolymeshTopo & polymesh ) const;
|
||||
};
|
||||
#endif // __MESH_PROVIDER_H
|
||||
+743
-332
File diff suppressed because it is too large
Load Diff
@@ -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 Получить константную ссылку на массив вариантов замены граней.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 )
|
||||
@@ -303,28 +304,45 @@ public:
|
||||
\ingroup Polygonal_Objects
|
||||
*/
|
||||
// ---
|
||||
class MATH_CLASS MbRepairInconsistentMeshParams
|
||||
class MATH_CLASS MbRepairInconsistentMeshParams
|
||||
{
|
||||
private:
|
||||
/// \ru Ориентировать нормали вовне, если это возможно. \en Orient normals outward if possible.\~
|
||||
bool _orientOutward;
|
||||
bool _orientOutward;
|
||||
/// \ru Точность объединения вершин (не используется, если отрицательная). \en A tolerance for vertices merging (not used if negative).\~
|
||||
double _tolerance;
|
||||
/// \ru Двуграный угол для расчета нормалей (не используется, если отрицательный). \en A dihedral angle for normal vectors calculation (not used if negative).\~
|
||||
double _angleSharp;
|
||||
/// \ru Флаг усреднения нормалей по веерам объединенных вершин. \en A flag for normal vectors averaging around merged vertices fans.\~
|
||||
bool _bNormalAveraging;
|
||||
|
||||
public:
|
||||
/// \ru Конструктор по-умолчанию. \en Default constructor.\~
|
||||
MbRepairInconsistentMeshParams()
|
||||
: _orientOutward( false )
|
||||
{}
|
||||
/// \ru Конструктор. \en Constructor. \~
|
||||
MbRepairInconsistentMeshParams( bool orientOutward )
|
||||
: _orientOutward( orientOutward )
|
||||
: _orientOutward ( false )
|
||||
, _tolerance ( METRIC_EPSILON )
|
||||
, _angleSharp ( -1. )
|
||||
, _bNormalAveraging( true )
|
||||
{}
|
||||
/// \ru Конструктор. \en Constructor. \~;
|
||||
MbRepairInconsistentMeshParams( bool orientOutward );
|
||||
/// \ru Конструктор. \en Constructor. \~;
|
||||
MbRepairInconsistentMeshParams( double tolerance, bool orientOutward, double sharpAngle, bool normalAveraging );
|
||||
/// \ru Деструктор. \en Destructor. \~
|
||||
~MbRepairInconsistentMeshParams() {}
|
||||
|
||||
/// \ru Переключатель между абсолютной и относительной точностью. \en Switch between absolute and relative accuracy. \~
|
||||
void SetOrientOutward( bool orient ) { _orientOutward = orient; }
|
||||
/// \ru Ориентировать ли нормали вовне \en Whether the accuracy is set to absolute or relative. \~
|
||||
bool IsOrientOutward() const { return _orientOutward; }
|
||||
void SetOrientOutward( bool orient ) { _orientOutward = orient; }
|
||||
/// \ru Ориентировать ли нормали вовне. \en Whether the accuracy is set to absolute or relative. \~
|
||||
bool IsOrientOutward() const { return _orientOutward; }
|
||||
/// \ru Установить точность. \en Set tolerance. \~
|
||||
void SetTolerance( double tolerance ) { _tolerance = tolerance; }
|
||||
/// \ru Получить точность. \en Get tolerance. \~
|
||||
double GetTolerance() const { return _tolerance; }
|
||||
/// \ru Получить угол. \en Get angle. \~
|
||||
double GetSharpAngle() const { return _angleSharp; }
|
||||
/// \ru Усреднять ли нормали. \en Whether normal vectors is to be averaged. \~
|
||||
bool NeedNormalsAveraging() const { return _bNormalAveraging; }
|
||||
|
||||
OBVIOUS_PRIVATE_COPY( MbRepairInconsistentMeshParams );
|
||||
};
|
||||
@@ -1362,12 +1380,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 +1401,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 +1422,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 +1446,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 +1468,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.
|
||||
|
||||
@@ -22,6 +22,7 @@ class MbFaceShell;
|
||||
class MbHalfedgeAttrSizetEdge;
|
||||
class MbHalfedgeAttrDoubleEdge;
|
||||
class MbHalfedgeAttrBoolVertex;
|
||||
class MbPolyline3D;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Параметры ремешинга.
|
||||
@@ -335,7 +336,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 +422,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();
|
||||
@@ -465,4 +477,170 @@ public:
|
||||
OBVIOUS_PRIVATE_COPY( MbMergePolymeshParams );
|
||||
}; // MbMergePolymeshParams
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Параметры сглаживания полигональных объектов.
|
||||
\en Parameters for the polymesh smoothing. \~
|
||||
\details \ru Параметры сглаживания полигональных объектов. \n
|
||||
Параметры содержат информацию о коэффициентах сглаживания, методе сглаживания, максимальном числе итераций,
|
||||
наборе индексов фасетов для сглаживания.
|
||||
\en Parameters for the polymesh smoothing. \n
|
||||
The parameters contain information about the smoothing coefficients, the smoothing method, the maximum number of iterations
|
||||
and the set of facet indices for smoothing. \~
|
||||
\ingroup Polygonal_Objects
|
||||
\warning \ru В разработке.
|
||||
\en Under development. \~
|
||||
*/
|
||||
// ---
|
||||
class MATH_CLASS MbMeshSmoothingParams
|
||||
{
|
||||
public:
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Перечисление методов сглаживания.
|
||||
\en Enumeration for smoothing methods. \~
|
||||
*/
|
||||
// ---
|
||||
enum class MethodSmoothMesh
|
||||
{
|
||||
smoothTaubin, ///< \ru Метод Таубина. \en Taubin's method.
|
||||
smoothLaplas ///< \ru Метод Лапласа. \en Laplace method.
|
||||
};
|
||||
|
||||
private:
|
||||
MethodSmoothMesh _method; ///< \ru Метод сглаживания сетки. \en Mesh smoothing method.
|
||||
double _lambda; ///< \ru Коэффициент сжатия, используемый на нечетных шагах в "taubin smoothing". \en The compression factor used in odd steps in "taubin smoothing".
|
||||
double _mu; ///< \ru Коэффициент расширения, используемый на четных шагах в "taubin smoothing". \en The expansion factor used in even steps in "taubin smoothing".
|
||||
size_t _maxIter; ///< \ru Максимальное число итераций. \en Maximum iteration number.
|
||||
bool _bFixBorders; ///< \ru Сохранять границы. \en Save borders.
|
||||
c3d::IndicesVector _facets; ///< \ru Индексы фасетов. Если набор фасетов пустой, то сглаживается вся сетка. \en Facet indices to smooth. If the facet set is empty, the entire mesh is smoothed.
|
||||
c3d::IndicesVector _fixVertices; ///< \ru Индексы фиксированных вершин. \en Fixed vertex indices.
|
||||
|
||||
public:
|
||||
/// \ru Конструктор. \en Constructor.
|
||||
MbMeshSmoothingParams()
|
||||
: _method ( MethodSmoothMesh::smoothTaubin )
|
||||
, _lambda ( 0.33 )
|
||||
, _mu ( -0.34 )
|
||||
, _maxIter ( 100 )
|
||||
, _bFixBorders ( true )
|
||||
, _facets ( )
|
||||
, _fixVertices ( )
|
||||
{}
|
||||
/// \ru Конструктор по параметрам. \en Constructor by parameters.
|
||||
MbMeshSmoothingParams( MethodSmoothMesh method,
|
||||
double lambda,
|
||||
double mu,
|
||||
size_t maxIter,
|
||||
bool bFixBorders,
|
||||
const c3d::IndicesVector & facets,
|
||||
const c3d::IndicesVector & fixVertices )
|
||||
: _method ( method )
|
||||
, _lambda ( lambda )
|
||||
, _mu ( mu )
|
||||
, _maxIter ( maxIter )
|
||||
, _bFixBorders ( bFixBorders )
|
||||
, _facets ( facets )
|
||||
, _fixVertices ( fixVertices )
|
||||
{}
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
~MbMeshSmoothingParams() {}
|
||||
|
||||
public:
|
||||
// \ru Установить метод сглаживания. \en Set the smoothing method. \~
|
||||
void SetMethod( MethodSmoothMesh method ) { _method = method; }
|
||||
// \ru Установить коэффициент сжатия. \en Set the compression factor. \~
|
||||
void SetLambda( double lambda ) { _lambda = lambda; }
|
||||
// \ru Установить коэффициент расширения. \en Set the expansion factor. \~
|
||||
void SetMu( double mu ) { _mu = mu; }
|
||||
// \ru Установить максимальное число итераций. \en Set the maximum iteration number. \~
|
||||
void SetMaxIter( size_t maxIter ) { _maxIter = maxIter; }
|
||||
// \ru Установить флаг сохранения границ. \en Set the save borders flag. \~
|
||||
void SetFixBorders( bool bFixBorders ) { _bFixBorders = bFixBorders; }
|
||||
// \ru Установить набор индексов фасетов для сглаживания. \en Set facet indices to smooth. \~
|
||||
void SetFacets( const c3d::IndicesVector & facets ) { _facets = facets; }
|
||||
// \ru Установить набор фиксированных вершин. \en Set the fixed vertex indices. \~
|
||||
void SetFixVertices( const c3d::IndicesVector & fixVertices ) { _fixVertices = fixVertices; }
|
||||
// \ru Получить метод сглаживания. \en Get the the smoothing method. \~
|
||||
MethodSmoothMesh GetMethod() const { return _method; }
|
||||
// \ru Получить коэффициент сжатия. \en Get the the compression factor. \~
|
||||
double GetLambda() const { return _lambda; }
|
||||
// \ru Получить коэффициент расширения. \en Get the expansion factor. \~
|
||||
double GetMu() const { return _mu; }
|
||||
// \ru Получить максимальное число итераций. \en Get the maximum iteration number. \~
|
||||
size_t GetMaxIter() const { return _maxIter; }
|
||||
// \ru Получить флаг сохранения границ. \en Get the save borders flags. \~
|
||||
bool GetFixBorders() const { return _bFixBorders; }
|
||||
// \ru Получить набор индексов фасетов для сглаживания. \en Get facet indices to smooth. \~
|
||||
const c3d::IndicesVector & GetFacets() const { return _facets; }
|
||||
// \ru Получить набор фиксированных вершин. \en Get the fixed vertex indices. \~
|
||||
const c3d::IndicesVector & GetFixVertices() const { return _fixVertices; }
|
||||
|
||||
OBVIOUS_PRIVATE_COPY( MbMeshSmoothingParams );
|
||||
};
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Параметры проецирования полилинии на полигональный объект.
|
||||
\en Parameters for projecting a polyline on a polymesh. \~
|
||||
\details \ru Параметры проецирования полилинии на полигональный объект. \n
|
||||
Параметры содержат проецируемую полилинию.
|
||||
\en Parameters for projecting a polyline on a polymesh. \n
|
||||
Parameters contain a polyline to be projected. \~
|
||||
\warning \ru В разработке.
|
||||
\en Under development. \~
|
||||
*/
|
||||
// ---
|
||||
class MATH_CLASS MbPolylinePolymeshProjectParams : public MbPrecision
|
||||
{
|
||||
private:
|
||||
const MbPolyline3D & _polyline; ///< \ru Полилиния. \en Polyline. \~
|
||||
|
||||
public:
|
||||
/// \ru Конструктор по параметрам. \en Constructor by parameters.
|
||||
MbPolylinePolymeshProjectParams( const MbPolyline3D & polyline )
|
||||
: MbPrecision( )
|
||||
, _polyline ( polyline )
|
||||
{}
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
~MbPolylinePolymeshProjectParams() {}
|
||||
|
||||
public:
|
||||
// \ru Получить полилинию. \en Get the polyline. \~
|
||||
const MbPolyline3D & GetPolyline() const { return _polyline; }
|
||||
|
||||
OBVIOUS_PRIVATE_COPY( MbPolylinePolymeshProjectParams );
|
||||
};
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Результаты проецирования полилинии на полигональный объект.
|
||||
\en Results of projecting a polyline on a polymesh. \~
|
||||
\details \ru Результаты проецирования полилинии на полигональный объект. \n
|
||||
Результаты содержат массив цепочек пар рёбер вдоль проекции.
|
||||
\en Results of projecting a polyline on a polymesh. \n
|
||||
Results contain paths of edge pairs along the projection. \~
|
||||
\warning \ru В разработке.
|
||||
\en Under development. \~
|
||||
*/
|
||||
// ---
|
||||
class MATH_CLASS MbPolylinePolymeshProjectResults
|
||||
{
|
||||
private:
|
||||
std::vector<c3d::IndicesPairsVector> _paths; ///< \ru Цепочки пар рёбер. \en Paths of edge pairs. \~
|
||||
|
||||
public:
|
||||
/// \ru Конструктор. \en Constructor.
|
||||
MbPolylinePolymeshProjectResults() : _paths() {}
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
~MbPolylinePolymeshProjectResults() {}
|
||||
|
||||
public:
|
||||
// \ru Получить полилинию. \en Get the polyline. \~
|
||||
const std::vector<c3d::IndicesPairsVector> & GetEdgePairPaths() const { return _paths; }
|
||||
// \ru Получить полилинию. \en Get the polyline. \~
|
||||
std::vector<c3d::IndicesPairsVector> & GetEdgePairPaths() { return _paths; }
|
||||
|
||||
OBVIOUS_PRIVATE_COPY( MbPolylinePolymeshProjectResults );
|
||||
};
|
||||
|
||||
#endif // __OP_POLYMESH_PARAMETERS_H
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() );
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
|
||||
class MbPolymeshTopo;
|
||||
class MbFaceShell;
|
||||
class IMeshProvider;
|
||||
class MbRepairInconsistentMeshParams;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Полигональный объект модели - представление топологии в виде halfedge объекта.
|
||||
@@ -39,6 +41,8 @@ public:
|
||||
explicit MbPolymesh();
|
||||
/// \ru Конструктор по топологии. \en Constructor by topology.
|
||||
explicit MbPolymesh( MbPolymeshTopo * pTopo );
|
||||
/// \ru Конструктор. \en Constructor.
|
||||
explicit MbPolymesh( const IMeshProvider & provider, const MbRepairInconsistentMeshParams & params );
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
virtual ~MbPolymesh();
|
||||
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
#include <reference_item.h>
|
||||
#include <halfedge.h>
|
||||
|
||||
class MbMesh;
|
||||
class MbFaceShell;
|
||||
class MbCube;
|
||||
class MbAttributeContainer;
|
||||
class MbMesh;
|
||||
class MbFaceShell;
|
||||
class MbCube;
|
||||
class MbAttributeContainer;
|
||||
class IMeshProvider;
|
||||
class MbRepairInconsistentMeshParams;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Представление топологии полигональной модели в виде halfedge.
|
||||
@@ -74,8 +76,20 @@ public:
|
||||
\en A polygonal geometric object. \~
|
||||
\param[in] toleranceSew - \ru Метрическая погрешность совпадения точек.
|
||||
\en Metric tolerance of points coincidence. \~.
|
||||
\return \ru Возвращает указатель на созданный объект.
|
||||
\en Returns pointer to created object. \~
|
||||
*/
|
||||
static MbPolymeshTopo * Create( const MbMesh & mesh, double toleranceSew );
|
||||
/** \brief \ru Создать экземпляр класса на основе контейнера данных и параметров лечения.
|
||||
\en Create an object by mesh provider and repairing parameters. \~
|
||||
\param[in] provider - \ru Контейнер данных полигонального объекта.
|
||||
\en A container for polygonal object data. \~
|
||||
\param[in] params - \ru Параметры лечения.
|
||||
\en Repairing parameters. \~.
|
||||
\return \ru Возвращает указатель на созданный объект.
|
||||
\en Returns pointer to created object. \~
|
||||
*/
|
||||
static MbPolymeshTopo * Create( const IMeshProvider & provider, const MbRepairInconsistentMeshParams & params );
|
||||
/// \ru Деструктор. \en Destructor.
|
||||
virtual ~MbPolymeshTopo() {}
|
||||
|
||||
@@ -367,6 +381,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
@@ -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
|
||||
);
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -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 );
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -195,6 +195,30 @@ public:
|
||||
static MbChannelSurface * CreateKerbLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
|
||||
MbSurfaceCurve & curv2, bool sgn2, bool byFirst, VERSION vers );
|
||||
|
||||
/// \ru Создать поверхность скругления по поверхности и кромке с касанием
|
||||
/// \en
|
||||
/** \brief \ru Создать поверхность скругления по двум поверхностям с указанием кромки касания
|
||||
\en Create a fillet surface by two support surfaces, specifying the kerb-curve of touching \~
|
||||
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
|
||||
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
|
||||
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности
|
||||
\en Support curve at parameters of the first surface \~
|
||||
\param[in] sgn1 - \ru Ориентация первой опорной поверхности.
|
||||
\en The orientation of the first support surface. \~
|
||||
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности
|
||||
\en Support curve at parameters of the second surface \~
|
||||
\param[in] sgn2 - \ru Ориентация второй опорной поверхности.
|
||||
\en The orientation of the second support surface. \~
|
||||
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
|
||||
\en True - curve2 curve is fillet, false - curve1 curve is fillet. \~
|
||||
\param[in] vers - \ru Версия.
|
||||
\en Version. \~
|
||||
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
|
||||
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
|
||||
*/
|
||||
static MbChannelSurface * CreateKerbTouchingFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
|
||||
MbSurfaceCurve & curv2, bool sgn2, bool byFirst, VERSION vers );
|
||||
|
||||
protected:
|
||||
/// \ru Конструктор для наследников обычной поверхности скругления. \en Constructor for inheritors of ordinary fillet surface.
|
||||
MbChannelSurface( MbSurfaceCurve & curv1, double d1,
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <tool_multithreading.h>
|
||||
|
||||
|
||||
class MbFunction;
|
||||
class MATH_CLASS MbFunction;
|
||||
struct MbFilletSurfaceCacheData;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -193,7 +193,6 @@ public:
|
||||
MbFilletSurface( MbSurface & surf1, MbCurve & curv1,
|
||||
MbSurface & surf2, MbCurve & curv2,
|
||||
MbCurve3D & curv0, double d1, double d2, MbeSmoothForm fm, double cn, bool ev );
|
||||
|
||||
|
||||
/** \brief \ru Создать поверхность скругления по двум поверхностям с постоянным радиусом.
|
||||
\en Create a fillet surface by two surfaces with a constant radius. \~
|
||||
@@ -218,7 +217,6 @@ public:
|
||||
*/
|
||||
static MbFilletSurface * CreateSimpleFillet( double rad, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, double conicFact, VERSION vers );
|
||||
|
||||
|
||||
/** \brief \ru Создать поверхность скругления по двум поверхностям "дугой эллипса".
|
||||
\en Create a fillet surface by two surfaces by an "arc of an ellipse". \~
|
||||
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
|
||||
@@ -238,7 +236,6 @@ public:
|
||||
*/
|
||||
static MbFilletSurface * CreateEllipticalFillet( MbSurfaceCurve & curv1, double rad1, MbSurfaceCurve & curv2, double rad2, VERSION vers );
|
||||
|
||||
|
||||
/** \brief \ru Создать поверхность скругления по двум поверхностям с постоянной хордой.
|
||||
\en Create a fillet surface by two surfaces with a constant chord. \~
|
||||
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
|
||||
@@ -260,7 +257,6 @@ public:
|
||||
*/
|
||||
static MbFilletSurface * CreateChordFillet( double h, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
|
||||
|
||||
|
||||
/** \brief \ru Создать поверхность скругления по поверхности и кромке с постоянным радиусом
|
||||
\en Create fillet surface a constant radius by support surface and support kerb-curve. \~
|
||||
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
|
||||
@@ -286,7 +282,6 @@ public:
|
||||
*/
|
||||
static MbFilletSurface * CreateKerbFillet( double rad, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, bool byFirst, double conicFact, VERSION vers );
|
||||
|
||||
|
||||
/// \ru Создать поверхность скругления по поверхности и кромке с касанием
|
||||
/// \en
|
||||
/** \brief \ru Создать поверхность скругления по двум поверхностям с указанием кромки касания
|
||||
@@ -309,6 +304,7 @@ public:
|
||||
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
|
||||
*/
|
||||
static MbFilletSurface * CreateKerbTouchingFillet( MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, bool byFirst, VERSION vers );
|
||||
|
||||
protected:
|
||||
/// \ru Конструктор для наследников обычной поверхности скругления. \en Constructor for inheritors of ordinary fillet surface.
|
||||
MbFilletSurface( MbSurfaceCurve & curv1, double d1,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -445,7 +445,7 @@ public:
|
||||
\return \ru true - Нормаль установлена.
|
||||
\en True - The Normal installed. \~
|
||||
*/
|
||||
bool IsSetNormal( bool atStart ) { return atStart ? border1.setNormal : border2.setNormal; }
|
||||
bool IsSetNormal( bool atStart ) const { return atStart ? border1.setNormal : border2.setNormal; }
|
||||
/** \} */
|
||||
|
||||
protected:
|
||||
|
||||
@@ -252,6 +252,64 @@ public:
|
||||
VERSION vers,
|
||||
MbResultType & resType );
|
||||
|
||||
/** \brief \ru Создание поверхности переменного сечения на заданном участке опорной кривой.
|
||||
\en The mutable section surface creation on the given section of the reference curve. \~
|
||||
\details \ru Создание поверхности переменного сечения по опорной кривой и двум направляющим на заданном участке опорной кривой.
|
||||
\en The mutable section surface creation by reference curve and guide curves on the given section of the reference curve. \~
|
||||
\param[in] rc - \ru Опорная кривая.
|
||||
\en The reference curve (spine). \~
|
||||
\param[in] g1 - \ru Первая направляющая кривая.
|
||||
\en The first guide curve. \~
|
||||
\param[in] g2 - \ru Вторая направляющая кривая (g1==g2 совпадает с первой при cs_Round).
|
||||
\en The second guide curve (g1==g2 the same first guide for cs_Round). \~
|
||||
\param[in] c0 - \ru Дополнительная направляющая кривая (может быть nullptr).
|
||||
\en The additional guide curve (may be nullptr). \~
|
||||
\param[in] f - \ru Форма сечения поверхности.
|
||||
\en The form of the surface section. \~
|
||||
\param[in] sense - \ru Направление нормали поверхности направляющей кривой (для guide1==guide2).
|
||||
\en The normal direction of guide curve surface (for guide1==guide2). \~
|
||||
\param[in] uBeg - \ru Минимальное значение первого параметра поверхности.
|
||||
\en The minimum value of the first surface parameter. \~
|
||||
\param[in] uEnd - \ru Максимальное значение первого параметра поверхности.
|
||||
\en The maximum value of the first surface parameter. \~
|
||||
\param[in] func - \ru Функция управления сечением поверхности.
|
||||
\en Section control function. \~
|
||||
\param[in] patt - \ru Образующая кривая при form==cs_Shape.
|
||||
\en Forming curve for form==cs_Shape. \~
|
||||
\param[in] rcTBeg - \ru Начальный параметр опорной кривой.
|
||||
\en Start parameter of the reference curve. \~
|
||||
\param[in] rcTEnd - \ru Конечный параметр опорной кривой.
|
||||
\en End parameter of the reference curve. \~
|
||||
\param[in] buildSag - \ru Угловое отклонение при движении по кривым и поверхностям.
|
||||
\en Angular deviation while moving along curves and surfaces. \~
|
||||
\param[in] accuracy - \ru Точность построения.
|
||||
\en The accuracy of building. \~
|
||||
\param[in] countBin - \ru Минимальное количество шагов при движении по опорной кривой.
|
||||
\en Minimum number of steps while moving along the reference curve. \~
|
||||
\param[in] vers - \ru Версия поверхности.
|
||||
\en The surface version. \~
|
||||
\param[out] resType - \ru Код ошибки построения.
|
||||
\en Result code of building. \~
|
||||
\result \ru Возвращает построенную поверхность.
|
||||
\en Returns the constructed surface. \~
|
||||
*/
|
||||
static MbSectionSurface * Create( const MbCurve3D & rc,
|
||||
const MbFunction * r1, const MbFunction * r2,
|
||||
const MbCurve3D & g1, const MbCurve3D & g2,
|
||||
const MbCurve3D * c0,
|
||||
MbeSectionShape f, MbeSmoothForm sf,
|
||||
bool sense,
|
||||
double uBeg, double uEnd,
|
||||
const MbFunction * func,
|
||||
const MbCurve * patt,
|
||||
double rcTBeg,
|
||||
double rcTEnd,
|
||||
double buildSag,
|
||||
double accuracy,
|
||||
uint32 countBin,
|
||||
VERSION vers,
|
||||
MbResultType & resType );
|
||||
|
||||
/** \ru \name Общие функции геометрического объекта
|
||||
\en \name Common functions of a geometric object
|
||||
\{ */
|
||||
@@ -370,6 +428,7 @@ public:
|
||||
MbCurve3D * CurveU( double v, MbRect1D *pRgn, bool bApprox = true ) const override; // \ru Пространственная копия линии v = const. \en Spatial copy of 'v = const'-line.
|
||||
MbCurve3D * CurveV( double u, MbRect1D *pRgn, bool bApprox = true ) const override; // \ru Пространственная копия линии u = const. \en Spatial copy of 'u = const'-line.
|
||||
|
||||
MbeParamDir GetFilletDirection( double accuracy = METRIC_REGION ) const override; // \ru Направление поверхности скругления. \en Direction of fillet surface.
|
||||
// \ru Построить касательные и нормальные плейсменты конструктивных плоскостей. \en Construct tangent and normal placements of constructive planes.
|
||||
bool CreateNormalPlacements ( const MbVector3D & axisZ, double angle, SArray<MbPlacement3D> & places, VERSION version = Math::DefaultMathVersion() ) const override;
|
||||
bool CreateTangentPlacements( const MbVector3D & axisZ, SArray<MbPlacement3D> & places ) const override;
|
||||
|
||||
+10
-10
@@ -68,6 +68,7 @@ private:
|
||||
MbVector3D ort1; ///< \ru Вектор базиса в точке ortParam направляющей. \en A basis vector in the point ortParam of the spine.
|
||||
MbVector3D ort2; ///< \ru Вектор базиса в точке ortParam направляющей. \en A basis vector in the point ortParam of the spine.
|
||||
VERSION version; ///< \ru Версия расчета вектора direction. \en Version of vector "direction" calculation.
|
||||
bool quadrExt; ///< \ru Флаг параболического продления. \en Flag of parabolic extension.
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/** \brief \ru Вспомогательные данные.
|
||||
@@ -332,13 +333,13 @@ public:
|
||||
when getting out of the spine curve domain bounds.
|
||||
\{ */
|
||||
/// \ru Точка на кривой. \en Point on the curve.
|
||||
void PointOn ( double & t, MbCartPoint3D & p ) const { curve->PointOn(t,p); }
|
||||
void PointOn ( double & t, MbCartPoint3D & p ) const;
|
||||
/// \ru Первая производная. \en The first derivative.
|
||||
void FirstDer ( double & t, MbVector3D & p ) const { curve->FirstDer(t,p); }
|
||||
void FirstDer ( double & t, MbVector3D & p ) const;
|
||||
/// \ru Вторая производная. \en The second derivative.
|
||||
void SecondDer( double & t, MbVector3D & p ) const { curve->SecondDer(t,p); }
|
||||
void SecondDer( double & t, MbVector3D & p ) const;
|
||||
/// \ru Третья производная. \en Third derivative.
|
||||
void ThirdDer ( double & t, MbVector3D & p ) const { curve->ThirdDer(t,p); }
|
||||
void ThirdDer ( double & t, MbVector3D & p ) const;
|
||||
/** \} */
|
||||
/** \ru \name Функции для работы внутри и вне области определения направляющей кривой
|
||||
функции _PointOn, _FirstDer... корректируют параметры
|
||||
@@ -348,17 +349,16 @@ public:
|
||||
when getting out of the spine curve domain bounds.
|
||||
\{ */
|
||||
/// \ru Точка на кривой. \en Point on the curve.
|
||||
void _PointOn ( double t, MbCartPoint3D & p ) const { curve->_PointOn(t,p); }
|
||||
void _PointOn ( double t, MbCartPoint3D & p ) const;
|
||||
/// \ru Первая производная. \en The first derivative.
|
||||
void _FirstDer ( double t, MbVector3D & p ) const { curve->_FirstDer(t,p); }
|
||||
void _FirstDer ( double t, MbVector3D & p ) const;
|
||||
/// \ru Вторая производная. \en The second derivative.
|
||||
void _SecondDer( double t, MbVector3D & p ) const { curve->_SecondDer(t,p); }
|
||||
void _SecondDer( double t, MbVector3D & p ) const;
|
||||
/// \ru Третья производная. \en Third derivative.
|
||||
void _ThirdDer ( double t, MbVector3D & p ) const { curve->_ThirdDer(t,p); }
|
||||
void _ThirdDer ( double t, MbVector3D & p ) const;
|
||||
/// \ru Вычислить значения точки и производных для заданного параметра. \en Calculate point and derivatives of object for given parameter. \~
|
||||
virtual void Explore( double & t, bool ext,
|
||||
MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const
|
||||
{ curve->Explore( t, ext,pnt, fir, sec, thir ); }
|
||||
MbCartPoint3D & pnt, MbVector3D & fir, MbVector3D * sec, MbVector3D * thir ) const;
|
||||
/** \} */
|
||||
/** \ru \name Функции движения по направляющей кривой
|
||||
\en \name Function of moving by spine curve
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -158,7 +158,7 @@ public:
|
||||
virtual MbeTopologyType IsA() const = 0;
|
||||
|
||||
/// \ru Подготовить объект к записи. \en Prepare an object for writing.
|
||||
void PrepareWrite() const { SetRegistrable( GetUseCount() > 1 ? registrable : noRegistrable ); }
|
||||
void PrepareWrite() const { SetRegistrable( (GetUseCount() > 1) ? registrable : noRegistrable ); }
|
||||
|
||||
bool IsAVertex() const { return (IsA() == tt_Vertex); } ///< \ru Это вершина? \en Is it a vertex?
|
||||
bool IsAWireEdge() const { return (IsA() == tt_Edge); } ///< \ru Это ребро каркаса? \en Is it an edge of wireframe?
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -29,7 +29,7 @@
|
||||
// Version information ------------------------------------------------------
|
||||
|
||||
#define FREEIMAGE_MAJOR_VERSION 3
|
||||
#define FREEIMAGE_MINOR_VERSION 17
|
||||
#define FREEIMAGE_MINOR_VERSION 18
|
||||
#define FREEIMAGE_RELEASE_SERIAL 0
|
||||
|
||||
// Compiler options ---------------------------------------------------------
|
||||
@@ -75,7 +75,7 @@
|
||||
// or define any of FREEIMAGE_BIGENDIAN and FREEIMAGE_LITTLEENDIAN directly
|
||||
// to specify the desired endianness.
|
||||
#if (!defined(FREEIMAGE_BIGENDIAN) && !defined(FREEIMAGE_LITTLEENDIAN))
|
||||
#if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || defined(__BIG_ENDIAN__)
|
||||
#if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || (defined(__BYTE_ORDER) && __BYTE_ORDER==__ORDER_BIG_ENDIAN__) || defined(__BIG_ENDIAN__)
|
||||
#define FREEIMAGE_BIGENDIAN
|
||||
#endif // BYTE_ORDER
|
||||
#endif // !FREEIMAGE_[BIG|LITTLE]ENDIAN
|
||||
@@ -731,6 +731,9 @@ typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id);
|
||||
#define PSD_DEFAULT 0
|
||||
#define PSD_CMYK 1 //! reads tags for separated CMYK (default is conversion to RGB)
|
||||
#define PSD_LAB 2 //! reads tags for CIELab (default is conversion to RGB)
|
||||
#define PSD_NONE 0x0100 //! save without any compression
|
||||
#define PSD_RLE 0x0200 //! save using RLE compression
|
||||
#define PSD_PSB 0x2000 //! save using Adobe Large Document Format (use | to combine with other save flags)
|
||||
#define RAS_DEFAULT 0
|
||||
#define RAW_DEFAULT 0 //! load the file as linear RGB 48-bit
|
||||
#define RAW_PREVIEW 1 //! try to load the embedded JPEG preview with included Exif Data or default to RGB 24-bit
|
||||
@@ -873,13 +876,19 @@ DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source);
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count);
|
||||
|
||||
// Filetype request routines ------------------------------------------------
|
||||
// File type request routines ------------------------------------------------
|
||||
|
||||
DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0));
|
||||
DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeU(const wchar_t *filename, int size FI_DEFAULT(0));
|
||||
DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0));
|
||||
DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0));
|
||||
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename);
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename);
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle);
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream);
|
||||
|
||||
|
||||
// Image type request routine -----------------------------------------------
|
||||
|
||||
DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib);
|
||||
@@ -979,8 +988,11 @@ DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *so
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels);
|
||||
DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels);
|
||||
@@ -1092,8 +1104,6 @@ DLL_API BOOL DLL_CALLCONV FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY* sr
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
// rotation and flipping
|
||||
/// @deprecated see FreeImage_Rotate
|
||||
DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle);
|
||||
DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor FI_DEFAULT(NULL));
|
||||
DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask);
|
||||
DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib);
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user