X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Filter_i.cxx;h=c5cc1291633b2ed6713f42506cd92de020d61747;hb=refs%2Fheads%2Fagy%2Fmed41;hp=6b64f7005a3da1e7cfcee91075bcb6b9eba9aedb;hpb=10191484fe88a27e962b8e4b57e09d390d8705c7;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index 6b64f7005..c5cc12916 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -20,7 +20,7 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses +// SMESH SMESH_I : idl implementation based on 'SMESH' unit's classes // File : SMESH_Filter_i.cxx // Author : Alexey Petrov, OCC // Module : SMESH @@ -181,7 +181,7 @@ static TopoDS_Shape getShapeByID (const char* theID) /* Class : Functor_i - Description : An abstact class for all functors + Description : An abstract class for all functors */ Functor_i::Functor_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() ) @@ -217,6 +217,11 @@ CORBA::Double NumericalFunctor_i::GetValue( CORBA::Long theId ) return myNumericalFunctorPtr->GetValue( theId ); } +CORBA::Boolean NumericalFunctor_i::IsApplicable( CORBA::Long theElementId ) +{ + return myNumericalFunctorPtr->IsApplicable( theElementId ); +} + SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic) { std::vector nbEvents; @@ -521,6 +526,46 @@ SMESH::Length2D::Values* Length2D_i::GetValues() return aResult._retn(); } + +/* + Class : Length3D_i + Description : Functor for calculating length of edge +*/ +Length3D_i::Length3D_i() +{ + myNumericalFunctorPtr.reset( new Controls::Length3D() ); + myFunctorPtr = myNumericalFunctorPtr; +} + +FunctorType Length3D_i::GetFunctorType() +{ + return SMESH::FT_Length3D; +} + +// SMESH::Length3D::Values* Length3D_i::GetValues() +// { +// SMESH::Controls::Length3D::TValues aValues; +// (dynamic_cast(myFunctorPtr.get()))->GetValues( aValues ); + +// long i = 0, iEnd = aValues.size(); + +// SMESH::Length3D::Values_var aResult = new SMESH::Length3D::Values(iEnd); +// aResult->length(iEnd); + +// SMESH::Controls::Length3D::TValues::const_iterator anIter; +// for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ ) +// { +// const SMESH::Controls::Length3D::Value& aVal = *anIter; +// SMESH::Length3D::Value &aValue = aResult[ i ]; + +// aValue.myLength = aVal.myLength; +// aValue.myPnt1 = aVal.myPntId[ 0 ]; +// aValue.myPnt2 = aVal.myPntId[ 1 ]; +// } + +// return aResult._retn(); +// } + /* Class : Deflection2D_i Description : Functor for calculating distance between a face and geometry @@ -858,9 +903,7 @@ void BelongToGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom ) { if ( theGeom->_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); myBelongToGeomPtr->SetGeom( aLocShape ); TPythonDump()<_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); if ( aLocShape.ShapeType() == TopAbs_FACE ) { @@ -1128,9 +1169,7 @@ void LyingOnGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom ) { if ( theGeom->_is_nil() ) return; - SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); - GEOM::GEOM_Gen_ptr aGEOMGen = SMESH_Gen_i::GetGeomEngine(); - TopoDS_Shape aLocShape = aSMESHGen->GetShapeReader()->GetShape( aGEOMGen, theGeom ); + TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom ); myLyingOnGeomPtr->SetGeom( aLocShape ); TPythonDump()<_this(); + TPythonDump()<_this(); - TPythonDump()< 0 && myPredicate ) + { + SMESH_Mesh_ptr mesh = theParts[0]->GetMesh(); + mesh->Load(); + const SMDS_Mesh* meshDS = MeshPtr2SMDSMesh( mesh ); + Controls::Filter::TIdSequence totalSequence; + for ( CORBA::ULong i = 0; i < theParts.length(); ++i ) + { + if ( SMESH::Filter_i* filter = SMESH::DownCast( theParts[i] )) + filter->SetMesh( mesh ); + SMDS_ElemIteratorPtr iter = SMESH_Mesh_i::GetElements( theParts[i], GetElementType() ); + if ( iter && meshDS ) + { + Controls::Filter::TIdSequence sequence; + Controls::Filter::GetElementsId( meshDS, myPredicate->GetPredicate(), sequence, iter ); + totalSequence.insert( totalSequence.end(), sequence.begin(), sequence.end() ); + } + } + array->length( totalSequence.size() ); + for ( size_t i = 0; i < totalSequence.size(); ++i ) + array[ i ] = totalSequence[ i ]; + } + return array._retn(); +} + //============================================================================= /*! * \brief Returns number of mesh elements per each \a EntityType @@ -2958,6 +3035,9 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria case SMESH::FT_Length2D: aFunctor = aFilterMgr->CreateLength2D(); break; + case SMESH::FT_Length3D: + aFunctor = aFilterMgr->CreateLength3D(); + break; case SMESH::FT_Deflection2D: aFunctor = aFilterMgr->CreateDeflection2D(); break; @@ -3459,6 +3539,7 @@ static inline LDOMString toString( CORBA::Long theType ) case FT_MultiConnection2D : return "Borders at multi-connections 2D"; case FT_Length : return "Length"; case FT_Length2D : return "Length 2D"; + case FT_Length3D : return "Length 3D"; case FT_Deflection2D : return "Deflection 2D"; case FT_LessThan : return "Less than"; case FT_MoreThan : return "More than"; @@ -3508,6 +3589,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) // else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D; else if ( theStr.equals( "Length" ) ) return FT_Length; // else if ( theStr.equals( "Length2D" ) ) return FT_Length2D; + // else if ( theStr.equals( "Length3D" ) ) return FT_Length3D; else if ( theStr.equals( "Deflection" ) ) return FT_Deflection2D; else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds; else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume; @@ -4074,6 +4156,7 @@ static const char** getFunctNames() "FT_MultiConnection2D", "FT_Length", "FT_Length2D", + "FT_Length3D", "FT_Deflection2D", "FT_NodeConnectivityNumber", "FT_BelongToMeshGroup",