0026619: Tolerances of operands are modified using bop
[occt.git] / src / QABugs / QABugs_19.cxx
old mode 100755 (executable)
new mode 100644 (file)
index ad9b45d..195acb1
@@ -22,6 +22,7 @@
 #include <V3d_View.hxx>
 #include <TopoDS_Shape.hxx>
 #include <AIS_InteractiveContext.hxx>
+#include <AIS_LocalContext.hxx>
 #include <AIS_TexturedShape.hxx>
 #include <Image_PixMap.hxx>
 #include <Image_Color.hxx>
@@ -34,8 +35,6 @@
 
 #include <Precision.hxx>
 
-#include <PCollection_HAsciiString.hxx>
-
 #include <cstdio>
 #include <cmath>
 #include <iostream>
 #include <BRepAlgo_Cut.hxx>
 #include <NCollection_Map.hxx>
 #include <NCollection_Handle.hxx>
+#include <NCollection_IncAllocator.hxx>
 #include <TCollection_HAsciiString.hxx>
 #include <GeomFill_Trihedron.hxx>
 #include <BRepOffsetAPI_MakePipe.hxx>
-#include <Standard_Atomic.hxx>
+#include <TopExp_Explorer.hxx>
+
+#include <SelectMgr_Filter.hxx>
 
 #include <Standard_Version.hxx>
 
 static Standard_Integer OCC230 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
   if ( argc != 4) {
-    di << "ERROR OCC230: Usage : " << argv[0] << " TrimmedCurve Pnt2d Pnt2d" << "\n";
+    di << "ERROR OCC230: Usage : " << argv[0] << " TrimmedCurve Pnt2d Pnt2d\n";
     return 1;
   }
 
   gp_Pnt2d P1, P2;
   if ( !DrawTrSurf::GetPoint2d(argv[2],P1)) {
-    di << "ERROR OCC230: " << argv[2] << " is not Pnt2d" << "\n";
+    di << "ERROR OCC230: " << argv[2] << " is not Pnt2d\n";
     return 1;
   }
   if ( !DrawTrSurf::GetPoint2d(argv[3],P2)) {
-    di << "ERROR OCC230: " << argv[3] << " is not Pnt2d" << "\n";
+    di << "ERROR OCC230: " << argv[3] << " is not Pnt2d\n";
     return 1;
   }
 
@@ -81,16 +83,6 @@ static Standard_Integer OCC230 (Draw_Interpretor& di, Standard_Integer argc, con
   return 0;
 }
 
