0028442: Incorrect result of 3D offset operation in mode Complete, Join type - Inters...
authoremv <emv@opencascade.com>
Thu, 9 Feb 2017 05:57:49 +0000 (08:57 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 2 Mar 2017 09:31:53 +0000 (12:31 +0300)
1. For the support of the new configurations of the input shapes for the 3D offset algorithm
(shapes containing the faces with holes, which are growing during offset operation and
sometimes (depending on the offset value) even kill the faces themselves) the new function
*FindFacesInsideHoleWires* has been implemented. This new function looks for the splits of
the offset face located inside the new hole wire built from offset edges of the edges of the
hole wires of the original face. All found splits are simply removed.

2. Test cases for the issue.

98 files changed:
src/BRepOffset/BRepOffset_MakeOffset.cxx
src/BRepOffset/BRepOffset_MakeOffset_1.cxx
src/BRepOffset/BRepOffset_Tool.cxx
src/BRepOffset/BRepOffset_Tool.hxx
tests/offset/shape_type_i_c/YA1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YA9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YB9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YC9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YD9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YE9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YF9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YG9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YH9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YI9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ4 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ5 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ6 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ7 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ8 [new file with mode: 0644]
tests/offset/shape_type_i_c/YJ9 [new file with mode: 0644]
tests/offset/shape_type_i_c/YK1 [new file with mode: 0644]
tests/offset/shape_type_i_c/YK2 [new file with mode: 0644]
tests/offset/shape_type_i_c/YK3 [new file with mode: 0644]
tests/offset/shape_type_i_c/YK4 [new file with mode: 0644]

index 2063070..80545e2 100644 (file)
@@ -264,10 +264,6 @@ static
                                 TopoDS_Shape& theResult);
 
 static 
-  Standard_Boolean CheckNormals(const TopoDS_Face& theFIm,
-                                const TopoDS_Face& theFOr);
-
-static 
   void UpdateInitOffset(BRepAlgo_Image&         myInitOffset,
                         BRepAlgo_Image&         myImageOffset,
                         const TopoDS_Shape&     myOffsetShape,
@@ -4113,7 +4109,7 @@ Standard_Boolean BuildShellsCompleteInter(const BOPCol_ListOfShape& theLF,
     TopTools_ListIteratorOfListOfShape aItLF(aLFOr);
     for (; aItLF.More(); aItLF.Next()) {
       const TopoDS_Face& aFOr = TopoDS::Face(aItLF.Value());
-      if (CheckNormals(aF, aFOr)) {
+      if (BRepOffset_Tool::CheckPlanesNormals(aF, aFOr)) {
         aLF3.Append(aF);
         break;
       }
@@ -4160,71 +4156,6 @@ Standard_Boolean GetSubShapes(const TopoDS_Shape& theShape,
 }
 
 //=======================================================================
-//function : CheckNormals
-//purpose  : Comparing normal directions of the faces
-//=======================================================================
-Standard_Boolean CheckNormals(const TopoDS_Face& theFIm,
-                              const TopoDS_Face& theFOr)
-{
-  
-  Standard_Real aUMin, aUMax, aVMin, aVMax, aU, aV, anAngle;
-  gp_Pnt aP;
-  gp_Vec aVecU, aVecV, aVNIm, aVNOr;
-  Standard_Boolean bIsCollinear;
-  //
-  BRepAdaptor_Surface aSFIm(theFIm), aSFOr(theFOr);
-  //
-  aUMin = aSFIm.FirstUParameter();
-  aUMax = aSFIm.LastUParameter();
-  aVMin = aSFIm.FirstVParameter();
-  aVMax = aSFIm.LastVParameter();
-  //
-  aU = (aUMin + aUMax) * 0.5;
-  if (Precision::IsInfinite(aUMin) && 
-      Precision::IsInfinite(aUMax)) {
-    aU = 0.;
-  }
-  else if (Precision::IsInfinite(aUMin) && 
-           !Precision::IsInfinite(aUMax)) {
-    aU = aUMax;
-  }
-  else if (!Precision::IsInfinite(aUMin) && 
-           Precision::IsInfinite(aUMax)) {
-    aU = aUMin;
-  }
-  //
-  aV = (aVMin + aVMax) * 0.5;
-  if (Precision::IsInfinite(aVMin) && 
-      Precision::IsInfinite(aVMax)) {
-    aV = 0.;
-  }
-  else if (Precision::IsInfinite(aVMin) && 
-           !Precision::IsInfinite(aVMax)) {
-    aV = aVMax;
-  }
-  else if (!Precision::IsInfinite(aVMin) && 
-           Precision::IsInfinite(aVMax)) {
-    aV = aVMin;
-  }
-  //
-  aSFIm.D1(aU, aV, aP, aVecU, aVecV);
-  aVNIm = aVecU.Crossed(aVecV);
-  if (theFIm.Orientation() == TopAbs_REVERSED) {
-    aVNIm.Reverse();
-  }
-  //
-  aSFOr.D1(aU, aV, aP, aVecU, aVecV);
-  aVNOr = aVecU.Crossed(aVecV);
-  if (theFOr.Orientation() == TopAbs_REVERSED) {
-    aVNOr.Reverse();
-  }
-  //
-  anAngle = aVNIm.Angle(aVNOr);
-  bIsCollinear = (anAngle < Precision::Confusion());
-  return bIsCollinear;
-}
-
-//=======================================================================
 //function : IsPlanar
 //purpose  : Checks if all the faces of the shape are planes
 //=======================================================================
index 7265969..826244e 100644 (file)
@@ -115,6 +115,7 @@ static
                           TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
                           TopTools_DataMapOfShapeShape& theArtInvFaces,
                           TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                          TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                           TopoDS_Shape& theSolids,
                           TopTools_DataMapOfShapeListOfShape& theSSInterfs);
 
@@ -122,6 +123,7 @@ static
   void BuildSplitsOfInvFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theFToRebuild, 
                              const TopTools_MapOfShape& theModifiedEdges,
                              TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                             TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                              TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
                              TopTools_DataMapOfShapeShape& theFacesOrigins,
                              TopTools_DataMapOfShapeListOfShape& theOEImages,
@@ -156,6 +158,7 @@ static
                         TopTools_DataMapOfShapeListOfShape& theDMFLNE,
                         TopTools_DataMapOfShapeListOfShape& theDMFLIE,
                         TopTools_DataMapOfShapeListOfShape& theDMFLVIE,
+                        TopTools_DataMapOfShapeListOfShape& theDMEOrLEIm,
                         TopTools_MapOfShape& theMEInverted,
                         TopTools_MapOfShape& theEdgesInvalidByVertex);
 
@@ -169,9 +172,21 @@ static
                         const TopTools_ListOfShape& theLEValInverted,
                         const TopTools_MapOfShape& theMEInverted,
                         const TopTools_MapOfShape& theEdgesInvalidByVertex,
+                        const TopTools_MapOfShape& theMFHoles,
+                        TopTools_IndexedMapOfShape& theMFInvInHole,
                         TopTools_ListOfShape& theInvFaces);
 
 static
+  void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
+                                const TopoDS_Face& theFOffset,
+                                const TopTools_ListOfShape& theLFImages,
+                                const TopTools_MapOfShape& theInvertedEdges,
+                                const TopTools_DataMapOfShapeListOfShape& theDMEOrLEIm,
+                                TopTools_MapOfShape& theMFHoles,
+                                TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
+                                Handle(IntTools_Context)& theContext);
+
+static
   gp_Vec GetAverageTangent(const TopoDS_Shape& theS,
                            const Standard_Integer theNbP);
 
