Represents mesh element information in the tree-like form. More...
#include <SMESHGUI_MeshInfo.h>

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) | |
| QWidget * | frame () const |
| Get central area widget. | |
| SMESH_Actor * | actor () 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 |
Represents mesh element information in the tree-like form.
Definition at line 184 of file SMESHGUI_MeshInfo.h.
typedef QMap< int, QList<int> > SMESHGUI_ElemInfo.Connectivity [protected, inherited] |
Definition at line 141 of file SMESHGUI_MeshInfo.h.
| SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo | ( | QWidget * | parent = 0 | ) |
Constructor.
| parent | parent 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 ); }
| SMESH_Actor * SMESHGUI_ElemInfo::actor | ( | ) | const [protected, inherited] |
Get actor.
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] |
Clear mesh element information widget.
Definition at line 547 of file SMESHGUI_MeshInfo.cxx.
References SMESHGUI_ElemInfo.clearInternal(), SMESHGUI_ElemInfo.myIDs, SMESHGUI_ElemInfo.myIndex, and SMESHGUI_ElemInfo.updateControls().
Referenced by SMESHGUI_ElemInfo.setSource(), SMESHGUI_MeshInfoDlg.showInfo(), and SMESHGUI_ElemInfo.SMESHGUI_ElemInfo().
{
myIDs.clear();
myIndex = 0;
clearInternal();
updateControls();
}
| 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().
| QTreeWidgetItem * SMESHGUI_TreeElemInfo::createItem | ( | QTreeWidgetItem * | parent = 0, |
| int | column = 100 |
||
| ) | [private] |
Create new tree item.
| parnt | parent tree widget item |
| column | item column to be set bold, if it is -1, bold font will be set for all columns |
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.
| connectivity | connetivity map |
| type | element type |
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.
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.
| element | mesh 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.
| ids | mesh 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.
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.
| node | mesh node |
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)
| actor | mesh 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.
| ids | mesh nodes / elements identifiers |
| isElem | show 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.
| id | mesh node / element ID |
| isElem | show 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().
QTreeWidget* SMESHGUI_TreeElemInfo.myInfo [private] |
Definition at line 199 of file SMESHGUI_MeshInfo.h.
Referenced by clearInternal(), createItem(), and SMESHGUI_TreeElemInfo().