Version: 6.3.1
Data Structures | Public Member Functions | Protected Types | Protected Member Functions | Private Member Functions | Private Attributes

SMESHGUI_TreeElemInfo Class Reference

Represents mesh element information in the tree-like form. More...

#include <SMESHGUI_MeshInfo.h>

Inheritance diagram for SMESHGUI_TreeElemInfo:
Inheritance graph
[legend]

Data Structures

class  ItemDelegate
 Item delegate for tree mesh info widget. More...

Public Member Functions

 SMESHGUI_TreeElemInfo (QWidget *=0)
 Constructor.
void setSource (SMESH_Actor *)
 Set mesh data source (actor)
void showInfo (long, bool)
 Show mesh element information.
void showInfo (QSet< long >, bool)
 Show mesh element information.
void clear ()
 Clear mesh element information widget.

Protected Types

typedef QMap< int, QList< int > > Connectivity

Protected Member Functions

void information (const QList< long > &)
 Show mesh element information.
void clearInternal ()
 Internal clean-up (reset widget)
QWidgetframe () const
 Get central area widget.
SMESH_Actoractor () const
 Get actor.
bool isElements () const
 Get current info mode.
Connectivity nodeConnectivity (const SMDS_MeshNode *)
 Get node connectivity.
QString formatConnectivity (Connectivity, int)
 Format connectivity data to string representation.
XYZ gravityCenter (const SMDS_MeshElement *)
 Calculate gravity center of the mesh element.

Private Member Functions

QTreeWidgetItem * createItem (QTreeWidgetItem *=0, int=100)
 Create new tree item.

Private Attributes

QTreeWidget * myInfo

Detailed Description

Represents mesh element information in the tree-like form.

Definition at line 184 of file SMESHGUI_MeshInfo.h.


Member Typedef Documentation

typedef QMap< int, QList<int> > SMESHGUI_ElemInfo.Connectivity [protected, inherited]

Definition at line 141 of file SMESHGUI_MeshInfo.h.


Constructor & Destructor Documentation

SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo ( QWidget parent = 0)

Constructor.

Parameters:
parentparent widget

Definition at line 914 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.frame(), and myInfo.

: SMESHGUI_ElemInfo( parent )
{
  myInfo = new QTreeWidget( frame() );
  myInfo->setColumnCount( 2 );
  myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" ) );
  myInfo->header()->setStretchLastSection( true );
  myInfo->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
  myInfo->setItemDelegate( new ItemDelegate( myInfo ) );
  QVBoxLayout* l = new QVBoxLayout( frame() );
  l->setMargin( 0 );
  l->addWidget( myInfo );
}

Member Function Documentation

SMESH_Actor * SMESHGUI_ElemInfo::actor ( ) const [protected, inherited]

Get actor.

Returns:
actor being used

Definition at line 568 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.myActor.

Referenced by information(), SMESHGUI_SimpleElemInfo.information(), and SMESHGUI_ElemInfo.setSource().

{
  return myActor;
}
void SMESHGUI_ElemInfo::clear ( ) [inherited]
void SMESHGUI_TreeElemInfo::clearInternal ( ) [protected, virtual]

Internal clean-up (reset widget)

Reimplemented from SMESHGUI_ElemInfo.

Definition at line 1147 of file SMESHGUI_MeshInfo.cxx.

References myInfo.

Referenced by information().

{
  myInfo->clear();
  myInfo->repaint();
}
QTreeWidgetItem * SMESHGUI_TreeElemInfo::createItem ( QTreeWidgetItem *  parent = 0,
int  column = 100 
) [private]

Create new tree item.

Parameters:
parntparent tree widget item
columnitem column to be set bold, if it is -1, bold font will be set for all columns
Returns:
new tree widget item

Definition at line 1159 of file SMESHGUI_MeshInfo.cxx.

References myInfo.

Referenced by information().

