]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Mantis issue 0021251: Problem with normale of a face. Keep shape normales in a separa...
authorjfa <jfa@opencascade.com>
Thu, 28 Apr 2011 11:26:02 +0000 (11:26 +0000)
committerjfa <jfa@opencascade.com>
Thu, 28 Apr 2011 11:26:02 +0000 (11:26 +0000)
src/GEOM/GEOM_Function.cxx

index 46da48dfc0b47a5b23b8dc6819fbf36b85bb7f4e..5890f016ee1142b80c9c569205bce36b4f6cde56 100644 (file)
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
 
+// This modification was introduced in frame of Mantis issue 0021251.
+// This line allows to keep shape orientation together with the shape itself.
+// Otherwise orientation can be lost in some cases.
+#define KEEP_ORIENTATION_0021251
+
 #define ARGUMENT_LABEL 1
 #define RESULT_LABEL 2
 #define DESCRIPTION_LABEL 3
 #define HISTORY_LABEL 4
 #define SUBSHAPES_LABEL 5 // 0020756: GetGroups
-#define NAMING_LABEL 6 // 002020750: Naming during STEP import
+#define NAMING_LABEL 6 // 0020750: Naming during STEP import
+
+#ifdef KEEP_ORIENTATION_0021251
+#define ORIENTATION_LABEL 7 // 0021251: TNaming_NamedShape doesn't store orientation
+#endif
 
 #define ARGUMENTS _label.FindChild((ARGUMENT_LABEL))
 #define ARGUMENT(thePosition) _label.FindChild((ARGUMENT_LABEL)).FindChild((thePosition))
@@ -221,6 +230,15 @@ TopoDS_Shape GEOM_Function::GetValue()
 
   aShape = aNS->Get();
 
+#ifdef KEEP_ORIENTATION_0021251
+  // 0021251: TNaming_NamedShape doesn't store orientation
+  TDF_Label anOrientationLabel = _label.FindChild(ORIENTATION_LABEL);
+  Handle(TDataStd_Integer) anInteger;
+  if (anOrientationLabel.FindAttribute(TDataStd_Integer::GetID(), anInteger)) {
+    aShape.Orientation((TopAbs_Orientation)anInteger->Get());
+  }
+#endif
+
   _isDone = true;
   return aShape;
 }
@@ -234,10 +252,16 @@ void GEOM_Function::SetValue(TopoDS_Shape& theShape)
 {
   _isDone = false;
   TDF_Label aResultLabel = _label.FindChild(RESULT_LABEL);
-  TNaming_Builder aBuilder(aResultLabel);
+  TNaming_Builder aBuilder (aResultLabel);
 
   aBuilder.Generated(theShape);
 
+#ifdef KEEP_ORIENTATION_0021251
+  // 0021251: TNaming_NamedShape doesn't store orientation
+  TDF_Label anOrientationLabel = _label.FindChild(ORIENTATION_LABEL);
+  TDataStd_Integer::Set(anOrientationLabel, (int)theShape.Orientation());
+#endif
+
   // synchronisation between main shape and its sub-shapes
   TDF_Label aLabel = GetOwnerEntry();
   if (aLabel.IsRoot()) return;