0021859: SMESH : Add conversion from QUAD8 to QUAD9 and from HEXA20 to HEXA27

+    class SMESHCONTROLS_EXPORT ElemEntityType: public virtual Predicate{
This commit is contained in:
eap 2013-03-06 08:11:01 +00:00
parent 13ba132d92
commit f0cd60b411
2 changed files with 143 additions and 17 deletions

View File

@ -210,10 +210,13 @@ using namespace SMESH::Controls;
* FUNCTORS * FUNCTORS
*/ */
//================================================================================
/* /*
Class : NumericalFunctor Class : NumericalFunctor
Description : Base class for numerical functors Description : Base class for numerical functors
*/ */
//================================================================================
NumericalFunctor::NumericalFunctor(): NumericalFunctor::NumericalFunctor():
myMesh(NULL) myMesh(NULL)
{ {
@ -321,6 +324,7 @@ double NumericalFunctor::Round( const double & aVal )
* \param minmax - boundaries of diapason of values to divide into intervals * \param minmax - boundaries of diapason of values to divide into intervals
*/ */
//================================================================================ //================================================================================
void NumericalFunctor::GetHistogram(int nbIntervals, void NumericalFunctor::GetHistogram(int nbIntervals,
std::vector<int>& nbEvents, std::vector<int>& nbEvents,
std::vector<double>& funValues, std::vector<double>& funValues,
@ -403,9 +407,11 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
} }
//======================================================================= //=======================================================================
//function : GetValue /*
//purpose : Class : Volume
//======================================================================= Description : Functor calculating volume of a 3D element
*/
//================================================================================
double Volume::GetValue( long theElementId ) double Volume::GetValue( long theElementId )
{ {
@ -417,21 +423,11 @@ double Volume::GetValue( long theElementId )
return 0; return 0;
} }
//=======================================================================
//function : GetBadRate
//purpose : meaningless as it is not quality control functor
//=======================================================================
double Volume::GetBadRate( double Value, int /*nbNodes*/ ) const double Volume::GetBadRate( double Value, int /*nbNodes*/ ) const
{ {
return Value; return Value;
} }
//=======================================================================
//function : GetType
//purpose :
//=======================================================================
SMDSAbs_ElementType Volume::GetType() const SMDSAbs_ElementType Volume::GetType() const
{ {
return SMDSAbs_Volume; return SMDSAbs_Volume;
@ -442,6 +438,8 @@ SMDSAbs_ElementType Volume::GetType() const
Class : MaxElementLength2D Class : MaxElementLength2D
Description : Functor calculating maximum length of 2D element Description : Functor calculating maximum length of 2D element
*/ */
//================================================================================
double MaxElementLength2D::GetValue( const TSequenceOfXYZ& P ) double MaxElementLength2D::GetValue( const TSequenceOfXYZ& P )
{ {
if(P.size() == 0) if(P.size() == 0)
@ -508,6 +506,7 @@ SMDSAbs_ElementType MaxElementLength2D::GetType() const
Class : MaxElementLength3D Class : MaxElementLength3D
Description : Functor calculating maximum length of 3D element Description : Functor calculating maximum length of 3D element
*/ */
//================================================================================
double MaxElementLength3D::GetValue( long theElementId ) double MaxElementLength3D::GetValue( long theElementId )
{ {
@ -683,6 +682,7 @@ SMDSAbs_ElementType MaxElementLength3D::GetType() const
Class : MinimumAngle Class : MinimumAngle
Description : Functor for calculation of minimum angle Description : Functor for calculation of minimum angle
*/ */
//================================================================================
double MinimumAngle::GetValue( const TSequenceOfXYZ& P ) double MinimumAngle::GetValue( const TSequenceOfXYZ& P )
{ {
@ -715,10 +715,13 @@ SMDSAbs_ElementType MinimumAngle::GetType() const
} }
//================================================================================
/* /*
Class : AspectRatio Class : AspectRatio
Description : Functor for calculating aspect ratio Description : Functor for calculating aspect ratio
*/ */
//================================================================================
double AspectRatio::GetValue( long theId ) double AspectRatio::GetValue( long theId )
{ {
double aVal = 0; double aVal = 0;
@ -899,10 +902,13 @@ SMDSAbs_ElementType AspectRatio::GetType() const
} }
//================================================================================
/* /*
Class : AspectRatio3D Class : AspectRatio3D
Description : Functor for calculating aspect ratio Description : Functor for calculating aspect ratio
*/ */
//================================================================================
namespace{ namespace{
inline double getHalfPerimeter(double theTria[3]){ inline double getHalfPerimeter(double theTria[3]){
@ -1269,10 +1275,13 @@ SMDSAbs_ElementType AspectRatio3D::GetType() const
} }
//================================================================================
/* /*
Class : Warping Class : Warping
Description : Functor for calculating warping Description : Functor for calculating warping
*/ */
//================================================================================
double Warping::GetValue( const TSequenceOfXYZ& P ) double Warping::GetValue( const TSequenceOfXYZ& P )
{ {
if ( P.size() != 4 ) if ( P.size() != 4 )
@ -1326,10 +1335,13 @@ SMDSAbs_ElementType Warping::GetType() const
} }
//================================================================================
/* /*
Class : Taper Class : Taper
Description : Functor for calculating taper Description : Functor for calculating taper
*/ */
//================================================================================
double Taper::GetValue( const TSequenceOfXYZ& P ) double Taper::GetValue( const TSequenceOfXYZ& P )
{ {
if ( P.size() != 4 ) if ( P.size() != 4 )
@ -1366,11 +1378,13 @@ SMDSAbs_ElementType Taper::GetType() const
return SMDSAbs_Face; return SMDSAbs_Face;
} }
//================================================================================
/* /*
Class : Skew Class : Skew
Description : Functor for calculating skew in degrees Description : Functor for calculating skew in degrees
*/ */
//================================================================================
static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3 ) static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3 )
{ {
gp_XYZ p12 = ( p2 + p1 ) / 2.; gp_XYZ p12 = ( p2 + p1 ) / 2.;
@ -1430,10 +1444,13 @@ SMDSAbs_ElementType Skew::GetType() const
} }
//================================================================================
/* /*
Class : Area Class : Area
Description : Functor for calculating area Description : Functor for calculating area
*/ */
//================================================================================
double Area::GetValue( const TSequenceOfXYZ& P ) double Area::GetValue( const TSequenceOfXYZ& P )
{ {
double val = 0.0; double val = 0.0;
@ -1463,11 +1480,13 @@ SMDSAbs_ElementType Area::GetType() const
return SMDSAbs_Face; return SMDSAbs_Face;
} }
//================================================================================
/* /*
Class : Length Class : Length
Description : Functor for calculating length of edge Description : Functor for calculating length of edge
*/ */
//================================================================================
double Length::GetValue( const TSequenceOfXYZ& P ) double Length::GetValue( const TSequenceOfXYZ& P )
{ {
switch ( P.size() ) { switch ( P.size() ) {
@ -1488,10 +1507,12 @@ SMDSAbs_ElementType Length::GetType() const
return SMDSAbs_Edge; return SMDSAbs_Edge;
} }
//================================================================================
/* /*
Class : Length2D Class : Length2D
Description : Functor for calculating length of edge Description : Functor for calculating length of edge
*/ */
//================================================================================
double Length2D::GetValue( long theElementId) double Length2D::GetValue( long theElementId)
{ {
@ -1799,10 +1820,13 @@ void Length2D::GetValues(TValues& theValues){
} }
} }
//================================================================================
/* /*
Class : MultiConnection Class : MultiConnection
Description : Functor for calculating number of faces conneted to the edge Description : Functor for calculating number of faces conneted to the edge
*/ */
//================================================================================
double MultiConnection::GetValue( const TSequenceOfXYZ& P ) double MultiConnection::GetValue( const TSequenceOfXYZ& P )
{ {
return 0; return 0;
@ -1823,10 +1847,13 @@ SMDSAbs_ElementType MultiConnection::GetType() const
return SMDSAbs_Edge; return SMDSAbs_Edge;
} }
//================================================================================
/* /*
Class : MultiConnection2D Class : MultiConnection2D
Description : Functor for calculating number of faces conneted to the edge Description : Functor for calculating number of faces conneted to the edge
*/ */
//================================================================================
double MultiConnection2D::GetValue( const TSequenceOfXYZ& P ) double MultiConnection2D::GetValue( const TSequenceOfXYZ& P )
{ {
return 0; return 0;
@ -1970,10 +1997,13 @@ void MultiConnection2D::GetValues(MValues& theValues){
} }
//================================================================================
/* /*
Class : BallDiameter Class : BallDiameter
Description : Functor returning diameter of a ball element Description : Functor returning diameter of a ball element
*/ */
//================================================================================
double BallDiameter::GetValue( long theId ) double BallDiameter::GetValue( long theId )
{ {
double diameter = 0; double diameter = 0;
@ -2002,10 +2032,12 @@ SMDSAbs_ElementType BallDiameter::GetType() const
PREDICATES PREDICATES
*/ */
//================================================================================
/* /*
Class : BadOrientedVolume Class : BadOrientedVolume
Description : Predicate bad oriented volumes Description : Predicate bad oriented volumes
*/ */
//================================================================================
BadOrientedVolume::BadOrientedVolume() BadOrientedVolume::BadOrientedVolume()
{ {
@ -2052,9 +2084,11 @@ bool BareBorderVolume::IsSatisfy(long theElementId )
return false; return false;
} }
//================================================================================
/* /*
Class : BareBorderFace Class : BareBorderFace
*/ */
//================================================================================
bool BareBorderFace::IsSatisfy(long theElementId ) bool BareBorderFace::IsSatisfy(long theElementId )
{ {
@ -2092,9 +2126,11 @@ bool BareBorderFace::IsSatisfy(long theElementId )
return ok; return ok;
} }
//================================================================================
/* /*
Class : OverConstrainedVolume Class : OverConstrainedVolume
*/ */
//================================================================================
bool OverConstrainedVolume::IsSatisfy(long theElementId ) bool OverConstrainedVolume::IsSatisfy(long theElementId )
{ {
@ -2112,9 +2148,11 @@ bool OverConstrainedVolume::IsSatisfy(long theElementId )
return false; return false;
} }
//================================================================================
/* /*
Class : OverConstrainedFace Class : OverConstrainedFace
*/ */
//================================================================================
bool OverConstrainedFace::IsSatisfy(long theElementId ) bool OverConstrainedFace::IsSatisfy(long theElementId )
{ {
@ -2145,10 +2183,12 @@ bool OverConstrainedFace::IsSatisfy(long theElementId )
return false; return false;
} }
//================================================================================
/* /*
Class : CoincidentNodes Class : CoincidentNodes
Description : Predicate of Coincident nodes Description : Predicate of Coincident nodes
*/ */
//================================================================================
CoincidentNodes::CoincidentNodes() CoincidentNodes::CoincidentNodes()
{ {
@ -2190,11 +2230,13 @@ void CoincidentNodes::SetMesh( const SMDS_Mesh* theMesh )
} }
} }
//================================================================================
/* /*
Class : CoincidentElements Class : CoincidentElements
Description : Predicate of Coincident Elements Description : Predicate of Coincident Elements
Note : This class is suitable only for visualization of Coincident Elements Note : This class is suitable only for visualization of Coincident Elements
*/ */
//================================================================================
CoincidentElements::CoincidentElements() CoincidentElements::CoincidentElements()
{ {
@ -2245,10 +2287,12 @@ SMDSAbs_ElementType CoincidentElements3D::GetType() const
} }
//================================================================================
/* /*
Class : FreeBorders Class : FreeBorders
Description : Predicate for free borders Description : Predicate for free borders
*/ */
//================================================================================
FreeBorders::FreeBorders() FreeBorders::FreeBorders()
{ {
@ -2271,10 +2315,13 @@ SMDSAbs_ElementType FreeBorders::GetType() const
} }
//================================================================================
/* /*
Class : FreeEdges Class : FreeEdges
Description : Predicate for free Edges Description : Predicate for free Edges
*/ */
//================================================================================
FreeEdges::FreeEdges() FreeEdges::FreeEdges()
{ {
myMesh = 0; myMesh = 0;
@ -2406,11 +2453,12 @@ void FreeEdges::GetBoreders(TBorders& theBorders)
} }
} }
//================================================================================
/* /*
Class : FreeNodes Class : FreeNodes
Description : Predicate for free nodes Description : Predicate for free nodes
*/ */
//================================================================================
FreeNodes::FreeNodes() FreeNodes::FreeNodes()
{ {
@ -2437,10 +2485,12 @@ SMDSAbs_ElementType FreeNodes::GetType() const
} }
//================================================================================
/* /*
Class : FreeFaces Class : FreeFaces
Description : Predicate for free faces Description : Predicate for free faces
*/ */
//================================================================================
FreeFaces::FreeFaces() FreeFaces::FreeFaces()
{ {
@ -2493,10 +2543,12 @@ SMDSAbs_ElementType FreeFaces::GetType() const
return SMDSAbs_Face; return SMDSAbs_Face;
} }
//================================================================================
/* /*
Class : LinearOrQuadratic Class : LinearOrQuadratic
Description : Predicate to verify whether a mesh element is linear Description : Predicate to verify whether a mesh element is linear
*/ */
//================================================================================
LinearOrQuadratic::LinearOrQuadratic() LinearOrQuadratic::LinearOrQuadratic()
{ {
@ -2527,10 +2579,12 @@ SMDSAbs_ElementType LinearOrQuadratic::GetType() const
return myType; return myType;
} }
//================================================================================
/* /*
Class : GroupColor Class : GroupColor
Description : Functor for check color of group to whic mesh element belongs to Description : Functor for check color of group to whic mesh element belongs to
*/ */
//================================================================================
GroupColor::GroupColor() GroupColor::GroupColor()
{ {
@ -2619,6 +2673,7 @@ void GroupColor::SetColorStr( const TCollection_AsciiString& theStr )
// Purpose : Get range as a string. // Purpose : Get range as a string.
// Example: "1,2,3,50-60,63,67,70-" // Example: "1,2,3,50-60,63,67,70-"
//======================================================================= //=======================================================================
void GroupColor::GetColorStr( TCollection_AsciiString& theResStr ) const void GroupColor::GetColorStr( TCollection_AsciiString& theResStr ) const
{ {
theResStr.Clear(); theResStr.Clear();
@ -2627,10 +2682,12 @@ void GroupColor::GetColorStr( TCollection_AsciiString& theResStr ) const
theResStr += TCollection_AsciiString( ";" ) + TCollection_AsciiString( myColor.Blue() ); theResStr += TCollection_AsciiString( ";" ) + TCollection_AsciiString( myColor.Blue() );
} }
//================================================================================
/* /*
Class : ElemGeomType Class : ElemGeomType
Description : Predicate to check element geometry type Description : Predicate to check element geometry type
*/ */
//================================================================================
ElemGeomType::ElemGeomType() ElemGeomType::ElemGeomType()
{ {
@ -2677,6 +2734,54 @@ SMDSAbs_GeometryType ElemGeomType::GetGeomType() const
return myGeomType; return myGeomType;
} }
//================================================================================
/*
Class : ElemEntityType
Description : Predicate to check element entity type
*/
//================================================================================
ElemEntityType::ElemEntityType():
myMesh( 0 ),
myType( SMDSAbs_All ),
myEntityType( SMDSEntity_0D )
{
}
void ElemEntityType::SetMesh( const SMDS_Mesh* theMesh )
{
myMesh = theMesh;
}
bool ElemEntityType::IsSatisfy( long theId )
{
if ( !myMesh ) return false;
const SMDS_MeshElement* anElem = myMesh->FindElement( theId );
return ( anElem &&
myEntityType == anElem->GetEntityType() &&
( myType == SMDSAbs_Edge || myType == SMDSAbs_Face || myType == SMDSAbs_Volume ));
}
void ElemEntityType::SetType( SMDSAbs_ElementType theType )
{
myType = theType;
}
SMDSAbs_ElementType ElemEntityType::GetType() const
{
return myType;
}
void ElemEntityType::SetElemEntityType( SMDSAbs_EntityType theEntityType )
{
myEntityType = theEntityType;
}
SMDSAbs_EntityType ElemEntityType::GetElemEntityType() const
{
return myEntityType;
}
//================================================================================ //================================================================================
/*! /*!
* \brief Class CoplanarFaces * \brief Class CoplanarFaces

View File

@ -245,7 +245,6 @@ namespace SMESH{
virtual SMDSAbs_ElementType GetType() const; virtual SMDSAbs_ElementType GetType() const;
}; };
/* /*
Class : Skew Class : Skew
Description : Functor for calculating skew in degrees Description : Functor for calculating skew in degrees
@ -429,6 +428,28 @@ namespace SMESH{
const SMDS_Mesh* myMesh; const SMDS_Mesh* myMesh;
}; };
/*
Class : ElemEntityType
Description : Functor for calculating entity type
*/
class SMESHCONTROLS_EXPORT ElemEntityType: public virtual Predicate{
public:
ElemEntityType();
virtual void SetMesh( const SMDS_Mesh* theMesh );
virtual bool IsSatisfy( long theElementId );
void SetType( SMDSAbs_ElementType theType );
virtual SMDSAbs_ElementType GetType() const;
void SetElemEntityType( SMDSAbs_EntityType theEntityType );
SMDSAbs_EntityType GetElemEntityType() const;
private:
const SMDS_Mesh* myMesh;
SMDSAbs_ElementType myType;
SMDSAbs_EntityType myEntityType;
};
typedef boost::shared_ptr<ElemEntityType> ElemEntityTypePtr;
/* /*
BareBorderVolume BareBorderVolume
*/ */