0031568: Data Exchange - invalid model produced after STEP import IR-2020-05-22
authorika <ika@opencascade.com>
Mon, 18 May 2020 13:21:22 +0000 (16:21 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 22 May 2020 16:32:21 +0000 (19:32 +0300)
Add protection against reference to reference in STEP import.

src/STEPCAFControl/STEPCAFControl_Reader.cxx
tests/bugs/step/bug31568 [new file with mode: 0644]

index 487c991..77dcf0d 100644 (file)
@@ -810,7 +810,9 @@ TDF_Label STEPCAFControl_Reader::AddShape(const TopoDS_Shape &S,
     TDF_Label subL = AddShape(Sub0, STool, NewShapesMap, ShapePDMap, PDFileMap, ShapeLabelMap);
     if (!subL.IsNull()) {
       TDF_Label instL = STool->AddComponent(L, subL, it.Value().Location());
-      ShapeLabelMap.Bind(it.Value(), instL);
+      if (!ShapeLabelMap.IsBound(it.Value())) {
+        ShapeLabelMap.Bind(it.Value(), instL);
+      }
     }
   }
   if (SHAS.Length() > 0) STool->SetExternRefs(L, SHAS);
diff --git a/tests/bugs/step/bug31568 b/tests/bugs/step/bug31568
new file mode 100644 (file)
index 0000000..67eb6a7
--- /dev/null
@@ -0,0 +1,13 @@
+puts "================================================================="
+puts "0031568: Data Exchange - invalid model produced after STEP import"
+puts "================================================================="
+
+pload DCAF
+
+ReadStep D [locate_data_file bug31568_Konecranes_Sample_3D.stp]
+set ref [XGetReferredShape D 0:1:1:41:11]
+if {$ref != "0:1:1:23"} {
+  puts "Error: wrong reference in data model"
+}
+
+Close D