Salome HOME
0022876: EDF 8425 SMESH: Get the normal of a face in the GUI
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Utils.cxx
index 26f3619..8fd7d6d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -29,7 +29,7 @@
 #include "SMESHGUI.h"
 #include "SMESHGUI_Selection.h"
 #include "SMESH_Type.h"
-
+#include "SMESH_MeshAlgos.hxx"
 #include <SMDS_MeshNode.hxx>
 #include <SMDS_MeshFace.hxx>
 
 
 #include CORBA_SERVER_HEADER(SMESH_Group)
 
+//VSR: uncomment below macro to support unicode text properly in SALOME
+//     current commented out due to regressions
+//#define PAL22528_UNICODE
+
 namespace SMESH
 {
   SUIT_Desktop*
@@ -215,10 +219,10 @@ namespace SMESH
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
       (SUIT_Session::session()->activeApplication());
     if ( app ) {
-      QString IOR = app->orb()->object_to_string( theObject );
+      CORBA::String_var ior = app->orb()->object_to_string( theObject );
       SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-      if ( study && !IOR.isEmpty() )
-        res = study->studyDS()->FindObjectIOR( IOR.toLatin1().constData() );
+      if ( study && strlen( ior ) > 0 )
+        res = study->studyDS()->FindObjectIOR( ior.in() );
     }
     return res;
   }
@@ -369,26 +373,31 @@ namespace SMESH
   gp_XYZ getNormale( const SMDS_MeshFace* theFace )
   {
     gp_XYZ n;
-    int aNbNode = theFace->NbNodes();
-    TColgp_Array1OfXYZ anArrOfXYZ(1,4);
-    SMDS_ElemIteratorPtr aNodeItr = theFace->nodesIterator();
-    int i = 1;
-    for ( ; aNodeItr->more() && i <= 4; i++ ) {
-      SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next();
-      anArrOfXYZ.SetValue(i, gp_XYZ( aNode->X(), aNode->Y(), aNode->Z() ) );
-    }
-    
-    gp_XYZ q1 = anArrOfXYZ.Value(2) - anArrOfXYZ.Value(1);
-    gp_XYZ q2 = anArrOfXYZ.Value(3) - anArrOfXYZ.Value(1);
-    n  = q1 ^ q2;
-    if ( aNbNode > 3 ) {
-      gp_XYZ q3 = anArrOfXYZ.Value(4) - anArrOfXYZ.Value(1);
-      n += q2 ^ q3;
-    }
-    double len = n.Modulus();
-    if ( len > 0 )
-      n /= len;
+    SMESH_MeshAlgos::FaceNormal( theFace, n, /*normalized=*/true );
     return n;
   }
   
+  QString fromUtf8( const char* txt )
+  {
+#ifdef PAL22528_UNICODE
+    return QString::fromUtf8( txt );
+#else
+    return QString( txt );
+#endif
+  }
+
+  QString fromUtf8( const std::string& txt )
+  {
+    return fromUtf8( txt.c_str() );
+  }
+
+  const char* toUtf8( const QString& txt )
+  {
+#ifdef PAL22528_UNICODE
+    return txt.toUtf8().constData();
+#else
+    return txt.toLatin1().constData();
+#endif
+  }
+
 } // end of namespace SMESH