0031050: Data Exchange - XmlXCAF persistence stores triangulation-only Faces without...
authorkgv <kgv@opencascade.com>
Wed, 9 Oct 2019 15:18:14 +0000 (18:18 +0300)
committerapn <apn@opencascade.com>
Tue, 22 Oct 2019 12:15:43 +0000 (15:15 +0300)
BRepTools_ShapeSet now ignores myWithTriangles flag in case if triangulation is the only geometry representation.

src/BRepTools/BRepTools_ShapeSet.cxx
tests/bugs/caf/bug27835
tests/bugs/caf/bug31050 [new file with mode: 0644]

index 2ea80e8..5c3c4c9 100644 (file)
@@ -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 << " ";
index 043da72..c15b1a0 100644 (file)
@@ -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 (file)
index 0000000..a366ed3
--- /dev/null
@@ -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" }