From: jfa Date: Thu, 28 Apr 2011 11:26:02 +0000 (+0000) Subject: Mantis issue 0021251: Problem with normale of a face. Keep shape normales in a separa... X-Git-Tag: V6_3_0b1~12 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=8e9aa9b888c53d67f502465c53950e3b2b124178;p=modules%2Fgeom.git Mantis issue 0021251: Problem with normale of a face. Keep shape normales in a separate attribute, as they are not stored in NamedShape. --- diff --git a/src/GEOM/GEOM_Function.cxx b/src/GEOM/GEOM_Function.cxx index 46da48dfc..5890f016e 100644 --- a/src/GEOM/GEOM_Function.cxx +++ b/src/GEOM/GEOM_Function.cxx @@ -60,12 +60,21 @@ #include #include // 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;