@@ -219,6 +234,8 @@ static
                          const TopTools_DataMapOfShapeShape& theArtInvFaces,
                          const TopTools_IndexedMapOfShape& theInvEdges,
                          const TopTools_IndexedMapOfShape& theMFToCheckInt,
+                         const TopTools_IndexedMapOfShape& theMFInvInHole,
+                         const TopoDS_Shape& theFHoles,
                          TopTools_DataMapOfShapeListOfShape& theSSInterfs,
                          TopTools_IndexedMapOfShape& theMERemoved,
                          TopTools_IndexedMapOfShape& theMEInside,
@@ -278,6 +295,7 @@ static
                     const TopoDS_Shape& theSolids,
                     const TopTools_DataMapOfShapeListOfShape& theSSInterfs,
                     TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                    TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                     TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
                     TopTools_DataMapOfShapeShape& theFacesOrigins,
                     TopTools_DataMapOfShapeListOfShape& theOEImages,
@@ -636,12 +654,15 @@ void BRepOffset_MakeOffset::BuildSplitsOfExtendedFaces(const TopTools_ListOfShap
   // keep information of already invalid faces to avoid
   // infinite rebuilding of the same invalid face
   TopTools_DataMapOfShapeInteger anAlreadyInvFaces;
+  // images of the hole faces of the original faces
+  TopTools_DataMapOfShapeListOfShape aDMFNewHoles;
   // solid build from the new splits
   TopoDS_Shape aSolids;
   // now we can split the faces
   BuildSplitsOfFaces(theLF, aNewEdges, theEdgesOrigins, theAsDes, theFacesOrigins,
                      anOEImages, anOEOrigins, aLastInvEdges, anEdgesToAvoid, anInvEdges, aValidEdges,
-                     anInvertedEdges, anAlreadyInvFaces, anInvFaces, anArtInvFaces, aFImages, aSolids, aSSInterfs);
+                     anInvertedEdges, anAlreadyInvFaces, anInvFaces, anArtInvFaces, aFImages,
+                     aDMFNewHoles, aSolids, aSSInterfs);
   //
   // Find faces to rebuild
   if (anInvFaces.Extent()) {
@@ -652,9 +673,10 @@ void BRepOffset_MakeOffset::BuildSplitsOfExtendedFaces(const TopTools_ListOfShap
     if (aFToRebuild.Extent()) {
       // vertices to avoid
       TopTools_MapOfShape aVAEmpty;
-      RebuildFaces(aFToRebuild, aFSelfRebAvoid, aSolids, aSSInterfs, aFImages, theEdgesOrigins, theFacesOrigins,
-                   anOEImages, anOEOrigins, aLastInvEdges, anEdgesToAvoid, anInvEdges, aValidEdges, anInvertedEdges,
-                   anAlreadyInvFaces, anInvFaces, anArtInvFaces, aVAEmpty, theETrimEInf, theAsDes);
+      RebuildFaces(aFToRebuild, aFSelfRebAvoid, aSolids, aSSInterfs, aFImages, aDMFNewHoles,
+                   theEdgesOrigins, theFacesOrigins, anOEImages, anOEOrigins, aLastInvEdges,
+                   anEdgesToAvoid, anInvEdges, aValidEdges, anInvertedEdges, anAlreadyInvFaces,
+                   anInvFaces, anArtInvFaces, aVAEmpty, theETrimEInf, theAsDes);
     }
   }
   // Fill history for faces and edges
@@ -668,6 +690,7 @@ void BRepOffset_MakeOffset::BuildSplitsOfExtendedFaces(const TopTools_ListOfShap
 void BuildSplitsOfInvFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theFToRebuild, 
                            const TopTools_MapOfShape& theModifiedEdges,
                            TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                           TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                            TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
                            TopTools_DataMapOfShapeShape& theFacesOrigins,
                            TopTools_DataMapOfShapeListOfShape& theOEImages,
@@ -707,7 +730,8 @@ void BuildSplitsOfInvFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theF
   //
   BuildSplitsOfFaces(aLF, theModifiedEdges, theEdgesOrigins, theAsDes, theFacesOrigins, 
                      theOEImages, theOEOrigins, theLastInvEdges, theEdgesToAvoid, anInvEdges, theValidEdges, 
-                     anInvertedEdges, theAlreadyInvFaces, anInvFaces, anArtInvFaces, theFImages, aSolids, aSSInterfs);
+                     anInvertedEdges, theAlreadyInvFaces, anInvFaces, anArtInvFaces, theFImages,
+                     theDMFNewHoles, aSolids, aSSInterfs);
   //
   if (anInvFaces.Extent()) {
     TopTools_IndexedDataMapOfShapeListOfShape aFToRebuild;
@@ -715,9 +739,10 @@ void BuildSplitsOfInvFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theF
     FindFacesToRebuild(theFImages, anInvEdges, anInvFaces, aSSInterfs, aFToRebuild, aFSelfRebAvoid);
     //
     if (aFToRebuild.Extent()) {
-      RebuildFaces(aFToRebuild, aFSelfRebAvoid, aSolids, aSSInterfs, theFImages, theEdgesOrigins, theFacesOrigins,
-                   theOEImages, theOEOrigins, theLastInvEdges, theEdgesToAvoid, anInvEdges, theValidEdges, anInvertedEdges,
-                   theAlreadyInvFaces, anInvFaces, anArtInvFaces, theVertsToAvoid, theETrimEInf, theAsDes);
+      RebuildFaces(aFToRebuild, aFSelfRebAvoid, aSolids, aSSInterfs, theFImages, theDMFNewHoles,
+                   theEdgesOrigins, theFacesOrigins, theOEImages, theOEOrigins, theLastInvEdges,
+                   theEdgesToAvoid, anInvEdges, theValidEdges, anInvertedEdges, theAlreadyInvFaces,
+                   anInvFaces, anArtInvFaces, theVertsToAvoid, theETrimEInf, theAsDes);
     }
   }
 }