{
  QTreeWidgetItem* item;
  if ( parent )
    item = new QTreeWidgetItem( parent );
  else
    item = new QTreeWidgetItem( myInfo );

  item->setFlags( item->flags() | Qt::ItemIsEditable );

  QFont f = item->font( 0 );
  f.setBold( true );
  if ( column >= 0 && column < myInfo->columnCount() ) {
    item->setFont( column, f );
  }
  else if ( column == -1 ) {
    for ( int i = 0; i < myInfo->columnCount(); i++ )
      item->setFont( i, f );
  }
  return item;
}
QString SMESHGUI_ElemInfo::formatConnectivity ( Connectivity  connectivity,
int  type 
) [protected, inherited]

Format connectivity data to string representation.

Parameters:
connectivityconnetivity map
typeelement type
Returns:
string representation of the connectivity

Definition at line 622 of file SMESHGUI_MeshInfo.cxx.

Referenced by information(), and SMESHGUI_SimpleElemInfo.information().

{
  QStringList str;
  if ( connectivity.contains( type ) ) {
    QList<int> elements = connectivity[ type ];
    qSort( elements );
    foreach( int id, elements )
      str << QString::number( id );
  }
  return str.join( " " );
}
QWidget * SMESHGUI_ElemInfo::frame ( ) const [protected, inherited]

Get central area widget.

Returns:
central widget

Definition at line 559 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.myFrame.

Referenced by SMESHGUI_SimpleElemInfo.SMESHGUI_SimpleElemInfo(), and SMESHGUI_TreeElemInfo().

{
  return myFrame;
}
SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter ( const SMDS_MeshElement element) [protected, inherited]

Calculate gravity center of the mesh element.

Parameters:
elementmesh element

Definition at line 638 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.XYZ.add(), SMESHGUI_ElemInfo.XYZ.divide(), SMDS_MeshElement.NbNodes(), ex29_refine.node(), SMDS_MeshElement.nodesIterator(), SMDS_MeshNode.X(), SMESH_AdvancedEditor.xyz, SMDS_MeshNode.Y(), and SMDS_MeshNode.Z().

Referenced by information(), and SMESHGUI_SimpleElemInfo.information().

{
  XYZ xyz;
  if ( element ) {
    SMDS_ElemIteratorPtr nodeIt = element->nodesIterator();
    while ( nodeIt->more() ) {
      const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
      xyz.add( node->X(), node->Y(), node->Z() );
    }
    xyz.divide( element->NbNodes() );
  }
  return xyz;
}
void SMESHGUI_TreeElemInfo::information ( const QList< long > &  ids) [protected, virtual]

Show mesh element information.

Parameters:
idsmesh nodes / elements identifiers

Implements SMESHGUI_ElemInfo.

Definition at line 932 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.actor(), clearInternal(), createItem(), SMESHGUI_ElemInfo.formatConnectivity(), SMDS_MeshElement.GetEntityType(), SMDS_MeshElement.GetID(), SMESH_Actor.GetObject(), SMDS_MeshElement.GetType(), SMESHGUI_ElemInfo.gravityCenter(), SMESHGUI_ElemInfo.isElements(), SMDS_MeshElement.IsQuadratic(), SMDS_MeshElement.NbNodes(), ex29_refine.node(), SMESHGUI_ElemInfo.nodeConnectivity(), SMDS_MeshElement.nodesIterator(), SMESHGUI.resourceMgr(), SMDSAbs_0DElement, SMDSAbs_Edge, SMDSAbs_Face, SMDSAbs_Volume, SMDSEntity_0D, SMDSEntity_Hexa, SMDSEntity_Last, SMDSEntity_Penta, SMDSEntity_Polygon, SMDSEntity_Polyhedra, SMDSEntity_Pyramid, SMDSEntity_Quad_Hexa, SMDSEntity_Quad_Penta, SMDSEntity_Quad_Polygon, SMDSEntity_Quad_Polyhedra, SMDSEntity_Quad_Pyramid, SMDSEntity_Quad_Quadrangle, SMDSEntity_Quad_Tetra, SMDSEntity_Quad_Triangle, SMDSEntity_Quadrangle, SMDSEntity_Tetra, SMDSEntity_Triangle, SMESHGUI_ElemInfo.XYZ.x(), SMDS_MeshNode.X(), SMESHGUI_ElemInfo.XYZ.y(), SMDS_MeshNode.Y(), SMESHGUI_ElemInfo.XYZ.z(), and SMDS_MeshNode.Z().

