From: kgv Date: Wed, 9 Oct 2019 15:18:14 +0000 (+0300) Subject: 0031050: Data Exchange - XmlXCAF persistence stores triangulation-only Faces without... X-Git-Tag: V7_5_0_beta~387 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=8c787b5fa9731a6332416b1901351a217d8b3d92 0031050: Data Exchange - XmlXCAF persistence stores triangulation-only Faces without any geometry BRepTools_ShapeSet now ignores myWithTriangles flag in case if triangulation is the only geometry representation. --- diff --git a/src/BRepTools/BRepTools_ShapeSet.cxx b/src/BRepTools/BRepTools_ShapeSet.cxx index 2ea80e822b..5c3c4c947c 100644 --- a/src/BRepTools/BRepTools_ShapeSet.cxx +++ b/src/BRepTools/BRepTools_ShapeSet.cxx @@ -215,7 +215,7 @@ void BRepTools_ShapeSet::AddGeometry(const TopoDS_Shape& S) Handle(BRep_TFace) TF = Handle(BRep_TFace)::DownCast(S.TShape()); if (!TF->Surface().IsNull()) mySurfaces.Add(TF->Surface()); - if (myWithTriangles) { // for XML Persistence + if (myWithTriangles || TF->Surface().IsNull()) { // for XML Persistence Handle(Poly_Triangulation) Tr = TF->Triangulation(); if (!Tr.IsNull()) myTriangulations.Add(Tr); } @@ -751,7 +751,7 @@ void BRepTools_ShapeSet::WriteGeometry(const TopoDS_Shape& S, OS << " " << 0; OS << "\n"; } - if (myWithTriangles) { // for XML Persistence + if (myWithTriangles || TF->Surface().IsNull()) { // for XML Persistence if (!(TF->Triangulation()).IsNull()) { OS << 2; OS << " "; diff --git a/tests/bugs/caf/bug27835 b/tests/bugs/caf/bug27835 index 043da72b96..c15b1a0309 100644 --- a/tests/bugs/caf/bug27835 +++ b/tests/bugs/caf/bug27835 @@ -7,6 +7,7 @@ puts "" set anImgDoc1 $imagedir/${casename}_doc1.png set anImgDoc2 $imagedir/${casename}_doc2.png set anImgDiff $imagedir/${casename}_diff.png +set aTestFile $imagedir/${casename}.xbf pload XDE OCAF MODELING VISUALIZATION @@ -16,27 +17,27 @@ explode s F NewDocument D BinXCAF XAddShape D s XSetColor D s_1 1 0 0 -XShow D +vclear +vinit View1 vaxo +XDisplay -dispMode 1 D vfit vrotate 3 0 0 -vsetdispmode 1 vdump $anImgDoc1 -file delete ${imagedir}/test.xbf +file delete $aTestFile StoreTriangulation 1 -SaveAs D ${imagedir}/test.xbf +SaveAs D $aTestFile Close D -XOpen ${imagedir}/test.xbf D -XShow D -vsetdispmode 1 +XOpen $aTestFile D +file delete $aTestFile +vclear +XDisplay -dispMode 1 D vaxo vfit vrotate 3 0 0 vdump $anImgDoc2 set aDiffRes [diffimage $anImgDoc2 $anImgDoc1 0.0 0 0 $anImgDiff] -if {$aDiffRes != 0} { - puts "Error: document has changed after Save/Read" -} +if {$aDiffRes != 0} { puts "Error: document has changed after Save/Read" } diff --git a/tests/bugs/caf/bug31050 b/tests/bugs/caf/bug31050 new file mode 100644 index 0000000000..a366ed30cc --- /dev/null +++ b/tests/bugs/caf/bug31050 @@ -0,0 +1,38 @@ +puts "============" +puts "0031050: Data Exchange - XmlXCAF persistence stores triangulation-only Faces without any geometry" +puts "============" + +set anImgDoc1 $imagedir/${casename}_doc1.png +set anImgDoc2 $imagedir/${casename}_doc2.png +set anImgDiff $imagedir/${casename}_diff.png +set aTestFile $imagedir/${casename}.xml + +pload XDE OCAF MODELING VISUALIZATION + +restore [locate_data_file bug27821_nullsurf.brep] s +explode s F + +NewDocument D XmlXCAF +XAddShape D s +XSetColor D s_1 1 0 0 +vclear +vinit View1 +vaxo +XDisplay -dispMode 1 D +vfit +vrotate 3 0 0 +vdump $anImgDoc1 + +file delete $aTestFile +StoreTriangulation 1 +SaveAs D $aTestFile +Close D + +XOpen $aTestFile D +file delete $aTestFile +vclear +XDisplay -dispMode 1 D +vdump $anImgDoc2 + +set aDiffRes [diffimage $anImgDoc2 $anImgDoc1 0.0 0 0 $anImgDiff] +if {$aDiffRes != 0} { puts "Error: document has changed after Save/Read" }