X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Filter.cxx;h=05d00338731ce65d25add9145c7a92325d96dd34;hp=95e02173e8edea037f28fc4711fef1cb87bb7dfa;hb=20d9e162bd67182cbfa841bbfc9319919f4703e3;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/SMESHGUI/SMESHGUI_Filter.cxx b/src/SMESHGUI/SMESHGUI_Filter.cxx index 95e02173e..05d003387 100755 --- a/src/SMESHGUI/SMESHGUI_Filter.cxx +++ b/src/SMESHGUI/SMESHGUI_Filter.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -6,7 +6,7 @@ // 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. +// 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 @@ -33,23 +33,13 @@ #include #include -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_Filter, VTKViewer_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_Filter, VTKViewer_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_PredicateFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_PredicateFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_TriangleFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_TriangleFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_FacesFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_FacesFilter, SMESHGUI_Filter) - -IMPLEMENT_STANDARD_HANDLE(SMESHGUI_VolumesFilter, SMESHGUI_Filter) -IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_VolumesFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_Filter, VTKViewer_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_PredicateFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_TriangleFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_FacesFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_VolumesFilter, SMESHGUI_Filter) +OCCT_IMPLEMENT_STANDARD_RTTIEXT(SMESHGUI_VolumeShapeFilter, SMESHGUI_Filter) /* Class : SMESHGUI_PredicateFilter @@ -492,3 +482,86 @@ bool SMESHGUI_VolumesFilter::IsNodeFilter() const { return false; } + + +/* + Class : SMESHGUI_VolumeShapeFilter + Description : Verify whether selected cell is a volume of a certain shape +*/ + + +//======================================================================= +// name : SMESHGUI_VolumeShapeFilter::SMESHGUI_VolumeShapeFilter +// Purpose : Constructor +//======================================================================= +SMESHGUI_VolumeShapeFilter::SMESHGUI_VolumeShapeFilter(const SMDSAbs_GeometryType shape) + : SMESHGUI_Filter(), myGeometryType( shape ) +{ +} + +//======================================================================= +// name : SMESHGUI_VolumeShapeFilter::IsValid +// Purpose : Verify whether selected cell is a volume of a certain shape +//======================================================================= +bool SMESHGUI_VolumeShapeFilter::IsValid( const int theCellId ) const +{ + if ( myActor == 0 || theCellId < 1 ) + return false; + + SMESH_Actor* anActor = dynamic_cast< SMESH_Actor* >( myActor ); + if ( !anActor || anActor->GetObject() == 0 ) + return false; + + SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); + const SMDS_MeshElement* anElem = aMesh->FindElement( anActor->GetElemObjId( theCellId ) ); + + return anElem && anElem->GetGeomType() == myGeometryType; +} + +//======================================================================= +// name : SMESHGUI_VolumeShapeFilter::IsValid +// Purpose : Verify whether selected cell is volume +//======================================================================= +bool SMESHGUI_VolumeShapeFilter::IsObjValid( const int theObjId ) const +{ + if ( myActor == 0 ) + return false; + + SMESH_Actor* anActor = dynamic_cast< SMESH_Actor* >( myActor ); + if ( !anActor || anActor->GetObject() == 0 ) + return false; + + SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); + const SMDS_MeshElement* anElem = aMesh->FindElement( theObjId ); + + return anElem && anElem->GetGeomType() == myGeometryType; +} + +//======================================================================= +// name : SMESHGUI_VolumeShapeFilter::GetId +// Purpose : Get ID of the filter. Must return value from SMESHGUI_FilterType +// enumeration. All filters must have different ids +//======================================================================= +int SMESHGUI_VolumeShapeFilter::GetId() const +{ + return GetId( myGeometryType ); +} + +//======================================================================= +//function : GetId +//purpose : Compose filter ID basing on +//======================================================================= + +int SMESHGUI_VolumeShapeFilter::GetId( SMDSAbs_GeometryType shape ) +{ + return SMESH::FirstGeometryTypeFilter + shape; +} + +//======================================================================= +// name : SMESHGUI_VolumeShapeFilter::IsNodeFilter +// Purpose : Returns true if filter is intended for nodes +//======================================================================= +bool SMESHGUI_VolumeShapeFilter::IsNodeFilter() const +{ + return false; +}