]> OCCT Git - occt.git/commitdiff
0028684: BRepOffsetAPI_MakeOffset produces wire with another orientation in compare...
authorakaftasev <akaftasev@opencascade.com>
Tue, 24 Aug 2021 19:47:18 +0000 (22:47 +0300)
committersmoskvin <stanislav.moskvin.ext@opencascade.com>
Mon, 30 Aug 2021 06:47:33 +0000 (09:47 +0300)
Added flag to reverse resulting shape, if it was reverse in BuildDomains() to bringing to the same direction as the original shape

24 files changed:
src/BRepOffsetAPI/BRepOffsetAPI_MakeOffset.cxx
tests/bugs/modalg_5/bug25298_02
tests/bugs/modalg_5/bug25334_1
tests/bugs/modalg_5/bug25334_10
tests/bugs/modalg_5/bug25334_11
tests/bugs/modalg_5/bug25334_12
tests/bugs/modalg_5/bug25334_13
tests/bugs/modalg_5/bug25334_14
tests/bugs/modalg_5/bug25334_15
tests/bugs/modalg_5/bug25334_16
tests/bugs/modalg_5/bug25334_17
tests/bugs/modalg_5/bug25334_18
tests/bugs/modalg_5/bug25334_19
tests/bugs/modalg_5/bug25334_2
tests/bugs/modalg_5/bug25334_20
tests/bugs/modalg_5/bug25334_3
tests/bugs/modalg_5/bug25334_4
tests/bugs/modalg_5/bug25334_5
tests/bugs/modalg_5/bug25334_6
tests/bugs/modalg_5/bug25334_7
tests/bugs/modalg_5/bug25334_8
tests/bugs/modalg_5/bug25334_9
tests/bugs/modalg_7/bug28684_1 [new file with mode: 0644]
tests/bugs/modalg_7/bug28684_2 [new file with mode: 0644]

index df157f5b05c08ef3f1568558b3173ccfee0cffbb..9c2565517546bf9d44b5b8c2272b7eba4d82763a 100644 (file)
@@ -138,7 +138,8 @@ static void BuildDomains(TopoDS_Face&               myFace,
                          BRepFill_ListOfOffsetWire& myAlgos,
                          GeomAbs_JoinType           myJoin,
                          Standard_Boolean           myIsOpenResult,
-                         Standard_Boolean           isPositive)
+                         Standard_Boolean           isPositive,
+                         Standard_Boolean&          isWasReversed)
 {
   BRepAlgo_FaceRestrictor  FR;
   TopoDS_Vertex            VF,VL;
@@ -164,6 +165,7 @@ static void BuildDomains(TopoDS_Face&               myFace,
           const TopoDS_Shape& W = itl.Value();
           LWires.Append(W.Reversed());
         }
+               isWasReversed = Standard_True;
         WorkWires = LWires;
     }
   }
@@ -296,13 +298,13 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
     BRep_Builder    B;
     B.MakeCompound (Res);
     myLastIsLeft = (Offset <= 0);
