]> OCCT Git - occt-copy.git/commitdiff
0023610: checkshape command does not detect mismatch of the tolerance values among...
authorabv <abv@opencascade.com>
Tue, 11 Dec 2012 11:51:40 +0000 (15:51 +0400)
committerabk <abk@opencascade.com>
Tue, 25 Dec 2012 10:21:30 +0000 (14:21 +0400)
In BRepCheck, added check for tolerance of face to be not greater than tolerance of edge, and tolerance of edge not greater than tolerance of its vertices

src/BRepCheck/BRepCheck.cxx
src/BRepCheck/BRepCheck_Edge.cxx
src/BRepCheck/BRepCheck_Vertex.cxx
src/BRepTest/BRepTest_CheckCommands.cxx
src/GeomliteTest/GeomliteTest_CurveCommands.cxx

index 1eecf255d775f2b9cf580ed9feb97390ed75c58f..5215d1a4386488fc5cdbeb86f82b1c05c8f35158 100755 (executable)
@@ -80,110 +80,44 @@ Standard_Boolean BRepCheck::SelfIntersection(const TopoDS_Wire& W,
 void BRepCheck::Print(const BRepCheck_Status stat,
                      Standard_OStream& OS)
 {
+#define PRINT_CASE(stat) case stat: OS << #stat "\n"; break
 
   switch (stat) {
-  case BRepCheck_NoError:
-    OS << "BRepCheck_NoError\n";
-    break;
-  case BRepCheck_InvalidPointOnCurve:
-    OS << "BRepCheck_InvalidPointOnCurve\n";
-    break;
-  case BRepCheck_InvalidPointOnCurveOnSurface:
-    OS << "BRepCheck_InvalidPointOnCurveOnSurface\n";
-    break;
-  case BRepCheck_InvalidPointOnSurface:
-    OS << "BRepCheck_InvalidPointOnSurface\n";
-    break;
-  case BRepCheck_No3DCurve:
-    OS << "BRepCheck_No3DCurve\n";
-    break;
-  case BRepCheck_Multiple3DCurve:
-    OS << "BRepCheck_Multiple3DCurve\n";
-    break;
-  case BRepCheck_Invalid3DCurve:
-    OS << "BRepCheck_Invalid3DCurve\n";
-    break;
-  case BRepCheck_NoCurveOnSurface:
-    OS << "BRepCheck_NoCurveOnSurface\n";
-    break;
-  case BRepCheck_InvalidCurveOnSurface:
-    OS << "BRepCheck_InvalidCurveOnSurface\n";
-    break;
-  case BRepCheck_InvalidCurveOnClosedSurface:
-    OS << "BRepCheck_InvalidCurveOnClosedSurface\n";
-    break;
-  case BRepCheck_InvalidSameRangeFlag:
-    OS << "BRepCheck_InvalidSameRangeFlag\n";
-    break;
-  case BRepCheck_InvalidSameParameterFlag:
-    OS << "BRepCheck_InvalidSameParameterFlag\n";
-    break;
-  case BRepCheck_InvalidDegeneratedFlag:
-    OS << "BRepCheck_InvalidDegeneratedFlag\n";
-    break;
-  case BRepCheck_FreeEdge:
-    OS << "BRepCheck_FreeEdge\n";
-    break;
-  case BRepCheck_InvalidMultiConnexity:
-    OS << "BRepCheck_InvalidMultiConnexity\n";
-    break;
-  case BRepCheck_InvalidRange:
-    OS << "BRepCheck_InvalidRange\n";
-    break;
-  case BRepCheck_EmptyWire:
-    OS << "BRepCheck_EmptyWire\n";
-    break;
-  case BRepCheck_RedundantEdge:
-    OS << "BRepCheck_RedundantEdge\n";
-    break;
-  case BRepCheck_SelfIntersectingWire:
-    OS << "BRepCheck_SelfIntersectingWire\n";
-    break;
-  case BRepCheck_NoSurface:
-    OS << "BRepCheck_NoSurface\n";
-    break;
-  case BRepCheck_InvalidWire:
-    OS << "BRepCheck_InvalidWire\n";
-    break;
-  case BRepCheck_RedundantWire:
-    OS << "BRepCheck_RedundantWire\n";
-    break;
-  case BRepCheck_IntersectingWires:
-    OS << "BRepCheck_IntersectingWires\n";
-    break;
-  case BRepCheck_InvalidImbricationOfWires:
-    OS << "BRepCheck_InvalidImbricationOfWires\n";
-    break;
-  case BRepCheck_EmptyShell:
-    OS << "BRepCheck_EmptyShell\n";
-    break;
-  case BRepCheck_RedundantFace:
-    OS << "BRepCheck_RedundantFace\n";
-    break;
-  case BRepCheck_UnorientableShape:
-    OS << "BRepCheck_UnorientableShape\n";
-    break;
-  case BRepCheck_NotClosed:
-    OS << "BRepCheck_NotClosed\n";
-    break;
-  case BRepCheck_NotConnected:
-    OS << "BRepCheck_NotConnected\n";
-    break;
-  case BRepCheck_SubshapeNotInShape:      
-    OS << "BRepCheck_SubshapeNotInShape\n";
-    break;
-  case BRepCheck_BadOrientation:
-    OS << "BRepCheck_BadOrientation\n";
-    break;
-  case BRepCheck_BadOrientationOfSubshape:
-    OS << "BRepCheck_BadOrientationOfSubshape\n";
-    break;
-  case BRepCheck_CheckFail:
-    OS << "BRepCheck_CheckFail\n";
-    break;
+  PRINT_CASE(BRepCheck_NoError);
+  PRINT_CASE(BRepCheck_InvalidPointOnCurve);
+  PRINT_CASE(BRepCheck_InvalidPointOnCurveOnSurface);
+  PRINT_CASE(BRepCheck_InvalidPointOnSurface);
+  PRINT_CASE(BRepCheck_No3DCurve);
+  PRINT_CASE(BRepCheck_Multiple3DCurve);
+  PRINT_CASE(BRepCheck_Invalid3DCurve);
+  PRINT_CASE(BRepCheck_NoCurveOnSurface);
+  PRINT_CASE(BRepCheck_InvalidCurveOnSurface);
+  PRINT_CASE(BRepCheck_InvalidCurveOnClosedSurface);
+  PRINT_CASE(BRepCheck_InvalidSameRangeFlag);
+  PRINT_CASE(BRepCheck_InvalidSameParameterFlag);
+  PRINT_CASE(BRepCheck_InvalidDegeneratedFlag);
+  PRINT_CASE(BRepCheck_FreeEdge);
+  PRINT_CASE(BRepCheck_InvalidMultiConnexity);
+  PRINT_CASE(BRepCheck_InvalidRange);
+  PRINT_CASE(BRepCheck_EmptyWire);
+  PRINT_CASE(BRepCheck_RedundantEdge);
+  PRINT_CASE(BRepCheck_SelfIntersectingWire);
+  PRINT_CASE(BRepCheck_NoSurface);
+  PRINT_CASE(BRepCheck_InvalidWire);
+  PRINT_CASE(BRepCheck_RedundantWire);
+  PRINT_CASE(BRepCheck_IntersectingWires);
+  PRINT_CASE(BRepCheck_InvalidImbricationOfWires);
+  PRINT_CASE(BRepCheck_EmptyShell);
+  PRINT_CASE(BRepCheck_RedundantFace);
+  PRINT_CASE(BRepCheck_UnorientableShape);
+  PRINT_CASE(BRepCheck_NotClosed);
+  PRINT_CASE(BRepCheck_NotConnected);
+  PRINT_CASE(BRepCheck_SubshapeNotInShape);
+  PRINT_CASE(BRepCheck_BadOrientation);
+  PRINT_CASE(BRepCheck_BadOrientationOfSubshape);
+  PRINT_CASE(BRepCheck_InvalidToleranceValue);
+  PRINT_CASE(BRepCheck_CheckFail);
   default:
     break;
   }
 }
-
-
index efe5ace99e655e2526d43ee4dd36b8087becf52f..833ce9c5fe79a9092b826261a3cd264a4331e38d 100755 (executable)
@@ -63,8 +63,6 @@
 #include <TopoDS_Face.hxx>
 #include <Precision.hxx>
 
-
-//modified by NIZNHY-PKV Thu May 05 09:01:57 2011f
 static 
   Standard_Boolean Validate(const Adaptor3d_Curve&,
                            const Adaptor3d_CurveOnSurface&,
@@ -83,12 +81,6 @@ static
 static
   Standard_Real PrecSurface(const Adaptor3d_CurveOnSurface& aACS);
 
-//static Standard_Boolean Validate(const Adaptor3d_Curve&,
-//                              const Adaptor3d_Curve&,
-//                              const Standard_Real,
-//                              const Standard_Boolean);
-//modified by NIZNHY-PKV Thu May 05 09:02:01 2011t
-
 #define NCONTROL 23
 
 //=======================================================================
@@ -230,7 +222,6 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
   Standard_Real Tol = BRep_Tool::Tolerance(TopoDS::Edge(myShape));
 
   TopAbs_ShapeEnum styp = S.ShapeType();
-//  for (TopExp_Explorer exp(S,TopAbs_EDGE); exp.More(); exp.Next()) {
   TopExp_Explorer exp(S,TopAbs_EDGE) ;
   for ( ; exp.More(); exp.Next()) {
     if (exp.Current().IsSame(myShape)) {
@@ -244,6 +235,9 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
   
   switch (styp) {
   case TopAbs_FACE:
+    if(BRep_Tool::Tolerance(TopoDS::Face(S)) - Tol > Precision::Confusion())  
+      BRepCheck::Add(lst,BRepCheck_InvalidToleranceValue);
+
     if (!myCref.IsNull()) {
       
       Standard_Boolean SameParameter = TE->SameParameter();
index 358a68badf97e28efbf87d76d69ce52a0583a5f3..812dafb4f7a256edbded6f0f256da2ad8c2b9c62 100755 (executable)
@@ -22,6 +22,7 @@
 
 #include <BRepCheck_Vertex.ixx>
 
+#include <BRepCheck.hxx>
 #include <BRepCheck_ListOfStatus.hxx>
 
 #include <BRep_TVertex.hxx>
@@ -46,9 +47,9 @@
 #include <TopExp_Explorer.hxx>
 #include <TopoDS_Iterator.hxx>
 
-#include <BRepCheck.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
+#include <Precision.hxx>
 
 //=======================================================================
 //function : BRepCheck_Vertex
@@ -115,7 +116,6 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
   case TopAbs_EDGE:
     {
       // Try to find the vertex on the edge
-      
       const TopoDS_Edge& E = TopoDS::Edge(S);
       TopoDS_Iterator itv(E.Oriented(TopAbs_FORWARD));
       TopoDS_Vertex VFind;
@@ -149,9 +149,15 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
       // VFind is not null for sure
       TopAbs_Orientation orv = VFind.Orientation();
 
-      Standard_Real Tol  = BRep_Tool::Tolerance(TopoDS::Vertex(myShape));
-      Tol = Max(Tol,BRep_Tool::Tolerance(E)); // to check
-      Tol *= Tol;
+      Standard_Real TolV = TV->Tolerance();
+      Standard_Real TolE = BRep_Tool::Tolerance(E);
+      if (TolE > TolV)
+      {
+         if (TolE - TolV > Precision::Confusion())
+           BRepCheck::Add(myMap(S),BRepCheck_InvalidToleranceValue);
+         TolV = TolE;
+      }
+      Standard_Real aTol2 = TolV * TolV;
 
       Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*)&E.TShape());
       BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves());
@@ -173,7 +179,7 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
              if (pr->IsPointOnCurve(C,L)) {
                Controlp = C->Value(pr->Parameter());
                Controlp.Transform(L.Transformation());
-               if (prep.SquareDistance(Controlp)> Tol) {
+               if (prep.SquareDistance(Controlp) > aTol2) {
                  BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
                }
              }
@@ -184,14 +190,14 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
              if (orv == TopAbs_FORWARD || multiple) {
                Controlp = C->Value(GC->First());
                Controlp.Transform(L.Transformation());
-               if (prep.SquareDistance(Controlp)> Tol) {
+               if (prep.SquareDistance(Controlp) > aTol2) {
                  BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
                }
              }
              if (orv == TopAbs_REVERSED || multiple) {
                Controlp = C->Value(GC->Last());
                Controlp.Transform(L.Transformation());
-               if (prep.SquareDistance(Controlp)> Tol) {
+               if (prep.SquareDistance(Controlp) > aTol2) {
                  BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
                }
              }
@@ -212,18 +218,16 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
              gp_Pnt2d p2d = PC->Value(pr->Parameter());
              Controlp = Su->Value(p2d.X(),p2d.Y());
              Controlp.Transform(L.Transformation());
-             if (prep.SquareDistance(Controlp)> Tol) {
-               BRepCheck::Add(myMap(S),
-                              BRepCheck_InvalidPointOnCurveOnSurface);
+             if (prep.SquareDistance(Controlp) > aTol2) {
+               BRepCheck::Add(myMap(S), BRepCheck_InvalidPointOnCurveOnSurface);
              }
            }
            if (!PC2.IsNull() && pr->IsPointOnCurveOnSurface(PC2,Su,L)) {
              gp_Pnt2d p2d = PC2->Value(pr->Parameter());
              Controlp = Su->Value(p2d.X(),p2d.Y());
              Controlp.Transform(L.Transformation());
-             if (prep.SquareDistance(Controlp)> Tol) {
-               BRepCheck::Add(myMap(S),
-                              BRepCheck_InvalidPointOnCurveOnSurface);
+             if (prep.SquareDistance(Controlp) > aTol2) {
+               BRepCheck::Add(myMap(S), BRepCheck_InvalidPointOnCurveOnSurface);
              }
            }
            itpr.Next();
@@ -247,9 +251,15 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
       const Handle(Geom_Surface)& Su = TF->Surface();
       TopLoc_Location L = (Floc * TFloc).Predivided(myShape.Location());
 
-      Standard_Real Tol  = BRep_Tool::Tolerance(TopoDS::Vertex(myShape));
-      Tol = Max(Tol,BRep_Tool::Tolerance(TopoDS::Face(S))); // to check
-      Tol *= Tol;
+      Standard_Real TolV = TV->Tolerance();
+      Standard_Real TolF = TF->Tolerance();
+      if (TolF > TolV)
+      {
+         if (TolF - TolV > Precision::Confusion())
+           BRepCheck::Add(myMap(S),BRepCheck_InvalidToleranceValue);
+         TolV = TolF;
+      }
+      Standard_Real aTol2 = TolV * TolV;
 
       BRep_ListIteratorOfListOfPointRepresentation itpr(TV->Points());
       while (itpr.More()) {
@@ -257,7 +267,7 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
        if (pr->IsPointOnSurface(Su,L)) {
          Controlp = Su->Value(pr->Parameter(),pr->Parameter2());
          Controlp.Transform(L.Transformation());
-         if (prep.SquareDistance(Controlp)> Tol) {
+         if (prep.SquareDistance(Controlp) > aTol2) {
            BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnSurface);
          }
        }
index b6ea15b43c7977496f62ecd318e0df8dd693e0d9..d46467805c629a8e51c998c47f8b2ca3bc9c6e04 100755 (executable)
@@ -76,6 +76,7 @@
 
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_Failure.hxx>
+#include <NCollection_Array1.hxx>
 
 //#ifdef WNT
 #include <stdio.h>
@@ -114,13 +115,13 @@ Standard_IMPORT Standard_Integer BRepCheck_Trace(const Standard_Integer phase);
 //function : FindNamed
 //=======================================================================
 static Standard_Boolean FindNamed(const TopoDS_Shape& S,
-                                 char*& Name)
+                                 const char*& Name)
 {
   for (Standard_Integer i = 1 ;i <= lfaulty.Length(); i++) {
     Handle(DBRep_DrawableShape) DS = 
       Handle(DBRep_DrawableShape)::DownCast(lfaulty(i));
     if (DS->Shape().IsSame(S)) {
-      Name = (char*)DS->Name();
+      Name = DS->Name();
       return Standard_True;
     }
   }
@@ -154,7 +155,6 @@ static void PrintSub(Standard_OStream& OS,
                     const TopAbs_ShapeEnum Subtype)
      
 {
-  char* Name;
   BRepCheck_ListIteratorOfListOfStatus itl;
   TopExp_Explorer exp;
   for (exp.Init(S,Subtype); exp.More(); exp.Next()) {
@@ -168,25 +168,27 @@ static void PrintSub(Standard_OStream& OS,
        theMap(sub).Append(S);
        itl.Initialize(res->StatusOnShape());
        if (itl.Value() != BRepCheck_NoError) {
-         if (!FindNamed(sub,Name)) {
+          const char* pName;
+          if (!FindNamed(sub,pName)) {
            nbfaulty++;
-           Name = (char*)malloc(18*sizeof(char));
-           sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
-           DBRep::Set(Name,sub);
-           lfaulty.Append(Draw::Get((Standard_CString&)Name));
-         }
-         OS << "Shape " << Name << " ";
-         if (!FindNamed(S,Name)) {
-           nbfaulty++;
-           Name = (char*)malloc(18*sizeof(char));
-           sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
-           DBRep::Set(Name,S);
-           lfaulty.Append(Draw::Get((Standard_CString&)Name));
-         }
-         OS << " on shape " << Name << " :\n";
-         for (;itl.More(); itl.Next()) {
-           BRepCheck::Print(itl.Value(),OS);
-         }
+            char aName[256];
+           sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
+           DBRep::Set(aName,sub);
+            pName = aName;
+           lfaulty.Append(Draw::Get(pName));
+           OS << "Shape " << pName << " ";
+           if (!FindNamed(S,pName)) {
+             nbfaulty++;
+             sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
+             DBRep::Set(aName,S);
+              pName = aName;
+             lfaulty.Append(Draw::Get(pName));
+           }
+           OS << " on shape " << pName << " :\n";
+           for (;itl.More(); itl.Next()) {
+             BRepCheck::Print(itl.Value(),OS);
+           }
+          }
        }
        break;
       }
@@ -206,20 +208,21 @@ static void Print(Standard_OStream& OS,
     Print(OS,Ana,iter.Value());
   }
 
-  char* Name;
   TopAbs_ShapeEnum styp = S.ShapeType();
   BRepCheck_ListIteratorOfListOfStatus itl;
   if (!Ana.Result(S).IsNull() && !theMap.IsBound(S)) {
     itl.Initialize(Ana.Result(S)->Status());
     if (itl.Value() != BRepCheck_NoError) {
-      if (!FindNamed(S,Name)) {
+      const char* pName;
+      char aName[256];
+      if (!FindNamed(S,pName)) {
        nbfaulty++;
-       Name = (char*)malloc(18*sizeof(char));
-       sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
-       DBRep::Set(Name,S);
-       lfaulty.Append(Draw::Get((Standard_CString&)Name));
+       sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
+       DBRep::Set(aName,S);
+        pName = aName;
+       lfaulty.Append(Draw::Get(pName));
       }
-      OS << "On Shape " << Name << " :\n";
+      OS << "On Shape " << pName << " :\n";
        
       for (;itl.More(); itl.Next()) {
        BRepCheck::Print(itl.Value(),OS);
@@ -466,99 +469,18 @@ void ContextualDump(Draw_Interpretor& theCommands,
   nbfaulty = 0;
   lfaulty.Clear();
 
-  //Print(cout, theAna, theShape);
   Standard_SStream aSStream;
   Print(aSStream, theAna, theShape);
   theCommands << aSStream;
-  //cout<<"\n";
   theCommands<<"\n";
   theMap.Clear();
 
   if (nbfaulty !=0)
     theCommands<<"Faulty shapes in variables "<<checkfaultyname<<"1 to "<<checkfaultyname<<nbfaulty<<" \n";
-    //cout<<"Faulty shapes in variables "<<checkfaultyname<<"1 to "<<checkfaultyname<<nbfaulty<<" \n";
-
-  //cout<<endl;
   theCommands<<"\n";
 }
 
 
-//=======================================================================
-//function : FillProblems
-// purpose : auxilary for StructuralDump
-//=======================================================================
-static void FillProblems(const BRepCheck_Status stat,
-                         Handle(TColStd_HArray1OfInteger)& NbProblems)
-{
-  switch (stat) {
-  case BRepCheck_InvalidPointOnCurve:
-    NbProblems->SetValue(1,NbProblems->Value(1)+1); break;
-  case BRepCheck_InvalidPointOnCurveOnSurface:
-    NbProblems->SetValue(2,NbProblems->Value(2)+1); break;
-  case BRepCheck_InvalidPointOnSurface:
-    NbProblems->SetValue(3,NbProblems->Value(3)+1); break;
-  case BRepCheck_No3DCurve:
-    NbProblems->SetValue(4,NbProblems->Value(4)+1); break;
-  case BRepCheck_Multiple3DCurve:
-    NbProblems->SetValue(5,NbProblems->Value(5)+1); break;
-  case BRepCheck_Invalid3DCurve:
-    NbProblems->SetValue(6,NbProblems->Value(6)+1); break;
-  case BRepCheck_NoCurveOnSurface:
-    NbProblems->SetValue(7,NbProblems->Value(7)+1); break;
-  case BRepCheck_InvalidCurveOnSurface:
-    NbProblems->SetValue(8,NbProblems->Value(8)+1); break;
-  case BRepCheck_InvalidCurveOnClosedSurface:
-    NbProblems->SetValue(9,NbProblems->Value(9)+1); break;
-  case BRepCheck_InvalidSameRangeFlag:
-    NbProblems->SetValue(10,NbProblems->Value(10)+1); break;
-  case BRepCheck_InvalidSameParameterFlag:
-    NbProblems->SetValue(11,NbProblems->Value(11)+1); break;
-  case BRepCheck_InvalidDegeneratedFlag:
-    NbProblems->SetValue(12,NbProblems->Value(12)+1); break;
-  case BRepCheck_FreeEdge:
-    NbProblems->SetValue(13,NbProblems->Value(13)+1); break;
-  case BRepCheck_InvalidMultiConnexity:
-    NbProblems->SetValue(14,NbProblems->Value(14)+1); break;
-  case BRepCheck_InvalidRange:
-    NbProblems->SetValue(15,NbProblems->Value(15)+1); break;
-  case BRepCheck_EmptyWire:
-    NbProblems->SetValue(16,NbProblems->Value(16)+1); break;
-  case BRepCheck_RedundantEdge:
-    NbProblems->SetValue(17,NbProblems->Value(17)+1); break;
-  case BRepCheck_SelfIntersectingWire:
-    NbProblems->SetValue(18,NbProblems->Value(18)+1); break;
-  case BRepCheck_NoSurface:
-    NbProblems->SetValue(19,NbProblems->Value(19)+1); break;
-  case BRepCheck_InvalidWire:
-    NbProblems->SetValue(20,NbProblems->Value(20)+1); break;
-  case BRepCheck_RedundantWire:
-    NbProblems->SetValue(21,NbProblems->Value(21)+1); break;
-  case BRepCheck_IntersectingWires:
-    NbProblems->SetValue(22,NbProblems->Value(22)+1); break;
-  case BRepCheck_InvalidImbricationOfWires:
-    NbProblems->SetValue(23,NbProblems->Value(23)+1); break;
-  case BRepCheck_EmptyShell:
-    NbProblems->SetValue(24,NbProblems->Value(24)+1); break;
-  case BRepCheck_RedundantFace:
-    NbProblems->SetValue(25,NbProblems->Value(25)+1); break;
-  case BRepCheck_UnorientableShape:
-    NbProblems->SetValue(26,NbProblems->Value(26)+1); break;
-  case BRepCheck_NotClosed:
-    NbProblems->SetValue(27,NbProblems->Value(27)+1); break;
-  case BRepCheck_NotConnected:
-    NbProblems->SetValue(28,NbProblems->Value(28)+1); break;
-  case BRepCheck_SubshapeNotInShape:
-    NbProblems->SetValue(29,NbProblems->Value(29)+1); break;
-  case BRepCheck_BadOrientation:
-    NbProblems->SetValue(30,NbProblems->Value(30)+1); break;
-  case BRepCheck_BadOrientationOfSubshape:
-    NbProblems->SetValue(31,NbProblems->Value(31)+1); break;
-  case BRepCheck_CheckFail:
-    NbProblems->SetValue(32,NbProblems->Value(32)+1); break;
-  default:
-    break;
-  }
-}
 
 
 //=======================================================================
@@ -593,13 +515,13 @@ static void GetProblemSub(const BRepCheck_Analyzer& Ana,
 
           if(ii>sl->Length()) {
             sl->Append(sub);
-            FillProblems(itl.Value(),NbProblems);
+            NbProblems->ChangeValue(itl.Value())++;
           }
           for(ii=1; ii<=sl->Length(); ii++)
             if(sl->Value(ii).IsSame(Shape)) break;
           if(ii>sl->Length()) {
             sl->Append(Shape);
-            FillProblems(itl.Value(),NbProblems);
+            NbProblems->ChangeValue(itl.Value())++;
           }
        }
        break;
@@ -628,7 +550,7 @@ static void GetProblemShapes(const BRepCheck_Analyzer& Ana,
 
     if (itl.Value() != BRepCheck_NoError) {
       sl->Append(Shape);
-      FillProblems(itl.Value(),NbProblems);
+      NbProblems->ChangeValue(itl.Value())++;
     }
   }
   if (!theMap.IsBound(Shape)) {
@@ -653,7 +575,6 @@ static void GetProblemShapes(const BRepCheck_Analyzer& Ana,
   default:
     break;
   }
-
 }
 
 //=======================================================================
@@ -672,122 +593,60 @@ void StructuralDump(Draw_Interpretor& theCommands,
                    const TopoDS_Shape       &theShape)
 {
   Standard_Integer i;
-  //cout << "StructuralDump" << endl;
-  //cout << " -- The Shape " << ShName << " has problems :"<<endl;
-  //cout<<"  Check                                    Count"<<endl;
-  //cout<<" ------------------------------------------------"<<endl;
   theCommands << " -- The Shape " << ShName << " has problems :"<<"\n";
   theCommands<<"  Check                                    Count"<<"\n";
   theCommands<<" ------------------------------------------------"<<"\n";
 
-  Handle(TColStd_HArray1OfInteger) NbProblems = new TColStd_HArray1OfInteger(1,32);
-  for(i=1; i<=32; i++) NbProblems->SetValue(i,0);
+  Handle(TColStd_HArray1OfInteger) NbProblems = new TColStd_HArray1OfInteger(1,33);
+  for (i=1; i<=33; i++) NbProblems->SetValue (i,0);
   Handle(TopTools_HSequenceOfShape) sl,slv,sle,slw,slf,sls,slo;
   sl = new TopTools_HSequenceOfShape();
   theMap.Clear();
   GetProblemShapes(theAna, theShape, sl, NbProblems);
   theMap.Clear();
   
-  if(NbProblems->Value(1)>0)
-    theCommands<<"  Invalid Point on Curve ................... "<<NbProblems->Value(1)<<"\n";
-    //cout<<"  Invalid Point on Curve ................... "<<NbProblems->Value(1)<<endl;
-  if(NbProblems->Value(2)>0)
-    theCommands<<"  Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<"\n";
-    //cout<<"  Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<endl;
-  if(NbProblems->Value(3)>0)
-    theCommands<<"  Invalid Point on Surface ................. "<<NbProblems->Value(3)<<"\n";
-    //cout<<"  Invalid Point on Surface ................. "<<NbProblems->Value(3)<<endl;
-  if(NbProblems->Value(4)>0)
-    theCommands<<"  No 3D Curve .............................. "<<NbProblems->Value(4)<<"\n";
-    //cout<<"  No 3D Curve .............................. "<<NbProblems->Value(4)<<endl;
-  if(NbProblems->Value(5)>0)
-    theCommands<<"  Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<"\n";
-    //cout<<"  Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<endl;
-  if(NbProblems->Value(6)>0)
-    theCommands<<"  Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<"\n";
-    //cout<<"  Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<endl;
-  if(NbProblems->Value(7)>0)
-    theCommands<<"  No Curve on Surface ...................... "<<NbProblems->Value(7)<<"\n";
-    //cout<<"  No Curve on Surface ...................... "<<NbProblems->Value(7)<<endl;
-  if(NbProblems->Value(8)>0)
-    theCommands<<"  Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<"\n";
-    //cout<<"  Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<endl;
-  if(NbProblems->Value(9)>0)
-    theCommands<<"  Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<"\n";
-    //cout<<"  Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<endl;
-  if(NbProblems->Value(10)>0)
-    theCommands<<"  Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<"\n";
-    //cout<<"  Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<endl;
-  if(NbProblems->Value(11)>0)
-    theCommands<<"  Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<"\n";
-    //cout<<"  Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<endl;
-  if(NbProblems->Value(12)>0)
-    theCommands<<"  Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<"\n";
-    //cout<<"  Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<endl;
-  if(NbProblems->Value(13)>0)
-    theCommands<<"  Free Edge ................................ "<<NbProblems->Value(13)<<"\n";
-    //cout<<"  Free Edge ................................ "<<NbProblems->Value(13)<<endl;
-  if(NbProblems->Value(14)>0)
-    theCommands<<"  Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<"\n";
-    //cout<<"  Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<endl;
-  if(NbProblems->Value(15)>0)
-    theCommands<<"  Invalid Range ............................ "<<NbProblems->Value(15)<<"\n";
-    //cout<<"  Invalid Range ............................ "<<NbProblems->Value(15)<<endl;
-  if(NbProblems->Value(16)>0)
-    theCommands<<"  Empty Wire ............................... "<<NbProblems->Value(16)<<"\n";
-    //cout<<"  Empty Wire ............................... "<<NbProblems->Value(16)<<endl;
-  if(NbProblems->Value(17)>0)
-    theCommands<<"  Redundant Edge ........................... "<<NbProblems->Value(17)<<"\n";
-    //cout<<"  Redundant Edge ........................... "<<NbProblems->Value(17)<<endl;
-  if(NbProblems->Value(18)>0)
-    theCommands<<"  Self Intersecting Wire ................... "<<NbProblems->Value(18)<<"\n";
-    //cout<<"  Self Intersecting Wire ................... "<<NbProblems->Value(18)<<endl;
-  if(NbProblems->Value(19)>0)
-    theCommands<<"  No Surface ............................... "<<NbProblems->Value(19)<<"\n";
-    //cout<<"  No Surface ............................... "<<NbProblems->Value(19)<<endl;
-  if(NbProblems->Value(20)>0)
-    theCommands<<"  Invalid Wire ............................. "<<NbProblems->Value(20)<<"\n";
-    //cout<<"  Invalid Wire ............................. "<<NbProblems->Value(20)<<endl;
-  if(NbProblems->Value(21)>0)
-    theCommands<<"  Redundant Wire ........................... "<<NbProblems->Value(21)<<"\n";
-    //cout<<"  Redundant Wire ........................... "<<NbProblems->Value(21)<<endl;
-  if(NbProblems->Value(22)>0)
-    theCommands<<"  Intersecting Wires ....................... "<<NbProblems->Value(22)<<"\n";
-    //cout<<"  Intersecting Wires ....................... "<<NbProblems->Value(22)<<endl;
-  if(NbProblems->Value(23)>0)
-    theCommands<<"  Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<"\n";
-    //cout<<"  Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<endl;
-  if(NbProblems->Value(24)>0)
-    theCommands<<"  Empty Shell .............................. "<<NbProblems->Value(24)<<"\n";
-    //cout<<"  Empty Shell .............................. "<<NbProblems->Value(24)<<endl;
-  if(NbProblems->Value(25)>0)
-    theCommands<<"  Redundant Face ........................... "<<NbProblems->Value(25)<<"\n";
-    //cout<<"  Redundant Face ........................... "<<NbProblems->Value(25)<<endl;
-  if(NbProblems->Value(26)>0)
-    theCommands<<"  Unorientable Shape ....................... "<<NbProblems->Value(26)<<"\n";
-    //cout<<"  Unorientable Shape ....................... "<<NbProblems->Value(26)<<endl;
-  if(NbProblems->Value(27)>0)
-    theCommands<<"  Not Closed ............................... "<<NbProblems->Value(27)<<"\n";
-    //cout<<"  Not Closed ............................... "<<NbProblems->Value(27)<<endl;
-  if(NbProblems->Value(28)>0)
-    theCommands<<"  Not Connected ............................ "<<NbProblems->Value(28)<<"\n";
-    //cout<<"  Not Connected ............................ "<<NbProblems->Value(28)<<endl;
-  if(NbProblems->Value(29)>0)
-    theCommands<<"  Subshape not in Shape .................... "<<NbProblems->Value(29)<<"\n";
-    //cout<<"  Subshape not in Shape .................... "<<NbProblems->Value(29)<<endl;
-  if(NbProblems->Value(30)>0)
-    theCommands<<"  Bad Orientation .......................... "<<NbProblems->Value(30)<<"\n";
-    //cout<<"  Bad Orientation .......................... "<<NbProblems->Value(30)<<endl;
-  if(NbProblems->Value(31)>0)
-    theCommands<<"  Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<"\n";
-    //cout<<"  Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<endl;
-  if(NbProblems->Value(32)>0)
-    theCommands<<"  checkshape failure......... .............. "<<NbProblems->Value(32)<<"\n";
-    //cout<<"  checkshape failure......... .............. "<<NbProblems->Value(32)<<endl;
-
-  //cout<<" ------------------------------------------------"<<endl;
-  //cout<<"*** Shapes with problems : "<<sl->Length()<<endl;
-  //cout<<endl;
+  NCollection_Array1<const char*> aProblems (1,33);
+
+  aProblems.SetValue( BRepCheck_InvalidPointOnCurve, "  Invalid Point on Curve ................... ");
+  aProblems.SetValue(BRepCheck_InvalidPointOnCurveOnSurface, "  Invalid Point on CurveOnSurface .......... ");
+  aProblems.SetValue(BRepCheck_InvalidPointOnSurface, "  Invalid Point on Surface ................. ");
+  aProblems.SetValue(BRepCheck_No3DCurve, "  No 3D Curve .............................. ");
+  aProblems.SetValue(BRepCheck_Multiple3DCurve, "  Multiple 3D Curve ........................ ");
+  aProblems.SetValue(BRepCheck_Invalid3DCurve, "  Invalid 3D Curve ......................... ");
+  aProblems.SetValue(BRepCheck_NoCurveOnSurface, "  No Curve on Surface ...................... ");
+  aProblems.SetValue(BRepCheck_InvalidCurveOnSurface, "  Invalid Curve on Surface ................. ");
+  aProblems.SetValue(BRepCheck_InvalidCurveOnClosedSurface, "  Invalid Curve on Closed Surface ................. ");
+  aProblems.SetValue(BRepCheck_InvalidSameRangeFlag, "  Invalid SameRange Flag ................... ");
+  aProblems.SetValue(BRepCheck_InvalidSameParameterFlag, "  Invalid SameParameter Flag ............... ");
+  aProblems.SetValue(BRepCheck_InvalidDegeneratedFlag, "  Invalid Degenerated Flag ................. ");
+  aProblems.SetValue(BRepCheck_FreeEdge, "  Free Edge ................................ ");
+  aProblems.SetValue(BRepCheck_InvalidMultiConnexity, "  Invalid Multi Connexity ................... ");
+  aProblems.SetValue(BRepCheck_InvalidRange, "  Invalid Range ................... ");
+  aProblems.SetValue(BRepCheck_EmptyWire, "  Empty Wire ................... ");
+  aProblems.SetValue(BRepCheck_RedundantEdge, "  BRepCheck_RedundantEdge ................... ");
+  aProblems.SetValue(BRepCheck_SelfIntersectingWire, "  Self Intersecting Wire ................... ");
+  aProblems.SetValue(BRepCheck_NoSurface, "  No Surface ................... ");
+  aProblems.SetValue(BRepCheck_InvalidWire, "  Invalid Wire ................... ");
+  aProblems.SetValue(BRepCheck_RedundantWire, "  Redundant Wire ................... ");
+  aProblems.SetValue(BRepCheck_IntersectingWires, "  Intersecting Wires ................... ");
+  aProblems.SetValue(BRepCheck_InvalidImbricationOfWires, "  Invalid Imbrication Of Wires .................. ");
+  aProblems.SetValue(BRepCheck_EmptyShell, "  Empty Shell ................... ");
+  aProblems.SetValue(BRepCheck_RedundantFace, "  Redundant Face ................... ");
+  aProblems.SetValue(BRepCheck_UnorientableShape, "  Unorientable Shape ................... ");
+  aProblems.SetValue(BRepCheck_NotClosed, "  Not Closed ................... ");
+  aProblems.SetValue(BRepCheck_NotConnected, "  Not Connected ................... ");
+  aProblems.SetValue(BRepCheck_SubshapeNotInShape, "  Subshape Not In Shape ................... ");
+  aProblems.SetValue(BRepCheck_BadOrientation, "  Bad Orientation ................... ");
+  aProblems.SetValue(BRepCheck_BadOrientationOfSubshape, "  Bad Orientation of Subshape .............. ");
+  aProblems.SetValue(BRepCheck_InvalidToleranceValue, "  Invalid tolerance value................... ");
+  aProblems.SetValue(BRepCheck_CheckFail, "  Checkshape failure....................... ");
+  
+  for (Standard_Integer i = (Standard_Integer)BRepCheck_InvalidPointOnCurve; i <= (Standard_Integer)BRepCheck_CheckFail; ++i)
+  {
+    if (NbProblems->Value (i) > 0)
+      theCommands << i << aProblems.Value (i) << "\n";
+  }
+
   theCommands<<" ------------------------------------------------"<<"\n";
   theCommands<<"*** Shapes with problems : "<<sl->Length()<<"\n";
 
index 796c7885fe85879edf180ee472a57a8cf83c057f..2d345bd0a8a82e055f92dffba950a27d106c8d8e 100755 (executable)
@@ -912,7 +912,8 @@ static Standard_Integer cfindp (Draw_Interpretor& , Standard_Integer n, const ch
 
   Draw_Display d = dout.MakeDisplay(view);
 
-  Handle(Draw_Drawable3D) D = Draw::Get(a[1]);
+  Handle(
+    Draw_Drawable3D) D = Draw::Get(a[1]);
 
   Handle(DrawTrSurf_BezierCurve) DBz = 
     Handle(DrawTrSurf_BezierCurve)::DownCast(D);