X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Filter_i.cxx;h=1348b83ef63c799bd0c0b455656344228c4b6afb;hp=95893bc0eb2a956816822096a72b1408e83cdf5c;hb=c21a157b9d128bf905d3a575d90fdbbb07ed3a2e;hpb=283a9b4f5af948bec54f81e3296d3185933eda1b 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;