Salome HOME
[bos #32739][CEA] 3D warp
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_MeshInfo.cxx
index 142f41ad549721e31c2895ef7db69330805f78da..24c610d783233a1976abede0dbb3a83fbff5d3af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  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
 #include <QVBoxLayout>
 
 ////////////////////////////////////////////////////////////////////////////////
-/// \class Field
-/// \brief Field widget.
+/// \class FieldInfo
+/// \brief FieldInfo widget.
 /// \internal
 ////////////////////////////////////////////////////////////////////////////////
 
-class Field : public QLabel
+class FieldInfo : public QLabel
 {
 public:
-  Field( QWidget*, const QString& = QString() );
+  FieldInfo( QWidget*, const QString& = QString() );
   bool event( QEvent* );
 };
 
 /*!
   \brief Constructor.
   \param parent Parent widget.
-  \param name Field name. Defaults to null string.
+  \param name FieldInfo name. Defaults to null string.
 */
-Field::Field( QWidget* parent, const QString& name ): QLabel( parent )
+FieldInfo::FieldInfo( QWidget* parent, const QString& name ): QLabel( parent )
 {
   setFrameStyle( QLabel::StyledPanel | QLabel::Sunken );
   setAlignment( Qt::AlignCenter );
@@ -100,7 +100,7 @@ Field::Field( QWidget* parent, const QString& name ): QLabel( parent )
 /*!
   \brief Event handler. Redefined from QLabel.
 */
-bool Field::event( QEvent* e )
+bool FieldInfo::event( QEvent* e )
 {
   if ( e->type() == QEvent::DynamicPropertyChange )
   {
@@ -332,12 +332,12 @@ namespace
   /*!
     \brief Create information field.
     \param parent Parent widget.
-    \param name Field's object. Default to null string.
-    \return New field.
+    \param name FieldInfo's object. Default to null string.
+    \return New FieldInfo.
   */
   QLabel* createField( QWidget* parent, const QString& name = QString() )
   {
-    return new Field( parent, name );
+    return new FieldInfo( parent, name );
   }
 
   /*!
@@ -1674,6 +1674,8 @@ QString SMESHGUI_ElemInfo::ctrl2str( int control )
     title = tr( "ASPECTRATIO_3D_ELEMENTS" ); break;
   case SMESH::FT_Warping:
     title = tr( "WARP_ELEMENTS" ); break;
+  case SMESH::FT_Warping3D:
+    title = tr( "WARP_3D_ELEMENTS" ); break;
   case SMESH::FT_MinimumAngle:
     title = tr( "MINIMUMANGLE_ELEMENTS" ); break;
   case SMESH::FT_Taper:
@@ -1684,6 +1686,8 @@ QString SMESHGUI_ElemInfo::ctrl2str( int control )
     title = tr( "AREA_ELEMENTS" ); break;
   case SMESH::FT_Volume3D:
     title = tr( "VOLUME_3D_ELEMENTS" ); break;
+  case SMESH::FT_ScaledJacobian:
+    title = tr( "SCALED_JACOBIAN" ); break;  
   case SMESH::FT_MaxElementLength2D:
     title = tr( "MAX_ELEMENT_LENGTH_2D" ); break;
   case SMESH::FT_MaxElementLength3D:
@@ -1804,8 +1808,8 @@ void SMESHGUI_ElemInfo::writeInfo( InfoWriter* writer, const QList<uint>& ids )
               writer->write( SMESHGUI_AddInfo::tr( "TYPE" ), SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) );
             }
             int size = group.size();
-            if ( size != -1 );
-            writer->write( SMESHGUI_AddInfo::tr( "SIZE" ), size );
+            if ( size != -1 )
+              writer->write( SMESHGUI_AddInfo::tr( "SIZE" ), size );
             QColor color = group.color();
             if ( color.isValid() )
               writer->write( SMESHGUI_AddInfo::tr( "COLOR" ), color.name() );
@@ -1935,7 +1939,7 @@ void SMESHGUI_ElemInfo::writeInfo( InfoWriter* writer, const QList<uint>& ids )
               writer->write( SMESHGUI_AddInfo::tr( "TYPE" ), SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) );
             }
             int size = group.size();
-            if ( size != -1 );
+            if ( size != -1 )
               writer->write( SMESHGUI_AddInfo::tr( "SIZE" ), size );
             QColor color = group.color();
             if ( color.isValid() )
@@ -2175,8 +2179,8 @@ void SMESHGUI_TreeElemInfo::information( const QList<uint>& ids )
   \param nbNodes number of unique nodes in element
   \param parentItem parent item of tree
 */
-void SMESHGUI_TreeElemInfo::nodeInfo( const SMDS_MeshNode* node, int index,
-                                      int nbNodes, QTreeWidgetItem* parentItem )
+void SMESHGUI_TreeElemInfo::nodeInfo( const SMDS_MeshNode* /*node*/, int /*index*/,
+                                      int /*nbNodes*/, QTreeWidgetItem* /*parentItem*/ )
 {
   // int precision   = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
   // // node number and ID
@@ -2284,7 +2288,7 @@ void SMESHGUI_TreeElemInfo::contextMenuEvent( QContextMenuEvent* e )
   }
 }
 
-void SMESHGUI_TreeElemInfo::itemDoubleClicked( QTreeWidgetItem* theItem, int theColumn )
+void SMESHGUI_TreeElemInfo::itemDoubleClicked( QTreeWidgetItem* theItem, int /*theColumn*/ )
 {
   if ( theItem ) {
     int type = theItem->data( 1, TypeRole ).toInt();
@@ -3315,7 +3319,7 @@ void SMESHGUI_MeshInfoDlg::idChanged()
   myIDPreview->SetPointsLabeled( false );
 
   if ( myProxy ) {
-    TColStd_MapOfInteger ID;
+    SVTK_TVtkIDsMap      ID;
     QSet<uint>           ids;
     std::vector<int>     idVec;
     std::list< gp_XYZ >  aGrCentersXYZ;
@@ -3402,7 +3406,11 @@ void SMESHGUI_MeshInfoDlg::dump()
       if ( fd.isChecked( BaseInfo ) ) myBaseInfo->saveInfo( out );
       if ( fd.isChecked( ElemInfo ) ) myElemInfo->saveInfo( out );
       if ( fd.isChecked( AddInfo ) )  myAddInfo->saveInfo( out );
-      if ( fd.isChecked( CtrlInfo ) ) myCtrlInfo->saveInfo( out );
+      if ( fd.isChecked( CtrlInfo ) )
+      {
+        myCtrlInfo->showInfo( myProxy ); // it saves what is shown only
+        myCtrlInfo->saveInfo( out );
+      }
     }
   }
 }
@@ -3428,6 +3436,9 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ): SMESHGUI_Info( parent )
   QIcon aComputeIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "SMESH", tr( "ICON_COMPUTE" ) ) );
   SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
 