@@ -743,6 +768,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
                         TopTools_IndexedDataMapOfShapeListOfShape& theInvFaces,
                         TopTools_DataMapOfShapeShape& theArtInvFaces,
                         TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                        TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                         TopoDS_Shape& theSolids,
                         TopTools_DataMapOfShapeListOfShape& theSSInterfs)
 {
@@ -767,6 +793,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
   TopTools_IndexedMapOfShape aMFToCheckInt;
   // map of edges created from vertex and marked as invalid
   TopTools_MapOfShape aMEdgeInvalidByVertex;
+  // connection map from old edges to new ones
+  TopTools_DataMapOfShapeListOfShape aDMEOrLEIm;
   //
   Handle(IntTools_Context) aCtx = new IntTools_Context;
   // build splits of faces
@@ -877,7 +905,7 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
     // find invalid edges
     FindInvalidEdges(aF, aLFImages, theEdgesOrigins, theFacesOrigins, theOEImages,
                      theOEOrigins, theInvEdges, theValidEdges, aDMFLVE, aDMFLNE, aDMFLIE,
-                     aDMFLVIE, theInvertedEdges, aMEdgeInvalidByVertex);
+                     aDMFLVIE, aDMEOrLEIm, theInvertedEdges, aMEdgeInvalidByVertex);
     //
     // save the new splits
     if (!pLFIm) {
@@ -922,11 +950,16 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
 #endif
   //
   TopTools_ListOfShape anEmptyList;
+  // invalid faces inside the holes
+  TopTools_IndexedMapOfShape aMFInvInHole;
+  // all hole faces
+  TopoDS_Compound aFHoles;
+  aBB.MakeCompound(aFHoles);
   // find invalid faces
   // considering faces containing only invalid edges as invalid
   aItLF.Initialize(aLFDone);
   for (; aItLF.More(); aItLF.Next()) {
-    const TopoDS_Shape& aF = aItLF.Value();
+    const TopoDS_Face& aF = TopoDS::Face(aItLF.Value());
     TopTools_ListOfShape& aLFImages = theFImages.ChangeFromKey(aF);
     //
     TopTools_ListOfShape aLFInv;
@@ -946,8 +979,21 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
         pLIVE = &anEmptyList;
       }
       //
+      // find faces inside holes wires
+      TopTools_MapOfShape aMFHoles;
+      const TopoDS_Face& aFOr = TopoDS::Face(theFacesOrigins.Find(aF));
+      FindFacesInsideHoleWires(aFOr, aF, aLFImages, theInvertedEdges,
+                               aDMEOrLEIm, aMFHoles, theDMFNewHoles, aCtx);
+      //
+      TopTools_MapIteratorOfMapOfShape aItMH(aMFHoles);
+      for (; aItMH.More(); aItMH.Next()) {
+        aBB.Add(aFHoles, aItMH.Value());
+      }
+      //
+      // find invalid faces
       FindInvalidFaces(aLFImages, theInvEdges, theValidEdges, aDMFLVE, aDMFLIE,
-                       *pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex, aLFInv);
+                       *pLNE, *pLIVE, theInvertedEdges, aMEdgeInvalidByVertex,
+                       aMFHoles, aMFInvInHole, aLFInv);
     }
     //
     if (aLFInv.Extent()) {
@@ -999,7 +1045,8 @@ void BuildSplitsOfFaces(const TopTools_ListOfShape& theLF,
   // remove inside faces
   TopTools_IndexedMapOfShape aMEInside;
   RemoveInsideFaces(theFImages, theInvFaces, theArtInvFaces, theInvEdges,
-                    aMFToCheckInt, theSSInterfs, aMERemoved, aMEInside, theSolids);
+                    aMFToCheckInt, aMFInvInHole, aFHoles, theSSInterfs,
+                    aMERemoved, aMEInside, theSolids);
   //
   // make compound of valid splits
   TopoDS_Compound aCFIm;
@@ -1426,6 +1473,7 @@ void FindInvalidEdges(const TopoDS_Face& theF,
                       TopTools_DataMapOfShapeListOfShape& theDMFLNE,
                       TopTools_DataMapOfShapeListOfShape& theDMFLIE,
                       TopTools_DataMapOfShapeListOfShape& theDMFLVIE,
+                      TopTools_DataMapOfShapeListOfShape& theDMEOrLEIm,
                       TopTools_MapOfShape& theMEInverted,
                       TopTools_MapOfShape& theEdgesInvalidByVertex)
 {
@@ -1436,7 +1484,8 @@ void FindInvalidEdges(const TopoDS_Face& theF,
   // The edges created from vertices, i.e. as intersection between two faces connected only
   // by VERTEX, will also be checked on validity. For these edges the correct orientation will
   // be defined by the edges on the original face adjacent to the connection vertex
-  //
+
+  // original face
   const TopoDS_Face& aFOr = *(TopoDS_Face*)&theFacesOrigins.Find(theF);
   // invalid edges
   TopTools_IndexedMapOfShape aMEInv;
@@ -1558,6 +1607,12 @@ void FindInvalidEdges(const TopoDS_Face& theF,
         }
         else {
           FindShape(aSOr, aFOr, aEOrF);
+          //
+          TopTools_ListOfShape *pLEIm = theDMEOrLEIm.ChangeSeek(aSOr);
+          if (!pLEIm) {
+            pLEIm = theDMEOrLEIm.Bound(aSOr, TopTools_ListOfShape());
+          }
+          AppendToList(*pLEIm, aEIm);
         }
         //
         if (aEOrF.IsNull()) {
@@ -1707,6 +1762,8 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
                       const TopTools_ListOfShape& theLEValInverted,
                       const TopTools_MapOfShape& theMEInverted,
                       const TopTools_MapOfShape& theEdgesInvalidByVertex,
+                      const TopTools_MapOfShape& theMFHoles,
+                      TopTools_IndexedMapOfShape& theMFInvInHole,
                       TopTools_ListOfShape& theInvFaces)
 {
   // The face should be considered as invalid in the following cases:
@@ -1827,10 +1884,21 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
                              !(bHasValid || bAllValid) &&
                              !(bAllInvNeutral && (aNbChecked == 1)))) {
       theInvFaces.Append(aFIm);
+      if (theMFHoles.Contains(aFIm)) {
+        theMFInvInHole.Add(aFIm);
+      }
       aItLF.Next();
       continue;
     }
     //
+    if (theMFHoles.Contains(aFIm)) {
+      // remove edges from neutral
+      TopExp::MapShapes(aFIm, TopAbs_EDGE, aMENRem);
+      // remove face
+      theLFImages.Remove(aItLF);
+      continue;
+    }
+    //
     if (!bAllInvNeutral) {
       aLFPT.Append(aFIm);
     }
@@ -1899,6 +1967,159 @@ void FindInvalidFaces(TopTools_ListOfShape& theLFImages,
 }
 
 //=======================================================================
+//function : FindFacesInsideHoleWires
+//purpose  : Find faces inside holes wires from the original face
+//=======================================================================
+void FindFacesInsideHoleWires(const TopoDS_Face& theFOrigin,
+                              const TopoDS_Face& theFOffset,
+                              const TopTools_ListOfShape& theLFImages,
+                              const TopTools_MapOfShape& theInvertedEdges,
+                              const TopTools_DataMapOfShapeListOfShape& theDMEOrLEIm,
+                              TopTools_MapOfShape& theMFHoles,
+                              TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
+                              Handle(IntTools_Context)& theContext)
+{
+  if (theLFImages.IsEmpty()) {
+    return;
+  }
+  //
+  // find all hole wires in the original face
+  TopTools_ListOfShape aLHoleWires;
+  const TopoDS_Wire& anOuterWire = BRepTools::OuterWire(theFOrigin);
+  TopExp_Explorer aExpW(theFOrigin, TopAbs_WIRE);
+  for (; aExpW.More(); aExpW.Next()) {
+    const TopoDS_Wire& aHoleWire = TopoDS::Wire(aExpW.Current());
+    if (!aHoleWire.IsSame(anOuterWire) && aHoleWire.Orientation() != TopAbs_INTERNAL) {
+      aLHoleWires.Append(aHoleWire);
+    }
+  }
+  //
+  if (aLHoleWires.IsEmpty()) {
+    // no holes in the face
+    return;
+  }
+  //
+  TopTools_ListOfShape *pLFNewHoles = theDMFNewHoles.ChangeSeek(theFOrigin);
+  //
+  if (!pLFNewHoles) {
+    pLFNewHoles = theDMFNewHoles.Bound(theFOrigin, TopTools_ListOfShape());
+  }
+  if (pLFNewHoles->IsEmpty()) {
+    //
+    // find the faces representing holes in the images of the faces:
+    // 1. for each original hole wire try to build its image
+    // 2. build the new planar face from the images
+    //
+    // map vertices and edges of the splits
+    TopTools_IndexedMapOfShape aMESplits;
+    TopTools_ListIteratorOfListOfShape aItLF(theLFImages);
+    for (; aItLF.More(); aItLF.Next()) {
+      TopExp::MapShapes(aItLF.Value(), TopAbs_EDGE, aMESplits);
+    }
+    //
+    TopTools_ListIteratorOfListOfShape aItLW(aLHoleWires);
+    for (; aItLW.More(); aItLW.Next()) {
+      const TopoDS_Wire& aHoleWire = TopoDS::Wire(aItLW.Value());
+      // find images of all edges of the original wire
+      TopTools_IndexedMapOfShape aMEImWire;
+      TopoDS_Iterator aItE(aHoleWire);
+      for (; aItE.More(); aItE.Next()) {
+        const TopoDS_Shape& aEOr = aItE.Value();
+        const TopTools_ListOfShape *pLEIm = theDMEOrLEIm.Seek(aEOr);
+        if (!pLEIm || pLEIm->IsEmpty()) {
+          continue;
+        }
+        TopTools_ListIteratorOfListOfShape aItLEIm(*pLEIm);
+        for (; aItLEIm.More(); aItLEIm.Next()) {
+          const TopoDS_Shape& aEIm = aItLEIm.Value();
+          if (aMESplits.Contains(aEIm)) {
+            aMEImWire.Add(aEIm);
+          }
+        }
+      }
+      //
+      if (aMEImWire.IsEmpty()) {
+        continue;
+      }
+      //
+      // build new planar face using these edges
+      BOPCol_ListOfShape aLE;
+      Standard_Integer i, aNbE = aMEImWire.Extent();
+      for (i = 1; i <= aNbE; ++i) {
+        aLE.Append(aMEImWire(i).Oriented(TopAbs_FORWARD));
+        aLE.Append(aMEImWire(i).Oriented(TopAbs_REVERSED));
+      }
+      //
+      BOPAlgo_BuilderFace aBF;
+      aBF.SetFace(TopoDS::Face(theFOffset.Oriented(TopAbs_FORWARD)));
+      aBF.SetShapes(aLE);
+      aBF.Perform();
+      //
+      const BOPCol_ListOfShape& aLFNew = aBF.Areas();
+      if (aLFNew.IsEmpty()) {
+        continue;
+      }
+      //
+      // check if outer edges in the new faces are not inverted
+      // because the inverted edges mean that the hole has been
+      // filled during offset and there will be no faces to remove
+      TopTools_IndexedDataMapOfShapeListOfShape aDMEFNew;
+      TopTools_ListIteratorOfListOfShape aItLFNew(aLFNew);
+      for (; aItLFNew.More(); aItLFNew.Next()) {
+        TopExp::MapShapesAndAncestors(aItLFNew.Value(), TopAbs_EDGE, TopAbs_FACE, aDMEFNew);
+      }
+      //
+      aNbE = aDMEFNew.Extent();
+      for (i = 1; i <= aNbE; ++i) {
+        if (aDMEFNew(i).Extent() == 1) {
+          const TopoDS_Shape& aE = aDMEFNew.FindKey(i);
+          if (theInvertedEdges.Contains(aE)) {
+            break;
+          }
+        }
+      }
+      //
+      if (i <= aNbE) {
+        continue;
+      }
+      //
+      aItLFNew.Initialize(aLFNew);
+      for (; aItLFNew.More(); aItLFNew.Next()) {
+        pLFNewHoles->Append(aItLFNew.Value());
+      }
+    }
+  }
+  //
+  // among the splits of the offset face find those that are
+  // located inside the hole faces
+  //
+  TopTools_ListIteratorOfListOfShape aItLF(theLFImages);
+  for (; aItLF.More(); aItLF.Next()) {
+    const TopoDS_Face& aFIm = TopoDS::Face(aItLF.Value());
+    //
+    // get the point inside the face and classify it relatively hole faces
+    gp_Pnt aP3D;
+    gp_Pnt2d aP2D;
+    Standard_Integer iErr = BOPTools_AlgoTools3D::PointInFace(aFIm, aP3D, aP2D, theContext);
+    if (iErr) {
+      continue;
+    }
+    //
+    Standard_Real aTol = BRep_Tool::Tolerance(aFIm);
+    //
+    TopTools_ListIteratorOfListOfShape aItLFNew(*pLFNewHoles);
+    for (; aItLFNew.More(); aItLFNew.Next()) {
+      const TopoDS_Face& aFNew = TopoDS::Face(aItLFNew.Value());
+      if (theContext->IsValidPointForFace(aP3D, aFNew, aTol)) {
+        // the face is classified as IN
+        theMFHoles.Add(aFIm);
+        break;
+      }
+    }
+  }
+}
+
+//=======================================================================
 //function : GetAverageTangent
 //purpose  : Computes average tangent vector along the curve
 //=======================================================================
@@ -2570,6 +2791,8 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
                        const TopTools_DataMapOfShapeShape& theArtInvFaces,
                        const TopTools_IndexedMapOfShape& theInvEdges,
                        const TopTools_IndexedMapOfShape& theMFToCheckInt,
+                       const TopTools_IndexedMapOfShape& theMFInvInHole,
+                       const TopoDS_Shape& theFHoles,
                        TopTools_DataMapOfShapeListOfShape& theSSInterfs,
                        TopTools_IndexedMapOfShape& theMERemoved,
                        TopTools_IndexedMapOfShape& theMEInside,
@@ -2646,8 +2869,12 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
   // to check them on validity - the created solids should be complete,
   // i.e. all faces should be included.
   //
+  TopTools_MapOfShape aMFToRem;
   // Check completeness
   if (aMV.HasDeleted()) {
+    TopTools_IndexedMapOfShape aMEHoles;
+    TopExp::MapShapes(theFHoles, TopAbs_EDGE, aMEHoles);
+    //
     // perform additional check on faces
     aNb = theFImages.Extent();
     for (i = 1; i <= aNb; ++i) {
@@ -2656,21 +2883,31 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
         continue;
       }
       //
+      Standard_Boolean bFaceKept = Standard_False;
       aItLF.Initialize(aLFIm);
       for (; aItLF.More(); aItLF.Next()) {
         const TopoDS_Shape& aFIm = aItLF.Value();
         if (!aMV.IsDeleted(aFIm)) {
-          break;
+          bFaceKept = Standard_True;
+          continue;
+        }
+        //
+        TopExp_Explorer aExpE(aFIm, TopAbs_EDGE);
+        for (; aExpE.More(); aExpE.Next()) {
+          if (aMEHoles.Contains(aExpE.Current())) {
+            bFaceKept = Standard_True;
+            aMFToRem.Add(aFIm);
+            break;
+          }
         }
       }
       //
-      if (!aItLF.More()) {
+      if (!bFaceKept) {
         return;
       }
     }
   }
   //
-  TopTools_MapOfShape aMFToRem;
   TopTools_IndexedMapOfShape aMEBoundary;
   aNb = aDMFS.Extent();
   for (i = 1; i <= aNb; ++i) {
@@ -2696,6 +2933,43 @@ void RemoveInsideFaces(TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
     }
   }
   //
+  // check if the invalid faces inside the holes are really invalid:
+  // check its normal direction - if it has changed relatively the
+  // original face the offset face is invalid and should be kept for rebuilding
+  Standard_Integer aNbFH = theMFInvInHole.Extent();
+  for (i = 1; i <= aNbFH; ++i) {
+    const TopoDS_Shape& aFInv = theMFInvInHole(i);
+    TopTools_ListOfShape aLFInvIm = aMV.Modified(aFInv);
+    if (aLFInvIm.IsEmpty()) {
+      aLFInvIm.Append(aFInv);
+    }
+    //
+    const TopoDS_Shape *pFOffset = aDMFImF.Seek(aFInv);
+    if (!pFOffset) {
+      continue;
+    }
+    TopTools_ListIteratorOfListOfShape aItLFInv(aLFInvIm);
+    for (; aItLFInv.More(); aItLFInv.Next()) {
+      const TopoDS_Shape& aFInvIm = aItLFInv.Value();
+      const TopTools_ListOfShape* pLSols = aDMFS.Seek(aFInvIm);
+      if (!pLSols || pLSols->Extent() != 1) {
+        continue;
+      }
+      //
+      const TopoDS_Shape& aFSol = pLSols->First();
+      //
+      TopoDS_Shape aFx;
+      if (!FindShape(aFInvIm, aFSol, aFx)) {
+        continue;
+      }
+      //
+      if (BRepOffset_Tool::CheckPlanesNormals(TopoDS::Face(aFx), TopoDS::Face(*pFOffset))) {
+        // the normal direction has not changed, thus the face can be removed
+        aMFToRem.Add(aFInvIm);
+      }
+    }
+  }
+  //
   TopoDS_Compound aSolids;
   BRep_Builder().MakeCompound(aSolids);
   TopTools_MapOfShape aMFKeep;
@@ -3420,6 +3694,7 @@ void RebuildFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theFToRebuild
                   const TopoDS_Shape& theSolids,
                   const TopTools_DataMapOfShapeListOfShape& theSSInterfs,
                   TopTools_IndexedDataMapOfShapeListOfShape& theFImages,
+                  TopTools_DataMapOfShapeListOfShape& theDMFNewHoles,
                   TopTools_DataMapOfShapeListOfShape& theEdgesOrigins,
                   TopTools_DataMapOfShapeShape& theFacesOrigins,
                   TopTools_DataMapOfShapeListOfShape& theOEImages,
@@ -3444,7 +3719,7 @@ void RebuildFaces(const TopTools_IndexedDataMapOfShapeListOfShape& theFToRebuild
                  theInvFaces, theArtInvFaces, theVertsToAvoid, theETrimEInf, aModifiedEdges, theAsDes);
   //
   // 2. Repeat steps to build the correct faces
-  BuildSplitsOfInvFaces(theFToRebuild, aModifiedEdges, theFImages, theEdgesOrigins,
+  BuildSplitsOfInvFaces(theFToRebuild, aModifiedEdges, theFImages, theDMFNewHoles, theEdgesOrigins,
                         theFacesOrigins, theOEImages, theOEOrigins, theLastInvEdges,
                         theEdgesToAvoid, theVertsToAvoid, theAlreadyInvFaces, theValidEdges, 
                         theETrimEInf, theAsDes);
index 4c8b98c..e7488cd 100644 (file)
@@ -4022,5 +4022,30 @@ void BRepOffset_Tool::CorrectOrientation(const TopoDS_Shape&        SI,
 
 }
 
-
-
+//=======================================================================
+//function : CheckNormals
+//purpose  : 
+//=======================================================================
+Standard_Boolean BRepOffset_Tool::CheckPlanesNormals(const TopoDS_Face& theFace1,
+                                                     const TopoDS_Face& theFace2,
+                                                     const Standard_Real theTolAng)
+{
+  BRepAdaptor_Surface aBAS1(theFace1, Standard_False), aBAS2(theFace2, Standard_False);
+  if (aBAS1.GetType() != GeomAbs_Plane ||
+      aBAS2.GetType() != GeomAbs_Plane) {
+    return Standard_False;
+  }
+  //
+  gp_Dir aDN1 = aBAS1.Plane().Position().Direction();
+  if (theFace1.Orientation() == TopAbs_REVERSED) {
+    aDN1.Reverse();
+  }
+  //
+  gp_Dir aDN2 = aBAS2.Plane().Position().Direction();
+  if (theFace2.Orientation() == TopAbs_REVERSED) {
+    aDN2.Reverse();
+  }
+  //
+  Standard_Real anAngle = aDN1.Angle(aDN2);
+  return (anAngle < theTolAng);
+}
index c4d9e3f..25ad516 100644 (file)
@@ -132,27 +132,16 @@ public:
   
   Standard_EXPORT static Standard_Real Gabarit (const Handle(Geom_Curve)& aCurve);
 
-
-
+  //! Compares the normal directions of the planar faces and returns
+  //! TRUE if the directions are the same with the given precision.<br>
+  Standard_EXPORT static Standard_Boolean CheckPlanesNormals(const TopoDS_Face& theFace1,
+                                                             const TopoDS_Face& theFace2,
+                                                             const Standard_Real theTolAng = 1.e-8);
 
 protected:
 
-
-
-
-
 private:
 
-
-
-
-
 };
 
-
-
-
-
-
-
 #endif // _BRepOffset_Tool_HeaderFile
diff --git a/tests/offset/shape_type_i_c/YA1 b/tests/offset/shape_type_i_c/YA1
new file mode 100644 (file)
index 0000000..7548af0
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_input.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 100
+  }
+}
+offsetperform result
+
+checkprops result -v 1.41675e+007 -s 507751
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA2 b/tests/offset/shape_type_i_c/YA2
new file mode 100644 (file)
index 0000000..ac989c6
--- /dev/null
@@ -0,0 +1,10 @@
+restore [locate_data_file bug28442_input.brep] s
+
+OFFSETSHAPE 130 {} $calcul $type
+
+checkprops result -v 1.31751e+008 -s 1.66862e+006
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 11 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA3 b/tests/offset/shape_type_i_c/YA3
new file mode 100644 (file)
index 0000000..68e8bfd
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.5
+  }
+}
+offsetperform result
+
+checkprops result -v 406.625 -s 605.617
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA4 b/tests/offset/shape_type_i_c/YA4
new file mode 100644 (file)
index 0000000..e870059
--- /dev/null
@@ -0,0 +1,10 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+OFFSETSHAPE 1.5 {} $calcul $type
+
+checkprops result -v 1504.61 -s 1006.51
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA5 b/tests/offset/shape_type_i_c/YA5
new file mode 100644 (file)
index 0000000..e6d76b9
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.5
+  }
+}
+offsetperform result
+
+checkprops result -v 483.996 -s 587.42
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA6 b/tests/offset/shape_type_i_c/YA6
new file mode 100644 (file)
index 0000000..fa9e6f4
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple6.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.5
+  }
+}
+offsetperform result
+
+checkprops result -v 484.958 -s 589.936
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA7 b/tests/offset/shape_type_i_c/YA7
new file mode 100644 (file)
index 0000000..ad79614
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_input.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 130
+  }
+}
+offsetperform result
+
+checkprops result -v 1.57185e+007 -s 547937
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA8 b/tests/offset/shape_type_i_c/YA8
new file mode 100644 (file)
index 0000000..4c26b2a
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_input.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 150
+  }
+}
+offsetperform result
+
+checkprops result -v 1.67576e+007 -s 563859
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YA9 b/tests/offset/shape_type_i_c/YA9
new file mode 100644 (file)
index 0000000..62c0ae2
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_input.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 180
+  }
+}
+offsetperform result
+
+checkprops result -v 1.836e+007 -s 577200
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB1 b/tests/offset/shape_type_i_c/YB1
new file mode 100644 (file)
index 0000000..88e9619
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_input.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 210
+  }
+}
+offsetperform result
+
+checkprops result -v 1.998e+007 -s 618600
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB2 b/tests/offset/shape_type_i_c/YB2
new file mode 100644 (file)
index 0000000..141066b
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.9
+  }
+}
+offsetperform result
+
+checkprops result -v 465.053 -s 629.882
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB3 b/tests/offset/shape_type_i_c/YB3
new file mode 100644 (file)
index 0000000..d0b3cfe
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.3
+  }
+}
+offsetperform result
+
+checkprops result -v 524.605 -s 649.688
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB4 b/tests/offset/shape_type_i_c/YB4
new file mode 100644 (file)
index 0000000..a2df456
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.6
+  }
+}
+offsetperform result
+
+checkprops result -v 570.493 -s 664.008
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB5 b/tests/offset/shape_type_i_c/YB5
new file mode 100644 (file)
index 0000000..e287ef3
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2
+  }
+}
+offsetperform result
+
+checkprops result -v 633.44 -s 682.386
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB6 b/tests/offset/shape_type_i_c/YB6
new file mode 100644 (file)
index 0000000..53e4db3
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.5
+  }
+}
+offsetperform result
+
+checkprops result -v 716.909 -s 682.741
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB7 b/tests/offset/shape_type_i_c/YB7
new file mode 100644 (file)
index 0000000..4bdc405
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 901.771 -s 692.252
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB8 b/tests/offset/shape_type_i_c/YB8
new file mode 100644 (file)
index 0000000..7210a85
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4
+  }
+}
+offsetperform result
+
+checkprops result -v 1000 -s 700
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YB9 b/tests/offset/shape_type_i_c/YB9
new file mode 100644 (file)
index 0000000..9181706
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.3
+  }
+}
+offsetperform result
+
+checkprops result -v 1060 -s 718
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC1 b/tests/offset/shape_type_i_c/YC1
new file mode 100644 (file)
index 0000000..5eea3a1
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.4 
+  }
+}
+offsetperform result
+
+checkprops result -v 541.772 -s 665.099
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC2 b/tests/offset/shape_type_i_c/YC2
new file mode 100644 (file)
index 0000000..dad83cc
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.8 
+  }
+}
+offsetperform result
+
+checkprops result -v 604.464 -s 682.853
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC3 b/tests/offset/shape_type_i_c/YC3
new file mode 100644 (file)
index 0000000..5a470c6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2 
+  }
+}
+offsetperform result
+
+checkprops result -v 636.296 -s 691.505
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC4 b/tests/offset/shape_type_i_c/YC4
new file mode 100644 (file)
index 0000000..ef7f6b6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 901.771 -s 692.252
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC5 b/tests/offset/shape_type_i_c/YC5
new file mode 100644 (file)
index 0000000..58269a1
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4
+  }
+}
+offsetperform result
+
+checkprops result -v 1000 -s 700
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC6 b/tests/offset/shape_type_i_c/YC6
new file mode 100644 (file)
index 0000000..c897768
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple1.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1100 -s 730
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC7 b/tests/offset/shape_type_i_c/YC7
new file mode 100644 (file)
index 0000000..96c18f7
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.1
+  }
+}
+offsetperform result
+
+checkprops result -v 576.314 -s 626.227
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC8 b/tests/offset/shape_type_i_c/YC8
new file mode 100644 (file)
index 0000000..5323575
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.8
+  }
+}
+offsetperform result
+
+checkprops result -v 682.107 -s 668.86
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YC9 b/tests/offset/shape_type_i_c/YC9
new file mode 100644 (file)
index 0000000..fe98a92
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.3
+  }
+}
+offsetperform result
+
+checkprops result -v 757.26 -s 696.397
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 19 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD1 b/tests/offset/shape_type_i_c/YD1
new file mode 100644 (file)
index 0000000..8592b9f
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.2
+  }
+}
+offsetperform result
+
+checkprops result -v 895.772 -s 734.031
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD2 b/tests/offset/shape_type_i_c/YD2
new file mode 100644 (file)
index 0000000..210d93a
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1061.61 -s 762.644
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD3 b/tests/offset/shape_type_i_c/YD3
new file mode 100644 (file)
index 0000000..aab7d82
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.7
+  }
+}
+offsetperform result
+
+checkprops result -v 1150.96 -s 775.193
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD4 b/tests/offset/shape_type_i_c/YD4
new file mode 100644 (file)
index 0000000..fc3b1ff
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple2.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1244.51 -s 790.347
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD5 b/tests/offset/shape_type_i_c/YD5
new file mode 100644 (file)
index 0000000..a5eeb6e
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.2
+  }
+}
+offsetperform result
+
+checkprops result -v 437.086 -s 567.751
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD6 b/tests/offset/shape_type_i_c/YD6
new file mode 100644 (file)
index 0000000..97e2638
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.5
+  }
+}
+offsetperform result
+
+checkprops result -v 638.971 -s 643.477
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD7 b/tests/offset/shape_type_i_c/YD7
new file mode 100644 (file)
index 0000000..f376ca1
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.5
+  }
+}
+offsetperform result
+
+checkprops result -v 796.631 -s 688.189
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD8 b/tests/offset/shape_type_i_c/YD8
new file mode 100644 (file)
index 0000000..137b0cd
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.6
+  }
+}
+offsetperform result
+
+checkprops result -v 980.046 -s 732.882
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YD9 b/tests/offset/shape_type_i_c/YD9
new file mode 100644 (file)
index 0000000..156c1c0
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1084.24 -s 760.754
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 19 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE1 b/tests/offset/shape_type_i_c/YE1
new file mode 100644 (file)
index 0000000..ff32f12
--- /dev/null
@@ -0,0 +1,33 @@
+puts "TODO OCC27414 ALL: Error: The command cannot be built"
+puts "TODO OCC27414 ALL: Tcl Exception"
+puts "TODO OCC27414 ALL: TEST INCOMPLETE"
+
+
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5
+  }
+}
+offsetperform result
+
+checkprops result -v 1226.52 -s 799.334
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 13 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE2 b/tests/offset/shape_type_i_c/YE2
new file mode 100644 (file)
index 0000000..60bc252
--- /dev/null
@@ -0,0 +1,33 @@
+puts "TODO OCC27414 ALL: Error: The command cannot be built"
+puts "TODO OCC27414 ALL: Tcl Exception"
+puts "TODO OCC27414 ALL: TEST INCOMPLETE"
+
+
+restore [locate_data_file bug28442_simple3.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 6
+  }
+}
+offsetperform result
+
+checkprops result -v 0 -s 0
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 13 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE3 b/tests/offset/shape_type_i_c/YE3
new file mode 100644 (file)
index 0000000..2068e40
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.8
+  }
+}
+offsetperform result
+
+checkprops result -v 508.318 -s 619.149
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE4 b/tests/offset/shape_type_i_c/YE4
new file mode 100644 (file)
index 0000000..a822e95
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.4
+  }
+}
+offsetperform result
+
+checkprops result -v 593.919 -s 655.117
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE5 b/tests/offset/shape_type_i_c/YE5
new file mode 100644 (file)
index 0000000..cd729b2
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.7
+  }
+}
+offsetperform result
+
+checkprops result -v 636.586 -s 669.86
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE6 b/tests/offset/shape_type_i_c/YE6
new file mode 100644 (file)
index 0000000..b456330
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.7
+  }
+}
+offsetperform result
+
+checkprops result -v 783.404 -s 711.46
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE7 b/tests/offset/shape_type_i_c/YE7
new file mode 100644 (file)
index 0000000..1318ea6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 914.348 -s 717.153
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE8 b/tests/offset/shape_type_i_c/YE8
new file mode 100644 (file)
index 0000000..00a4ce5
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple4.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1100.29 -s 736.424
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YE9 b/tests/offset/shape_type_i_c/YE9
new file mode 100644 (file)
index 0000000..a99ee9d
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.9
+  }
+}
+offsetperform result
+
+checkprops result -v 522.676 -s 625.27
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF1 b/tests/offset/shape_type_i_c/YF1
new file mode 100644 (file)
index 0000000..63ec862
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.2
+  }
+}
+offsetperform result
+
+checkprops result -v 565.605 -s 642.455
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 19 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF2 b/tests/offset/shape_type_i_c/YF2
new file mode 100644 (file)
index 0000000..d7316c6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2
+  }
+}
+offsetperform result
+
+checkprops result -v 680.704 -s 684.886
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF3 b/tests/offset/shape_type_i_c/YF3
new file mode 100644 (file)
index 0000000..1b7f9ea
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.7
+  }
+}
+offsetperform result
+
+checkprops result -v 784.337 -s 712.928
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF4 b/tests/offset/shape_type_i_c/YF4
new file mode 100644 (file)
index 0000000..bde3778
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3
+  }
+}
+offsetperform result
+
+checkprops result -v 831.255 -s 714.751
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF5 b/tests/offset/shape_type_i_c/YF5
new file mode 100644 (file)
index 0000000..73d428a
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 914.786 -s 720.359
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF6 b/tests/offset/shape_type_i_c/YF6
new file mode 100644 (file)
index 0000000..ae32f23
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple5.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.7
+  }
+}
+offsetperform result
+
+checkprops result -v 1140 -s 742
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF7 b/tests/offset/shape_type_i_c/YF7
new file mode 100644 (file)
index 0000000..db0422d
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple6.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1
+  }
+}
+offsetperform result
+
+checkprops result -v 560.833 -s 623.318
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF8 b/tests/offset/shape_type_i_c/YF8
new file mode 100644 (file)
index 0000000..df9f1ea
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple6.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.5
+  }
+}
+offsetperform result
+
+checkprops result -v 635.5 -s 653.92
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 19 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YF9 b/tests/offset/shape_type_i_c/YF9
new file mode 100644 (file)
index 0000000..d2aed4f
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple6.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3
+  }
+}
+offsetperform result
+
+checkprops result -v 858.491 -s 730.878
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 17 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG1 b/tests/offset/shape_type_i_c/YG1
new file mode 100644 (file)
index 0000000..fc088e6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple6.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 937.546 -s 742.895
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG2 b/tests/offset/shape_type_i_c/YG2
new file mode 100644 (file)
index 0000000..26952d2
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple7.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 0.9
+  }
+}
+offsetperform result
+
+checkprops result -v 532.498 -s 625.58
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG3 b/tests/offset/shape_type_i_c/YG3
new file mode 100644 (file)
index 0000000..f03f706
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple7.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.3
+  }
+}
+offsetperform result
+
+checkprops result -v 591.624 -s 647.796
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG4 b/tests/offset/shape_type_i_c/YG4
new file mode 100644 (file)
index 0000000..abf8431
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple7.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 1.7
+  }
+}
+offsetperform result
+
+checkprops result -v 650.813 -s 669.163
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG5 b/tests/offset/shape_type_i_c/YG5
new file mode 100644 (file)
index 0000000..091b40a
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple7.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3
+  }
+}
+offsetperform result
+
+checkprops result -v 849.197 -s 722.694
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG6 b/tests/offset/shape_type_i_c/YG6
new file mode 100644 (file)
index 0000000..14d11ef
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple7.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4
+  }
+}
+offsetperform result
+
+checkprops result -v 1016.84 -s 750.316
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 18 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG7 b/tests/offset/shape_type_i_c/YG7
new file mode 100644 (file)
index 0000000..14a5152
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1446.71 -s 1074.67
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 25 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG8 b/tests/offset/shape_type_i_c/YG8
new file mode 100644 (file)
index 0000000..5342e03
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5
+  }
+}
+offsetperform result
+
+checkprops result -v 1837.67 -s 1118.82
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 24 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YG9 b/tests/offset/shape_type_i_c/YG9
new file mode 100644 (file)
index 0000000..dc7484d
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1973.21 -s 1128.39
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 24 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH1 b/tests/offset/shape_type_i_c/YH1
new file mode 100644 (file)
index 0000000..567091b
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 6.2
+  }
+}
+offsetperform result
+
+checkprops result -v 2169.52 -s 1151.22
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH2 b/tests/offset/shape_type_i_c/YH2
new file mode 100644 (file)
index 0000000..4d17d18
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 7.3
+  }
+}
+offsetperform result
+
+checkprops result -v 2490.91 -s 1189.42
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH3 b/tests/offset/shape_type_i_c/YH3
new file mode 100644 (file)
index 0000000..2e05934
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple8.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 8
+  }
+}
+offsetperform result
+
+checkprops result -v 2700 -s 1230
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH4 b/tests/offset/shape_type_i_c/YH4
new file mode 100644 (file)
index 0000000..b4f7405
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple9.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.3
+  }
+}
+offsetperform result
+
+checkprops result -v 1173.38 -s 1002.15
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH5 b/tests/offset/shape_type_i_c/YH5
new file mode 100644 (file)
index 0000000..22811bb
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple9.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4
+  }
+}
+offsetperform result
+
+checkprops result -v 1596 -s 1099.91
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH6 b/tests/offset/shape_type_i_c/YH6
new file mode 100644 (file)
index 0000000..acfdb2e
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple9.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1977 -s 1167.43
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH7 b/tests/offset/shape_type_i_c/YH7
new file mode 100644 (file)
index 0000000..49ba48a
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple9.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 7
+  }
+}
+offsetperform result
+
+checkprops result -v 2400 -s 1160
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH8 b/tests/offset/shape_type_i_c/YH8
new file mode 100644 (file)
index 0000000..648f51c
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple9.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 7.5
+  }
+}
+offsetperform result
+
+checkprops result -v 2550 -s 1195
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YH9 b/tests/offset/shape_type_i_c/YH9
new file mode 100644 (file)
index 0000000..29d1a6c
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.3
+  }
+}
+offsetperform result
+
+checkprops result -v 1173.38 -s 1002.15
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI1 b/tests/offset/shape_type_i_c/YI1
new file mode 100644 (file)
index 0000000..94053dc
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.3
+  }
+}
+offsetperform result
+
+checkprops result -v 1420.77 -s 1055.6
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI2 b/tests/offset/shape_type_i_c/YI2
new file mode 100644 (file)
index 0000000..d874bb6
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1649.74 -s 1092.64
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI3 b/tests/offset/shape_type_i_c/YI3
new file mode 100644 (file)
index 0000000..6edb55c
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1914.35 -s 1128.32
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 15 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI4 b/tests/offset/shape_type_i_c/YI4
new file mode 100644 (file)
index 0000000..35c263b
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 6.5
+  }
+}
+offsetperform result
+
+checkprops result -v 2271.64 -s 1187.85
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 13 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI5 b/tests/offset/shape_type_i_c/YI5
new file mode 100644 (file)
index 0000000..2e804d3
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 7.5
+  }
+}
+offsetperform result
+
+checkprops result -v 2555.91 -s 1227.21
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 12 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI6 b/tests/offset/shape_type_i_c/YI6
new file mode 100644 (file)
index 0000000..c525922
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple10.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 9.3
+  }
+}
+offsetperform result
+
+checkprops result -v 3090 -s 1321
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI7 b/tests/offset/shape_type_i_c/YI7
new file mode 100644 (file)
index 0000000..291222d
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1196.69 -s 1020.67
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 24 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI8 b/tests/offset/shape_type_i_c/YI8
new file mode 100644 (file)
index 0000000..a78be62
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1442.83 -s 1065.3
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 25 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YI9 b/tests/offset/shape_type_i_c/YI9
new file mode 100644 (file)
index 0000000..30c9697
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1622.85 -s 1081.68
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 23 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ1 b/tests/offset/shape_type_i_c/YJ1
new file mode 100644 (file)
index 0000000..e68f897
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5
+  }
+}
+offsetperform result
+
+checkprops result -v 1837.33 -s 1101.2
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ2 b/tests/offset/shape_type_i_c/YJ2
new file mode 100644 (file)
index 0000000..88b1128
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1976.05 -s 1125.25
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 22 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ3 b/tests/offset/shape_type_i_c/YJ3
new file mode 100644 (file)
index 0000000..f6b0fef
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 6.2
+  }
+}
+offsetperform result
+
+checkprops result -v 2172.83 -s 1149.47
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ4 b/tests/offset/shape_type_i_c/YJ4
new file mode 100644 (file)
index 0000000..324f2ab
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 7.3
+  }
+}
+offsetperform result
+
+checkprops result -v 2493.03 -s 1195.43
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ5 b/tests/offset/shape_type_i_c/YJ5
new file mode 100644 (file)
index 0000000..f246c43
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 8
+  }
+}
+offsetperform result
+
+checkprops result -v 2700.83 -s 1235.47
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 10 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ6 b/tests/offset/shape_type_i_c/YJ6
new file mode 100644 (file)
index 0000000..ede2560
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple11.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 9.2
+  }
+}
+offsetperform result
+
+checkprops result -v 3060 -s 1314
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 6 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ7 b/tests/offset/shape_type_i_c/YJ7
new file mode 100644 (file)
index 0000000..fa731ee
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple12.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 2.5
+  }
+}
+offsetperform result
+
+checkprops result -v 1163.57 -s 1020.66
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ8 b/tests/offset/shape_type_i_c/YJ8
new file mode 100644 (file)
index 0000000..c40529c
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple12.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.2
+  }
+}
+offsetperform result
+
+checkprops result -v 1327.75 -s 1049.86
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 20 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YJ9 b/tests/offset/shape_type_i_c/YJ9
new file mode 100644 (file)
index 0000000..0f53584
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple12.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 4.4
+  }
+}
+offsetperform result
+
+checkprops result -v 1640.18 -s 1049.39
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 16 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YK1 b/tests/offset/shape_type_i_c/YK1
new file mode 100644 (file)
index 0000000..9ac061d
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple12.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5
+  }
+}
+offsetperform result
+
+checkprops result -v 1810.17 -s 1052.79
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 10 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YK2 b/tests/offset/shape_type_i_c/YK2
new file mode 100644 (file)
index 0000000..f9ef4c7
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple12.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 6
+  }
+}
+offsetperform result
+
+checkprops result -v 2102.46 -s 1105.62
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 10 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YK3 b/tests/offset/shape_type_i_c/YK3
new file mode 100644 (file)
index 0000000..5e98d1b
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple13.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 3.1
+  }
+}
+offsetperform result
+
+checkprops result -v 1316.75 -s 1063.5
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 21 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png
diff --git a/tests/offset/shape_type_i_c/YK4 b/tests/offset/shape_type_i_c/YK4
new file mode 100644 (file)
index 0000000..cf87678
--- /dev/null
@@ -0,0 +1,28 @@
+restore [locate_data_file bug28442_simple13.brep] s
+
+offsetparameter 1e-7 c i r
+offsetload s 0
+
+foreach f [explode s f] {
+  mksurface surf $f
+  set found [regexp {Axis   :([-0-9.+eE]*), ([-0-9.+eE]*), ([-0-9.+eE]*)} [dump surf] full x y z]
+  if {$found == 0} {
+    continue
+  }
+  # reverse normal direction for faces with orientation REVERSED  
+  if {[regexp {REVERSED} [whatis $f]]} {
+    set z [expr -1*$z]
+  }
+  # set offset value for top faces only
+  if {abs($z - 1) < 1.e-7 } {
+    offsetonface $f 5
+  }
+}
+offsetperform result
+
+checkprops result -v 1811.61 -s 1059.5
+
+unifysamedom result_unif result
+checknbshapes result_unif -face 14 -shell 1
+
+checkview -display result_unif -2d -path ${imagedir}/${test_image}.png