]> OCCT Git - occt.git/commitdiff
0033165: Data exchange - Instance name is not saved during writing step file
authorvmigunov <vmigunov@opencascade.com>
Wed, 19 Oct 2022 09:15:09 +0000 (12:15 +0300)
committersmoskvin <smoskvin@opencascade.com>
Mon, 31 Oct 2022 15:22:37 +0000 (18:22 +0300)
Instance name is saved also with identity location transformation

src/STEPControl/STEPControl_ActorWrite.cxx
tests/bugs/modalg_8/bug33165 [new file with mode: 0644]

index 6b0706c9fec6f42e5169e7c5434a9a2217315628..3caee3694141075a008f9b10e623c45ad8b30df2 100644 (file)
@@ -1595,8 +1595,10 @@ Handle(Transfer_Binder)  STEPControl_ActorWrite::TransferSubShape
   //   SINON, la shape est prise et transferee telle quelle
   TopoDS_Shape sh0 = shape;
   gp_Trsf aLoc;
+  Standard_Boolean isShapeLocated = Standard_False;
   if ( GroupMode() >0) {
     TopLoc_Location shloc = shape.Location();
+    isShapeLocated = !shloc.IsIdentity();
     aLoc = shloc.Transformation();
     TopLoc_Location shident;
     sh0.Location (shident);
@@ -1676,7 +1678,7 @@ Handle(Transfer_Binder)  STEPControl_ActorWrite::TransferSubShape
   myContext.NextIndex();
 
   // abv 16.10.00: bind CDSR (et al) to located shape in order to be able to track instances
-  if (mapper != start && aLoc.Form() != gp_Identity) {
+  if (mapper != start && isShapeLocated) {
     Handle(Transfer_Binder) bnd = FP->Find ( start );
     for ( Standard_Integer j=1; j <= roots->Length(); j++ ) 
       if ( bnd.IsNull() ) bnd = TransientResult ( roots->Value(j) );
diff --git a/tests/bugs/modalg_8/bug33165 b/tests/bugs/modalg_8/bug33165
new file mode 100644 (file)
index 0000000..acc9a45
--- /dev/null
@@ -0,0 +1,41 @@
+puts "===================================="
+puts "0033165: Data exchange - Instance name is not saved during writing step file"
+puts "===================================="
+puts ""
+
+pload OCAF XDEDRAW
+
+box b 1 1 1
+reset b
+copy b b1
+
+# set valid location with identity matrix
+reset b1
+
+ttranslate b 1 1 1
+
+compound b1 b c
+XNewDoc d
+XAddShape d c 1
+
+set label1 "0:1:1:1:1"
+set label2 "0:1:1:1:2"
+set name1 "name1"
+set name2 "name2"
+
+SetName d $label1 $name1
+SetName d $label2 $name2
+
+set file $imagedir/${test_image}.stp
+WriteStep d $file
+ReadStep d1 $file
+
+if { [GetName d1 $label1] != $name1 } {
+  puts "Error: The name is missed"
+}
+
+if { [GetName d1 $label2] != $name2 } {
+  puts "Error: The name is missed"
+}
+
+file delete -force ${file}
\ No newline at end of file