{
  clearInternal();

  if ( actor() ) {
    int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
    foreach ( long id, ids ) {
      if ( !isElements() ) {
        //
        // show node info
        //
        const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindNode( id );
        if ( !e ) return;
        const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( e );
      
        // node ID
        QTreeWidgetItem* nodeItem = createItem( 0, -1 );
        nodeItem->setText( 0, tr( "NODE" ) );
        nodeItem->setText( 1, QString( "#%1" ).arg( id ) );
        nodeItem->setExpanded( true );
        // coordinates
        QTreeWidgetItem* coordItem = createItem( nodeItem, 0 );
        coordItem->setText( 0, tr( "COORDINATES" ) );
        coordItem->setExpanded( true );
        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 ) ) );
        // connectivity
        QTreeWidgetItem* conItem = createItem( nodeItem, 0 );
        conItem->setText( 0, tr( "CONNECTIVITY" ) );
        conItem->setExpanded( true );
        Connectivity connectivity = nodeConnectivity( node );
        if ( !connectivity.isEmpty() ) {
          QString con = formatConnectivity( connectivity, SMDSAbs_0DElement );
          if ( !con.isEmpty() ) {
            QTreeWidgetItem* i = createItem( conItem );
            i->setText( 0, tr( "0D_ELEMENTS" ) );
            i->setText( 1, con );
          }
          con = formatConnectivity( connectivity, SMDSAbs_Edge );
          if ( !con.isEmpty() ) {
            QTreeWidgetItem* i = createItem( conItem );
            i->setText( 0, tr( "EDGES" ) );
            i->setText( 1, con );
          }
          con = formatConnectivity( connectivity, SMDSAbs_Face );
          if ( !con.isEmpty() ) {
            QTreeWidgetItem* i = createItem( conItem );
            i->setText( 0, tr( "FACES" ) );
            i->setText( 1, con );
          }
          con = formatConnectivity( connectivity, SMDSAbs_Volume );
          if ( !con.isEmpty() ) {
            QTreeWidgetItem* i = createItem( conItem );
            i->setText( 0, tr( "VOLUMES" ) );
            i->setText( 1, con );
          }
        }
        else {
          conItem->setText( 1, tr( "FREE_NODE" ) );
        }
      }
      else {
        //
        // show element info
        // 
        const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindElement( id );
        if ( !e ) return;
        
        // element ID && type
        QString stype;
        switch( e->GetType() ) {
        case SMDSAbs_0DElement:
          stype = tr( "0D ELEMENT" ); break;
        case SMDSAbs_Edge:
          stype = tr( "EDGE" ); break;
        case SMDSAbs_Face:
          stype = tr( "FACE" ); break;
        case SMDSAbs_Volume:
          stype = tr( "VOLUME" ); break;
        default: 
          break;
        }
        if ( stype.isEmpty() ) return;
        QTreeWidgetItem* elemItem = createItem( 0, -1 );
        elemItem->setText( 0, stype );
        elemItem->setText( 1, QString( "#%1" ).arg( id ) );
        elemItem->setExpanded( true );
        // geometry type
        QString gtype;
        switch( e->GetEntityType() ) {
        case SMDSEntity_Triangle:
        case SMDSEntity_Quad_Triangle:
          gtype = tr( "TRIANGLE" ); break;
        case SMDSEntity_Quadrangle:
        case SMDSEntity_Quad_Quadrangle:
          gtype = tr( "QUADRANGLE" ); break;
        case SMDSEntity_Polygon:
        case SMDSEntity_Quad_Polygon:
          gtype = tr( "POLYGON" ); break;
        case SMDSEntity_Tetra:
        case SMDSEntity_Quad_Tetra:
          gtype = tr( "TETRAHEDRON" ); break;
        case SMDSEntity_Pyramid:
        case SMDSEntity_Quad_Pyramid:
          gtype = tr( "PYRAMID" ); break;
        case SMDSEntity_Hexa:
        case SMDSEntity_Quad_Hexa:
          gtype = tr( "HEXAHEDRON" ); break;
        case SMDSEntity_Penta:
        case SMDSEntity_Quad_Penta:
          gtype = tr( "PRISM" ); break;
        case SMDSEntity_Polyhedra:
        case SMDSEntity_Quad_Polyhedra:
          gtype = tr( "POLYHEDRON" ); break;
        default: 
          break;
        }
        if ( !gtype.isEmpty() ) {
          QTreeWidgetItem* typeItem = createItem( elemItem, 0 );
          typeItem->setText( 0, tr( "TYPE" ) );
          typeItem->setText( 1, gtype );
        }
        // quadratic flag and gravity center (any element except 0D)
        if ( e->GetEntityType() > SMDSEntity_0D && e->GetEntityType() < SMDSEntity_Last ) {
          // quadratic flag
          QTreeWidgetItem* quadItem = createItem( elemItem, 0 );
          quadItem->setText( 0, tr( "QUADRATIC" ) );
          quadItem->setText( 1, e->IsQuadratic() ? tr( "YES" ) : tr( "NO" ) );
          // gravity center
          XYZ gc = gravityCenter( e );
          QTreeWidgetItem* gcItem = createItem( elemItem, 0 );
          gcItem->setText( 0, tr( "GRAVITY_CENTER" ) );
          gcItem->setExpanded( true );
          QTreeWidgetItem* xItem = createItem( gcItem );
          xItem->setText( 0, "X" );
          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 ) ) );
          QTreeWidgetItem* zItem = createItem( gcItem );
          zItem->setText( 0, "Z" );
          zItem->setText( 1, QString::number( gc.z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
        }
        // connectivity
        QTreeWidgetItem* conItem = createItem( elemItem, 0 );
        conItem->setText( 0, tr( "CONNECTIVITY" ) );
        conItem->setExpanded( true );
        SMDS_ElemIteratorPtr nodeIt = e->nodesIterator();
        for ( int idx = 1; nodeIt->more(); idx++ ) {
          const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
          // node number and ID
          QTreeWidgetItem* nodeItem = createItem( conItem, 0 );
          nodeItem->setText( 0, QString( "%1 %2/%3" ).arg( tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ) );
          nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() ) );
          //nodeItem->setExpanded( true );
          // node coordinates
          QTreeWidgetItem* coordItem = createItem( nodeItem );
          coordItem->setText( 0, tr( "COORDINATES" ) );
          coordItem->setExpanded( true );
          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, tr( "CONNECTIVITY" ) );
          nconItem->setExpanded( true );
          Connectivity connectivity = nodeConnectivity( node );
          if ( !connectivity.isEmpty() ) {
            QString con = formatConnectivity( connectivity, SMDSAbs_0DElement );
            if ( !con.isEmpty() ) {
              QTreeWidgetItem* i = createItem( nconItem );
              i->setText( 0, tr( "0D_ELEMENTS" ) );
              i->setText( 1, con );
            }
            con = formatConnectivity( connectivity, SMDSAbs_Edge );
            if ( !con.isEmpty() ) {
              QTreeWidgetItem* i = createItem( nconItem );
              i->setText( 0, tr( "EDGES" ) );
              i->setText( 1, con );
            }
            con = formatConnectivity( connectivity, SMDSAbs_Face );
            if ( !con.isEmpty() ) {
              QTreeWidgetItem* i = createItem( nconItem );
              i->setText( 0, tr( "FACES" ) );
              i->setText( 1, con );
            }
            con = formatConnectivity( connectivity, SMDSAbs_Volume );
            if ( !con.isEmpty() ) {
              QTreeWidgetItem* i = createItem( nconItem );
              i->setText( 0, tr( "VOLUMES" ) );
              i->setText( 1, con );
            }
          }
        }
      }
    }
  }
}
bool SMESHGUI_ElemInfo::isElements ( ) const [protected, inherited]

