0030280: Data Exchange - broken VRML output due to unescaped symbols starting comment...
authorskl <skl@opencascade.com>
Tue, 23 Oct 2018 04:50:33 +0000 (07:50 +0300)
committerapn <apn@opencascade.com>
Tue, 23 Oct 2018 17:10:58 +0000 (20:10 +0300)
src/VrmlData/VrmlData_ShapeConvert.cxx
tests/bugs/xde/bug30280 [new file with mode: 0644]

index 60d5b16..177295e 100644 (file)
@@ -262,11 +262,14 @@ void VrmlData_ShapeConvert::Convert (const Standard_Boolean theExtractFaces,
   myRelMap = NCollection_DataMap <TopoDS_Shape, Handle(VrmlData_Geometry)>(100, anAlloc);
 
   NCollection_List<ShapeData>::Iterator anIter (myShapes);
-  for (; anIter.More(); anIter.Next()) {
-
+  for (; anIter.More(); anIter.Next())
+  {
     ShapeData& aData = anIter.ChangeValue();
+    TCollection_AsciiString aGrName = aData.Name;
+    aGrName.ChangeAll(' ', '_');
+    aGrName.ChangeAll('#', '_');
     Handle(VrmlData_Group) aGroup =
-      new VrmlData_Group (myScene, aData.Name.ToCString());
+      new VrmlData_Group (myScene, aGrName.ToCString());
     myScene.AddNode (aGroup);
 
     for(i = 0; i < 2; ++i) {
@@ -622,6 +625,8 @@ void VrmlData_ShapeConvert::addShape (const Handle(VrmlData_Group)& theParent,
     if (!aNameAttribute.IsNull())
     {
       TCollection_AsciiString aName = aNameAttribute->Get();
+      aName.ChangeAll(' ', '_');
+      aName.ChangeAll('#', '_');
       aGroup = new VrmlData_Group(myScene, aName.ToCString());
     }
     else
@@ -647,6 +652,7 @@ void VrmlData_ShapeConvert::addShape (const Handle(VrmlData_Group)& theParent,
       {
         TCollection_AsciiString aName = aNameAttribute->Get();
         aName.ChangeAll(' ', '_');
+        aName.ChangeAll('#', '_');
         aShapeNode = new VrmlData_ShapeNode(myScene, aName.ToCString());
       }
       else
@@ -785,6 +791,8 @@ void VrmlData_ShapeConvert::addAssembly (const Handle(VrmlData_Group)& theParent
     if (!aNameAttribute.IsNull())
     {
       TCollection_AsciiString aName = aNameAttribute->Get();
+      aName.ChangeAll(' ', '_');
+      aName.ChangeAll('#', '_');
       anAssembly = new VrmlData_Group(myScene, aName.ToCString());
     }
     else
diff --git a/tests/bugs/xde/bug30280 b/tests/bugs/xde/bug30280
new file mode 100644 (file)
index 0000000..4b8d219
--- /dev/null
@@ -0,0 +1,16 @@
+puts "========="
+puts "OCC30280"
+puts "========="
+puts ""
+######################################################################################
+# Data Exchange - broken VRML output due to unescaped symbols starting comment block
+######################################################################################
+
+set filename bug30280_vmt02
+XOpen [locate_data_file $filename.xbf] D
+
+file delete -force ${imagedir}/$filename.wrl
+WriteVrml D ${imagedir}/$filename.wrl
+loadvrml a ${imagedir}/$filename.wrl
+
+checkview -display a -3d -path ${imagedir}/${test_image}.png