From 7f536e166c716605eb625f283779da5f72b0d24f Mon Sep 17 00:00:00 2001
From: gka <galina.kulikova@opencascade.com>
Date: Wed, 31 Mar 2021 11:43:16 +0300
Subject: [PATCH] 0032264: Data Exchange - STEP exporter generates bad geometry
 [REGRESSION since 7.4.0]

Location of edge is applied to geom curve before analysis of vertices projections
---
 src/TopoDSToStep/TopoDSToStep_MakeStepEdge.cxx | 7 ++++---
 tests/bugs/step/bug32264                       | 8 ++++++++
 2 files changed, 12 insertions(+), 3 deletions(-)
 create mode 100644 tests/bugs/step/bug32264

diff --git a/src/TopoDSToStep/TopoDSToStep_MakeStepEdge.cxx b/src/TopoDSToStep/TopoDSToStep_MakeStepEdge.cxx
index 922c95313c..e6d4c0cd90 100644
--- a/src/TopoDSToStep/TopoDSToStep_MakeStepEdge.cxx
+++ b/src/TopoDSToStep/TopoDSToStep_MakeStepEdge.cxx
@@ -186,9 +186,11 @@ void TopoDSToStep_MakeStepEdge::Init(const TopoDS_Edge& aEdge,
   
   Handle(StepGeom_Curve) Gpms;
   Handle(Geom_Curve) C = CA.Curve().Curve();
+ 
   if (!C.IsNull()) {
     C = Handle(Geom_Curve)::DownCast(C->Copy());
-
+    gp_Trsf Tr1 = CA.Trsf();
+    C->Transform(Tr1);
     // Special treatment is needed for very short edges based on periodic curves.
     // Since edge in STEP does not store its parametric range, parameters are computed
     // on import by projecting vertices on a curve, and for periodic curve this may 
@@ -246,8 +248,7 @@ void TopoDSToStep_MakeStepEdge::Init(const TopoDS_Edge& aEdge,
       }
     }
 
-    gp_Trsf Tr1 = CA.Trsf();
-    C->Transform(Tr1);
+ 
     GeomToStep_MakeCurve MkCurve(C);
     Gpms = MkCurve.Value();
   }
diff --git a/tests/bugs/step/bug32264 b/tests/bugs/step/bug32264
new file mode 100644
index 0000000000..94c122ee9c
--- /dev/null
+++ b/tests/bugs/step/bug32264
@@ -0,0 +1,8 @@
+restore [locate_data_file bug32264.brep] s
+set aTmpFile "$imagedir/${casename}.brep"
+testwritestep "$aTmpFile" s
+testreadstep  "$aTmpFile" s1
+file delete   "$aTmpFile"
+checkshape s1 f
+checkmaxtol s1 -ref 1.e-7
+checkprops s1 -v 16.1759 -deps 0.01
-- 
2.20.1

