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;
}
/*!
\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.
@ -1423,6 +1433,12 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
// 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 ) {
@ -1967,6 +1983,23 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
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 ) {

View File

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

View File

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

View File

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

View File

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