-
+       Standard_Boolean isWasReversed = Standard_False;
     if( Offset <= 0. )
     {
       if( myLeft.IsEmpty() )
       {
         //  Modified by Sergey KHROMOV - Fri Apr 27 14:35:26 2001 Begin
-        BuildDomains(myFace,myWires,myLeft,myJoin,myIsOpenResult, Standard_False);
+        BuildDomains(myFace,myWires,myLeft,myJoin,myIsOpenResult, Standard_False, isWasReversed);
         //  Modified by Sergey KHROMOV - Fri Apr 27 14:35:26 2001 End
       }
 
@@ -312,9 +314,9 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
         Algo.Perform(Abs(Offset),Alt);
         if (Algo.IsDone() && !Algo.Shape().IsNull())
         {
-          B.Add(Res,Algo.Shape());
+          B.Add(Res,isWasReversed ? Algo.Shape().Reversed() : Algo.Shape());
           if (i == 1)
-            myShape = Algo.Shape();
+            myShape = isWasReversed ? Algo.Shape().Reversed() : Algo.Shape();
 
           i++;
         }
@@ -325,7 +327,7 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
       if (myRight.IsEmpty())
       {
         //  Modified by Sergey KHROMOV - Fri Apr 27 14:35:28 2001 Begin
-        BuildDomains(myFace,myWires,myRight,myJoin,myIsOpenResult, Standard_True);
+        BuildDomains(myFace,myWires,myRight,myJoin,myIsOpenResult, Standard_True, isWasReversed);
         //  Modified by Sergey KHROMOV - Fri Apr 27 14:35:35 2001 End
       }
 
@@ -336,10 +338,10 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
 
         if (Algo.IsDone() && !Algo.Shape().IsNull())
         {
-          B.Add(Res,Algo.Shape());
+          B.Add(Res, isWasReversed ? Algo.Shape().Reversed() : Algo.Shape());
 
           if (i == 1)
-            myShape = Algo.Shape();
+            myShape = isWasReversed ? Algo.Shape().Reversed() : Algo.Shape();
 
           i++;
         }
index 21e1d1ea3c0036fe558125d97546d3da622c843f..940fb1d5296466a0644b48de539fa55ecf700f5d 100755 (executable)
@@ -12,11 +12,15 @@ smallview
 display a
 fit
 
+vori a
+
 if [catch { openoffset resoffset a 1 10 i } ] {
   puts "Error : mkoffset is wrong"
 } else {
   renamevar resoffset_1 result
 
+vori result
+
   checkprops result -l 159.96 
 checkshape result 
 checksection result
index ff86ea6e8cfbf71e1070d7f926c602f18ba62e89..550317e322d4b6dd272f75e273e9413e7b20ba59 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 613.39 
index 671cf6aa075a51c5fb1ad04d5b4d4246f3afcb82..8e7a28d18c70cc09c07cb5c0b7e2438ce5e213e2 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 548.106 
index cc96e58864de1d11ff819a641671a776279ef9eb..dc4e389521d1799c945a40cdcb7bc55ba90c0b4e 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 846.702 
index f937639a029cf2d4c23e0af69c78943550ae0f70..7600b09ad37377ce33411b3a9982fb033503c4d3 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 768.339 
index e5ad24cb9b06f23b6445cb5ae7648212fd57b81a..c360ed8cf3bfcf9de1a52f57e5603dfa94e43fce 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 1216.59 
index 11f3f4bc4d29a2335bf5f61c489eec0011024d12..fbeadb0c32ecfc454bb670e34becfa3fa5a74ab4 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 1132.6 
index 9ba0113c8adff5a3e2dbeefa9d8c84440fef7d09..4f0b30b83531244f2ca73db143e6ccd84f5185ce 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 1042.35 
index f628bd32e463913916bbc929de5ae11ff5dcca05..723324a7d1bbec2549b8dc88945d9f04dc882961 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 937.174 
index 758ed1dd4489f1d6a5c718d050f24ab6020c4195..7baad788dd4fc9f6d334871e7cc628e4607b1a09 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 1211.6 
index d6f6a92b836ff2c0127ec9c6edce3556269a014e..89b12722fff375d80b8384121448e1bb795ab4a4 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 1143.61 
index eb427c1928f9cb5895d3b06827606afb806d8462..93daf0877b4174bf3c298b5fcd0555731e6ee071 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 752.799 
index a210f56469bba4938645914cac4583b25031918f..3f16c789c7f620ba75b278761e9d849b26631bd8 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 644.509 
index 4159c399da1cdacebec8837a74654ab84aed1d8b..0cdeb5d8e9ea71d9f6371c95fe483061922c2dec 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 705.994 
index 5291afb78afea62fc572fa757baea8a3db4fdf91..8659654edeef8765b41526bbbe8abadf633b6f42 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 354.958 
index 4e16e92a056eb62b5bbfb3483aa9724ca66e0011..d22bb01edc594221572fc8709b57d45b250accca 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 386.077 
index e4f8abca54c193d32778cc812c8133b5795da5fb..836760ba88a3a58b90d8d7d62661238f90fae164 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 840.157 
index a7fd08bd6eabdba1121ef66b365a0db48b42efa6..a51e4e57a332c235e9966e47c198f5bc1af8262a 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 782.224 
index bfb115366a459e630538878cd33b8f92b0eeb718..2b9af4c80f24600304bc419ae95df01ec900a9a7 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 559.65 
index fed53f80d93175e56508bd73eba519da70cf173e..48d9a00a5dc00b6e0f7a698ceceb538f6cae7180 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 533.593 
index c301fc61e65bfbea65833e8d7227f6276a35644f..4bd3febef06a2286dbd4ae92e8268d5d7bf0e80b 100644 (file)
@@ -18,6 +18,9 @@ donly ww
 openoffset res ww 1 -10
 renamevar res_1 result
 
+vori ww 
+vori result
+
 fit
 
 checkprops result -l 558.479 
diff --git a/tests/bugs/modalg_7/bug28684_1 b/tests/bugs/modalg_7/bug28684_1
new file mode 100644 (file)
index 0000000..1ad83da
--- /dev/null
@@ -0,0 +1,31 @@
+puts "============"
+puts "OCC25298: Modeling Algorithms - BRepOffsetAPI_MakeOffset produces wire with another orientation in compare with source wire"
+puts "============"
+puts ""
+
+circle c 0 0 0 100
+mkedge e c
+wire a e
+
+smallview
+display a
+fit
+
+vori a
+
+if [catch { mkoffset resoffset a 1 10 } ] {
+  puts "Error : mkoffset is wrong"
+} else {
+  renamevar resoffset_1 result
+
+  vori result
+
+  checkprops result -l 691.15 
+  checkshape result 
+  checksection result
+
+  display result
+  fit
+}
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/bugs/modalg_7/bug28684_2 b/tests/bugs/modalg_7/bug28684_2
new file mode 100644 (file)
index 0000000..c7871c0
--- /dev/null
@@ -0,0 +1,31 @@
+puts "============"
+puts "OCC25298: Modeling Algorithms - BRepOffsetAPI_MakeOffset produces wire with another orientation in compare with source wire"
+puts "============"
+puts ""
+
+circle c 0 0 0 100
+mkedge e c
+wire a e
+
+smallview
+display a
+fit
+
+vori a
+
+if [catch { mkoffset resoffset a 1 -10 } ] {
+  puts "Error : mkoffset is wrong"
+} else {
+  renamevar resoffset_1 result
+
+  vori result
+
+  checkprops result -l 565.487 
+  checkshape result 
+  checksection result
+
+  display result
+  fit
+}
+
+checkview -screenshot -2d -path ${imagedir}/${test_image}.png