-// Copyright (C) 2007-2015 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
// 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;
QWidget* aNodesLine = createLine();
QLabel* aNodesLab = new QLabel( tr( "NODES_LAB" ), this );
QLabel* aNodes = createField();
+ aNodes->setObjectName("nbNodes");
myWidgets[ index++ ] << aNodesLine;
myWidgets[ index++ ] << aNodesLab << aNodes;
// ... 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;
QWidget* a0DLine = createLine();
QLabel* a0DLab = new QLabel( tr( "0D_LAB" ), this );
QLabel* a0DTotal = createField();
+ a0DTotal->setObjectName("nb0D");
+
myWidgets[ index++ ] << a0DLine;
myWidgets[ index++ ] << a0DLab << a0DTotal;
QWidget* aBallLine = createLine();
QLabel* aBallLab = new QLabel( tr( "BALL_LAB" ), this );
QLabel* aBallTotal = createField();
+ aBallTotal->setObjectName("nbBall");
myWidgets[ index++ ] << aBallLine;
myWidgets[ index++ ] << aBallLab << aBallTotal;
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;
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* 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;
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 );
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];
long nb2DTotal = nb2DLinear + nb2DQuadratic + nb2DBiQuadratic;
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] ) );
+ 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];
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", "?" );
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 ) );
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( "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";
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( dynamic_cast<const SMDS_MeshFace*>( 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.
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" );
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;
QString aName = aGrp->GetName();
// Gravity center
XYZ gc = gravityCenter( e );
myInfo->append( QString( "<b>%1:</b> (%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( "<b>%1:</b> (%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::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;
QString aName = aGrp->GetName();
myInfo->setColumnCount( 2 );
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 );
+#else
+ myInfo->header()->setSectionResizeMode( 0, QHeaderView::ResizeToContents );
+#endif
myInfo->setItemDelegate( new ItemDelegate( myInfo ) );
QVBoxLayout* l = new QVBoxLayout( frame() );
l->setMargin( 0 );
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" );
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;
QString aName = aGrp->GetName();
QTreeWidgetItem* zItem = createItem( gcItem );
zItem->setText( 0, "Z" );
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 ) ) {
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;
QString aName = aGrp->GetName();
/*!
\brief Contructor
*/
-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 );
}
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 ));
}
}
{
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();
}
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() ) );
+ 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* nodesItem = createItem( parent, Bold );
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() ) );
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() ) );
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() ) );
*/
void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO )
{
+ if ( !IO.IsNull() )
+ myIO = IO;
+
SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( 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<long> 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 ) ;
+ if ( nb > 0 ) {
+ myID->setText( ID.trimmed() );
+ QSet<long> 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();
+ }
}
}
}
Handle(SALOME_InteractiveObject) IO = selected.First();
showInfo( IO );
}
-// else {
-// myBaseInfo->clear();
-// myElemInfo->clear();
-// myAddInfo->clear();
-// }
+ else {
+ showInfo( myIO );
+ }
}
/*!
*/
void SMESHGUI_MeshInfoDlg::idChanged()
{
- SVTK_Selector* selector = SMESH::GetViewWindow()->GetSelector();
+ SVTK_Selector* selector = SMESH::GetSelector();
if ( myActor && selector ) {
Handle(SALOME_InteractiveObject) IO = myActor->getIO();
TColStd_MapOfInteger ID;
DumpFileDlg fd( this );
fd.setWindowTitle( tr( "SAVE_INFO" ) );
- fd.setFilters( aFilters );
+ fd.setNameFilters( aFilters );
fd.myBaseChk->setChecked( anIsBase );
fd.myElemChk->setChecked( anIsElem );
fd.myAddChk ->setChecked( anIsAdd );
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;
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
+ 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( aDoubleNodesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleNodesInfo() ) );
- connect( aDoubleEdgesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleEdgesInfo() ) );
- connect( aDoubleFacesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleFacesInfo() ) );
+ 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( aOverContVolumesBtn,SIGNAL( clicked() ), this, SLOT( computeOverConstrainedVolumesInfo() ) );
connect( myToleranceWidget, SIGNAL(valueChanged(double)), this, SLOT( setTolerance( double )));
setFontAttributes( aNameLab );
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 );
if ( Max( (int)nbNodes, (int)nbElems ) <= ctrlLimit ) {
// free nodes
computeFreeNodesInfo();
+ computeNodesNbConnInfo();
// double nodes
if ( Max( (int)mesh->NbNodes(), (int)mesh->NbElements() ) <= ctrlLimit )
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<=11; i++)
myMainLayout->itemAt(i)->widget()->setVisible( false );
}
if( nbElemsByType[ SMESH::EDGE ] <= ctrlLimit )
computeDoubleEdgesInfo();
else
- myButtons[2]->setEnabled( true );
+ myButtons[3]->setEnabled( true );
}
else {
for( int i=11; i<=14; i++)
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 );
}
computeAspectRatio3D();
}
else {
- myButtons[6]->setEnabled( true );
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 );
}
}
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;
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;
myPlot3D->replot();
}
delete aHistogram;
+#endif
}
/*!
*/
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();
myWidgets[2]->setText("");
}
+#ifndef DISABLE_PLOT2DVIEWER
Plot2d_Histogram* SMESHGUI_CtrlInfo::getHistogram( SMESH::NumericalFunctor_ptr aNumFun )
{
SMESH::SMESH_Mesh_var mesh = myObject->GetMesh();
}
return aHistogram;
}
+#endif
void SMESHGUI_CtrlInfo::saveInfo( QTextStream &out ) {
out << QString( 20, '-' ) << "\n";
/*!
\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 )
DumpFileDlg fd( this );
fd.setWindowTitle( tr( "SAVE_INFO" ) );
- fd.setFilters( aFilters );
+ fd.setNameFilters( aFilters );
fd.myBaseChk->hide();
fd.myElemChk->hide();
fd.myAddChk ->hide();