X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHFiltersSelection%2FSMESH_TypeFilter.cxx;h=9b1394da7707557d4c95b800c73ecd80ff551c5a;hp=acf7cb815df2119aba9ee34ffbe9c2a594285b18;hb=5d68554076bbca0e1e95fb0db215a6c2b84b6c54;hpb=59ba8fec6989a647dd04ddcfc4112f98073eaaf2 diff --git a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx b/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx index acf7cb815..9b1394da7 100644 --- a/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx +++ b/src/SMESHFiltersSelection/SMESH_TypeFilter.cxx @@ -1,25 +1,50 @@ +// Copyright (C) 2007-2014 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 +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + #include "SMESH_TypeFilter.hxx" #include #include -#include +#include + +#include +#include CORBA_CLIENT_HEADER(SMESH_Gen) -SMESH_TypeFilter::SMESH_TypeFilter (MeshObjectType theType) +SMESH_TypeFilter::SMESH_TypeFilter (SMESH::MeshObjectType theType) { myType = theType; } -SMESH_TypeFilter::~SMESH_TypeFilter() +SMESH_TypeFilter::~SMESH_TypeFilter() { } bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const { - bool Ok = false; + bool Ok = false, extractReference = true; - const SalomeApp_DataOwner* owner = - dynamic_cast(theDataOwner); + const LightApp_DataOwner* owner = + dynamic_cast(theDataOwner); SalomeApp_Study* appStudy = dynamic_cast (SUIT_Session::session()->activeApplication()->activeStudy()); @@ -27,7 +52,9 @@ bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const _PTR(Study) study = appStudy->studyDS(); QString entry = owner->entry(); - _PTR(SObject) obj (study->FindObjectID(entry.latin1())); + _PTR(SObject) obj (study->FindObjectID(entry.toLatin1().data())), aRefSO; + if( extractReference && obj && obj->ReferencedObject( aRefSO ) ) + obj = aRefSO; if (!obj) return false; _PTR(SObject) objFather = obj->GetFather(); @@ -54,95 +81,146 @@ bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const // 4 | |- Applied algorithms ( selectable in Use Case Browser ) // 5 | |- Regular 1D // |- Group Of Nodes + // |- Group 1 if (aLevel <= 0) return false; switch (myType) - { - case HYPOTHESIS: - { - if ( aLevel == 2 && ( objFather->Tag() == 1 )) // hypo definition - Ok = true; - else if ( aLevel == 3 && ( objFather->Tag() == 2 )) // applied global hypo - Ok = true; - else if ( aLevel == 5 && ( objFather->Tag() == 2 )) // applied local hypo - Ok = true; - break; - } - case ALGORITHM: - { - if ( aLevel == 2 && ( objFather->Tag() == 2 )) // algo definition - Ok = true; - else if ( aLevel == 3 && ( objFather->Tag() == 3 )) // applied global algo - Ok = true; - else if ( aLevel == 5 && ( objFather->Tag() == 3 )) // applied local algo - Ok = true; - break; - } - case MESH: - { - if ( aLevel == 1 && ( obj->Tag() >= 3 )) - Ok = true; - break; - } - case SUBMESH: - { - // see SMESH_Gen_i.cxx for tag numbers - if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 )) - Ok = true; - break; - } - case MESHorSUBMESH: - { - if ( aLevel == 1 && ( obj->Tag() >= 3 )) - Ok = true; // mesh - else if ( aLevel == 3 && ( objFather->Tag() >= 4 && objFather->Tag() <= 10 )) - Ok = true; - break; - } - case SUBMESH_VERTEX: // Label "SubMeshes on vertexes" - { - if ( aLevel == 3 && ( objFather->Tag() == 4 )) - Ok = true; - break; - } - case SUBMESH_EDGE: - { - if ( aLevel == 3 && ( objFather->Tag() == 5 )) - Ok = true; - break; - } - case SUBMESH_FACE: - { - if ( aLevel == 3 && ( objFather->Tag() == 7 )) - Ok = true; - break; - } - case SUBMESH_SOLID: - { - if ( aLevel == 3 && ( objFather->Tag() == 9 )) - Ok = true; - break; - } - case SUBMESH_COMPOUND: - { - if ( aLevel == 3 && ( objFather->Tag() == 10 )) - Ok = true; - break; - } - case GROUP: - { - if ( aLevel == 3 && ( objFather->Tag() > 10 )) - Ok = true; - break; - } - } + { + case SMESH::HYPOTHESIS: + { + if (aLevel == 2 && (objFather->Tag() == SMESH::Tag_HypothesisRoot)) + // hypo definition + Ok = true; + else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis)) + // applied global hypo + Ok = true; + else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedHypothesis)) + // applied local hypo + Ok = true; + break; + } + case SMESH::ALGORITHM: + { + if (aLevel == 2 && (objFather->Tag() == SMESH::Tag_AlgorithmsRoot)) + // algo definition + Ok = true; + else if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms)) + // applied global algo + Ok = true; + else if (aLevel == 5 && (objFather->Tag() == SMESH::Tag_RefOnAppliedAlgorithms)) + // applied local algo + Ok = true; + break; + } + case SMESH::MESH: + { + if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot)) + Ok = true; + break; + } + case SMESH::SUBMESH: + { + // see SMESH_Gen_i.cxx for tag numbers + if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh && + objFather->Tag() <= SMESH::Tag_LastSubMesh)) + Ok = true; + break; + } + case SMESH::MESHorSUBMESH: + { + if (aLevel == 1 && (obj->Tag() >= SMESH::Tag_FirstMeshRoot)) + Ok = true; // mesh + else if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstSubMesh && + objFather->Tag() <= SMESH::Tag_LastSubMesh)) + Ok = true; + break; + } + case SMESH::SUBMESH_VERTEX: // Label "SubMeshes on vertexes" + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnVertex)) + Ok = true; + break; + } + case SMESH::SUBMESH_EDGE: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnEdge)) + Ok = true; + break; + } + case SMESH::SUBMESH_FACE: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnFace)) + Ok = true; + break; + } + case SMESH::SUBMESH_SOLID: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnSolid)) + Ok = true; + break; + } + case SMESH::SUBMESH_COMPOUND: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_SubMeshOnCompound)) + Ok = true; + break; + } + case SMESH::GROUP: + { + if (aLevel == 3 && (objFather->Tag() >= SMESH::Tag_FirstGroup)) + Ok = true; + break; + } + case SMESH::GROUP_NODE: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_NodeGroups)) + Ok = true; + break; + } + case SMESH::GROUP_EDGE: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_EdgeGroups)) + Ok = true; + break; + } + case SMESH::GROUP_FACE: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_FaceGroups)) + Ok = true; + break; + } + case SMESH::GROUP_VOLUME: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_VolumeGroups)) + Ok = true; + break; + } + case SMESH::GROUP_0D: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_0DElementsGroups)) + Ok = true; + break; + } + case SMESH::GROUP_BALL: + { + if (aLevel == 3 && (objFather->Tag() == SMESH::Tag_BallElementsGroups)) + Ok = true; + break; + } + case SMESH::IDSOURCE: + { + Ok = ( SMESH_TypeFilter(SMESH::MESHorSUBMESH).isOk( theDataOwner ) || + SMESH_TypeFilter(SMESH::GROUP) .isOk( theDataOwner )); + break; + } + } } return Ok; } -MeshObjectType SMESH_TypeFilter::type() const +SMESH::MeshObjectType SMESH_TypeFilter::type() const { return myType; }