Files
Extern/C3d/Include/op_boolean_flags.h
SaraP f0ec916a63 Extern :
- C3d aggiornamento delle librerie ( 117246).
2022-04-22 12:43:40 +02:00

174 lines
10 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Флаги булевой операции и ее наследников.
\en Flags of a boolean operation and its heirs. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __OP_BOOLEAN_FLAGS_H
#define __OP_BOOLEAN_FLAGS_H
#include <math_define.h>
//------------------------------------------------------------------------------
/** \brief \ru Управляющие флаги слияния элементов оболочки.
\en Control flags of shell items merging. \~
\details \ru Управляющие флаги слияния элементов оболочки. \n
\en Control flags of shell items merging. \n \~
\ingroup Shell_Building_Parameters
*/
// ---
struct MATH_CLASS MbMergingFlags {
protected:
bool mergeFaces; ///< \ru Сливать подобные грани (true). \en Whether to merge similar faces (true).
bool mergeEdges; ///< \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbMergingFlags() : mergeFaces( true ), mergeEdges( true ) {}
/// \ru Конструктор по флагам слияния. \en Constructor by merging flags.
MbMergingFlags( bool mFs, bool mEs ) : mergeFaces( mFs ), mergeEdges( mEs ) {}
/// \ru Конструктор копирования. \en Copy-constructor.
MbMergingFlags( const MbMergingFlags & f ) : mergeFaces( f.mergeFaces ), mergeEdges( f.mergeEdges ) {}
public:
/// \ru Сливать подобные грани (true). \en Whether to merge similar faces (true).
bool MergeFaces() const { return mergeFaces; }
/// \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
bool MergeEdges() const { return mergeEdges; }
/// \ru Сливать подобные грани (true). \en Whether to merge similar faces (true).
void SetMergingFaces( bool mf ) { mergeFaces = mf; }
/// \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
void SetMergingEdges( bool me ) { mergeEdges = me; }
/// \ru Сливать подобные элементы. \en Whether to merge similar elements.
void SetMerging( const MbMergingFlags & f ) { mergeFaces = f.mergeFaces; mergeEdges = f.mergeEdges; }
public:
MbMergingFlags & operator = ( const MbMergingFlags & f ) { mergeFaces = f.mergeFaces; mergeEdges = f.mergeEdges; return *this; }
bool operator == ( const MbMergingFlags & f ) const { return (mergeFaces == f.mergeFaces && mergeEdges == f.mergeEdges); }
};
//------------------------------------------------------------------------------
/** \brief \ru Управляющие флаги булевой операции.
\en Control flags of Boolean operations. \~
\details \ru Управляющие флаги булевой операции. \n
\en Control flags of Boolean operations \n \~
\ingroup Shell_Building_Parameters
*/
// ---
struct MATH_CLASS MbBooleanFlags {
protected:
bool mergeFaces; ///< \ru Сливать подобные грани (true). \en Whether to merge similar faces (true).
bool mergeEdges; ///< \ru Сливать подобные ребра (true). \en Whether to merge similar edges (true).
bool closed; ///< \ru Замкнутость оболочек операндов. \en Closedness of operands' shells.
bool enclosureCheck; ///< \ru Проверять оболочки на вложенность. \en Check shell on nesting.
bool allowNonIntersecting; ///< \ru Выдавать конечную оболочку, если нет пересечений. \en Allow a final result if there is no intersection.
bool cutting; ///< \ru Флаг резки оболочки при построении разрезов и сечений. \en Flag of cutting the shell in the construction of cuts and sections.
bool repairShellEdges; ///< \ru Флаг починки ребер исходных оболочек. \en Flag of input shells edges repair.
public:
/// \ru Конструктор по умолчанию. \en Default constructor.
MbBooleanFlags()
: mergeFaces ( true )
, mergeEdges ( true )
, closed ( true )
, enclosureCheck ( true )
, allowNonIntersecting( false )
, cutting ( false )
, repairShellEdges ( false )
{}
public:
/// \ru Конструктор копирования. \en Copy-constructor.
MbBooleanFlags( const MbBooleanFlags & flags )
: mergeFaces ( flags.mergeFaces )
, mergeEdges ( flags.mergeEdges )
, closed ( flags.closed )
, enclosureCheck ( flags.enclosureCheck )
, allowNonIntersecting( flags.allowNonIntersecting )
, cutting ( flags.cutting )
, repairShellEdges ( flags.repairShellEdges )
{}
/// \ru Конструктор копирования. \en Copy-constructor.
MbBooleanFlags( const MbBooleanFlags & flags, bool _closed )
: mergeFaces ( flags.mergeFaces )
, mergeEdges ( flags.mergeEdges )
, closed ( _closed )
, enclosureCheck ( flags.enclosureCheck )
, allowNonIntersecting( flags.allowNonIntersecting )
, cutting ( flags.cutting )
, repairShellEdges ( flags.repairShellEdges )
{}
protected:
/// \ru Конструктор по флагам булевой операции. \en Constructor by Boolean flags.
MbBooleanFlags( bool _mergeFaces, bool _mergeEdges, bool _closed, bool _enclosureCheck, bool _allowNonIntersecting, bool _cutting )
: mergeFaces ( _mergeFaces )
, mergeEdges ( _mergeEdges )
, closed ( _closed )
, enclosureCheck ( _enclosureCheck )
, allowNonIntersecting( _allowNonIntersecting )
, cutting ( _cutting )
, repairShellEdges ( false )
{}
public:
/// \ru Булева операция над оболочками. \en Boolean operation of shells.
void InitBoolean( bool _closed, bool _allowNonIntersecting = false )
{
mergeFaces = true;
mergeEdges = true;
closed = _closed;
enclosureCheck = _closed;
allowNonIntersecting = _allowNonIntersecting;
cutting = false;
}
/// \ru Сечение (или усечение) оболочки. \en The cutting (or truncation) of a shell.
void InitCutting( bool _closed, bool _allowNonIntersecting = false )
{
mergeFaces = true;
mergeEdges = true;
closed = _closed;
enclosureCheck = _closed;
allowNonIntersecting = _allowNonIntersecting;
cutting = true;
}
bool MergeFaces () const { return mergeFaces; } ///< \ru Сливать подобные грани (true)? \en Whether to merge similar faces (true)?
bool MergeEdges () const { return mergeEdges; } ///< \ru Сливать подобные ребра (true)? \en Whether to merge similar edges (true)?
bool DoClosed () const { return closed; } ///< \ru Замкнутость результата. \en Closedness of resulting shell.
bool CheckEnclosure () const { return enclosureCheck; } ///< \ru Проверять оболочки на вложенность. \en Check shell on nesting.
bool AllowNonIntersecting() const { return allowNonIntersecting; } ///< \ru Выдавать конечную оболочку, если нет пересечений. \en Allow a final result if there is no intersection.
bool IsCutting () const { return cutting; } ///< \ru Флаг резки оболочки при построении разрезов и сечений. \en Flag of cutting the shell in the construction of cuts and sections.
bool ShellEdgesRepair () const { return repairShellEdges; } ///< \ru Флаг починки ребер исходных оболочек. \en Flag of input shells edges repair.
/// \ru Получить флаги слияния подобных элементов. \en Get flags of merging.
MbMergingFlags GetMerging() const { return MbMergingFlags( mergeFaces, mergeEdges ); }
/// \ru Проверить состояние флага. \en Check the flag's state.
void CheckEnclosureState() { if ( closed ) { enclosureCheck = true; } }
/// \ru Сливать подобные элементы. \en Whether to merge similar items.
void SetMerging( const MbMergingFlags & f ) { mergeFaces = f.MergeFaces(); mergeEdges = f.MergeEdges(); }
void SetMergingFaces( bool s ) { mergeFaces = s; } ///< \ru Сливать подобные грани. \en Whether to merge similar faces.
void SetMergingEdges( bool s ) { mergeEdges = s; } ///< \ru Сливать подобные ребра. \en Whether to merge similar edges.
void SetAllowNonIntersecting( bool s ) { allowNonIntersecting = s; } ///< \ru Выдавать конечную оболочку, если нет пересечений. \en Allow a final result if there is no intersection.
void SetEnclosureCheck( bool s ) { enclosureCheck = s; } ///< \ru Проверять оболочки на вложенность. \en Check shell on nesting.
void SetShellEdgesRepair( bool s ) { repairShellEdges = s; } ///< \ru Чинить ребера исходных оболочек. \en Repair edges of input shells.
/// \ru Оператор присваивания. \en Assignment operator.
MbBooleanFlags & operator = ( const MbBooleanFlags & flags )
{
mergeFaces = flags.mergeFaces;
mergeEdges = flags.mergeEdges;
closed = flags.closed;
enclosureCheck = flags.enclosureCheck;
allowNonIntersecting = flags.allowNonIntersecting;
cutting = flags.cutting;
repairShellEdges = flags.repairShellEdges;
return *this;
}
};
#endif // __OP_BOOLEAN_FLAGS_H