0031049: OCAF - Error message during Ascii file (std) opening.
authorszy <szy@opencascade.com>
Mon, 11 Nov 2019 15:18:48 +0000 (18:18 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 14 Aug 2020 09:44:54 +0000 (12:44 +0300)
src/StdLDrivers/StdLDrivers_DocumentRetrievalDriver.cxx
src/StdResource/MigrationSheet.txt
src/Storage/Storage_Schema.cxx
tests/bugs/caf/bug31049 [new file with mode: 0644]

index 33231a1..c17b776 100644 (file)
@@ -34,6 +34,7 @@
 #include <NCollection_Array1.hxx>
 #include <NCollection_Handle.hxx>
 #include <TDocStd_Document.hxx>
+#include <Storage_Schema.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT (StdLDrivers_DocumentRetrievalDriver, PCDM_RetrievalDriver)
 
@@ -142,6 +143,14 @@ Handle(StdObjMgt_Persistent) StdLDrivers_DocumentRetrievalDriver::read (
       aCurTypeName = aTypeData.Type (i);
       aCurTypeNum  = aTypeData.Type (aCurTypeName);
 
+         TCollection_AsciiString  newName;
+         if (Storage_Schema::CheckTypeMigration(aCurTypeName, newName)) {
+#ifdef OCCT_DEBUG
+                 std::cout << "CheckTypeMigration:OldType = " << aCurTypeName << " Len = " << aCurTypeNum << std::endl;
+                 std::cout << "CheckTypeMigration:NewType = " << newName << " Len = " << newName.Length() << std::endl;
+#endif
+                 aCurTypeName = newName;
+         }
       StdObjMgt_Persistent::Instantiator anInstantiator;
       if (aMapOfInst.Find(aCurTypeName, anInstantiator))
         anInstantiators (aCurTypeNum) = anInstantiator;
index bb963ee..0a215a7 100644 (file)
@@ -8,5 +8,14 @@ TDataStd_Position       TDataXtd_Position
 TDataStd_Placement      TDataXtd_Placement
 TDataStd_PatternStd     TDataXtd_PatternStd
 TPrsStd_AISPresentation TDataXtd_Presentation
+PDataStd_Shape         PDataXtd_Shape
+PDataStd_Constraint    PDataXtd_Constraint
+PDataStd_Geometry      PDataXtd_Geometry
+PDataStd_Axis          PDataXtd_Axis
+PDataStd_Point         PDataXtd_Point
+PDataStd_Plane         PDataXtd_Plane
+PDataStd_Position      PDataXtd_Position
+PDataStd_Placement     PDataXtd_Placement
+PDataStd_PatternStd    PDataXtd_PatternStd
 
 
index c1740ce..16f03a1 100644 (file)
@@ -773,17 +773,26 @@ Standard_Boolean Storage_Schema::CheckTypeMigration(
       }
       else
       {
-        // hard-code migration table for known types
-        aDMap.Bind("TDataStd_Shape",          "TDataXtd_Shape");
-        aDMap.Bind("TDataStd_Constraint",     "TDataXtd_Constraint");
+        // hard-code migration table for known types   
+       aDMap.Bind("TDataStd_Shape",          "TDataXtd_Shape");
+       aDMap.Bind("TDataStd_Constraint",     "TDataXtd_Constraint");
         aDMap.Bind("TDataStd_Geometry",       "TDataXtd_Geometry");
-        aDMap.Bind("TDataStd_Axis",           "TDataXtd_Axis");
-        aDMap.Bind("TDataStd_Point",          "TDataXtd_Point");
-        aDMap.Bind("TDataStd_Plane",          "TDataXtd_Plane");
-        aDMap.Bind("TDataStd_Position",       "TDataXtd_Position");
-        aDMap.Bind("TDataStd_Placement",      "TDataXtd_Placement");
-        aDMap.Bind("TDataStd_PatternStd",     "TDataXtd_PatternStd");
-        aDMap.Bind("TPrsStd_AISPresentation", "TDataXtd_Presentation");
+       aDMap.Bind("TDataStd_Axis",           "TDataXtd_Axis");
+       aDMap.Bind("TDataStd_Point",          "TDataXtd_Point");
+       aDMap.Bind("TDataStd_Plane",          "TDataXtd_Plane");
+       aDMap.Bind("TDataStd_Position",       "TDataXtd_Position");
+       aDMap.Bind("TDataStd_Placement",      "TDataXtd_Placement");
+       aDMap.Bind("TDataStd_PatternStd",     "TDataXtd_PatternStd");
+       aDMap.Bind("TPrsStd_AISPresentation", "TDataXtd_Presentation");
+        aDMap.Bind("PDataStd_Shape",          "PDataXtd_Shape");
+        aDMap.Bind("PDataStd_Constraint",     "PDataXtd_Constraint");
+        aDMap.Bind("PDataStd_Geometry",       "PDataXtd_Geometry");
+        aDMap.Bind("PDataStd_Axis",           "PDataXtd_Axis");
+        aDMap.Bind("PDataStd_Point",          "PDataXtd_Point");
+        aDMap.Bind("PDataStd_Plane",          "PDataXtd_Plane");
+        aDMap.Bind("PDataStd_Position",       "PDataXtd_Position");
+        aDMap.Bind("PDataStd_Placement",      "PDataXtd_Placement");
+        aDMap.Bind("PDataStd_PatternStd",     "PDataXtd_PatternStd");
       }
 #ifdef OCCT_DEBUG
       std::cout << "Storage_Sheme:: aDataMap.Size = " << aDMap.Extent() << std::endl;
diff --git a/tests/bugs/caf/bug31049 b/tests/bugs/caf/bug31049
new file mode 100644 (file)
index 0000000..072b004
--- /dev/null
@@ -0,0 +1,20 @@
+puts "=================================================================================="
+puts "0031049: OCAF document can't be opened, Type not found or Unrecognized File Format"
+puts "=================================================================================="
+puts ""
+
+Open [locate_data_file bug31049_Npr.std] D
+GetPoint D 0:1:2:1:18:1:1:1:1:1:1:1:1:1:1:1:2:5 p1
+set info [dump p1]
+##*********** Dump of p1 *************
+##Point : 2.136843869657140e+03, -3.636437663372889e+02, 9.822340087890625e+02
+
+GetPoint D 0:1:2:1:18:1:1:1:1:1:1:1:1:1:1:3:2:5 p3
+set info3 [dump p3]
+##*********** Dump of p3 *************
+##Point : 2.136843869657140e+03, -3.606482046100116e+02, 9.822340087890625e+02
+
+if {[regexp "Point" $info] != 1 } {puts "Error : There is no Point attribute at the specified label 0:1:2:1:18:1:1:1:1:1:1:1:1:1:1:1:2:5"
+} elseif { [regexp "Point" $info3] != 1 } {puts "Error : There is no Point attribute at the specified label 0:1:2:1:18:1:1:1:1:1:1:1:1:1:1:3:2:5"
+} else {puts "Bug31049 : OK"; Close D}
+