From: ika Date: Thu, 9 Jun 2016 13:48:53 +0000 (+0300) Subject: 0027329: Export to STEP failure X-Git-Tag: V7_0_winwerth~10 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=f117cc5a81e6e75a827da90f243555173ec5d67f 0027329: Export to STEP failure Do ProcessShape for non-manifold too, Add binding of already written shared faces to STEP entity for non-manifold. Minor correction of test case bugs/step/bug27329 --- diff --git a/src/STEPControl/STEPControl_ActorWrite.cxx b/src/STEPControl/STEPControl_ActorWrite.cxx index 6087575594..da131b2723 100644 --- a/src/STEPControl/STEPControl_ActorWrite.cxx +++ b/src/STEPControl/STEPControl_ActorWrite.cxx @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -269,6 +270,34 @@ Handle(StepShape_NonManifoldSurfaceShapeRepresentation) STEPControl_ActorWrite:: return aResult; } +//======================================================================= +//function : mergeInfoForNM +//purpose : bind already written shared faces to STEP entity for non-manifold +//======================================================================= +void STEPControl_ActorWrite::mergeInfoForNM(const Handle(Transfer_FinderProcess)& theFP, + const Handle(Standard_Transient) &theInfo) const +{ + Handle(ShapeProcess_ShapeContext) aContext = Handle(ShapeProcess_ShapeContext)::DownCast ( theInfo ); + if ( aContext.IsNull() ) return; + + const TopTools_DataMapOfShapeShape &aMap = aContext->Map(); + TopTools_DataMapIteratorOfDataMapOfShapeShape aShapeShapeIt(aMap); + + for ( ; aShapeShapeIt.More(); aShapeShapeIt.Next() ) { + TopoDS_Shape anOrig = aShapeShapeIt.Key(), aRes = aShapeShapeIt.Value(); + if (anOrig.ShapeType() != TopAbs_FACE) + continue; + + Handle(TransferBRep_ShapeMapper) anOrigMapper= TransferBRep::ShapeMapper ( theFP, anOrig); + Handle(Transfer_Binder) anOrigBinder = theFP->Find ( anOrigMapper ); + if (anOrigBinder.IsNull()) + continue; + + Handle(TransferBRep_ShapeMapper) aResMapper = TransferBRep::ShapeMapper ( theFP, aRes ); + theFP->Bind(aResMapper, anOrigBinder); + } +} + //======================================================================= //function : SetMode @@ -867,16 +896,15 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferShape (const Handle(Tran Handle(Standard_Transient) info; Standard_Real maxTol = Interface_Static::RVal("read.maxprecision.val"); - // Fix only manifold shapes, do nothing with non-manifold topology as it is processed separately (ssv; 13.11.2010) TopoDS_Shape aShape; - if (isManifold) - aShape = XSAlgo::AlgoContainer()->ProcessShape(xShape, Tol, maxTol, - "write.step.resource.name", - "write.step.sequence", info, - FP->GetProgress() ); - else - aShape = xShape; - + aShape = XSAlgo::AlgoContainer()->ProcessShape(xShape, Tol, maxTol, + "write.step.resource.name", + "write.step.sequence", info, + FP->GetProgress() ); + if (!isManifold) { + mergeInfoForNM(FP, info); + } + // create a STEP entity corresponding to shape Handle(StepGeom_GeometricRepresentationItem) item; switch (trmode) diff --git a/src/STEPControl/STEPControl_ActorWrite.hxx b/src/STEPControl/STEPControl_ActorWrite.hxx index be67859393..afc1869a9e 100644 --- a/src/STEPControl/STEPControl_ActorWrite.hxx +++ b/src/STEPControl/STEPControl_ActorWrite.hxx @@ -95,6 +95,9 @@ private: //! to create a new one if doesn't exist yet) //! (ssv; 13.11.2010) Standard_EXPORT Handle(StepShape_NonManifoldSurfaceShapeRepresentation) getNMSSRForGroup (const Handle(TopTools_HSequenceOfShape)& shapeGroup, const Handle(Transfer_FinderProcess)& FP, Standard_Boolean& isNMSSRCreated) const; + + //! bind already written shared faces to STEP entity for non-manifold + Standard_EXPORT void mergeInfoForNM(const Handle(Transfer_FinderProcess)& theFP, const Handle(Standard_Transient) &theInfo) const; Standard_Integer mygroup; Standard_Real mytoler; diff --git a/tests/bugs/step/bug27329 b/tests/bugs/step/bug27329 new file mode 100644 index 0000000000..9f9ca5c343 --- /dev/null +++ b/tests/bugs/step/bug27329 @@ -0,0 +1,23 @@ +puts "========" +puts "OCC27329" +puts "========" +puts "" +######################### +# Export to STEP failure +######################### + +restore [locate_data_file bug27329_phenix.brep] a + +param write.step.nonmanifold 1 +param read.step.nonmanifold 1 +newmodel + +stepwrite 0 a $imagedir/bug27329_temp.stp +stepread $imagedir/bug27329_temp.stp b * +renamevar b_1 result + +checknbshapes result -solid 3 -shell 3 -face 42 + +param write.step.nonmanifold 0 +param read.step.nonmanifold 0 +newmodel