diff --git a/src/XSControl/XSControl_TransferWriter.cxx b/src/XSControl/XSControl_TransferWriter.cxx index 5532d3a740..e11ede584e 100644 --- a/src/XSControl/XSControl_TransferWriter.cxx +++ b/src/XSControl/XSControl_TransferWriter.cxx @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include #include #include +#include IMPLEMENT_STANDARD_RTTIEXT(XSControl_TransferWriter,Standard_Transient) @@ -133,12 +135,22 @@ Standard_Boolean XSControl_TransferWriter::RecognizeShape (const TopoDS_Shape& s //======================================================================= IFSelect_ReturnStatus XSControl_TransferWriter::TransferWriteShape - (const Handle(Interface_InterfaceModel)& model, - const TopoDS_Shape& shape) + (const Handle(Interface_InterfaceModel)& theModel, + const TopoDS_Shape& theShape) { IFSelect_ReturnStatus status = IFSelect_RetVoid; if (myController.IsNull()) return IFSelect_RetError; - if (model.IsNull()) return IFSelect_RetVoid; + if (theModel.IsNull()) return IFSelect_RetVoid; + + TopoDS_Shape aShape = theShape; + Standard_Boolean isNMMode = Interface_Static::IVal("write.step.nonmanifold") != 0; + if (isNMMode) + { + ShapeUpgrade_RemoveLocations aRemLoc; + aRemLoc.SetRemoveLevel(TopAbs_COMPOUND); + aRemLoc.Remove(aShape); + aShape = aRemLoc.GetResult(); + } if (myTransferWriter.IsNull()) myTransferWriter = new Transfer_FinderProcess; // effacer l actor : Controller s en charge @@ -149,10 +161,10 @@ IFSelect_ReturnStatus XSControl_TransferWriter::TransferWriteShape try { OCC_CATCH_SIGNALS PrintStats(myTransferMode); - sout << "****** Transferring Shape, ShapeType = " << shape.ShapeType(); + sout << "****** Transferring Shape, ShapeType = " << aShape.ShapeType(); sout<<" ******"<TransferWriteShape - (shape,myTransferWriter,model,myTransferMode); + (aShape,myTransferWriter,theModel,myTransferMode); } catch(Standard_Failure const& anException) { sout<<"**** **** TransferWriteShape, EXCEPTION : "; diff --git a/tests/bugs/step/bug31617 b/tests/bugs/step/bug31617 new file mode 100644 index 0000000000..b3ba1e2fed --- /dev/null +++ b/tests/bugs/step/bug31617 @@ -0,0 +1,15 @@ +puts "============================================================" +puts "OCC31617: Export STEP in nonmanifold mode corrupts the shape" +puts "============================================================" +puts "" + +brestore [locate_data_file bug31617.brep] a + +param write.step.nonmanifold 1 + +testwritestep comp_nonmanifold.step a +testreadstep comp_nonmanifold.step result + +checkshape result + +checknbshapes result -ref [lrange [nbshapes a] 11 16]