From c21a157b9d128bf905d3a575d90fdbbb07ed3a2e Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 21 Jan 2005 12:28:06 +0000 Subject: [PATCH] PAL7358. Add BadOrientedVolume predicate --- idl/SMESH_Filter.idl | 10 ++++++++ src/SMESH_I/SMESH_Filter_i.cxx | 43 ++++++++++++++++++++++++++++++++++ src/SMESH_I/SMESH_Filter_i.hxx | 15 ++++++++++++ 3 files changed, 68 insertions(+) diff --git a/idl/SMESH_Filter.idl b/idl/SMESH_Filter.idl index c66a90ea0..0644362d4 100644 --- a/idl/SMESH_Filter.idl +++ b/idl/SMESH_Filter.idl @@ -62,6 +62,7 @@ module SMESH FT_BelongToCylinder, FT_LyingOnGeom, FT_RangeOfIds, + FT_BadOrientedVolume, FT_LessThan, FT_MoreThan, FT_EqualTo, @@ -137,6 +138,13 @@ module SMESH boolean IsSatisfy( in long thEntityId ); }; + /*! + * Logical functor (predicate) "Bad Oriented Volume". + * Verify whether a mesh volume is incorrectly oriented from + * the point of view of MED convention + */ + interface BadOrientedVolume: Predicate {}; + /*! * Logical functor (predicate) "Belong To Geometry". * Verify whether mesh element or node belong to pointed Geom Object @@ -383,6 +391,8 @@ module SMESH RangeOfIds CreateRangeOfIds(); + BadOrientedVolume CreateBadOrientedVolume(); + /*! * Create comparators ( predicates ) */ diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index 95893bc0e..1348b83ef 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -668,6 +668,21 @@ Controls::PredicatePtr Predicate_i::GetPredicate() return myPredicatePtr; } +/* + Class : BadOrientedVolume_i + Description : Verify whether a mesh volume is incorrectly oriented from + the point of view of MED convention +*/ +BadOrientedVolume_i::BadOrientedVolume_i() +{ + Controls::PredicatePtr control( new Controls::BadOrientedVolume() ); + myFunctorPtr = myPredicatePtr = control; +}; + +FunctorType BadOrientedVolume_i::GetFunctorType() +{ + return SMESH::FT_BadOrientedVolume; +} /* Class : BelongToGeom_i @@ -1363,6 +1378,13 @@ RangeOfIds_ptr FilterManager_i::CreateRangeOfIds() return anObj._retn(); } +BadOrientedVolume_ptr FilterManager_i::CreateBadOrientedVolume() +{ + SMESH::BadOrientedVolume_i* aServant = new SMESH::BadOrientedVolume_i(); + SMESH::BadOrientedVolume_var anObj = aServant->_this(); + return anObj._retn(); +} + LessThan_ptr FilterManager_i::CreateLessThan() { SMESH::LessThan_i* aServant = new SMESH::LessThan_i(); @@ -1612,6 +1634,20 @@ static inline bool getCriteria( Predicate_i* thePred, theCriteria[ i ].ThresholdStr = aPred->GetRangeStr(); theCriteria[ i ].TypeOfElement = aPred->GetElementType(); + return true; + } + case FT_BadOrientedVolume: + { + BadOrientedVolume_i* aPred = dynamic_cast( thePred ); + + CORBA::ULong i = theCriteria->length(); + theCriteria->length( i + 1 ); + + theCriteria[ i ] = createCriterion(); + + theCriteria[ i ].Type = FT_BadOrientedVolume; + theCriteria[ i ].TypeOfElement = aPred->GetElementType(); + return true; } case FT_LessThan: @@ -1789,6 +1825,11 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria aPredicate = tmpPred; } break; + case SMESH::FT_BadOrientedVolume: + { + aPredicate = aFilterMgr->CreateBadOrientedVolume(); + } + break; default: continue; @@ -1992,6 +2033,7 @@ static inline LDOMString toString( const long theType ) case FT_BelongToPlane : return "Belong to Plane"; case FT_BelongToCylinder: return "Belong to Cylinder"; case FT_LyingOnGeom : return "Lying on Geom"; + case FT_BadOrientedVolume: return "Bad Oriented Volume"; case FT_RangeOfIds : return "Range of IDs"; case FT_FreeBorders : return "Free borders"; case FT_FreeEdges : return "Free edges"; @@ -2033,6 +2075,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) else if ( theStr.equals( "Length" ) ) return FT_Length; // else if ( theStr.equals( "Length2D" ) ) return FT_Length2D; else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds; + else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume; else if ( theStr.equals( "Less than" ) ) return FT_LessThan; else if ( theStr.equals( "More than" ) ) return FT_MoreThan; else if ( theStr.equals( "Equal to" ) ) return FT_EqualTo; diff --git a/src/SMESH_I/SMESH_Filter_i.hxx b/src/SMESH_I/SMESH_Filter_i.hxx index ce3246602..7a09289e0 100644 --- a/src/SMESH_I/SMESH_Filter_i.hxx +++ b/src/SMESH_I/SMESH_Filter_i.hxx @@ -316,6 +316,19 @@ protected: }; +/* + Class : BadOrientedVolume_i + Description : Verify whether a mesh volume is incorrectly oriented from + the point of view of MED convention +*/ +class BadOrientedVolume_i: public virtual POA_SMESH::BadOrientedVolume, + public virtual Predicate_i +{ + public: + BadOrientedVolume_i(); + FunctorType GetFunctorType(); +}; + /* Class : BelongToGeom_i Description : Predicate for selection on geometrical support @@ -706,6 +719,8 @@ public: RangeOfIds_ptr CreateRangeOfIds(); + BadOrientedVolume_ptr CreateBadOrientedVolume(); + LessThan_ptr CreateLessThan(); MoreThan_ptr CreateMoreThan(); EqualTo_ptr CreateEqualTo();