0022876: EDF 8425 SMESH: Get the normal of a face in the GUI

This commit is contained in:
vsr 2015-02-20 11:07:49 +03:00
parent 1b1945a31c
commit 15963fa362
5 changed files with 47 additions and 0 deletions

View File

@ -1046,6 +1046,16 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement*
return xyz; 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. \brief This slot is called from "Show Previous" button click.
Shows information on the previous group of the items. Shows information on the previous group of the items.
@ -1423,6 +1433,12 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
// Gravity center // Gravity center
XYZ gc = gravityCenter( e ); 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() ) ); 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 // Element position
if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) { if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) {
@ -1967,6 +1983,23 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
QTreeWidgetItem* zItem = createItem( gcItem ); QTreeWidgetItem* zItem = createItem( gcItem );
zItem->setText( 0, "Z" ); 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 // element position
SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer(); SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer();
if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) { if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) {

View File

@ -158,6 +158,7 @@ protected:
{ {
double myX, myY, myZ; double myX, myY, myZ;
XYZ() { myX = myY = myZ = 0.0; } XYZ() { myX = myY = myZ = 0.0; }
XYZ(double x, double y, double z) { myX = x; myY = y; myZ = z; }
void add( double x, double y, double z ) { myX += x; myY += y; myZ += z; } void add( double x, double y, double z ) { myX += x; myY += y; myZ += z; }
void divide( double a ) { if ( a != 0.) { myX /= a; myY /= a; myZ /= a; } } void divide( double a ) { if ( a != 0.) { myX /= a; myY /= a; myZ /= a; } }
double x() const { return myX; } double x() const { return myX; }
@ -176,6 +177,7 @@ protected:
Connectivity nodeConnectivity( const SMDS_MeshNode* ); Connectivity nodeConnectivity( const SMDS_MeshNode* );
QString formatConnectivity( Connectivity, int ); QString formatConnectivity( Connectivity, int );
XYZ gravityCenter( const SMDS_MeshElement* ); XYZ gravityCenter( const SMDS_MeshElement* );
XYZ normal( const SMDS_MeshElement* );
signals: signals:
void itemInfo( int ); void itemInfo( int );

View File

@ -7102,6 +7102,10 @@ as they are of improper type:
<source>GRAVITY_CENTER</source> <source>GRAVITY_CENTER</source>
<translation>Gravity Center</translation> <translation>Gravity Center</translation>
</message> </message>
<message>
<source>NORMAL_VECTOR</source>
<translation>Normal</translation>
</message>
<message> <message>
<source>NODE</source> <source>NODE</source>
<translation>Node</translation> <translation>Node</translation>

View File

@ -7103,6 +7103,10 @@ en raison de leurs types incompatibles:
<source>GRAVITY_CENTER</source> <source>GRAVITY_CENTER</source>
<translation>CENTRE DE GRAVITÉ</translation> <translation>CENTRE DE GRAVITÉ</translation>
</message> </message>
<message>
<source>NORMAL_VECTOR</source>
<translation>Normal</translation>
</message>
<message> <message>
<source>NODE</source> <source>NODE</source>
<translation>Nœud</translation> <translation>Nœud</translation>

View File

@ -6988,6 +6988,10 @@
<source>GRAVITY_CENTER</source> <source>GRAVITY_CENTER</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>NORMAL_VECTOR</source>
<translation></translation>
</message>
<message> <message>
<source>NODE</source> <source>NODE</source>
<translation></translation> <translation></translation>