-static Standard_Integer OCC142 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char ** /*argv*/)
-{
-  for(Standard_Integer i= 0;i <= 20;i++){
-    Handle(PCollection_HAsciiString) pstr = new PCollection_HAsciiString("TEST");
-    pstr->Clear();
-  }
-  di << "OCC142: OK" << "\n";
-  return 0;
-}
-
 static Standard_Integer OCC23361 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char ** /*argv*/)
 {
   gp_Pnt p(0, 0, 2);
@@ -108,9 +100,9 @@ static Standard_Integer OCC23361 (Draw_Interpretor& di, Standard_Integer /*argc*
 
   // points must be equal
   if ( ! p2.IsEqual(p3, Precision::Confusion()) )
-    di << "ERROR OCC23361: equivalent transformations does not produce equal points" << "\n";
+    di << "ERROR OCC23361: equivalent transformations does not produce equal points\n";
   else 
-    di << "OCC23361: OK" << "\n";
+    di << "OCC23361: OK\n";
 
   return 0;
 }
@@ -138,14 +130,18 @@ static Standard_Integer OCC23237 (Draw_Interpretor& di, Standard_Integer /*argc*
   }
  
   int aNbEnters = 0;
-  Standard_Real aPerfMeter_CPUtime = 0., aTimer_ElapsedTime = aTM.ElapsedTime();
+  Standard_Real aPerfMeter_CPUtime = 0., aTimer_CPUTime = 0., aS;
+  Standard_Integer aM, aH;
+  aTM.Show(aS, aM, aH, aTimer_CPUTime);
 
   perf_get_meter("TestMeter", &aNbEnters, &aPerfMeter_CPUtime);
+  perf_init_meter("TestMeter");
 
-  Standard_Real aTimeDiff = (fabs(aTimer_ElapsedTime - aPerfMeter_CPUtime) / aTimer_ElapsedTime);
+  Standard_Real aTimeDiff = (fabs(aTimer_CPUTime - aPerfMeter_CPUtime) / aTimer_CPUTime);
 
   printf("\nMeasurement results (%d cycles):\n", count);
-  printf("\nOSD_PerfMeter CPU time: %lf\nOSD_Timer elapsed time: %lf\n", aPerfMeter_CPUtime, aTimer_ElapsedTime);
+  printf("\nOSD_PerfMeter CPU time: %lf\nOSD_Timer CPU time: %lf\n",
+    aPerfMeter_CPUtime, aTimer_CPUTime);
   printf("Time delta is: %.3lf %%\n", aTimeDiff * 100);
 
   if (aTimeDiff > 0.2)
@@ -212,7 +208,7 @@ static Standard_Integer OCC22980 (Draw_Interpretor& di, Standard_Integer /*argc*
 
 static Standard_Integer OCC23595 (Draw_Interpretor& di, Standard_Integer /*argc*/, const char** /*argv*/)
 {
-  const Handle(TDocStd_Application)& anApp = XCAFApp_Application::GetApplication();
+  Handle(TDocStd_Application) anApp = XCAFApp_Application::GetApplication();
   Handle(TDocStd_Document) aDoc;
   anApp->NewDocument ("XmlXCAF", aDoc);
   QCOMPARE (!aDoc.IsNull(), Standard_True);
@@ -308,10 +304,10 @@ static Standard_Boolean OCC23774Test(const TopoDS_Face& grossPlateFace, const To
   BRepBuilderAPI_Transform transformer1(mirror1);
   transformer1.Perform(originalWire);
   if(!transformer1.IsDone()) {
-    di << "Not Done1 " << "\n";
+    di << "Not Done1 \n";
     return Standard_False;
   }
-  const TopoDS_Shape& step1ModifiedShape = transformer1.ModifiedShape(originalWire);
+  TopoDS_Shape step1ModifiedShape = transformer1.ModifiedShape(originalWire);
   
   BRepExtrema_DistShapeShape distShapeShape1(grossPlateFace,step1ModifiedShape,Extrema_ExtFlag_MIN);
   if(!distShapeShape1.IsDone())
@@ -329,7 +325,7 @@ static Standard_Boolean OCC23774Test(const TopoDS_Face& grossPlateFace, const To
     di << "Not Done1 \n";
     return Standard_False;
   }
-  const TopoDS_Shape& step2ModifiedShape = transformer1.ModifiedShape(step1ModifiedShape);
+  TopoDS_Shape step2ModifiedShape = transformer1.ModifiedShape(step1ModifiedShape);
 
   //This is identity matrix for values but for type is gp_Rotation ?!
   gp_Trsf2d mirror11 = mirror1;
@@ -391,12 +387,12 @@ static Standard_Address GeomConvertTest (Standard_Address data)
   GeomConvert_ApproxSurface aGAS (info->surf, 1e-4, GeomAbs_C1, GeomAbs_C1, 9, 9, 100, 1);
   if (!aGAS.IsDone()) {
     cout << "Error: ApproxSurface is not done!" << endl;
-    return Standard_False;
+    return 0;
   }
   const Handle(Geom_BSplineSurface)& aBSurf = aGAS.Surface();
   if (aBSurf.IsNull()) {
     cout << "Error: BSplineSurface is not created!" << endl;
-    return Standard_False;
+    return 0;
   }
   cout << "Number of UPoles:" << aBSurf->NbUPoles();
   if (aBSurf->NbUPoles() == info->nbupoles)
@@ -525,7 +521,7 @@ static Standard_Integer OCC23952intersect (Draw_Interpretor& di, Standard_Intege
 static Standard_Integer OCC23683 (Draw_Interpretor& di, Standard_Integer argc,const char ** argv)
 {
   if (argc < 2) {
-    di<<"Usage: " << argv[0] << " invalid number of arguments"<<"\n";
+    di<<"Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
 
@@ -556,7 +552,7 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
   // Check the command arguments
   if ( argc != 1 )
   {
-    di << "Error: " << argv[0] << " - invalid number of arguments" << "\n";
+    di << "Error: " << argv[0] << " - invalid number of arguments\n";
     di << "Usage: type help " << argv[0] << "\n";
     return 1; // TCL_ERROR
   }
@@ -565,8 +561,8 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
   gp_Ax22d Ax2( gp::Origin2d(), gp::DY2d(), gp::DX2d() );
   Handle(Geom_Surface) Plane = new Geom_Plane( gp::YOZ() );
 
-  di << "<<<< Preparing sample surface of revolution based on trimmed curve >>>>" << "\n";
-  di << "-----------------------------------------------------------------------" << "\n";
+  di << "<<<< Preparing sample surface of revolution based on trimmed curve >>>>\n";
+  di << "-----------------------------------------------------------------------\n";
 
   Handle(Geom2d_Circle) C2d1 = new Geom2d_Circle(Ax2, 1.0);
   Handle(Geom2d_TrimmedCurve) C2d1Trimmed = new Geom2d_TrimmedCurve(C2d1, 0.0, M_PI/2.0);
@@ -579,10 +575,10 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
 
   DBRep::Set("f1", F1);
 
-  di << "Result: f1" << "\n";
+  di << "Result: f1\n";
 
-  di << "<<<< Preparing sample surface of revolution based on offset curve  >>>>" << "\n";
-  di << "-----------------------------------------------------------------------" << "\n";
+  di << "<<<< Preparing sample surface of revolution based on offset curve  >>>>\n";
+  di << "-----------------------------------------------------------------------\n";
 
   Handle(Geom2d_OffsetCurve) C2d2Offset = new Geom2d_OffsetCurve(C2d1Trimmed, -0.5);
   TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(C2d2Offset, Plane);
@@ -594,7 +590,7 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
 
   DBRep::Set("f2", F2);
 
-  di << "Result: f2" << "\n";
+  di << "Result: f2\n";
 
   return 0;
 }
@@ -610,17 +606,17 @@ static int test_offset(Draw_Interpretor& di, Standard_Integer argc, const char**
 static Standard_Integer OCC24008 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
   if (argc != 3) {
-    di << "Usage: " << argv[0] << " invalid number of arguments" << "\n";
+    di << "Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
   Handle(Geom_Curve) aCurve = DrawTrSurf::GetCurve(argv[1]);
   Handle(Geom_Surface) aSurf = DrawTrSurf::GetSurface(argv[2]);
   if (aCurve.IsNull()) {
-    di << "Curve was not read" << "\n";
+    di << "Curve was not read\n";
        return 1;
   }
   if (aSurf.IsNull()) {
-       di << "Surface was not read" << "\n";
+       di << "Surface was not read\n";
        return 1;
   }
   ShapeConstruct_ProjectCurveOnSurface aProj;
@@ -629,11 +625,11 @@ static Standard_Integer OCC24008 (Draw_Interpretor& di, Standard_Integer argc, c
     Handle(Geom2d_Curve) aPCurve;
     aProj.Perform (aCurve, aCurve->FirstParameter(), aCurve->LastParameter(), aPCurve);
     if (aPCurve.IsNull()) {
-         di << "PCurve was not created" << "\n";
+         di << "PCurve was not created\n";
          return 1;
     }
   } catch (...) {
-    di << "Exception was caught" << "\n";
+    di << "Exception was caught\n";
   }
   return 0;
 }
@@ -701,53 +697,6 @@ static Standard_Integer OCC23945 (Draw_Interpretor& /*di*/,Standard_Integer n, c
   return 0;
 }
 
-#include <Voxel_BoolDS.hxx>
-#include <Voxel_FastConverter.hxx>
-#include <Voxel_BooleanOperation.hxx>
-static Standard_Integer OCC24019 (Draw_Interpretor& di, Standard_Integer argc, const char** argv) 
-{
-  if ( argc != 2 ) {
-    di << "Error: " << argv[0] << " - invalid number of arguments" << "\n";
-       return 1;
-  }
-
-  TCollection_AsciiString aFileName = argv[1];
-  TopoDS_Shape aShape;
-  BRep_Builder aBuilder;
-
-  if (!BRepTools::Read(aShape, aFileName.ToCString(), aBuilder)) {
-    di << "Error: Could not read a shape!" << "\n";
-       return 1;
-  }
-  
-  TopoDS_Solid aShape1 = BRepPrimAPI_MakeSphere(gp_Pnt(20,25,35), 7);
-
-  Standard_Real deflection = 0.005;
-  Standard_Integer nbThreads = 1;
-  Standard_Integer nbx = 200, nby = 200, nbz = 200;
-  Voxel_BoolDS theVoxels(0,0,0, 50, 50, 50, nbx, nby, nbz);
-  Voxel_BoolDS theVoxels1(0,0,0, 50, 50, 50, nbx, nby, nbz);
-
-  Standard_Integer progress = 0;
-  Voxel_FastConverter fcp(aShape, theVoxels, deflection, nbx, nby, nbz, nbThreads);
-  fcp.ConvertUsingSAT(progress, 1);
-  fcp.FillInVolume(1);
-
-  Voxel_FastConverter fcp1(aShape1, theVoxels1, deflection, nbx, nby, nbz, nbThreads);
-  fcp1.ConvertUsingSAT(progress, 1);
-  fcp1.FillInVolume(1);
-
-  Voxel_BooleanOperation op;
-  Standard_Boolean result = op.Cut(theVoxels1, theVoxels);
-  if ( result != 1 ) {
-    di << "Error: invalid boolean operation" << "\n";
-  } else {
-       di << "OK: boolean operation is ok" << "\n";
-  }
-
-  return 0;
-}
-
 //=======================================================================
 //function : OCC11758
 //purpose  : 
@@ -1253,7 +1202,7 @@ static Standard_Integer OCC24005 (Draw_Interpretor& theDI, Standard_Integer theN
 
   if (!anInters.IsDone())
   {
-    theDI<<"No intersections found!"<<"\n";
+    theDI<<"No intersections found!\n";
 
     return 1;
   }
@@ -1341,34 +1290,6 @@ static Standard_Integer OCC24012 (Draw_Interpretor& di, Standard_Integer argc, c
        return 0;
 }
 
-#include <Voxel_FastConverter.hxx>
-static Standard_Integer OCC24051 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv) 
-{
-       if (argc != 1) {
-               di << "Usage : " << argv[0] << " should be one argument (command name only)";
-               return 1;
-       }
-
-       TopoDS_Shape shape = BRepPrimAPI_MakeBox(gp_Pnt(5, 10, 10), 10, 20, 30).Shape();
-       Standard_Integer progress = 0;
-       Standard_Real deflection = 0.005;
-       Standard_Integer nbx = 200, nby = 200, nbz = 200;
-       Voxel_BoolDS theVoxels(-50,-50,-30, 100, 100, 100, nbx, nby, nbz);
-       Voxel_BoolDS theVoxels1(-50,-50,-30, 100, 100, 100, nbx, nby, nbz);
-       Standard_Integer nbThreads = 5;
-       Voxel_FastConverter fcp(shape, theVoxels, deflection, nbx, nby, nbz, nbThreads, Standard_True);
-       
-       #ifdef WNT
-       #pragma omp parallel for
-        for(int i = 0; i < nbThreads; i++)
-                       fcp.ConvertUsingSAT(progress, i+1);
-       #endif
-       
-       fcp.ConvertUsingSAT(progress);
-
-       return 0;
-}
-
 #include <BRepFeat_SplitShape.hxx>
 #include <ShapeAnalysis_ShapeContents.hxx>
 #include <BRepAlgo.hxx>
@@ -1398,9 +1319,9 @@ static Standard_Integer OCC24086 (Draw_Interpretor& di, Standard_Integer argc, c
     ana.NbFaces();
 
        if (!(BRepAlgo::IsValid(result))) {
-               di << "Result was checked and it is INVALID" << "\n";
+               di << "Result was checked and it is INVALID\n";
        } else {
-               di << "Result was checked and it is VALID" << "\n";
+               di << "Result was checked and it is VALID\n";
        }
        
        Handle(AIS_InteractiveObject) myShape = new AIS_Shape (result);
@@ -1417,7 +1338,7 @@ static Standard_Integer OCC24086 (Draw_Interpretor& di, Standard_Integer argc, c
 static Standard_Integer OCC24945 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
   if (argc != 1) {
-    di << "Usage: " << argv[0] << " invalid number of arguments" << "\n";
+    di << "Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
 
@@ -1451,7 +1372,7 @@ static Standard_Integer OCC24137 (Draw_Interpretor& theDI, Standard_Integer theN
   Standard_Integer anArgIter = 1;
   if (theNArg < 5)
     {
-      theDI <<"Usage: " << theArgv[0] << " face vertex U V [N]"<<"\n";
+      theDI <<"Usage: " << theArgv[0] << " face vertex U V [N]\n";
       return 1;
     }
 
@@ -1674,7 +1595,7 @@ static Standard_Integer OCC23972 (Draw_Interpretor& di,Standard_Integer n, const
 static Standard_Integer OCC24370 (Draw_Interpretor& di, Standard_Integer argc,const char ** argv)
 {
   if (argc < 5) {
-    di<<"Usage: " << argv[0] << " invalid number of arguments"<<"\n";
+    di<<"Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
 
@@ -1740,7 +1661,7 @@ static void DoIsNull(Draw_Interpretor& di)
   HT aHandle;
   //    QVERIFY (aHandle.IsNull());
   QCOMPARE (aHandle.IsNull(), Standard_True);
-  const T* p = aHandle.Access();
+  const T* p = aHandle.get();
 #if OCC_VERSION_HEX > 0x060700
   //QVERIFY (!p);
   //QVERIFY (p == 0);
@@ -1751,7 +1672,7 @@ static void DoIsNull(Draw_Interpretor& di)
   aHandle = new T;
   //QVERIFY (!aHandle.IsNull());
   QCOMPARE (!aHandle.IsNull(), Standard_True);
-  p = aHandle.Access();
+  p = aHandle.get();
   //QVERIFY (p);
   //QVERIFY (p != 0);
   QCOMPARE (p != NULL, Standard_True);
@@ -1767,7 +1688,6 @@ static Standard_Integer OCC24533 (Draw_Interpretor& di, Standard_Integer n, cons
   if (n != 1) return 1;
 
   DoIsNull<Standard_Transient, Handle(Standard_Transient)>(di);
-  DoIsNull<Standard_Persistent, Handle(Standard_Persistent)>(di);
 
   return 0;
 }
@@ -1781,18 +1701,17 @@ public:
     std::cerr << "QABugs_HandleClass[" << this << "] " << theArgVec[0] << "\n";
     return 0;
   }
-  DEFINE_STANDARD_RTTI(QABugs_HandleClass) // Type definition
+  DEFINE_STANDARD_RTTI_INLINE(QABugs_HandleClass,Standard_Transient) // Type definition
 };
 DEFINE_STANDARD_HANDLE    (QABugs_HandleClass, Standard_Transient)
-IMPLEMENT_STANDARD_HANDLE (QABugs_HandleClass, Standard_Transient)
-IMPLEMENT_STANDARD_RTTIEXT(QABugs_HandleClass, Standard_Transient)
+
 
 // Dummy class to test interface for compilation issues
 struct QABugs_NHandleClass
 {
   Standard_Integer NHandleProc (Draw_Interpretor& , Standard_Integer  , const char** theArgVec)
   {
-    std::cerr << "QABugs_NHandleClass[" << this << "] " << "" << theArgVec[0] << "\n";
+    std::cerr << "QABugs_NHandleClass[" << this << "] " << theArgVec[0] << "\n";
     return 0;
   }
 };
@@ -1803,7 +1722,7 @@ struct QABugs_NHandleClass
 static Standard_Integer OCC23951 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
   if (argc != 2) {
-    di << "Usage: " << argv[0] << " invalid number of arguments" << "\n";
+    di << "Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
   Handle(TDocStd_Document) aDoc = new TDocStd_Document("dummy");;
@@ -1862,7 +1781,7 @@ static Standard_Integer OCC23950 (Draw_Interpretor& di, Standard_Integer argc, c
   STEPCAFControl_Writer writer;
   if (! writer.Transfer (aDoc, mode))
   {
-    di << "The document cannot be translated or gives no result" << "\n";
+    di << "The document cannot be translated or gives no result\n";
     return 1;
   }
 
@@ -1937,11 +1856,11 @@ static Standard_Integer OCC24667 (Draw_Interpretor& di, Standard_Integer n, cons
 {
   if (n == 1)
   {
-    di << "OCC24667 result Wire_spine Profile [Mode [Approx]]" << "\n";
-    di << "Mode = 0 - CorrectedFrenet," << "\n";
-    di << "     = 1 - Frenet," << "\n";
-    di << "     = 2 - DiscreteTrihedron" << "\n";
-    di << "Approx - force C1-approximation if result is C0" << "\n";
+    di << "OCC24667 result Wire_spine Profile [Mode [Approx]]\n";
+    di << "Mode = 0 - CorrectedFrenet,\n";
+    di << "     = 1 - Frenet,\n";
+    di << "     = 2 - DiscreteTrihedron\n";
+    di << "Approx - force C1-approximation if result is C0\n";
     return 0;
   }
 
@@ -1987,233 +1906,6 @@ static Standard_Integer OCC24667 (Draw_Interpretor& di, Standard_Integer n, cons
   return 0;
 }
 
-#include <IGESControl_Reader.hxx>
-#include <IGESControl_Controller.hxx>
-#include <IGESData_IGESEntity.hxx>
-#include <BRepCheck_Analyzer.hxx>
-#include <PTColStd_TransientPersistentMap.hxx>
-#include <PTopoDS_HShape.hxx>
-#include <Storage_Data.hxx>
-#include <TopExp_Explorer.hxx>
-#include <MgtBRep.hxx>
-#include <FSD_File.hxx>
-#include <ShapeSchema.hxx>
-#include <TColStd_HSequenceOfTransient.hxx>
-#include <PTColStd_PersistentTransientMap.hxx>
-#include <Storage_Root.hxx>
-
-static Standard_Integer OCC24565 (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
-{
-  if (argc != 3) {
-    di << "Usage : " << argv[0] << " FileNameIGS FileNameSTOR";
-    return 1;
-  }
-
-  Standard_CString sFileNameIGS = argv[1];
-  Standard_CString sFileNameSTOR = argv[2];
-
-  IGESControl_Reader ICReader;
-
-  /* * * * * * *
-   * Read the IGES file and make sure it is valid
-   *
-   * * * * * * */
-  IGESControl_Controller::Init();
-
-  if (!ICReader.ReadFile(sFileNameIGS)) {
-    printf("%s:%d - Error reading '%s'\n",__FUNCTION__,__LINE__,sFileNameIGS);fflush(stdout);
-    return -1;
-  }
-
-  int nbShapes = ICReader.NbShapes();
-
-  printf("%s:%d - nbShapes = '%d'\n",__FUNCTION__,__LINE__,nbShapes);fflush(stdout);
-
-  TopoDS_Shape Shape;
-  if(nbShapes == 0)
-    {
-      Handle(TColStd_HSequenceOfTransient) faces=ICReader.GiveList("iges-faces");
-      Handle(TColStd_HSequenceOfTransient) surfaceList=ICReader.GiveList("xst-transferrable-roots",faces);
-
-      if (surfaceList.IsNull())
-       {
-         printf("%s:%d - surfaceList.IsNull()\n",__FUNCTION__,__LINE__);fflush(stdout);
-         return -1;
-       }
-      BRep_Builder builder;
-      TopoDS_Compound* pC = new TopoDS_Compound();
-      builder.MakeCompound(*pC);
-
-      for (int j=1;j<=surfaceList->Length();j++)
-       {
-         Handle(IGESData_IGESEntity) igesEntity=Handle(IGESData_IGESEntity)::DownCast(surfaceList->Value(j));
-         if (igesEntity.IsNull()) continue;
-         ICReader.ClearShapes();
-         Standard_Boolean rv;
-         try {
-           rv=ICReader.TransferEntity(igesEntity);
-         }
-         catch (...) {
-           rv=Standard_False;
-         }
-         if (!rv) {
-           printf("%s:%d - Error transferring IGES entity\n",__FUNCTION__,__LINE__);fflush(stdout);
-           printf("%s:%d - FormNumber = %d, TypeNumber = %d\n",__FUNCTION__,__LINE__,igesEntity->FormNumber(),igesEntity->TypeNumber());fflush(stdout);
-           return -1;
-         }
-
-         TopoDS_Shape S;
-         try {
-           S=ICReader.Shape();
-         }
-         catch(...) {
-           printf("%s:%d - Error reading IGES entity\n",__FUNCTION__,__LINE__);fflush(stdout);
-           printf("%s:%d - FormNumber = %d, TypeNumber = %d\n",__FUNCTION__,__LINE__,igesEntity->FormNumber(),igesEntity->TypeNumber());fflush(stdout);
-           return -1;
-         }
-         if (S.IsNull()) {
-           printf("%s:%d - NULL Surface encountered\n",__FUNCTION__,__LINE__);
-           return -1;
-         }
-
-         try
-           {
-             builder.Add(*pC,S);
-           }
-         catch(...)
-           {
-             printf("%s: Exception adding face.\n",__FUNCTION__);
-           }
-       }
-      Shape = TopoDS_Shape(*pC);
-    }
-  else
-    {
-      Shape = ICReader.OneShape();
-    }
-  {
-    BRepCheck_Analyzer brca(Shape);
-
-    if(!brca.IsValid())
-      {
-       printf("%s: Invalid shape after reading IGES file.\n",__FUNCTION__);
-      }
-  }
-
-  /* * * * * * *
-   * Write the contents of the Shape to a STOR file
-   *
-   * * * * * * */
-  PTColStd_TransientPersistentMap aMapTP;
-  Handle(PTopoDS_HShape) aPShape_write;
-  Handle(Storage_Data) d_write=new Storage_Data;
-  char Name[32];
-
-  TopExp_Explorer Ex;
-  int i;
-  int max_i = 0;
-
-  for (i=0,Ex.Init(Shape,TopAbs_FACE);Ex.More();i++,Ex.Next())
-    {
-
-      max_i = i;
-      try {
-       aPShape_write=MgtBRep::Translate(Ex.Current(),aMapTP,MgtBRep_WithoutTriangle);
-      }
-      catch (...) {
-       printf("%s: Error translating surface '%d'\n",__FUNCTION__,i);
-      }
-               
-      sprintf(Name,"S%010d",i);
-               
-      {
-       BRepCheck_Analyzer brca(Ex.Current());
-       if(!brca.IsValid())
-         {
-           printf("INVALID face '%s' in the shape, which will be written to the STOR file.\n",Name);
-         }
-      }
-      try {
-       d_write->AddRoot(Name,aPShape_write);
-      }
-      catch (...) {
-       printf("%s: Error adding surface '%d', RootName = '%s'\n",__FUNCTION__,i,Name);
-      }
-    }
-  printf("%s: Going to write %d surfaces.\n",__FUNCTION__,max_i+1);
-
-  FSD_File f_write;
-  if(f_write.Open(sFileNameSTOR, Storage_VSWrite)!=Storage_VSOk)
-    {
-      printf("%s: Error opening file: %s\n", __FUNCTION__,sFileNameSTOR);
-      return -1;
-    }
-  Handle(ShapeSchema) s_write=new ShapeSchema;
-  s_write->Write(f_write,d_write);
-  f_write.Close();
-  printf("%s: Wrote to the STOR file.\n",__FUNCTION__);
-
-  /* * * * * * *
-   * Read the contents of the Shape from a STOR file
-   *
-   * * * * * * */
-  FSD_File f_read;
-  if(f_read.Open(sFileNameSTOR, Storage_VSRead)!=Storage_VSOk)
-    {
-      printf("%s: Error opening file: %s\n", __FUNCTION__,sFileNameSTOR);
-      return -1;
-    }
-  Handle(ShapeSchema) s_read=new ShapeSchema;
-  Handle(Storage_Data) d_read=s_read->Read(f_read);
-
-  Handle(Standard_Persistent) p;
-  Handle(Storage_Root) r;
-  Handle(PTopoDS_HShape) aPShape_read;
-  PTColStd_PersistentTransientMap aMapPT;
-  TopoDS_Shape S_read;
-
-  printf("%s: Extracting %d faces from the STOR file.\n",__FUNCTION__,max_i+1);
-  for(int i = 0; i <= max_i; ++i)
-    {
-      sprintf(Name,"S%010d",i);
-      r=d_read->Find(Name);
-      if(r.IsNull())
-       {
-         printf("%s:%d '%s' IsNull().\n",__FUNCTION__,__LINE__,Name);fflush(stdout);
-         continue;
-       }
-      p=r->Object();
-      aPShape_read = Handle(PTopoDS_HShape)::DownCast(p);
-      try {
-       MgtBRep::Translate(aPShape_read,aMapPT,S_read,MgtBRep_WithoutTriangle);
-      }
-      catch (Standard_Failure) {
-       Handle(Standard_Failure) E=Standard_Failure::Caught();
-       std::string str;
-       str="Exception: ";
-       str+=E->DynamicType()->Name();
-       str+=" => ";
-       str+=E->GetMessageString();
-       printf("%s(1): %s: %s\n",__FUNCTION__,Name,str.c_str());fflush(stdout);
-      }
-      catch (...) {
-       printf("%s(1): Unhandled exception in MgtBRep::Translate\n",__FUNCTION__);
-      }
-
-      BRepCheck_Analyzer brca(S_read);
-
-      if(!brca.IsValid())
-       {
-         printf("%s: Read INVALID face (%s)!\n",__FUNCTION__,Name);
-       }
-    }
-
-  printf("Completed.\n");fflush(stdout);
-
-  return 0;
-}
-
-#include <Handle_BRepTools_NurbsConvertModification.hxx>
 #include <BRepPrimAPI_MakeCylinder.hxx>
 #include <BRepBuilderAPI_Copy.hxx>
 #include <BRepTools_NurbsConvertModification.hxx>
@@ -2223,7 +1915,7 @@ static TopoDS_Shape CreateTestShape (int& theShapeNb)
   BRep_Builder aBuilder;
   aBuilder.MakeCompound (aComp);
   //NURBS modifier is used to increase footprint of each shape
-  Handle_BRepTools_NurbsConvertModification aNurbsModif = new BRepTools_NurbsConvertModification;
+  Handle(BRepTools_NurbsConvertModification) aNurbsModif = new BRepTools_NurbsConvertModification;
   TopoDS_Shape aRefShape = BRepPrimAPI_MakeCylinder (50., 100.).Solid();
   BRepTools_Modifier aModifier (aRefShape, aNurbsModif);
   if (aModifier.IsDone()) {
@@ -2248,7 +1940,7 @@ static TopoDS_Shape CreateTestShape (int& theShapeNb)
 static Standard_Integer OCC24931 (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
 {
   if (argc != 2) {
-    di << "Usage: " << argv[0] << " invalid number of arguments"<<"\n";
+    di << "Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
   TCollection_ExtendedString aFileName (argv[1]);
@@ -2290,7 +1982,7 @@ static Standard_Integer OCC24755 (Draw_Interpretor& di, Standard_Integer n, cons
 
   Handle(TDocStd_Application) anApp = new AppStdL_Application;
   Handle(TDocStd_Document) aDoc;
-  anApp->NewDocument ("MDTV-Standard", aDoc);
+  anApp->NewDocument ("BinOcaf", aDoc);
   TDF_Label aLab = aDoc->Main();
   TDataStd_Integer::Set (aLab, 0);
   TDataStd_Name::Set (aLab, "test");
@@ -2510,7 +2202,7 @@ static Standard_Integer OCC25004 (Draw_Interpretor& theDI,
                                   Standard_Integer /*theNArg*/,
                                   const char** /*theArgs*/)
 {
-  math_MultipleVarFunction* aFunc = new BraninFunction();
+  BraninFunction aFunc;
 
   math_Vector aLower(1,2), aUpper(1,2);
   aLower(1) = -5;
@@ -2533,7 +2225,7 @@ static Standard_Integer OCC25004 (Draw_Interpretor& theDI,
       aCurrPnt1(1) = aLower(1) + (aUpper(1) - aLower(1)) * (i - 1) / (aGridOrder - 1.0);
       aCurrPnt1(2) = aLower(2) + (aUpper(2) - aLower(2)) * (j - 1) / (aGridOrder - 1.0);
 
-      aFunc->Value(aCurrPnt1, aFuncValues(idx));
+      aFunc.Value(aCurrPnt1, aFuncValues(idx));
       idx++;
     }
   }
@@ -2564,7 +2256,7 @@ static Standard_Integer OCC25004 (Draw_Interpretor& theDI,
         aLipConst = C;
     }
 
-  math_GlobOptMin aFinder(aFunc, aLower, aUpper, aLipConst);
+  math_GlobOptMin aFinder(&aFunc, aLower, aUpper, aLipConst);
   aFinder.Perform();
   //(-pi , 12.275), (pi , 2.275), (9.42478, 2.475)
 
@@ -2725,14 +2417,14 @@ static Standard_Integer OCC25043 (Draw_Interpretor& theDI,
         }
         else 
         {
-          theDI << "Info. Faulty shape if found in source shape\n";
+          theDI << "Info. Faulty shape is found in source shape\n";
         }
       }
     }
   }
   else 
   {
-    theDI << "Error. Problems are not detected. Test is not performed.";
+    theDI << "Problems are not detected. Test is not performed.";
   }
 
   return 0;
@@ -2787,13 +2479,13 @@ class mOcafApplication : public TDocStd_Application
 static Standard_Integer OCC23010 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
 {
   if (argc != 2) {
-    di << "Usage: " << argv[0] << " invalid number of arguments" << "\n";
+    di << "Usage: " << argv[0] << " invalid number of arguments\n";
     return 1;
   }
   std::string fileName=argv[1];
   mOcafApplication *mCasApp = new mOcafApplication();
   Handle(TDocStd_Document) doc;
-  mCasApp->NewDocument("MDTV-XCAF", doc);
+  mCasApp->NewDocument("BinXCAF", doc);
   STEPCAFControl_Reader stepReader;
   IFSelect_ReturnStatus status = stepReader.ReadFile (fileName.c_str());
   if (status != IFSelect_RetDone)
@@ -2897,7 +2589,7 @@ static Standard_Integer OCC25202 ( Draw_Interpretor& theDI,
 static Standard_Integer OCC7570 (Draw_Interpretor& di, Standard_Integer n, const char** a)
 {
   if (n != 2) {
-    di<<"Usage: "<<a[0]<<" invalid number of arguments"<<"\n";
+    di<<"Usage: "<<a[0]<<" invalid number of arguments\n";
     return 1;
   }
   TopoDS_Shape in_shape (DBRep::Get (a[1]));
@@ -3034,7 +2726,7 @@ static Standard_Integer OCC25100 (Draw_Interpretor& di, Standard_Integer argc, c
   TopoDS_Shape S = DBRep::Get(argv[1]);
   if ( S.IsNull() )
   {
-    di << "Shape is empty" << "\n";
+    di << "Shape is empty\n";
     return 1;
   }
   
@@ -3084,7 +2776,7 @@ static Standard_Integer OCC25348 (Draw_Interpretor& theDI,
 static Standard_Integer OCC25413 (Draw_Interpretor& di, Standard_Integer narg , const char** a)
 {
   if (narg != 2) {
-    di << "Usage: " << a[0] << " invalid number of arguments" << "\n";
+    di << "Usage: " << a[0] << " invalid number of arguments\n";
     return 1;
   }
   TopoDS_Shape aShape = DBRep::Get (a[1]);
@@ -3389,12 +3081,98 @@ static Standard_Integer OCC25547(
   return 0;
 }
 
+static Standard_Integer OCC26139 (Draw_Interpretor& theDI,
+                                  Standard_Integer  argc,
+                                  const char **     argv)
+{
+
+  Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
+  if (aCtx.IsNull())
+  {
+    theDI << "Use 'vinit' command before " << argv[0] << "\n";
+    return 1;
+  }
+
+  Standard_Integer aBoxGridSize = 100;
+  Standard_Integer aCompGridSize = 3;
+  Standard_Real aBoxSize = 5.0;
+
+  if (argc > 1)
+  {
+    for (Standard_Integer anArgIdx = 1; anArgIdx < argc; ++anArgIdx)
+    {
+      TCollection_AsciiString anArg (argv[anArgIdx]);
+      anArg.LowerCase();
+      if (anArg == "-boxgrid")
+      {
+        aBoxGridSize = Draw::Atoi (argv[++anArgIdx]);
+      }
+      else if (anArg == "-compgrid")
+      {
+        aCompGridSize = Draw::Atoi (argv[++anArgIdx]);
+      }
+      else if (anArg == "-boxsize")
+      {
+        aBoxSize = Draw::Atof (argv[++anArgIdx]);
+      }
+    }
+  }
+
+  NCollection_List<Handle(AIS_Shape)> aCompounds;
+  for (Standard_Integer aCompGridX = 0; aCompGridX < aCompGridSize; ++aCompGridX)
+  {
+    for (Standard_Integer aCompGridY = 0; aCompGridY < aCompGridSize; ++aCompGridY)
+    {
+      BRep_Builder aBuilder;
+      TopoDS_Compound aComp;
+      aBuilder.MakeCompound (aComp);
+      for (Standard_Integer aBoxGridX = 0; aBoxGridX < aBoxGridSize; ++aBoxGridX)
+      {
+        for (Standard_Integer aBoxGridY = 0; aBoxGridY < aBoxGridSize; ++aBoxGridY)
+        {
+          BRepPrimAPI_MakeBox aBox (gp_Pnt (aBoxGridX * aBoxSize, aBoxGridY * aBoxSize, 0.0),
+                                    aBoxSize, aBoxSize, aBoxSize);
+          aBuilder.Add (aComp, aBox.Shape());
+        }
+      }
+      gp_Trsf aTrsf;
+      aTrsf.SetTranslation (gp_Vec (aBoxGridSize * aBoxSize * aCompGridX,
+                                    aBoxGridSize * aBoxSize * aCompGridY,
+                                    0.0));
+      TopLoc_Location aLoc (aTrsf);
+      aComp.Located (aLoc);
+      aCompounds.Append (new AIS_Shape (aComp));
+    }
+  }
+
+  OSD_Timer aTimer;
+  for (NCollection_List<Handle(AIS_Shape)>::Iterator aCompIter (aCompounds); aCompIter.More(); aCompIter.Next())
+  {
+    aTimer.Start();
+    aCtx->Display (aCompIter.Value(), Standard_False);
+    aTimer.Stop();
+    theDI << "Display time: " << aTimer.ElapsedTime() << "\n";
+    aTimer.Reset();
+  }
+
+  aTimer.Reset();
+  aTimer.Start();
+  for (NCollection_List<Handle(AIS_Shape)>::Iterator aCompIter (aCompounds); aCompIter.More(); aCompIter.Next())
+  {
+    aCtx->Remove (aCompIter.Value(), Standard_False);
+  }
+  aTimer.Stop();
+  theDI << "Remove time: " << aTimer.ElapsedTime() << "\n";
+
+  return 0;
+}
+
 #include <TColStd_DataMapIteratorOfDataMapOfIntegerInteger.hxx>
 #include <TColStd_DataMapOfIntegerInteger.hxx>
 #include <OSD.hxx>
 #include <ShapeFix_Wire.hxx>
 #include <ShapeExtend_Status.hxx>
-#ifdef WNT
+#ifdef _WIN32
 #define EXCEPTION ...
 #else
 #define EXCEPTION Standard_Failure
@@ -3422,7 +3200,7 @@ static ShapeExtend_Status getStatusGap(const Handle(ShapeFix_Wire)&   theFix,
 static Standard_Integer OCC24881 (Draw_Interpretor& di, Standard_Integer narg , const char** a)
 {
   if (narg < 2) {
-    di<<"Usage: "<<a[0]<<" invalid number of arguments"<<"\n";
+    di<<"Usage: "<<a[0]<<" invalid number of arguments\n";
     return 1;
   }
 //    cout <<"FileName1: " << argv[1] <<endl;
@@ -3515,7 +3293,7 @@ static Standard_Integer OCC24881 (Draw_Interpretor& di, Standard_Integer narg ,
        }    
        if (nbOk)
        {
-               di << "Fix_FillGaps_NothingToDo" <<"\n";
+               di << "Fix_FillGaps_NothingToDo\n";
 
        }
        TColStd_DataMapIteratorOfDataMapOfIntegerInteger aStatusItr(aStatusNbDMap);
@@ -3551,6 +3329,131 @@ static Standard_Integer OCC24881 (Draw_Interpretor& di, Standard_Integer narg ,
   return 0;
 }
 
+//=======================================================================
+//function : OCC26172
+//purpose  :
+//=======================================================================
+static Standard_Integer OCC26172 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+  if (theArgNb != 1)
+  {
+    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    theDI.PrintHelp (theArgVec[0]);
+    return 1;
+  }
+
+  Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
+  if(anAISContext.IsNull())
+  {
+    std::cerr << "Error: no active view. Please call vinit.\n";
+    return 1;
+  }
+
+  gp_Pnt aStart (100, 100, 100);
+  gp_Pnt anEnd (300, 400, 600);
+  BRepBuilderAPI_MakeEdge anEdgeBuilder (aStart, anEnd);
+  TopoDS_Edge anEdge = anEdgeBuilder.Edge();
+  Handle(AIS_Shape) aTestAISShape = new AIS_Shape (anEdge);
+  anAISContext->Display (aTestAISShape);
+
+  // 2. activate it in selection modes
+  TColStd_SequenceOfInteger aModes;
+  aModes.Append (AIS_Shape::SelectionMode ((TopAbs_ShapeEnum) TopAbs_VERTEX));
+  aModes.Append (AIS_Shape::SelectionMode ((TopAbs_ShapeEnum) TopAbs_EDGE));
+
+  anAISContext->OpenLocalContext();
+  anAISContext->Deactivate (aTestAISShape);
+  anAISContext->Load (aTestAISShape, -1, true);
+  for (Standard_Integer anIt = 1; anIt <= aModes.Length(); ++anIt)
+  {
+    anAISContext->Activate (aTestAISShape, aModes (anIt));
+  }
+
+  // select entities in vertex selection mode
+  Handle(SelectMgr_Selection) aSelection = aTestAISShape->Selection (aModes (1));
+  for (aSelection->Init(); aSelection->More(); aSelection->Next())
+  {
+    Handle(SelectBasics_SensitiveEntity) anEntity = aSelection->Sensitive()->BaseSensitive();
+    if (anEntity.IsNull())
+    {
+      continue;
+    }
+
+    Handle(SelectMgr_EntityOwner) anOwner =
+      Handle(SelectMgr_EntityOwner)::DownCast (anEntity->OwnerId());
+
+    if (anOwner.IsNull())
+    {
+      continue;
+    }
+
+    anAISContext->LocalContext()->AddOrRemoveSelected (anOwner);
+  }
+
+  // select entities in edge selection mode
+  aSelection = aTestAISShape->Selection (aModes (2));
+  for (aSelection->Init(); aSelection->More(); aSelection->Next())
+  {
+    Handle(SelectBasics_SensitiveEntity) anEntity = aSelection->Sensitive()->BaseSensitive();
+    if (anEntity.IsNull())
+    {
+      continue;
+    }
+
+    Handle(SelectMgr_EntityOwner) anOwner =
+      Handle(SelectMgr_EntityOwner)::DownCast (anEntity->OwnerId());
+
+    if (anOwner.IsNull())
+    {
+      continue;
+    }
+
+    anAISContext->LocalContext()->AddOrRemoveSelected (anOwner);
+  }
+
+  // deactivate vertex mode and check clearing of outdated selection
+  anAISContext->Deactivate (aTestAISShape, aModes (1));
+  anAISContext->LocalContext()->ClearOutdatedSelection (aTestAISShape, true);
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26284
+//purpose  :
+//=======================================================================
+static Standard_Integer OCC26284 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+  if (theArgNb != 1)
+  {
+    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    theDI.PrintHelp (theArgVec[0]);
+    return 1;
+  }
+
+  Handle(AIS_InteractiveContext) anAISContext = ViewerTest::GetAISContext();
+  if (anAISContext.IsNull())
+  {
+    std::cerr << "Error: no active view. Please call vinit.\n";
+    return 1;
+  }
+
+  BRepPrimAPI_MakeSphere aSphereBuilder (gp_Pnt (0.0, 0.0, 0.0), 1.0);
+  Handle(AIS_Shape) aSphere = new AIS_Shape (aSphereBuilder.Shape());
+  anAISContext->Display (aSphere);
+  for (Standard_Integer aChildIdx = 0; aChildIdx < 5; ++aChildIdx)
+  {
+    BRepPrimAPI_MakeSphere aBuilder (gp_Pnt (1.0 + aChildIdx, 1.0 + aChildIdx, 1.0 + aChildIdx), 1.0);
+    Handle(AIS_Shape) aChild = new AIS_Shape (aBuilder.Shape());
+    aSphere->AddChild (aChild);
+    anAISContext->Display (aChild);
+  }
+
+  anAISContext->RecomputeSelectionOnly (aSphere);
+
+  return 0;
+}
+
 #include <IntTools_Context.hxx>
 #include <GeomAPI_ProjectPointOnSurf.hxx>
 
@@ -3602,45 +3505,1331 @@ Standard_Integer xprojponf (Draw_Interpretor& di,
   return 0;
 }
 
-void QABugs::Commands_19(Draw_Interpretor& theCommands) {
-  const char *group = "QABugs";
+//=======================================================================
+//function : OCC25547
+//purpose  :
+//=======================================================================
+#include <BRepMesh_CircleTool.hxx>
+#include <SelectMgr_EntityOwner.hxx>
 
-  Handle(QABugs_HandleClass) aClassPtr = new QABugs_HandleClass();
-  theCommands.Add ("OCC24202_1", "Test Handle-based procedure",
-                   __FILE__, aClassPtr, &QABugs_HandleClass::HandleProc, group);
-  NCollection_Handle<QABugs_NHandleClass> aNClassPtr = new QABugs_NHandleClass();
-  theCommands.Add ("OCC24202_2", "Test NCollection_Handle-based procedure",
-                   __FILE__, aNClassPtr, &QABugs_NHandleClass::NHandleProc, group);
+static Standard_Boolean inspect_point(const gp_XY&        thePoint,
+                                      const gp_XY&        theCenter,
+                                      const Standard_Real theRadius)
+{
+  static Standard_Real aPrecision   = Precision::PConfusion();
+  static Standard_Real aSqPrecision = aPrecision * aPrecision;
+  const gp_XY aDistVec = thePoint - theCenter;
+  if (aDistVec.SquareModulus() - (theRadius * theRadius) < aSqPrecision)
+    return Standard_True;
+  else
+    return Standard_False;
+}
 
-  theCommands.Add ("OCC230", "OCC230 TrimmedCurve Pnt2d Pnt2d", __FILE__, OCC230, group);
-  theCommands.Add ("OCC142", "OCC142", __FILE__, OCC142, group);
-  theCommands.Add ("OCC23361", "OCC23361", __FILE__, OCC23361, group);
-  theCommands.Add ("OCC23237", "OCC23237", __FILE__, OCC23237, group); 
-  theCommands.Add ("OCC22980", "OCC22980", __FILE__, OCC22980, group);
-  theCommands.Add ("OCC23595", "OCC23595", __FILE__, OCC23595, group);
-  theCommands.Add ("OCC22611", "OCC22611 string nb", __FILE__, OCC22611, group);
-  theCommands.Add ("OCC22595", "OCC22595", __FILE__, OCC22595, group);
-  theCommands.Add ("OCC23774", "OCC23774 shape1 shape2", __FILE__, OCC23774, group);
-  theCommands.Add ("OCC23683", "OCC23683 shape", __FILE__, OCC23683, group);
-  theCommands.Add ("OCC23952sweep", "OCC23952sweep nbupoles shape", __FILE__, OCC23952sweep, group);
-  theCommands.Add ("OCC23952intersect", "OCC23952intersect nbsol shape1 shape2", __FILE__, OCC23952intersect, group);
-  theCommands.Add ("test_offset", "test_offset", __FILE__, test_offset, group);
-  theCommands.Add ("OCC23945", "OCC23945 surfname U V X Y Z [DUX DUY DUZ DVX DVY DVZ [D2UX D2UY D2UZ D2VX D2VY D2VZ D2UVX D2UVY D2UVZ]]", __FILE__, OCC23945,group);
-  theCommands.Add ("OCC24008", "OCC24008 curve surface", __FILE__, OCC24008, group);
-  theCommands.Add ("OCC24019", "OCC24019 aShape", __FILE__, OCC24019, group);
-  theCommands.Add ("OCC11758", "OCC11758", __FILE__, OCC11758, group);
-  theCommands.Add ("OCC24005", "OCC24005 result", __FILE__, OCC24005, group);
-  theCommands.Add ("OCC24137", "OCC24137 face vertex U V [N]", __FILE__, OCC24137, group);
-  theCommands.Add ("OCC24271", "Boolean operations on NCollection_Map", __FILE__, OCC24271, group);
-  theCommands.Add ("OCC23972", "OCC23972", __FILE__, OCC23972, group);
+static Standard_Integer OCC24923(
+  Draw_Interpretor& theDI, 
+  Standard_Integer  argc, 
+  const char **     argv)
+{
+  srand(static_cast<unsigned int>(time(NULL)));
+
+  const Standard_Real    aMaxDeviation = (argc > 1) ? Draw::Atof(argv[1]) : 0.01;
+  const Standard_Integer aPointsNb     = 10000000;
+  const Standard_Real    aMinAngle     = 5 * M_PI / 180.;
+  static Standard_Real   aSqPrecision  = Precision::PConfusion() * Precision::PConfusion();
+
+  Standard_Integer aFailedNb = 0;
+  for (Standard_Integer i = 0; i < aPointsNb; ++i)
+  {
+    gp_XY p[3];
+    for (Standard_Integer j = 0; j < 3; ++j)
+      p[j].SetCoord(((Standard_Real)rand())/RAND_MAX, ((Standard_Real)rand())/RAND_MAX);
+
+    // Check that points do not compose degenerated triangle.
+    gp_XY aVec1 = p[1] - p[0];
+    gp_XY aVec2 = p[2] - p[0];
+    if (aVec1.SquareModulus() > aSqPrecision && 
+        aVec2.SquareModulus() > aSqPrecision &&
+        (aVec1 ^ aVec2) > aMinAngle)
+    {
+      gp_XY aCenter;
+      Standard_Real aRadius;
+      if (BRepMesh_CircleTool::MakeCircle(p[0], p[1], p[2], aCenter, aRadius))
+      {
+        if (!inspect_point(p[0], aCenter, aRadius) || 
+            !inspect_point(p[1], aCenter, aRadius) || 
+            !inspect_point(p[2], aCenter, aRadius))
+        {
+         /* theDI << "Missed: " <<
+            "p1=(" << p1.X() << ", " << p1.Y() << "), " <<
+            "p2=(" << p2.X() << ", " << p2.Y() << "), " <<
+            "p3=(" << p3.X() << ", " << p3.Y() << "), " <<
+            "c=(" << aCenter.X() << ", " << aCenter.Y() << "), " <<
+            "r=" << aRadius << "\n";*/
+            
+          ++aFailedNb;
+        }
+
+        continue;
+      }
+    }
+
+    // Ensure that aPointsNb suitable for tests are generated
+    --i;
+  }
+
+  const Standard_Real aDeviation = 
+    1. - (Standard_Real)(aPointsNb - aFailedNb) / (Standard_Real)aPointsNb;
+
+  theDI << "Number of failed cases: " << aFailedNb << " (Total " << aPointsNb << ")\n";
+  if (aDeviation > aMaxDeviation)
+  {
+    theDI << "Failed. Number of incorrect results is too huge: " << 
+      aDeviation * 100 << "% (Max " << aMaxDeviation * 100 << "%)\n";
+    return 1;
+  }
+
+  theDI << "Deviation of incorrect results is: " <<
+    aDeviation * 100 << "% (Max " << aMaxDeviation * 100 << "%)\n";
+  theDI << "Test completed\n";
+  return 0;
+}
+
+#include <TColGeom_Array1OfBSplineCurve.hxx>
+#include <TColStd_Array1OfReal.hxx>
+#include <TColGeom_HArray1OfBSplineCurve.hxx>
+#include <GeomConvert.hxx>
+
+//=======================================================================
+//function : OCC26446
+//purpose  : 
+//=======================================================================
+Standard_Integer OCC26446 (Draw_Interpretor& di, 
+                           Standard_Integer n, 
+                           const char** a)
+{
+  if (n != 4) {
+    di << "Usage: OCC26446 r c1 c2\n";
+    return 1;
+  }
+
+  Handle(Geom_BSplineCurve) aCurve1 =
+    Handle(Geom_BSplineCurve)::DownCast(DrawTrSurf::GetCurve(a[2]));
+  Handle(Geom_BSplineCurve) aCurve2 = 
+    Handle(Geom_BSplineCurve)::DownCast(DrawTrSurf::GetCurve(a[3]));
+
+  if (aCurve1.IsNull()) {
+    di << a[2] << " is not a BSpline curve\n";
+       return 1;
+  }
+
+  if (aCurve2.IsNull()) {
+    di << a[3] << " is not a BSpline curve\n";
+       return 1;
+  }
+
+  TColGeom_Array1OfBSplineCurve          aCurves     (0, 1);
+  TColStd_Array1OfReal                   aTolerances (0, 0);
+  Standard_Real                          aTolConf    = 1.e-3;
+  Standard_Real                          aTolClosure = Precision::Confusion();
+  Handle(TColGeom_HArray1OfBSplineCurve) aConcatCurves;
+  Handle(TColStd_HArray1OfInteger)       anIndices;
+
+  aCurves.SetValue(0, aCurve1);
+  aCurves.SetValue(1, aCurve2);
+  aTolerances.SetValue(0, aTolConf);
+
+  GeomConvert::ConcatC1(aCurves,
+                        aTolerances,
+                        anIndices,
+                        aConcatCurves,
+                        Standard_False,
+                        aTolClosure);
+
+  Handle(Geom_BSplineCurve) aResult =
+    aConcatCurves->Value(aConcatCurves->Lower());
+
+  DrawTrSurf::Set(a[1], aResult);
+  return 0;
+}
+
+static Standard_Integer OCC26448 (Draw_Interpretor& theDI, Standard_Integer, const char **)
+{
+  TColStd_SequenceOfReal aSeq1, aSeq2;
+  aSeq1.Append(11.);
+  aSeq1.Prepend (aSeq2);
+  theDI << "TCollection: 11 -> " << aSeq1.First() << "\n";
+
+  NCollection_Sequence<Standard_Real> nSeq1, nSeq2;
+  nSeq1.Append(11.);
+  nSeq1.Prepend (nSeq2);
+  theDI << "NCollection: 11 -> " << nSeq1.First() << "\n";
+
+  theDI << "OK";
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26407
+//purpose  :
+//=======================================================================
+#include <BRepBuilderAPI_MakeWire.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRepMesh_IncrementalMesh.hxx>
+#include <TCollection_AsciiString.hxx>
+static Standard_Integer OCC26407 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+  if (theArgNb != 2)
+  {
+    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    theDI.PrintHelp (theArgVec[0]);
+    return 1;
+  }
+
+  // Construct vertices.
+  std::vector<TopoDS_Vertex> wire_vertices;
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(587.90000000000009094947, 40.6758179230516248026106, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(807.824182076948432040808, 260.599999999999965893949, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(644.174182076948454778176, 424.249999999999943156581, 88.5000000000000142108547)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(629.978025792618950617907, 424.25, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(793.628025792618700506864, 260.599999999999852207111, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(587.900000000000204636308, 54.8719742073813492311274, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(218.521974207381418864315, 424.250000000000056843419, 88.5)));
+  wire_vertices.push_back(BRepBuilderAPI_MakeVertex(gp_Pnt(204.325817923051886282337, 424.249999999999943156581, 88.5)));
+
+  // Construct wire.
+  BRepBuilderAPI_MakeWire wire_builder;
+  for (size_t i = 0; i < wire_vertices.size(); i++)
+  {
+    const TopoDS_Vertex &v = wire_vertices[i];
+    const TopoDS_Vertex &w = wire_vertices[(i+1) % wire_vertices.size()];
+
+    wire_builder.Add(BRepBuilderAPI_MakeEdge(v, w));
+  }
+
+  // Create face and triangulate it.
+  // Construct face.
+  gp_Pnt v0 = BRep_Tool::Pnt(wire_vertices[0]);
+  gp_Pnt v1 = BRep_Tool::Pnt(wire_vertices[1]);
+  gp_Pnt v2 = BRep_Tool::Pnt(wire_vertices[wire_vertices.size() - 1]);
+
+  gp_Vec face_normal = gp_Vec(v0, v1).Crossed(gp_Vec(v0, v2));
+
+  TopoDS_Face face = BRepBuilderAPI_MakeFace(gp_Pln(v0, face_normal), wire_builder);
+  BRepMesh_IncrementalMesh m(face, 1e-7);
+
+  if (m.GetStatusFlags() != 0)
+  {
+    theDI << "Failed. Status for face constructed from vertices: " << m.GetStatusFlags() << "\n";
+    return 1;
+  }
+  DBRep::Set(theArgVec[1], face);
+  char buf[256];
+  sprintf(buf, "isos %s 0", theArgVec[1]);
+  theDI.Eval(buf);
+
+  sprintf(buf, "triangles %s", theArgVec[1]);
+  theDI.Eval(buf);
+
+  theDI.Eval("smallview; fit");
+
+  theDI << "Test completed\n";
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26485
+//purpose  :
+//=======================================================================
+#include <Poly.hxx>
+static Standard_Integer OCC26485 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+  if (theArgNb != 2)
+  {
+    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    theDI.PrintHelp (theArgVec[0]);
+    return 1;
+  }
+
+  TopoDS_Shape aShape = DBRep::Get(theArgVec[1]);
+  if (aShape.IsNull())
+  {
+    theDI << "Failed. Null shape\n";
+    return 1;
+  }
+
+  Standard_Boolean isFailed = Standard_False;
+  TopExp_Explorer aExplorer(aShape, TopAbs_FACE);
+  for (; aExplorer.More(); aExplorer.Next())
+  {
+    const TopoDS_Face& aFace = TopoDS::Face( aExplorer.Current() );
+    TopLoc_Location L = TopLoc_Location();
+    const Handle(Poly_Triangulation)& aT = BRep_Tool::Triangulation( aFace , L );
+
+    if(aT.IsNull())
+      continue;
+
+    Poly::ComputeNormals(aT);
+    const TColgp_Array1OfPnt&       aVertices = aT->Nodes();
+    const TShort_Array1OfShortReal& aNormals  = aT->Normals();
+
+    // Number of nodes in the triangulation
+    int aVertexNb = aT->Nodes().Length();
+    if (aVertexNb*3 != aNormals.Length())
+    {
+      theDI << "Failed. Different number of normals vs. vertices\n";
+      return 1;
+    }
+
+    // Get each vertex index, checking common vertexes between shapes
+    for( int i=0; i < aVertexNb; i++ )
+    {
+      gp_Pnt aPoint = aVertices.Value( i+1 );
+      gp_Vec aNormal = gp_Vec(
+        aNormals.Value( i*3 + 1 ),
+        aNormals.Value( i*3 + 2 ),
+        aNormals.Value( i*3 + 3 ) );
+
+      if (aNormal.X() == 0 && aNormal.Y() == 0 && aNormal.Z() == 1)
+      {
+        char buf[256];
+        sprintf(buf, "fail_%d", i+1);
+        theDI << "Failed. Point " << buf << ": "
+              << aPoint.X() << " "
+              << aPoint.Y() << " "
+              << aPoint.Z() << "\n";
+
+        DrawTrSurf::Set (buf, aPoint);
+      }
+    }
+  }
+
+  theDI << (isFailed ? "Test failed" : "Test completed") << "\n";
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26553
+//purpose  :
+//=======================================================================
+#include <BRepBuilderAPI_MakeWire.hxx>
+
+static Standard_Integer OCC26553 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+  if (theArgc < 2)
+  {
+    theDI << "Error: path to file with shell is missing\n";
+    return 1;
+  }
+
+  BRep_Builder aBuilder;
+  TopoDS_Shape aShell;
+  BRepTools::Read(aShell, theArgv[1], aBuilder);
+
+  if (aShell.IsNull())
+  {
+    theDI << "Error: shell not loaded\n";
+    return 1;
+  }
+
+  TopoDS_Edge aPipeEdge = BRepBuilderAPI_MakeEdge (gp_Pnt (0, 0, 0), gp_Pnt (0, 0, 10));
+  TopoDS_Wire aPipeWire = BRepBuilderAPI_MakeWire(aPipeEdge).Wire();
+
+  BRepOffsetAPI_MakePipe aPipeBuilder(aPipeWire, aShell);
+  if (!aPipeBuilder.IsDone())
+  {
+    theDI << "Error: failed to create pipe\n";
+    return 1;
+  }
+
+  for (TopExp_Explorer aShapeExplorer(aShell, TopAbs_EDGE); aShapeExplorer.More(); aShapeExplorer.Next ()) {
+    const TopoDS_Shape& aGeneratedShape = aPipeBuilder.Generated(aPipeEdge, aShapeExplorer.Current());
+    if (aGeneratedShape.IsNull())
+    {
+      theDI << "Error: null shape\n";
+      return 1;
+    }
+  }
+
+  theDI << "History returned successfully\n";
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26195
+//purpose  :
+//=======================================================================
+#include <SelectMgr_SelectingVolumeManager.hxx>
+#include <BRepBuilderAPI_MakePolygon.hxx>
+#include <Geom_CartesianPoint.hxx>
+#include <AIS_Line.hxx>
+#include <Aspect_Window.hxx>
+static Standard_Integer OCC26195 (Draw_Interpretor& theDI, Standard_Integer theArgNb, const char** theArgVec)
+{
+  if (theArgNb < 3)
+  {
+    std::cerr << "Error: wrong number of arguments! See usage:\n";
+    theDI.PrintHelp (theArgVec[0]);
+    return 1;
+  }
+
+  if (ViewerTest::GetAISContext().IsNull())
+  {
+    std::cerr << "Error: No opened context!\n";
+    return 1;
+  }
+
+  gp_Pnt2d aPxPnt1, aPxPnt2;
+  aPxPnt1.SetX (Draw::Atof (theArgVec[1]));
+  aPxPnt1.SetY (Draw::Atof (theArgVec[2]));
+  if (theArgNb > 4)
+  {
+    aPxPnt2.SetX (Draw::Atof (theArgVec[3]));
+    aPxPnt2.SetY (Draw::Atof (theArgVec[4]));
+  }
+  Standard_Boolean toPrint = Standard_False;
+  if (theArgNb % 2 == 0)
+  {
+    toPrint = Draw::Atoi (theArgVec[theArgNb - 1]);
+  }
+
+  SelectMgr_SelectingVolumeManager* aMgr = new SelectMgr_SelectingVolumeManager();
+  aMgr->SetActiveSelectionType (theArgNb > 4 ?
+    SelectMgr_SelectingVolumeManager::Box : SelectMgr_SelectingVolumeManager::Point);
+  aMgr->SetCamera (ViewerTest::CurrentView()->Camera());
+  aMgr->SetPixelTolerance (ViewerTest::GetAISContext()->PixelTolerance());
+  Standard_Integer aWidth, aHeight;
+  ViewerTest::CurrentView()->View()->Window()->Size (aWidth, aHeight);
+  aMgr->SetWindowSize (aWidth, aHeight);
+  if (theArgNb > 4)
+  {
+    aMgr->BuildSelectingVolume (aPxPnt1, aPxPnt2);
+  }
+  else
+  {
+    aMgr->BuildSelectingVolume (aPxPnt1);
+  }
+  const gp_Pnt* aVerts = aMgr->GetVertices();
+  gp_Pnt aNearPnt = aMgr->GetNearPnt();
+  gp_Pnt aFarPnt  = aMgr->GetFarPnt();
+  BRepBuilderAPI_MakePolygon aWireBldrs[4];
+
+  aWireBldrs[0].Add (gp_Pnt (aVerts[0].X(), aVerts[0].Y(), aVerts[0].Z()));
+  aWireBldrs[0].Add (gp_Pnt (aVerts[4].X(), aVerts[4].Y(), aVerts[4].Z()));
+  aWireBldrs[0].Add (gp_Pnt (aVerts[6].X(), aVerts[6].Y(), aVerts[6].Z()));
+  aWireBldrs[0].Add (gp_Pnt (aVerts[2].X(), aVerts[2].Y(), aVerts[2].Z()));
+  aWireBldrs[0].Add (gp_Pnt (aVerts[0].X(), aVerts[0].Y(), aVerts[0].Z()));
+
+  aWireBldrs[1].Add (gp_Pnt (aVerts[4].X(), aVerts[4].Y(), aVerts[4].Z()));
+  aWireBldrs[1].Add (gp_Pnt (aVerts[5].X(), aVerts[5].Y(), aVerts[5].Z()));
+  aWireBldrs[1].Add (gp_Pnt (aVerts[7].X(), aVerts[7].Y(), aVerts[7].Z()));
+  aWireBldrs[1].Add (gp_Pnt (aVerts[6].X(), aVerts[6].Y(), aVerts[6].Z()));
+  aWireBldrs[1].Add (gp_Pnt (aVerts[4].X(), aVerts[4].Y(), aVerts[4].Z()));
+
+  aWireBldrs[2].Add (gp_Pnt (aVerts[1].X(), aVerts[1].Y(), aVerts[1].Z()));
+  aWireBldrs[2].Add (gp_Pnt (aVerts[5].X(), aVerts[5].Y(), aVerts[5].Z()));
+  aWireBldrs[2].Add (gp_Pnt (aVerts[7].X(), aVerts[7].Y(), aVerts[7].Z()));
+  aWireBldrs[2].Add (gp_Pnt (aVerts[3].X(), aVerts[3].Y(), aVerts[3].Z()));
+  aWireBldrs[2].Add (gp_Pnt (aVerts[1].X(), aVerts[1].Y(), aVerts[1].Z()));
+
+  aWireBldrs[3].Add (gp_Pnt (aVerts[0].X(), aVerts[0].Y(), aVerts[0].Z()));
+  aWireBldrs[3].Add (gp_Pnt (aVerts[1].X(), aVerts[1].Y(), aVerts[1].Z()));
+  aWireBldrs[3].Add (gp_Pnt (aVerts[3].X(), aVerts[3].Y(), aVerts[3].Z()));
+  aWireBldrs[3].Add (gp_Pnt (aVerts[2].X(), aVerts[2].Y(), aVerts[2].Z()));
+  aWireBldrs[3].Add (gp_Pnt (aVerts[0].X(), aVerts[0].Y(), aVerts[0].Z()));
+
+  TopoDS_Compound aComp;
+  BRep_Builder    aCompBuilder;
+  aCompBuilder.MakeCompound (aComp);
+  for (Standard_Integer aWireIdx = 0; aWireIdx < 4; ++aWireIdx)
+  {
+    aCompBuilder.Add (aComp, aWireBldrs[aWireIdx].Shape());
+  }
+  DBRep::Set ("c", aComp);
+
+  Handle(AIS_InteractiveObject) aCmp = new AIS_Shape (aComp);
+  aCmp->SetColor (Quantity_NOC_GREEN);
+  ViewerTest::Display ("c", aCmp, Standard_True, Standard_True);
+
+  Handle(Geom_CartesianPoint) aPnt1 = new Geom_CartesianPoint (aNearPnt);
+  Handle(Geom_CartesianPoint) aPnt2 = new Geom_CartesianPoint (aFarPnt);
+
+  Handle(AIS_Line) aLine = new AIS_Line (aPnt1, aPnt2);
+  ViewerTest::Display ("l", aLine, Standard_True, Standard_True);
+
+  if (toPrint)
+  {
+    theDI << "Near: " << aNearPnt.X() << " " << aNearPnt.Y() << " " << aNearPnt.Z() << "\n";
+    theDI << "Far: " << aFarPnt.X() << " " << aFarPnt.Y() << " " << aFarPnt.Z() << "\n";
+  }
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26462
+//purpose  :
+//=======================================================================
+static Standard_Integer OCC26462 (Draw_Interpretor& theDI, Standard_Integer /*theArgNb*/, const char** /*theArgVec*/)
+{
+  if (ViewerTest::GetAISContext().IsNull())
+  {
+    std::cerr << "Error: No opened context!\n";
+    return 1;
+  }
+
+  BRepPrimAPI_MakeBox aBuilder1 (gp_Pnt (10.0, 10.0, 0.0), 10.0, 10.0, 10.0);
+  BRepPrimAPI_MakeBox aBuilder2 (10.0, 10.0, 10.0);
+  Handle(AIS_InteractiveObject) aBox1 = new AIS_Shape (aBuilder1.Shape());
+  Handle(AIS_InteractiveObject) aBox2 = new AIS_Shape (aBuilder2.Shape());
+
+  const Handle(AIS_InteractiveContext) aCtx = ViewerTest::GetAISContext();
+  aCtx->OpenLocalContext();
+  aCtx->Display (aBox1, 0, 2);
+  aCtx->Display (aBox2, 0, 2);
+  ViewerTest::CurrentView()->FitAll();
+  aCtx->SetWidth (aBox1, 3);
+  aCtx->SetWidth (aBox2, 3);
+
+  aCtx->MoveTo (305, 322, ViewerTest::CurrentView());
+  aCtx->ShiftSelect();
+  aCtx->MoveTo (103, 322, ViewerTest::CurrentView());
+  aCtx->ShiftSelect();
+  if (aCtx->NbSelected() != 0)
+  {
+    theDI << "ERROR: no boxes must be selected!\n";
+    return 1;
+  }
+
+  aCtx->SetSelectionSensitivity (aBox1, 2, 5);
+
+  aCtx->MoveTo (305, 322, ViewerTest::CurrentView());
+  aCtx->ShiftSelect();
+  if (aCtx->NbSelected() != 1)
+  {
+    theDI << "ERROR: b1 was not selected\n";
+    return 1;
+  }
+  aCtx->MoveTo (103, 322, ViewerTest::CurrentView());
+  aCtx->ShiftSelect();
+  if (aCtx->NbSelected() != 1)
+  {
+    theDI << "ERROR: b2 is selected after b1's tolerance increased\n";
+    return 1;
+  }
+
+  return 0;
+}
+
+
+#include <BRepBuilderAPI_GTransform.hxx>
+static Standard_Integer OCC26313(Draw_Interpretor& di,Standard_Integer n,const char** a)
+{
+  if (n <= 1) return 1;
+  
+  gp_Trsf T;
+  gp_GTrsf GT(T);
+  
+  gp_Mat rot( 1.0, 0.0, 0.0,
+              0.0, 2.0, 0.0,
+              0.0, 0.0, 3.0);
+  
+  GT.SetVectorialPart(rot);
+  BRepBuilderAPI_GTransform gtrf(GT);
+
+  TopoDS_Shape aSrcShape = DBRep::Get(a[2]);
+  if (aSrcShape.IsNull()) {
+    di << a[2] << " is not a valid shape\n";
+    return 1;
+  }
+
+  
+  gtrf.Perform(aSrcShape);
+  if (gtrf.IsDone())
+  {
+    try
+    {
+      DBRep::Set(a[1], gtrf.ModifiedShape(aSrcShape));
+    }
+    catch(Standard_Failure)
+    {
+      di << "Error: Exception is thrown\n";
+    }
+  }
+  else
+  {
+    di << "Error: Result is not done\n";
+    return 1;
+  }
+  
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26525
+//purpose  : check number of intersection points
+//=======================================================================
+#include <BRepAdaptor_Curve.hxx>
+#include <BRepAdaptor_Surface.hxx>
+#include <BRepAdaptor_HCurve.hxx>
+#include <BRepAdaptor_HSurface.hxx>
+#include <IntCurveSurface_HInter.hxx>
+Standard_Integer OCC26525 (Draw_Interpretor& di, 
+                           Standard_Integer n, 
+                           const char** a)
+{
+  TopoDS_Shape aS1, aS2;
+  TopoDS_Edge aE; 
+  TopoDS_Face aF;
+
+  if (n<4)
+  {
+    di << " use OCC26525 r edge face \n";
+    return 1;
+  }
+
+  aS1 = DBRep::Get(a[2]);
+  aS2 = DBRep::Get(a[3]);
+
+  if (aS1.IsNull() || aS2.IsNull())
+  {
+    di << " Null shapes are not allowed \n";
+    return 0;
+  }
+  if (aS1.ShapeType()!=TopAbs_EDGE)
+  {
+    di << " Shape" << a[2] << " should be of type EDGE\n";
+    return 0;
+  }
+  if (aS2.ShapeType()!=TopAbs_FACE)
+  {
+    di << " Shape" << a[3] << " should be of type FACE\n";
+    return 0;
+  }
+
+  aE=TopoDS::Edge(aS1);
+  aF=TopoDS::Face(aS2);
+
+  char buf[128];
+  Standard_Boolean bIsDone;
+  Standard_Integer i, aNbPoints;
+  Standard_Real aU, aV, aT;
+  gp_Pnt aP;
+  BRepAdaptor_Curve aBAC;
+  BRepAdaptor_Surface aBAS;
+  IntCurveSurface_TransitionOnCurve aTC;
+  IntCurveSurface_HInter aHInter;
+
+  aBAC.Initialize(aE);
+  aBAS.Initialize(aF);
+
+  Handle(BRepAdaptor_HCurve) aHBAC=new BRepAdaptor_HCurve(aBAC);
+  Handle(BRepAdaptor_HSurface) aHBAS = new BRepAdaptor_HSurface(aBAS);
+
+  aHInter.Perform(aHBAC, aHBAS);
+  bIsDone=aHInter.IsDone();
+  if (!bIsDone)
+  {
+    di << " intersection is not done\n";
+    return 0;
+  }
+
+  aNbPoints=aHInter.NbPoints();
+  sprintf (buf, " Number of intersection points found: %d", aNbPoints);
+  di <<  buf << "\n";
+  for (i=1; i<=aNbPoints; ++i)
+  {
+    const IntCurveSurface_IntersectionPoint& aIP=aHInter.Point(i);
+    aIP.Values(aP, aU, aV, aT, aTC);
+    //
+    sprintf (buf, "point %s_%d %lg %lg %lg  ", a[1], i, aP.X(), aP.Y(), aP.Z());
+    di << buf << "\n";
+  }
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC24537
+//purpose  : Puts inverted numbers (in the sense of little/big endian inversion)
+//           from predefined arrays.
+//=======================================================================
+#include <FSD_BinaryFile.hxx>
+
+template<int size>
+inline const unsigned char* SizeRef ();
+
+template<>
+inline const unsigned char* SizeRef <8> ()
+{
+  static const unsigned char aSizeRef[] = {
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+  return aSizeRef;
+}
+
+template<>
+inline const unsigned char* SizeRef <4> ()
+{
+  static const unsigned char aSizeRef[] = {
+    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
+    0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,
+    0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,
+    0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,
+    0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00};
+  return aSizeRef;
+}
+
+static Standard_Integer OCC24537(
+  Draw_Interpretor& theDI, 
+  Standard_Integer  argc, 
+  const char **     argv)
+{
+  std::ofstream aF;
+  if (argc > 1)
+  {
+    aF.open(argv[1]);
+    if (!aF.is_open())
+    {
+      cout << "cannot create file " << argv[1] << endl;
+      return 1;
+    }
+  }
+  Standard_Boolean isErr = Standard_False;
+  // 1. InverseInt
+  const unsigned char anIntRef[] = {
+    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,
+    0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,
+    0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,
+    0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,
+    0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00};
+  Standard_Integer anIntArr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_Integer anInv = FSD_BinaryFile::InverseInt(anIntArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_Integer anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseInt(anIntArr[i]);
+    if (memcmp(anInv, anIntRef, sizeof(anIntRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of an integer value\n";
+      isErr = Standard_True;
+    }
+  }
+  
+  // 1a. Random InverseInt
+  const unsigned char aRndIntRef[] = {
+    0xFF,0xC2,0xF7,0x00,0xFF,0xFF,0xFB,0x2E,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+    0x00,0x00,0x04,0xD2,0x00,0x00,0x04,0xD3,
+    0xFF,0xFF,0xFD,0x1E,0xFF,0xFF,0xFF,0xFB,
+    0x00,0x00,0x03,0x8D,0x00,0x3D,0x09,0x00};
+  Standard_Integer aRndIntArr[] = {-4000000, -1234, 0, 1, 1234, 1235, -738, -5, 909, 4000000};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_Integer anInv = FSD_BinaryFile::InverseInt(aRndIntArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_Integer anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseInt(aRndIntArr[i]);
+    if (memcmp(anInv, aRndIntRef, sizeof(aRndIntRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of a dispersed integer value\n";
+      isErr = Standard_True;
+    }
+  }
+  
+  // 2. InverseReal
+  const unsigned char aRealRef[] = {
+    0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x22,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+  const Standard_Real aRealArr[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 0.0};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_Real anInv = FSD_BinaryFile::InverseReal(aRealArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_Real anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseReal(aRealArr[i]);
+    if (memcmp(anInv, aRealRef, sizeof(aRealRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of a real value\n";
+      isErr = Standard_True;
+    }
+  }
+
+  // 2a. Random InverseReal
+  const unsigned char aRndRealRef[] = {
+    0xFE,0x37,0xE4,0x3C,0x88,0x00,0x75,0x9C,
+    0xBE,0x11,0x2E,0x0B,0xE8,0x26,0xD6,0x95,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x3E,0x11,0x2E,0x0B,0xE8,0x26,0xD6,0x95,
+    0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x40,0x09,0x21,0xDA,0x45,0x5B,0x53,0xE4,
+    0x54,0xB2,0x49,0xAD,0x25,0x94,0xC3,0x7D,
+    0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+    0xC0,0x23,0xCC,0xCC,0xCC,0xCC,0xCC,0xCD,
+    0x40,0x23,0xCC,0xCC,0xCC,0xCC,0xCC,0xCD};
+  const Standard_Real aRndRealArr[] = {-1e300, -1.e-9, 0., 1.e-9, 1., 3.1415296, 1.e100, 8.0, -9.9, 9.9};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_Real anInv = FSD_BinaryFile::InverseReal(aRndRealArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_Real anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseReal(aRndRealArr[i]);
+    if (memcmp(anInv, aRndRealRef, sizeof(aRndRealRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of a dispersed real value\n";
+      isErr = Standard_True;
+    }
+  }
+
+  // 3. InverseShortReal
+  const unsigned char aShortRealRef[] = {
+    0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,
+    0x40,0x40,0x00,0x00,0x40,0x80,0x00,0x00,
+    0x40,0xA0,0x00,0x00,0x40,0xC0,0x00,0x00,
+    0x40,0xE0,0x00,0x00,0x41,0x00,0x00,0x00,
+    0x41,0x10,0x00,0x00,0x00,0x00,0x00,0x00};
+  const Standard_ShortReal aShortRealArr[] = {
+    1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 0.0f};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_ShortReal anInv = FSD_BinaryFile::InverseShortReal(aShortRealArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_ShortReal anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseShortReal(aShortRealArr[i]);
+    if (memcmp(anInv, aShortRealRef, sizeof(aShortRealRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of a short real value\n";
+      isErr = Standard_True;
+    }
+  }
+
+  // 3a. Random InverseShortReal
+  const unsigned char aRndShortRealRef[] = {
+    0xB0,0x89,0x70,0x5F,0x00,0x00,0x00,0x00,
+    0x30,0x89,0x70,0x5F,0x3F,0x80,0x00,0x00,
+    0x40,0x49,0x0E,0x56,0xC0,0xD6,0x66,0x66,
+    0x40,0xD6,0x66,0x66,0x42,0xC5,0xCC,0xCD,
+    0xC2,0xC7,0xCC,0xCD,0x42,0xC7,0xCC,0xCD};
+  const Standard_ShortReal aRndShortRealArr[] = {
+    -1.e-9f, 0.f, 1.e-9f, 1.f, 3.1415f, -6.7f, 6.7f, 98.9f, -99.9f, 99.9f};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_ShortReal anInv = FSD_BinaryFile::InverseShortReal(aRndShortRealArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_ShortReal anInv[10];
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseShortReal(aRndShortRealArr[i]);
+    if (memcmp(anInv, aRndShortRealRef, sizeof(aRndShortRealRef)) != 0)
+    {
+      theDI << "Error: incorrect conversion of a dispersed short real value\n";
+      isErr = Standard_True;
+    }
+  }
+
+  // 4. InverseSize
+  const Standard_Size aSizeArr[] = {1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul, 0ul};
+  if (aF.is_open())
+  {
+    for(int i = 0; i < 10; ++i)
+    {
+      Standard_Size anInv = FSD_BinaryFile::InverseSize(aSizeArr[i]);
+      aF.write(reinterpret_cast<char*>(&anInv), sizeof(anInv));
+    }
+  }
+  else
+  {
+    Standard_Size anInv[10];
+    const unsigned char* aSizeRef = SizeRef<sizeof(Standard_Size)>();
+    for(int i = 0; i < 10; ++i)
+      anInv[i] = FSD_BinaryFile::InverseSize(aSizeArr[i]);
+    if (memcmp(anInv, aSizeRef, sizeof(Standard_Size)*10) != 0)
+    {
+      theDI << "Error: incorrect conversion of a size value\n";
+      isErr = Standard_True;
+    }
+  }
+
+  if (!aF.is_open() && !isErr)
+    theDI << "Conversion was done OK";
+  if (aF.is_open())
+  {
+    cout << "the file " << argv[1] << " has been created" << endl;
+    aF.close();
+  }
+  return 0;
+}
+
+
+#include <TopExp.hxx>
+#include <BRepOffsetAPI_DraftAngle.hxx>
+#include <vector>
+static TopoDS_Shape taper(const TopoDS_Shape &shape, const TopoDS_Face &face_a, const TopoDS_Face &face_b, Standard_Real angle)
+{
+  // Use maximum face-to-taper z-offset.
+  const gp_Pln neutral_plane(gp_Ax3(gp_Pnt(0.0, 0.0, 140.0), gp_Dir(0.0, 0.0, 1.0)));
+
+  // Draft angle needs to be in radians, and flipped to adhere to our own (arbitrary) draft
+  // angle definition.
+  const Standard_Real draft_angle = -(angle / 180.0) * M_PI;
+
+  // Add face to draft. The first argument indicates that all material added/removed during
+  // drafting is located below the neutral plane
+  BRepOffsetAPI_DraftAngle drafter(shape);
+  drafter.Add(face_a, gp_Dir(0.0, 0.0, -1.0), draft_angle, neutral_plane);
+  drafter.Add(face_b, gp_Dir(0.0, 0.0, -1.0), draft_angle, neutral_plane);
+  drafter.Build();
+
+  return drafter.Shape();
+}
+
+static void dumpShapeVertices(const TopoDS_Shape &shape, std::vector<Standard_Real>& coords)
+{
+  TopTools_IndexedMapOfShape shape_vertices;
+  TopExp::MapShapes(shape, TopAbs_VERTEX, shape_vertices);
+
+  for (Standard_Integer i = 1; i <= shape_vertices.Extent(); i++)
+  {
+    gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(shape_vertices(i)));
+    coords.push_back(p.X());
+    coords.push_back(p.Y());
+    coords.push_back(p.Z());
+  }
+}
+
+static void GetCoords(const Standard_CString& path_to_file, std::vector<Standard_Real>& coords)
+{
+  TopoDS_Shape shape;
+  BRep_Builder builder;
+  BRepTools::Read(shape, path_to_file, builder);
+  TopTools_IndexedMapOfShape shape_faces;
+  TopExp::MapShapes(shape, TopAbs_FACE, shape_faces);
+  TopoDS_Face face_a = TopoDS::Face(shape_faces(1));
+  TopoDS_Face face_b = TopoDS::Face(shape_faces(5));
+  dumpShapeVertices(taper(shape, face_a, face_b, 5.0), coords);
+}
+
+static Standard_Integer OCC26396 (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+  if (theArgc < 2)
+  {
+    theDI << "Error: path to file is missing\n";
+    return 1;
+  }
+
+  const int maxInd = 50;
+
+  std::vector<Standard_Real> ref_coords;
+  ref_coords.reserve(100);
+  Standard_Boolean Stat = Standard_True;
+
+  GetCoords(theArgv[1], ref_coords);
+
+  std::vector<Standard_Real> coords;
+  coords.reserve(100);
+  for (int i = 1; i < maxInd; i++)
+  {
+    GetCoords(theArgv[1], coords);
+    if (coords.size() != ref_coords.size())
+    {
+      Stat = Standard_False;
+      break;
+    }
+    for (size_t j = 0; j < coords.size(); j++)
+      if (Abs(ref_coords[j] - coords[j]) > RealEpsilon())
+      {
+        Stat = Standard_False;
+        break;
+      }
+    coords.clear();
+  }
+  if (!Stat)
+    theDI << "Error: unstable results";
+  else
+    theDI << "test OK";
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26750 
+//purpose  : 
+//=======================================================================
+static Standard_Integer OCC26750( Draw_Interpretor& theDI,
+                                  Standard_Integer  /*theNArg*/,
+                                  const char ** /*theArgVal*/)
+{
+  const gp_Vec2d aVec1(1.0, 0.0);
+  const gp_Vec2d aVec2(0.0, -1.0);
+
+  if(aVec1.IsNormal(aVec2, Precision::Angular()))
+  {
+    theDI << "gp_Vec2d OK. Vectors are normal.\n";
+  }
+  else
+  {
+    theDI << "Error in gp_Vec2d. Vectors should be normal.\n";
+  }
+
+  const gp_Dir2d aD1(1.0, 0.0);
+  const gp_Dir2d aD2(0.0, -1.0);
+
+  if(aD1.IsNormal(aD2, Precision::Angular()))
+  {
+    theDI << "gp_Dir2d OK. Vectors are normal.\n";
+  }
+  else
+  {
+    theDI << "Error in gp_Dir2d. Vectors should be normal.\n";
+  }
+  
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26746 
+//purpose  : Checks if coefficients of the torus are computed properly.
+//=======================================================================
+#include <Geom_ToroidalSurface.hxx>
+#include <Geom_BSplineCurve.hxx>
+static Standard_Integer OCC26746(
+  Draw_Interpretor& theDI, 
+  Standard_Integer  theNArg, 
+  const char **     theArgVal)
+{
+  if(theNArg < 2)
+  {
+    theDI << "Use: OCC26746 torus [toler NbCheckedPoints]\n";
+    return 1;
+  }
+
+  const Handle(Geom_ToroidalSurface) aGtor = 
+    Handle(Geom_ToroidalSurface)::DownCast(DrawTrSurf::GetSurface(theArgVal[1]));
+
+  const Standard_Real aToler = (theNArg >= 3)? Draw::Atof(theArgVal[2]) : 1.0e-7;
+  const Standard_Integer aNbPntsMax = (theNArg >= 4)? Draw::Atoi(theArgVal[3]) : 5;
+
+  const Standard_Integer aLowIndex = 5;
+  const Standard_Real aStep = 2.0*M_PI/aNbPntsMax;
+
+  TColStd_Array1OfReal anArrCoeffs(aLowIndex, aLowIndex+34);
+  aGtor->Torus().Coefficients(anArrCoeffs);
+
+  Standard_Real aUpar = 0.0, aVpar = 0.0;
+  for(Standard_Integer aUind = 0; aUind <= aNbPntsMax; aUind++)
+  {
+    for(Standard_Integer aVind = 0; aVind <= aNbPntsMax; aVind++)
+    {
+      const gp_Pnt aPt(aGtor->Value(aUpar, aVpar));
+      const Standard_Real aX1 = aPt.X();
+      const Standard_Real aX2 = aX1*aX1;
+      const Standard_Real aX3 = aX2*aX1;
+      const Standard_Real aX4 = aX2*aX2;
+      const Standard_Real aY1 = aPt.Y();
+      const Standard_Real aY2 = aY1*aY1;
+      const Standard_Real aY3 = aY2*aY1;
+      const Standard_Real aY4 = aY2*aY2;
+      const Standard_Real aZ1 = aPt.Z();
+      const Standard_Real aZ2 = aZ1*aZ1;
+      const Standard_Real aZ3 = aZ2*aZ1;
+      const Standard_Real aZ4 = aZ2*aZ2;
+
+      Standard_Integer i = aLowIndex;
+
+      Standard_Real aDelta =  anArrCoeffs(i++) * aX4;  //1
+      aDelta+= anArrCoeffs(i++) * aY4;                 //2
+      aDelta+= anArrCoeffs(i++) * aZ4;                 //3
+      aDelta+= anArrCoeffs(i++) * aX3 * aY1;           //4
+      aDelta+= anArrCoeffs(i++) * aX3 * aZ1;           //5
+      aDelta+= anArrCoeffs(i++) * aY3 * aX1;           //6
+      aDelta+= anArrCoeffs(i++) * aY3 * aZ1;           //7
+      aDelta+= anArrCoeffs(i++) * aZ3 * aX1;           //8
+      aDelta+= anArrCoeffs(i++) * aZ3 * aY1;           //9
+      aDelta+= anArrCoeffs(i++) * aX2 * aY2;           //10
+      aDelta+= anArrCoeffs(i++) * aX2 * aZ2;           //11
+      aDelta+= anArrCoeffs(i++) * aY2 * aZ2;           //12
+      aDelta+= anArrCoeffs(i++) * aX2 * aY1 * aZ1;     //13
+      aDelta+= anArrCoeffs(i++) * aX1 * aY2 * aZ1;     //14
+      aDelta+= anArrCoeffs(i++) * aX1 * aY1 * aZ2;     //15
+      aDelta+= anArrCoeffs(i++) * aX3;                 //16
+      aDelta+= anArrCoeffs(i++) * aY3;                 //17
+      aDelta+= anArrCoeffs(i++) * aZ3;                 //18
+      aDelta+= anArrCoeffs(i++) * aX2 * aY1;           //19
+      aDelta+= anArrCoeffs(i++) * aX2 * aZ1;           //20
+      aDelta+= anArrCoeffs(i++) * aY2 * aX1;           //21
+      aDelta+= anArrCoeffs(i++) * aY2 * aZ1;           //22
+      aDelta+= anArrCoeffs(i++) * aZ2 * aX1;           //23
+      aDelta+= anArrCoeffs(i++) * aZ2 * aY1;           //24
+      aDelta+= anArrCoeffs(i++) * aX1 * aY1 * aZ1;     //25
+      aDelta+= anArrCoeffs(i++) * aX2;                 //26
+      aDelta+= anArrCoeffs(i++) * aY2;                 //27
+      aDelta+= anArrCoeffs(i++) * aZ2;                 //28
+      aDelta+= anArrCoeffs(i++) * aX1 * aY1;           //29
+      aDelta+= anArrCoeffs(i++) * aX1 * aZ1;           //30
+      aDelta+= anArrCoeffs(i++) * aY1 * aZ1;           //31
+      aDelta+= anArrCoeffs(i++) * aX1;                 //32
+      aDelta+= anArrCoeffs(i++) * aY1;                 //33
+      aDelta+= anArrCoeffs(i++) * aZ1;                 //34
+      aDelta+= anArrCoeffs(i++);                       //35
+
+      if(Abs(aDelta) > aToler)
+      {
+        theDI << "(" << aUpar << ", " << aVpar << "): Error in torus coefficients computation (Delta = " << aDelta << ").\n";
+      }
+      else
+      {
+        theDI << "(" << aUpar << ", " << aVpar << "): OK (Delta = " << aDelta << ").\n";
+      }
+
+      aVpar = (aVind == aNbPntsMax)? 2.0*M_PI : aVpar + aStep;
+    }
+
+    aVpar = 0.0;
+    aUpar = (aUind == aNbPntsMax)? 2.0*M_PI : aUpar + aStep;
+  }
+
+  return 0;     
+}
+
+DEFINE_STANDARD_HANDLE(QABugs_VertexFilter, SelectMgr_Filter);
+class QABugs_VertexFilter: public SelectMgr_Filter
+{
+public:
+  Standard_EXPORT QABugs_VertexFilter() : SelectMgr_Filter() {}
+
+  Standard_EXPORT virtual Standard_Boolean IsOk(const Handle(SelectMgr_EntityOwner)&) const
+  {
+    return Standard_False;
+  }
+};
+
+//=======================================================================
+//function : BUC26658 
+//purpose  : Checks selection in the context after using a selection filter
+//=======================================================================
+static Standard_Integer BUC26658 (Draw_Interpretor& theDI,
+                                  Standard_Integer  /*theNArg*/,
+                                  const char ** theArgVal)
+{
+  Handle(AIS_InteractiveContext) aContext = ViewerTest::GetAISContext();
+  if(aContext.IsNull()) {
+    theDI << "use 'vinit' command before " << theArgVal[0] << "\n";
+    return 1;
+  }
+
+  TopoDS_Shape aBoxShape = BRepPrimAPI_MakeBox(20,20,20).Shape();
+  Handle(AIS_Shape) anAISIO = new AIS_Shape(aBoxShape);
+
+  // visualization of the box in the local mode with possibility to
+  // select box vertices
+  aContext->OpenLocalContext();
+
+  int aDispMode = 0;// wireframe
+  anAISIO->SetDisplayMode(aDispMode);
+  aContext->Display(anAISIO, aDispMode, 0, false, true, AIS_DS_Displayed); 
+  theDI.Eval(" vfit");
+
+  aContext->Load(anAISIO, -1, true); /// load allowing decomposition
+  aContext->Deactivate(anAISIO);
+  aContext->Activate(anAISIO, AIS_Shape::SelectionMode(TopAbs_VERTEX), false);
+  aContext->UpdateCurrentViewer();
+
+  // select a point on the box
+  Handle(V3d_View) myV3dView = ViewerTest::CurrentView();
+  double Xv,Yv;
+  myV3dView->Project(20,20,0,Xv,Yv);
+  Standard_Integer Xp,Yp;
+  myV3dView->Convert(Xv,Yv,Xp,Yp);
+
+  aContext->MoveTo(Xp,Yp, myV3dView);
+  aContext->Select();
+  bool aHasSelected = false;
+  for (aContext->InitSelected(); aContext->MoreSelected() && !aHasSelected; aContext->NextSelected()) {
+    Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
+    if (!anIO.IsNull()) {
+      const TopoDS_Shape aShape = aContext->SelectedShape();
+      if (!aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX)
+        aHasSelected = true;
+    }
+  }
+  if (aHasSelected)
+     cout << "has selected vertex : OK"   << endl;
+  else {
+    theDI << "has selected vertex : bugged - Faulty\n";
+    return 1;
+  }
+  // filter to deny any selection in the viewer
+  Handle(QABugs_VertexFilter) aFilter = new QABugs_VertexFilter();
+  aContext->AddFilter(aFilter);
+
+  // update previous selection by hand
+  aContext->LocalContext()->ClearOutdatedSelection(anAISIO, true);
+
+  // check that there are no selected vertices
+  aContext->Select();
+  aHasSelected = false;
+  for (aContext->InitSelected(); aContext->MoreSelected() && !aHasSelected; aContext->NextSelected()) {
+    Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
+    if (!anIO.IsNull()) {
+      const TopoDS_Shape aShape = aContext->SelectedShape();
+      if (!aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX)
+        aHasSelected = true;
+    }
+  }
+  if (!aHasSelected) cout << "has no selected vertex after filter : OK"   << endl;
+  else {
+    theDI << "has no selected vertex after filter : bugged - Faulty\n";
+    return 1;
+  }
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26945_open
+//purpose  : Opens local context and activates given standard selection mode
+//=======================================================================
+static Standard_Integer OCC26945_open (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+  const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
+  if (aCtx.IsNull())
+  {
+    std::cout << "No interactive context. Use 'vinit' command before " << theArgv[0] << "\n";
+    return 1;
+  }
+
+  if (theArgc < 2)
+  {
+    std::cout << "Not enough arguments. See usage:\n";
+    theDI.PrintHelp (theArgv[0]);
+    return 1;
+  }
+
+  const TopAbs_ShapeEnum aSelType = AIS_Shape::SelectionType (Draw::Atoi (theArgv[1]));
+  Standard_Integer aLocalCtxIdx = aCtx->OpenLocalContext();
+  aCtx->ActivateStandardMode (aSelType);
+  theDI << aLocalCtxIdx;
+
+  return 0;
+}
+
+//=======================================================================
+//function : OCC26945_close
+//purpose  : Closes local context with the id given
+//=======================================================================
+static Standard_Integer OCC26945_close (Draw_Interpretor& theDI, Standard_Integer theArgc, const char** theArgv)
+{
+  const Handle(AIS_InteractiveContext)& aCtx = ViewerTest::GetAISContext();
+  if (aCtx.IsNull())
+  {
+    std::cout << "No interactive context. Use 'vinit' command before " << theArgv[0] << "\n";
+    return 1;
+  }
+
+  if (theArgc < 2)
+  {
+    std::cout << "Not enough arguments. See usage:\n";
+    theDI.PrintHelp (theArgv[0]);
+    return 1;
+  }
+
+  const Standard_Integer aCtxToClose = Draw::Atoi (theArgv[1]);
+  aCtx->CloseLocalContext (aCtxToClose);
+
+  return 0;
+}
+
+void QABugs::Commands_19(Draw_Interpretor& theCommands) {
+  const char *group = "QABugs";
+
+  Handle(QABugs_HandleClass) aClassPtr = new QABugs_HandleClass();
+  theCommands.Add ("OCC24202_1", "Test Handle-based procedure",
+                   __FILE__, aClassPtr, &QABugs_HandleClass::HandleProc, group);
+  NCollection_Handle<QABugs_NHandleClass> aNClassPtr = new QABugs_NHandleClass();
+  theCommands.Add ("OCC24202_2", "Test NCollection_Handle-based procedure",
+                   __FILE__, aNClassPtr, &QABugs_NHandleClass::NHandleProc, group);
+
+  theCommands.Add ("OCC230", "OCC230 TrimmedCurve Pnt2d Pnt2d", __FILE__, OCC230, group);
+  theCommands.Add ("OCC23361", "OCC23361", __FILE__, OCC23361, group);
+  theCommands.Add ("OCC23237", "OCC23237", __FILE__, OCC23237, group); 
+  theCommands.Add ("OCC22980", "OCC22980", __FILE__, OCC22980, group);
+  theCommands.Add ("OCC23595", "OCC23595", __FILE__, OCC23595, group);
+  theCommands.Add ("OCC22611", "OCC22611 string nb", __FILE__, OCC22611, group);
+  theCommands.Add ("OCC22595", "OCC22595", __FILE__, OCC22595, group);
+  theCommands.Add ("OCC23774", "OCC23774 shape1 shape2", __FILE__, OCC23774, group);
+  theCommands.Add ("OCC23683", "OCC23683 shape", __FILE__, OCC23683, group);
+  theCommands.Add ("OCC23952sweep", "OCC23952sweep nbupoles shape", __FILE__, OCC23952sweep, group);
+  theCommands.Add ("OCC23952intersect", "OCC23952intersect nbsol shape1 shape2", __FILE__, OCC23952intersect, group);
+  theCommands.Add ("test_offset", "test_offset", __FILE__, test_offset, group);
+  theCommands.Add ("OCC23945", "OCC23945 surfname U V X Y Z [DUX DUY DUZ DVX DVY DVZ [D2UX D2UY D2UZ D2VX D2VY D2VZ D2UVX D2UVY D2UVZ]]", __FILE__, OCC23945,group);
+  theCommands.Add ("OCC24008", "OCC24008 curve surface", __FILE__, OCC24008, group);
+  theCommands.Add ("OCC11758", "OCC11758", __FILE__, OCC11758, group);
+  theCommands.Add ("OCC24005", "OCC24005 result", __FILE__, OCC24005, group);
+  theCommands.Add ("OCC24137", "OCC24137 face vertex U V [N]", __FILE__, OCC24137, group);
+  theCommands.Add ("OCC24271", "Boolean operations on NCollection_Map", __FILE__, OCC24271, group);
+  theCommands.Add ("OCC23972", "OCC23972", __FILE__, OCC23972, group);
   theCommands.Add ("OCC24370", "OCC24370 edge pcurve surface prec", __FILE__, OCC24370, group);
   theCommands.Add ("OCC24533", "OCC24533", __FILE__, OCC24533, group);
   theCommands.Add ("OCC24012", "OCC24012 face edge", __FILE__, OCC24012, group);
-  theCommands.Add ("OCC24051", "OCC24051", __FILE__, OCC24051, group);
   theCommands.Add ("OCC24086", "OCC24086 face wire", __FILE__, OCC24086, group);
   theCommands.Add ("OCC24622", "OCC24622 texture={1D|2D}\n Tests sourcing of 1D/2D pixmaps for AIS_TexturedShape", __FILE__, OCC24622, group);
   theCommands.Add ("OCC24667", "OCC24667 result Wire_spine Profile [Mode [Approx]], no args to get help", __FILE__, OCC24667, group);
-  theCommands.Add ("OCC24565", "OCC24565 FileNameIGS FileNameSTOR", __FILE__, OCC24565, group);
   theCommands.Add ("OCC24755", "OCC24755", __FILE__, OCC24755, group);
   theCommands.Add ("OCC24834", "OCC24834", __FILE__, OCC24834, group);
   theCommands.Add ("OCC24889", "OCC24889", __FILE__, OCC24889, group);
@@ -3670,6 +4859,47 @@ void QABugs::Commands_19(Draw_Interpretor& theCommands) {
                    __FILE__, OCC25545, group);
   theCommands.Add ("OCC25547", "OCC25547", __FILE__, OCC25547, group);
   theCommands.Add ("OCC24881", "OCC24881 shape", __FILE__, OCC24881, group);
+  theCommands.Add ("OCC26172", "OCC26172", __FILE__, OCC26172, group);
   theCommands.Add ("xprojponf", "xprojponf p f", __FILE__, xprojponf, group);
+  theCommands.Add ("OCC24923", "OCC24923", __FILE__, OCC24923, group);
+  theCommands.Add ("OCC26139", "OCC26139 [-boxsize value] [-boxgrid value] [-compgrid value]", __FILE__, OCC26139, group);
+  theCommands.Add ("OCC26284", "OCC26284", __FILE__, OCC26284, group);
+  theCommands.Add ("OCC26446", "OCC26446 r c1 c2", __FILE__, OCC26446, group);
+  theCommands.Add ("OCC26448", "OCC26448: check method Prepend() of sequence", __FILE__, OCC26448, group);
+  theCommands.Add ("OCC26407", "OCC26407 result_name", __FILE__, OCC26407, group);
+  theCommands.Add ("OCC26485", "OCC26485 shape", __FILE__, OCC26485, group);
+  theCommands.Add ("OCC26553", "OCC26553 file_path", __FILE__, OCC26553, group);
+  theCommands.Add ("OCC26195",
+                   "OCC26195: x1_pix y1_pix [x2_pix y2_pix] [toPrintPixelCoord 0|1]"
+                   "\n\t\t: Draws rectangular selecting frustum defined by point selection in pixel coordinates"
+                   "\n\t\t: [x1_pix, y1_pix] or rectangular selection in pixel coordinates [x1_pix, y1_pix,"
+                   "\n\t\t: x2_pix, y2_pix]."
+                   "\n\t\t: [toPrintPixelCoord 0|1] - prints 3d projection of pixel coordinate or center of"
+                   "\n\t\t: selecting rectangle onto near and far view frustum planes",
+                   __FILE__, OCC26195, group);
+  theCommands.Add ("OCC26462",
+                   "OCC26462: Checks the ability to manage sensitivity of a particular selection mode in local context",
+                   __FILE__, OCC26462, group);
+
+  theCommands.Add ("OCC26313", "OCC26313 result shape", __FILE__, OCC26313, group);
+  theCommands.Add ("OCC26396", "OCC26396 shape_file_path", __FILE__, OCC26396, group);
+  theCommands.Add ("OCC26525", "OCC26525 result edge face ", __FILE__, OCC26525, group);
+
+  theCommands.Add ("OCC24537", "OCC24537 [file]", __FILE__, OCC24537, group);
+  theCommands.Add ("OCC26750", "OCC26750", __FILE__, OCC26750, group);
+
+  theCommands.Add ("OCC26746", "OCC26746 torus [toler NbCheckedPoints] ", __FILE__, OCC26746, group);
+
+  theCommands.Add ("BUC26658", "BUC26658 unexpected selection in the context using a selection filter", __FILE__, BUC26658, group);
+  theCommands.Add ("OCC26945_open",
+                   "OCC26945 selectionModeToActivate"
+                   "\n\t\t: Opens a new local context with selectionModeToActivate activated."
+                   "\n\t\t: Prints the ID of newely opened local context in case of success.",
+                   __FILE__, OCC26945_open, group);
+  theCommands.Add ("OCC26945_close",
+                   "OCC26945 localCtxToClose"
+                   "\n\t\t: Closes local context with the ID localCtxToClose",
+                   __FILE__, OCC26945_close, group);
+  
   return;
 }