0026376: Imported STEP shape is partially wrong
authorgka <gka@opencascade.com>
Thu, 27 Aug 2015 10:26:23 +0000 (13:26 +0300)
committerski <ski@opencascade.com>
Thu, 27 Aug 2015 10:27:19 +0000 (13:27 +0300)
Modification of the translation of the face based on the toroidal surface with negative major radius was made.
Seems that such face is considered by "Solid Works" and "ProE wildfire 5.0" systems as face having reversed orientation.
This step file was written by "Solid Works 2014".

Test case for issue CR26376

src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx
tests/bugs/step/bug26376 [new file with mode: 0644]

index 4830942..83bc20a 100644 (file)
@@ -77,6 +77,8 @@
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Wire.hxx>
 #include <Transfer_TransientProcess.hxx>
+#include <StepGeom_RectangularTrimmedSurface.hxx>
+#include <StepGeom_ToroidalSurface.hxx>
 
 //#3 rln 16/02/98
 //#include <GeomAdaptor_Curve.hxx>
@@ -113,6 +115,18 @@ StepToTopoDS_TranslateFace::StepToTopoDS_TranslateFace
 // Purpose : Init with a FaceSurface and a Tool
 // ============================================================================
 
+static inline Standard_Boolean isReversed(const Handle(StepGeom_Surface)& theStepSurf)
+{
+  Handle(StepGeom_ToroidalSurface) aStepTorSur;
+  if(theStepSurf->IsKind(STANDARD_TYPE(StepGeom_RectangularTrimmedSurface)))
+    return isReversed(Handle(StepGeom_RectangularTrimmedSurface)::DownCast(theStepSurf)->BasisSurface());
+  
+  else
+    aStepTorSur = Handle(StepGeom_ToroidalSurface)::DownCast(theStepSurf);
+  
+  return (!aStepTorSur.IsNull() && aStepTorSur->MajorRadius() < 0 ? Standard_True : Standard_False);
+}
+
 void StepToTopoDS_TranslateFace::Init
 (const Handle(StepShape_FaceSurface)& FS, StepToTopoDS_Tool& aTool, StepToTopoDS_NMTool& NMTool)
 {
@@ -184,8 +198,12 @@ void StepToTopoDS_TranslateFace::Init
     }
   }
     
-  Standard_Boolean sameSense = FS->SameSense();
+  Standard_Boolean sameSenseFace = FS->SameSense();
 
+  //fix for bug 0026376 Solid Works wrote face based on toroidal surface having negative major radius
+  //seems that such case is interpreted  by "Solid Works" and "ProE" as face having reversed orientation.
+  Standard_Boolean sameSense = (isReversed(StepSurf) ? !sameSenseFace : sameSenseFace);
+  
   // -- Statistics --
   aTool.AddContinuity (GeomSurf);
   
diff --git a/tests/bugs/step/bug26376 b/tests/bugs/step/bug26376
new file mode 100644 (file)
index 0000000..5a046fe
--- /dev/null
@@ -0,0 +1,28 @@
+puts "========"
+puts "OCC26376"
+puts "========"
+puts ""
+##########################################################################
+# Imported STEP shape is partially wrong
+##########################################################################
+
+stepread [locate_data_file bug26376_valve-test-meters.step] a *
+tpcompound result
+
+set square 150249
+
+set nbshapes_expected "
+Number of shapes in shape
+ VERTEX    : 23
+ EDGE      : 35
+ WIRE      : 24
+ FACE      : 19
+ SHELL     : 1
+ SOLID     : 1
+ COMPSOLID : 0
+ COMPOUND  : 1
+ SHAPE     : 104
+"
+checknbshapes result -ref ${nbshapes_expected} -t -m "Shape"
+
+set 3dviewer 1