- C3d aggiornamento librerie ( 118029).
This commit is contained in:
SaraP
2025-04-02 08:30:05 +02:00
parent 05ca0d3376
commit 9b2d995ef5
90 changed files with 1335 additions and 341 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ class MbMesh;
class MbSurface;
class MbSNameMaker;
class MbFace;
class MATH_CLASS MbCollection;
class MbCollection;
struct MbCurvature;
+22
View File
@@ -33,6 +33,7 @@ class MbPolylinePolymeshProjectParams;
class MbPolylinePolymeshProjectResults;
class MbFillClosedCurveParams;
class MbFillPolymeshHoleParams;
class MbPolymeshNormalsParams;
//------------------------------------------------------------------------------
@@ -428,6 +429,7 @@ MATH_FUNC( MbResultType ) ProjectPolylineOnPolymesh( MbPolymesh & mesh, const Mb
*/ // ---
MATH_FUNC( MbResultType ) FillClosedCurve( const MbFillClosedCurveParams & params, MbPolymesh & patch );
//------------------------------------------------------------------------------
/** \brief \ru Заполнить отверстие полигонального объекта.
\en Fill a polygonal object hole. \~
@@ -449,4 +451,24 @@ MATH_FUNC( MbResultType ) FillClosedCurve( const MbFillClosedCurveParams & param
MATH_FUNC( MbResultType ) FillPolymeshHole( const MbFillPolymeshHoleParams & params, MbPolymesh & mesh );
//------------------------------------------------------------------------------
/** \brief \ru Рассчитать нормали в вершинах полигонального объекта.
\en Calculate normal vectors at the vertices of a polygonal object. \~
\details \ru Рассчитать нормали в вершинах полигонального объекта.
В результате операции у полигонального объекта появится атрибут нормалей, если его не было,
и обновится, если был.
\en Calculate normal vectors at the vertices of a polygonal object.
As a result of the operation, the polygonal object will have a attribute with normals if it did not exist,
and will be updated if it did. \~
\param[in] params - \ru Параметры расчета нормалей.
\en Parameters for calculation of normal vectors. \~
\param[in-out] mesh - \ru Полигональный объект.
\en A polygonal object. \~
\return \ru Код результата операции.
\en Returns the operation result code. \~
\warning \ru В разработке.
\en Under development. \~
*/ // ---
MATH_FUNC( MbResultType ) CalculatePolymeshNormals( const MbPolymeshNormalsParams & params, MbPolymesh & mesh );
#endif // __ACTION_POLYMESH_H
+1 -1
View File
@@ -53,7 +53,7 @@ class MbPartSolidIndices;
class MbSpine;
class MbMesh;
class MbGrid;
class MATH_CLASS MbCollection;
class MbCollection;
class IProgressIndicator;
+2 -2
View File
@@ -18,9 +18,9 @@
class MbCurve;
class MbLineSegment;
class MATH_CLASS MbArc;
class MbArc;
class MbLine;
class MATH_CLASS MbTempCircle;
class MbTempCircle;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -25,7 +25,7 @@ class MbVector;
class MbCurve;
class MbCartPoint;
class MbPlacement3D;
class MATH_CLASS MbBezier;
class MbBezier;
class MbNurbs;
class MbCurve3D;
class MbMatrix3D;
+5 -5
View File
@@ -17,14 +17,14 @@
class MbConstraintSystem;
class MATH_CLASS MtGeomArgument;
class MATH_CLASS MtGeomConstraint;
class MATH_CLASS MtConstraintIter;
class MtGeomArgument;
class MtGeomConstraint;
class MtConstraintIter;
struct ItAssemblyReactor;
struct ItAssemblyImportData;
struct ItModelVisitor;
class MbModelTreeReader;
class MATH_CLASS MbAssembly;
class MbAssembly;
namespace c3d // namespace C3D
{
@@ -115,7 +115,7 @@ public:
void SetBasisPoints( const MbControlData3D & ) override; // \ru Изменить объект по контрольным точкам. \en Change the object by control points.
// \ru Выдать локальную систему координат. Объект сборки не имеет локальной системы координат, для него всегда возвращается глобальная система координат. \en Get the local coordinate system. An assembly object does not have a local coordinate system, the global coordinate system is always returned for it.
inline bool GetPlacement( MbPlacement3D & p ) const { p = MbPlacement3D::global; return true; }
bool GetPlacement( MbPlacement3D & p ) const override { p = MbPlacement3D::global; return true; }
// \ru Перестроить объект по журналу построения. \en Rebuild object according to the history tree.
bool RebuildItem( MbeCopyMode sameShell, RPArray<MbSpaceItem> * items, IProgressIndicator * progInd ) override;
// \ru Создать полигональный объект - упрощенную копию данного объекта. \en Create a polygonal object - a simplified copy of the given object.
+1 -1
View File
@@ -17,7 +17,7 @@
#include <templ_visitor.h>
class MATH_CLASS MbSolid;
class MbSolid;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -14,7 +14,7 @@
#include <attr_common_attribute.h>
#include <mb_placement3d.h>
class MATH_CLASS MbBaseHotPointAttribute;
class MbBaseHotPointAttribute;
namespace c3d // namespace C3D
+3 -3
View File
@@ -19,9 +19,9 @@
#include <tool_cstring.h>
#include <tool_mutex.h>
class MATH_CLASS MbExternalAttribute;
class MATH_CLASS MbUserAttribute;
class MATH_CLASS MbFixAttrSet;
class MbExternalAttribute;
class MbUserAttribute;
class MbFixAttrSet;
//------------------------------------------------------------------------------
+2 -2
View File
@@ -21,12 +21,12 @@ class MbVector3D;
class MbAxis3D;
class MbMatrix3D;
class MbProperties;
class MATH_CLASS MbAttributeContainer;
class MbAttributeContainer;
class MbRegDuplicate;
class MbRegTransform;
class MATH_CLASS MbAttribute;
class MbAttribute;
namespace c3d // namespace C3D
{
typedef SPtr<MbAttribute> AttrSPtr;
+6 -6
View File
@@ -262,8 +262,8 @@ public:
*/
void Group( cdet_app_item fst, cdet_app_item snd )
{
fst = _Parent( fst );
snd = _Parent( snd );
fst = PivoteItem_( fst );
snd = PivoteItem_( snd );
if ( fst < snd )
{
std::swap( fst, snd );
@@ -279,7 +279,7 @@ public:
void ExludeGroup( cdet_app_item member )
{
if ( excluded == CDET_APP_NULL )
excluded = _Parent( member );
excluded = PivoteItem_( member );
else
Group( excluded, member );
}
@@ -336,7 +336,7 @@ private:
return CBACK_VOID;
}
cdet_app_item _Parent( cdet_app_item appItem ) const
cdet_app_item PivoteItem_( cdet_app_item appItem ) const
{
std::map<cdet_app_item,cdet_app_item>::const_iterator iter = groups.find( appItem );
if ( iter == groups.end() || (iter->second == iter->first) )
@@ -345,12 +345,12 @@ private:
}
C3D_ASSERT( iter->second < iter->first );
return _Parent( iter->second );
return PivoteItem_( iter->second );
}
bool _SameGroups( cdet_app_item fst, cdet_app_item snd ) const
{
return _Parent( fst ) == _Parent( snd );
return PivoteItem_( fst ) == PivoteItem_( snd );
}
OBVIOUS_PRIVATE_COPY( cdet_collided_faces );
+1 -1
View File
@@ -17,7 +17,7 @@
#include <map>
class MATH_CLASS MpEdge;
class MpEdge;
class ProgressBarWrapper;
class IProgressIndicator;
+38 -19
View File
@@ -16,12 +16,14 @@
#include <instance_item.h>
#include <conv_annotation_item.h>
#include <conv_predefined.h>
#include <conv_requestor.h>
#include <tool_cstring.h>
#include <assisting_item.h>
#include <vector>
#include <map>
//class IConverterMetadataReceiver;
class MbPlacement3D;
class MbName;
@@ -116,6 +118,16 @@ public:
*/
virtual ModelPartPtr GetInstancePart( ) = 0;
/** \brief \ru Получить обработчик метаданных.
\en Get metadata provider. \~
\details \ru Метаданные используются в тех случаях, когда не вписываются не в геометрическую, ни в атрибутивную модели.
\en Metadata are used in cases they don't fin in neigher geometric nor attribute-based models. \~
\return \ru Реализацию для приема метаданных с целью дальнейшей обработки.
\en Implementation of metadata processor. \~
*/
virtual SPtr<IConverterMetadataReceiver> GetMetadataReceiver() { return {}; };
/** \brief \ru Завершить импорт и сохранить документ.
\en Complete the import and save the document. \~
\return \ru true, если операция прошла успешно, false в противном случае.
@@ -198,44 +210,48 @@ public:
// ---
class CONV_CLASS C3dModelDocument: public ItModelDocument {
ModelPartPtr part; ///< \ru Представление в виде детали. \en Representation as detail.
ModelAssemblyPtr assembly; ///< \ru Представление в виде сборки. \en Representation as assembly.
map_of_visual_items visualItems; ///< \ru Элементы аннотации. \en Annotation items.
c3d::ItemSPtr rawContent; ///< \ru Передаваемый модельный элемент. \en Converted model item.
SPtr<C3DPmiToItem> pmiToItem; ///< \ru Включены ли элементы аннотации непосредственно в модельный элемент. \en Model item contains PMI.
ModelPartPtr m_part{}; ///< \ru Представление в виде детали. \en Representation as detail.
ModelAssemblyPtr m_assembly{}; ///< \ru Представление в виде сборки. \en Representation as assembly.
map_of_visual_items m_visualItems{}; ///< \ru Элементы аннотации. \en Annotation items.
c3d::ItemSPtr m_rawContent{}; ///< \ru Передаваемый модельный элемент. \en Converted model item.
SPtr<C3DPmiToItem> m_pmiToItem{}; ///< \ru Включены ли элементы аннотации непосредственно в модельный элемент. \en Model item contains PMI.
SPtr<IConverterMetadataReceiver> m_metadataReceiver{}; ///< \ru Обработчик метаданных. \en Metadata provider.
public:
C3dModelDocument( SPtr<C3DPmiToItem> pmiToContent = SPtr<C3DPmiToItem>() ); ///< \ru Конструктор. \en Conscructor.
virtual ~C3dModelDocument(); ///< \ru Деструктор. \en Descructor.
~C3dModelDocument() override; ///< \ru Деструктор. \en Descructor.
// Является ли сборкой.
virtual bool IsAssembly() const;
// Является ли сборкой.
bool IsAssembly() const override;
// Пуст ли.
virtual bool IsEmpty() const;
bool IsEmpty() const override;
// Задать модель напрямую.
virtual void SetContent( MbItem* /*content*/);
void SetContent( MbItem* /*content*/) override;
// Выдать модель напрямую.
virtual MbItem * GetContent();
MbItem * GetContent() override;
// Создать сборку.
virtual ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName );
ModelAssemblyPtr CreateAssembly( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) override;
// Создать деталь.
virtual ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName );
ModelPartPtr CreatePart( const c3d::ItemsSPtrVector & componentItems, const c3d::string_t& fileName ) override;
// Выдать сборку.
virtual ModelAssemblyPtr GetInstanceAssembly( );
ModelAssemblyPtr GetInstanceAssembly( ) override;
// Выдать деталь.
virtual ModelPartPtr GetInstancePart( );
ModelPartPtr GetInstancePart( ) override;
// Завершить импорт.
virtual bool FinishImport( IProgressIndicator * );
bool FinishImport( IProgressIndicator * ) override;
// Выдать элементы аннотации.
DEPRECATE_DECLARE
virtual map_of_visual_items GetAnnotationItems( eTextForm ) const;
map_of_visual_items GetAnnotationItems( eTextForm ) const override;
// Задать элементы аннотации.
DEPRECATE_DECLARE
virtual void SetAnnotationItems( const map_of_visual_items& vi );
void SetAnnotationItems( const map_of_visual_items& vi ) override;
// Открыть документ.
DEPRECATE_DECLARE
virtual void OpenDocument();
void OpenDocument() override;
// Получить интерфейс передачи метаданных.
SPtr<IConverterMetadataReceiver> GetMetadataReceiver() override;
/// \ru Включены ли PMI в элемент модели. \en If PMI is included into model item.
SPtr<C3DPmiToItem> PmiInContent() const;
@@ -247,6 +263,9 @@ public:
/// \ru Сбросить итераторы вставок. \en Reset instances itrerators.
void ResetInstanceIterators();
/// \ru Задать особенный обработчик метаданных. \en Set specific metadata provider.
void SetMetadataReceiver( SPtr<IConverterMetadataReceiver> const & );
/// \ru Инициализировать документ по двойнику. \en Build document by twin.
void InitDocumentByTwin( MbModel const& );
};
+52 -3
View File
@@ -119,16 +119,65 @@ public:
//------------------------------------------------------------------------------
/**
\brief \ru Интерфейс передачи метаданных.
\en Metadata transfer. \~
/** \brief \ru Интерфейс передачи метаданных.
\en Metadata transfer. \~
\details \ru Метаданные используются в тех случаях, когда исходные данные от
конвертеров плохо вписываются в геометрическую и атрибутивную модель. Пример метаданных -
альтернативные представления дерева модели.
\en Metadata are used in cases when geometric or attribute model doesn't
match structure of information from converters. Alternate tree sutrucure is a sample of
metadata. \~
*/
// ---
class CONV_CLASS IConverterMetadataReceiver : public MbRefItem
{
public:
/** \brief \ru Инициализировать передачу метаданных для элемента.
\en Initialize metadata transfer for item. \~
\details \ru Вызывается перед началом передачи метаданных, относящихся к элементу негеометрических данных, с целью подготовки приемника.
\en Should be called before metadata related to non-geometric element to prepare the reciever. \~
\param[in] category - \ru Категория, к которой относится элемент.
\en Category element belongs to.\~
\param[in] nameInCategory - \ru Название элемента внутри категории.
\en Element's name in category.\~
\param[in] contentType - \ru Представление передаваемых метаданных.
\en Representation of metadata.\~
\return \ru Признак, возможна ли передача метаданных.
\en Wether the metadata transfer is possible. \~
\note \ru Ожидается, что вызывается однократно для каждой пары категория - название.
\en Expected it is called once for each category - name pair. \~
*/
virtual bool InitMetadataForItem(const c3d::string_t& category, const c3d::string_t& nameInCategory, const c3d::string_t& contentType) = 0;
/** \brief \ru Завершить передачу метаданных для элемента.
\en Finalize metadata transfer for item. \~
\details \ru Вызывается после передачи метаданных, относящихся к элементу негеометрических данных, с целью освободить ресурсы.
\en Should be called after metadata related to non-geometric element to free related resources. \~
\param[in] category - \ru Категория, к которой относится элемент.
\en Category element belongs to.\~
\param[in] nameInCategory - \ru Название элемента внутри категории.
\en Element's name in category.
\note \ru Ожидается, что вызывается не более одного раза для каждой пары категория - название и только в случае, если передача была инициализирована успешно.
\en Expected it is called once for each category - name pair in case transfer is possible or not called otherwise. \~
*/
virtual void CloseMetadataForItem(const c3d::string_t& category, const c3d::string_t& nameInCategory) = 0;
/** \brief \ru Передать блок метаданных для элемента.
\en Transfer metadata block for item. \~
\param[in] category - \ru Категория, к которой относится элемент.
\en Category element belongs to.\~
\param[in] nameInCategory - \ru Название элемента внутри категории.
\en Element's name in category.\~
\param[in] metadataBuffer - \ru Адрес бинарного буфера, содержащего данные блока.
\en Binary buffer containing block data.\~
\param[in] bufferCapacity - \ru Длина бинарного буфера, содержащего данные блока.
\en Lenght of binary buffer containing block data.\~
\note \ru Возможен многократный вызов для каждой пары категория - название.
\en Many calls for each category - name are possible. \~
*/
virtual void TransferMetadataForItem(const c3d::string_t& category, const c3d::string_t& nameInCategory, const char* metadataBuffer, unsigned long int bufferCapacity) = 0;
};
+1 -1
View File
@@ -16,7 +16,7 @@
#include <name_item.h>
class MATH_CLASS MbNamedAttributeContainer;
class MbNamedAttributeContainer;
class MbFaceShell;
+1 -1
View File
@@ -15,7 +15,7 @@
class MbPlacement3D;
class MATH_CLASS MbCurveBoundedSurface;
class MbCurveBoundedSurface;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -14,7 +14,7 @@
#include <sheet_metal_param.h>
class MATH_CLASS MbCurveBoundedSurface;
class MbCurveBoundedSurface;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -16,7 +16,7 @@
#include <sheet_metal_param.h>
class MATH_CLASS MbCurveBoundedSurface;
class MbCurveBoundedSurface;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -15,7 +15,7 @@
#include <sheet_metal_param.h>
class MATH_CLASS MbCurveBoundedSurface;
class MbCurveBoundedSurface;
//------------------------------------------------------------------------------
+3 -3
View File
@@ -18,9 +18,9 @@
class MbVertex;
class MbCurveEdge;
class MATH_CLASS MbPointFrame;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbCreator;
class MbPointFrame;
class MbWireFrame;
class MbCreator;
namespace c3d // namespace C3D
+2 -2
View File
@@ -26,8 +26,8 @@ class MbAxis3D;
class MbMatrix3D;
class MbSpaceItem;
class MbFaceShell;
class MATH_CLASS MbWireFrame;
class MATH_CLASS MbPointFrame;
class MbWireFrame;
class MbPointFrame;
class MbProperties;
struct MbControlData3D;
class MbRegDuplicate;
+1 -1
View File
@@ -24,7 +24,7 @@ class SimpleNameArray;
class MbCurveIntoNurbsInfo;
class MATH_CLASS MbContour;
class MbContour;
namespace c3d // namespace C3D
{
typedef SPtr<MbContour> PlaneContourSPtr;
+1 -1
View File
@@ -21,7 +21,7 @@
class SimpleNameArray;
class MATH_CLASS MbContour3D;
class MbContour3D;
namespace c3d // namespace C3D
{
typedef SPtr<MbContour3D> SpaceContourSPtr;
+33 -19
View File
@@ -12,21 +12,21 @@
#include <curve3d.h>
#include <mb_cube.h>
#include <tool_mutex.h>
#include <tool_multithreading.h>
#include <cur_surface_curve.h>
class MbMatrix;
class MbContour;
class MbSurface;
class MbSurfaceCurve;
class MbContour3D;
class MbCurveTessellation;
class MbCurveIntoNurbsInfo;
class MbSegmentsSearchTree;
class MbMatrix;
class bContour;
class MbSurface;
class MbSurfaceCurve;
class MbContour3D;
class MbCurveTessellation;
class MbCurveIntoNurbsInfo;
class MbSegmentsSearchTree;
class MATH_CLASS MbContourOnSurface;
class MbContourOnSurface;
namespace c3d // namespace C3D
{
typedef SPtr<MbContourOnSurface> ContourOnSurfaceSPtr;
@@ -65,28 +65,42 @@ protected :
mutable atomic_double area; ///< \ru Площадь 2D-контура со знаком. \en The area of 2D-contour with sign.
mutable MbCube cube; ///< \ru Габаритный куб. \en Bounding box.
mutable atomic_double metricLength; ///< \ru Метрическая длина. \en The metric length.
mutable MbSegmentsSearchTree * searchTree; ///< \ru Дерево габаритов для ускорения поиска сегментов. \en A tree of bounding boxes for segment search acceleration.
private:
//------------------------------------------------------------------------------
/** \brief \ru Вспомогательные данные.
\en Auxiliary data. \~
/** \brief \ru Дерево габаритов для ускорения поиска сегментов. Вспомогательные данные.
\en A tree of bounding boxes for segment search acceleration. An auxiliary data. \~
\details \ru Вспомогательные данные служат для ускорения работы объекта.
\en Auxiliary data are used for fast calculations. \n \~
*/
// ---
class MbSearchTreeAuxiliaryData : public AuxiliaryData {
public:
MbSegmentsSearchTree * searchTree;
MbSearchTreeAuxiliaryData();
MbSearchTreeAuxiliaryData( const MbSearchTreeAuxiliaryData & init );
virtual ~MbSearchTreeAuxiliaryData();
};
mutable CacheManager<MbSearchTreeAuxiliaryData> searchTreeCache; /// \ru Кэш дерева габаритов. \en A cache for the tree of bounding boxes.
//------------------------------------------------------------------------------
/** \brief \ru Разбивка кривой. Вспомогательные данные.
\en Curve tessellation. An auxiliary data. \~
\details \ru Вспомогательные данные служат для ускорения работы объекта.
\en Auxiliary data are used for fast calculations. \n \~
*/
// ---
class MbContourOnSurfaceAuxiliaryData : public AuxiliaryData {
public:
std::vector< SPtr<MbCurveTessellation> > tessellation; ///< \ru Разбивка кривой. \en Curve tessellation..
std::vector< SPtr<MbCurveTessellation> > tessellation;
MbContourOnSurfaceAuxiliaryData();
MbContourOnSurfaceAuxiliaryData( const MbContourOnSurfaceAuxiliaryData & init );
virtual ~MbContourOnSurfaceAuxiliaryData() {}
};
mutable CacheManager<MbContourOnSurfaceAuxiliaryData> cache;
mutable CacheManager<MbContourOnSurfaceAuxiliaryData> cache; /// Кэш разбивки кривой.\en A cache for the curve tessellation.
public :
/// \ru Конструктор по поверхности, контуру и флагу использования оригинала контура. \en Constructor by surface, contour and flag of using original contour.
@@ -375,7 +389,7 @@ private:
bool FindNearestSegmentsByTree( const MbCartPoint & point, std::vector<size_t> & indFound ) const; /// \ru Поиск ближайших к точке сегментов с помощью дерева габаритов на плоскости. \en Nearest to point segment search with bounding box tree in 2D space.
bool FindNearestSegmentsByTree3D( const MbCartPoint3D & point, const size_t & indStart, const size_t & indEnd, std::vector<size_t> & indFound ) const; /// \ru Поиск ближайших к точке сегментов с помощью дерева габаритов в пространстве. \en Nearest to point segment search with bounding box tree in 3D space.
void CacheReset() const; // \ru Удалить кэши. \en Delete caches.
void TessCacheReset() const; // \ru Удалить кэши. \en Delete caches.
friend void MbSurfaceCurve::SetTesselation( const MbContourOnSurface & contour, size_t indSegment ); // \ru Установить разбиение из контура. \en Set tessellation from contour.
+2 -2
View File
@@ -16,8 +16,8 @@
#include <mb_cart_point3d.h>
class MATH_CLASS MbBreaksPart;
class MATH_CLASS MbBreak;
class MbBreaksPart;
class MbBreak;
//------------------------------------------------------------------------------
+5 -5
View File
@@ -312,10 +312,10 @@ private:
void Init( const MbCurve3D & sCurve, bool sameSpaceCurve, const MbSurface & surface,
const MbCurve & pCurve, bool samePlaneCurve, size_t vers,
MbRegDuplicate * iReg = nullptr );
void CheckPoint ( double & t, bool ext, MbCartPoint & cPoint ) const; // \ru Обнулить данные, вычислить точку \en Set data to zero, calculate point.
void CheckFirst ( double & t, bool ext, MbVector & cFirst ) const; // \ru Вычислить производную \en Calculate derivative
void CheckSecond( double & t, bool ext, MbVector & cSecond ) const; // \ru Вычислить производную \en Calculate derivative
void CheckThird ( double & t, bool ext, MbVector & cThird ) const; // \ru Вычислить производную \en Calculate derivative
void CheckPoint ( double & t, bool ext, MbCartPoint & cPoint, MbProjCurveAuxiliaryData * loccache ) const; // \ru Обнулить данные, вычислить точку \en Set data to zero, calculate point.
void CheckFirst ( double & t, bool ext, MbVector & cFirst, MbProjCurveAuxiliaryData * loccache ) const; // \ru Вычислить производную \en Calculate derivative
void CheckSecond( double & t, bool ext, MbVector & cSecond, MbProjCurveAuxiliaryData * loccache ) const; // \ru Вычислить производную \en Calculate derivative
void CheckThird ( double & t, bool ext, MbVector & cThird, MbProjCurveAuxiliaryData * loccache ) const; // \ru Вычислить производную \en Calculate derivative
bool CalculatePoint( const MbCartPoint3D & sPoint, MbCartPoint & cPoint,
MbCartPoint3D & pnt, MbVector3D & uDer, MbVector3D & vDer,
MbVector3D & uuDer, MbVector3D & vvDer, MbVector3D & uvDer, MbVector3D * nor ) const; // \ru Вычислить данные для точки. \en Calculate point.
@@ -338,7 +338,7 @@ private:
void PlaneCaseExplore( double t, size_t ord, bool single ) const;
// \ru Расчет в точке.
// \en Calculation at a point.
void Explore( double & t, bool ext, size_t ord, bool single ) const;
void Explore( double & t, bool ext, size_t ord, bool single, MbProjCurveAuxiliaryData * loccache ) const;
// \ru Определение типа проецирования. \en Determining the type of projection
void SetProjType();
// \ru Обновить связь кривой и поверхности. \en Refresh curve-to-surface relationship.
+2 -2
View File
@@ -23,8 +23,8 @@ class MbRect;
class MbPlacement3D;
class MbCurve;
class MbSurface;
class MATH_CLASS MbSurfaceIntersectionCurve;
class MATH_CLASS MbContourOnSurface;
class MbSurfaceIntersectionCurve;
class MbContourOnSurface;
class MbCurveTessellation;
class MbCurveIntoNurbsInfo;
+28 -1
View File
@@ -16,6 +16,7 @@
#include <curve.h>
#include <utility>
#include <array>
#include <set>
#include <tool_multithreading.h>
#include <templ_sptr.h>
@@ -135,7 +136,33 @@ private :
}
~SpaceCurveAuxiliaryData() {}
};
mutable CacheManager<SpaceCurveAuxiliaryData> spaceCurveCache; ///< \ru Кэш пространственной аппроксимационной кривой. \en Cache of a spatial approximating curve. \~
//------------------------------------------------------------------------------
/** \brief \ru Класс кэша пространственной аппроксимационной кривой.
\en Class for a cache of the spatial approximating curve. \~
\details \ru Класс кэша пространственной аппроксимационной кривой.
\en Class for a cache of the spatial approximating curve. \~
*/
// ---
class SpaceCurveCacheManager : public CacheManager<SpaceCurveAuxiliaryData> {
std::set< SPtr<MbCurve3D> > curvesCache;
public:
#ifdef CACHE_DELETE_LOCK
SpaceCurveCacheManager( bool createLock = false ) : CacheManager<SpaceCurveAuxiliaryData>( createLock ) {}
#else
SpaceCurveCacheManager( bool createLock = true ) : CacheManager<SpaceCurveAuxiliaryData>( createLock ) {}
#endif
SpaceCurveCacheManager( const CacheManager & m ) : CacheManager<SpaceCurveAuxiliaryData> ( m ) {}
bool ResetCacheData() final { bool res = CacheManager<SpaceCurveAuxiliaryData>::ResetCacheData(); curvesCache.clear(); return res; }
void PreserveSpaceCurve( SPtr<MbCurve3D> & curve ) {
curvesCache.insert( curve );
}
};
mutable SpaceCurveCacheManager spaceCurveCache; ///< \ru Кэш пространственной аппроксимационной кривой. \en Cache of a spatial approximating curve. \~
MbSurfaceCurve curveOne; ///< \ru Кривая на первой поверхности. \en Curve on the first surface.
MbSurfaceCurve curveTwo; ///< \ru Кривая на второй поверхности. \en Curve on the second surface.
+5 -5
View File
@@ -29,18 +29,18 @@
class MbPlacement;
class MATH_CLASS MbNurbs;
class MATH_CLASS MbLine;
class MATH_CLASS MbContour;
class MbNurbs;
class MbLine;
class MbContour;
class MbPolygon;
class MbCrossPoint;
class MATH_CLASS MbCurveExtensionParameters;
class MbCurveExtensionParameters;
class MbDimAccuracy;
class MbCurveIntoNurbsInfo;
struct MbNurbsParameters;
class MATH_CLASS MbCurve;
class MbCurve;
namespace c3d // namespace C3D
{
typedef SPtr<MbCurve> PlaneCurveSPtr;
+3 -3
View File
@@ -34,15 +34,15 @@
class MbCurve;
class MbSurface;
class MbPolygon3D;
class MATH_CLASS MbNurbs3D;
class MbNurbs3D;
class MbPlacement3D;
class MATH_CLASS MbCurveExtensionParameters3D;
class MbCurveExtensionParameters3D;
class MbDimAccuracy;
class MbCurveIntoNurbsInfo;
struct MbNurbsParameters;
class MATH_CLASS MbCurve3D;
class MbCurve3D;
namespace c3d // namespace C3D
{
typedef SPtr<MbCurve3D> SpaceCurveSPtr;
+1 -1
View File
@@ -24,7 +24,7 @@ class MbProperties;
class MbRegTransform;
class MATH_CLASS MbFunction;
class MbFunction;
namespace c3d // namespace C3D
{
typedef SPtr<MbFunction> FunctionSPtr;
+48 -1
View File
@@ -636,7 +636,7 @@ GCE_FUNC(geom_item) GCE_PointOf( GCE_system gSys, geom_item g, point_type pnt );
\en Vector coordinates. \~
*/
//---
GCE_FUNC(GCE_vec2d) GCE_GetVectorValue( GCE_system gSys, geom_item g, query_geom_type vType );
GCE_FUNC(GCE_vec2d) GCE_GetVectorValue( GCE_system gSys, geom_item g, subgeom_type vType );
//----------------------------------------------------------------------------------------
/** \brief \ru Получить текущие координаты точки.
@@ -762,6 +762,53 @@ GCE_FUNC(bool) GCE_SetCoordValue( GCE_system gSys, geom_item g, coord_name cName
//---
GCE_FUNC(bool) GCE_SetVarValue( GCE_system gSys, var_item var, double val );
//----------------------------------------------------------------------------------------
/** \brief \ru Изменить вес контрольной точки сплайна.
\en Change the weight of the spline control point. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] spline - \ru Сплайн или его инстанс.
\en Spline or its instances. \~
\param[in] pntIdx - \ru Индекс контрольной точки сплайна.
\en Index of control point of the spline. \~
\param[in] weight - \ru Вес контрольной точки сплайна.
\en Weight of spline control point. \~
\details \ru Метод изменяет вес контрольной точки сплайна и всех его экземпляров, связанных друг с
другом одним или более паттернами (GCE_PATTERN) образованными с помощью методов
#GCE_AddPatterned, #GCE_AddInstance.
\en The method changes the weight of the spline control point and all its instances
connected to each other by one or more patterns (GCE_PATTERN) formed using the
methods #GCE_AddPatterned, #GCE_AddInstance. \~
\note \ru Функция действует на сплайны (GCE_SPLINE), а также на кривые типов GCE_BOUNDED_CURVE,
GCE_OFFSET_CURVE, GCE_INSTANCE, основанных на сплайне. Если сплайн является элементом
паттерна, то вместе с ним поменяется вес остальных сплайнов, связанных друг с другом
с помощью методов #GCE_AddPatterned, #GCE_AddInstance.
\en The function is applied to splines (GCE_SPLINE), as well as to curves of types
GCE_BOUNDED_CURVE, GCE_OFFSET_CURVE, GCE_INSTANCE, based on a spline.
If a spline is an element of a pattern, the weight of other splines connected with each other
using methods #GCE_AddPatterned, #GCE_AddInstance will change together with it. \~
*/
//---
GCT_FUNC(void) GCE_SetWeight( GCE_system gSys, geom_item spline, size_t pntIdx, double weight );
//----------------------------------------------------------------------------------------
/** \brief \ru Выдать вес контрольной точки сплайна.
\en Get the weight of the spline control point. \~
\param[in] gSys - \ru Система ограничений.
\en System of constraints. \~
\param[in] spline - \ru Сплайн или его инстанс.
\en Spline or its instances. \~
\param[in] pntIdx - \ru Индекс контрольной точки сплайна.
\en Index of control point of the spline. \~
\details \ru Метод возвращает вес контрольной точки сплайна.
\en The method returns the weight of the control point of the spline. \~
*/
//---
GCT_FUNC(double) GCE_WeightOf( GCE_system gSys, geom_item spline, size_t pntIdx );
//----------------------------------------------------------------------------------------
/** \brief \ru Дескриптор контрольной точки сплайна по индексу.
\en Descriptor of spline control point by index \~
+9 -7
View File
@@ -136,22 +136,21 @@ typedef enum
/*
The values below are used only within the solver.
*/
, GCE_DIRECTION ///< \ru Направляющий вектор эллипса (направление "большой" полуоси ) или паттерна. \en Vector of ellipse direction (direction of "major" semiaxis) or pattern.
, GCE_L_NORMAL ///< \ru Вектор нормали линейного объекта. \en Normal vector of a linear geometry entity.
, GCE_DIRECTION ///< \ru Направляющий вектор эллипса (направление "большой" полуоси ) или паттерна. \en Vector of ellipse direction (direction of "major" semiaxis) or pattern.
, GCE_L_NORMAL ///< \ru Вектор нормали линейного объекта. \en Normal vector of a linear geometry entity.
/** \brief \ru Единичный вектор ориентации: Нормаль прямой, направление "большой" полуоси эллипса.
\en Unit vector of orientation: Normal of a line, direction of "major" semiaxis of ellipse. \~
*/
, GCE_ORIENTATION
, GCE_BASE_CURVE
} query_geom_type;
} subgeom_type;
//----------------------------------------------------------------------------------------
/** \brief \ru Тип запрашиваемой точки (используется, как подмножество значений query_geom_type).
\en Type of the requested point (used as subset of values query_geom_type).
/** \brief \ru Тип запрашиваемой точки (используется, как подмножество значений subgeom_type).
\en Type of the requested point (used as subset of values subgeom_type).
*/
//---
typedef query_geom_type point_type;
typedef subgeom_type point_type;
//----------------------------------------------------------------------------------------
/** \brief \ru Перечисление координат геометрических объектов.
@@ -807,6 +806,9 @@ typedef void ( *GCE_log_func )( GCE_journal, GCE_log_type logType, const char* r
Constraints2D_API
*/
using query_geom_type = subgeom_type; // // Deprecated alias
#endif // __GCE_TYPES_H
// eof
+8 -8
View File
@@ -14,14 +14,14 @@
#include <mesh_halfedge_attr.h>
#include <mesh_halfedge_segm_attr.h>
struct MATH_CLASS ActiveEdgesBegEndPair;
struct MATH_CLASS ActiveVerticesBegEndPair;
struct MATH_CLASS ActiveFacetsBegEndPair;
struct MATH_CLASS EdgesAroundFacetBegEndPair;
struct MATH_CLASS VerticesAroundFacetBegEndPair;
struct MATH_CLASS EdgesAroundVertexBegEndPair;
struct MATH_CLASS VerticesAroundVertexBegEndPair;
struct MATH_CLASS FacetsAroundVertexBegEndPair;
struct ActiveEdgesBegEndPair;
struct ActiveVerticesBegEndPair;
struct ActiveFacetsBegEndPair;
struct EdgesAroundFacetBegEndPair;
struct VerticesAroundFacetBegEndPair;
struct EdgesAroundVertexBegEndPair;
struct VerticesAroundVertexBegEndPair;
struct FacetsAroundVertexBegEndPair;
//-------------------------------------------------------------------------------
/** \brief \ru Топология полигональной сетки в виде half edge.
+1
View File
@@ -13,6 +13,7 @@
#include <math_define.h>
#include <io_tape.h>
//-------------------------------------------------------------------------------
/** \brief \ru Базовый класс элемента топологии полигональной сетки.
\en Base class for a polygon mesh topology elementary unit.
-1
View File
@@ -12,7 +12,6 @@
#include <halfedge.h>
class MbHalfedge;
/** \brief \ru Итератор по ребрам топологии для поддержки range-based for.
\en Edge iterator for haldedge range based for support
+272
View File
@@ -0,0 +1,272 @@
////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Итераторы для использования range-based-for в Halfedge сегментации.
\en Iterators with range-based-for support to use in a HalfEdge segmentation class \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __HALFEDGE_SEGM_RANGE_ITERATORS_H
#define __HALFEDGE_SEGM_RANGE_ITERATORS_H
#include <halfedge.h>
class MbHalfedgeSegmentation;
/** \brief \ru Итератор по ребрам сегментации для поддержки range-based for.
\en Subregion iterator for haldedge range based for support
*/
struct MATH_CLASS ActiveEdgeSegmConstIterator
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
size_t _edge = SYS_MAX_T; //< \ru Индекс текущего segmentation cycle. \en An actual segmentation edge index.
/** \brief \ru Конструктор. \en Constructor.
\param[in] segm - \ru Сегментация. \en Halfedge segmentation.
\param[in] begin - \ru Если true создает начальный итератор, иначе - конечный.
\en If true creates begin iterator, creates end iterator otherwise.
*/
ActiveEdgeSegmConstIterator( const MbHalfedgeSegmentation & segm, bool begin = true ) noexcept;
/// \ru Оператор инкремента. \en An increment operator.
ActiveEdgeSegmConstIterator & operator ++() noexcept;
/// \ru Оператор сравнения. \en A comparison operator.
bool operator != ( const ActiveEdgeSegmConstIterator & it ) const noexcept;
/// \ru Доступ к данным. \en Data access.
const MbHalfedgeEdge & operator*() const noexcept;
};
/** \brief \ru Объект хранящий begin() и end() для итерации по циклам сегментации для поддержки range-based for.
\en Storage for begin-end pair to support halfedge range-based for iteration
*/
struct MATH_CLASS ActiveEdgesSegmBegEndPair
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
/// \ru Констуктор. \en Constructor.
ActiveEdgesSegmBegEndPair( const MbHalfedgeSegmentation & segm ) noexcept
: _segm( segm )
{
}
/// \ru Начальный итератор. \en Begin iterator.
ActiveEdgeSegmConstIterator begin() const noexcept
{
return ActiveEdgeSegmConstIterator( _segm );
}
/// \ru Конечный итератор. \en End Iterator.
ActiveEdgeSegmConstIterator end() const noexcept
{
return ActiveEdgeSegmConstIterator( _segm, false );
}
};
/** \brief \ru Итератор по вершинам сегментации для поддержки range-based for.
\en Subregion iterator for haldedge range based for support
*/
struct MATH_CLASS ActiveVertexSegmConstIterator
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
size_t _vertex = SYS_MAX_T; //< \ru Индекс текущего segmentation cycle. \en An actual segmentation edge index.
/** \brief \ru Конструктор. \en Constructor.
\param[in] segm - \ru Сегментация. \en Halfedge segmentation.
\param[in] begin - \ru Если true создает начальный итератор, иначе - конечный.
\en If true creates begin iterator, creates end iterator otherwise.
*/
ActiveVertexSegmConstIterator( const MbHalfedgeSegmentation & segm, bool begin = true ) noexcept;
/// \ru Оператор инкремента. \en An increment operator.
ActiveVertexSegmConstIterator & operator ++() noexcept;
/// \ru Оператор сравнения. \en A comparison operator.
bool operator != ( const ActiveVertexSegmConstIterator & it ) const noexcept;
/// \ru Доступ к данным. \en Data access.
const MbHalfedgeVertex & operator*() const noexcept;
};
/** \brief \ru Объект хранящий begin() и end() для итерации по вершинам сегментации для поддержки range-based for.
\en Storage for begin-end pair to support halfedge range-based for iteration
*/
struct MATH_CLASS ActiveVertexesSegmBegEndPair
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
/// \ru Констуктор. \en Constructor.
ActiveVertexesSegmBegEndPair( const MbHalfedgeSegmentation & segm ) noexcept
: _segm( segm )
{
}
/// \ru Начальный итератор. \en Begin iterator.
ActiveVertexSegmConstIterator begin() const noexcept
{
return ActiveVertexSegmConstIterator( _segm );
}
/// \ru Конечный итератор. \en End Iterator.
ActiveVertexSegmConstIterator end() const noexcept
{
return ActiveVertexSegmConstIterator( _segm, false );
}
};
/** \brief \ru Итератор по циклам сегментации для поддержки range-based for.
\en Subregion iterator for haldedge range based for support
*/
struct MATH_CLASS ActiveLoopSegmConstIterator
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
size_t _iLoopSegm = SYS_MAX_T; //< \ru Индекс текущего segmentation cycle. \en An actual segmentation cycle index.
/** \brief \ru Конструктор. \en Constructor.
\param[in] segm - \ru Сегментация. \en Halfedge segmentation.
\param[in] begin - \ru Если true создает начальный итератор, иначе - конечный.
\en If true creates begin iterator, creates end iterator otherwise.
*/
ActiveLoopSegmConstIterator( const MbHalfedgeSegmentation & segm, bool begin = true ) noexcept;
/// \ru Оператор инкремента. \en An increment operator.
ActiveLoopSegmConstIterator & operator ++() noexcept;
/// \ru Оператор сравнения. \en A comparison operator.
bool operator != ( const ActiveLoopSegmConstIterator & it ) const noexcept;
/// \ru Доступ к данным. \en Data access.
const MbSegmentationLoop & operator*() const noexcept;
};
/** \brief \ru Объект хранящий begin() и end() для итерации по циклам сегментации для поддержки range-based for.
\en Storage for begin-end pair to support halfedge range-based for iteration
*/
struct MATH_CLASS ActiveLoopsSegmBegEndPair
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
/// \ru Констуктор. \en Constructor.
ActiveLoopsSegmBegEndPair( const MbHalfedgeSegmentation & segm ) noexcept
: _segm( segm )
{
}
/// \ru Начальный итератор. \en Begin iterator.
ActiveLoopSegmConstIterator begin() const noexcept
{
return ActiveLoopSegmConstIterator( _segm );
}
/// \ru Конечный итератор. \en End Iterator.
ActiveLoopSegmConstIterator end() const noexcept
{
return ActiveLoopSegmConstIterator( _segm, false );
}
};
/** \brief \ru Итератор по подрегионам сегментации для поддержки range-based for.
\en Subregion iterator for haldedge range based for support
*/
struct MATH_CLASS ActiveSubRegionConstIterator
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
size_t _iSubregion = SYS_MAX_T; //< \ru Индекс текущего подрегиона. \en An actual subregion index.
/** \brief \ru Конструктор. \en Constructor.
\param[in] segm - \ru Сегментация. \en Halfedge segmentation.
\param[in] begin - \ru Если true создает начальный итератор, иначе - конечный.
\en If true creates begin iterator, creates end iterator otherwise.
*/
ActiveSubRegionConstIterator( const MbHalfedgeSegmentation & segm, bool begin = true ) noexcept;
/// \ru Оператор инкремента. \en An increment operator.
ActiveSubRegionConstIterator & operator ++() noexcept;
/// \ru Оператор сравнения. \en A comparison operator.
bool operator != ( const ActiveSubRegionConstIterator & it ) const noexcept;
/// \ru Доступ к данным. \en Data access.
const MbSegmentationSubRegion & operator*() const noexcept;
};
/** \brief \ru Объект хранящий begin() и end() для итерации по подрегионам для поддержки range-based for.
\en Storage for begin-end pair to support halfedge range-based for iteration
*/
struct MATH_CLASS ActiveSubRegionsBegEndPair
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
/// \ru Констуктор. \en Constructor.
ActiveSubRegionsBegEndPair( const MbHalfedgeSegmentation & segm ) noexcept
: _segm( segm )
{
}
/// \ru Начальный итератор. \en Begin iterator.
ActiveSubRegionConstIterator begin() const noexcept
{
return ActiveSubRegionConstIterator( _segm );
}
/// \ru Конечный итератор. \en End Iterator.
ActiveSubRegionConstIterator end() const noexcept
{
return ActiveSubRegionConstIterator( _segm, false );
}
};
/** \brief \ru Итератор по дрегионам сегментации для поддержки range-based for.
\en Subregion iterator for haldedge range based for support
*/
struct MATH_CLASS ActiveRegionConstIterator
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
size_t _iRegion = SYS_MAX_T; //< \ru Индекс текущего региона. \en An actual region index.
/** \brief \ru Конструктор. \en Constructor.
\param[in] segm - \ru Сегментация. \en Halfedge segmentation.
\param[in] begin - \ru Если true создает начальный итератор, иначе - конечный.
\en If true creates begin iterator, creates end iterator otherwise.
*/
ActiveRegionConstIterator( const MbHalfedgeSegmentation & segm, bool begin = true ) noexcept;
/// \ru Оператор инкремента. \en An increment operator.
ActiveRegionConstIterator & operator ++() noexcept;
/// \ru Оператор сравнения. \en A comparison operator.
bool operator != ( const ActiveRegionConstIterator & it ) const noexcept;
/// \ru Доступ к данным. \en Data access.
const MbHalfedgeFacet & operator*() const noexcept;
};
/** \brief \ru Объект хранящий begin() и end() для итерации по регионам для поддержки range-based for.
\en Storage for begin-end pair to support halfedge range-based for iteration
*/
struct MATH_CLASS ActiveRegionsBegEndPair
{
const MbHalfedgeSegmentation & _segm; //< \ru Ссылка на сегментацию. \en Segmentation reference.
/// \ru Констуктор. \en Constructor.
ActiveRegionsBegEndPair( const MbHalfedgeSegmentation & segm ) noexcept
: _segm( segm )
{
}
/// \ru Начальный итератор. \en Begin iterator.
ActiveRegionConstIterator begin() const noexcept
{
return ActiveRegionConstIterator( _segm );
}
/// \ru Конечный итератор. \en End Iterator.
ActiveRegionConstIterator end() const noexcept
{
return ActiveRegionConstIterator( _segm, false );
}
};
#endif // __HALFEDGE_SEGM_RANGE_ITERATORS_H
+2 -2
View File
@@ -20,8 +20,8 @@
class MbSolid;
class MATH_CLASS MbInstance;
class MATH_CLASS MbAssembly;
class MbInstance;
class MbAssembly;
namespace c3d // namespace C3D
{
+3 -3
View File
@@ -202,12 +202,12 @@
// \ru Предварительное объявление классов.
// \en The forward declaration of classes. \~
// ---
class MATH_CLASS TapeManager;
class MATH_CLASS TapeRegistrator;
class TapeManager;
class TapeRegistrator;
class iobuf_Seq;
class IProgressIndicator;
class ProgressBarWrapper;
class MATH_CLASS ClassDescriptor;
class ClassDescriptor;
struct TapeClassContainer;
//----------------------------------------------------------------------------------------
+1 -1
View File
@@ -19,7 +19,7 @@
class MbRegDuplicate;
struct MATH_CLASS MbLump;
struct MbLump;
class MbSolid;
class MbMesh;
+5 -2
View File
@@ -105,6 +105,8 @@
#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
#define MATH_24_VERSION 0x18000001L ///< \ru Версия файла - 24.0. \en The file version - 24.0. \~ \ingroup Base_Tools
#define MATH_24_UHF_VERSION 0x18000101L ///< \ru Версия файла - 24.0 UHF (Upper Hot Fix). \en The file version - 24.0 UHF (Upper Hot Fix). \~ \ingroup Base_Tools
//------------------------------------------------------------------------------
/// \ru Является ли версия файла 16-битной. \en Whether there is a 16-bit file version. \~ \ingroup Base_Tools
@@ -160,9 +162,10 @@ enum MbeWritableReleaseVersion
wrv_C3D_2023 = C3D_2023_VERSION, ///< \ru Версия файла - C3D 2023. \en The file version - C3D 2023.
wrv_MATH_23 = MATH_23_VERSION, ///< \ru Версия файла - 23.0. \en The file version - 23.0.
wrv_C3D_2024 = C3D_2024_VERSION, ///< \ru Версия файла - C3D 2024. \en The file version - C3D 2024.
wrv_MATH_24 = MATH_24_VERSION, ///< \ru Версия файла - 24.0. \en The file version - 24.0.
wrv_PrevRelease = wrv_MATH_23, ///< \ru Версия потока предпоследнего релиза. \en The previous release version.
wrv_LastRelease = wrv_C3D_2024, ///< \ru Версия потока последнего релиза. \en The last release version.
wrv_PrevRelease = wrv_C3D_2024, ///< \ru Версия потока предпоследнего релиза. \en The previous release version.
wrv_LastRelease = wrv_MATH_24, ///< \ru Версия потока последнего релиза. \en The last release version.
wrv_MaxPossible = SYS_MAX_INT32 ///< \ru Использовать последнюю версия потока. \en Use current working version.
};
+2 -2
View File
@@ -14,8 +14,8 @@
#include <mb_vector.h>
class MATH_CLASS MbFloatPoint;
class MATH_CLASS MbCartPoint;
class MbFloatPoint;
class MbCartPoint;
namespace c3d // namespace C3D
+2 -2
View File
@@ -16,8 +16,8 @@
class MbCartPoint;
class MATH_CLASS MbCartPoint3D;
class MATH_CLASS MbFloatPoint3D;
class MbCartPoint3D;
class MbFloatPoint3D;
namespace c3d // namespace C3D
+2 -2
View File
@@ -27,10 +27,10 @@ constexpr size_t CUBE_FACES_COUNT = 6; ///< \ru Количество
class MbRect;
class MbRect1D;
class MATH_CLASS MbCube;
class MbCube;
class MbPlacement3D;
class MbCurve3D;
class MATH_CLASS MbSurface;
class MbSurface;
namespace c3d // namespace C3D
{
+4 -6
View File
@@ -559,8 +559,7 @@ public:
MbeFairCurvature accountCurvature; ///< \ru Учет кривизны в концевых точках. \en Accounting for curvature at end points. \~
MbeFairVector accountInflexVector; ///< \ru Учет вектора в точке перегиба при построении NURBzS кривой (0 - направление звена S-полигона, 1 - направление касательной). \en How to take into account the vector at the inflection point at creating NURBzS (0 - direction of segment of S-polygon, 1 - direction of tangent to curve). \~
bool tangentCorrectBspline;///< \ru Сохранение вектора в точке перегиба при построении B-кривой (0 - направление звена S-полигона, 1 - направление касательной). \en Save the vector at the inflection point at creating B-curve (0 - direction of segment of S-polygon, 1 - direction of tangent to curve). \~
bool yesLoop; ///< \ru Разрешить петли S-полигона. \en Allow loops of S-polygon \~
bool yesShiftClosedArray; ///< \ru Флаг разрешает сдвиг замкнутого контура. \en The flag enables closed loop shifting. \~
MbeFixPntTng fixPntTng; ///< \ru Фиксировать точки на касательных / касательные в точках. \en Fix the points on tangents / the tangents on points.
MbeFairApprox approx; ///< \ru Метод аппроксимации. \en Approx method. \~
MbeFairMethod create; ///< \ru Исходные ГО: 1 - опорная ломаная, 2 - касательная ломаная. \en Initial GD: 1 - base polyline, 2 - tangent polyline. \~
@@ -577,7 +576,6 @@ public:
double realAccuracyBSpl; ///< \ru Точность построения B-сплайна (заданная и фактическая). \en The accuracy of creating the B-spline (given and actual).
/// \ru Параметры аппроксимации V-кривой. \en Params of Approximation of V-curve.
size_t defaultEndTngs; ///< \ru Способ построения концевых касательных на окружности (1) аффинное построение (0) упрощенное (2)
bool switchEndTangents; ///< \ru Флаги учета значений концевых касательных. \en Flags accounting tangents values.
bool switchEndCurvature; ///< \ru Флаги учета значений кривизны. \en Flags accounting curvature values.
MbVector3D firstTangent; ///< \ru Касательная в начальной точке. \en Tangent in the first point.
@@ -605,11 +603,12 @@ public:
public:
/// \ru Пустой конструктор. \en Empty constructor.
MbFairCurveData() :
fairing( fairSmooth_Yes ), arrange( false ), yesLoop( false ), yesShiftClosedArray( true ), subdivision( fairSubdiv_Single ),
fairing( fairSmooth_Yes ), arrange( false ), subdivision( fairSubdiv_Single ),
accountCurvature( fairCur_No ), accountInflexVector( fairVector_Tangent ),
tangentCorrectBspline( true ),
fixPntTng( fixPntTng_NotFix ),
approx( fairApprox_IsoSpline ), create( fairMethod_Polyline ), degreeBSpline( 8 ),
//approx( fairApprox_KnotsSpline ), create( 1 ), degreeBSpline( 8 ),
approx( fairApprox_IsoSpline ), create( fairMethod_Polyline ), degreeBSpline( 8 ), //DEBUG 2020 25
outFormat( fairFormat_Close ),
nSegments( 4 ), numSegment( 0 ), tParam( 0.1 ),
clothoidRMin( 50.0 ), clothoidLMax( 200.0 ), clothoidSegms( 10 ), numberOfIterationsBSpl( 1000 ),
@@ -617,7 +616,6 @@ public:
prt( nullptr ),
#endif
realAccuracyBSpl( METRIC_ACCURACY*0.1 ),
defaultEndTngs( 0 ),
switchEndTangents( false ), switchEndCurvature( false ),
firstCurvature( 0.0 ), lastCurvature( 0.0 ), smoothTorsion( false ),
clearanceNoisy( 0.002 ), clearanceNoisyIteration( 10 ), scaleParam( 1.0 ),
+3 -2
View File
@@ -356,7 +356,8 @@ enum MbeLabelState {
*/
// ---
enum MbeSmoothForm {
st_Unknown = -2, ///< \ru Неопределенное сопряжение. \en Undefined blend item.
st_Unknown = -3, ///< \ru Неопределенное сопряжение. \en Undefined blend item.
st_Ellipse = -2, ///< \ru Скругление дугой эллипса с пересчетом радиусов!!! \en Filleting by ellipical arc with recalculating the radii!!!
st_Span = -1, ///< \ru Скругление с заданной хордой. \en Fillet with a given chord.
st_Fillet = 0, ///< \ru Скругление с заданными радиусами. \en Fillet with given radii.
st_Chamfer = 1, ///< \ru Фаска с заданными катетами. \en Chamfer with given cathetuses.
@@ -688,7 +689,7 @@ enum MbeFairSubdivision
fairSubdiv_No = 0, ///< \ru Без уплотнения. \en Without subdivision.
fairSubdiv_Single = 1, ///< \ru Однократное уплотнение. \en Single subdivision.
fairSubdiv_Double = 2, ///< \ru Двукратное уплотнение. \en Double subdivision.
fairSubdiv_Thrice = 3 ///< \ru Трехкратное уплотнение. \en Double subdivision.
fairSubdiv_Thrice = 3 ///< \ru Двукратное уплотнение. \en Double subdivision.
};
//------------------------------------------------------------------------------
+1 -1
View File
@@ -14,7 +14,7 @@
#include <mb_cart_point.h>
class MATH_CLASS MbMatrix;
class MbMatrix;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -19,7 +19,7 @@
#define MATRIX_DIM_2D 3
class MATH_CLASS MbPlacement;
class MbPlacement;
class MbHomogeneous;
+1 -1
View File
@@ -23,7 +23,7 @@ constexpr size_t AXIS_0Z = 2; // \ru Ось 0Z \en 0Z-axis
class MbMatrix;
class MbAxis3D;
class MATH_CLASS MbPlacement3D;
class MbPlacement3D;
class MbHomogeneous3D;
class MbVector3D;
class MbCartPoint3D;
+12 -2
View File
@@ -31,8 +31,8 @@
class MbContour;
class MbContour3D;
class MATH_CLASS MbNurbs;
class MATH_CLASS MbNurbs3D;
class MbNurbs;
class MbNurbs3D;
//------------------------------------------------------------------------------
/** \brief \ru Флаг, определяющий построение сплайна, проходящего через точки.
@@ -2198,6 +2198,7 @@ size_t DefineApproxPointsClosed( const Curve & curve, size_t pCount, double pmin
const double angle = Math::deviateSag;
size_t segmCount = curve.GetSegmentsCount();
bool notZeroLen = pmin < pmax;
SArray<size_t> segmPointsCnt( segmCount, 2 );
SArray<double> tList, restList;
@@ -2205,6 +2206,15 @@ size_t DefineApproxPointsClosed( const Curve & curve, size_t pCount, double pmin
double tmin, tmax;
ptrdiff_t first_Segm = curve.FindSegment( pmin, tmin );
ptrdiff_t last_Segm = curve.FindSegment( pmax, tmax );
if ( segmCount == 1 && notZeroLen && !(tmin < tmax) ) {
if ( ::fabs(pmax - pmin) < NULL_REGION ) {
double period = curve.GetPeriod();
pmax = pmin + period;
tmax = tmin + period;
}
}
ptrdiff_t i = 0;
size_t freePntsCount = pCount, j = 0;
+5 -5
View File
@@ -17,11 +17,11 @@
#include <mb_enum.h>
class MbDirection;
class MbCurve3D;
class MbCube;
class MbLine3D;
class MATH_CLASS MbPlacement3D;
class MbDirection;
class MbCurve3D;
class MbCube;
class MbLine3D;
class MbPlacement3D;
namespace c3d // namespace C3D
{
+6 -6
View File
@@ -1239,7 +1239,7 @@ void RefItemProperty<Type>::SetProperties( const MbProperties & props )
\ingroup Model_Properties
*/
// ---
class MbPolymeshPropertyBase : public MbProperty {
class MATH_CLASS MbPolymeshPropertyBase : public MbProperty {
protected:
MbPolymesh & _topo; ///< \ru Топология. \en Topology.
PrePropType _type; ///< \ru Тип. \en Type.
@@ -1289,7 +1289,7 @@ public:
\ingroup Model_Properties
*/
// ---
class MbPolymeshRegionProperty : public MbPolymeshPropertyBase {
class MATH_CLASS MbPolymeshRegionProperty : public MbPolymeshPropertyBase {
public:
uint32 _facetCount; ///< \ru Количество фасетов. \en Facets count.
uint32 _subCount; ///< \ru Количество подрегионов. \en Subregions count.
@@ -1328,7 +1328,7 @@ public:
\ingroup Model_Properties
*/
// ---
class MbPolymeshSubRegionProperty : public MbPolymeshPropertyBase {
class MATH_CLASS MbPolymeshSubRegionProperty : public MbPolymeshPropertyBase {
public:
uint32 _facetCount; ///< \ru Количество фасетов. \en Facets count.
uint32 _loopCount; ///< \ru Количество циклов. \en Loops count.
@@ -1367,7 +1367,7 @@ public:
\ingroup Model_Properties
*/
// ---
class MbPolymeshLoopProperty : public MbPolymeshPropertyBase {
class MATH_CLASS MbPolymeshLoopProperty : public MbPolymeshPropertyBase {
public:
uint32 _edgeCount; ///< \ru Количество ребер. \en Edges count.
@@ -1405,7 +1405,7 @@ public:
\ingroup Model_Properties
*/
// ---
class MbPolymeshEdgeProperty : public MbPolymeshPropertyBase {
class MATH_CLASS MbPolymeshEdgeProperty : public MbPolymeshPropertyBase {
public:
uint32 _edgeCount; ///< \ru Количество ребер. \en Edges count.
@@ -1445,7 +1445,7 @@ public:
\ingroup Model_Properties
*/
// ---
class MbPolymeshVertexProperty : public MbPolymeshPropertyBase {
class MATH_CLASS MbPolymeshVertexProperty : public MbPolymeshPropertyBase {
public:
uint32 _edge; ///< \ru Ребро. \en Edge.
+2 -2
View File
@@ -19,8 +19,8 @@
class MbMatrix;
class MATH_CLASS MbRect;
class MATH_CLASS MbRect2D;
class MbRect;
class MbRect2D;
namespace c3d // namespace C3D
{
+4 -2
View File
@@ -22,8 +22,8 @@
#include <vector>
class MATH_CLASS MbNurbs3D;
class MATH_CLASS MbNurbs;
class MbNurbs3D;
class MbNurbs;
//-------------------------------------------------------------------------------
@@ -536,6 +536,8 @@ public:
void SetReferenceCurve( const Nurbs * pCurve ) { _pReference = pCurve; }
/// \ru Установить коэффициент сглаживания. \en Set smoothing coefficient.
void SetSmoothCoefficient( double smooth ) { _coefSmoothing = smooth; }
/// \ru Установить узловой вектор. \en Set knot vector.
void SetKnots( const c3d::DoubleVector & knots ) { _approxKnots = knots; }
///< \ru Получить версию математики. \en Get math version.
VERSION GetVersion() const { return _version; }
+1 -1
View File
@@ -247,7 +247,7 @@ constexpr uint8 MB_UNSET = 0x80; ///< \ru Битовые флаги н
/** \} */
class MATH_CLASS MbRefItem;
class MbRefItem;
class VersionContainer;
// \ru Управление реализацией переменных в Math. \en Managing variables implementation in Math.
+6 -6
View File
@@ -19,12 +19,12 @@
#include <mb_enum.h>
class MATH_CLASS MbDirection;
class MATH_CLASS MbCartPoint;
class MATH_CLASS MbPlacement;
class MATH_CLASS MbHomogeneous;
class MATH_CLASS MbMatrix;
class MATH_CLASS MbProperties;
class MbDirection;
class MbCartPoint;
class MbPlacement;
class MbHomogeneous;
class MbMatrix;
class MbProperties;
//------------------------------------------------------------------------------
+1 -1
View File
@@ -16,7 +16,7 @@
#include <model_item.h>
class MATH_CLASS MbMesh;
class MbMesh;
class MapPolymeshToMbMesh;
class MbMeshTopology;
+1 -1
View File
@@ -15,7 +15,7 @@
constexpr float MB_MAXFLOAT = (float)MAXIMON; // \ru Максимальное значение. \en Maximum value.
class MATH_CLASS MbFloatVector3D;
class MbFloatVector3D;
//------------------------------------------------------------------------------
+9
View File
@@ -345,6 +345,15 @@ SIMPLE_FACET_ATTRIBUTE( int, SYS_MAX_UINT, MbHalfedgeAttrIntFacet, MbeTypeAttr::
SIMPLE_EDGE_ATTRIBUTE( size_t, SYS_MAX_T, MbHalfedgeAttrSizetEdge, MbeTypeAttr::ta_SizetValuesEdge );
//------------------------------------------------------------------------------
/** \brief \ru Атрибут для пар, ассоциированных с ребрами.
\en The c3d::IndicesPair attribute associated with edges.
\ingroup Data_Structures
*/
// ---
SIMPLE_EDGE_ATTRIBUTE( c3d::IndicesPair, c3d::IndicesPair( SYS_MAX_T, SYS_MAX_T), MbHalfedgeAttrIndPairEdge, MbeTypeAttr::ta_PairValuesEdge );
//------------------------------------------------------------------------------
/** \brief \ru Атрибут для типа size_t, ассоциированных с фасетами.
\en The size_t attribute associated with facets.
+1
View File
@@ -65,6 +65,7 @@ enum class MbeTypeAttr
ta_SegmentationSurface, ///< \ru Тип атрибута MbHalfedgeAttrSurfaces. \en Attribute's type is MbHalfedgeAttrSurfaces.
ta_Parameters2DEdgeDependent, ///< \ru Тип атрибута MbHalfedgeAttrParamByEdge. \en Attribute's type is MbHalfedgeAttrParamByEdge.
ta_Strains, ///< \ru Тип атрибута MbHalfedgeAttrStrains. \en Attribute's type is MbHalfedgeAttrSizetVertex.
ta_PairValuesEdge, ///< \ru Тип атрибута MbHalfedgeAttrIndPairEdge. \en Attribute's type is MbHalfedgeAttrIndPairEdge.
ta_ContainerFacet = 1000, ///< \ru Внутренний тип атрибута MbHalfedgeAttrContainerFacet. \en Attribute's inner type is MbHalfedgeAttrContainerFacet.
ta_ContainerEdge, ///< \ru Внутренний тип атрибута MbHalfedgeAttrContainerEdge. \en Attribute's inner type is MbHalfedgeAttrContainerEdge.
ta_ContainerVertex, ///< \ru Внутренний тип атрибута MbHalfedgeAttrContainerVertex. \en Attribute's inner type is MbHalfedgeAttrContainerVertex.
+4 -4
View File
@@ -25,12 +25,12 @@ class MbRect;
class MbCurve;
class MbPolyline3D;
class MbPlacement3D;
class MATH_CLASS MbPrimitive;
class MATH_CLASS MbPolygon3D;
class MATH_CLASS MbPolygon;
class MbPrimitive;
class MbPolygon3D;
class MbPolygon;
class MbFloatAxis3D;
class MbFloatPoint3D;
class MATH_CLASS MbGrid;
class MbGrid;
struct MbGridSearchTree;
+1 -1
View File
@@ -16,7 +16,7 @@
#include <vector>
class MATH_CLASS MbTriangle;
class MbTriangle;
namespace c3d // namespace C3D
{
+1 -1
View File
@@ -23,7 +23,7 @@
#include <templ_visitor.h>
class MATH_CLASS MbItem;
class MbItem;
namespace c3d // namespace C3D
{
typedef SPtr<MbItem> ItemSPtr;
+10 -10
View File
@@ -26,9 +26,9 @@
#include <set>
class MATH_CLASS MbProperties;
class MATH_CLASS MbName;
class MATH_CLASS MbSNameMaker;
class MbProperties;
class MbName;
class MbSNameMaker;
namespace c3d // namespace C3D
{
@@ -618,8 +618,8 @@ public:
return name;
}
friend class MATH_CLASS MbNameMaker;
friend class MATH_CLASS MbSNameMaker;
friend class MbNameMaker;
friend class MbSNameMaker;
friend MATH_FUNC (int) MbDefNameCompare ( const MbName & n1, const MbName & n2 );
friend MATH_FUNC (int) MbMemDefNameCompare( const MbName & n1, const MbName & n2 );
@@ -852,8 +852,8 @@ public:
*/
// ---
class MATH_CLASS MbNamePairList {
friend class MATH_CLASS MbNameMaker;
friend class MATH_CLASS MbSNameMaker;
friend class MbNameMaker;
friend class MbSNameMaker;
private:
mutable CSSArray<MbNamePair> checkList; ///< \ru Имена объектов и их копий. \en Names of objects and of its duplicates.
public:
@@ -929,9 +929,9 @@ private:
//
//////////////////////////////////////////////////////////////////////////////////////////
class MATH_CLASS MbTopologyItem;
class MATH_CLASS MbPrimitive;
class MATH_CLASS MbTopologyProxy;
class MbTopologyItem;
class MbPrimitive;
class MbTopologyProxy;
//----------------------------------------------------------------------------------------
/** \brief \ru Генератор имен.
+3 -3
View File
@@ -21,9 +21,9 @@
class MbMatrix3D;
class MbAxis3D;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbFace;
class MATH_CLASS MbFaceShell;
class MbCurveEdge;
class MbFace;
class MbFaceShell;
struct MbItemIndex;
struct MbEdgeFacesIndexes;
+92 -27
View File
@@ -24,7 +24,7 @@
#include <mb_smooth_nurbs_fit_curve.h>
class MbSurfaceCurve;
class MATH_CLASS MbCurveExtensionParameters;
class MbCurveExtensionParameters;
//------------------------------------------------------------------------------
/** \brief \ru Базовый класс для параметров создания кривой пересечения поверхностей.
@@ -1827,18 +1827,22 @@ public:
\en Initialize parameters for wrapping algorithm. \~
\details \ru Инициализация параметров для алгоритма сворачивания.
\en Initialize parameters for wrapping algorithm. \~
\param[in] curves - \ru Кривые, копии которых будут свёрнуты.
\en Curves, copies of which will be wrapped. \~
\param[in] points - \ru Двумерные точки, которые будут свёрнуты.
\en Two-dimension points to be wrapped. \~
\param[in] vals - \ru Параметры операции сворачивания.
\en The parameters of wrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] cutByBounds - \ru Нужно ли обрезать полученные кривые по границам поверхности?
\en Whether the result curves to be cut with the surface bounds? \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых.
\en Whether to save the curves copies in this parameter class. \~
\param[in] curves - \ru Кривые, копии которых будут свёрнуты.
\en Curves, copies of which will be wrapped. \~
\param[in] points - \ru Двумерные точки, которые будут свёрнуты.
\en Two-dimension points to be wrapped. \~
\param[in] vals - \ru Параметры операции сворачивания.
\en The parameters of wrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] cutByBounds - \ru Нужно ли обрезать полученные кривые по границам поверхности?
\en Whether the result curves to be cut with the surface bounds? \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых?
\en Whether to save the curves copies in this parameter class? \~
\param[in] removeExistCurves - \ru Если true, ранее добавленные кривые будут удалены.
\en If it is true the earlier added curves will be deleted. \~
\param[in] removeExistPoints - \ru Если true, ранее добавленные точки будут удалены.
\en If it is true the earlier added points will be deleted. \~
*/
template<class CurvesVector> // c3d::ConstPlaneCurvesSPtrVector, c3d::ConstSpaceCurvesSPtrVector
void InitWrap( const CurvesVector & curves,
@@ -1846,24 +1850,30 @@ public:
const MbWrapValues & vals,
const MbSNameMaker & operNames,
bool cutByBounds,
bool copyCurves );
bool copyCurves,
bool removeExistCurves,
bool removeExistPoints );
/** \brief \ru Инициализация параметров для алгоритма разворачивания.
\en Initialize parameters for unwrapping algorithm. \~
\details \ru Инициализация параметров для алгоритма разворачивания.
\en Initialize parameters for unwrapping algorithm. \~
\param[in] curves - \ru Кривые, копии которых будут развёрнуты.
\en Curves, copies of which will be unwrapped. \~
\param[in] points - \ru Двумерные точки, которые будут развёрнуты.
\en Two-dimension points to be unwrapped. \~
\param[in] vals - \ru Параметры операции разворачивания.
\en The parameters of unwrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] surfBreakParam - \ru Место резки периодической поверхности.
\en The place, where the periodic surface is to be cut. \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых.
\en Whether to save the curves copies in this parameter class. \~
\param[in] curves - \ru Кривые, копии которых будут развёрнуты.
\en Curves, copies of which will be unwrapped. \~
\param[in] points - \ru Двумерные точки, которые будут развёрнуты.
\en Two-dimension points to be unwrapped. \~
\param[in] vals - \ru Параметры операции разворачивания.
\en The parameters of unwrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] surfBreakParam - \ru Место резки периодической поверхности.
\en The place, where the periodic surface is to be cut. \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых.
\en Whether to save the curves copies in this parameter class. \~
\param[in] removeExistCurves - \ru Если true, ранее добавленные кривые будут удалены.
\en If it is true the earlier added curves will be deleted. \~
\param[in] removeExistPoints - \ru Если true, ранее добавленные точки будут удалены.
\en If it is true the earlier added points will be deleted. \~
*/
template<class CurvesVector> // c3d::ConstPlaneCurvesSPtrVector, c3d::ConstSpaceCurvesSPtrVector
void InitUnwrap( const CurvesVector & curves,
@@ -1871,7 +1881,9 @@ public:
const MbWrapValues & vals,
const MbSNameMaker & operNames,
double surfBreakParam,
bool copyCurves );
bool copyCurves,
bool removeExistCurves,
bool removeExistPoints );
/// \ru Дать двумерные кривые. \en Get two-dimensional curves. \~
const c3d::ConstPlaneCurvesSPtrVector & GetCurves() const { return _curves; }
@@ -2067,6 +2079,59 @@ public:
*/
DEPRECATE_DECLARE_REPLACE( MbCurvesWrappingParams::_surfBreakParam )
void SetUSeamStitch( bool /*s*/ ) { }
/** \brief \ru Инициализация параметров для алгоритма сворачивания.
\en Initialize parameters for wrapping algorithm. \~
\details \ru Инициализация параметров для алгоритма сворачивания.
\en Initialize parameters for wrapping algorithm. \~
\param[in] curves - \ru Кривые, копии которых будут свёрнуты.
\en Curves, copies of which will be wrapped. \~
\param[in] points - \ru Двумерные точки, которые будут свёрнуты.
\en Two-dimension points to be wrapped. \~
\param[in] vals - \ru Параметры операции сворачивания.
\en The parameters of wrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] cutByBounds - \ru Нужно ли обрезать полученные кривые по границам поверхности?
\en Whether the result curves to be cut with the surface bounds? \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых.
\en Whether to save the curves copies in this parameter class. \~
*/
template<class CurvesVector> // c3d::ConstPlaneCurvesSPtrVector, c3d::ConstSpaceCurvesSPtrVector
DEPRECATE_DECLARE_REPLACE( InitWrap with parameters removeExistCurves and removeExistPoints )
void InitWrap( const CurvesVector & curves,
const c3d::ParamPointsVector & points,
const MbWrapValues & vals,
const MbSNameMaker & operNames,
bool cutByBounds,
bool copyCurves );
/** \brief \ru Инициализация параметров для алгоритма разворачивания.
\en Initialize parameters for unwrapping algorithm. \~
\details \ru Инициализация параметров для алгоритма разворачивания.
\en Initialize parameters for unwrapping algorithm. \~
\param[in] curves - \ru Кривые, копии которых будут развёрнуты.
\en Curves, copies of which will be unwrapped. \~
\param[in] points - \ru Двумерные точки, которые будут развёрнуты.
\en Two-dimension points to be unwrapped. \~
\param[in] vals - \ru Параметры операции разворачивания.
\en The parameters of unwrap operation.\~
\param[in] operNames - \ru Именователь с версией операции.
\en Names maker with operation version. \~
\param[in] surfBreakParam - \ru Место резки периодической поверхности.
\en The place, where the periodic surface is to be cut. \~
\param[in] copyCurves - \ru Сохранить ли в этом классе параметров копии кривых.
\en Whether to save the curves copies in this parameter class. \~
*/
template<class CurvesVector> // c3d::ConstPlaneCurvesSPtrVector, c3d::ConstSpaceCurvesSPtrVector
DEPRECATE_DECLARE_REPLACE( InitUnwrap with parameters removeExistCurves and removeExistPoints )
void InitUnwrap( const CurvesVector & curves,
const c3d::ParamPointsVector & points,
const MbWrapValues & vals,
const MbSNameMaker & operNames,
double surfBreakParam,
bool copyCurves );
private:
/// \ru Добавить двумерные или трехмерные кривые с проверкой на нули. \en Add two- or three-dimension curves with nullptr check. \~
template<class CurveVector>
+4 -4
View File
@@ -450,8 +450,8 @@ public:
class MATH_CLASS MbModifiedSolidParams : public MbCollectFacesParams
{
protected:
MbSNameMaker _names; ///< \ru Именователь. \en Name maker.
bool _hotPointsOn; ///< \ru Флаг расчета хот точек. \en Hot points calculation flag.
mutable SPtr<MbSNameMaker> _names; ///< \ru Именователь. \en Name maker.
bool _hotPointsOn; ///< \ru Флаг расчета хот точек. \en Hot points calculation flag.
private:
MbModifiedSolidParams();
@@ -840,9 +840,9 @@ public:
/** \} */
/// \ru Получить именователь операции. \en Get the object defining names generation in the operation.
const MbSNameMaker & GetNameMaker() const { return _names; }
const MbSNameMaker & GetNameMaker() const;
/// \ru Получить именователь операции. \en Get the object defining names generation in the operation.
MbSNameMaker & SetNameMaker() { return _names; }
MbSNameMaker & SetNameMaker();
/// \ru Установить именователь операции. \en Set the object defining names generation in the operation.
void SetNameMaker( const MbSNameMaker & other, bool setVersion = true );
+62 -8
View File
@@ -340,15 +340,30 @@ public:
// ---
class MATH_CLASS MbDrapeShellResults
{
public:
//------------------------------------------------------------------------------
/** \brief \ru Перечисление для типа ошибок драпировки.
\en Error code type. \~
\details \ru Перечисление для типа ошибок драпировки.
\en Error code type. \~
*/
// ---
enum class DrapErrorType : uint
{
unbuiltCells = 0x01, ///< \ru Невозможно построить некоторые ячейки. \en It is not possible to build some cells.
fabricOverlapping = 0x02 ///< \ru Наложение разных частей ткани. \en Overlapping fabric pieces were found.
};
private:
SPtr<MbPolymesh> _mesh; ///< \ru Результат. \en The result. \~
std::vector<c3d::SpacePointsVector> _sides; ///< \ru Полилинии сторон ячеек. \en Cell sides polylines. \~
std::vector<c3d::SpacePointsVector> _warp; ///< \ru Полилинии для нулевой нити основы. \en Warp polylines. \~
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 fiber nodes flags. \~
MbHalfedgeAttrSizetEdge * _pAttrDir; ///< \ru Атрибут направлений сторон ячеек ткани. \en An attribute for cell sides directions. \~
SPtr<MbPolymesh> _mesh; ///< \ru Результат. \en The result. \~
std::vector<c3d::SpacePointsVector> _sides; ///< \ru Полилинии сторон ячеек. \en Cell sides polylines. \~
std::vector<c3d::SpacePointsVector> _warp; ///< \ru Полилинии для нулевой нити основы. \en Warp polylines. \~
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 fiber nodes flags. \~
MbHalfedgeAttrSizetEdge * _pAttrDir; ///< \ru Атрибут направлений сторон ячеек ткани. \en An attribute for cell sides directions. \~
uint _errorCodesMask; ///< \ru Коды ошибок драпировки. \en Codes of draping errors. \~
public:
/// \ru Конструктор. \en Constructor.
@@ -444,6 +459,15 @@ public:
*/
const MbHalfedgeAttrSizetEdge * GetDirectionalAttribute() const { return _pAttrDir; }
// \ru Очистить коды ошибок. \en Clear error codes. \~
void ClearErrorCodes() { _errorCodesMask = 0; }
// \ru Добавить код ошибки. \en Add error code. \~
void AddErrorCode( DrapErrorType type ) { _errorCodesMask |= static_cast<uint>( type ); }
// \ru Проверить наличие кода ошибки. \en Check for an error code. \~
bool HasErrorCode( DrapErrorType type ) const { return _errorCodesMask & static_cast<uint>( type ); }
// \ru Получить маску кодов ошибок. \en Get an error code mask. \~
uint GetErrorCodesMask() const { return _errorCodesMask; }
// \ru Инициализировать атрибуты сетки. \en Initialize the mesh attributes. \~
void InitAttributes();
@@ -726,4 +750,34 @@ public:
OBVIOUS_PRIVATE_COPY( MbFillPolymeshHoleParams );
};
//------------------------------------------------------------------------------
/** \brief \ru Параметры расчета нормалей в вершинах полигонального объекта.
\en Parameters for calculation of normal vectors at the vertices of a polygonal object. \~
\details \ru Параметры расчета нормалей в вершинах полигонального объекта. \n
\en Parameters for calculation of normal vectors at the vertices of a polygonal object. \~
\warning \ru В разработке.
\en Under development. \~
*/
// ---
class MATH_CLASS MbPolymeshNormalsParams
{
private:
bool _bUseSegmentation; ///< \ru Учет сегментации. \en Use segmentation data. \~
public:
/// \ru Конструктор. \en Constructor.
MbPolymeshNormalsParams( bool bUseSegmentation )
: _bUseSegmentation( bUseSegmentation )
{}
/// \ru Деструктор. \en Destructor.
~MbPolymeshNormalsParams() {}
public:
// \ru Получить флаг учета сегментации. \en Segmentation usage flag. \~
bool GetUseSegmentation() const { return _bUseSegmentation; }
OBVIOUS_PRIVATE_COPY( MbPolymeshNormalsParams );
};
#endif // __OP_POLYMESH_PARAMETERS_H
+211 -6
View File
@@ -53,6 +53,11 @@ public:
ec_sharp = 3, ///< \ru Если в точке стыкуются два выпуклых (вогнутых) и одно вогнутое (выпуклое) ребро, то первыми обрабатываются выпуклые (вогнутые) ребра. \en If two convex (concave) and one concave (convex) edge are mated at the point, then concave (convex) edges are processed at the first.
};
/* \ru ВНИМАНИЕ!!! Все открытые поля будут перенесены в закрытую секцию.
Необходимо использовать соответствующие функции инициализации и функции доступа.
\en ATTENTION!!! All open fields will be moved to the closed section.
It is necessary to use the appropriate initialization functions and access functions.
*/
public:
double distance1; ///< \ru Радиус кривизны/катет на первой поверхности. \en Radius of curvature/leg on the first surface.
double distance2; ///< \ru Радиус кривизны/катет на второй поверхности. \en Radius of curvature/leg on the second surface.
@@ -92,6 +97,8 @@ public:
\en Constructor. \~
\details \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\deprecated \ru Конструктор устарел, взамен использовать функции инициализации.
\en The constructor is deprecated. Instead, use initialization functions. \~
\param[in] d1, d2 - \ru Радиусы кривизны/катеты.
\en Radii of curvature/catheti. \~
\param[in] f - \ru Способ построения поверхности сопряжения.
@@ -111,6 +118,7 @@ public:
\param[in] equ - \ru В углах сочленения вставлять тороидальную поверхность.
\en In corners of the joint insert toroidal surface. \~
*/
DEPRECATE_DECLARE_REPLACE ( SmoothValues::Init... )
SmoothValues( double d1, double d2, MbeSmoothForm f, double c, bool pro,
CornerForm cor, bool autoS, bool keep, bool str, bool equ )
: distance1 ( d1 )
@@ -127,6 +135,8 @@ public:
, vector1 ( )
, vector2 ( )
{
if ( form == st_Fillet && ::fabs(::fabs(d1) - ::fabs(d2)) > METRIC_EPSILON )
form = st_Ellipse;
keepCant = autoS ? ts_neutral : ts_negative;
if ( keep )
keepCant = ts_positive;
@@ -137,6 +147,8 @@ public:
\en Constructor. \~
\details \ru Конструктор по параметрам.
\en Constructor by parameters. \~
\deprecated \ru Конструктор устарел, взамен использовать функции инициализации.
\en The constructor is deprecated. Instead, use initialization functions. \~
\param[in] d1, d2 - \ru Радиусы кривизны/катеты.
\en Radii of curvature/catheti. \~
\param[in] smoothForm - \ru Способ построения поверхности сопряжения.
@@ -154,6 +166,7 @@ public:
\param[in] isEquable - \ru В углах сочленения вставлять тороидальную поверхность.
\en In corners of the joint insert toroidal surface. \~
*/
DEPRECATE_DECLARE_REPLACE ( SmoothValues::Init... )
SmoothValues( double d1,
double d2,
MbeSmoothForm smoothForm,
@@ -176,7 +189,10 @@ public:
, equable ( isEquable )
, vector1 ( )
, vector2 ( )
{ }
{
if ( form == st_Fillet && ::fabs(::fabs(d1) - ::fabs(d2)) > METRIC_EPSILON )
form = st_Ellipse;
}
/// \ru Конструктор копирования. \en Copy-constructor.
SmoothValues( const SmoothValues & other, MbRegDuplicate * iReg = nullptr );
@@ -185,7 +201,155 @@ public:
/// \ru Функция инициализации. \en Initialization function.
void Init( const SmoothValues & other );
public:
/** \brief \ru Функция инициализации скругления сферой с равными отступами от поверхностей.
\en Function for initializing filleting with a sphere with equal offsets from surfaces. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
Первая опорная кривая, отложенная по нормали к первой поверхности на расстояние rad,
будет совпадать со второй опорной кривой, отложенной по нормали ко второй
поверхности на расстояние rad.
\en The function sets the shape and size of the offsets without changing other properties of the class.
The first support curve, laid out along the normal to the first surface at a distance of rad,
will coincide with the second support curve, laid out along the normal to the second
surface at a distance of rad.\~
\param[in] rad - \ru Радиус сферы.
\en Radius of a sphere. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitEquidistantFillet( double rad );
/** \brief \ru Функция инициализации скругления сферой с разными отступами от поверхностей.
\en Function for initializing filleting with a sphere with different offsets from surfaces. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
Первая опорная кривая, отложенная по нормали к первой поверхности на расстояние r1,
будет совпадать со второй опорной кривой, отложенной по нормали ко второй
поверхности на расстояние r2. Не путать со скруглением эллипсом!
\en The function sets the shape and size of the offsets without changing other properties of the class.
The first support curve, laid out along the normal to the first surface at a distance of r1,
will coincide with the second support curve, laid out along the normal to the second
surface at a distance of r2. Not to be confused with ellipse filleting!\~
\param[in] r1, r2 - \ru Величины отступов.
\en Offset values. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitEquidistantFillet( double r1, double r2 );
/** \brief \ru Функция инициализации скругления сферой с заданной хордой между точками касания.
\en Function for initializing filleting by a sphere with a given chord between the points of contact of the surfaces. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
\en The function sets the shape and size of the offsets without changing other properties of the class. \~
\param[in] chord - \ru Величин хорды.
\en Chord value. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitChordFillet( double chord );
/** \brief \ru Функция инициализации скругления "дугой эллипса"
\en Function for initializing the rounding by "ellipse arc" \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
Каждое сечение скругления представляет собой эллипс с полуосями a и b, оринтированный
таким образом, чтобы большая полуось была направлена по нормали к соответствующей поверхности.
Не путать со скруглением сферой с разными отступами!
\en The function sets the shape and size of the offsets without changing other properties of the class.
Each fillet section is an ellipse with semi-axes a and b, oriented so that the major semi-axis
is directed along the normal to the corresponding surface. Not to be confused with a sphere fillet with different offsets!\~
\param[in] a, b - \ru Полуоси эллипса.
\en Semi-axes of an ellipse. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitEllipseFillet( double a, double b ) ;
/** \brief \ru Функция инициализации фаски с равными отступами.
\en Function for initializing a chamfer with equal offsets. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
\en The function sets the shape and size of the offsets without changing other properties of the class. \~
\param[in] dist - \ru Величина отступа.
\en Offset value. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitChamfer( double dist );
/** \brief \ru Функция инициализации фаски с разными отступами.
\en Function for initializing a chamfer with different offsets. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
\en The function sets the shape and size of the offsets without changing other properties of the class. \~
\param[in] dist1, dist2 - \ru Величины отступов.
\en Offset values. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitChamfer( double dist1, double dist2 );
/** \brief \ru Функция инициализации фаски по катету и углу.
\en Function for initializing chamfers by cathetus and angle. \~
\details \ru Функция устанавливает форму и величину отступов, не меняя остальные свойства класса.
\en The function sets the shape and size of the offsets without changing other properties of the class. \~
\param[in] firstSide - \ru true - если катет задан для первой поверхности.
\en true - if the cathetus is specified for the first surface. \~
\param[in] dist - \ru Величина катета.
\en Cathetus value. \~
\param[in] ang - \ru Величина угла в градусах (от 0 до 90).
\en The angle value in degrees (from 0 to 90). \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool InitOneSideChamfer( bool firstSide, double dist, double ang );
/** \brief \ru Расчет угла по двум катетам.
\en Calculation of an angle using two cathetus. \~
\param[in] d1 - \ru Прилежащий катет.
\en Adjacent cathetus. \~
\param[in] d2 - \ru Противолежащий катет.
\en Opposite cathetus. \~
\param[in] ang - \ru Величина угла в градусах (от 0 до 90).
\en The angle value in degrees (from 0 to 90). \~
\return \ru Возвращает угол в градусах.
\en Returns angle value in degrees. \~
*/
static double GetAngleBySide( double d1, double d2 );
/** \brief \ru Функция модификации величины отступов.
\en Function for modifying the size of offsets. \~
\details \ru Функция меняет отступы в соответствии с установленной формой в функциях инициализации.
Для скругления хордой используется только первый отступ.
Для фаски по катету и углу будет произведен перерасчет угла по двум катетам
Для остальных форм будут установлены переданные в функцию отступы.
\en The function changes the offsets in accordance with the form set in the initialization functions.
For chord filleting, only the first offset is used. For chamfering by cathetus and angle, the angle
will be recalculated by two cathetus. For other forms, the offsets passed to the function will be set. \~
\param[in] d1, d2 - \ru Величины отступов.
\en Offset values. \~
\return \ru Возвращает true в случае успеха.
\en Returns true on success. \~
*/
bool ModifyDistances( double d1, double d2 );
/** \brief \ru Установка опций операции.
\en Setting operation options. \~
\param[in] c - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности).
\en Coefficient of shape is changed from 0.05 to 0.95 (if 0 - circular arc). \~
\param[in] pro - \ru Продолжить по касательной.
\en Prolong along the tangent. \~
\param[in] cor - \ru Способ скругления "чемоданных" углов.
\en Method for bending corner of three surfaces. \~
\param[in] autoS - \ru Автоопределение сохранения кромки/поверхности.
\en Auto detection of boundary/surface saving. \~
\param[in] keep - \ru Сохранять кромку (true) или сохранять поверхность скругления/фаски (false).
\en Keep boundary (true) or keep surface of fillet/chamfer (false). \~
\param[in] str - \ru Строгое скругление. Если false, скруглить хотя бы то, что возможно.
\en Strict fillet. If false - round at least what is possible. \~
\param[in] equ - \ru В углах сочленения вставлять тороидальную поверхность.
\en In corners of the joint insert toroidal surface. \~
*/
void SetProperties( double c, bool pro, CornerForm cor, bool autoS, bool keep, bool str, bool equ);
/// \ru Преобразовать объект согласно матрице. \en Transform an object according to the matrix.
virtual void Transform( const MbMatrix3D &, MbRegTransform * ireg = nullptr );
/// \ru Сдвинуть объект вдоль вектора. \en Move an object along a vector.
@@ -207,34 +371,75 @@ public:
void GetBegVector( MbVector3D & vect ) const { vect.Init( vector1 ); }
/// \ru Получить вектор нормали к плоскости остановки в конце скругления. \en Get normal vector to the bound plane at the end of the fillet.
void GetEndVector( MbVector3D & vect ) const { vect.Init( vector2 ); }
/// \ru Установить радиус кривизны/катет на первой поверхности. \en Set radius of curvature/leg on the first surface.
/** \brief \ru Установить радиус кривизны/катет на первой поверхности.
\en Set radius of curvature/leg on the first surface.
\deprecated \ru Функция устарела, вместо нее использовать функции инициализации.
\en This function is deprecated, use initialization functions instead. \~
*/
DEPRECATE_DECLARE_REPLACE ( SmoothValues::Init... )
void SetDistance1( double d ) { distance1 = d; }
/// \ru Установить радиус кривизны/катет на второй поверхности. \en Set radius of curvature/leg on the second surface.
/** \brief \ru Установить радиус кривизны/катет на второй поверхности.
\en Set radius of curvature/leg on the second surface.
\deprecated \ru Функция устарела, вместо нее использовать функции инициализации.
\en This function is deprecated, use initialization functions instead. \~
*/
DEPRECATE_DECLARE_REPLACE ( SmoothValues::Init... )
void SetDistance2( double d ) { distance2 = d; }
/// \ru Дать радиус кривизны/катет на первой поверхности. \en Get radius of curvature/leg on the first surface.
double GetDistance1() const { return distance1; }
/// \ru Дать радиус кривизны/катет на второй поверхности. \en Get radius of curvature/leg on the second surface.
double GetDistance2() const { return distance2; }
///< \ru Тип сопряжения скругление/фаска. \en Mate type of fillet/chamfer.
MbeSmoothForm GetForm() const { return form; }
/** \brief \ru Установить тип сопряжения скругления/фаски.
\en Set form of fillet/chamer.
\deprecated \ru Функция устарела, вместо нее использовать функции инициализации.
\en This function is deprecated, use initialization functions instead. \~
*/
DEPRECATE_DECLARE_REPLACE ( SmoothValues::Init... )
void SetForm( MbeSmoothForm f ) { form = f; }
///< \ru Способ обработки углов стыковки трёх рёбер. \en Method of processing corners of connection by three edges.
CornerForm GetSmoothCorner() const { return smoothCorner; }
CornerForm &SetSmoothCorner() { return smoothCorner; }
void SetSmoothCorner( CornerForm f ) { smoothCorner = f; }
///< \ru Продолжить по касательной. \en Prolong along the tangent.
bool GetProlong() const { return prolong; }
bool & SetProlong() { return prolong; }
void SetProlong( bool p ) { prolong = p; }
///< \ru Автоопределение сохранения кромки (ts_neutral), сохранение поверхности (ts_negative), сохранение кромки (ts_positive). \en Auto detection of boundary saving (ts_neutral), surface saving (ts_negative), boundary saving (ts_positive).
ThreeStates GetKeepCant() const { return keepCant; }
ThreeStates&SetKeepCant() { return keepCant; }
void SetKeepCant( ThreeStates s ) { keepCant = s; }
///< \ru При false скруглить хотя бы то, что возможно. \en If false - round at least what is possible.
bool GetStrict() const { return strict; }
bool & SetStrict() { return strict; }
void SetStrict( bool s ) { strict = s; }
///< \ru В углах сочленения вставлять тороидальную поверхность (для штамповки листового тела). \en In corners of the joint insert toroidal surface (for stamping sheet solid).
bool GetEquable() const { return equable; }
bool & SetEquable() { return equable; }
void SetEquable( bool e ) { equable = e; }
///< \ru Расстояние от начала скругления до точки остановки \en Distance from the beginning of fillet to the stop point.
double GetBegLength() const { return begLength; }
double & SetBegLength() { return begLength; }
///< \ru Расстояние от конца скругления до точки остановки. \en Distance from the end of fillet to the stop point.
double GetEndLength() const { return endLength; }
double & SetEndLength() { return endLength; }
///< \ru Коэффициент формы\en Coefficient of shape.
double GetConic() const { return conic; }
double & SetConic() { return conic; }
/// \ru Оператор присваивания. \en Assignment operator.
SmoothValues & operator = ( const SmoothValues & other ) {
Init( other );
@@ -1772,7 +1977,7 @@ public:
/// \ru Получить массив весов. \en Get array of weights.
bool GetWeights( Array2<double> & wts ) const;
/// \ru Получить плоскость проецирования. \en Get the plane of projection.
const MbPlane * GetCloudPlane() const { return (pointsCloud ? cloudPlane : nullptr);}
const MbPlane * GetCloudPlane() const { return (pointsCloud ? cloudPlane : nullptr); } // SKIP_SA
/** \brief \ru Минимально возможный порядок сплайнов в случае облака точек.
\en The smallest possible order of splines in the case of point cloud. \~
+37 -8
View File
@@ -1916,12 +1916,14 @@ public:
struct MATH_CLASS MbSectionRule {
private:
c3d::FunctionSPtr discr; ///< \ru Функция управления сечением (дискриминант или радиус, может быть nullptr). \en Section control function (discriminant or radius). \~
c3d::SpaceCurveSPtr track; ///< \ru Кривая, через которую должно пройти сечение. \en The curve that the section should pass through. \~
c3d::SurfaceSPtr touch; ///< \ru Поверхность, которой должно касаться сечение. \en The surface that the section should touch. \~
c3d::ShellSPtr shell; ///< \ru Оболочка, которой должно касаться сечение. \en The shell that the section should touch. \~
MbeSmoothForm sform; ///< \ru Форма поверхности сопряжения (скругления или фаски). \en The blend surface cross-section form (fillet or chamfer). \~
double ratio; ///< \ru Или натяжение, или скос, или соотношение. \en Or tension, or bevel, or ratio. \~
c3d::FunctionSPtr discr; ///< \ru Функция управления сечением (дискриминант или радиус, может быть nullptr). \en Section control function (discriminant or radius). \~
c3d::SpaceCurveSPtr track; ///< \ru Кривая, через которую должно пройти сечение. \en The curve that the section should pass through. \~
c3d::SurfaceSPtr touch; ///< \ru Поверхность, которой должно касаться сечение. \en The surface that the section should touch. \~
c3d::ShellSPtr shell; ///< \ru Оболочка, которой должно касаться сечение. \en The shell that the section should touch. \~
bool faceSide; ///< \ru Строить со стороны нормали поверхности или граней при true. \en Build from the side of the surface or faces normal if true. \~
std::vector<MbItemIndex> faceIndex; ///< \ru Номера используемых граней оболочки (все при отсутствии). \en The numbers of the shell faces used (all if empty). \~
MbeSmoothForm sform; ///< \ru Форма поверхности сопряжения (скругления или фаски). \en The blend surface cross-section form (fillet or chamfer). \~
double ratio; ///< \ru Или натяжение, или скос, или соотношение. \en Or tension, or bevel, or ratio. \~
public:
/// \ru Конструктор по умолчанию. \en Empty constructor.
@@ -1931,9 +1933,9 @@ public:
/// \ru Конструктор по кривой. \en The constructor by function.
MbSectionRule( MbCurve3D * cur );
/// \ru Конструктор по поверхности. \en The constructor by surface.
MbSectionRule( MbSurface * sur );
MbSectionRule( MbSurface * sur, bool side = true );
/// \ru Конструктор по оболочке. \en The constructor by shell. \~
MbSectionRule( MbFaceShell * sur );
MbSectionRule( MbFaceShell * she, bool side = true );
/// \ru Конструктор копирования. \en Copy-constructor. \~
MbSectionRule( const MbSectionRule & other );
/// \ru Конструктор копирования. \en Copy-constructor. \~
@@ -1963,6 +1965,26 @@ public:
const MbFaceShell * GetShell() const { return shell.get(); }
/// \ru Установить оболочку управления сечением. \en Set section control shell. \~
void SetShell( MbFaceShell & s );
/// \ru С какой стороны касаться поверхностей? \en On which side to touch surfaces?
bool GetFaceSide() const { return faceSide; }
void SetFaceSide( bool fs ) { faceSide = fs; }
/// \ru Выдать номера используемых граней. \en Get used face numbers.
void GetFaceIndex( std::vector<MbItemIndex> & fas ) const;
const std::vector<MbItemIndex> & GetFaceIndex() const { return faceIndex; }
std::vector<MbItemIndex> & SetFaceIndex() { return faceIndex; }
/// \ru Выдать количество используемых граней. \en Get used faces count.
size_t GetFaceIndexCount() const { return faceIndex.size(); }
/// \ru Выдать номер грани. \en Get face number.
MbItemIndex GetFaceIndex( size_t i ) const {
MbItemIndex ind;
if ( i < faceIndex.size() )
ind = faceIndex[i];
return ind;
}
/// \ru Добавить номер грани. \en Set face number.
void AddFaceIndex( size_t faceInd );
void AddFaceIndex( const MbFace * face );
/// \ru Выдать форму поверхности сопряжения (скругления или фаски). \en Get a blend surface cross-section form (fillet or chamfer). \~
MbeSmoothForm GetSubForm() const { return sform; }
/// \ru Установить форму поверхности сопряжения (скругления или фаски). \en Set a blend surface cross-section form (fillet or chamfer). \~
@@ -2289,6 +2311,13 @@ public:
const MbSurface * GetDescriptSurface() const { return descript.GetSurface(); }
/// \ru Выдать оболочку управления сечением. \en Get section control shell.
const MbFaceShell * GetDescriptShell() const { return descript.GetShell(); }
/// \ru С какой стороны касаться поверхностей? \en On which side to touch surfaces?
bool GetFaceSide3() const { return descript.GetFaceSide(); }
void SetFaceSide3( bool fs ) { descript.SetFaceSide(fs); }
/// \ru Выдать количество используемых граней. \en Get used faces count.
size_t GetFaceIndex3Count() const { return descript.GetFaceIndexCount(); }
/// \ru Выдать номера используемых граней. \en Get used face numbers.
MbItemIndex GetFaceIndex3( size_t i ) const { return descript.GetFaceIndex(i); }
/// \ru Выдать форму поверхности сопряжения (скругления или фаски). \en Get a blend surface cross-section form (fillet or chamfer). \~
MbeSmoothForm GetSubForm() const { return descript.GetSubForm(); }
/// \ru Установить форму поверхности сопряжения (скругления или фаски). \en Set a blend surface cross-section form (fillet or chamfer). \~
+1 -1
View File
@@ -17,7 +17,7 @@
#include <vector>
class MATH_CLASS MbPlaneInstance;
class MbPlaneInstance;
namespace c3d // namespace C3D
{
typedef SPtr<MbPlaneInstance> PInstanceSPtr;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <math_define.h>
#include <vector>
class MATH_CLASS MbPointFrame;
class MbPointFrame;
class MbPoint3D;
+1 -1
View File
@@ -44,7 +44,7 @@ enum MbeRefType
};
class MATH_CLASS MbRefItem;
class MbRefItem;
namespace c3d // namespace C3D
{
typedef SPtr<MbRefItem> RefItemSPtr;
+2 -2
View File
@@ -13,8 +13,8 @@
#include <model_item.h>
#include <topology_faceset.h>
class MATH_CLASS MbIngotSolidParams;
class MATH_CLASS MbSolid;
class MbIngotSolidParams;
class MbSolid;
namespace c3d // namespace C3D
{
typedef SPtr<MbSolid> SolidSPtr;
+1 -1
View File
@@ -23,7 +23,7 @@ class MbCurve3D;
class MbSurface;
class MATH_CLASS MbSpaceInstance;
class MbSpaceInstance;
namespace c3d // namespace C3D
{
typedef SPtr<MbSpaceInstance> SInstanceSPtr;
+2 -2
View File
@@ -28,14 +28,14 @@ class MbAxis3D;
class MbCube;
class MbProperty;
class MbProperties;
class MATH_CLASS MbMesh;
class MbMesh;
struct MbControlData3D;
class MbStepData;
class MbRegTransform;
class MbRegDuplicate;
class MATH_CLASS MbSpaceItem;
class MbSpaceItem;
namespace c3d // namespace C3D
{
typedef SPtr<MbSpaceItem> SpaceItemSPtr; ///< \ru Умный указатель на геометрический объект. \en Smart pointer of an geometrical object.
+47 -33
View File
@@ -66,8 +66,10 @@ public:
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0.5 - дуга окружности)
\en Coefficient of shape is changed from 0.05 to 0.95 (if 0.5 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса
\en Function of change of the radius \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
@@ -94,8 +96,10 @@ public:
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0.5 - дуга окружности)
\en Coefficient of shape is changed from 0.05 to 0.95 (if 0.5 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса
\en Function of change of the radius \~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
@@ -132,8 +136,10 @@ public:
\en Mate type: \n
st_Span - fillet with a given chord \n
st_Fillet - fillet with given radii. \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0.5 - дуга окружности)
\en Coefficient of shape is changed from 0.05 to 0.95 (if 0.5 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] func - \ru Функция изменения радиуса.
\en Function of change of the radius. \~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
@@ -150,6 +156,8 @@ public:
\en Create a fillet surface from two surfaces according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] law - \ru Функция домножения радиуса rad, зависящая от параметра u поверхности.
@@ -167,7 +175,37 @@ public:
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
DEPRECATE_DECLARE_REPLACE( CreateLawFillet with a variable shape coefficient )
static MbChannelSurface * CreateLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям по закону.
\en Create a fillet surface from two surfaces according to the law. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] law - \ru Функция домножения радиуса rad, зависящая от параметра u поверхности.
\en Multiplication function of radius rad, depending on the parameter u of the surface. \~
\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] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbChannelSurface * CreateLawFillet( double rad, MbFunction & law, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по поверхности и кромке с радиусом по закону
\en Create fillet surface by support surface and by kerb-curve with a radius that varies according to the law. \~
@@ -195,34 +233,10 @@ 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,
MbSurfaceCurve & curv2, double d2, MbFunction & func );
MbChannelSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbFunction * cn, MbFunction & func );
MbChannelSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbFunction & func, bool byFirst );
MbChannelSurface( const MbChannelSurface &, MbRegDuplicate * );
+191 -40
View File
@@ -75,15 +75,15 @@ public:
};
protected:
MbCurve3D * curve0; ///< \ru Кривая пересечения касательных к поверхностям - всегда не nullptr. \en Intersection curve of tangents to surfaces - always not nullptr.
MbFunction * weights0; ///< \ru Функция веса точек средней кривой curve0. \en Function of weight of points of curve0 mid-curve.
double conic; ///< \ru Коэффициент формы, изменяется от 0.05 до 0.95, определяет вес точек кривой curve0. \en Coefficient of shape is changed between 0.05 and 0.95 and determines weight of points of curve0 curve.
bool even; ///< \ru Равномерная параметризация по дуге или нет. \en Whether arc length parameterization is uniform or not.
bool equable; ///< \ru true - обычная поверхность, false - curve1 или curve2 является кромкой. \en True - ordinary surface, false - curve1 or curve2 is fillet.
bool byCurve1; ///< \ru true - curve2 является кромкой, false - curve1 является кромкой. \en True - curve2 is fillet, false - curve1 is fillet.
MbCurve3D * spine; ///< \ru Кривая центров дуг окружности для случая равномерной параметризации. \en Curve of centers of circular arcs in case of uniform parameterization.
MbVector3D * spineDerUMin; // \ru Производные spine в точках uMin и uMax ( для случая равномерной параметризации ). \en Derivatives of spine at uMin and uMax points (in case of uniform parameterization).
MbVector3D * spineDerUMax; // \ru Производные spine в точках uMin и uMax ( для случая равномерной параметризации ). \en Derivatives of spine at uMin and uMax points (in case of uniform parameterization).
MbCurve3D * curve0; ///< \ru Кривая пересечения касательных к поверхностям - всегда не nullptr. \en Intersection curve of tangents to surfaces - always not nullptr.
MbFunction * weights0; ///< \ru Функция веса точек средней кривой curve0. \en Function of weight of points of curve0 mid-curve.
SPtr<MbFunction> conic; ///< \ru Коэффициент формы, изменяется от 0.05 до 0.95, определяет вес точек кривой curve0.Всегда не nullptr. \en Coefficient of shape is changed between 0.05 and 0.95 and determines weight of points of curve0 curve. Always not nullptr.
bool even; ///< \ru Равномерная параметризация по дуге или нет. \en Whether arc length parameterization is uniform or not.
bool equable; ///< \ru true - обычная поверхность, false - curve1 или curve2 является кромкой. \en True - ordinary surface, false - curve1 or curve2 is fillet.
bool byCurve1; ///< \ru true - curve2 является кромкой, false - curve1 является кромкой. \en True - curve2 is fillet, false - curve1 is fillet.
MbCurve3D * spine; ///< \ru Кривая центров дуг окружности для случая равномерной параметризации. \en Curve of centers of circular arcs in case of uniform parameterization.
MbVector3D * spineDerUMin; // \ru Производные spine в точках uMin и uMax ( для случая равномерной параметризации ). \en Derivatives of spine at uMin and uMax points (in case of uniform parameterization).
MbVector3D * spineDerUMax; // \ru Производные spine в точках uMin и uMax ( для случая равномерной параметризации ). \en Derivatives of spine at uMin and uMax points (in case of uniform parameterization).
MbeFilletSurfaceVersion version; ///< \ru Версия \en Version.
protected:
//------------------------------------------------------------------------------
@@ -125,8 +125,10 @@ public:
\en Conjugation type: \n
st_Span - fillet with a given chord
st_Fillet - fillet with given radii \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности)
\en Coefficient of shape is changed between 0.05 and 0.95 (if 0 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
\en Whether arc length parameterization is uniform or not \~
*/
@@ -151,8 +153,10 @@ public:
\en Conjugation type: \n
st_Span - fillet with a given chord\n
st_Fillet - fillet with given radii \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности)
\en Coefficient of shape is changed between 0.05 and 0.95 (if 0 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] byFirst - \ru true - кривая curve2 является кромкой, false - кривая curve1 является кромкой
\en True - curve2 curve is fillet, false - curve1 curve is fillet. \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
@@ -185,8 +189,10 @@ public:
\en Conjugation type: \n
st_Span - fillet with a given chord\n
st_Fillet - fillet with given radii \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности)
\en Coefficient of shape is changed between 0.05 and 0.95 (if 0 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] ev - \ru Равномерная параметризация по дуге или нет
\en Whether arc length parameterization is uniform or not \~
*/
@@ -198,6 +204,8 @@ public:
\en Create a fillet surface by two surfaces with a constant radius. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности
@@ -208,38 +216,100 @@ public:
\en Support curve at parameters of the second surface \~
\param[in] sgn2 - \ru Ориентация второй опорной поверхности.
\en The orientation of the second support surface. \~
\param[in] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности)
\en Coefficient of shape is changed between 0.05 and 0.95 (if 0 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateSimpleFillet( double rad, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, double conicFact, VERSION vers );
DEPRECATE_DECLARE_REPLACE ( CreateSimpleFillet with a variable shape coefficient )
static MbFilletSurface * CreateSimpleFillet( double rad, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, double cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям с постоянным радиусом.
\en Create a fillet surface by two surfaces with a constant radius. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
Первая опорная кривая, отложенная по нормали к первой поверхности на расстояние rad1,
будет совпадать со второй опорной кривой, отложенной по нормали ко второй
поверхности на расстояние rad2.
\en If successful, a fillet surface is created with version >= fsv_Ver1.
The first support curve, laid out along the normal to the first surface at a distance of rad1,
will coincide with the second support curve, laid out along the normal to the second
surface at a distance of rad2.\~
\param[in] curv1, curv2 - \ru Опорные кривые.
\en Support curves. \~
\param[in] rad1, rad2 - \ru Ориентированные радиусы скругления для опорных поверхностей.
\en Oriented fillet radii for support surfaces. \~
\param[in] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 correspond to the conic section. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateSimpleFillet( MbSurfaceCurve & curv1, double rad1,
MbSurfaceCurve & curv2, double rad2, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям "дугой эллипса".
\en Create a fillet surface by two surfaces by an "arc of an ellipse". \~
\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] rad1 - \ru Радиус скругления со знаком для поверхности кривой curv1
\en Fillet radius with sign for surface of curv1 curve \~
\param[in] curv2 - \ru Опорная кривая в параметрах второй поверхности
\en Support curve at parameters of the second surface \~
\param[in] rad2 - \ru Радиус скругления со знаком для поверхности кривой curv2
\en Fillet radius with sign for surface of curv2 curve \~
\details \ru Каждое сечение поверхности представляет собой эллипс с полуосями rad1 и rad2, оринтированный
таким образом, чтобы большая полуось была направлена по нормали к соответствующей поверхности.
В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1.
Each section of the surface is an ellipse with semi-axes rad1 and rad2,
oriented so that the major semi-axis is directed along the normal to the corresponding surface.\~
If successful, a fillet surface is created with version >= fsv_Ver1. \~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] curv1, curv2 - \ru Опорные кривые.
\en Support curves. \~
\param[in] rad1, rad2 - \ru Полуоси эллиптического сечения для первой и второй опорной поверхности.
\en Elliptical section semi-axes for the first and second support surfaces. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateEllipticalFillet( MbSurfaceCurve & curv1, double rad1, MbSurfaceCurve & curv2, double rad2, VERSION vers );
DEPRECATE_DECLARE_REPLACE ( CreateEllipticalFillet with a variable shape coefficient )
static MbFilletSurface * CreateEllipticalFillet( MbSurfaceCurve & curv1, double rad1,
MbSurfaceCurve & curv2, double rad2, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям "дугой эллипса".
\en Create a fillet surface by two surfaces by an "arc of an ellipse". \~
\details \ru Каждое сечение поверхности представляет собой эллипс с полуосями rad1 и rad2, оринтированный
таким образом, чтобы большая полуось была направлена по нормали к соответствующей поверхности.
В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1.
Each section of the surface is an ellipse with semi-axes rad1 and rad2,
oriented so that the major semi-axis is directed along the normal to the corresponding surface.\~
If successful, a fillet surface is created with version >= fsv_Ver1. \~
\param[in] curv1, curv2 - \ru Опорные кривые.
\en Support curves. \~
\param[in] rad1, rad2 - \ru Полуоси эллиптического сечения для первой и второй опорной поверхности.
\en Elliptical section semi-axes for the first and second support surfaces. \~
\param[in] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateEllipticalFillet( MbSurfaceCurve & curv1, double rad1,
MbSurfaceCurve & curv2, double rad2, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям с постоянной хордой.
\en Create a fillet surface by two surfaces with a constant chord. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] h - \ru Величина хорды.
\en Fillet radius. \~
\param[in] curv1 - \ru Опорная кривая в параметрах первой поверхности
@@ -255,7 +325,62 @@ public:
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateChordFillet( double h, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
DEPRECATE_DECLARE_REPLACE( CreateChordFillet with a variable shape coefficient )
static MbFilletSurface * CreateChordFillet( double h, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, VERSION vers );
/** \brief \ru Создать поверхность скругления по двум поверхностям с постоянной хордой.
\en Create a fillet surface by two surfaces with a constant chord. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\param[in] h - \ru Величина хорды.
\en Fillet radius. \~
\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] cn - \ru Функция коэффициента формы. Если функция не задана или значение коэффициента 0,то в качестве профиля используется "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению. Переменный коэффициент формы используется только для создания скругления граней.
\en A function of the shape coefficient. If the function is not specified or the coefficient value is 0, then the "circle arc" profile is used.
Values between 0.05 and 0.95 represent to the conic section. A variable shape coefficient is only used to create faces fillets. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateChordFillet( double h, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, MbFunction * cn, VERSION vers );
/** \brief \ru Создать поверхность скругления по поверхности и кромке с постоянным радиусом
\en Create fillet surface a constant radius by support surface and support kerb-curve. \~
\details \ru В случае успеха создается поверхность скругления с версией >= fsv_Ver1.
\en If successful, a fillet surface is created with version >= fsv_Ver1. \~
\deprecated \ru Конструктор устарел, взамен использовать конструктор с переменным коэффициентом формы.
\en The constructor is deprecated. Instead, use a constructor with a variable shape coefficient. \~
\param[in] rad - \ru Радиус скругления.
\en Fillet radius. \~
\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. \~
*/
DEPRECATE_DECLARE_REPLACE( CreateKerbFillet with a variable shape coefficient )
static MbFilletSurface * CreateKerbFillet( double rad, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, bool byFirst, VERSION vers );
/** \brief \ru Создать поверхность скругления по поверхности и кромке с постоянным радиусом
\en Create fillet surface a constant radius by support surface and support kerb-curve. \~
@@ -273,15 +398,18 @@ public:
\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] cn - \ru Коэффициент формы, изменяется от 0.05 до 0.95 (при 0 - дуга окружности)
\en Coefficient of shape is changed between 0.05 and 0.95 (if 0 - circular arc) \~
\param[in] cn - \ru Коэффициент формы. Значение 0 соответствует профилю "дуга окружности".
Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Coefficient of shape. The value 0 corresponds to a "circular arc" profile.
Values between 0.05 and 0.95 represent conic section. \~
\param[in] vers - \ru Версия.
\en Version. \~
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\en Returns a pointer to the created fillet surface if successful, nullptr otherwise. \~
*/
static MbFilletSurface * CreateKerbFillet( double rad, MbSurfaceCurve & curv1, bool sgn1, MbSurfaceCurve & curv2, bool sgn2, bool byFirst, double conicFact, VERSION vers );
static MbFilletSurface * CreateKerbFillet( double rad, MbSurfaceCurve & curv1, bool sgn1,
MbSurfaceCurve & curv2, bool sgn2, bool byFirst, double conicFact, VERSION vers );
/// \ru Создать поверхность скругления по поверхности и кромке с касанием
/// \en
/** \brief \ru Создать поверхность скругления по двум поверхностям с указанием кромки касания
@@ -303,12 +431,16 @@ public:
\return \ru Возвращает указатель на созданную поверхность скругления в случае успеха, иначе - nullptr.
\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 );
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,
MbSurfaceCurve & curv2, double d2, MbeSmoothForm fm, double cn, bool ev );
/// \ru Конструктор для наследников обычной поверхности скругления c переменным коэффициентом формы. \en Constructor for inheritors of ordinary fillet surface with a variable shape coefficient.
MbFilletSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbeSmoothForm fm, MbFunction * cn, bool ev );
/// \ru Конструктор для наследников поверхности с сохранением кромки. \en Constructor for inheritors of surface with preservation of fillet.
MbFilletSurface( MbSurfaceCurve & curv1, double d1,
MbSurfaceCurve & curv2, double d2, MbeSmoothForm fm, double cn, bool byFirst, bool ev );
@@ -608,21 +740,37 @@ public:
\en General conic section. \~
\details \ru Коническое сечение общего вида.
\en General conic section. \~
\param[in] precision - \ru Точность сравнения.
\en The precision of comparison. \~
\return \ru false, если сечение поверхности скругления является дугой окружности
\en False if section of fillet surface is circular arc \~
*/
bool IsConic() const { return ( ::fabs(conic - c3d::_ARC_) >= EPSILON ); } // \ru Коническое сечение общего вида \en General conic section
bool IsConic( double precision = EPSILON ) const;
/** \brief \ru Коэффициент формы.
\en Coefficient of shape. \~
\details \ru Коэффициент формы сечения поверхности скругления.\n
Изменяется от 0.05 до 0.95, при 0 сечение является дугой окружности.
\en Coefficient of shape of section of fillet surface.\n
Is changed between 0.05 and 0.95, if 0, then section is circular arc. \~
\deprecated \ru Метод устарел.
\en Method is deprecated.
\return \ru Коэффициент
\en Coefficient \~
\en Coefficient \~
*/
double Conic() const { return conic; }
DEPRECATE_DECLARE_REPLACE( Conic with surface U parameter )
double Conic() const;
/** \brief \ru Выдать значение коэффициента формы.
\en Get shape coefficient value. \~
\details \ru Коэффициент формы сечения поверхности скругления.\n
Значение 0 соответствует профилю "дуга окружности". Значения от 0.05 до 0.95 соответствуют коническому сечению.
\en Shape coefficient of fillet surface section.\n
The value 0 corresponds to a "circular arc" profile. Values between 0.05 and 0.95 represent conic section. \~
\return \ru Коэффициент
\en Coefficient \~
*/
double Conic( double u ) const;
/** \brief \ru Поверхность скругления с сохранением кромки.
\en Fillet surface with preservation of fillet. \~
@@ -653,6 +801,9 @@ public:
*/
void SetKerbSurface( bool bc1 ) { if ( equable ) { equable = false; byCurve1 = bc1; } }
// \ru Выдать функцию коэффициента формы. \en Get shape coefficient function.
const MbFunction & GetConic() const { return *conic; };
// \ru Выдать функцию весов точек средней кривой curve0. \en Get weight function for points of mid-curve (curve0).
const MbFunction * GetWeights() const;
// \ru Установить функцию весов точек средней кривой curve0. \en Set weight function for points of mid-curve (curve0).
@@ -664,7 +815,7 @@ bool SetWeights( MbFunction & func );
/** \} */
protected:
void WeightKoefficient( double & w ) const; // \ru Вычисление веса при заданном коэффициенте \en Calculation of weight at given coefficient
void WeightKoefficient( double u, double & w ) const; // \ru Вычисление веса при заданном коэффициенте \en Calculation of weight at given coefficient
void InitFilletSurface ( const MbFilletSurface & init );
void CalculateCurve( double wmin, double wmax, bool insertPoints );
double CalculateVParam( const MbCartPoint3D & p, double u ) const; // \ru Нахождение параметра v проекции точки на вырожденную поверхность \en Searching of v parameter of point projection onto degenerate surface
+1 -1
View File
@@ -441,7 +441,7 @@ public:
ThreeStates Salient() const override;
/// \ru Касается ли поверхность опорных граней? \en Does the surface tangent with its reference faces?
bool IsSurfaceTangent() const { return ( sform == st_Fillet || sform == st_Span ) && ( form == cs_Conic || form == cs_Cubic || form == cs_Disked || form == cs_Fillet ); }
bool IsSurfaceTangent() const { return ( sform==st_Fillet || sform == st_Ellipse || sform == st_Span ) && ( form == cs_Conic || form == cs_Cubic || form == cs_Disked || form == cs_Fillet ); }
// \ru Определение разбивки параметрической области поверхности вертикалями и горизонталями. \en Determine splitting of parametric region of surface by vertical and horizontal lines.
void GetTesselation( const MbStepData & stepData,
+1 -1
View File
@@ -21,7 +21,7 @@ const VERSION SPINE_ALG_VERSION1 = 0x0A000000L; // \ru Добавлена option
const VERSION SPINE_ALG_VERSION2 = 0x0D000023L; // \ru Добавлено создание optionalCurve в общем случае \en Added creation of "optionalCurve" in general case
class MATH_CLASS MbSpine;
class MbSpine;
class MbWireFrame;
namespace c3d // namespace C3D
+1 -1
View File
@@ -107,7 +107,7 @@ public:
template <class _T>
SPtr<T> & assign( _T * elem )
{
if ( m_pI != elem )
if ( m_pI != elem ) // SKIP_SA
{
if ( elem != nullptr ) { elem->AddRef(); } // SKIP_SA
if ( m_pI != nullptr ) { m_pI->Release(); } // SKIP_SA
+1 -1
View File
@@ -246,7 +246,7 @@ public:
\en Get a pointer to the lock for operations with the main thread cache, considering whether the code runs in parallel.
Can return null value (good for use with ScopedLock). \~
*/
CommonMutex* GetLock() { if ( ::LocksEnabled() ) return GetLockHard(); return lock; }
CommonMutex* GetLock() { if ( ::LocksEnabled() ) return GetLockHard(); return nullptr; }
/** \brief \ru Функция очистки, используемая сборщиком мусора.
\en Cleaning function, used by the garbage collector. \~
+7 -7
View File
@@ -29,19 +29,19 @@
class MbCurve;
class MbContour;
class MATH_CLASS MbMesh;
class MbMesh;
class MbCurve3D;
class MbContour3D;
class MbPlane;
class MbContourOnSurface;
class MbContourOnPlane;
class MbSurfaceIntersectionCurve;
class MATH_CLASS MbVertex;
class MATH_CLASS MbEdge;
class MATH_CLASS MbCurveEdge;
class MATH_CLASS MbOrientedEdge;
class MATH_CLASS MbLoop;
class MATH_CLASS MbFace;
class MbVertex;
class MbEdge;
class MbCurveEdge;
class MbOrientedEdge;
class MbLoop;
class MbFace;
class MbFunction;
class MbFaceTemp;
+6 -6
View File
@@ -26,12 +26,12 @@ class MbCube;
class MbFunction;
struct MbEdgeFacesIndexes;
class MbShellHistory;
class MATH_CLASS MbPntLoc;
struct MATH_CLASS MbEdgeFunction;
class MATH_CLASS MbCheckTopologyParams;
class MATH_CLASS MbFaceShell;
class MATH_CLASS MbShellsDistanceData;
struct MATH_CLASS MbUnitInfo;
class MbPntLoc;
struct MbEdgeFunction;
class MbCheckTopologyParams;
class MbFaceShell;
class MbShellsDistanceData;
struct MbUnitInfo;
class MbFaceSetTemp;
namespace c3d // namespace C3D
+1 -1
View File
@@ -25,7 +25,7 @@ class MbCartPoint3D;
class MbMatrix3D;
class MbAxis3D;
class MbCube;
class MATH_CLASS MbMesh;
class MbMesh;
class MbStepData;
struct MbFormNote;
class MbRegTransform;
+6 -6
View File
@@ -79,17 +79,17 @@ public :
/// \ru Конструктор по кривой и строителю. \en Constructor by a curve and creator.
MbWireFrame( const MbCurve3D &, const MbCreator * = nullptr );
/// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator.
MbWireFrame( const RPArray<MbCurve3D> &, const MbCreator * = nullptr );
DEPRECATE_DECLARE MbWireFrame( const RPArray<MbCurve3D> &, const MbCreator * = nullptr );
/// \ru Конструктор по множеству кривых и строителю. \en Constructor by a set of curves and creator.
MbWireFrame( const c3d::SpaceCurvesSPtrVector &, const MbCreator * = nullptr );
DEPRECATE_DECLARE MbWireFrame( const c3d::SpaceCurvesSPtrVector &, const MbCreator * = nullptr );
/// \ru Конструктор по ребру и строителю. \en Constructor by an edge and creator.
MbWireFrame( const MbEdge &, const MbCreator * = nullptr, bool same = true );
/// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator.
MbWireFrame( const RPArray<MbEdge> &, const MbCreator * = nullptr, bool same = true );
DEPRECATE_DECLARE MbWireFrame( const RPArray<MbEdge> &, const MbCreator * = nullptr, bool same = true );
/// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator.
MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbCreator * = nullptr, bool same = true );
DEPRECATE_DECLARE MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbCreator * = nullptr, bool same = true );
/// \ru Конструктор по множеству рёбер и строителю. \en Constructor by a set of edges and creator.
MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbWireFrame & oldFrame, const MbCreator * = nullptr );
DEPRECATE_DECLARE MbWireFrame( const c3d::WireEdgesSPtrVector &, const MbWireFrame & oldFrame, const MbCreator * = nullptr );
/** \brief \ru Создать каркас.
\en Create wireframe. \~
\details \ru Создать каркас по множеству ребер и строителю.\n
@@ -308,7 +308,7 @@ public :
/// \ru Разложен ли каркас на связные части? \en Is a frame split into connected parts?
bool IsNormalizeWire() const { return normal; }
/// \ru Переставить кривые и переориентировать ребра, создав связные цепочки с общими вершинами. \en Perform curves reposition and edges reorientation by creating connected chains with common vertices.
bool NormalizeWire( double precision = METRIC_REGION ); ///< \deprecated \ru Метод устарел. \en The method is deprecated.
DEPRECATE_DECLARE bool NormalizeWire( double precision = METRIC_REGION );
/// \ru Переставить кривые и переориентировать ребра, создав связные цепочки с общими вершинами (совпадающими геометрически с точностью precision ). \en Perform curves reposition and edges reorientation by creating connected chains with common vertices (coincident geometrically with accuracy precision).
bool NormalizeWire( double precision, VERSION version = Math::DefaultMathVersion() );
/** \brief \ru Отделение частей каркаса.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.