From 649e34c9b6a076a00e9fa9999ff0248d17b296b7 Mon Sep 17 00:00:00 2001 From: gka Date: Thu, 27 Aug 2015 13:26:23 +0300 Subject: [PATCH] 0026376: Imported STEP shape is partially wrong 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 --- .../StepToTopoDS_TranslateFace.cxx | 20 ++++++++++++- tests/bugs/step/bug26376 | 28 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/step/bug26376 diff --git a/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx b/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx index 48309427ca..83bc20ae85 100644 --- a/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx +++ b/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx @@ -77,6 +77,8 @@ #include #include #include +#include +#include //#3 rln 16/02/98 //#include @@ -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 index 0000000000..5a046fe4a8 --- /dev/null +++ b/tests/bugs/step/bug26376 @@ -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 -- 2.20.1