X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshInfo.h;h=82e3adc6c7c574f998b460913d9b1a05ec860fa5;hp=f66a59000a28c11eeffcc178be8f6bf4fe72a8ef;hb=HEAD;hpb=14570f80e3fa5f4abce93a814405f3b3f930c2d3 diff --git a/src/SMESHGUI/SMESHGUI_MeshInfo.h b/src/SMESHGUI/SMESHGUI_MeshInfo.h index f66a59000..d595c1c94 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfo.h +++ b/src/SMESHGUI/SMESHGUI_MeshInfo.h @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, 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 @@ -19,74 +19,94 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : SMESHGUI_MeshInfo.h -// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) #ifndef SMESHGUI_MESHINFO_H #define SMESHGUI_MESHINFO_H #include "SMESH_SMESHGUI.hxx" -#include -#include "SMESH_ControlsDef.hxx" +#include "SMESHGUI_SelectionProxy.h" -#include +#ifndef DISABLE_PLOT2DVIEWER + #include +#else + #include +#endif -#include #include #include #include #include -#include -#include +#include #include -#include CORBA_SERVER_HEADER(SMESH_Mesh) -#include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_Filter) + +#include +#include +class QAbstractButton; class QButtonGroup; +class QCheckBox; class QContextMenuEvent; class QLabel; class QLineEdit; -class QPushButton; class QTabWidget; class QTextBrowser; -class SMESH_Actor; -class SMDS_MeshNode; +class QTreeWidget; +class QTreeWidgetItem; class SMDS_MeshElement; +class SMDS_MeshNode; +class SMESHGUI_IdPreview; +class SMESHGUI_SpinBox; class ExtraWidget; +class GroupCombo; +class InfoWriter; -class SMESHGUI_EXPORT SMESHGUI_MeshInfo : public QFrame +class SMESHGUI_EXPORT SMESHGUI_Info : public QWidget { - Q_OBJECT; +public: + SMESHGUI_Info( QWidget* = 0 ); + virtual void saveInfo( QTextStream& ) = 0; +}; + +class SMESHGUI_EXPORT SMESHGUI_BaseInfo : public SMESHGUI_Info +{ + Q_OBJECT - enum { - iName, + enum + { + iStart, + iObjectStart = iStart, + iName = iObjectStart, iObject, - iNodesStart, + iObjectEnd, + iNodesStart = iObjectEnd, iNodes, iNodesEnd, - iElementsStart = iNodesEnd, - iElements, - iNbStart, - iNb, - iNbEnd, - i0DStart = iNbEnd, + iElementsStart = iNodesEnd, + iElementsTitleStart = iElementsStart, + iElementsTitle, + iElementsTitleEnd, + iElementsTotalStart = iElementsTitleEnd, + iElementsTotal, + iElementsTotalEnd, + i0DStart = iElementsTotalEnd, i0D, i0DEnd, iBallsStart = i0DEnd, iBalls, iBallsEnd, - i1DStart = iBallsEnd, + i1DStart = iBallsEnd, i1D, i1DEnd, - i2DStart = i1DEnd, + i2DStart = i1DEnd, i2D, i2DTriangles, i2DQuadrangles, i2DPolygons, i2DEnd, - i3DStart = i2DEnd, + i3DStart = i2DEnd, i3D, i3DTetrahedrons, i3DHexahedrons, @@ -95,97 +115,93 @@ class SMESHGUI_EXPORT SMESHGUI_MeshInfo : public QFrame i3DHexaPrisms, i3DPolyhedrons, i3DEnd, - iElementsEnd = i3DEnd + iElementsEnd = i3DEnd, + iEnd, + iOther = iEnd }; - enum { - iSingle = 1, - iTotal = iSingle, + enum + { + iLabel, + iSingle, + iTotal = iSingle, iLinear, - iQuadratic + iQuadratic, + iBiQuadratic, + iNbColumns }; - typedef QList wlist; - typedef QVector iwlist; + typedef QMap wlist; + typedef QMap iwlist; public: - SMESHGUI_MeshInfo( QWidget* = 0 ); - ~SMESHGUI_MeshInfo(); + SMESHGUI_BaseInfo( QWidget* = 0 ); + ~SMESHGUI_BaseInfo(); - void showInfo( SMESH::SMESH_IDSource_ptr ); - void clear(); - void saveInfo( QTextStream &out ); + void showInfo( const SMESH::SelectionProxy& ); + void clear(); + void saveInfo( QTextStream& ); private: - enum { Bold = 0x01, Italic = 0x02 }; - - QLabel* createField(); - QWidget* createLine(); - void setFontAttributes( QWidget*, int, bool = true ); - void setFieldsVisible( int, int, bool ); + QWidget* addWidget( QWidget*, int, int, int = 1 ); + QWidget* widget( int, int ) const; + QString value( int, int ) const; + void setFieldsVisible( int, int, bool ); private slots: + void updateInfo(); void loadMesh(); private: - iwlist myWidgets; - QPushButton* myLoadBtn; + iwlist myWidgets; + SMESH::SelectionProxy myProxy; }; -class SMESHGUI_EXPORT SMESHGUI_ElemInfo : public QWidget +class SMESHGUI_EXPORT SMESHGUI_ElemInfo : public SMESHGUI_Info { - Q_OBJECT; + Q_OBJECT public: SMESHGUI_ElemInfo( QWidget* = 0 ); ~SMESHGUI_ElemInfo(); - void setSource( SMESH_Actor* ); - void showInfo( long, bool ); - void showInfo( QSet, bool ); - void clear(); - virtual void saveInfo( QTextStream &out ) = 0; + void showInfo( const SMESH::SelectionProxy&, uint, bool ); + void showInfo( const SMESH::SelectionProxy&, QSet, bool ); + void showInfo( const SMESH::SelectionProxy& ); + void clear(); + void saveInfo( QTextStream& ); protected: - struct XYZ - { - double myX, myY, myZ; - XYZ() { myX = myY = myZ = 0.0; } - void add( double x, double y, double z ) { myX += x; myY += y; myZ += z; } - void divide( double a ) { if ( a != 0.) { myX /= a; myY /= a; myZ /= a; } } - double x() const { return myX; } - double y() const { return myY; } - double z() const { return myZ; } - }; - typedef QMap< int, QList > Connectivity; + enum { ShowNone, ShowNodes, ShowElements }; - QWidget* frame() const; - SMESH_Actor* actor() const; - bool isElements() const; + QWidget* centralWidget() const; - virtual void information( const QList& ) = 0; - virtual void clearInternal(); + SMESH::SelectionProxy proxy() const; + int what() const; - Connectivity nodeConnectivity( const SMDS_MeshNode* ); - QString formatConnectivity( Connectivity, int ); - XYZ gravityCenter( const SMDS_MeshElement* ); + QString type2str( int, bool = false ); + QString stype2str( int ); + QString etype2str( int ); + QString ctrl2str( int ); + void writeInfo( InfoWriter*, const QList& ); + virtual void information( const QList& ) = 0; + virtual void clearInternal(); signals: - void itemInfo( int ); - void itemInfo( const QString& ); + void itemInfo( int type, const QString& ids ); private slots: - void showPrevious(); - void showNext(); - void updateControls(); + void showPrevious(); + void showNext(); + void updateControls(); private: - SMESH_Actor* myActor; - QList myIDs; - int myIsElement; - QWidget* myFrame; - ExtraWidget* myExtra; - int myIndex; + QWidget* myFrame; + ExtraWidget* myExtra; + SMESH::SelectionProxy myProxy; + int myWhat; + QList myIDs; + int myIndex; }; class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo @@ -194,139 +210,164 @@ class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo public: SMESHGUI_SimpleElemInfo( QWidget* = 0 ); - void saveInfo( QTextStream &out ); protected: - void information( const QList& ); - void clearInternal(); + void information( const QList& ); + void clearInternal(); -private: +private slots: + void connectivityClicked(const QUrl &); + + private: QTextBrowser* myInfo; }; class SMESHGUI_EXPORT SMESHGUI_TreeElemInfo : public SMESHGUI_ElemInfo { - Q_OBJECT; + Q_OBJECT class ItemDelegate; - - enum { Bold = 0x01, All = 0x80 }; + class ItemCreator; public: SMESHGUI_TreeElemInfo( QWidget* = 0 ); - void saveInfo( QTextStream &out ); protected: - void contextMenuEvent( QContextMenuEvent* e ); - void information( const QList& ); - void clearInternal(); + void contextMenuEvent( QContextMenuEvent* ); + void information( const QList& ); + void nodeInfo( const SMDS_MeshNode*, int, int, QTreeWidgetItem* ); + void clearInternal(); private slots: - void itemDoubleClicked( QTreeWidgetItem*, int ); - + void itemDoubleClicked( QTreeWidgetItem*, int ); + void saveExpanded( QTreeWidgetItem* ); + private: QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 0 ); + QString expandedResource( QTreeWidgetItem* ); private: - QTreeWidget* myInfo; + QTreeWidget* myInfo; }; -class GrpComputor: public QObject +class InfoComputor: public QObject { - Q_OBJECT; + Q_OBJECT public: - GrpComputor( SMESH::SMESH_GroupBase_ptr, QTreeWidgetItem*, QObject* ); - QTreeWidgetItem* getItem() { return myItem; } + enum { GrpSize, GrpNbNodes }; + + InfoComputor( QObject*, const SMESH::SelectionProxy&, int ); + +signals: + void computed(); public slots: void compute(); private: - SMESH::SMESH_GroupBase_var myGroup; - QTreeWidgetItem* myItem; + SMESH::SelectionProxy myProxy; + int myOperation; }; -class SMESHGUI_EXPORT SMESHGUI_AddInfo : public QTreeWidget +class SMESHGUI_EXPORT SMESHGUI_AddInfo : public SMESHGUI_Info { - Q_OBJECT; - - enum { Bold = 0x01, All = 0x80 }; + Q_OBJECT public: SMESHGUI_AddInfo( QWidget* = 0 ); ~SMESHGUI_AddInfo(); - void showInfo( SMESH::SMESH_IDSource_ptr ); - // void clear(); - void saveInfo( QTextStream &out ); + void showInfo( const SMESH::SelectionProxy& ); + void clear(); + void saveInfo( QTextStream& ); private slots: - void changeLoadToCompute(); - void showPreviousGroups(); - void showNextGroups(); - void showPreviousSubMeshes(); - void showNextSubMeshes(); + void updateInfo(); + void showPreviousGroups(); + void showNextGroups(); + void showPreviousSubMeshes(); + void showNextSubMeshes(); private: QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 0 ); - void meshInfo( SMESH::SMESH_Mesh_ptr, QTreeWidgetItem* ); - void subMeshInfo( SMESH::SMESH_subMesh_ptr, QTreeWidgetItem* ); - void groupInfo( SMESH::SMESH_GroupBase_ptr, QTreeWidgetItem* ); + void meshInfo( const SMESH::SelectionProxy&, QTreeWidgetItem* ); + void subMeshInfo( const SMESH::SelectionProxy&, QTreeWidgetItem* ); + void groupInfo( const SMESH::SelectionProxy&, QTreeWidgetItem* ); - void showGroups(); - void showSubMeshes(); + void showGroups(); + void showSubMeshes(); private: - QList myComputors; - SMESH::ListOfGroups_var myGroups; - SMESH::submesh_array_var mySubMeshes; + SMESH::SelectionProxy myProxy; + QTreeWidget* myTree; + QList myComputors; + QList myGroups; + QList mySubMeshes; }; -class SMESHGUI_EXPORT SMESHGUI_CtrlInfo : public QFrame +class SMESHGUI_EXPORT SMESHGUI_CtrlInfo : public SMESHGUI_Info { - Q_OBJECT; + Q_OBJECT public: SMESHGUI_CtrlInfo( QWidget* = 0 ); ~SMESHGUI_CtrlInfo(); - void showInfo( SMESH::SMESH_IDSource_ptr ); - void saveInfo( QTextStream &out ); + void showInfo( const SMESH::SelectionProxy& ); + void saveInfo( QTextStream& ); private: - QLabel* createField(); - QwtPlot* createPlot( QWidget* ); - void setFontAttributes( QWidget* ); - void clearInternal(); - int nbElemsControl( SMESH::long_array_var&, SMESH::Controls::FunctorPtr ); - Plot2d_Histogram* getHistogram( SMESH::long_array_var&, SMESH::Controls::NumericalFunctorPtr ); + enum ObjectType { Mesh, SubMesh, Group }; + QwtPlot* createPlot( QWidget* ); + void clearInternal(); +#ifndef DISABLE_PLOT2DVIEWER + Plot2d_Histogram* getHistogram( SMESH::NumericalFunctor_ptr ); +#endif + void computeNb( int, int, int ); private slots: - void computeFaceInfo(); - void computeVolumeInfo(); + void computeAspectRatio(); + void computeAspectRatio3D(); + void computeFreeNodesInfo(); + void computeNodesNbConnInfo(); + void computeDoubleNodesInfo(); + void computeDoubleEdgesInfo(); + void computeDoubleFacesInfo(); + void computeOverConstrainedFacesInfo(); + void computeDoubleVolumesInfo(); + void computeOverConstrainedVolumesInfo(); + void setTolerance( double ); private: + typedef SALOME::GenericObj_wrap< SMESH::Predicate > TPredicate; + typedef SALOME::GenericObj_wrap< SMESH::NumericalFunctor > TNumFunctor; + SMESH::SelectionProxy myProxy; + ObjectType myObjectType; + SMESHGUI_SpinBox* myToleranceWidget; QList myWidgets; - QwtPlot* myPlot; - QwtPlot* myPlot3D; - QPushButton* myComputeFaceBtn; - QPushButton* myComputeVolumeBtn; + QToolBox* myMeshTB; + QwtPlot* myPlot; + QwtPlot* myPlot3D; + QList myButtons; + QList myPredicates; + TNumFunctor myAspectRatio, myAspectRatio3D, myNodeConnFunctor; }; class SMESHGUI_EXPORT SMESHGUI_MeshInfoDlg : public QDialog { - Q_OBJECT; + Q_OBJECT - enum { NodeMode, ElemMode }; + enum { NodeMode, ElemMode, GroupMode }; public: //! Information type - enum { + enum + { BaseInfo, //!< base mesh information ElemInfo, //!< mesh element information AddInfo, //!< additional information - CtrlInfo //!< controls information + CtrlInfo //!< controls information }; SMESHGUI_MeshInfoDlg( QWidget* = 0, int = BaseInfo ); @@ -337,34 +378,40 @@ public: protected: void keyPressEvent( QKeyEvent* ); - void enterEvent( QEvent* ); + +signals: + void switchMode( int ); private slots: void help(); void updateSelection(); void updateInfo(); - void activate(); void deactivate(); void modeChanged(); void idChanged(); - void showItemInfo( int ); - void showItemInfo( const QString& ); + void idPreviewChange( bool ); + void showItemInfo( int type, const QString& ids ); void dump(); private: - QTabWidget* myTabWidget; - SMESHGUI_MeshInfo* myBaseInfo; - QButtonGroup* myMode; - QLineEdit* myID; - SMESHGUI_ElemInfo* myElemInfo; - SMESHGUI_AddInfo* myAddInfo; + void showInfo( const SMESH::SelectionProxy& ); + + SMESH::SelectionProxy myProxy; + QTabWidget* myTabWidget; + SMESHGUI_BaseInfo* myBaseInfo; + SMESHGUI_ElemInfo* myElemInfo; + SMESHGUI_AddInfo* myAddInfo; SMESHGUI_CtrlInfo* myCtrlInfo; - SMESH_Actor* myActor; + QButtonGroup* myMode; + QLineEdit* myID; + QCheckBox* myIDPreviewCheck; + GroupCombo* myGroups; + SMESHGUI_IdPreview* myIDPreview; }; class SMESHGUI_EXPORT SMESHGUI_CtrlInfoDlg : public QDialog { - Q_OBJECT; + Q_OBJECT public: SMESHGUI_CtrlInfoDlg( QWidget* = 0 ); @@ -375,12 +422,16 @@ public: private slots: void updateInfo(); - void activate(); void deactivate(); void updateSelection(); + void help(); + void dump(); private: - SMESHGUI_CtrlInfo* myCtrlInfo; + void showInfo( const SMESH::SelectionProxy& ); + + SMESH::SelectionProxy myProxy; + SMESHGUI_CtrlInfo* myCtrlInfo; }; #endif // SMESHGUI_MESHINFO_H