0023367: New functionality restoring the middle path of pipe-like shape
[occt.git] / src / BRepTest / BRepTest_SweepCommands.cxx
index d07a40c..dc75ab1 100755 (executable)
@@ -1,7 +1,23 @@
-// File:       BRepTest_SweepCommands.cxx
-// Created:    Thu Jul 22 16:40:19 1993
-// Author:     Remi LEQUETTE
-//             <rle@nonox>
+// Created on: 1993-07-22
+// Created by: Remi LEQUETTE
+// Copyright (c) 1993-1999 Matra Datavision
+// Copyright (c) 1999-2012 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
 
 
 
@@ -19,6 +35,7 @@
 #include <BRepOffsetAPI_MakeEvolved.hxx>
 #include <BRepOffsetAPI_ThruSections.hxx>
 #include <BRepOffsetAPI_MakePipeShell.hxx>
+#include <BRepOffsetAPI_MiddlePath.hxx>
 
 #include <BRepLib_MakeWire.hxx>
 #include <TopoDS.hxx>
@@ -100,7 +117,7 @@ static Standard_Integer revol(Draw_Interpretor& ,
   gp_Dir D(atof(a[6]),atof(a[7]),atof(a[8]));
   gp_Ax1 A(P,D);
 
-  Standard_Real angle = atof(a[9]) * PI180;
+  Standard_Real angle = atof(a[9]) * (M_PI / 180.0);
   
   Standard_Boolean copy = n > 10;
 
@@ -166,7 +183,7 @@ static Standard_Integer geompipe(Draw_Interpretor& ,
   Handle(Geom_Surface) Sur=aPipe.Surface();
   TopoDS_Face F;
   if(!Sur.IsNull())
-    F =BRepBuilderAPI_MakeFace(Sur);
+    F = BRepBuilderAPI_MakeFace(Sur, Precision::Confusion());
   DBRep::Set(a[1],F);
   return 0;
 }
@@ -543,7 +560,7 @@ static Standard_Integer addsweep(Draw_Interpretor& di,
 
   if (n > 2) { 
     Standard_Integer cur = 2;
-    // Lecture du Vertex
+    // Reading of Vertex
     TopoDS_Shape InputVertex(DBRep::Get(a[cur],TopAbs_VERTEX));
     Vertex = TopoDS::Vertex(InputVertex);
 //    Vertex = TopoDS::Vertex(DBRep::Get(a[cur],TopAbs_VERTEX));
@@ -552,25 +569,25 @@ static Standard_Integer addsweep(Draw_Interpretor& di,
       HasVertex = Standard_True;
     }
    
-    // Lecture de l'option de translation
+    // Reading of the translation option
     if ((n>cur) && !strcmp(a[cur],"-T")) {
       cur++;
       isT = Standard_True;
     }
 
-    // Lecture de l'option de rotation
+    // Reading of the rotation option
     if ((n>cur) && !strcmp(a[cur],"-R")) {
       cur++;
       isR = Standard_True;
     }
 
-    // loi ?
+    // law ?
     if (n>cur) {
       Standard_Integer nbreal = n-cur;
       if ( (nbreal < 4) || (nbreal % 2 != 0) ) {
        //cout << "bad arguments ! :" <<a[cur] << endl;
        di << "bad arguments ! :" <<a[cur] << "\n";
-      } else { //loi d'interpolation
+      } else { //law of interpolation
        Standard_Integer ii, L= nbreal/2;
        TColgp_Array1OfPnt2d ParAndRad(1, L);
        for (ii=1; ii<=L; ii++, cur+=2) {
@@ -664,7 +681,7 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
   if (n>cur) {
     BRepBuilderAPI_TransitionMode Transition = BRepBuilderAPI_Transformed;
 
-    // Lecture Transition
+    // Reading Transition
     if (!strcmp(a[cur],"-C")) {
       Transition = BRepBuilderAPI_RightCorner;
       cur++;
@@ -675,7 +692,7 @@ static Standard_Integer buildsweep(Draw_Interpretor& di,
     }
     Sweep->SetTransitionMode(Transition);
   }
-  // Lecture solide ?
+  // Reading solid ?
   if ((n>cur) && (!strcmp(a[cur],"-S")) ) mksolid = Standard_True;
 
   // Calcul le resultat
@@ -746,7 +763,7 @@ static Standard_Integer simulsweep(Draw_Interpretor& di,
     Sweep->SetTransitionMode(Transition);
   }
 
-  // Calcul le resultat
+  // Calculate the result
   Sweep->Simulate(N, List);
   for (ii=1, it.Initialize(List); it.More(); it.Next(), ii++) {
     sprintf(name,"%s_%d",a[1],ii);
@@ -756,6 +773,32 @@ static Standard_Integer simulsweep(Draw_Interpretor& di,
   return 0;
 }
 
+//=======================================================================
+//  middlepath
+//=======================================================================
+static Standard_Integer middlepath(Draw_Interpretor& di,
+                                  Standard_Integer n, const char** a)
+{
+  if (n < 5) return 1;
+
+  TopoDS_Shape aShape = DBRep::Get(a[2]);
+  if (aShape.IsNull()) return 1;
+
+  TopoDS_Shape StartShape = DBRep::Get(a[3]);
+  if (StartShape.IsNull()) return 1;
+  
+  TopoDS_Shape EndShape   = DBRep::Get(a[4]);
+  if (EndShape.IsNull()) return 1;
+
+  BRepOffsetAPI_MiddlePath Builder(aShape, StartShape, EndShape);
+  Builder.Build();
+
+  TopoDS_Shape Result = Builder.Shape();
+  DBRep::Set(a[1], Result);
+
+  return 0;
+}
+
 //=======================================================================
 //function : SweepCommands
 //purpose  : 
@@ -823,5 +866,8 @@ void  BRepTest::SweepCommands(Draw_Interpretor& theCommands)
                  __FILE__,simulsweep,g);
   theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]"
                  __FILE__,geompipe,g);
+  
+  theCommands.Add("middlepath", "middlepath res shape startshape endshape",
+                 __FILE__,middlepath,g);
 }