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