0029282: Data Exchange - UpdateAssemblies is not working for located root assemblies
authorika <ika@opencascade.com>
Mon, 30 Oct 2017 15:04:12 +0000 (18:04 +0300)
committerbugmaster <bugmaster@opencascade.com>
Wed, 1 Nov 2017 14:28:26 +0000 (17:28 +0300)
Add check for located root assemblies.

src/XCAFDoc/XCAFDoc_ShapeTool.cxx
tests/bugs/xde/bug29282 [new file with mode: 0644]

index 36b0479..fac6a71 100644 (file)
@@ -998,8 +998,12 @@ void XCAFDoc_ShapeTool::UpdateAssemblies()
   // Iterate over the free shapes
   for ( TDF_LabelSequence::Iterator anIt(aRootLabels); anIt.More(); anIt.Next() )
   {
-    const TDF_Label& aRootLab = anIt.Value();
-
+    TDF_Label aRefLabel = anIt.Value();
+    if (IsReference(aRefLabel))
+    {
+      GetReferredShape(aRefLabel, aRefLabel);
+    }
+    const TDF_Label& aRootLab = aRefLabel;
     TopoDS_Shape anAssemblyShape;
     updateComponent(aRootLab, anAssemblyShape);
   }
diff --git a/tests/bugs/xde/bug29282 b/tests/bugs/xde/bug29282
new file mode 100644 (file)
index 0000000..0e78192
--- /dev/null
@@ -0,0 +1,32 @@
+puts "=========="
+puts "OCC29282"
+puts "=========="
+puts ""
+###########################################################
+# UpdateAssemblies is not worked for located root assemblies
+###########################################################
+
+pload DCAF
+
+# create test Document
+box b 1 1 1
+compound b c
+ttranslate c 0 1 0
+XNewDoc D
+XAddShape D c
+
+# replace box by another one
+box bb 2 1 1
+XSetShape D 0:1:1:3 bb
+XUpdateAssemblies D
+XGetOneShape result D
+
+# check results
+set props [vprops result]
+regexp {Mass +: +([-0-9.+eE]+).+} $props full mass
+if {$mass != "2"} {
+  puts "Error: Assemblies are not updated."
+}
+
+Close D
+