+  // QToolBox with MeshInfo
+  myMeshTB = new QToolBox(this);
+
   // name
   QLabel* aNameLab = createLabel( tr( "NAME_LAB" ), this, Bold );
   QLabel* aName = createField( this, "ctrlName" );
@@ -3542,51 +3553,84 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ): SMESHGUI_Info( parent )
   connect( aDoubleVolumesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleVolumesInfo() ) );
   connect( aOverContVolumesBtn,SIGNAL( clicked() ), this, SLOT( computeOverConstrainedVolumesInfo() ) );
   connect( myToleranceWidget, SIGNAL( valueChanged( double ) ), this, SLOT( setTolerance( double ) ) );
+  this->setTolerance(myToleranceWidget->GetValue());
 
-  l->addWidget( aNameLab,           0, 0 );       //0
-  l->addWidget( aName,              0, 1, 1, 2 ); //1
-  l->addWidget( aNodesLab,          1, 0, 1, 3 ); //2
-  l->addWidget( aNodesFreeLab,      2, 0 );       //3
-  l->addWidget( aNodesFree,         2, 1 );       //4
-  l->addWidget( aFreeNodesBtn,      2, 2 );       //5
-  l->addWidget( aNodesNbConnLab,    3, 0 );       //6
-  l->addWidget( aNodesNbConn,       3, 1 );       //7
-  l->addWidget( aNodesNbConnBtn,    3, 2 );       //8
-  l->addWidget( aNodesDoubleLab,    4, 0 );       //9
-  l->addWidget( aNodesDouble,       4, 1 );       //10
-  l->addWidget( aDoubleNodesBtn,    4, 2 );       //11
-  l->addWidget( aToleranceLab,      5, 0 );       //12
-  l->addWidget( myToleranceWidget,  5, 1 );       //13
-  l->addWidget( anEdgesLab,         6, 0, 1, 3 ); //14
-  l->addWidget( anEdgesDoubleLab,   7, 0 );       //15
-  l->addWidget( anEdgesDouble,      7, 1 );       //16
-  l->addWidget( aDoubleEdgesBtn,    7, 2 );       //17
-  l->addWidget( aFacesLab,          8, 0, 1, 3 ); //18
-  l->addWidget( aFacesDoubleLab,    9, 0 );       //19
-  l->addWidget( aFacesDouble,       9, 1 );       //20
-  l->addWidget( aDoubleFacesBtn,    9, 2 );       //21
-  l->addWidget( aFacesOverLab,      10, 0 );      //22
-  l->addWidget( aFacesOver,         10, 1 );      //23
-  l->addWidget( aOverContFacesBtn,  10, 2 );      //24
-  l->addWidget( anAspectRatioLab,   11, 0 );      //25
-  l->addWidget( aComputeFaceBtn,    11, 2 );      //26
-  l->addWidget( myPlot,             12, 0, 1, 3 );//27
-  l->addWidget( aVolumesLab,        13, 0, 1, 3 );//28
-  l->addWidget( aVolumesDoubleLab,  14, 0 );      //29
-  l->addWidget( aVolumesDouble,     14, 1 );      //30
-  l->addWidget( aDoubleVolumesBtn,  14, 2 );      //31
-  l->addWidget( aVolumesOverLab,    15, 0 );      //32
-  l->addWidget( aVolumesOver,       15, 1 );      //33
-  l->addWidget( aOverContVolumesBtn,15, 2 );      //34
-  l->addWidget( anAspectRatio3DLab, 16, 0 );      //35
-  l->addWidget( aComputeVolumeBtn,  16, 2 );      //36
-  l->addWidget( myPlot3D,           17, 0, 1, 3 );//37
-  l->setColumnStretch(  0,  0 );
-  l->setColumnStretch(  1,  5 );
-  l->setRowStretch   ( 12,  5 );
-  l->setRowStretch   ( 17,  5 );
-  l->setRowStretch   ( 18,  1 );
+  l->addWidget( aNameLab,           0, 0 ); //0
+  l->addWidget( aName,              0, 1 ); //1
+  
+  // Node group
+  QWidget* NodeGrp = new QWidget();
+  QGridLayout* NodeLayout = new QGridLayout(NodeGrp);
+  NodeLayout->setSpacing(SPACING); NodeLayout->setMargin(MARGIN);
+
+  NodeLayout->addWidget( aNodesFreeLab,      0, 0 );
+  NodeLayout->addWidget( aNodesFree,         0, 1 );
+  NodeLayout->addWidget( aFreeNodesBtn,      0, 2 );
+  NodeLayout->addWidget( aNodesNbConnLab,    1, 0 );
+  NodeLayout->addWidget( aNodesNbConn,       1, 1 );
+  NodeLayout->addWidget( aNodesNbConnBtn,    1, 2 );
+  NodeLayout->addWidget( aNodesDoubleLab,    2, 0 );
+  NodeLayout->addWidget( aNodesDouble,       2, 1 );
+  NodeLayout->addWidget( aDoubleNodesBtn,    2, 2 );
+  NodeLayout->addWidget( aToleranceLab,      3, 0 );
+  NodeLayout->addWidget( myToleranceWidget,  3, 1 );
+  NodeLayout->addWidget( myToleranceWidget,  3, 1 );
+  NodeLayout->setRowStretch(4, 5);
+
+  myMeshTB->addItem(NodeGrp, aNodesLab->text());
+  aNodesLab->setVisible(false);
+
+  // Edge group
+  QWidget* EdgeGrp = new QWidget();
+  QGridLayout* EdgeLayout = new QGridLayout(EdgeGrp);
+  EdgeLayout->setSpacing(SPACING); EdgeLayout->setMargin(MARGIN);
+
+  EdgeLayout->addWidget( anEdgesDoubleLab,   0, 0 );
+  EdgeLayout->addWidget( anEdgesDouble,      0, 1 );
+  EdgeLayout->addWidget( aDoubleEdgesBtn,    0, 2 );
+  EdgeLayout->setRowStretch(1, 5);
+
+  myMeshTB->addItem(EdgeGrp, anEdgesLab->text());
+  anEdgesLab->setVisible(false);
+
+  // Face group
+  QWidget* FaceGrp = new QWidget();
+  QGridLayout* FaceLayout = new QGridLayout(FaceGrp);
+  FaceLayout->setSpacing(SPACING); FaceLayout->setMargin(MARGIN);
+
+  FaceLayout->addWidget( aFacesDoubleLab,    0, 0 );
+  FaceLayout->addWidget( aFacesDouble,       0, 1 );
+  FaceLayout->addWidget( aDoubleFacesBtn,    0, 2 );
+  FaceLayout->addWidget( aFacesOverLab,      1, 0 );
+  FaceLayout->addWidget( aFacesOver,         1, 1 );
+  FaceLayout->addWidget( aOverContFacesBtn,  1, 2 );
+  FaceLayout->addWidget( anAspectRatioLab,   2, 0 );
+  FaceLayout->addWidget( aComputeFaceBtn,    2, 2 );
+  FaceLayout->addWidget( myPlot,             3, 0, 1, 3 );
+
+  myMeshTB->addItem(FaceGrp, aFacesLab->text());
+  aFacesLab->setVisible(false);
+
+  // Volume group
+  QWidget* VolumeGrp = new QWidget();
+  QGridLayout* VolumeLayout = new QGridLayout(VolumeGrp);
+  VolumeLayout->setSpacing(SPACING); VolumeLayout->setMargin(MARGIN);
+
+  VolumeLayout->addWidget( aVolumesDoubleLab,  0, 0 );
+  VolumeLayout->addWidget( aVolumesDouble,     0, 1 );
+  VolumeLayout->addWidget( aDoubleVolumesBtn,  0, 2 );
+  VolumeLayout->addWidget( aVolumesOverLab,    1, 0 );
+  VolumeLayout->addWidget( aVolumesOver,       1, 1 );
+  VolumeLayout->addWidget( aOverContVolumesBtn,1, 2 );
+  VolumeLayout->addWidget( anAspectRatio3DLab, 2, 0 );
+  VolumeLayout->addWidget( aComputeVolumeBtn,  2, 2 );
+  VolumeLayout->addWidget( myPlot3D,           3, 0, 1, 3 );
+
+  myMeshTB->addItem(VolumeGrp, aVolumesLab->text());
+  aVolumesLab->setVisible(false);
+
+  l->addWidget( myMeshTB,                1, 0, 1, 2 ); //2
+  l->setRowStretch( 2,  5 );
 
   clearInternal();
 }