Get current info mode.

Returns:
true if mesh element information is shown or false if node information is shown

Definition at line 577 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.myIsElement.

Referenced by information(), and SMESHGUI_SimpleElemInfo.information().

{
  return myIsElement;
}
SMESHGUI_ElemInfo::Connectivity SMESHGUI_ElemInfo::nodeConnectivity ( const SMDS_MeshNode node) [protected, inherited]

Get node connectivity.

Parameters:
nodemesh node
Returns:
node connectivity map

Definition at line 603 of file SMESHGUI_MeshInfo.cxx.

References SMDS_MeshElement.GetID(), SMDS_MeshNode.GetInverseElementIterator(), and SMDS_MeshElement.GetType().

Referenced by information(), and SMESHGUI_SimpleElemInfo.information().

{
  Connectivity elmap;
  if ( node ) {
    SMDS_ElemIteratorPtr it = node->GetInverseElementIterator();
    while ( it && it->more() ) {
      const SMDS_MeshElement* ne = it->next();
      elmap[ ne->GetType() ] << ne->GetID();
    }
  }
  return elmap;
}
void SMESHGUI_ElemInfo::setSource ( SMESH_Actor actor) [inherited]

Set mesh data source (actor)

Parameters:
actormesh object actor

Definition at line 505 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.actor(), SMESHGUI_ElemInfo.clear(), SMESHGUI_ElemInfo.myActor, and SMESHGUI_ElemInfo.myIsElement.

