0029873: Data Exchange - STEPCAFControl_Reader::Transfer() returns TRUE even when...
authorskl <skl@opencascade.com>
Tue, 10 Jul 2018 11:45:11 +0000 (14:45 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 13 Jul 2018 13:38:07 +0000 (16:38 +0300)
Output information about failure during reading of external file has been added (it can be checked by using Draw command "tpstat").
If the reader cannot find an external file at the first found location
(using entity APPLIED_EXTERNAL_IDENTIFICATION_ASSIGNMENT) it checks other information about file path
(using entity DOCUMENT_FILE related with the above-mentioned entity) and uses a new location for import of the external file.

src/STEPConstruct/STEPConstruct_ExternRefs.cxx
tests/de/step_1/ZG4
tests/de/step_1/ZG5
tests/de/step_1/ZG6
tests/de/step_1/ZZ3
tests/de/step_1/ZZ4
tests/de/step_1/ZZ5
tests/de/step_1/ZZ6
tests/de/step_1/ZZ7
tests/de/step_1/ZZ8

index a390f3c..f2c110e 100644 (file)
@@ -66,6 +66,9 @@
 #include <StepShape_ShapeRepresentation.hxx>
 #include <TCollection_HAsciiString.hxx>
 #include <XSControl_WorkSession.hxx>
+#include <XSControl_TransferReader.hxx>
+#include <OSD_File.hxx>
+#include <OSD_Path.hxx>
 
 //=======================================================================
 //function : STEPConstruct_ExternRefs
@@ -395,8 +398,23 @@ Standard_CString STEPConstruct_ExternRefs::FileName (const Standard_Integer num)
       }
     }
   }
-  if ( ! aCStringFileName || ! aCStringFileName[0] ) {
-    // try to find name direct from DocFile
+  Standard_CString oldFileName = 0;
+  // compute true path to the extern file
+  OSD_Path mainfile(WS()->LoadedFile());
+  mainfile.SetName("");
+  mainfile.SetExtension("");
+  TCollection_AsciiString dpath;
+  mainfile.SystemName(dpath);
+  if (aCStringFileName && aCStringFileName[0]) {
+    TCollection_AsciiString fullname = OSD_Path::AbsolutePath(dpath, aCStringFileName);
+    if (fullname.Length() <= 0) fullname = aCStringFileName;
+    if (!OSD_File(fullname).Exists()) {
+      oldFileName = aCStringFileName;
+      aCStringFileName = 0;
+    }
+  }
+  if (!aCStringFileName || !aCStringFileName[0]) {
+    // try to find name of the directory from DocFile
     if ( !DocFile.IsNull() ) {
       Handle(TCollection_HAsciiString) aFilename = DocFile->Id();
       if (!aFilename.IsNull() && !aFilename->IsEmpty())
@@ -407,10 +425,34 @@ Standard_CString STEPConstruct_ExternRefs::FileName (const Standard_Integer num)
         aCStringFileName = aFilename->ToCString();
       }
       if ( ! aCStringFileName || ! aCStringFileName[0] ) {
-        return "";
+        if (oldFileName) {
+          aCStringFileName = oldFileName;
+        }
+        else {
+          return "";
+        }
       }
-      else 
-        return aCStringFileName;
+    }
+  }
+  TCollection_AsciiString fullname = OSD_Path::AbsolutePath(dpath, aCStringFileName);
+  if (fullname.Length() <= 0) fullname = aCStringFileName;
+  if (!OSD_File(fullname).Exists()) {
+    if (oldFileName) {
+      aCStringFileName = oldFileName;
+    }
+    Handle(Transfer_TransientProcess) aTP = WS()->TransferReader()->TransientProcess();
+    TCollection_AsciiString aMess("Can not read external file ");
+    aMess.AssignCat(aCStringFileName);
+    aTP->AddFail(DocFile, aMess.ToCString());
+  }
+  else {
+    if (oldFileName && strcmp(oldFileName, aCStringFileName) != 0) {
+      Handle(Transfer_TransientProcess) aTP = WS()->TransferReader()->TransientProcess();
+      TCollection_AsciiString aMess("External file with name from entity AEIA (");
+      aMess.AssignCat(oldFileName);
+      aMess.AssignCat(") not existed => use file name from DocumentFile entity - ");
+      aMess.AssignCat(aCStringFileName);
+      aTP->AddWarning(DocFile, aMess.ToCString());
     }
   }
   return aCStringFileName;
index 58d6e4d..f6d5b2d 100644 (file)
@@ -6,7 +6,7 @@ set filename trj4_xr1-ec-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 5 )  Warnings = 0  ( 0 )  Summary  = 0  ( 5 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 36d8920..2bfdfc5 100644 (file)
@@ -6,7 +6,7 @@ set filename trj4_xr1-id-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 5 )  Warnings = 0  ( 0 )  Summary  = 0  ( 5 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 6a4de82..bed27bf 100644 (file)
@@ -6,7 +6,7 @@ set filename trj4_xr1-pe-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 7 )  Warnings = 0  ( 0 )  Summary  = 0  ( 7 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 7 )  Warnings = 0  ( 0 )  Summary  = 0  ( 7 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index b79a203..798aaf2 100644 (file)
@@ -6,7 +6,7 @@ set filename extref.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 11 )  Warnings = 0  ( 0 )  Summary  = 0  ( 11 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 0fa2ec1..374b649 100644 (file)
@@ -6,7 +6,7 @@ set filename s1-id-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 8 )  Warnings = 0  ( 0 )  Summary  = 0  ( 8 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 480c048..4bb2e94 100644 (file)
@@ -7,7 +7,7 @@ set filename s1-pe-214-edited-update.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 9 )  Warnings = 0  ( 0 )  Summary  = 0  ( 9 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 4c66c58..65485ff 100644 (file)
@@ -7,7 +7,7 @@ set filename s1-ec-214-update.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 8 )  Warnings = 0  ( 0 )  Summary  = 0  ( 8 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index 4a19755..ffa9330 100644 (file)
@@ -7,7 +7,7 @@ set filename s1-pe-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 9 )  Warnings = 0  ( 0 )  Summary  = 0  ( 9 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
+TPSTAT      : Faulties = 0  ( 9 )  Warnings = 0  ( 0 )  Summary  = 0  ( 9 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 ) 
index aebc009..485c3ae 100644 (file)
@@ -7,7 +7,7 @@ set filename s1-tc-214.stp
 
 set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
-TPSTAT      : Faulties = 0  ( 0 )  Warnings = 0  ( 28 )  Summary  = 0  ( 28 )
+TPSTAT      : Faulties = 0  ( 8 )  Warnings = 0  ( 28 )  Summary  = 0  ( 36 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
 NBSHAPES    : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 ) 
 STATSHAPE   : Solid    = 0  ( 0 )  Shell    = 0  ( 0 )  Face     = 0  ( 0 )   FreeWire = 0  ( 0 )