@@ -3642,14 +3686,14 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
     for ( int i = 0; i < myButtons.count(); ++i )
       myButtons[i]->setEnabled( true );
 
-  SMESH::long_array_var nbElemsByType = obj->GetNbElementsByType();
+  SMESH::smIdType_array_var nbElemsByType = obj->GetNbElementsByType();
   if ( ! &nbElemsByType.in() ) return;
 
   const CORBA::Long ctrlLimit =
     meshLoaded ? SMESHGUI::resourceMgr()->integerValue( "SMESH", "info_controls_limit", 3000 ) : -1;
 
   // nodes info
-  const CORBA::Long nbNodes =   nbElemsByType[ SMESH::NODE ];
+  const SMESH::smIdType nbNodes =  nbElemsByType[ SMESH::NODE ];
   // const CORBA::Long nbElems = ( nbElemsByType[ SMESH::EDGE ] +
   //                               nbElemsByType[ SMESH::FACE ] +
   //                               nbElemsByType[ SMESH::VOLUME ] );
@@ -3669,8 +3713,8 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
     }
   }
   else {
-    for( int i=2; i<=13; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(0, false );
+    myMeshTB->widget(0)->setVisible( false );
   }
 
   // edges info
@@ -3682,8 +3726,8 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[3]->setEnabled( true );
   }
   else {
-    for( int i=14; i<=17; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(1, false );
+    myMeshTB->widget(1)->setVisible( false );
   }
 
   // faces info
@@ -3701,14 +3745,10 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[5]->setEnabled( true );
       myButtons[6]->setEnabled( true );
     }
-#ifdef DISABLE_PLOT2DVIEWER
-    for( int i=25; i<=27; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
-#endif
   }
   else {
-    for( int i=18; i<=27; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(2, false );
+    myMeshTB->widget(2)->setVisible( false );
   }
 
   // volumes info
@@ -3726,15 +3766,15 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[8]->setEnabled( true );
       myButtons[9]->setEnabled( true );
     }
-#ifdef DISABLE_PLOT2DVIEWER
-    for( int i=35; i<=37; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
-#endif
   }
   else {
-    for( int i=28; i<=37; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(3, false );
+    myMeshTB->widget(3)->setVisible( false );
   }
+  myMeshTB->setCurrentIndex(0);
+  myMeshTB->setVisible( (nbNodes + nbElemsByType[ SMESH::EDGE ] + 
+                                   nbElemsByType[ SMESH::FACE ] + 
+                                   nbElemsByType[ SMESH::VOLUME ]) > 0 );
 }
 
 //================================================================================
@@ -3888,8 +3928,10 @@ void SMESHGUI_CtrlInfo::computeAspectRatio3D()
 */
 void SMESHGUI_CtrlInfo::clearInternal()
 {
-  for( int i=0; i<=37; i++)
-    dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( true );
+  for (int i=0; i<=3;i++) {
+    myMeshTB->setItemEnabled(i, true );
+    myMeshTB->widget(i)->setVisible( true );
+  }
   for( int i=0; i<=9; i++)
     myButtons[i]->setEnabled( false );
   myPlot->detachItems();
@@ -3962,15 +4004,15 @@ void SMESHGUI_CtrlInfo::saveInfo( QTextStream &out )
   out << tr( "NAME_LAB" ) << "  " << myWidgets[0]->text() << endl;
   out << tr( "NODES_INFO" ) << endl;
   out << indent() << tr( "NUMBER_OF_THE_FREE_NODES" ) << ": " << myWidgets[1]->text() << endl;
-  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_NODES" ) << ": " << myWidgets[2]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_NODES" ) << ": " << myWidgets[3]->text() << endl;
   out << tr( "EDGES_INFO" ) << endl;
-  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_EDGES" ) << ": " << myWidgets[3]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_EDGES" ) << ": " << myWidgets[4]->text() << endl;
   out << tr( "FACES_INFO" ) << endl;
-  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_FACES" ) << ": " << myWidgets[4]->text() << endl;
-  out << indent() << tr( "NUMBER_OF_THE_OVER_CONSTRAINED" ) << ": " << myWidgets[5]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_FACES" ) << ": " << myWidgets[5]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_OVER_CONSTRAINED" ) << ": " << myWidgets[6]->text() << endl;
   out << tr( "VOLUMES_INFO" ) << endl;
-  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_VOLUMES" ) << ": " << myWidgets[6]->text() << endl;
-  out << indent() << tr( "NUMBER_OF_THE_OVER_CONSTRAINED" ) << ": " << myWidgets[7]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_DOUBLE_VOLUMES" ) << ": " << myWidgets[7]->text() << endl;
+  out << indent() << tr( "NUMBER_OF_THE_OVER_CONSTRAINED" ) << ": " << myWidgets[8]->text() << endl;
 }
 
 ////////////////////////////////////////////////////////////////////////////////