From: gka Date: Fri, 21 Aug 2015 15:12:35 +0000 (+0300) Subject: 0026376: Imported STEP shape is partially wrong X-Git-Tag: V6_9_1_beta~9 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=1c9e5ae0f167d4197b06da15899971ed1e5d560e;p=occt-copy.git 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". --- diff --git a/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx b/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx index 116bc2b4dd..1bfc6e7e19 100644 --- a/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx +++ b/src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx @@ -74,6 +74,8 @@ #include #include #include +#include +#include // Provisoire, pour VertexLoop #include @@ -116,6 +118,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) { @@ -187,8 +201,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