X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshInfo.cxx;h=34c737faf5fdd533c84526a18d1a95159dff5e6d;hp=c67112d4765300abca647e02e4bbd88c7d50b29b;hb=2f529dcd2629679dadcca3047583bfcf28ca7b1a;hpb=1821a9c35f90be93d3d55b1e1db9114902eaf6f8 diff --git a/src/SMESHGUI/SMESHGUI_MeshInfo.cxx b/src/SMESHGUI/SMESHGUI_MeshInfo.cxx index c67112d47..34c737faf 100644 --- a/src/SMESHGUI/SMESHGUI_MeshInfo.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshInfo.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 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 @@ -29,9 +29,11 @@ #include "SMDS_EdgePosition.hxx" #include "SMDS_FacePosition.hxx" #include "SMDS_Mesh.hxx" +#include "SMDS_VolumeTool.hxx" #include "SMESHDS_Mesh.hxx" #include "SMESHGUI.h" #include "SMESHGUI_FilterUtils.h" +#include "SMESHGUI_IdPreview.h" #include "SMESHGUI_IdValidator.h" #include "SMESHGUI_SpinBox.h" #include "SMESHGUI_Utils.h" @@ -75,22 +77,24 @@ namespace { -const int SPACING = 6; -const int MARGIN = 9; -const int MAXITEMS = 10; -const int GROUPS_ID = 100; -const int SUBMESHES_ID = 200; -const int SPACING_INFO = 2; + const int SPACING = 6; + const int MARGIN = 9; + const int MAXITEMS = 10; + const int GROUPS_ID = 100; + const int SUBMESHES_ID = 200; + const int SPACING_INFO = 2; -enum InfoRole { - TypeRole = Qt::UserRole + 10, - IdRole, -}; + const char* id_preview_resource = "id_preview_resource"; -enum InfoType { - NodeConnectivity = 100, - ElemConnectivity, -}; + enum InfoRole { + TypeRole = Qt::UserRole + 10, + IdRole, + }; + + enum InfoType { + NodeConnectivity = 100, + ElemConnectivity, + }; } // namesapce /*! @@ -135,7 +139,7 @@ void ExtraWidget::updateControls( int total, int index, int blockSize ) { setVisible( total > blockSize ); QString format = brief ? QString( "%1-%2 / %3" ) : SMESHGUI_MeshInfoDlg::tr( "X_FROM_Y_ITEMS_SHOWN" ); - current->setText( format.arg( index*blockSize+1 ).arg( qMin( index*blockSize+blockSize, total ) ).arg( total ) ); + current->setText( format.arg( index*blockSize+1 ).arg( qMin( index*blockSize+blockSize, total )).arg( total )); prev->setEnabled( index > 0 ); next->setEnabled( (index+1)*blockSize < total ); } @@ -230,9 +234,11 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) // object QLabel* aNameLab = new QLabel( tr( "NAME_LAB" ), this ); QLabel* aName = createField(); + aName->setObjectName("meshName"); aName->setMinimumWidth( 150 ); QLabel* aObjLab = new QLabel( tr( "OBJECT_LAB" ), this ); QLabel* aObj = createField(); + aObj->setObjectName("meshType"); aObj->setMinimumWidth( 150 ); myWidgets[ index++ ] << aNameLab << aName; myWidgets[ index++ ] << aObjLab << aObj; @@ -241,6 +247,7 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) QWidget* aNodesLine = createLine(); QLabel* aNodesLab = new QLabel( tr( "NODES_LAB" ), this ); QLabel* aNodes = createField(); + aNodes->setObjectName("nbNodes"); myWidgets[ index++ ] << aNodesLine; myWidgets[ index++ ] << aNodesLab << aNodes; @@ -257,9 +264,13 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) // ... Number elements QWidget* aNbLine = createLine(); QLabel* aNbTotal = createField(); + aNbTotal->setObjectName("totalNbElems"); QLabel* aNbLin = createField(); + aNbLin->setObjectName("totalNbLinearElems"); QLabel* aNbQuad = createField(); + aNbQuad->setObjectName("totalNbQuadraticElems"); QLabel* aNbBiQuad = createField(); + aNbBiQuad->setObjectName("totalNbBiQuadraticElems"); myWidgets[ index++ ] << aNbLine; myWidgets[ index++ ] << new QLabel( "", this ) << aNbTotal << aNbLin << aNbQuad << aNbBiQuad; @@ -267,6 +278,8 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) QWidget* a0DLine = createLine(); QLabel* a0DLab = new QLabel( tr( "0D_LAB" ), this ); QLabel* a0DTotal = createField(); + a0DTotal->setObjectName("nb0D"); + myWidgets[ index++ ] << a0DLine; myWidgets[ index++ ] << a0DLab << a0DTotal; @@ -274,6 +287,7 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) QWidget* aBallLine = createLine(); QLabel* aBallLab = new QLabel( tr( "BALL_LAB" ), this ); QLabel* aBallTotal = createField(); + aBallTotal->setObjectName("nbBall"); myWidgets[ index++ ] << aBallLine; myWidgets[ index++ ] << aBallLab << aBallTotal; @@ -281,8 +295,11 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) QWidget* a1DLine = createLine(); QLabel* a1DLab = new QLabel( tr( "1D_LAB" ), this ); QLabel* a1DTotal = createField(); + a1DTotal->setObjectName("nb1D"); QLabel* a1DLin = createField(); + a1DLin->setObjectName("nbLinear1D"); QLabel* a1DQuad = createField(); + a1DQuad->setObjectName("nbQuadratic1D"); myWidgets[ index++ ] << a1DLine; myWidgets[ index++ ] << a1DLab << a1DTotal << a1DLin << a1DQuad; @@ -290,67 +307,105 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) QWidget* a2DLine = createLine(); QLabel* a2DLab = new QLabel( tr( "2D_LAB" ), this ); QLabel* a2DTotal = createField(); + a2DTotal->setObjectName("nb2D"); QLabel* a2DLin = createField(); + a2DLin->setObjectName("nbLinear2D"); QLabel* a2DQuad = createField(); + a2DQuad->setObjectName("nbQuadratic2D"); QLabel* a2DBiQuad = createField(); + a2DBiQuad->setObjectName("nbBiQuadratic2D"); QLabel* a2DTriLab = new QLabel( tr( "TRIANGLES_LAB" ), this ); QLabel* a2DTriTotal = createField(); + a2DTriTotal->setObjectName("nbTriangle"); QLabel* a2DTriLin = createField(); + a2DTriLin->setObjectName("nbLinearTriangle"); QLabel* a2DTriQuad = createField(); + a2DTriQuad->setObjectName("nbQuadraticTriangle"); QLabel* a2DTriBiQuad = createField(); + a2DTriBiQuad->setObjectName("nbBiQuadraticTriangle"); QLabel* a2DQuaLab = new QLabel( tr( "QUADRANGLES_LAB" ), this ); QLabel* a2DQuaTotal = createField(); + a2DQuaTotal->setObjectName("nbQuadrangle"); QLabel* a2DQuaLin = createField(); + a2DQuaLin->setObjectName("nbLinearQuadrangle"); QLabel* a2DQuaQuad = createField(); + a2DQuaQuad->setObjectName("nbQuadraticQuadrangle"); QLabel* a2DQuaBiQuad = createField(); + a2DQuaBiQuad->setObjectName("nbBiQuadraticQuadrangle"); QLabel* a2DPolLab = new QLabel( tr( "POLYGONS_LAB" ), this ); QLabel* a2DPolTotal = createField(); + a2DPolTotal->setObjectName("nbPolygon"); + QLabel* a2DPolLin = createField(); + a2DPolLin->setObjectName("nbLinearPolygon"); + QLabel* a2DPolQuad = createField(); + a2DPolQuad->setObjectName("nbQuadraticPolygon"); myWidgets[ index++ ] << a2DLine; myWidgets[ index++ ] << a2DLab << a2DTotal << a2DLin << a2DQuad << a2DBiQuad; myWidgets[ index++ ] << a2DTriLab << a2DTriTotal << a2DTriLin << a2DTriQuad << a2DTriBiQuad; myWidgets[ index++ ] << a2DQuaLab << a2DQuaTotal << a2DQuaLin << a2DQuaQuad << a2DQuaBiQuad; - myWidgets[ index++ ] << a2DPolLab << a2DPolTotal; + myWidgets[ index++ ] << a2DPolLab << a2DPolTotal << a2DPolLin << a2DPolQuad; // ... 3D elements QWidget* a3DLine = createLine(); QLabel* a3DLab = new QLabel( tr( "3D_LAB" ), this ); QLabel* a3DTotal = createField(); + a3DTotal->setObjectName("nb3D"); QLabel* a3DLin = createField(); + a3DLin->setObjectName("nbLinear3D"); QLabel* a3DQuad = createField(); + a3DQuad->setObjectName("nbQuadratic3D"); QLabel* a3DBiQuad = createField(); + a3DBiQuad->setObjectName("nbBiQuadratic3D"); QLabel* a3DTetLab = new QLabel( tr( "TETRAHEDRONS_LAB" ), this ); QLabel* a3DTetTotal = createField(); + a3DTetTotal->setObjectName("nbTetrahedron"); QLabel* a3DTetLin = createField(); + a3DTetLin->setObjectName("nbLinearTetrahedron"); QLabel* a3DTetQuad = createField(); + a3DTetQuad->setObjectName("nbQudraticTetrahedron"); QLabel* a3DHexLab = new QLabel( tr( "HEXAHEDONRS_LAB" ), this ); QLabel* a3DHexTotal = createField(); + a3DHexTotal->setObjectName("nbHexahedron"); QLabel* a3DHexLin = createField(); + a3DHexLin->setObjectName("nbLinearHexahedron"); QLabel* a3DHexQuad = createField(); + a3DHexQuad->setObjectName("nbQuadraticHexahedron"); QLabel* a3DHexBiQuad = createField(); + a3DHexBiQuad->setObjectName("nbBiQuadraticHexahedron"); QLabel* a3DPyrLab = new QLabel( tr( "PYRAMIDS_LAB" ), this ); QLabel* a3DPyrTotal = createField(); + a3DPyrTotal->setObjectName("nbPyramid"); QLabel* a3DPyrLin = createField(); + a3DPyrLin->setObjectName("nbLinearPyramid"); QLabel* a3DPyrQuad = createField(); + a3DPyrQuad->setObjectName("nbQuadraticPyramid"); QLabel* a3DPriLab = new QLabel( tr( "PRISMS_LAB" ), this ); QLabel* a3DPriTotal = createField(); + a3DPriTotal->setObjectName("nbPrism"); QLabel* a3DPriLin = createField(); + a3DPriLin->setObjectName("nbLinearPrism"); QLabel* a3DPriQuad = createField(); + a3DPriQuad->setObjectName("nbQuadraticPrism"); + QLabel* a3DPriBiQuad = createField(); + a3DPriBiQuad->setObjectName("nbBiQuadraticPrism"); QLabel* a3DHexPriLab = new QLabel( tr( "HEX_PRISMS_LAB" ), this ); QLabel* a3DHexPriTotal = createField(); + a3DHexPriTotal->setObjectName("nbHexagonalPrism"); QLabel* a3DPolLab = new QLabel( tr( "POLYHEDRONS_LAB" ), this ); QLabel* a3DPolTotal = createField(); + a3DPolTotal->setObjectName("nbPolyhedron"); myWidgets[ index++ ] << a3DLine; myWidgets[ index++ ] << a3DLab << a3DTotal << a3DLin << a3DQuad << a3DBiQuad; myWidgets[ index++ ] << a3DTetLab << a3DTetTotal << a3DTetLin << a3DTetQuad; myWidgets[ index++ ] << a3DHexLab << a3DHexTotal << a3DHexLin << a3DHexQuad << a3DHexBiQuad; myWidgets[ index++ ] << a3DPyrLab << a3DPyrTotal << a3DPyrLin << a3DPyrQuad; - myWidgets[ index++ ] << a3DPriLab << a3DPriTotal << a3DPriLin << a3DPriQuad; + myWidgets[ index++ ] << a3DPriLab << a3DPriTotal << a3DPriLin << a3DPriQuad << a3DPriBiQuad; myWidgets[ index++ ] << a3DHexPriLab << a3DHexPriTotal; myWidgets[ index++ ] << a3DPolLab << a3DPolTotal; myLoadBtn = new QPushButton( tr( "BUT_LOAD_MESH" ), this ); myLoadBtn->setAutoDefault( true ); - connect( myLoadBtn, SIGNAL( clicked() ), this, SLOT( loadMesh() ) ); + connect( myLoadBtn, SIGNAL( clicked() ), this, SLOT( loadMesh() )); setFontAttributes( aNameLab, Bold ); setFontAttributes( aObjLab, Bold ); @@ -413,6 +468,8 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) l->addWidget( a2DQuaBiQuad, 17, 4 ); l->addWidget( a2DPolLab, 18, 0 ); l->addWidget( a2DPolTotal, 18, 1 ); + l->addWidget( a2DPolLin, 18, 2 ); + l->addWidget( a2DPolQuad, 18, 3 ); l->addWidget( a3DLine, 19, 1, 1, 4 ); l->addWidget( a3DLab, 20, 0 ); l->addWidget( a3DTotal, 20, 1 ); @@ -436,6 +493,7 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent ) l->addWidget( a3DPriTotal, 24, 1 ); l->addWidget( a3DPriLin, 24, 2 ); l->addWidget( a3DPriQuad, 24, 3 ); + l->addWidget( a3DPriBiQuad, 24, 4 ); l->addWidget( a3DHexPriLab, 25, 0 ); l->addWidget( a3DHexPriTotal, 25, 1 ); l->addWidget( a3DPolLab, 26, 0 ); @@ -466,7 +524,7 @@ SMESHGUI_MeshInfo::~SMESHGUI_MeshInfo() void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) { clear(); - if ( !CORBA::is_nil( obj ) ) { + if ( !CORBA::is_nil( obj )) { _PTR(SObject) sobj = SMESH::ObjectToSObject( obj ); if ( sobj ) myWidgets[iName][iSingle]->setProperty( "text", sobj->GetName().c_str() ); @@ -474,10 +532,10 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( obj ); SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( obj ); if ( !aMesh->_is_nil() ) { - myWidgets[iObject][iSingle]->setProperty( "text", tr( "OBJECT_MESH" ) ); + myWidgets[iObject][iSingle]->setProperty( "text", tr( "OBJECT_MESH" )); } else if ( !aSubMesh->_is_nil() ) { - myWidgets[iObject][iSingle]->setProperty( "text", tr( "OBJECT_SUBMESH" ) ); + myWidgets[iObject][iSingle]->setProperty( "text", tr( "OBJECT_SUBMESH" )); } else if ( !aGroup->_is_nil() ) { QString objType; @@ -493,66 +551,72 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) myWidgets[iObject][iSingle]->setProperty( "text", objType ); } SMESH::long_array_var info = obj->GetMeshInfo(); - myWidgets[iNodes][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Node] ) ); - myWidgets[i0D][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_0D] ) ); - myWidgets[iBalls][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Ball] ) ); + myWidgets[iNodes][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Node] )); + myWidgets[i0D][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_0D] )); + myWidgets[iBalls][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Ball] )); long nbEdges = info[SMDSEntity_Edge] + info[SMDSEntity_Quad_Edge]; - myWidgets[i1D][iTotal] ->setProperty( "text", QString::number( nbEdges ) ); - myWidgets[i1D][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Edge] ) ); - myWidgets[i1D][iQuadratic]->setProperty( "text", QString::number( info[SMDSEntity_Quad_Edge] ) ); + myWidgets[i1D][iTotal] ->setProperty( "text", QString::number( nbEdges )); + myWidgets[i1D][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Edge] )); + myWidgets[i1D][iQuadratic]->setProperty( "text", QString::number( info[SMDSEntity_Quad_Edge] )); long nbTriangles = info[SMDSEntity_Triangle] + info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_BiQuad_Triangle]; long nbQuadrangles = info[SMDSEntity_Quadrangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_BiQuad_Quadrangle]; + long nb2DPolygons = info[SMDSEntity_Polygon] + info[SMDSEntity_Quad_Polygon]; long nb2DLinear = info[SMDSEntity_Triangle] + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Polygon]; - long nb2DQuadratic = info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_Quad_Quadrangle]; + long nb2DQuadratic = info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_Quad_Polygon]; long nb2DBiQuadratic = info[SMDSEntity_BiQuad_Triangle] + info[SMDSEntity_BiQuad_Quadrangle]; - - myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( nb2DLinear + nb2DQuadratic )); - myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( nb2DLinear ) ); - myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( nb2DQuadratic ) ); - myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( nb2DBiQuadratic ) ); - myWidgets[i2DTriangles][iTotal] ->setProperty( "text", QString::number( nbTriangles ) ); - myWidgets[i2DTriangles][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Triangle] ) ); - myWidgets[i2DTriangles][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Triangle] ) ); - myWidgets[i2DTriangles][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_BiQuad_Triangle] ) ); - myWidgets[i2DQuadrangles][iTotal] ->setProperty( "text", QString::number( nbQuadrangles ) ); - myWidgets[i2DQuadrangles][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Quadrangle] ) ); - myWidgets[i2DQuadrangles][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Quadrangle] ) ); - myWidgets[i2DQuadrangles][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_BiQuad_Quadrangle] ) ); - myWidgets[i2DPolygons][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Polygon] ) ); + long nb2DTotal = nb2DLinear + nb2DQuadratic + nb2DBiQuadratic; + + myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( nb2DTotal )); + myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( nb2DLinear )); + myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( nb2DQuadratic )); + myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( nb2DBiQuadratic )); + myWidgets[i2DTriangles][iTotal] ->setProperty( "text", QString::number( nbTriangles )); + myWidgets[i2DTriangles][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Triangle] )); + myWidgets[i2DTriangles][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Triangle] )); + myWidgets[i2DTriangles][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_BiQuad_Triangle] )); + myWidgets[i2DQuadrangles][iTotal] ->setProperty( "text", QString::number( nbQuadrangles )); + myWidgets[i2DQuadrangles][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Quadrangle] )); + myWidgets[i2DQuadrangles][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Quadrangle] )); + myWidgets[i2DQuadrangles][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_BiQuad_Quadrangle] )); + myWidgets[i2DPolygons][iTotal] ->setProperty( "text", QString::number( nb2DPolygons )); + myWidgets[i2DPolygons][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Polygon] )); + myWidgets[i2DPolygons][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Polygon] )); long nbTetrahedrons = info[SMDSEntity_Tetra] + info[SMDSEntity_Quad_Tetra]; long nbHexahedrons = info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa]; long nbPyramids = info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid]; - long nbPrisms = info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta]; - long nb3DLinear = info[SMDSEntity_Tetra] + info[SMDSEntity_Hexa] + info[SMDSEntity_Pyramid] + info[SMDSEntity_Penta] + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism]; + long nbPrisms = info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta] + info[SMDSEntity_BiQuad_Penta]; + long nb3DLinear = info[SMDSEntity_Tetra] + info[SMDSEntity_Hexa] + info[SMDSEntity_Pyramid] + info[SMDSEntity_Penta] + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism]; long nb3DQuadratic = info[SMDSEntity_Quad_Tetra] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_Quad_Pyramid] + info[SMDSEntity_Quad_Penta]; - long nb3DBiQuadratic = info[SMDSEntity_TriQuad_Hexa]; - myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( nb3DLinear + nb3DQuadratic ) ); - myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( nb3DLinear ) ); - myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( nb3DQuadratic ) ); - myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( nb3DBiQuadratic ) ); - myWidgets[i3DTetrahedrons][iTotal] ->setProperty( "text", QString::number( nbTetrahedrons ) ); - myWidgets[i3DTetrahedrons][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Tetra] ) ); - myWidgets[i3DTetrahedrons][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Tetra] ) ); - myWidgets[i3DHexahedrons][iTotal] ->setProperty( "text", QString::number( nbHexahedrons ) ); - myWidgets[i3DHexahedrons][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Hexa] ) ); - myWidgets[i3DHexahedrons][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Hexa] ) ); - myWidgets[i3DHexahedrons][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_TriQuad_Hexa] ) ); - myWidgets[i3DPyramids][iTotal] ->setProperty( "text", QString::number( nbPyramids ) ); - myWidgets[i3DPyramids][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Pyramid] ) ); - myWidgets[i3DPyramids][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Pyramid] ) ); - myWidgets[i3DPrisms][iTotal] ->setProperty( "text", QString::number( nbPrisms ) ); - myWidgets[i3DPrisms][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Penta] ) ); - myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Penta] ) ); - myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Hexagonal_Prism] ) ); - myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Polyhedra] ) ); - long nbElemTotal = info[SMDSEntity_0D] + info[SMDSEntity_Ball] + nbEdges + nb2DLinear + nb2DQuadratic + nb2DBiQuadratic + nb3DLinear + nb3DQuadratic + nb3DBiQuadratic; - long nbElemLinerial = info[SMDSEntity_Edge] + nb2DLinear + nb3DLinear; + long nb3DBiQuadratic = info[SMDSEntity_TriQuad_Hexa] + info[SMDSEntity_BiQuad_Penta]; + long nb3DTotal = nb3DLinear + nb3DQuadratic + nb3DBiQuadratic; + myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( nb3DTotal )); + myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( nb3DLinear )); + myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( nb3DQuadratic )); + myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( nb3DBiQuadratic )); + myWidgets[i3DTetrahedrons][iTotal] ->setProperty( "text", QString::number( nbTetrahedrons )); + myWidgets[i3DTetrahedrons][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Tetra] )); + myWidgets[i3DTetrahedrons][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Tetra] )); + myWidgets[i3DHexahedrons][iTotal] ->setProperty( "text", QString::number( nbHexahedrons )); + myWidgets[i3DHexahedrons][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Hexa] )); + myWidgets[i3DHexahedrons][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Hexa] )); + myWidgets[i3DHexahedrons][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_TriQuad_Hexa] )); + myWidgets[i3DPyramids][iTotal] ->setProperty( "text", QString::number( nbPyramids )); + myWidgets[i3DPyramids][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Pyramid] )); + myWidgets[i3DPyramids][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Pyramid] )); + myWidgets[i3DPrisms][iTotal] ->setProperty( "text", QString::number( nbPrisms )); + myWidgets[i3DPrisms][iLinear] ->setProperty( "text", QString::number( info[SMDSEntity_Penta] )); + myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Penta] )); + myWidgets[i3DPrisms][iBiQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_BiQuad_Penta] )); + myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Hexagonal_Prism] )); + myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Polyhedra] )); + long nbElemTotal = info[SMDSEntity_0D] + info[SMDSEntity_Ball] + nbEdges + nb2DTotal + nb3DTotal; + long nbElemLinearial = info[SMDSEntity_Edge] + nb2DLinear + nb3DLinear; long nbElemQuadratic = info[SMDSEntity_Quad_Edge] + nb2DQuadratic + nb3DQuadratic; long nbElemBiQuadratic = nb2DBiQuadratic + nb3DBiQuadratic; - myWidgets[iNb][iTotal] ->setProperty( "text", QString::number( nbElemTotal ) ); - myWidgets[iNb][iLinear] ->setProperty( "text", QString::number( nbElemLinerial ) ); - myWidgets[iNb][iQuadratic] ->setProperty( "text", QString::number( nbElemQuadratic ) ); - myWidgets[iNb][iBiQuadratic]->setProperty( "text", QString::number( nbElemBiQuadratic ) ); + myWidgets[iNb][iTotal] ->setProperty( "text", QString::number( nbElemTotal )); + myWidgets[iNb][iLinear] ->setProperty( "text", QString::number( nbElemLinearial )); + myWidgets[iNb][iQuadratic] ->setProperty( "text", QString::number( nbElemQuadratic )); + myWidgets[iNb][iBiQuadratic]->setProperty( "text", QString::number( nbElemBiQuadratic )); // before full loading from study file, type of elements in a sub-mesh can't be defined // in some cases bool infoOK = obj->IsMeshInfoCorrect(); @@ -580,6 +644,8 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) myWidgets[i2DQuadrangles][iLinear] ->setProperty( "text", "?" ); myWidgets[i2DQuadrangles][iQuadratic] ->setProperty( "text", "?" ); myWidgets[i2DQuadrangles][iBiQuadratic] ->setProperty( "text", "?" ); + myWidgets[i2DPolygons][iLinear] ->setProperty( "text", "?" ); + myWidgets[i2DPolygons][iQuadratic] ->setProperty( "text", "?" ); myWidgets[i2DPolygons][iTotal] ->setProperty( "text", "?" ); myWidgets[iNb][iTotal] ->setProperty( "text", "?" ); myWidgets[iNb][iLinear] ->setProperty( "text", "?" ); @@ -673,7 +739,7 @@ void SMESHGUI_MeshInfo::loadMesh() if ( selected.Extent() == 1 ) { Handle(SALOME_InteractiveObject) IO = selected.First(); SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface( IO ); - if ( !CORBA::is_nil( obj ) ) { + if ( !CORBA::is_nil( obj )) { SMESH::SMESH_Mesh_var mesh = obj->GetMesh(); if ( !mesh->_is_nil() ) { @@ -691,48 +757,50 @@ void SMESHGUI_MeshInfo::clear() { myWidgets[iName][iSingle] ->setProperty( "text", QString() ); myWidgets[iObject][iSingle] ->setProperty( "text", QString() ); - myWidgets[iNodes][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i0D][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[iBalls][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i1D][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i1D][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i1D][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DTriangles][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DTriangles][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DTriangles][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DTriangles][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DQuadrangles][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DQuadrangles][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DQuadrangles][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DQuadrangles][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i2DPolygons][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DTetrahedrons][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DTetrahedrons][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DTetrahedrons][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DHexahedrons][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DHexahedrons][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DHexahedrons][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DHexahedrons][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPyramids][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPyramids][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPyramids][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPrisms][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPrisms][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[iNb][iTotal] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[iNb][iLinear] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[iNb][iQuadratic] ->setProperty( "text", QString::number( 0 ) ); - myWidgets[iNb][iBiQuadratic] ->setProperty( "text", QString::number( 0 ) ); + myWidgets[iNodes][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i0D][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[iBalls][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i1D][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i1D][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i1D][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DTriangles][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DTriangles][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DTriangles][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DTriangles][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DQuadrangles][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DQuadrangles][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DQuadrangles][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DQuadrangles][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DPolygons][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DPolygons][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i2DPolygons][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DTetrahedrons][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DTetrahedrons][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DTetrahedrons][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DHexahedrons][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DHexahedrons][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DHexahedrons][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DHexahedrons][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPyramids][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPyramids][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPyramids][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPrisms][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPrisms][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[iNb][iTotal] ->setProperty( "text", QString::number( 0 )); + myWidgets[iNb][iLinear] ->setProperty( "text", QString::number( 0 )); + myWidgets[iNb][iQuadratic] ->setProperty( "text", QString::number( 0 )); + myWidgets[iNb][iBiQuadratic] ->setProperty( "text", QString::number( 0 )); } /*! @@ -746,7 +814,7 @@ QLabel* SMESHGUI_MeshInfo::createField() lab->setAlignment( Qt::AlignCenter ); lab->setAutoFillBackground( true ); QPalette pal = lab->palette(); - pal.setColor( QPalette::Window, QApplication::palette().color( QPalette::Active, QPalette::Base ) ); + pal.setColor( QPalette::Window, QApplication::palette().color( QPalette::Active, QPalette::Base )); lab->setPalette( pal ); lab->setMinimumWidth( 70 ); return lab; @@ -800,65 +868,67 @@ void SMESHGUI_MeshInfo::saveInfo( QTextStream &out ) out << QString( 9, '-' ) << "\n"; out << tr( "BASE_INFO" ) << "\n"; out << QString( 9, '-' ) << "\n"; - out << tr( "NAME_LAB" ) << " " << ( myWidgets[iName][iSingle]->property( "text" ) ).toString() << "\n"; - out << tr( "OBJECT_LAB" ) << " " << ( myWidgets[iObject][iSingle]->property( "text" ) ).toString() << "\n"; - out << tr( "NODES_LAB" ) << " " << ( myWidgets[iNodes][iTotal]->property( "text" ) ).toString() << "\n"; + out << tr( "NAME_LAB" ) << " " << ( myWidgets[iName][iSingle]->property( "text" )).toString() << "\n"; + out << tr( "OBJECT_LAB" ) << " " << ( myWidgets[iObject][iSingle]->property( "text" )).toString() << "\n"; + out << tr( "NODES_LAB" ) << " " << ( myWidgets[iNodes][iTotal]->property( "text" )).toString() << "\n"; out << tr( "ELEMENTS_LAB" ) << "\n"; - out << QString( SPACING_INFO, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[iNb][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[iNb][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[iNb][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[iNb][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[iNb][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[iNb][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[iNb][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[iNb][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO, ' ' ) << tr( "0D_LAB" ) << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i0D][iTotal]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i0D][iTotal]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO, ' ' ) << tr( "BALL_LAB" ) << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[iBalls][iTotal]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[iBalls][iTotal]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO, ' ' ) << tr( "1D_LAB" ) << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i1D][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i1D][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i1D][iQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i1D][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i1D][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i1D][iQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO, ' ' ) << tr( "2D_LAB" ) << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2D][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2D][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2D][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2D][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2D][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2D][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2D][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2D][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "TRIANGLES_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DTriangles][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2DTriangles][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DTriangles][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DTriangles][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DTriangles][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2DTriangles][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DTriangles][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DTriangles][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRANGLES_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DQuadrangles][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "POLYGONS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DPolygons][iTotal]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i2DPolygons][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i2DPolygons][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i2DPolygons][iQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO, ' ' ) << tr( "3D_LAB" ) << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3D][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3D][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3D][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*2, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i3D][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3D][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3D][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3D][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*2, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i3D][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "TETRAHEDRONS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DTetrahedrons][iQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "HEXAHEDONRS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iQuadratic]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iBiQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iQuadratic]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "BI_QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DHexahedrons][iBiQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "PYRAMIDS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPyramids][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DPyramids][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DPyramids][iQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPyramids][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DPyramids][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DPyramids][iQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "PRISMS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPrisms][iTotal]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DPrisms][iLinear]->property( "text" ) ).toString() << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DPrisms][iQuadratic]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPrisms][iTotal]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "LINEAR_LAB" ) << ": " << ( myWidgets[i3DPrisms][iLinear]->property( "text" )).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "QUADRATIC_LAB" ) << ": " << ( myWidgets[i3DPrisms][iQuadratic]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "HEX_PRISMS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DHexaPrisms][iTotal]->property( "text" ) ).toString() << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DHexaPrisms][iTotal]->property( "text" )).toString() << "\n"; out << QString( SPACING_INFO*2, ' ' ) << tr( "POLYHEDRONS_LAB" ) << "\n"; - out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPolyhedrons][iTotal]->property( "text" ) ).toString() << "\n" << "\n"; + out << QString( SPACING_INFO*3, ' ' ) << tr( "TOTAL_LAB" ) << ": " << ( myWidgets[i3DPolyhedrons][iTotal]->property( "text" )).toString() << "\n" << "\n"; } /*! @@ -871,7 +941,7 @@ void SMESHGUI_MeshInfo::saveInfo( QTextStream &out ) \param parent parent widget */ SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent ) -: QWidget( parent ), myActor( 0 ), myIsElement( -1 ) + : QWidget( parent ), myActor( 0 ), myIsElement( -1 ) { myFrame = new QWidget( this ); myExtra = new ExtraWidget( this ); @@ -880,8 +950,8 @@ SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent ) vbl->setSpacing( 0 ); vbl->addWidget( myFrame ); vbl->addWidget( myExtra ); - connect( myExtra->prev, SIGNAL( clicked() ), this, SLOT( showPrevious() ) ); - connect( myExtra->next, SIGNAL( clicked() ), this, SLOT( showNext() ) ); + connect( myExtra->prev, SIGNAL( clicked() ), this, SLOT( showPrevious() )); + connect( myExtra->next, SIGNAL( clicked() ), this, SLOT( showNext() )); clear(); } @@ -896,11 +966,13 @@ SMESHGUI_ElemInfo::~SMESHGUI_ElemInfo() \brief Set mesh data source (actor) \param actor mesh object actor */ -void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor ) +void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor, SMESH::SMESH_IDSource_var obj ) { if ( myActor != actor ) { myActor = actor; myIsElement = -1; + SMESH::SMESH_Mesh_var mesh = obj->GetMesh(); + myMeshHasShape = ( !mesh->_is_nil() && mesh->HasShapeToMesh() ); clear(); } } @@ -932,7 +1004,7 @@ void SMESHGUI_ElemInfo::showInfo( QSet ids, bool isElem ) myIsElement = isElem; myIndex = 0; updateControls(); - information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) ); + information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS )); } /*! @@ -1016,7 +1088,7 @@ SMESHGUI_ElemInfo::Connectivity SMESHGUI_ElemInfo::nodeConnectivity( const SMDS_ QString SMESHGUI_ElemInfo::formatConnectivity( Connectivity connectivity, int type ) { QStringList str; - if ( connectivity.contains( type ) ) { + if ( connectivity.contains( type )) { QList elements = connectivity[ type ]; qSort( elements ); foreach( int id, elements ) @@ -1043,6 +1115,16 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement* return xyz; } +/*! + \brief Calculate normal vector to the mesh face + \param element mesh face +*/ +SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::normal( const SMDS_MeshElement* element ) +{ + gp_XYZ n = SMESH::getNormale( SMDS_Mesh::DownCast( element )); + return XYZ(n.X(), n.Y(), n.Z()); +} + /*! \brief This slot is called from "Show Previous" button click. Shows information on the previous group of the items. @@ -1051,7 +1133,7 @@ void SMESHGUI_ElemInfo::showPrevious() { myIndex = qMax( 0, myIndex-1 ); updateControls(); - information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) ); + information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS )); } /*! @@ -1062,7 +1144,7 @@ void SMESHGUI_ElemInfo::showNext() { myIndex = qMin( myIndex+1, myIDs.count() / MAXITEMS ); updateControls(); - information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) ); + information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS )); } /*! @@ -1083,7 +1165,7 @@ void SMESHGUI_ElemInfo::updateControls() \param parent parent widget */ SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent ) -: SMESHGUI_ElemInfo( parent ) + : SMESHGUI_ElemInfo( parent ) { myInfo = new QTextBrowser( frame() ); QVBoxLayout* l = new QVBoxLayout( frame() ); @@ -1098,12 +1180,12 @@ SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent ) void SMESHGUI_SimpleElemInfo::information( const QList& ids ) { clearInternal(); - + if ( actor() ) { int grp_details = SMESHGUI::resourceMgr()->booleanValue( "SMESH", "elem_info_grp_details", false ); int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 ); int cprecision = -1; - if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false ) ) + if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false )) cprecision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "controls_precision", -1 ); foreach ( long id, ids ) { if ( !isElements() ) { @@ -1114,47 +1196,47 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) if ( !node ) return; // node ID - myInfo->append( QString( "%1 #%2" ).arg( SMESHGUI_ElemInfo::tr( "NODE" ) ).arg( id ) ); + myInfo->append( QString( "%1 #%2" ).arg( SMESHGUI_ElemInfo::tr( "NODE" )).arg( id )); // separator myInfo->append( "" ); // coordinates - myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "COORDINATES" ) ). - arg( node->X(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). - arg( node->Y(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). - arg( node->Z(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "COORDINATES" )). + arg( node->X(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )). + arg( node->Y(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )). + arg( node->Z(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )) ); // separator myInfo->append( "" ); // connectivity Connectivity connectivity = nodeConnectivity( node ); if ( !connectivity.isEmpty() ) { - myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONNECTIVITY" )) ); QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Edge ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "EDGES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "EDGES" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Ball ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Face ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "FACES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "FACES" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Volume ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "VOLUMES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "VOLUMES" )).arg( con )); } else { - myInfo->append( QString( "%1" ).arg( SMESHGUI_ElemInfo::tr( "FREE_NODE" ) ).arg( id ) ); + myInfo->append( QString( "%1" ).arg( SMESHGUI_ElemInfo::tr( "FREE_NODE" )).arg( id )); } // node position - SMESH::SMESH_Mesh_ptr aMeshPtr = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMeshPtr ) ) { + SMESH::SMESH_Mesh_ptr aMeshPtr = actor()->GetObject()->GetMeshServer(); + if ( !CORBA::is_nil( aMeshPtr )) { SMESH::NodePosition_var pos = aMeshPtr->GetNodePosition( id ); int shapeID = pos->shapeID; if ( shapeID > 0 ) { QString shapeType; - double u, v; + double u = 0, v = 0; switch ( pos->shapeType ) { case GEOM::EDGE: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_EDGE" ); @@ -1164,8 +1246,8 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) case GEOM::FACE: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_FACE" ); if ( pos->params.length() == 2 ) { - u = pos->params[0]; - v = pos->params[1]; + u = pos->params[0]; + v = pos->params[1]; } break; case GEOM::VERTEX: @@ -1177,67 +1259,67 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) } // separator myInfo->append( "" ); - myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "POSITION" ) ) ); - myInfo->append( QString( "- %1: #%2" ).arg( shapeType ).arg( shapeID ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "POSITION" )) ); + myInfo->append( QString( "- %1: #%2" ).arg( shapeType ).arg( shapeID )); if ( pos->shapeType == GEOM::EDGE || pos->shapeType == GEOM::FACE ) { - myInfo->append( QString( "- %1: #%2" ).arg( SMESHGUI_ElemInfo::tr( "U_POSITION" ) ). - arg( QString::number( u, precision > 0 ? 'f' : 'g', qAbs( precision )) ) ); + myInfo->append( QString( "- %1: #%2" ).arg( SMESHGUI_ElemInfo::tr( "U_POSITION" )). + arg( QString::number( u, precision > 0 ? 'f' : 'g', qAbs( precision )) )); if ( pos->shapeType == GEOM::FACE ) { - myInfo->append( QString( "- %1: #%2" ).arg( SMESHGUI_ElemInfo::tr( "V_POSITION" ) ). - arg( QString::number( v, precision > 0 ? 'f' : 'g', qAbs( precision )) ) ); + myInfo->append( QString( "- %1: #%2" ).arg( SMESHGUI_ElemInfo::tr( "V_POSITION" )). + arg( QString::number( v, precision > 0 ? 'f' : 'g', qAbs( precision )) )); } } } } // groups node belongs to SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMesh ) ) { + if ( !CORBA::is_nil( aMesh )) { SMESH::ListOfGroups_var groups = aMesh->GetGroups(); myInfo->append( "" ); // separator bool top_created = false; - for ( int i = 0; i < groups->length(); i++ ) { + for ( CORBA::ULong i = 0; i < groups->length(); i++ ) { SMESH::SMESH_GroupBase_var aGrp = groups[i]; - if ( CORBA::is_nil( aGrp ) ) continue; + if ( CORBA::is_nil( aGrp )) continue; QString aName = aGrp->GetName(); - if ( aGrp->GetType() == SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id ) ) { + if ( aGrp->GetType() == SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id )) { if ( !top_created ) { - myInfo->append( QString( "%1:" ).arg( SMESHGUI_AddInfo::tr( "GROUPS" ) ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_AddInfo::tr( "GROUPS" )) ); top_created = true; } - myInfo->append( QString( "+ %1:" ).arg( aName.trimmed() ) ); + myInfo->append( QString( "+ %1:" ).arg( aName.trimmed() )); if ( grp_details ) { SMESH::SMESH_Group_var aStdGroup = SMESH::SMESH_Group::_narrow( aGrp ); SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGrp ); SMESH::SMESH_GroupOnFilter_var aFltGroup = SMESH::SMESH_GroupOnFilter::_narrow( aGrp ); - + // type : group on geometry, standalone group, group on filter - if ( !CORBA::is_nil( aStdGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" ) ) ); + if ( !CORBA::is_nil( aStdGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" )) ); } - else if ( !CORBA::is_nil( aGeomGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" ) ) ); + else if ( !CORBA::is_nil( aGeomGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" )) ); GEOM::GEOM_Object_var gobj = aGeomGroup->GetShape(); _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { - myInfo->append( QString( " - %1: %2: %3" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GEOM_OBJECT" ) ).arg( sobj->GetName().c_str() ) ); + myInfo->append( QString( " - %1: %2: %3" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GEOM_OBJECT" )).arg( sobj->GetName().c_str() )); } } - else if ( !CORBA::is_nil( aFltGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) ) ); + else if ( !CORBA::is_nil( aFltGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )) ); } - + // size - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" ) ). - arg( QString::number( aGrp->Size() ) ) ); - + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" )). + arg( QString::number( aGrp->Size() )) ); + // color SALOMEDS::Color color = aGrp->GetColor(); - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" ) ). - arg( QColor( color.R*255., color.G*255., color.B*255. ).name() ) ); + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" )). + arg( QColor( color.R*255., color.G*255., color.B*255. ).name() )); } } } @@ -1246,11 +1328,11 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) else { // // show element info - // + // const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindElement( id ); SMESH::Controls::NumericalFunctorPtr afunctor; if ( !e ) return; - + // Element ID && Type QString stype; switch( e->GetType() ) { @@ -1264,11 +1346,11 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) stype = SMESHGUI_ElemInfo::tr( "FACE" ); break; case SMDSAbs_Volume: stype = SMESHGUI_ElemInfo::tr( "VOLUME" ); break; - default: + default: break; } if ( stype.isEmpty() ) return; - myInfo->append( QString( "%1 #%2" ).arg( stype ).arg( id ) ); + myInfo->append( QString( "%1 #%2" ).arg( stype ).arg( id )); // separator myInfo->append( "" ); @@ -1298,25 +1380,26 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) gtype = SMESHGUI_ElemInfo::tr( "HEXAHEDRON" ); break; case SMDSEntity_Penta: case SMDSEntity_Quad_Penta: + case SMDSEntity_BiQuad_Penta: gtype = SMESHGUI_ElemInfo::tr( "PRISM" ); break; case SMDSEntity_Hexagonal_Prism: gtype = SMESHGUI_ElemInfo::tr( "HEX_PRISM" ); break; case SMDSEntity_Polyhedra: case SMDSEntity_Quad_Polyhedra: gtype = SMESHGUI_ElemInfo::tr( "POLYHEDRON" ); break; - default: + default: break; } if ( !gtype.isEmpty() ) - myInfo->append( QString( "%1: %2" ).arg( SMESHGUI_ElemInfo::tr( "TYPE" ) ).arg( gtype ) ); + myInfo->append( QString( "%1: %2" ).arg( SMESHGUI_ElemInfo::tr( "TYPE" )).arg( gtype )); // Quadratic flag (any element except 0D) if ( e->GetEntityType() > SMDSEntity_0D && e->GetEntityType() < SMDSEntity_Ball ) { - myInfo->append( QString( "%1? %2" ).arg( SMESHGUI_ElemInfo::tr( "QUADRATIC" ) ).arg( e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" ) ) ); + myInfo->append( QString( "%1? %2" ).arg( SMESHGUI_ElemInfo::tr( "QUADRATIC" )).arg( e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" )) ); } - if ( const SMDS_BallElement* ball = dynamic_cast( e )) { + if ( const SMDS_BallElement* ball = SMDS_Mesh::DownCast( e )) { // Ball diameter - myInfo->append( QString( "%1: %2" ).arg( SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" ) ).arg( ball->GetDiameter() )); + myInfo->append( QString( "%1: %2" ).arg( SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" )).arg( ball->GetDiameter() )); } // separator myInfo->append( "" ); @@ -1326,105 +1409,116 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) for ( int idx = 1; nodeIt->more(); idx++ ) { const SMDS_MeshNode* node = static_cast( nodeIt->next() ); // node number and ID - myInfo->append( QString( "%1 %2/%3 - #%4" ).arg( SMESHGUI_ElemInfo::tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ).arg( node->GetID() ) ); + myInfo->append( QString( "%1 %2/%3 - #%4" ).arg( SMESHGUI_ElemInfo::tr( "NODE" )).arg( idx ).arg( e->NbNodes() ).arg( node->GetID() )); // node coordinates - myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "COORDINATES" ) ). - arg( node->X(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). - arg( node->Y(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ). - arg( node->Z(), 0, precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "COORDINATES" )). + arg( node->X(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )). + arg( node->Y(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )). + arg( node->Z(), 0, precision > 0 ? 'f' : 'g', qAbs( precision )) ); // node connectivity Connectivity connectivity = nodeConnectivity( node ); if ( !connectivity.isEmpty() ) { - myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONNECTIVITY" )) ); QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Edge ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "EDGES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "EDGES" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Face ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "FACES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "FACES" )).arg( con )); con = formatConnectivity( connectivity, SMDSAbs_Volume ); if ( !con.isEmpty() ) - myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "VOLUMES" ) ).arg( con ) ); + myInfo->append( QString( "- %1: %2" ).arg( SMESHGUI_ElemInfo::tr( "VOLUMES" )).arg( con )); } else { - myInfo->append( QString( "%1" ).arg( SMESHGUI_ElemInfo::tr( "FREE_NODE" ) ).arg( id ) ); + myInfo->append( QString( "%1" ).arg( SMESHGUI_ElemInfo::tr( "FREE_NODE" )).arg( id )); } } // separator myInfo->append( "" ); // Controls - myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONTROLS" ) ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_ElemInfo::tr( "CONTROLS" )) ); //Length if ( e->GetType() == SMDSAbs_Edge ) { afunctor.reset( new SMESH::Controls::Length() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "LENGTH_EDGES" ) ).arg( afunctor->GetValue( id ) ) ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "LENGTH_EDGES" )).arg( afunctor->GetValue( id )) ); } if( e->GetType() == SMDSAbs_Face ) { //Area afunctor.reset( new SMESH::Controls::Area() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "AREA_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); + afunctor->SetPrecision( cprecision ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "AREA_ELEMENTS" )).arg( afunctor->GetValue( id )) ); //Taper afunctor.reset( new SMESH::Controls::Taper() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "TAPER_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "TAPER_ELEMENTS" )).arg( afunctor->GetValue( id )) ); //AspectRatio2D afunctor.reset( new SMESH::Controls::AspectRatio() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "ASPECTRATIO_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //Minimum angle + myInfo->append( QString( "- %1: %2" ).arg( tr( "ASPECTRATIO_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //Minimum angle afunctor.reset( new SMESH::Controls::MinimumAngle() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "MINIMUMANGLE_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //Wraping angle + myInfo->append( QString( "- %1: %2" ).arg( tr( "MINIMUMANGLE_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //Warping angle afunctor.reset( new SMESH::Controls::Warping() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "WARP_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //Skew + myInfo->append( QString( "- %1: %2" ).arg( tr( "WARP_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //Skew afunctor.reset( new SMESH::Controls::Skew() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "SKEW_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //ElemDiam2D + myInfo->append( QString( "- %1: %2" ).arg( tr( "SKEW_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //ElemDiam2D afunctor.reset( new SMESH::Controls::MaxElementLength2D() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "MAX_ELEMENT_LENGTH_2D" ) ).arg( afunctor->GetValue( id ) ) ); + afunctor->SetPrecision( cprecision ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "MAX_ELEMENT_LENGTH_2D" )).arg( afunctor->GetValue( id )) ); + //min edge length + afunctor.reset( new SMESH::Controls::Length2D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "MIN_ELEM_EDGE" )).arg( afunctor->GetValue( id )) ); } if( e->GetType() == SMDSAbs_Volume ) { //AspectRatio3D afunctor.reset( new SMESH::Controls::AspectRatio3D() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "ASPECTRATIO_3D_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //Volume + myInfo->append( QString( "- %1: %2" ).arg( tr( "ASPECTRATIO_3D_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //Volume afunctor.reset( new SMESH::Controls::Volume() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "VOLUME_3D_ELEMENTS" ) ).arg( afunctor->GetValue( id ) ) ); - //ElementDiameter3D + myInfo->append( QString( "- %1: %2" ).arg( tr( "VOLUME_3D_ELEMENTS" )).arg( afunctor->GetValue( id )) ); + //ElementDiameter3D afunctor.reset( new SMESH::Controls::Volume() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - myInfo->append( QString( "- %1: %2" ).arg( tr( "MAX_ELEMENT_LENGTH_3D" ) ).arg( afunctor->GetValue( id ) ) ); + myInfo->append( QString( "- %1: %2" ).arg( tr( "MAX_ELEMENT_LENGTH_3D" )).arg( afunctor->GetValue( id )) ); } // separator myInfo->append( "" ); // Gravity center XYZ gc = gravityCenter( e ); - myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "GRAVITY_CENTER" ) ).arg( gc.x() ).arg( gc.y() ).arg( gc.z() ) ); + myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "GRAVITY_CENTER" )).arg( gc.x() ).arg( gc.y() ).arg( gc.z() )); + + // Normal vector + if( e->GetType() == SMDSAbs_Face ) { + XYZ gc = normal( e ); + myInfo->append( QString( "%1: (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "NORMAL_VECTOR" )).arg( gc.x() ).arg( gc.y() ).arg( gc.z() )); + } // Element position if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) { - SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMesh ) ) { + SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); + if ( !CORBA::is_nil( aMesh )) { SMESH::ElementPosition pos = aMesh->GetElementPosition( id ); int shapeID = pos.shapeID; if ( shapeID > 0 ) { @@ -1438,59 +1532,59 @@ void SMESHGUI_SimpleElemInfo::information( const QList& ids ) case GEOM::SHELL: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_SHELL" ); break; default: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_SHAPE" ); break; } - myInfo->append( QString( "%1: %2 #%3" ).arg( SMESHGUI_ElemInfo::tr( "POSITION" ) ).arg( shapeType ).arg( shapeID ) ); + myInfo->append( QString( "%1: %2 #%3" ).arg( SMESHGUI_ElemInfo::tr( "POSITION" )).arg( shapeType ).arg( shapeID )); } } } // Groups the element belongs to SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMesh ) ) { + if ( !CORBA::is_nil( aMesh )) { SMESH::ListOfGroups_var groups = aMesh->GetGroups(); myInfo->append( "" ); // separator bool top_created = false; - for ( int i = 0; i < groups->length(); i++ ) { + for ( CORBA::ULong i = 0; i < groups->length(); i++ ) { SMESH::SMESH_GroupBase_var aGrp = groups[i]; - if ( CORBA::is_nil( aGrp ) ) continue; + if ( CORBA::is_nil( aGrp )) continue; QString aName = aGrp->GetName(); - if ( aGrp->GetType() != SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id ) ) { + if ( aGrp->GetType() != SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id )) { if ( !top_created ) { - myInfo->append( QString( "%1:" ).arg( SMESHGUI_AddInfo::tr( "GROUPS" ) ) ); + myInfo->append( QString( "%1:" ).arg( SMESHGUI_AddInfo::tr( "GROUPS" )) ); top_created = true; } - myInfo->append( QString( "+ %1:" ).arg( aName.trimmed() ) ); + myInfo->append( QString( "+ %1:" ).arg( aName.trimmed() )); if ( grp_details ) { SMESH::SMESH_Group_var aStdGroup = SMESH::SMESH_Group::_narrow( aGrp ); SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGrp ); SMESH::SMESH_GroupOnFilter_var aFltGroup = SMESH::SMESH_GroupOnFilter::_narrow( aGrp ); - + // type : group on geometry, standalone group, group on filter - if ( !CORBA::is_nil( aStdGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" ) ) ); + if ( !CORBA::is_nil( aStdGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" )) ); } - else if ( !CORBA::is_nil( aGeomGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" ) ) ); + else if ( !CORBA::is_nil( aGeomGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" )) ); GEOM::GEOM_Object_var gobj = aGeomGroup->GetShape(); _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { - myInfo->append( QString( " - %1: %2: %3" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GEOM_OBJECT" ) ).arg( sobj->GetName().c_str() ) ); + myInfo->append( QString( " - %1: %2: %3" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GEOM_OBJECT" )).arg( sobj->GetName().c_str() )); } } - else if ( !CORBA::is_nil( aFltGroup ) ) { - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" ) ). - arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) ) ); + else if ( !CORBA::is_nil( aFltGroup )) { + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )). + arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )) ); } - - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" ) ). - arg( QString::number( aGrp->Size() ) ) ); - + + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" )). + arg( QString::number( aGrp->Size() )) ); + // color SALOMEDS::Color color = aGrp->GetColor(); - myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" ) ). - arg( QColor( color.R*255., color.G*255., color.B*255. ).name() ) ); + myInfo->append( QString( " - %1: %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" )). + arg( QColor( color.R*255., color.G*255., color.B*255. ).name() )); } } } @@ -1551,7 +1645,7 @@ SMESHGUI_TreeElemInfo::ItemDelegate::ItemDelegate( QObject* parent ) : QItemDele QWidget* SMESHGUI_TreeElemInfo::ItemDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QWidget* w = index.column() == 0 ? 0: QItemDelegate::createEditor( parent, option, index ); - if ( qobject_cast( w ) ) qobject_cast( w )->setReadOnly( true ); + if ( qobject_cast( w )) qobject_cast( w )->setReadOnly( true ); return w; } @@ -1565,18 +1659,24 @@ QWidget* SMESHGUI_TreeElemInfo::ItemDelegate::createEditor( QWidget* parent, con \param parent parent widget */ SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent ) -: SMESHGUI_ElemInfo( parent ) + : SMESHGUI_ElemInfo( parent ) { myInfo = new QTreeWidget( frame() ); myInfo->setColumnCount( 2 ); - myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" ) ); + myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" )); myInfo->header()->setStretchLastSection( true ); +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) myInfo->header()->setResizeMode( 0, QHeaderView::ResizeToContents ); - myInfo->setItemDelegate( new ItemDelegate( myInfo ) ); +#else + myInfo->header()->setSectionResizeMode( 0, QHeaderView::ResizeToContents ); +#endif + myInfo->setItemDelegate( new ItemDelegate( myInfo )); QVBoxLayout* l = new QVBoxLayout( frame() ); l->setMargin( 0 ); l->addWidget( myInfo ); - connect( myInfo, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int ) ), this, SLOT( itemDoubleClicked( QTreeWidgetItem*, int ) ) ); + connect( myInfo, SIGNAL( itemDoubleClicked( QTreeWidgetItem*, int )), this, SLOT( itemDoubleClicked( QTreeWidgetItem*, int )) ); + connect( myInfo, SIGNAL( itemCollapsed( QTreeWidgetItem* )), this, SLOT( saveExpanded( QTreeWidgetItem* )) ); + connect( myInfo, SIGNAL( itemExpanded( QTreeWidgetItem* )), this, SLOT( saveExpanded( QTreeWidgetItem* )) ); } /*! @@ -1591,7 +1691,7 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) int grp_details = SMESHGUI::resourceMgr()->booleanValue( "SMESH", "elem_info_grp_details", false ); int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 ); int cprecision = -1; - if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false ) ) + if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false )) cprecision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "controls_precision", -1 ); foreach ( long id, ids ) { if ( !isElements() ) { @@ -1604,71 +1704,71 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) // node ID QTreeWidgetItem* nodeItem = createItem( 0, Bold | All ); - nodeItem->setText( 0, SMESHGUI_ElemInfo::tr( "NODE" ) ); - nodeItem->setText( 1, QString( "#%1" ).arg( id ) ); + nodeItem->setText( 0, SMESHGUI_ElemInfo::tr( "NODE" )); + nodeItem->setText( 1, QString( "#%1" ).arg( id )); // coordinates QTreeWidgetItem* coordItem = createItem( nodeItem, Bold ); - coordItem->setText( 0, SMESHGUI_ElemInfo::tr( "COORDINATES" ) ); + coordItem->setText( 0, SMESHGUI_ElemInfo::tr( "COORDINATES" )); QTreeWidgetItem* xItem = createItem( coordItem ); xItem->setText( 0, "X" ); - xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); QTreeWidgetItem* yItem = createItem( coordItem ); yItem->setText( 0, "Y" ); - yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); QTreeWidgetItem* zItem = createItem( coordItem ); zItem->setText( 0, "Z" ); - zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); // connectivity QTreeWidgetItem* conItem = createItem( nodeItem, Bold ); - conItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) ); + conItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" )); Connectivity connectivity = nodeConnectivity( node ); if ( !connectivity.isEmpty() ) { QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); if ( !con.isEmpty() ) { QTreeWidgetItem* i = createItem( conItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" ) ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" )); i->setText( 1, con ); } con = formatConnectivity( connectivity, SMDSAbs_Ball ); if ( !con.isEmpty() ) { QTreeWidgetItem* i = createItem( conItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" ) ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" )); i->setText( 1, con ); i->setData( 1, TypeRole, NodeConnectivity ); } con = formatConnectivity( connectivity, SMDSAbs_Edge ); if ( !con.isEmpty() ) { QTreeWidgetItem* i = createItem( conItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "EDGES" ) ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "EDGES" )); i->setText( 1, con ); i->setData( 1, TypeRole, NodeConnectivity ); } con = formatConnectivity( connectivity, SMDSAbs_Face ); if ( !con.isEmpty() ) { QTreeWidgetItem* i = createItem( conItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "FACES" ) ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "FACES" )); i->setText( 1, con ); i->setData( 1, TypeRole, NodeConnectivity ); } con = formatConnectivity( connectivity, SMDSAbs_Volume ); if ( !con.isEmpty() ) { QTreeWidgetItem* i = createItem( conItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "VOLUMES" ) ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "VOLUMES" )); i->setText( 1, con ); i->setData( 1, TypeRole, NodeConnectivity ); } } else { - conItem->setText( 1, SMESHGUI_ElemInfo::tr( "FREE_NODE" ) ); + conItem->setText( 1, SMESHGUI_ElemInfo::tr( "FREE_NODE" )); } // node position SMESH::SMESH_Mesh_ptr aMeshPtr = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMeshPtr ) ) { + if ( !CORBA::is_nil( aMeshPtr )) { SMESH::NodePosition_var pos = aMeshPtr->GetNodePosition( id ); int shapeID = pos->shapeID; if ( shapeID > 0 ) { QString shapeType; - double u, v; + double u = 0, v = 0; switch ( pos->shapeType ) { case GEOM::EDGE: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_EDGE" ); @@ -1706,17 +1806,17 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) } // groups node belongs to SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); - if ( !CORBA::is_nil( aMesh ) ) { + if ( !CORBA::is_nil( aMesh )) { SMESH::ListOfGroups_var groups = aMesh->GetGroups(); QTreeWidgetItem* groupsItem = 0; - for ( int i = 0; i < groups->length(); i++ ) { + for ( CORBA::ULong i = 0; i < groups->length(); i++ ) { SMESH::SMESH_GroupBase_var aGrp = groups[i]; - if ( CORBA::is_nil( aGrp ) ) continue; + if ( CORBA::is_nil( aGrp )) continue; QString aName = aGrp->GetName(); - if ( aGrp->GetType() == SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id ) ) { + if ( aGrp->GetType() == SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id )) { if ( !groupsItem ) { groupsItem = createItem( nodeItem, Bold ); - groupsItem->setText( 0, SMESHGUI_AddInfo::tr( "GROUPS" ) ); + groupsItem->setText( 0, SMESHGUI_AddInfo::tr( "GROUPS" )); } QTreeWidgetItem* it = createItem( groupsItem, Bold ); it->setText( 0, aName.trimmed() ); @@ -1727,34 +1827,34 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) // type : group on geometry, standalone group, group on filter QTreeWidgetItem* typeItem = createItem( it ); - typeItem->setText( 0, SMESHGUI_AddInfo::tr( "TYPE" ) ); - if ( !CORBA::is_nil( aStdGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" ) ); + typeItem->setText( 0, SMESHGUI_AddInfo::tr( "TYPE" )); + if ( !CORBA::is_nil( aStdGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" )); } - else if ( !CORBA::is_nil( aGeomGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" ) ); + else if ( !CORBA::is_nil( aGeomGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" )); GEOM::GEOM_Object_var gobj = aGeomGroup->GetShape(); _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { QTreeWidgetItem* gobjItem = createItem( typeItem ); - gobjItem->setText( 0, SMESHGUI_AddInfo::tr( "GEOM_OBJECT" ) ); + gobjItem->setText( 0, SMESHGUI_AddInfo::tr( "GEOM_OBJECT" )); gobjItem->setText( 1, sobj->GetName().c_str() ); } } - else if ( !CORBA::is_nil( aFltGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) ); + else if ( !CORBA::is_nil( aFltGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )); } // size QTreeWidgetItem* sizeItem = createItem( it ); - sizeItem->setText( 0, SMESHGUI_AddInfo::tr( "SIZE" ) ); - sizeItem->setText( 1, QString::number( aGrp->Size() ) ); + sizeItem->setText( 0, SMESHGUI_AddInfo::tr( "SIZE" )); + sizeItem->setText( 1, QString::number( aGrp->Size() )); // color SALOMEDS::Color color = aGrp->GetColor(); QTreeWidgetItem* colorItem = createItem( it ); - colorItem->setText( 0, SMESHGUI_AddInfo::tr( "COLOR" ) ); - colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) ) ); + colorItem->setText( 0, SMESHGUI_AddInfo::tr( "COLOR" )); + colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) )); } } } @@ -1781,7 +1881,7 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) if ( stype.isEmpty() ) return; QTreeWidgetItem* elemItem = createItem( 0, Bold | All ); elemItem->setText( 0, stype ); - elemItem->setText( 1, QString( "#%1" ).arg( id ) ); + elemItem->setText( 1, QString( "#%1" ).arg( id )); // geometry type QString gtype; switch( e->GetEntityType() ) { @@ -1808,198 +1908,219 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) gtype = SMESHGUI_ElemInfo::tr( "HEXAHEDRON" ); break; case SMDSEntity_Penta: case SMDSEntity_Quad_Penta: + case SMDSEntity_BiQuad_Penta: gtype = SMESHGUI_ElemInfo::tr( "PRISM" ); break; case SMDSEntity_Hexagonal_Prism: gtype = SMESHGUI_ElemInfo::tr( "HEX_PRISM" ); break; case SMDSEntity_Polyhedra: case SMDSEntity_Quad_Polyhedra: gtype = SMESHGUI_ElemInfo::tr( "POLYHEDRON" ); break; - default: + default: break; } if ( !gtype.isEmpty() ) { QTreeWidgetItem* typeItem = createItem( elemItem, Bold ); - typeItem->setText( 0, SMESHGUI_ElemInfo::tr( "TYPE" ) ); + typeItem->setText( 0, SMESHGUI_ElemInfo::tr( "TYPE" )); typeItem->setText( 1, gtype ); } // quadratic flag (for edges, faces and volumes) if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) { // quadratic flag QTreeWidgetItem* quadItem = createItem( elemItem, Bold ); - quadItem->setText( 0, SMESHGUI_ElemInfo::tr( "QUADRATIC" ) ); - quadItem->setText( 1, e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" ) ); + quadItem->setText( 0, SMESHGUI_ElemInfo::tr( "QUADRATIC" )); + quadItem->setText( 1, e->IsQuadratic() ? SMESHGUI_ElemInfo::tr( "YES" ) : SMESHGUI_ElemInfo::tr( "NO" )); } - if ( const SMDS_BallElement* ball = dynamic_cast( e )) { + if ( const SMDS_BallElement* ball = SMDS_Mesh::DownCast< SMDS_BallElement >( e )) { // ball diameter QTreeWidgetItem* diamItem = createItem( elemItem, Bold ); - diamItem->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" ) ); + diamItem->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_DIAMETER" )); diamItem->setText( 1, QString( "%1" ).arg( ball->GetDiameter() )); } // connectivity QTreeWidgetItem* conItem = createItem( elemItem, Bold ); - conItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) ); - SMDS_ElemIteratorPtr nodeIt = e->nodesIterator(); - for ( int idx = 1; nodeIt->more(); idx++ ) { - const SMDS_MeshNode* node = static_cast( nodeIt->next() ); - // node number and ID - QTreeWidgetItem* nodeItem = createItem( conItem, Bold ); - nodeItem->setText( 0, QString( "%1 %2 / %3" ).arg( SMESHGUI_ElemInfo::tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ) ); - nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() ) ); - nodeItem->setData( 1, TypeRole, ElemConnectivity ); - nodeItem->setData( 1, IdRole, node->GetID() ); - nodeItem->setExpanded( false ); - // node coordinates - QTreeWidgetItem* coordItem = createItem( nodeItem ); - coordItem->setText( 0, SMESHGUI_ElemInfo::tr( "COORDINATES" ) ); - QTreeWidgetItem* xItem = createItem( coordItem ); - xItem->setText( 0, "X" ); - xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); - QTreeWidgetItem* yItem = createItem( coordItem ); - yItem->setText( 0, "Y" ); - yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); - QTreeWidgetItem* zItem = createItem( coordItem ); - zItem->setText( 0, "Z" ); - zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); - // node connectivity - QTreeWidgetItem* nconItem = createItem( nodeItem ); - nconItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) ); - Connectivity connectivity = nodeConnectivity( node ); - if ( !connectivity.isEmpty() ) { - QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); - if ( !con.isEmpty() ) { - QTreeWidgetItem* i = createItem( nconItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" ) ); - i->setText( 1, con ); - } - con = formatConnectivity( connectivity, SMDSAbs_Edge ); - if ( !con.isEmpty() ) { - QTreeWidgetItem* i = createItem( nconItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "EDGES" ) ); - i->setText( 1, con ); - i->setData( 1, TypeRole, NodeConnectivity ); - } - con = formatConnectivity( connectivity, SMDSAbs_Ball ); - if ( !con.isEmpty() ) { - QTreeWidgetItem* i = createItem( nconItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" ) ); - i->setText( 1, con ); - i->setData( 1, TypeRole, NodeConnectivity ); - } - con = formatConnectivity( connectivity, SMDSAbs_Face ); - if ( !con.isEmpty() ) { - QTreeWidgetItem* i = createItem( nconItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "FACES" ) ); - i->setText( 1, con ); - i->setData( 1, TypeRole, NodeConnectivity ); - } - con = formatConnectivity( connectivity, SMDSAbs_Volume ); - if ( !con.isEmpty() ) { - QTreeWidgetItem* i = createItem( nconItem ); - i->setText( 0, SMESHGUI_ElemInfo::tr( "VOLUMES" ) ); - i->setText( 1, con ); - i->setData( 1, TypeRole, NodeConnectivity ); + conItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" )); + + + if( e->GetGeomType() != SMDSGeom_POLYHEDRA ) { + SMDS_ElemIteratorPtr nodeIt = e->nodesIterator(); + for ( int idx = 1; nodeIt->more(); idx++ ) { + const SMDS_MeshNode* node = static_cast( nodeIt->next() ); + nodeInfo( node, idx, e->NbNodes(), conItem ); + } + } + else { + SMDS_NodeIteratorPtr nodeIt = e->nodeIterator(); + std::set< const SMDS_MeshNode* > addedNodes; + QList uniqueNodes; + while ( nodeIt->more() ) { + const SMDS_MeshNode* node = nodeIt->next(); + if ( addedNodes.insert( node ).second ) + uniqueNodes.append( nodeIt->next() ); + } + SMDS_VolumeTool vtool( e ); + const int nbFaces = vtool.NbFaces(); + for( int face_id = 0; face_id < nbFaces; face_id++ ) { + QTreeWidgetItem* faceItem = createItem( conItem, Bold ); + faceItem->setText( 0, QString( "%1 %2 / %3" ).arg( SMESHGUI_ElemInfo::tr( "FACE" )).arg( face_id + 1 ).arg( nbFaces )); + faceItem->setExpanded( true ); + + const SMDS_MeshNode** aNodeIds = vtool.GetFaceNodes( face_id ); + const int nbNodes = vtool.NbFaceNodes ( face_id ); + for( int node_id = 0; node_id < nbNodes; node_id++ ) { + const SMDS_MeshNode* node = aNodeIds[node_id]; + nodeInfo( node, uniqueNodes.indexOf(node) + 1, uniqueNodes.size(), faceItem ); } } } //Controls QTreeWidgetItem* cntrItem = createItem( elemItem, Bold ); - cntrItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONTROLS" ) ); + cntrItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONTROLS" )); //Length - if( e->GetType()==SMDSAbs_Edge){ + if( e->GetType()==SMDSAbs_Edge){ afunctor.reset( new SMESH::Controls::Length() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* lenItem = createItem( cntrItem, Bold ); - lenItem->setText( 0, tr( "LENGTH_EDGES" ) ); - lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + lenItem->setText( 0, tr( "LENGTH_EDGES" )); + lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); } if( e->GetType() == SMDSAbs_Face ) { - //Area - afunctor.reset( new SMESH::Controls::Area() ); + //Area + afunctor.reset( new SMESH::Controls::Area() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* areaItem = createItem( cntrItem, Bold ); - areaItem->setText( 0, tr( "AREA_ELEMENTS" ) ); - areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) ) ); + areaItem->setText( 0, tr( "AREA_ELEMENTS" )); + areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) )); //Taper - afunctor.reset( new SMESH::Controls::Taper() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold ); - taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ) ); - taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( e->NbNodes() == 4 ) // see SMESH_Controls.cxx + { + afunctor.reset( new SMESH::Controls::Taper() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold ); + taperlItem->setText( 0, tr( "TAPER_ELEMENTS" )); + taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + //Warping angle + afunctor.reset( new SMESH::Controls::Warping() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* warpItem = createItem( cntrItem, Bold ); + warpItem->setText( 0, tr( "WARP_ELEMENTS" )); + warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } //AspectRatio2D - afunctor.reset( new SMESH::Controls::AspectRatio() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold ); - ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" )); - ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( !e->IsPoly() ) + { + afunctor.reset( new SMESH::Controls::AspectRatio() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold ); + ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" )); + ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } //Minimum angle afunctor.reset( new SMESH::Controls::MinimumAngle() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* minanglItem = createItem( cntrItem, Bold ); - minanglItem->setText( 0, tr( "MINIMUMANGLE_ELEMENTS" ) ); - minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //Wraping angle - afunctor.reset( new SMESH::Controls::Warping() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* warpItem = createItem( cntrItem, Bold ); - warpItem->setText( 0, tr( "WARP_ELEMENTS" )); - warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //Skew - afunctor.reset( new SMESH::Controls::Skew() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* skewItem = createItem( cntrItem, Bold ); - skewItem->setText( 0, tr( "SKEW_ELEMENTS" ) ); - skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //ElemDiam2D - afunctor.reset( new SMESH::Controls::MaxElementLength2D() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* diamItem = createItem( cntrItem, Bold ); - diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" )); - diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + minanglItem->setText( 0, tr( "MINIMUMANGLE_ELEMENTS" )); + minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + //Skew + if ( e->NbNodes() == 3 || e->NbNodes() == 4 ) + { + afunctor.reset( new SMESH::Controls::Skew() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* skewItem = createItem( cntrItem, Bold ); + skewItem->setText( 0, tr( "SKEW_ELEMENTS" )); + skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } + //Deflection + if ( hasShapeToMesh() ) + { + afunctor.reset( new SMESH::Controls::Deflection2D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* deflItem = createItem( cntrItem, Bold ); + deflItem->setText( 0, tr( "DEFLECTION_2D" )); + deflItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } + //ElemDiam2D + if ( !e->IsPoly() ) + { + afunctor.reset( new SMESH::Controls::MaxElementLength2D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* diamItem = createItem( cntrItem, Bold ); + diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" )); + diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } } if( e->GetType() == SMDSAbs_Volume ) { - //AspectRatio3D - afunctor.reset( new SMESH::Controls::AspectRatio3D() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold ); - ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" ) ); - ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( !e->IsPoly() ) + { + //AspectRatio3D + afunctor.reset( new SMESH::Controls::AspectRatio3D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold ); + ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" )); + ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); + } //Volume afunctor.reset( new SMESH::Controls::Volume() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); QTreeWidgetItem* volItem = createItem( cntrItem, Bold ); - volItem->setText( 0, tr( "VOLUME_3D_ELEMENTS" ) ); - volItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + volItem->setText( 0, tr( "VOLUME_3D_ELEMENTS" )); + volItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); //ElementDiameter3D afunctor.reset( new SMESH::Controls::MaxElementLength3D() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); QTreeWidgetItem* diam3Item = createItem( cntrItem, Bold ); - diam3Item->setText( 0, tr( "MAX_ELEMENT_LENGTH_3D" ) ); - diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + diam3Item->setText( 0, tr( "MAX_ELEMENT_LENGTH_3D" )); + diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) ); } + //min edge length + afunctor.reset( new SMESH::Controls::Length2D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* minEdgeItem = createItem( cntrItem, Bold ); + minEdgeItem->setText( 0, tr( "MIN_ELEM_EDGE" )); + SMESH::Controls::TSequenceOfXYZ points; + afunctor->GetPoints( e, points ); // "non-standard" way, to make it work for all elem types + minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( points )) ); + // gravity center XYZ gc = gravityCenter( e ); QTreeWidgetItem* gcItem = createItem( elemItem, Bold ); - gcItem->setText( 0, SMESHGUI_ElemInfo::tr( "GRAVITY_CENTER" ) ); + gcItem->setText( 0, SMESHGUI_ElemInfo::tr( "GRAVITY_CENTER" )); QTreeWidgetItem* xItem = createItem( gcItem ); xItem->setText( 0, "X" ); - xItem->setText( 1, QString::number( gc.x(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + xItem->setText( 1, QString::number( gc.x(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); QTreeWidgetItem* yItem = createItem( gcItem ); yItem->setText( 0, "Y" ); - yItem->setText( 1, QString::number( gc.y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + yItem->setText( 1, QString::number( gc.y(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); QTreeWidgetItem* zItem = createItem( gcItem ); zItem->setText( 0, "Z" ); - zItem->setText( 1, QString::number( gc.z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) ); + zItem->setText( 1, QString::number( gc.z(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + + // normal vector + if( e->GetType() == SMDSAbs_Face ) { + XYZ gc = normal( e ); + QTreeWidgetItem* nItem = createItem( elemItem, Bold ); + nItem->setText( 0, SMESHGUI_ElemInfo::tr( "NORMAL_VECTOR" )); + QTreeWidgetItem* xItem = createItem( nItem ); + xItem->setText( 0, "X" ); + xItem->setText( 1, QString::number( gc.x(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + QTreeWidgetItem* yItem = createItem( nItem ); + yItem->setText( 0, "Y" ); + yItem->setText( 1, QString::number( gc.y(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + QTreeWidgetItem* zItem = createItem( nItem ); + zItem->setText( 0, "Z" ); + zItem->setText( 1, QString::number( gc.z(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + } + // element position SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) { - if ( !CORBA::is_nil( aMesh ) ) { + if ( !CORBA::is_nil( aMesh )) { SMESH::ElementPosition pos = aMesh->GetElementPosition( id ); int shapeID = pos.shapeID; if ( shapeID > 0 ) { @@ -2013,23 +2134,23 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) case GEOM::SHELL: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_SHELL" ); break; default: shapeType = SMESHGUI_ElemInfo::tr( "GEOM_SHAPE" ); break; } - shItem->setText( 0, SMESHGUI_ElemInfo::tr( "POSITION" ) ); - shItem->setText( 1, QString( "%1 #%2" ).arg( shapeType ).arg( shapeID ) ); + shItem->setText( 0, SMESHGUI_ElemInfo::tr( "POSITION" )); + shItem->setText( 1, QString( "%1 #%2" ).arg( shapeType ).arg( shapeID )); } } } // groups element belongs to - if ( !CORBA::is_nil( aMesh ) ) { + if ( !CORBA::is_nil( aMesh )) { SMESH::ListOfGroups_var groups = aMesh->GetGroups(); QTreeWidgetItem* groupsItem = 0; - for ( int i = 0; i < groups->length(); i++ ) { + for ( CORBA::ULong i = 0; i < groups->length(); i++ ) { SMESH::SMESH_GroupBase_var aGrp = groups[i]; - if ( CORBA::is_nil( aGrp ) ) continue; + if ( CORBA::is_nil( aGrp )) continue; QString aName = aGrp->GetName(); - if ( aGrp->GetType() != SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id ) ) { + if ( aGrp->GetType() != SMESH::NODE && !aName.isEmpty() && aGrp->Contains( id )) { if ( !groupsItem ) { groupsItem = createItem( elemItem, Bold ); - groupsItem->setText( 0, SMESHGUI_AddInfo::tr( "GROUPS" ) ); + groupsItem->setText( 0, SMESHGUI_AddInfo::tr( "GROUPS" )); } QTreeWidgetItem* it = createItem( groupsItem, Bold ); it->setText( 0, aName.trimmed() ); @@ -2040,34 +2161,34 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) // type : group on geometry, standalone group, group on filter QTreeWidgetItem* typeItem = createItem( it ); - typeItem->setText( 0, SMESHGUI_AddInfo::tr( "TYPE" ) ); - if ( !CORBA::is_nil( aStdGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" ) ); + typeItem->setText( 0, SMESHGUI_AddInfo::tr( "TYPE" )); + if ( !CORBA::is_nil( aStdGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "STANDALONE_GROUP" )); } - else if ( !CORBA::is_nil( aGeomGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" ) ); + else if ( !CORBA::is_nil( aGeomGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_GEOMETRY" )); GEOM::GEOM_Object_var gobj = aGeomGroup->GetShape(); _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { QTreeWidgetItem* gobjItem = createItem( typeItem ); - gobjItem->setText( 0, SMESHGUI_AddInfo::tr( "GEOM_OBJECT" ) ); + gobjItem->setText( 0, SMESHGUI_AddInfo::tr( "GEOM_OBJECT" )); gobjItem->setText( 1, sobj->GetName().c_str() ); } } - else if ( !CORBA::is_nil( aFltGroup ) ) { - typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" ) ); + else if ( !CORBA::is_nil( aFltGroup )) { + typeItem->setText( 1, SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )); } // size QTreeWidgetItem* sizeItem = createItem( it ); - sizeItem->setText( 0, SMESHGUI_AddInfo::tr( "SIZE" ) ); - sizeItem->setText( 1, QString::number( aGrp->Size() ) ); + sizeItem->setText( 0, SMESHGUI_AddInfo::tr( "SIZE" )); + sizeItem->setText( 1, QString::number( aGrp->Size() )); // color SALOMEDS::Color color = aGrp->GetColor(); QTreeWidgetItem* colorItem = createItem( it ); - colorItem->setText( 0, SMESHGUI_AddInfo::tr( "COLOR" ) ); - colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) ) ); + colorItem->setText( 0, SMESHGUI_AddInfo::tr( "COLOR" )); + colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) )); } } } @@ -2077,6 +2198,77 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) } } +/*! + \brief Show node information + \param node mesh node for showing + \param index index of current node + \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 ) +{ + int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 ); + // node number and ID + QTreeWidgetItem* nodeItem = createItem( parentItem, Bold ); + nodeItem->setText( 0, QString( "%1 %2 / %3" ).arg( SMESHGUI_ElemInfo::tr( "NODE" )).arg( index ).arg( nbNodes )); + nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() )); + nodeItem->setData( 1, TypeRole, ElemConnectivity ); + nodeItem->setData( 1, IdRole, node->GetID() ); + nodeItem->setExpanded( false ); + // node coordinates + QTreeWidgetItem* coordItem = createItem( nodeItem ); + coordItem->setText( 0, SMESHGUI_ElemInfo::tr( "COORDINATES" )); + QTreeWidgetItem* xItem = createItem( coordItem ); + xItem->setText( 0, "X" ); + xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + QTreeWidgetItem* yItem = createItem( coordItem ); + yItem->setText( 0, "Y" ); + yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + QTreeWidgetItem* zItem = createItem( coordItem ); + zItem->setText( 0, "Z" ); + zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision )) ); + // node connectivity + QTreeWidgetItem* nconItem = createItem( nodeItem ); + nconItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" )); + Connectivity connectivity = nodeConnectivity( node ); + if ( !connectivity.isEmpty() ) { + QString con = formatConnectivity( connectivity, SMDSAbs_0DElement ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "0D_ELEMENTS" )); + i->setText( 1, con ); + } + con = formatConnectivity( connectivity, SMDSAbs_Edge ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "EDGES" )); + i->setText( 1, con ); + i->setData( 1, TypeRole, NodeConnectivity ); + } + con = formatConnectivity( connectivity, SMDSAbs_Ball ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "BALL_ELEMENTS" )); + i->setText( 1, con ); + i->setData( 1, TypeRole, NodeConnectivity ); + } + con = formatConnectivity( connectivity, SMDSAbs_Face ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "FACES" )); + i->setText( 1, con ); + i->setData( 1, TypeRole, NodeConnectivity ); + } + con = formatConnectivity( connectivity, SMDSAbs_Volume ); + if ( !con.isEmpty() ) { + QTreeWidgetItem* i = createItem( nconItem ); + i->setText( 0, SMESHGUI_ElemInfo::tr( "VOLUMES" )); + i->setText( 1, con ); + i->setData( 1, TypeRole, NodeConnectivity ); + } + } +} /*! \brief Internal clean-up (reset widget) */ @@ -2105,10 +2297,16 @@ QTreeWidgetItem* SMESHGUI_TreeElemInfo::createItem( QTreeWidgetItem* parent, int QFont f = item->font( 0 ); f.setBold( true ); for ( int i = 0; i < myInfo->columnCount(); i++ ) { - if ( ( flags & Bold ) && ( i == 0 || flags & All ) ) + if ( ( flags & Bold ) && ( i == 0 || flags & All )) item->setFont( i, f ); } + if ( parent && parent->childCount() == 1 && itemDepth( parent ) == 1 ) + { + QString resName = expandedResource( parent ); + parent->setExpanded( SMESHGUI::resourceMgr()->booleanValue("SMESH", resName, true )); + } + item->setExpanded( true ); return item; } @@ -2121,25 +2319,36 @@ void SMESHGUI_TreeElemInfo::contextMenuEvent( QContextMenuEvent* e ) int type = aTreeItem->data( 1, TypeRole ).toInt(); int id = aTreeItem->data( 1, IdRole ).toInt(); QMenu menu; - QAction* a = menu.addAction( tr( "SHOW_ITEM_INFO" ) ); + QAction* a = menu.addAction( tr( "SHOW_ITEM_INFO" )); if ( type == ElemConnectivity && id > 0 && menu.exec( e->globalPos() ) == a ) - emit( itemInfo( id ) ); + emit( itemInfo( id )); else if ( type == NodeConnectivity && menu.exec( e->globalPos() ) == a ) - emit( itemInfo( aTreeItem->text( 1 ) ) ); + emit( itemInfo( aTreeItem->text( 1 )) ); } -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(); int id = theItem->data( 1, IdRole ).toInt(); if ( type == ElemConnectivity && id > 0 ) - emit( itemInfo( id ) ); + emit( itemInfo( id )); else if ( type == NodeConnectivity ) - emit( itemInfo( theItem->text( 1 ) ) ); + emit( itemInfo( theItem->text( 1 )) ); } } +void SMESHGUI_TreeElemInfo::saveExpanded( QTreeWidgetItem* theItem ) +{ + if ( theItem ) + SMESHGUI::resourceMgr()->setValue("SMESH", expandedResource( theItem ), theItem->isExpanded() ); +} + +QString SMESHGUI_TreeElemInfo::expandedResource( QTreeWidgetItem* theItem ) +{ + return QString("Expanded_") + ( isElements() ? "E_" : "N_" ) + theItem->text(0); +} + void SMESHGUI_TreeElemInfo::saveInfo( QTextStream &out ) { out << QString( 12, '-' ) << "\n"; @@ -2168,10 +2377,13 @@ void SMESHGUI_TreeElemInfo::saveInfo( QTextStream &out ) */ /*! - \brief Contructor + \brief Constructor */ -GrpComputor::GrpComputor( SMESH::SMESH_GroupBase_ptr grp, QTreeWidgetItem* item, QObject* parent ) - : QObject( parent ), myItem( item ) +GrpComputor::GrpComputor( SMESH::SMESH_GroupBase_ptr grp, + QTreeWidgetItem* item, + QObject* parent, + bool toComputeSize) + : QObject( parent ), myItem( item ), myToComputeSize( toComputeSize ) { myGroup = SMESH::SMESH_GroupBase::_narrow( grp ); } @@ -2182,11 +2394,12 @@ GrpComputor::GrpComputor( SMESH::SMESH_GroupBase_ptr grp, QTreeWidgetItem* item, void GrpComputor::compute() { if ( !CORBA::is_nil( myGroup ) && myItem ) { + SUIT_OverrideCursor wc; QTreeWidgetItem* item = myItem; myItem = 0; - int nbNodes = myGroup->GetNumberOfNodes(); + int nb = myToComputeSize ? myGroup->Size() : myGroup->GetNumberOfNodes(); item->treeWidget()->removeItemWidget( item, 1 ); - item->setText( 1, QString::number( nbNodes )); + item->setText( 1, QString::number( nb )); } } @@ -2200,11 +2413,15 @@ void GrpComputor::compute() \param parent parent widget */ SMESHGUI_AddInfo::SMESHGUI_AddInfo( QWidget* parent ) -: QTreeWidget( parent ) + : QTreeWidget( parent ) { setColumnCount( 2 ); header()->setStretchLastSection( true ); +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) header()->setResizeMode( 0, QHeaderView::ResizeToContents ); +#else + header()->setSectionResizeMode( 0, QHeaderView::ResizeToContents ); +#endif header()->hide(); } @@ -2226,14 +2443,14 @@ void SMESHGUI_AddInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) myComputors.clear(); clear(); - if ( CORBA::is_nil( obj ) ) return; + if ( CORBA::is_nil( obj )) return; _PTR(SObject) sobj = SMESH::ObjectToSObject( obj ); if ( !sobj ) return; // name QTreeWidgetItem* nameItem = createItem( 0, Bold | All ); - nameItem->setText( 0, tr( "NAME" ) ); + nameItem->setText( 0, tr( "NAME" )); nameItem->setText( 1, sobj->GetName().c_str() ); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( obj ); @@ -2268,7 +2485,7 @@ QTreeWidgetItem* SMESHGUI_AddInfo::createItem( QTreeWidgetItem* parent, int flag QFont f = item->font( 0 ); f.setBold( true ); for ( int i = 0; i < columnCount(); i++ ) { - if ( ( flags & Bold ) && ( i == 0 || flags & All ) ) + if ( ( flags & Bold ) && ( i == 0 || flags & All )) item->setFont( i, f ); } @@ -2287,24 +2504,24 @@ void SMESHGUI_AddInfo::meshInfo( SMESH::SMESH_Mesh_ptr mesh, QTreeWidgetItem* pa GEOM::GEOM_Object_var shape = mesh->GetShapeToMesh(); SMESH::MedFileInfo_var inf = mesh->GetMEDFileInfo(); QTreeWidgetItem* typeItem = createItem( parent, Bold ); - typeItem->setText( 0, tr( "TYPE" ) ); - if ( !CORBA::is_nil( shape ) ) { - typeItem->setText( 1, tr( "MESH_ON_GEOMETRY" ) ); + typeItem->setText( 0, tr( "TYPE" )); + if ( !CORBA::is_nil( shape )) { + typeItem->setText( 1, tr( "MESH_ON_GEOMETRY" )); _PTR(SObject) sobj = SMESH::ObjectToSObject( shape ); if ( sobj ) { QTreeWidgetItem* gobjItem = createItem( typeItem ); - gobjItem->setText( 0, tr( "GEOM_OBJECT" ) ); + gobjItem->setText( 0, tr( "GEOM_OBJECT" )); gobjItem->setText( 1, sobj->GetName().c_str() ); } } else if ( strlen( (char*)inf->fileName ) > 0 ) { - typeItem->setText( 1, tr( "MESH_FROM_FILE" ) ); + typeItem->setText( 1, tr( "MESH_FROM_FILE" )); QTreeWidgetItem* fileItem = createItem( typeItem ); - fileItem->setText( 0, tr( "FILE_NAME" ) ); + fileItem->setText( 0, tr( "FILE_NAME" )); fileItem->setText( 1, (char*)inf->fileName ); } else { - typeItem->setText( 1, tr( "STANDALONE_MESH" ) ); + typeItem->setText( 1, tr( "STANDALONE_MESH" )); } // groups @@ -2330,7 +2547,7 @@ void SMESHGUI_AddInfo::subMeshInfo( SMESH::SMESH_subMesh_ptr subMesh, QTreeWidge _PTR(SObject) sobj = SMESH::ObjectToSObject( subMesh->GetFather() ); if ( sobj ) { QTreeWidgetItem* nameItem = createItem( parent, Bold ); - nameItem->setText( 0, tr( "PARENT_MESH" ) ); + nameItem->setText( 0, tr( "PARENT_MESH" )); nameItem->setText( 1, sobj->GetName().c_str() ); } } @@ -2340,7 +2557,7 @@ void SMESHGUI_AddInfo::subMeshInfo( SMESH::SMESH_subMesh_ptr subMesh, QTreeWidge _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { QTreeWidgetItem* gobjItem = createItem( parent, Bold ); - gobjItem->setText( 0, tr( "GEOM_OBJECT" ) ); + gobjItem->setText( 0, tr( "GEOM_OBJECT" )); gobjItem->setText( 1, sobj->GetName().c_str() ); } } @@ -2363,29 +2580,29 @@ void SMESHGUI_AddInfo::groupInfo( SMESH::SMESH_GroupBase_ptr grp, QTreeWidgetIte _PTR(SObject) sobj = SMESH::ObjectToSObject( grp->GetMesh() ); if ( sobj ) { QTreeWidgetItem* nameItem = createItem( parent, Bold ); - nameItem->setText( 0, tr( "PARENT_MESH" ) ); + nameItem->setText( 0, tr( "PARENT_MESH" )); nameItem->setText( 1, sobj->GetName().c_str() ); } } // type : group on geometry, standalone group, group on filter QTreeWidgetItem* typeItem = createItem( parent, Bold ); - typeItem->setText( 0, tr( "TYPE" ) ); - if ( !CORBA::is_nil( aStdGroup ) ) { - typeItem->setText( 1, tr( "STANDALONE_GROUP" ) ); + typeItem->setText( 0, tr( "TYPE" )); + if ( !CORBA::is_nil( aStdGroup )) { + typeItem->setText( 1, tr( "STANDALONE_GROUP" )); } - else if ( !CORBA::is_nil( aGeomGroup ) ) { - typeItem->setText( 1, tr( "GROUP_ON_GEOMETRY" ) ); + else if ( !CORBA::is_nil( aGeomGroup )) { + typeItem->setText( 1, tr( "GROUP_ON_GEOMETRY" )); GEOM::GEOM_Object_var gobj = aGeomGroup->GetShape(); _PTR(SObject) sobj = SMESH::ObjectToSObject( gobj ); if ( sobj ) { QTreeWidgetItem* gobjItem = createItem( typeItem ); - gobjItem->setText( 0, tr( "GEOM_OBJECT" ) ); + gobjItem->setText( 0, tr( "GEOM_OBJECT" )); gobjItem->setText( 1, sobj->GetName().c_str() ); } } - else if ( !CORBA::is_nil( aFltGroup ) ) { - typeItem->setText( 1, tr( "GROUP_ON_FILTER" ) ); + else if ( !CORBA::is_nil( aFltGroup )) { + typeItem->setText( 1, tr( "GROUP_ON_FILTER" )); } if ( !isShort ) { @@ -2414,41 +2631,57 @@ void SMESHGUI_AddInfo::groupInfo( SMESH::SMESH_GroupBase_ptr grp, QTreeWidgetIte break; } QTreeWidgetItem* etypeItem = createItem( parent, Bold ); - etypeItem->setText( 0, tr( "ENTITY_TYPE" ) ); + etypeItem->setText( 0, tr( "ENTITY_TYPE" )); etypeItem->setText( 1, etype ); } - // size + SMESH::SMESH_Mesh_var mesh = grp->GetMesh(); + bool meshLoaded = mesh->IsLoaded(); + + // size. Don't call grp->Size() for GroupOnFilter - issue IPAL52831 + int groupSize = -1; + if ( grp->IsNodeInfoAvailable() || CORBA::is_nil( aFltGroup )) + groupSize = grp->Size(); + QTreeWidgetItem* sizeItem = createItem( parent, Bold ); - sizeItem->setText( 0, tr( "SIZE" ) ); - sizeItem->setText( 1, QString::number( grp->Size() ) ); + sizeItem->setText( 0, tr( "SIZE" )); + if ( groupSize > -1 ) { + sizeItem->setText( 1, QString::number( groupSize )); + } + else { + QPushButton* btn = new QPushButton( tr( meshLoaded ? "COMPUTE" : "LOAD"), this ); + setItemWidget( sizeItem, 1, btn ); + GrpComputor* comp = new GrpComputor( grp, sizeItem, this, /*size=*/true ); + connect( btn, SIGNAL( clicked() ), comp, SLOT( compute() )); + myComputors.append( comp ); + if ( !meshLoaded ) + connect( btn, SIGNAL( clicked() ), this, SLOT( changeLoadToCompute() )); + } // color SALOMEDS::Color color = grp->GetColor(); QTreeWidgetItem* colorItem = createItem( parent, Bold ); - colorItem->setText( 0, tr( "COLOR" ) ); - colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) ) ); + colorItem->setText( 0, tr( "COLOR" )); + colorItem->setBackground( 1, QBrush( QColor( color.R*255., color.G*255., color.B*255.) )); // nb of underlying nodes if ( grp->GetType() != SMESH::NODE) { QTreeWidgetItem* nodesItem = createItem( parent, Bold ); - nodesItem->setText( 0, tr( "NB_NODES" ) ); + nodesItem->setText( 0, tr( "NB_NODES" )); int nbNodesLimit = SMESHGUI::resourceMgr()->integerValue( "SMESH", "info_groups_nodes_limit", 100000 ); - SMESH::SMESH_Mesh_var mesh = grp->GetMesh(); - bool meshLoaded = mesh->IsLoaded(); - bool toShowNodes = ( grp->IsNodeInfoAvailable() || nbNodesLimit <= 0 || grp->Size() <= nbNodesLimit ); + bool toShowNodes = groupSize >= 0 ? ( grp->IsNodeInfoAvailable() || nbNodesLimit <= 0 || groupSize <= nbNodesLimit ) : false; if ( toShowNodes && meshLoaded ) { // already calculated and up-to-date - nodesItem->setText( 1, QString::number( grp->GetNumberOfNodes() ) ); + nodesItem->setText( 1, QString::number( grp->GetNumberOfNodes() )); } else { QPushButton* btn = new QPushButton( tr( meshLoaded ? "COMPUTE" : "LOAD"), this ); setItemWidget( nodesItem, 1, btn ); GrpComputor* comp = new GrpComputor( grp, nodesItem, this ); - connect( btn, SIGNAL( clicked() ), comp, SLOT( compute() ) ); + connect( btn, SIGNAL( clicked() ), comp, SLOT( compute() )); myComputors.append( comp ); if ( !meshLoaded ) - connect( btn, SIGNAL( clicked() ), this, SLOT( changeLoadToCompute() ) ); + connect( btn, SIGNAL( clicked() ), this, SLOT( changeLoadToCompute() )); } } } @@ -2466,7 +2699,7 @@ void SMESHGUI_AddInfo::showGroups() for ( int i = 0; i < parent->childCount() && !itemGroups; i++ ) { if ( parent->child( i )->data( 0, Qt::UserRole ).toInt() == GROUPS_ID ) { itemGroups = parent->child( i ); - ExtraWidget* extra = dynamic_cast( itemWidget( itemGroups, 1 ) ); + ExtraWidget* extra = dynamic_cast( itemWidget( itemGroups, 1 )); if ( extra ) extra->updateControls( myGroups->length(), idx ); while ( itemGroups->childCount() ) delete itemGroups->child( 0 ); // clear child items @@ -2476,7 +2709,7 @@ void SMESHGUI_AddInfo::showGroups() QMap grpItems; for ( int i = idx*MAXITEMS ; i < qMin( (idx+1)*MAXITEMS, (int)myGroups->length() ); i++ ) { SMESH::SMESH_GroupBase_var grp = myGroups[i]; - if ( CORBA::is_nil( grp ) ) continue; + if ( CORBA::is_nil( grp )) continue; _PTR(SObject) grpSObj = SMESH::ObjectToSObject( grp ); if ( !grpSObj ) continue; @@ -2485,14 +2718,14 @@ void SMESHGUI_AddInfo::showGroups() if ( !itemGroups ) { // create top-level groups container item itemGroups = createItem( parent, Bold | All ); - itemGroups->setText( 0, tr( "GROUPS" ) ); + itemGroups->setText( 0, tr( "GROUPS" )); itemGroups->setData( 0, Qt::UserRole, GROUPS_ID ); // total number of groups > 10, show extra widgets for info browsing - if ( myGroups->length() > MAXITEMS ) { + if ((int) myGroups->length() > MAXITEMS ) { ExtraWidget* extra = new ExtraWidget( this, true ); - connect( extra->prev, SIGNAL( clicked() ), this, SLOT( showPreviousGroups() ) ); - connect( extra->next, SIGNAL( clicked() ), this, SLOT( showNextGroups() ) ); + connect( extra->prev, SIGNAL( clicked() ), this, SLOT( showPreviousGroups() )); + connect( extra->next, SIGNAL( clicked() ), this, SLOT( showNextGroups() )); setItemWidget( itemGroups, 1, extra ); extra->updateControls( myGroups->length(), idx ); } @@ -2500,7 +2733,7 @@ void SMESHGUI_AddInfo::showGroups() if ( grpItems.find( grpType ) == grpItems.end() ) { grpItems[ grpType ] = createItem( itemGroups, Bold | All ); - grpItems[ grpType ]->setText( 0, tr( QString( "GROUPS_%1" ).arg( grpType ).toLatin1().constData() ) ); + grpItems[ grpType ]->setText( 0, tr( QString( "GROUPS_%1" ).arg( grpType ).toLatin1().constData() )); itemGroups->insertChild( grpType-1, grpItems[ grpType ] ); } @@ -2524,7 +2757,7 @@ void SMESHGUI_AddInfo::showSubMeshes() for ( int i = 0; i < parent->childCount() && !itemSubMeshes; i++ ) { if ( parent->child( i )->data( 0, Qt::UserRole ).toInt() == SUBMESHES_ID ) { itemSubMeshes = parent->child( i ); - ExtraWidget* extra = dynamic_cast( itemWidget( itemSubMeshes, 1 ) ); + ExtraWidget* extra = dynamic_cast( itemWidget( itemSubMeshes, 1 )); if ( extra ) extra->updateControls( mySubMeshes->length(), idx ); while ( itemSubMeshes->childCount() ) delete itemSubMeshes->child( 0 ); // clear child items @@ -2534,26 +2767,26 @@ void SMESHGUI_AddInfo::showSubMeshes() QMap smItems; for ( int i = idx*MAXITEMS ; i < qMin( (idx+1)*MAXITEMS, (int)mySubMeshes->length() ); i++ ) { SMESH::SMESH_subMesh_var sm = mySubMeshes[i]; - if ( CORBA::is_nil( sm ) ) continue; + if ( CORBA::is_nil( sm )) continue; _PTR(SObject) smSObj = SMESH::ObjectToSObject( sm ); if ( !smSObj ) continue; GEOM::GEOM_Object_var gobj = sm->GetSubShape(); - if ( CORBA::is_nil(gobj ) ) continue; + if ( CORBA::is_nil(gobj )) continue; int smType = gobj->GetShapeType(); if ( smType == GEOM::COMPSOLID ) smType = GEOM::COMPOUND; if ( !itemSubMeshes ) { itemSubMeshes = createItem( parent, Bold | All ); - itemSubMeshes->setText( 0, tr( "SUBMESHES" ) ); + itemSubMeshes->setText( 0, tr( "SUBMESHES" )); itemSubMeshes->setData( 0, Qt::UserRole, SUBMESHES_ID ); // total number of sub-meshes > 10, show extra widgets for info browsing - if ( mySubMeshes->length() > MAXITEMS ) { + if ((int) mySubMeshes->length() > MAXITEMS ) { ExtraWidget* extra = new ExtraWidget( this, true ); - connect( extra->prev, SIGNAL( clicked() ), this, SLOT( showPreviousSubMeshes() ) ); - connect( extra->next, SIGNAL( clicked() ), this, SLOT( showNextSubMeshes() ) ); + connect( extra->prev, SIGNAL( clicked() ), this, SLOT( showPreviousSubMeshes() )); + connect( extra->next, SIGNAL( clicked() ), this, SLOT( showNextSubMeshes() )); setItemWidget( itemSubMeshes, 1, extra ); extra->updateControls( mySubMeshes->length(), idx ); } @@ -2561,7 +2794,7 @@ void SMESHGUI_AddInfo::showSubMeshes() if ( smItems.find( smType ) == smItems.end() ) { smItems[ smType ] = createItem( itemSubMeshes, Bold | All ); - smItems[ smType ]->setText( 0, tr( QString( "SUBMESHES_%1" ).arg( smType ).toLatin1().constData() ) ); + smItems[ smType ]->setText( 0, tr( QString( "SUBMESHES_%1" ).arg( smType ).toLatin1().constData() )); itemSubMeshes->insertChild( smType, smItems[ smType ] ); } @@ -2583,7 +2816,7 @@ void SMESHGUI_AddInfo::changeLoadToCompute() { if ( QTreeWidgetItem* item = myComputors[i]->getItem() ) { - if ( QPushButton* btn = qobject_cast( itemWidget ( item, 1 ) ) ) + if ( QPushButton* btn = qobject_cast( itemWidget ( item, 1 )) ) btn->setText( tr("COMPUTE") ); } } @@ -2626,7 +2859,7 @@ void SMESHGUI_AddInfo::saveInfo( QTextStream &out ) while ( *it ) { if ( !( ( *it )->text(0) ).isEmpty() ) { out << QString( SPACING_INFO * itemDepth( *it ), ' ' ) << ( *it )->text(0); - if ( ( *it )->text(0) == tr( "COLOR" ) ) { + if ( ( *it )->text(0) == tr( "COLOR" )) { out << ": " << ( ( ( *it )->background(1) ).color() ).name(); } else if ( !( ( *it )->text(1) ).isEmpty() ) out << ": " << ( *it )->text(1); @@ -2648,22 +2881,22 @@ void SMESHGUI_AddInfo::saveInfo( QTextStream &out ) \param page specifies the dialog page to be shown at the start-up */ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) -: QDialog( parent ), myActor( 0 ) + : QDialog( parent ), myActor( 0 ) { setModal( false ); setAttribute( Qt::WA_DeleteOnClose, true ); - setWindowTitle( tr( "MESH_INFO" ) ); + setWindowTitle( tr( "MESH_INFO" )); setSizeGripEnabled( true ); myTabWidget = new QTabWidget( this ); - // base info + // base info myBaseInfo = new SMESHGUI_MeshInfo( myTabWidget ); - myTabWidget->addTab( myBaseInfo, tr( "BASE_INFO" ) ); + myTabWidget->addTab( myBaseInfo, tr( "BASE_INFO" )); // elem info - + QWidget* w = new QWidget( myTabWidget ); myMode = new QButtonGroup( this ); @@ -2671,12 +2904,14 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) myMode->addButton( new QRadioButton( tr( "ELEM_MODE" ), w ), ElemMode ); myMode->button( NodeMode )->setChecked( true ); myID = new QLineEdit( w ); - myID->setValidator( new SMESHGUI_IdValidator( this ) ); + myID->setValidator( new SMESHGUI_IdValidator( this )); + myIDPreviewCheck = new QCheckBox( tr( "SHOW_IDS" ), w ); + myIDPreview = new SMESHGUI_IdPreview( SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() )); int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 1 ); - mode = qMin( 1, qMax( 0, mode ) ); - - if ( mode == 0 ) + mode = qMin( 1, qMax( 0, mode )); + + if ( mode == 0 ) myElemInfo = new SMESHGUI_SimpleElemInfo( w ); else myElemInfo = new SMESHGUI_TreeElemInfo( w ); @@ -2686,20 +2921,21 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) elemLayout->setSpacing( SPACING ); elemLayout->addWidget( myMode->button( NodeMode ), 0, 0 ); elemLayout->addWidget( myMode->button( ElemMode ), 0, 1 ); - elemLayout->addWidget( myID, 0, 2 ); - elemLayout->addWidget( myElemInfo, 1, 0, 1, 3 ); - - myTabWidget->addTab( w, tr( "ELEM_INFO" ) ); + elemLayout->addWidget( myID, 0, 2 ); + elemLayout->addWidget( myIDPreviewCheck, 1, 0, 1, 2 ); + elemLayout->addWidget( myElemInfo, 2, 0, 1, 3 ); + + myTabWidget->addTab( w, tr( "ELEM_INFO" )); // additional info myAddInfo = new SMESHGUI_AddInfo( myTabWidget ); - myTabWidget->addTab( myAddInfo, tr( "ADDITIONAL_INFO" ) ); + myTabWidget->addTab( myAddInfo, tr( "ADDITIONAL_INFO" )); // controls info myCtrlInfo = new SMESHGUI_CtrlInfo( myTabWidget ); - myTabWidget->addTab( myCtrlInfo, tr( "CTRL_INFO" ) ); + myTabWidget->addTab( myCtrlInfo, tr( "CTRL_INFO" )); // buttons @@ -2727,18 +2963,21 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) l->addWidget( myTabWidget ); l->addLayout( btnLayout ); - myTabWidget->setCurrentIndex( qMax( (int)BaseInfo, qMin( (int)ElemInfo, page ) ) ); + myTabWidget->setCurrentIndex( qMax( (int)BaseInfo, qMin( (int)ElemInfo, page ))); - connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() ) ); - connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ) ); - connect( myTabWidget, SIGNAL( currentChanged( int ) ), this, SLOT( updateSelection() ) ); - connect( myMode, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged() ) ); - connect( myID, SIGNAL( textChanged( QString ) ), this, SLOT( idChanged() ) ); - connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ) ); - connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) ); - connect( myElemInfo, SIGNAL( itemInfo( int ) ), this, SLOT( showItemInfo( int ) ) ); - connect( myElemInfo, SIGNAL( itemInfo( QString ) ), this, SLOT( showItemInfo( QString ) ) ); + connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() )); + connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() )); + connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() )); + connect( myTabWidget, SIGNAL( currentChanged( int )), this, SLOT( updateSelection() )); + connect( myMode, SIGNAL( buttonClicked( int )), this, SLOT( modeChanged() )); + connect( myID, SIGNAL( textChanged( QString )), this, SLOT( idChanged() )); + connect( myIDPreviewCheck, SIGNAL( toggled(bool) ), this, SLOT( idPreviewChange(bool) )); + connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() )); + connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() )); + connect( myElemInfo, SIGNAL( itemInfo( int )), this, SLOT( showItemInfo( int ))); + connect( myElemInfo, SIGNAL( itemInfo( QString )), this, SLOT( showItemInfo( QString ))); + + myIDPreviewCheck->setChecked( SMESHGUI::resourceMgr()->booleanValue( "SMESH", id_preview_resource, false )); updateSelection(); } @@ -2748,6 +2987,7 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page ) */ SMESHGUI_MeshInfoDlg::~SMESHGUI_MeshInfoDlg() { + delete myIDPreview; } /*! @@ -2756,33 +2996,40 @@ SMESHGUI_MeshInfoDlg::~SMESHGUI_MeshInfoDlg() */ void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO ) { + if ( !IO.IsNull() ) + myIO = IO; + SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface( IO ); - if ( !CORBA::is_nil( obj ) ) { - myBaseInfo->showInfo( obj ); - myAddInfo->showInfo( obj ); - myCtrlInfo->showInfo( obj ); + if ( !CORBA::is_nil( obj )) + { + myAddInfo->showInfo( obj ); // nb of nodes in a group can be computed by myAddInfo, + myBaseInfo->showInfo( obj ); // and it will be used by myBaseInfo (IPAL52871) + if ( myTabWidget->currentIndex() == CtrlInfo ) + myCtrlInfo->showInfo( obj ); - myActor = SMESH::FindActorByEntry( IO->getEntry() ); - SVTK_Selector* selector = SMESH::GetViewWindow()->GetSelector(); - QString ID; - int nb = 0; - if ( myActor && selector ) { - nb = myMode->checkedId() == NodeMode ? - SMESH::GetNameOfSelectedElements( selector, IO, ID ) : - SMESH::GetNameOfSelectedNodes( selector, IO, ID ); - } - myElemInfo->setSource( myActor ) ; - if ( nb > 0 ) { - myID->setText( ID.trimmed() ); - QSet ids; - QStringList idTxt = ID.split( " ", QString::SkipEmptyParts ); - foreach ( ID, idTxt ) - ids << ID.trimmed().toLong(); - myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode ); - } - else { - myID->clear(); - myElemInfo->clear(); + { + myActor = SMESH::FindActorByEntry( IO->getEntry() ); + SVTK_Selector* selector = SMESH::GetSelector(); + QString ID; + int nb = 0; + if ( myActor && selector ) { + nb = myMode->checkedId() == NodeMode ? + SMESH::GetNameOfSelectedElements( selector, IO, ID ) : + SMESH::GetNameOfSelectedNodes( selector, IO, ID ); + } + myElemInfo->setSource( myActor, obj ) ; + if ( nb > 0 ) { + myID->setText( ID.trimmed() ); + QSet ids; + QStringList idTxt = ID.split( " ", QString::SkipEmptyParts ); + foreach ( ID, idTxt ) + ids << ID.trimmed().toLong(); + myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode ); + } + else { + myID->clear(); + myElemInfo->clear(); + } } } } @@ -2798,6 +3045,7 @@ void SMESHGUI_MeshInfoDlg::reject() if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) aViewWindow->SetSelectionMode( ActorSelection ); QDialog::reject(); + myIDPreview->SetPointsLabeled(false); } /*! @@ -2831,7 +3079,9 @@ void SMESHGUI_MeshInfoDlg::updateSelection() disconnect( selMgr, 0, this, 0 ); selMgr->clearFilters(); - if ( myTabWidget->currentIndex() == BaseInfo || myTabWidget->currentIndex() == AddInfo || myTabWidget->currentIndex() == CtrlInfo ) { + if ( myTabWidget->currentIndex() == BaseInfo || + myTabWidget->currentIndex() == AddInfo || + myTabWidget->currentIndex() == CtrlInfo ) { SMESH::SetPointRepresentation( false ); if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) aViewWindow->SetSelectionMode( ActorSelection ); @@ -2853,7 +3103,7 @@ void SMESHGUI_MeshInfoDlg::updateSelection() SMESH_Actor* oldActor = myActor; myID->clear(); - connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) ); + connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() )); updateInfo(); if ( oldActor == myActor && myActor && !oldID.isEmpty() ) { @@ -2868,8 +3118,8 @@ void SMESHGUI_MeshInfoDlg::updateSelection() void SMESHGUI_MeshInfoDlg::help() { SMESH::ShowHelpFile( ( myTabWidget->currentIndex() == BaseInfo || myTabWidget->currentIndex() == AddInfo ) ? - "mesh_infos_page.html#advanced_mesh_infos_anchor" : - "mesh_infos_page.html#mesh_element_info_anchor" ); + "mesh_infos.html#advanced-mesh-infos-anchor" : + "mesh_infos.html#mesh-element-info-anchor" ); } /*! @@ -2886,11 +3136,9 @@ void SMESHGUI_MeshInfoDlg::updateInfo() Handle(SALOME_InteractiveObject) IO = selected.First(); showInfo( IO ); } -// else { -// myBaseInfo->clear(); -// myElemInfo->clear(); -// myAddInfo->clear(); -// } + else { + showInfo( myIO ); + } } /*! @@ -2910,7 +3158,7 @@ void SMESHGUI_MeshInfoDlg::activate() void SMESHGUI_MeshInfoDlg::deactivate() { myTabWidget->setEnabled( false ); - disconnect( SMESHGUI::selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) ); + disconnect( SMESHGUI::selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() )); } /*! @@ -2923,28 +3171,48 @@ void SMESHGUI_MeshInfoDlg::modeChanged() } /*! - \brief Caled when users prints mesh element ID in the corresponding field. + \brief Called when users prints mesh element ID in the corresponding field. */ void SMESHGUI_MeshInfoDlg::idChanged() { - SVTK_Selector* selector = SMESH::GetViewWindow()->GetSelector(); + myIDPreview->SetPointsLabeled( false ); + + SVTK_Selector* selector = SMESH::GetSelector(); if ( myActor && selector ) { Handle(SALOME_InteractiveObject) IO = myActor->getIO(); TColStd_MapOfInteger ID; - QSet ids; + QSet ids; + std::vector idVec; + std::list< gp_XYZ > aGrCentersXYZ; QStringList idTxt = myID->text().split( " ", QString::SkipEmptyParts ); foreach ( QString tid, idTxt ) { long id = tid.trimmed().toLong(); - const SMDS_MeshElement* e = myMode->checkedId() == ElemMode ? + const SMDS_MeshElement* e = myMode->checkedId() == ElemMode ? myActor->GetObject()->GetMesh()->FindElement( id ) : myActor->GetObject()->GetMesh()->FindNode( id ); if ( e ) { ID.Add( id ); ids << id; + if ( myMode->checkedId() == ElemMode ) + { + idVec.push_back( id ); + aGrCentersXYZ.push_back( myElemInfo->getGravityCenter( e )); + } } } selector->AddOrRemoveIndex( IO, ID, false ); if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) { + + if ( myMode->checkedId() == NodeMode ) + myIDPreview->SetPointsData( myActor->GetObject()->GetMesh(), ID ); + else + myIDPreview->SetElemsData( idVec, aGrCentersXYZ ); + + bool showIDs = ( !ID.IsEmpty() && + myIDPreviewCheck->isChecked() && + myTabWidget->currentIndex() == ElemInfo ); + myIDPreview->SetPointsLabeled( showIDs, myActor->GetVisibility() ); + aViewWindow->highlight( IO, true, true ); aViewWindow->Repaint(); } @@ -2952,11 +3220,22 @@ void SMESHGUI_MeshInfoDlg::idChanged() } } +/*! + * \brief Show IDs clicked + */ +void SMESHGUI_MeshInfoDlg::idPreviewChange( bool isOn ) +{ + myIDPreview->SetPointsLabeled( isOn && !myID->text().simplified().isEmpty() ); + SMESHGUI::resourceMgr()->setValue("SMESH", id_preview_resource, isOn ); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) + aViewWindow->Repaint(); +} + void SMESHGUI_MeshInfoDlg::showItemInfo( int id ) { - if ( id > 0 && myActor->GetObject()->GetMesh()->FindNode( id ) ) { + if ( id > 0 && myActor->GetObject()->GetMesh()->FindNode( id )) { myMode->button( NodeMode )->click(); - myID->setText( QString::number( id ) ); + myID->setText( QString::number( id )); } } @@ -2970,14 +3249,8 @@ void SMESHGUI_MeshInfoDlg::showItemInfo( const QString& theStr ) void SMESHGUI_MeshInfoDlg::dump() { - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return; - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if ( !appStudy ) return; - _PTR( Study ) aStudy = appStudy->studyDS(); - QStringList aFilters; - aFilters.append( tr( "TEXT_FILES" ) ); + aFilters.append( tr( "TEXT_FILES" )); bool anIsBase = true; bool anIsElem = true; @@ -2992,8 +3265,8 @@ void SMESHGUI_MeshInfoDlg::dump() } DumpFileDlg fd( this ); - fd.setWindowTitle( tr( "SAVE_INFO" ) ); - fd.setFilters( aFilters ); + fd.setWindowTitle( tr( "SAVE_INFO" )); + fd.setNameFilters( aFilters ); fd.myBaseChk->setChecked( anIsBase ); fd.myElemChk->setChecked( anIsElem ); fd.myAddChk ->setChecked( anIsAdd ); @@ -3013,7 +3286,7 @@ void SMESHGUI_MeshInfoDlg::dump() return; QFile aFile( aFileName ); - if ( !aFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) + if ( !aFile.open( QIODevice::WriteOnly | QIODevice::Text )) return; QTextStream out( &aFile ); @@ -3051,7 +3324,7 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ) myWidgets << aName; SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QIcon aComputeIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_COMPUTE" ) ) ); + QIcon aComputeIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_COMPUTE" )) ); SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager(); @@ -3062,6 +3335,11 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ) myWidgets << aNodesFree; myPredicates << aFilterMgr->CreateFreeNodes(); // + QLabel* aNodesNbConnLab = new QLabel( tr( "MAX_NODE_CONNECTIVITY" ), this ); + QLabel* aNodesNbConn = createField(); + myWidgets << aNodesNbConn; + myNodeConnFunctor = aFilterMgr->CreateNodeConnectivityNumber(); + // QLabel* aNodesDoubleLab = new QLabel( tr( "NUMBER_OF_THE_DOUBLE_NODES" ), this ); QLabel* aNodesDouble = createField(); myWidgets << aNodesDouble; @@ -3070,7 +3348,7 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ) myToleranceWidget = new SMESHGUI_SpinBox( this ); myToleranceWidget->RangeStepAndValidator(0.0000000001, 1000000.0, 0.0000001, "length_precision" ); myToleranceWidget->setAcceptNames( false ); - myToleranceWidget->SetValue( SMESHGUI::resourceMgr()->doubleValue( "SMESH", "equal_nodes_tolerance", 1e-7 ) ); + myToleranceWidget->SetValue( SMESHGUI::resourceMgr()->doubleValue( "SMESH", "equal_nodes_tolerance", 1e-7 )); // edges info QLabel* anEdgesLab = new QLabel( tr( "EDGES_INFO" ), this ); @@ -3111,47 +3389,52 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ) aFreeNodesBtn->setIcon(aComputeIcon); myButtons << aFreeNodesBtn; //0 + QToolButton* aNodesNbConnBtn = new QToolButton( this ); + aNodesNbConnBtn->setIcon(aComputeIcon); + myButtons << aNodesNbConnBtn; //1 + QToolButton* aDoubleNodesBtn = new QToolButton( this ); aDoubleNodesBtn->setIcon(aComputeIcon); - myButtons << aDoubleNodesBtn; //1 + myButtons << aDoubleNodesBtn; //2 QToolButton* aDoubleEdgesBtn = new QToolButton( this ); aDoubleEdgesBtn->setIcon(aComputeIcon); - myButtons << aDoubleEdgesBtn; //2 + myButtons << aDoubleEdgesBtn; //3 QToolButton* aDoubleFacesBtn = new QToolButton( this ); aDoubleFacesBtn->setIcon(aComputeIcon); - myButtons << aDoubleFacesBtn; //3 + myButtons << aDoubleFacesBtn; //4 QToolButton* aOverContFacesBtn = new QToolButton( this ); aOverContFacesBtn->setIcon(aComputeIcon); - myButtons << aOverContFacesBtn; //4 + myButtons << aOverContFacesBtn; //5 QToolButton* aComputeFaceBtn = new QToolButton( this ); aComputeFaceBtn->setIcon(aComputeIcon); - myButtons << aComputeFaceBtn; //5 + myButtons << aComputeFaceBtn; //6 QToolButton* aDoubleVolumesBtn = new QToolButton( this ); aDoubleVolumesBtn->setIcon(aComputeIcon); - myButtons << aDoubleVolumesBtn; //6 + myButtons << aDoubleVolumesBtn; //7 QToolButton* aOverContVolumesBtn = new QToolButton( this ); aOverContVolumesBtn->setIcon(aComputeIcon); - myButtons << aOverContVolumesBtn; //7 + myButtons << aOverContVolumesBtn; //8 QToolButton* aComputeVolumeBtn = new QToolButton( this ); aComputeVolumeBtn->setIcon(aComputeIcon); - myButtons << aComputeVolumeBtn; //8 - - connect( aComputeFaceBtn, SIGNAL( clicked() ), this, SLOT( computeAspectRatio() ) ); - connect( aComputeVolumeBtn, SIGNAL( clicked() ), this, SLOT( computeAspectRatio3D() ) ); - connect( aFreeNodesBtn, SIGNAL( clicked() ), this, SLOT( computeFreeNodesInfo() ) ); - connect( aDoubleNodesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleNodesInfo() ) ); - connect( aDoubleEdgesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleEdgesInfo() ) ); - connect( aDoubleFacesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleFacesInfo() ) ); - connect( aOverContFacesBtn, SIGNAL( clicked() ), this, SLOT( computeOverConstrainedFacesInfo() ) ); - connect( aDoubleVolumesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleVolumesInfo() ) ); - connect( aOverContVolumesBtn, SIGNAL( clicked() ), this, SLOT( computeOverConstrainedVolumesInfo() ) ); + myButtons << aComputeVolumeBtn; //9 + + connect( aComputeFaceBtn, SIGNAL( clicked() ), this, SLOT( computeAspectRatio() )); + connect( aComputeVolumeBtn, SIGNAL( clicked() ), this, SLOT( computeAspectRatio3D() )); + connect( aFreeNodesBtn, SIGNAL( clicked() ), this, SLOT( computeFreeNodesInfo() )); + connect( aNodesNbConnBtn, SIGNAL( clicked() ), this, SLOT( computeNodesNbConnInfo() )); + connect( aDoubleNodesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleNodesInfo() )); + connect( aDoubleEdgesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleEdgesInfo() )); + connect( aDoubleFacesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleFacesInfo() )); + connect( aOverContFacesBtn, SIGNAL( clicked() ), this, SLOT( computeOverConstrainedFacesInfo() )); + connect( aDoubleVolumesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleVolumesInfo() )); + connect( aOverContVolumesBtn,SIGNAL( clicked() ), this, SLOT( computeOverConstrainedVolumesInfo() )); connect( myToleranceWidget, SIGNAL(valueChanged(double)), this, SLOT( setTolerance( double ))); setFontAttributes( aNameLab ); @@ -3166,35 +3449,38 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ) myMainLayout->addWidget( aNodesFreeLab, 2, 0 ); //3 myMainLayout->addWidget( aNodesFree, 2, 1 ); //4 myMainLayout->addWidget( aFreeNodesBtn, 2, 2 ); //5 - myMainLayout->addWidget( aNodesDoubleLab, 3, 0 ); //6 - myMainLayout->addWidget( aNodesDouble, 3, 1 ); //7 - myMainLayout->addWidget( aDoubleNodesBtn, 3, 2 ); //8 - myMainLayout->addWidget( aToleranceLab, 4, 0 ); //9 - myMainLayout->addWidget( myToleranceWidget, 4, 1 ); //10 - myMainLayout->addWidget( anEdgesLab, 5, 0, 1, 3 ); //11 - myMainLayout->addWidget( anEdgesDoubleLab, 6, 0 ); //12 - myMainLayout->addWidget( anEdgesDouble, 6, 1 ); //13 - myMainLayout->addWidget( aDoubleEdgesBtn, 6, 2 ); //14 - myMainLayout->addWidget( aFacesLab, 7, 0, 1, 3 ); //15 - myMainLayout->addWidget( aFacesDoubleLab, 8, 0 ); //16 - myMainLayout->addWidget( aFacesDouble, 8, 1 ); //17 - myMainLayout->addWidget( aDoubleFacesBtn, 8, 2 ); //18 - myMainLayout->addWidget( aFacesOverLab, 9, 0 ); //19 - myMainLayout->addWidget( aFacesOver, 9, 1 ); //20 - myMainLayout->addWidget( aOverContFacesBtn, 9, 2 ); //21 - myMainLayout->addWidget( anAspectRatioLab, 10, 0 ); //22 - myMainLayout->addWidget( aComputeFaceBtn, 10, 2 ); //23 - myMainLayout->addWidget( myPlot, 11, 0, 1, 3 );//24 - myMainLayout->addWidget( aVolumesLab, 12, 0, 1, 3 );//25 - myMainLayout->addWidget( aVolumesDoubleLab, 13, 0 ); //26 - myMainLayout->addWidget( aVolumesDouble, 13, 1 ); //27 - myMainLayout->addWidget( aDoubleVolumesBtn, 13, 2 ); //28 - myMainLayout->addWidget( aVolumesOverLab, 14, 0 ); //28 - myMainLayout->addWidget( aVolumesOver, 14, 1 ); //30 - myMainLayout->addWidget( aOverContVolumesBtn,14, 2 ); //31 - myMainLayout->addWidget( anAspectRatio3DLab, 15, 0 ); //32 - myMainLayout->addWidget( aComputeVolumeBtn, 15, 2 ); //33 - myMainLayout->addWidget( myPlot3D, 16, 0, 1, 3 );//34 + myMainLayout->addWidget( aNodesNbConnLab, 3, 0 ); //6 + myMainLayout->addWidget( aNodesNbConn, 3, 1 ); //7 + myMainLayout->addWidget( aNodesNbConnBtn, 3, 2 ); //8 + myMainLayout->addWidget( aNodesDoubleLab, 4, 0 ); //9 + myMainLayout->addWidget( aNodesDouble, 4, 1 ); //10 + myMainLayout->addWidget( aDoubleNodesBtn, 4, 2 ); //11 + myMainLayout->addWidget( aToleranceLab, 5, 0 ); //12 + myMainLayout->addWidget( myToleranceWidget, 5, 1 ); //13 + myMainLayout->addWidget( anEdgesLab, 6, 0, 1, 3 ); //14 + myMainLayout->addWidget( anEdgesDoubleLab, 7, 0 ); //15 + myMainLayout->addWidget( anEdgesDouble, 7, 1 ); //16 + myMainLayout->addWidget( aDoubleEdgesBtn, 7, 2 ); //17 + myMainLayout->addWidget( aFacesLab, 8, 0, 1, 3 ); //18 + myMainLayout->addWidget( aFacesDoubleLab, 9, 0 ); //19 + myMainLayout->addWidget( aFacesDouble, 9, 1 ); //20 + myMainLayout->addWidget( aDoubleFacesBtn, 9, 2 ); //21 + myMainLayout->addWidget( aFacesOverLab, 10, 0 ); //22 + myMainLayout->addWidget( aFacesOver, 10, 1 ); //23 + myMainLayout->addWidget( aOverContFacesBtn, 10, 2 ); //24 + myMainLayout->addWidget( anAspectRatioLab, 11, 0 ); //25 + myMainLayout->addWidget( aComputeFaceBtn, 11, 2 ); //26 + myMainLayout->addWidget( myPlot, 12, 0, 1, 3 );//27 + myMainLayout->addWidget( aVolumesLab, 13, 0, 1, 3 );//28 + myMainLayout->addWidget( aVolumesDoubleLab, 14, 0 ); //29 + myMainLayout->addWidget( aVolumesDouble, 14, 1 ); //30 + myMainLayout->addWidget( aDoubleVolumesBtn, 14, 2 ); //31 + myMainLayout->addWidget( aVolumesOverLab, 15, 0 ); //32 + myMainLayout->addWidget( aVolumesOver, 15, 1 ); //33 + myMainLayout->addWidget( aOverContVolumesBtn,15, 2 ); //34 + myMainLayout->addWidget( anAspectRatio3DLab, 16, 0 ); //35 + myMainLayout->addWidget( aComputeVolumeBtn, 16, 2 ); //36 + myMainLayout->addWidget( myPlot3D, 17, 0, 1, 3 );//37 myMainLayout->setColumnStretch( 0, 0 ); myMainLayout->setColumnStretch( 1, 5 ); @@ -3236,7 +3522,7 @@ QLabel* SMESHGUI_CtrlInfo::createField() lab->setAlignment( Qt::AlignCenter ); lab->setAutoFillBackground( true ); QPalette pal = lab->palette(); - pal.setColor( QPalette::Window, QApplication::palette().color( QPalette::Active, QPalette::Base ) ); + pal.setColor( QPalette::Window, QApplication::palette().color( QPalette::Active, QPalette::Base )); lab->setPalette( pal ); lab->setMinimumWidth( 60 ); return lab; @@ -3290,23 +3576,26 @@ void SMESHGUI_CtrlInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) // nodes info const CORBA::Long nbNodes = nbElemsByType[ SMESH::NODE ]; - const CORBA::Long nbElems = ( nbElemsByType[ SMESH::EDGE ] + - nbElemsByType[ SMESH::FACE ] + - nbElemsByType[ SMESH::VOLUME ] ); - if ( nbNodes + nbElems > 0 ) { - if ( Max( (int)nbNodes, (int)nbElems ) <= ctrlLimit ) { + // const CORBA::Long nbElems = ( nbElemsByType[ SMESH::EDGE ] + + // nbElemsByType[ SMESH::FACE ] + + // nbElemsByType[ SMESH::VOLUME ] ); + if ( nbNodes > 0 ) { + if ( nbNodes <= ctrlLimit ) { // free nodes computeFreeNodesInfo(); + // node connectivity number + computeNodesNbConnInfo(); // double nodes computeDoubleNodesInfo(); } else { myButtons[0]->setEnabled( true ); myButtons[1]->setEnabled( true ); + myButtons[2]->setEnabled( true ); } } else { - for( int i=2; i<=10; i++) + for( int i=2; i<=13; i++) myMainLayout->itemAt(i)->widget()->setVisible( false ); } @@ -3316,10 +3605,10 @@ void SMESHGUI_CtrlInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) if( nbElemsByType[ SMESH::EDGE ] <= ctrlLimit ) computeDoubleEdgesInfo(); else - myButtons[2]->setEnabled( true ); + myButtons[3]->setEnabled( true ); } else { - for( int i=11; i<=14; i++) + for( int i=14; i<=17; i++) myMainLayout->itemAt(i)->widget()->setVisible( false ); } @@ -3334,14 +3623,19 @@ void SMESHGUI_CtrlInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) computeAspectRatio(); } else { - myButtons[3]->setEnabled( true ); myButtons[4]->setEnabled( true ); myButtons[5]->setEnabled( true ); + myButtons[6]->setEnabled( true ); } +#ifdef DISABLE_PLOT2DVIEWER + myMainLayout->setRowStretch(12,0); + for( int i=25; i<=27; i++) + myMainLayout->itemAt(i)->widget()->setVisible( false ); +#endif } else { - myMainLayout->setRowStretch(11,0); - for( int i=15; i<=24; i++) + myMainLayout->setRowStretch(12,0); + for( int i=18; i<=27; i++) myMainLayout->itemAt(i)->widget()->setVisible( false ); } @@ -3354,16 +3648,21 @@ void SMESHGUI_CtrlInfo::showInfo( SMESH::SMESH_IDSource_ptr obj ) computeOverConstrainedVolumesInfo(); // aspect Ratio 3D histogram computeAspectRatio3D(); - } - else { - myButtons[6]->setEnabled( true ); - myButtons[7]->setEnabled( true ); - myButtons[8]->setEnabled( true ); - } + } + else { + myButtons[7]->setEnabled( true ); + myButtons[8]->setEnabled( true ); + myButtons[9]->setEnabled( true ); + } +#ifdef DISABLE_PLOT2DVIEWER + myMainLayout->setRowStretch(17,0); + for( int i=35; i<=37; i++) + myMainLayout->itemAt(i)->widget()->setVisible( false ); +#endif } else { - myMainLayout->setRowStretch(16,0); - for( int i=25; i<=34; i++) + myMainLayout->setRowStretch(17,0); + for( int i=28; i<=37; i++) myMainLayout->itemAt(i)->widget()->setVisible( false ); } } @@ -3409,37 +3708,58 @@ void SMESHGUI_CtrlInfo::computeFreeNodesInfo() void SMESHGUI_CtrlInfo::computeDoubleNodesInfo() { - computeNb( SMESH::FT_EqualNodes, 1, 2 ); + computeNb( SMESH::FT_EqualNodes, 2, 3 ); } void SMESHGUI_CtrlInfo::computeDoubleEdgesInfo() { - computeNb( SMESH::FT_EqualEdges, 2, 3 ); + computeNb( SMESH::FT_EqualEdges, 3, 4 ); } void SMESHGUI_CtrlInfo::computeDoubleFacesInfo() { - computeNb( SMESH::FT_EqualFaces, 3, 4 ); + computeNb( SMESH::FT_EqualFaces, 4, 5 ); } void SMESHGUI_CtrlInfo::computeOverConstrainedFacesInfo() { - computeNb( SMESH::FT_OverConstrainedFace, 4, 5 ); + computeNb( SMESH::FT_OverConstrainedFace, 5, 6 ); } void SMESHGUI_CtrlInfo::computeDoubleVolumesInfo() { - computeNb( SMESH::FT_EqualVolumes, 6, 6 ); + computeNb( SMESH::FT_EqualVolumes, 7, 7 ); } void SMESHGUI_CtrlInfo::computeOverConstrainedVolumesInfo() { - computeNb( SMESH::FT_OverConstrainedVolume, 7, 7 ); + computeNb( SMESH::FT_OverConstrainedVolume, 8, 8 ); +} + +void SMESHGUI_CtrlInfo::computeNodesNbConnInfo() +{ + myButtons[ 1 ]->setEnabled( false ); + myWidgets[ 2 ]->setText( "" ); + SMESH::SMESH_Mesh_var mesh = myObject->GetMesh(); + if ( mesh->_is_nil() ) return; + if ( !mesh->IsLoaded() ) + { + mesh->Load(); + this->showInfo( myObject ); // try to show all values + if ( !myWidgets[ 2 ]->text().isEmpty() ) + return; // already computed + } + myNodeConnFunctor->SetMesh( mesh ); + SMESH::Histogram_var histogram = + myNodeConnFunctor->GetLocalHistogram( 1, /*isLogarithmic=*/false, myObject ); + + myWidgets[ 2 ]->setText( QString::number( histogram[0].max )); } void SMESHGUI_CtrlInfo::computeAspectRatio() { - myButtons[5]->setEnabled( false ); +#ifndef DISABLE_PLOT2DVIEWER + myButtons[6]->setEnabled( false ); if ( myObject->_is_nil() ) return; @@ -3452,11 +3772,13 @@ void SMESHGUI_CtrlInfo::computeAspectRatio() myPlot->replot(); } delete aHistogram; +#endif } void SMESHGUI_CtrlInfo::computeAspectRatio3D() { - myButtons[8]->setEnabled( false ); +#ifndef DISABLE_PLOT2DVIEWER + myButtons[9]->setEnabled( false ); if ( myObject->_is_nil() ) return; @@ -3469,6 +3791,7 @@ void SMESHGUI_CtrlInfo::computeAspectRatio3D() myPlot3D->replot(); } delete aHistogram; +#endif } /*! @@ -3476,9 +3799,9 @@ void SMESHGUI_CtrlInfo::computeAspectRatio3D() */ void SMESHGUI_CtrlInfo::clearInternal() { - for( int i=0; i<=34; i++) + for( int i=0; i<=35; i++) myMainLayout->itemAt(i)->widget()->setVisible( true ); - for( int i=0; i<=8; i++) + for( int i=0; i<=9; i++) myButtons[i]->setEnabled( false ); myPlot->detachItems(); myPlot3D->detachItems(); @@ -3498,6 +3821,7 @@ void SMESHGUI_CtrlInfo::setTolerance( double theTolerance ) myWidgets[2]->setText(""); } +#ifndef DISABLE_PLOT2DVIEWER Plot2d_Histogram* SMESHGUI_CtrlInfo::getHistogram( SMESH::NumericalFunctor_ptr aNumFun ) { SMESH::SMESH_Mesh_var mesh = myObject->GetMesh(); @@ -3507,7 +3831,7 @@ Plot2d_Histogram* SMESHGUI_CtrlInfo::getHistogram( SMESH::NumericalFunctor_ptr a aNumFun->SetMesh( mesh ); CORBA::Long cprecision = 6; - if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false ) ) + if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false )) cprecision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "controls_precision", -1 ); aNumFun->SetPrecision( cprecision ); @@ -3517,7 +3841,7 @@ Plot2d_Histogram* SMESHGUI_CtrlInfo::getHistogram( SMESH::NumericalFunctor_ptr a /*isLogarithmic=*/false, myObject ); Plot2d_Histogram* aHistogram = new Plot2d_Histogram(); - aHistogram->setColor( palette().color( QPalette::Highlight ) ); + aHistogram->setColor( palette().color( QPalette::Highlight )); if ( &histogramVar.in() ) { for ( size_t i = 0, nb = histogramVar->length(); i < nb; i++ ) @@ -3527,6 +3851,7 @@ Plot2d_Histogram* SMESHGUI_CtrlInfo::getHistogram( SMESH::NumericalFunctor_ptr a } return aHistogram; } +#endif void SMESHGUI_CtrlInfo::saveInfo( QTextStream &out ) { out << QString( 20, '-' ) << "\n"; @@ -3554,13 +3879,12 @@ void SMESHGUI_CtrlInfo::saveInfo( QTextStream &out ) { /*! \brief Constructor \param parent parent widget - \param page specifies the dialog page to be shown at the start-up */ SMESHGUI_CtrlInfoDlg::SMESHGUI_CtrlInfoDlg( QWidget* parent ) -: QDialog( parent ) + : QDialog( parent ) { setAttribute( Qt::WA_DeleteOnClose, true ); - setWindowTitle( tr( "CTRL_INFO" ) ); + setWindowTitle( tr( "CTRL_INFO" )); setMinimumSize( 400, 600 ); myCtrlInfo = new SMESHGUI_CtrlInfo( this ); @@ -3590,11 +3914,11 @@ SMESHGUI_CtrlInfoDlg::SMESHGUI_CtrlInfoDlg( QWidget* parent ) l->addWidget( myCtrlInfo ); l->addLayout( btnLayout ); - connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); - connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() ) ); - connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ) ); - connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ) ); - connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) ); + connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() )); + connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() )); + connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() )); + connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() )); + connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() )); updateSelection(); } @@ -3612,7 +3936,7 @@ SMESHGUI_CtrlInfoDlg::~SMESHGUI_CtrlInfoDlg() */ void SMESHGUI_CtrlInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO ) { - if ( SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface( IO ) ) + if ( SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface( IO )) myCtrlInfo->showInfo( obj ); } @@ -3633,7 +3957,7 @@ void SMESHGUI_CtrlInfoDlg::updateSelection() LightApp_SelectionMgr* selMgr = SMESHGUI::selectionMgr(); disconnect( selMgr, 0, this, 0 ); SMESH::SetPointRepresentation( false ); - connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) ); + connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() )); updateInfo(); } @@ -3668,7 +3992,7 @@ void SMESHGUI_CtrlInfoDlg::activate() */ void SMESHGUI_CtrlInfoDlg::deactivate() { - disconnect( SMESHGUI::selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) ); + disconnect( SMESHGUI::selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() )); } /*! @@ -3676,18 +4000,12 @@ void SMESHGUI_CtrlInfoDlg::deactivate() */ void SMESHGUI_CtrlInfoDlg::dump() { - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return; - SalomeApp_Study* appStudy = dynamic_cast( app->activeStudy() ); - if ( !appStudy ) return; - _PTR( Study ) aStudy = appStudy->studyDS(); - QStringList aFilters; - aFilters.append( tr( "TEXT_FILES" ) ); + aFilters.append( tr( "TEXT_FILES" )); DumpFileDlg fd( this ); - fd.setWindowTitle( tr( "SAVE_INFO" ) ); - fd.setFilters( aFilters ); + fd.setWindowTitle( tr( "SAVE_INFO" )); + fd.setNameFilters( aFilters ); fd.myBaseChk->hide(); fd.myElemChk->hide(); fd.myAddChk ->hide(); @@ -3701,7 +4019,7 @@ void SMESHGUI_CtrlInfoDlg::dump() return; QFile aFile( aFileName ); - if ( !aFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) + if ( !aFile.open( QIODevice::WriteOnly | QIODevice::Text )) return; QTextStream out( &aFile ); @@ -3715,5 +4033,5 @@ void SMESHGUI_CtrlInfoDlg::dump() */ void SMESHGUI_CtrlInfoDlg::help() { - SMESH::ShowHelpFile("mesh_infos_page.html#mesh_quality_info_anchor"); + SMESH::ShowHelpFile("mesh_infos.html#mesh_quality_info_anchor"); }