Referenced by SMESHGUI_MeshInfoDlg.showInfo().

{
  if ( myActor != actor ) {
    myActor = actor;
    myIsElement = -1;
    clear();
  }
}
void SMESHGUI_ElemInfo::showInfo ( QSet< long >  ids,
bool  isElem 
) [inherited]

Show mesh element information.

Parameters:
idsmesh nodes / elements identifiers
isElemshow mesh element information if true or mesh node information if false

Definition at line 531 of file SMESHGUI_MeshInfo.cxx.

References SMESHGUI_ElemInfo.information(), SMESHGUI_ElemInfo.myIDs, SMESHGUI_ElemInfo.myIndex, SMESHGUI_ElemInfo.myIsElement, and SMESHGUI_ElemInfo.updateControls().

{
  QList<long> newIds = ids.toList();
  qSort( newIds );
  if ( myIDs == newIds && myIsElement == isElem ) return;

  myIDs = newIds;
  myIsElement = isElem;
  myIndex = 0;
  updateControls();
  information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) );
}
void SMESHGUI_ElemInfo::showInfo ( long  id,
bool  isElem 
) [inherited]

Show mesh element information.

Parameters:
idmesh node / element ID
isElemshow mesh element information if true or mesh node information if false

Definition at line 519 of file SMESHGUI_MeshInfo.cxx.

References SMESH_test.ids.

Referenced by SMESHGUI_MeshInfoDlg.idChanged(), and SMESHGUI_MeshInfoDlg.showInfo().

{
  QSet<long> ids;
  ids << id;
  showInfo( ids, isElem );
}

Field Documentation

QTreeWidget* SMESHGUI_TreeElemInfo.myInfo [private]

Definition at line 199 of file SMESHGUI_MeshInfo.h.

Referenced by clearInternal(), createItem(), and SMESHGUI_TreeElemInfo().

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS