0029564: STEP Import and Export failure IR-2020-11-27 WEEK-48
authorskl <skl@opencascade.com>
Mon, 2 Nov 2020 16:52:44 +0000 (19:52 +0300)
committerbugmaster <bugmaster@opencascade.com>
Sat, 28 Nov 2020 09:36:49 +0000 (12:36 +0300)
In the result of translation one face lying on the spherical surface converted to the two separate faces due to method IsSurfaceUVPeriodic returned false for spherical surface.
Now method IsSurfaceUVPeriodic returns true for spherical surface in order to natural bounds can be added for spherical surface too.
Method ShapeFix_Face::FixOrientation was corrected to avoid reversing inner wire for case when spherical face has only one inner bound without outer bound.
Check that wire has bounding box equal to bounding box of surface was added in the method ShapeFix_Face::FixAddNaturalBound in order to avoid addition of the natural bounds ( test bugs xde bug22535_2 1 for face 2 lying on the torus)

In order to avoid regressions fix for translation "VERTEX_LOOP" entities was added. Natural bounds for "VERTEX_LOOP" lying on the Spherical and BSpline surface is added only if face does not have any other bounds.
In other case natural bounds were added during ShapeFix operation after translation in order take into account mutual position of the all bounds in the UV space of the face.

src/ShapeFix/ShapeFix_Face.cxx
src/StepToTopoDS/StepToTopoDS_TranslateFace.cxx
tests/bugs/step/bug29564 [new file with mode: 0644]
tests/de/step_1/E6
tests/de/step_2/A3
tests/de/step_2/A5
tests/de/step_2/D2
tests/de/step_3/A5
tests/de/step_3/A9
tests/de/step_3/D8

index 32dede1..f0ad0e3 100644 (file)
@@ -51,6 +51,7 @@
 #include <Geom_RectangularTrimmedSurface.hxx>
 #include <Geom_SphericalSurface.hxx>
 #include <Geom_Surface.hxx>
+#include <Geom_ToroidalSurface.hxx>
 #include <GeomAdaptor_HSurface.hxx>
 #include <GProp_GProps.hxx>
 #include <IntRes2d_Domain.hxx>
@@ -118,9 +119,9 @@ static Standard_Boolean IsSurfaceUVInfinite(const Handle(Geom_Surface)& theSurf)
           Precision::IsInfinite(VMax)   );
 }
 
-static Standard_Boolean IsSurfaceUVPeriodic(const Handle(Geom_Surface)& theSurf)
+static Standard_Boolean IsSurfaceUVPeriodic(const Handle(GeomAdaptor_HSurface)& theSurf)
 {
-  return theSurf->IsUPeriodic() && theSurf->IsVPeriodic();
+       return ( (theSurf->IsUPeriodic() && theSurf->IsVPeriodic()) || theSurf->GetType() == GeomAbs_Sphere);
 }
 
 //=======================================================================
@@ -855,7 +856,7 @@ Standard_Boolean ShapeFix_Face::FixAddNaturalBound()
   }
 
   // check if surface is double-closed and fix is needed
-  if ( !IsSurfaceUVPeriodic (mySurf->Surface()) || ShapeAnalysis::IsOuterBound (myFace) ) 
+  if ( !IsSurfaceUVPeriodic (mySurf->Adaptor3d()) || ShapeAnalysis::IsOuterBound (myFace) ) 
     return Standard_False;
 
   // Collect informations on free intervals in U and V
@@ -866,6 +867,7 @@ Standard_Boolean ShapeFix_Face::FixAddNaturalBound()
   intV.Append ( gp_Pnt2d(SVF, SVL) );
   Standard_Integer nb = ws.Length();
   Standard_Integer i;
+  
   for ( i=1; i <= nb; i ++) {
     Standard_Real Umin, Vmin, Umax, Vmax;
 //     Bnd_Box2d B;
@@ -877,12 +879,13 @@ Standard_Boolean ShapeFix_Face::FixAddNaturalBound()
     BRep_Builder aB;
     aB.Add( aWireFace, aw );
     ShapeAnalysis::GetFaceUVBounds(aWireFace, Umin, Umax, Vmin, Vmax);
+    
     // PTV 01.11.2002 ACIS907, OCC921 end
     if ( mySurf->IsUClosed() ) CutInterval ( intU, gp_Pnt2d(Umin,Umax), SUL-SUF );
     if ( mySurf->IsVClosed() ) CutInterval ( intV, gp_Pnt2d(Vmin,Vmax), SVL-SVF );
     centers.Append ( gp_Pnt2d ( 0.5*(Umin+Umax), 0.5*(Vmin+Vmax) ) );
   }
-
+   
   // find best interval and thus compute shift
   gp_Pnt2d shift(0.,0.);
   if ( mySurf->IsUClosed() ) shift.SetX ( FindBestInterval ( intU ) );
@@ -1084,8 +1087,8 @@ Standard_Boolean ShapeFix_Face::FixOrientation(TopTools_DataMapOfShapeListOfShap
   // if no wires, just do nothing
   if ( nb <= 0) return Standard_False;
   Standard_Integer nbInternal=0;
-  Standard_Boolean isAddNaturalBounds = (NeedFix (myFixAddNaturalBoundMode) && 
-                                         IsSurfaceUVPeriodic (mySurf->Surface()));
+
+  Standard_Boolean isAddNaturalBounds = (NeedFix (myFixAddNaturalBoundMode) && IsSurfaceUVPeriodic(mySurf->Adaptor3d()));
   TColStd_SequenceOfInteger aSeqReversed;
   // if wire is only one, check its orientation
   if ( nb == 1 ) {
@@ -1095,19 +1098,17 @@ Standard_Boolean ShapeFix_Face::FixOrientation(TopTools_DataMapOfShapeListOfShap
     TopoDS_Face af = TopoDS::Face ( dummy );
     af.Orientation ( TopAbs_FORWARD );
     B.Add (af,ws.Value(1));
+    
     if ((myFixAddNaturalBoundMode != 1 ||
-         !IsSurfaceUVPeriodic (mySurf->Surface())    ) &&
-        !ShapeAnalysis::IsOuterBound (af)                )
+      !IsSurfaceUVPeriodic(mySurf->Adaptor3d())) &&
+      !ShapeAnalysis::IsOuterBound(af))
     {
-      Handle(ShapeExtend_WireData) sbdw = 
-        new ShapeExtend_WireData (TopoDS::Wire(ws.Value(1)));
-      sbdw->Reverse ( myFace );
-      ws.SetValue ( 1, sbdw->Wire() );
-      SendWarning ( sbdw->Wire(), Message_Msg ( "FixAdvFace.FixOrientation.MSG5" ) );// Wire on face was reversed
+      Handle(ShapeExtend_WireData) sbdw =
+        new ShapeExtend_WireData(TopoDS::Wire(ws.Value(1)));
+      sbdw->Reverse(myFace);
+      ws.SetValue(1, sbdw->Wire());
+      SendWarning(sbdw->Wire(), Message_Msg("FixAdvFace.FixOrientation.MSG5"));// Wire on face was reversed
       done = Standard_True;
-#ifdef OCCT_DEBUG
-      std::cout<<"Wire reversed"<<std::endl; // mise au point !
-#endif
     }
   }
   // in case of several wires, perform complex analysis
@@ -1318,7 +1319,7 @@ Standard_Boolean ShapeFix_Face::FixOrientation(TopTools_DataMapOfShapeListOfShap
         MW.Bind(aw,IntWires);
         if(sta==TopAbs_OUT) {
           NbOuts++;
-          if(staout==TopAbs_IN) {
+          if(staout==TopAbs_IN ) {
             // wire is OUT but InfinitePoint is IN => need to reverse
             ShapeExtend_WireData sewd (aw);
             sewd.Reverse(myFace);
index 6dbd42c..8bf7a3e 100644 (file)
@@ -140,8 +140,8 @@ void StepToTopoDS_TranslateFace::Init
   done = Standard_True;
   if (aTool.IsBound(FS)) {
     myResult = TopoDS::Face(aTool.Find(FS));
-    myError  = StepToTopoDS_TranslateFaceDone;
-    done     = Standard_True;
+    myError = StepToTopoDS_TranslateFaceDone;
+    done = Standard_True;
     return;
   }
   
@@ -251,35 +251,43 @@ void StepToTopoDS_TranslateFace::Init
           GeomSurf->IsKind (STANDARD_TYPE(Geom_BSplineSurface)) || 
           GeomSurf->IsKind (STANDARD_TYPE(Geom_SurfaceOfRevolution)))
       {
-        if (NbBnd ==1 || FaceBound->IsKind(STANDARD_TYPE(StepShape_FaceOuterBound))) {
-          BRepBuilderAPI_MakeFace mf (GeomSurf, Precision());
-          for (TopoDS_Iterator it(mf); it.More(); it.Next()) 
-            B.Add (F, it.Value());
-          continue;
+
+        //  Modification to create natural bounds for face based on the spherical and Bspline surface and having only one bound represented by Vertex loop was made.
+        //  According to the specification of ISO - 10303 part 42:
+        //  "If the face has only one bound and this is of type vertex_loop, then the interior of the face is the domain of the face_surface.face_geometry.
+        //   In such a case the underlying surface shall be closed (e.g. a spherical_surface.)"
+        //  - natural bounds are applied only in case if VertexLoop is only the one  defined face bound.
+        if (NbBnd == 1) {
+          BRepBuilderAPI_MakeFace mf(GeomSurf, Precision());
+          for (TopoDS_Iterator it(mf); it.More(); it.Next())
+            B.Add(F, it.Value());
+
         }
-      }
-      
-      if (GeomSurf->IsKind(STANDARD_TYPE(Geom_ToroidalSurface))) {
         continue;
+
       }
-      if (GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane))) {
-        TP->AddWarning(VL, "VertexLoop on plane is ignored");
-        continue; //smh : BUC60809
-      }
-      myTranVL.SetPrecision(Precision());//gka
-      myTranVL.SetMaxTol(MaxTol());
-      myTranVL.Init(VL, aTool, NMTool);
-      if (myTranVL.IsDone()) {
-        B.Add(F, myTranVL.Value());
-      }
-      else {
-        TP->AddWarning(VL, " a VertexLoop not mapped to TopoDS");
-      }
+    
+    if (GeomSurf->IsKind(STANDARD_TYPE(Geom_ToroidalSurface))) {
+      continue;
+    }
+    if (GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane))) {
+      TP->AddWarning(VL, "VertexLoop on plane is ignored");
+      continue; //smh : BUC60809
+    }
+    myTranVL.SetPrecision(Precision());//gka
+    myTranVL.SetMaxTol(MaxTol());
+    myTranVL.Init(VL, aTool, NMTool);
+    if (myTranVL.IsDone()) {
+      B.Add(F, myTranVL.Value());
+    }
+    else {
+      TP->AddWarning(VL, " a VertexLoop not mapped to TopoDS");
     }
+  }
     
-    // ----------------------
-    // The Loop is a PolyLoop
-    // ----------------------
+  // ----------------------
+  // The Loop is a PolyLoop
+  // ----------------------
     
     else if (Loop->IsKind(STANDARD_TYPE(StepShape_PolyLoop))) {
 //:S4136      STF.Closed() = Standard_False;
@@ -302,54 +310,54 @@ void StepToTopoDS_TranslateFace::Init
     // The Loop is an EdgeLoop
     // -----------------------
     
-    else if (Loop->IsKind(STANDARD_TYPE(StepShape_EdgeLoop))) {
-      //:S4136      if (STF.Closed()) {
-      //:S4136 Handle(StepShape_EdgeLoop) EL = 
-      //:S4136   Handle(StepShape_EdgeLoop)::DownCast(FaceBound->Bound());
-      //:S4136 if (EL->NbEdgeList() != 1) STF.Closed() = Standard_False;
-      //:S4136      }
-
-      TopoDS_Wire   W;
-      myTranEdgeLoop.SetPrecision(Precision());  //gka
-      myTranEdgeLoop.SetMaxTol(MaxTol());
-      myTranEdgeLoop.Init(FaceBound, F, GeomSurf, StepSurf, sameSense, aTool, NMTool);
-
-      if (myTranEdgeLoop.IsDone()) {
-        W = TopoDS::Wire(myTranEdgeLoop.Value());
-
-        // STEP Face_Surface orientation :
-        // if the topological orientation is opposite to the geometric
-        // orientation of the surface => the underlying topological 
-        // orientation are not implicitly reversed
-        // this is the case in CAS.CADE => If the face_surface is reversed,
-        // the wire orientation has to be explictly reversed
-        if (FaceBound->Orientation()) {
-          // *DTH*       if (sameSense || GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane)))
-          W.Orientation(sameSense ? TopAbs_FORWARD : TopAbs_REVERSED);
-        }
-        else {
-          // *DTH*       if (sameSense || GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane)))
-          W.Orientation(sameSense ? TopAbs_REVERSED : TopAbs_FORWARD);
-        }
-        // -----------------------------
-        // The Wire is added to the Face      
-        // -----------------------------
+  else if (Loop->IsKind(STANDARD_TYPE(StepShape_EdgeLoop))) {
+    //:S4136      if (STF.Closed()) {
+    //:S4136   Handle(StepShape_EdgeLoop) EL = 
+    //:S4136     Handle(StepShape_EdgeLoop)::DownCast(FaceBound->Bound());
+    //:S4136   if (EL->NbEdgeList() != 1) STF.Closed() = Standard_False;
+    //:S4136      }
 
-        B.Add(F, W);
+    TopoDS_Wire   W;
+    myTranEdgeLoop.SetPrecision(Precision());  //gka
+    myTranEdgeLoop.SetMaxTol(MaxTol());
+    myTranEdgeLoop.Init(FaceBound, F, GeomSurf, StepSurf, sameSense, aTool, NMTool);
+
+    if (myTranEdgeLoop.IsDone()) {
+      W = TopoDS::Wire(myTranEdgeLoop.Value());
+
+      // STEP Face_Surface orientation :
+      // if the topological orientation is opposite to the geometric
+      // orientation of the surface => the underlying topological 
+      // orientation are not implicitly reversed
+      // this is the case in CAS.CADE => If the face_surface is reversed,
+      // the wire orientation has to be explictly reversed
+      if (FaceBound->Orientation()) {
+        // *DTH*         if (sameSense || GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane)))
+        W.Orientation(sameSense ? TopAbs_FORWARD : TopAbs_REVERSED);
       }
       else {
-        // Il y a eu un probleme dans le mapping : On perd la Face
-        // (facon de parler ...) Pas de moyen aujourd hui de recuperer
-        // au moins toutes les geometries (Points, Courbes 3D, Surface)
-        TP->AddFail(Loop, " EdgeLoop not mapped to TopoDS");
-
-        // CKY JAN-97 : un Wire manque, eh bien on continue quand meme !!
-        //  sauf si OuterBound : la c est quand meme pas bien normal ...
-        if (FaceBound->IsKind(STANDARD_TYPE(StepShape_FaceOuterBound))) {
-          TP->AddWarning(FS, "No Outer Bound : Face not done");
-        }
-        continue;
+        // *DTH*         if (sameSense || GeomSurf->IsKind(STANDARD_TYPE(Geom_Plane)))
+        W.Orientation(sameSense ? TopAbs_REVERSED : TopAbs_FORWARD);
       }
+      // -----------------------------
+      // The Wire is added to the Face      
+      // -----------------------------
+
+      B.Add(F, W);
+    }
+    else {
+      // Il y a eu un probleme dans le mapping : On perd la Face
+      // (facon de parler ...) Pas de moyen aujourd hui de recuperer
+      // au moins toutes les geometries (Points, Courbes 3D, Surface)
+      TP->AddFail(Loop, " EdgeLoop not mapped to TopoDS");
+
+      // CKY JAN-97 : un Wire manque, eh bien on continue quand meme !!
+      //  sauf si OuterBound : la c est quand meme pas bien normal ...
+      if (FaceBound->IsKind(STANDARD_TYPE(StepShape_FaceOuterBound))) {
+        TP->AddWarning(FS, "No Outer Bound : Face not done");
+      }
+      continue;
+    }
     }    
     else { 
       // Type not yet implemented or non sens
diff --git a/tests/bugs/step/bug29564 b/tests/bugs/step/bug29564
new file mode 100644 (file)
index 0000000..94f38de
--- /dev/null
@@ -0,0 +1,15 @@
+puts "# ====================================================================="
+puts "# 0029564: In the result of translation of one face lying on the sphere two separate faces were obtained"
+puts "# ====================================================================="
+puts ""
+
+
+set filepath [locate_data_file bug29564.stp]
+stepread $filepath a *
+tpcompound result
+    
+checkshape result
+checkprops result -s 5831.82
+checknbshapes result -wire 78 -face 68 -shell 5 -solid 5 -compound 2
+
+# checkview -display result -2d -path ${imagedir}/${test_image}.png
index aba133d..7cb558b 100755 (executable)
@@ -5,8 +5,8 @@ set ref_data {
 DATA        : Faulties = 0  ( 54 )  Warnings = 0  ( 0 )  Summary  = 0  ( 54 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 2  ( 51 )  Summary  = 2  ( 51 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 8  ( 8 )  Shell    = 10  ( 10 )  Face     = 108  ( 108 ) 
-STATSHAPE   : Solid    = 8  ( 8 )  Shell    = 10  ( 10 )  Face     = 108  ( 108 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 8  ( 8 )  Shell    = 8  ( 8 )  Face     = 104  ( 104 ) 
+STATSHAPE   : Solid    = 8  ( 8 )  Shell    = 8  ( 8 )  Face     = 104  ( 104 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   = 0.0007308806138  ( 0.002238556699 )  AvgTol   =  1.588300578e-005  (  3.376756081e-005 )
 LABELS      : N0Labels = 9  ( 9 )  N1Labels = 8  ( 8 )  N2Labels = 0  ( 0 )   TotalLabels = 17  ( 17 )   NameLabels = 17  ( 17 )   ColorLabels = 0  ( 0 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 1  ( 1 )  Volume   = 1  ( 1 )  Area     = 1  ( 1 )
index c203886..bf6afcb 100755 (executable)
@@ -5,8 +5,8 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 1  ( 398 )  Summary  = 1  ( 398 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 538  ( 538 ) 
-STATSHAPE   : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 538  ( 538 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 532  ( 532 ) 
+STATSHAPE   : Solid    = 1  ( 1 )  Shell    = 1  ( 1 )  Face     = 532  ( 532 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   = 1.956021749e-005  ( 0.0003145873437 )  AvgTol   =  8.898149576e-007  (  7.870748276e-006 )
 LABELS      : N0Labels = 1  ( 1 )  N1Labels = 0  ( 0 )  N2Labels = 0  ( 0 )   TotalLabels = 1  ( 1 )   NameLabels = 1  ( 1 )   ColorLabels = 1  ( 1 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
index 9977183..c89d6bc 100755 (executable)
@@ -5,8 +5,8 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 4  ( 127 )  Summary  = 4  ( 127 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 27  ( 27 )  Shell    = 28  ( 28 )  Face     = 479  ( 479 ) 
-STATSHAPE   : Solid    = 27  ( 27 )  Shell    = 28  ( 28 )  Face     = 479  ( 479 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 25  ( 25 )  Shell    = 25  ( 25 )  Face     = 476  ( 476 ) 
+STATSHAPE   : Solid    = 25  ( 25 )  Shell    = 25  ( 25 )  Face     = 476  ( 476 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   = 8.47188394e-006  ( 1.437435657e-005 )  AvgTol   =  5.284196224e-007  (  2.390274944e-006 )
 LABELS      : N0Labels = 16  ( 16 )  N1Labels = 15  ( 15 )  N2Labels = 0  ( 0 )   TotalLabels = 31  ( 31 )   NameLabels = 31  ( 31 )   ColorLabels = 0  ( 0 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 0  ( 0 )  Volume   = 0  ( 0 )  Area     = 0  ( 0 )
index f4811c3..57c69ff 100755 (executable)
@@ -5,8 +5,8 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 0 )  Summary  = 0  ( 0 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 8  ( 82 )  Summary  = 8  ( 82 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 18  ( 18 )  Shell    = 18  ( 18 )  Face     = 376  ( 376 ) 
-STATSHAPE   : Solid    = 18  ( 18 )  Shell    = 18  ( 18 )  Face     = 376  ( 376 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 18  ( 18 )  Shell    = 18  ( 18 )  Face     = 369  ( 369 ) 
+STATSHAPE   : Solid    = 18  ( 18 )  Shell    = 18  ( 18 )  Face     = 369  ( 369 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   = 0.005929066011  (  0.01678530642 )  AvgTol   =  9.716756634e-005  (  0.0001556337239 )
 LABELS      : N0Labels = 20  ( 20 )  N1Labels = 19  ( 19 )  N2Labels = 0  ( 0 )   TotalLabels = 39  ( 39 )   NameLabels = 39  ( 39 )   ColorLabels = 0  ( 0 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 20  ( 20 )  Volume   = 20  ( 20 )  Area     = 20  ( 20 )
index 7c2494c..b2559ed 100755 (executable)
@@ -5,10 +5,10 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 80 )  Summary  = 0  ( 80 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 14  ( 545 )  Summary  = 14  ( 545 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1506  ( 1506 ) 
-STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3216  ( 3216 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1504  ( 1504 ) 
+STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3214  ( 3214 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   =   0.9320948364  (      3.3196868 )  AvgTol   =  0.0006692755906  (  0.003731702354 )
-LABELS      : N0Labels = 230  ( 230 )  N1Labels = 1909  ( 1909 )  N2Labels = 0  ( 0 )   TotalLabels = 2139  ( 2139 )   NameLabels = 633  ( 633 )   ColorLabels = 1604  ( 1604 )   LayerLabels = 0  ( 0 )
+LABELS      : N0Labels = 230  ( 230 )  N1Labels = 1907  ( 1907 )  N2Labels = 0  ( 0 )   TotalLabels = 2137  ( 2137 )   NameLabels = 633  ( 633 )   ColorLabels = 1602  ( 1602 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 161  ( 161 )  Volume   = 161  ( 161 )  Area     = 161  ( 161 )
 NCOLORS     : NColors  = 6  ( 6 )
 COLORS      : Colors   = DARKSEAGREEN1 LAVENDER LIGHTGOLDENROD LIGHTSTEELBLUE1 LIGHTSTEELBLUE3 STEELBLUE3  ( DARKSEAGREEN1 LAVENDER LIGHTGOLDENROD LIGHTSTEELBLUE1 LIGHTSTEELBLUE3 STEELBLUE3 )
index 4e7d19d..1887ba4 100755 (executable)
@@ -5,8 +5,8 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 80 )  Summary  = 0  ( 80 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 21  ( 559 )  Summary  = 21  ( 559 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1506  ( 1506 ) 
-STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3216  ( 3216 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1504  ( 1504 ) 
+STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3214  ( 3214 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   =   0.9320948364  (      3.3196868 )  AvgTol   =  0.0006686833198  (  0.003731109924 )
 LABELS      : N0Labels = 230  ( 230 )  N1Labels = 403  ( 403 )  N2Labels = 0  ( 0 )   TotalLabels = 633  ( 633 )   NameLabels = 633  ( 633 )   ColorLabels = 98  ( 98 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 99  ( 99 )  Volume   = 99  ( 99 )  Area     = 99  ( 99 )
index 9a3d467..deba4e5 100755 (executable)
@@ -5,10 +5,10 @@ set ref_data {
 DATA        : Faulties = 0  ( 0 )  Warnings = 0  ( 80 )  Summary  = 0  ( 80 )
 TPSTAT      : Faulties = 0  ( 0 )  Warnings = 21  ( 559 )  Summary  = 21  ( 559 )
 CHECKSHAPE  : Wires    = 0  ( 0 )  Faces    = 0  ( 0 )  Shells   = 0  ( 0 )   Solids   = 0 ( 0 )
-NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1506  ( 1506 ) 
-STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3216  ( 3216 )   FreeWire = 0  ( 0 ) 
+NBSHAPES    : Solid    = 98  ( 98 )  Shell    = 98  ( 98 )  Face     = 1504  ( 1504 ) 
+STATSHAPE   : Solid    = 272  ( 272 )  Shell    = 272  ( 272 )  Face     = 3214  ( 3214 )   FreeWire = 0  ( 0 ) 
 TOLERANCE   : MaxTol   =   0.9320948364  (      3.3196868 )  AvgTol   =  0.0006670990393  (  0.003722145099 )
-LABELS      : N0Labels = 230  ( 230 )  N1Labels = 1909  ( 1909 )  N2Labels = 0  ( 0 )   TotalLabels = 2139  ( 2139 )   NameLabels = 633  ( 633 )   ColorLabels = 1506  ( 1506 )   LayerLabels = 0  ( 0 )
+LABELS      : N0Labels = 230  ( 230 )  N1Labels = 1907  ( 1907 )  N2Labels = 0  ( 0 )   TotalLabels = 2137  ( 2137 )   NameLabels = 633  ( 633 )   ColorLabels = 1504  ( 1504 )   LayerLabels = 0  ( 0 )
 PROPS       : Centroid = 98  ( 98 )  Volume   = 98  ( 98 )  Area     = 98  ( 98 )
 NCOLORS     : NColors  = 6  ( 6 )
 COLORS      : Colors   = DARKSEAGREEN1 LAVENDER LIGHTGOLDENROD LIGHTSTEELBLUE1 LIGHTSTEELBLUE3 STEELBLUE3  ( DARKSEAGREEN1 LAVENDER LIGHTGOLDENROD LIGHTSTEELBLUE1 LIGHTSTEELBLUE3 STEELBLUE3 )