X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Filter_i.cxx;h=6916ea344e7db7d910cf9dbea35bc74cb58e9a10;hb=f377659e8246493e9e4617df27bab0cd56f10405;hp=fc5314b8cbf339ae8721f9bd3ab80bd492256889;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx index fc5314b8c..6916ea344 100644 --- a/src/SMESH_I/SMESH_Filter_i.cxx +++ b/src/SMESH_I/SMESH_Filter_i.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2013 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 @@ -24,18 +24,18 @@ // File : SMESH_Filter_i.cxx // Author : Alexey Petrov, OCC // Module : SMESH -// -#include "SMESH_Filter_i.hxx" -#include "SMESH_Gen_i.hxx" -#include "SMESH_PythonDump.hxx" +#include "SMESH_Filter_i.hxx" +#include "SMDS_ElemIterator.hxx" #include "SMDS_Mesh.hxx" -#include "SMDS_MeshNode.hxx" #include "SMDS_MeshElement.hxx" -#include "SMDS_ElemIterator.hxx" - +#include "SMDS_MeshNode.hxx" #include "SMESHDS_Mesh.hxx" +#include "SMESH_Gen_i.hxx" +#include "SMESH_PythonDump.hxx" + +#include #include #include @@ -496,7 +496,9 @@ static TopoDS_Shape getShapeByName( const char* theName ) { CORBA::Object_var anObj = aList[ 0 ]->GetObject(); GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( anObj ); - return aSMESHGen->GeomObjectToShape( aGeomObj ); + TopoDS_Shape shape = aSMESHGen->GeomObjectToShape( aGeomObj ); + SALOME::UnRegister( aList ); // UnRegister() objects in aList + return shape; } } } @@ -509,7 +511,7 @@ static TopoDS_Shape getShapeByID (const char* theID) SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID); + SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID); if ( !aSObj->_is_nil() ) { CORBA::Object_var obj = aSObj->GetObject(); GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj); @@ -526,7 +528,7 @@ static std::string getShapeNameByID (const char* theID) SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy(); if ( !aStudy->_is_nil() ) { - SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theID); + SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID); if ( !aSObj->_is_nil() ) { CORBA::String_var name = aSObj->GetName(); return name.in(); @@ -578,12 +580,12 @@ CORBA::Double NumericalFunctor_i::GetValue( CORBA::Long theId ) return myNumericalFunctorPtr->GetValue( theId ); } -SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals) +SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic) { std::vector nbEvents; std::vector funValues; std::vector elements; - myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements); + myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements,0,isLogarithmic); #ifdef WIN32 nbIntervals = CORBA::Short( min( nbEvents.size(), funValues.size() - 1)); @@ -701,7 +703,6 @@ FunctorType Taper_i::GetFunctorType() return SMESH::FT_Taper; } - /* Class : Skew_i Description : Functor for calculating skew in degrees @@ -1636,6 +1637,37 @@ FunctorType ElemGeomType_i::GetFunctorType() return SMESH::FT_ElemGeomType; } +/* + Class : ElemEntityType_i + Description : Predicate check is element has indicated entity type +*/ +ElemEntityType_i::ElemEntityType_i() +{ + myElemEntityTypePtr.reset(new Controls::ElemEntityType()); + myFunctorPtr = myPredicatePtr = myElemEntityTypePtr; +} + +void ElemEntityType_i::SetElementType(ElementType theType) +{ + myElemEntityTypePtr->SetType(SMDSAbs_ElementType(theType)); + TPythonDump()<SetElemEntityType(SMDSAbs_EntityType (theEntityType)); + TPythonDump()<GetElemEntityType(); +} + +FunctorType ElemEntityType_i::GetFunctorType() +{ + return SMESH::FT_EntityType; +} + /* Class : CoplanarFaces_i Description : Returns true if a mesh face is a coplanar neighbour to a given one @@ -2311,6 +2343,14 @@ ElemGeomType_ptr FilterManager_i::CreateElemGeomType() return anObj._retn(); } +ElemEntityType_ptr FilterManager_i::CreateElemEntityType() +{ + SMESH::ElemEntityType_i* aServant = new SMESH::ElemEntityType_i(); + SMESH::ElemEntityType_var anObj = aServant->_this(); + TPythonDump()<GetGeometryType(); return true; } + case FT_EntityType: + { + CORBA::ULong i = theCriteria->length(); + theCriteria->length( i + 1 ); + + theCriteria[ i ] = createCriterion(); + + ElemEntityType_i* aPred = dynamic_cast( thePred ); + theCriteria[ i ].Type = aFType; + theCriteria[ i ].Threshold = (double)aPred->GetEntityType(); + return true; + } case FT_Undefined: return false; @@ -3042,6 +3094,14 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria aPredicate = tmpPred; break; } + case SMESH::FT_EntityType: + { + SMESH::ElemEntityType_ptr tmpPred = aFilterMgr->CreateElemEntityType(); + tmpPred->SetElementType( aTypeOfElem ); + tmpPred->SetEntityType( EntityType( (int (aThreshold + 0.5)))); + aPredicate = tmpPred; + break; + } case SMESH::FT_CoplanarFaces: { SMESH::CoplanarFaces_ptr tmpPred = aFilterMgr->CreateCoplanarFaces(); @@ -3288,6 +3348,7 @@ static inline LDOMString toString( CORBA::Long theType ) case FT_GroupColor : return "Color of Group"; case FT_LinearOrQuadratic : return "Linear or Quadratic"; case FT_ElemGeomType : return "Element geomtry type"; + case FT_EntityType : return "Entity type"; case FT_Undefined : return ""; default : return ""; } @@ -3340,6 +3401,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr ) else if ( theStr.equals( "Color of Group" ) ) return FT_GroupColor; else if ( theStr.equals( "Linear or Quadratic" ) ) return FT_LinearOrQuadratic; else if ( theStr.equals( "Element geomtry type" ) ) return FT_ElemGeomType; + else if ( theStr.equals( "Entity type" ) ) return FT_EntityType; else if ( theStr.equals( "" ) ) return FT_Undefined; else return FT_Undefined; } @@ -3902,6 +3964,7 @@ static const char** getFunctNames() "FT_LinearOrQuadratic", "FT_GroupColor", "FT_ElemGeomType", + "FT_EntityType", "FT_CoplanarFaces", "FT_BallDiameter", "FT_LessThan", @@ -3910,7 +3973,7 @@ static const char** getFunctNames() "FT_LogicalNOT", "FT_LogicalAND", "FT_LogicalOR", - "FT_Undefined" }; + "FT_Undefined"}; return functName; }