mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-03 22:15:37 +05:00
0022537: EDF 2877 SMESH : wrong information about the numbre of nodes with polyhedra
This commit is contained in:
parent
9acd4347a6
commit
712a8ce960
@ -74,6 +74,7 @@ SET(_link_LIBRARIES
|
|||||||
${GEOM_GEOMObject}
|
${GEOM_GEOMObject}
|
||||||
SMESHFiltersSelection
|
SMESHFiltersSelection
|
||||||
SMDS
|
SMDS
|
||||||
|
SMESHEngine
|
||||||
SMESHControls
|
SMESHControls
|
||||||
SMESHObject
|
SMESHObject
|
||||||
)
|
)
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "SMDS_EdgePosition.hxx"
|
#include "SMDS_EdgePosition.hxx"
|
||||||
#include "SMDS_FacePosition.hxx"
|
#include "SMDS_FacePosition.hxx"
|
||||||
#include "SMDS_Mesh.hxx"
|
#include "SMDS_Mesh.hxx"
|
||||||
|
#include "SMESH_Gen_i.hxx"
|
||||||
#include "SMESHDS_Mesh.hxx"
|
#include "SMESHDS_Mesh.hxx"
|
||||||
#include "SMESHGUI.h"
|
#include "SMESHGUI.h"
|
||||||
#include "SMESHGUI_FilterUtils.h"
|
#include "SMESHGUI_FilterUtils.h"
|
||||||
@ -1838,66 +1839,34 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
|
|||||||
// connectivity
|
// connectivity
|
||||||
QTreeWidgetItem* conItem = createItem( elemItem, Bold );
|
QTreeWidgetItem* conItem = createItem( elemItem, Bold );
|
||||||
conItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) );
|
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<const SMDS_MeshNode*>( nodeIt->next() );
|
if( e->GetGeomType() != SMDSGeom_POLYHEDRA ) {
|
||||||
// node number and ID
|
SMDS_ElemIteratorPtr nodeIt = e->nodesIterator();
|
||||||
QTreeWidgetItem* nodeItem = createItem( conItem, Bold );
|
for ( int idx = 1; nodeIt->more(); idx++ ) {
|
||||||
nodeItem->setText( 0, QString( "%1 %2 / %3" ).arg( SMESHGUI_ElemInfo::tr( "NODE" ) ).arg( idx ).arg( e->NbNodes() ) );
|
const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( nodeIt->next() );
|
||||||
nodeItem->setText( 1, QString( "#%1" ).arg( node->GetID() ) );
|
nodeInfo( node, idx, e->NbNodes(), conItem );
|
||||||
nodeItem->setData( 1, TypeRole, ElemConnectivity );
|
}
|
||||||
nodeItem->setData( 1, IdRole, node->GetID() );
|
}
|
||||||
nodeItem->setExpanded( false );
|
else {
|
||||||
// node coordinates
|
const SMDS_VtkVolume* aVtkVolume = dynamic_cast<const SMDS_VtkVolume*>(e);
|
||||||
QTreeWidgetItem* coordItem = createItem( nodeItem );
|
SMDS_ElemIteratorPtr nodeIt = aVtkVolume->uniqueNodesIterator();
|
||||||
coordItem->setText( 0, SMESHGUI_ElemInfo::tr( "COORDINATES" ) );
|
QList<const SMDS_MeshElement*> uniqueNodes;
|
||||||
QTreeWidgetItem* xItem = createItem( coordItem );
|
while ( nodeIt->more() )
|
||||||
xItem->setText( 0, "X" );
|
uniqueNodes.append( nodeIt->next() );
|
||||||
xItem->setText( 1, QString::number( node->X(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
|
|
||||||
QTreeWidgetItem* yItem = createItem( coordItem );
|
SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer();
|
||||||
yItem->setText( 0, "Y" );
|
SMESH_Mesh_i* mesh_i = SMESH::DownCast< SMESH_Mesh_i* >( aMesh );
|
||||||
yItem->setText( 1, QString::number( node->Y(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
|
const int nbFaces = mesh_i->ElemNbFaces( e->GetID() );
|
||||||
QTreeWidgetItem* zItem = createItem( coordItem );
|
for( int i = 0; i < nbFaces; i++ ) {
|
||||||
zItem->setText( 0, "Z" );
|
QTreeWidgetItem* faceItem = createItem( conItem, Bold );
|
||||||
zItem->setText( 1, QString::number( node->Z(), precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
|
faceItem->setText( 0, QString( "%1 %2 / %3" ).arg( SMESHGUI_ElemInfo::tr( "FACE" ) ).arg( i + 1 ).arg( nbFaces ) );
|
||||||
// node connectivity
|
faceItem->setExpanded( true );
|
||||||
QTreeWidgetItem* nconItem = createItem( nodeItem );
|
|
||||||
nconItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONNECTIVITY" ) );
|
SMESH::long_array_var anNodeIds = mesh_i->GetElemFaceNodes( e->GetID(), i );
|
||||||
Connectivity connectivity = nodeConnectivity( node );
|
for( CORBA::Long node_id = 0, n = anNodeIds->length(); node_id < n; node_id++ ) {
|
||||||
if ( !connectivity.isEmpty() ) {
|
const SMDS_MeshNode* node = actor()->GetObject()->GetMesh()->FindNode( anNodeIds[node_id] );
|
||||||
QString con = formatConnectivity( connectivity, SMDSAbs_0DElement );
|
nodeInfo( node, uniqueNodes.indexOf(node) + 1, aVtkVolume->NbUniqueNodes(), faceItem );
|
||||||
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 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2077,6 +2046,77 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& 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)
|
\brief Internal clean-up (reset widget)
|
||||||
*/
|
*/
|
||||||
|
@ -226,6 +226,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void contextMenuEvent( QContextMenuEvent* e );
|
void contextMenuEvent( QContextMenuEvent* e );
|
||||||
void information( const QList<long>& );
|
void information( const QList<long>& );
|
||||||
|
void nodeInfo( const SMDS_MeshNode*, int, int, QTreeWidgetItem* );
|
||||||
void clearInternal();
|
void clearInternal();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
Loading…
Reference in New Issue
Block a user