// Copyright (C) 2007-2021 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 // #ifndef SMESHGUI_SELECTIONPROXY_H #define SMESHGUI_SELECTIONPROXY_H #include "SMESH_SMESHGUI.hxx" #include #include #include CORBA_SERVER_HEADER(SMESH_Mesh) #include CORBA_SERVER_HEADER(GEOM_Gen) #include #include #include #include #include #include class SMESH_Actor; namespace SMESH { class SMESHGUI_EXPORT MeshInfo { QMap myInfo; public: MeshInfo(); uint info( int ) const; uint operator[] ( int ); uint count( int, int ) const; private: void addInfo( int, long ); friend class SelectionProxy; }; class SMESHGUI_EXPORT MedInfo { QString myFileName; uint mySize; uint myMajor, myMinor, myRelease; public: MedInfo(); bool isValid() const; QString fileName() const; uint size() const; QString version() const; private: void setFileName( const QString& ); void setSize( uint ); void setVersion( uint, uint, uint ); friend class SelectionProxy; }; class SMESHGUI_EXPORT Position { int myShapeId; int myShapeType; double myU, myV; bool myHasU, myHasV; public: Position(); bool isValid() const; int shapeId() const; int shapeType() const; bool hasU() const; double u() const; bool hasV() const; double v() const; private: void setShapeId( int ); void setShapeType( int ); void setU( double ); void setV( double ); friend class SelectionProxy; }; class XYZ { double myX, myY, myZ; public: XYZ(); XYZ( double, double, double ); XYZ( const gp_XYZ& ); void add( double, double, double ); void divide( double ); double x() const; double y() const; double z() const; operator gp_XYZ() const; }; typedef QMap< int, QList > Connectivity; class SMESHGUI_EXPORT SelectionProxy { Handle(SALOME_InteractiveObject) myIO; SMESH::SMESH_IDSource_var myObject; SMESH_Actor* myActor; bool myDirty; public: enum Type { Unknown, Mesh, Submesh, Group, GroupStd, GroupGeom, GroupFilter }; // construction SelectionProxy(); SelectionProxy( const Handle(SALOME_InteractiveObject)& ); SelectionProxy( SMESH::SMESH_IDSource_ptr ); SelectionProxy( const SelectionProxy& ); SelectionProxy& operator= ( const SelectionProxy& ); // comparison bool operator== ( const SelectionProxy& ); // general purpose methods void refresh(); bool isNull() const; operator bool() const; SMESH::SMESH_IDSource_ptr object() const; const Handle(SALOME_InteractiveObject)& io() const; SMESH_Actor* actor() const; bool isValid() const; void load(); // methods common to all types of proxy QString name() const; Type type() const; MeshInfo meshInfo() const; SelectionProxy mesh() const; bool hasShapeToMesh() const; GEOM::GEOM_Object_ptr shape() const; QString shapeName() const; int shapeType() const; bool isMeshLoaded() const; bool hasNode( int ); bool nodeCoordinates( int, XYZ& ); bool nodeConnectivity( int, Connectivity& ); bool nodePosition( int, Position& ); QList nodeGroups( int ) const; bool hasElement( int ); SMESH::ElementType elementType( int ) const; int elementEntityType( int ) const; bool elementConnectivity( SMESH::smIdType, Connectivity& ); bool perFaceConnectivity( int, Connectivity&, int& ); bool elementPosition( int, Position& ); bool elementGravityCenter( int, XYZ& ); bool elementNormal( int, XYZ& ); bool elementControl( int, int, double, double& ) const; QList elementGroups( int ) const; // methods that work for mesh only MedInfo medFileInfo() const; QList submeshes() const; QList groups() const; // methods that work for group only SMESH::ElementType groupElementType() const; QColor color() const; SMESH::smIdType size( bool = false ) const; SMESH::smIdType nbNodes( bool = false ) const; QSet ids() const; private: void init(); }; } #endif // SMESHGUI_SELECTIONPROXY_H