0024023: Revamp the OCCT Handle -- downcast (automatic)
[occt.git] / src / IntPatch / IntPatch_RstInt.cxx
old mode 100755 (executable)
new mode 100644 (file)
index 7aac96b..bae5084
@@ -1,23 +1,18 @@
 // Created on: 1993-05-07
 // Created by: Jacques GOUSSARD
 // Copyright (c) 1993-1999 Matra Datavision
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 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.
+// This file is part of Open CASCADE Technology software library.
 //
-// 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.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
 //
-// 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.
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
 
 // ----------------------------------------------------------------------
 //-- lbr: Modifs importantes du 16-17 Nov 95
@@ -194,9 +189,9 @@ static void GetLinePoint2d (const Handle(IntPatch_Line)& L,
                            const Standard_Boolean OnFirst,
                            Standard_Real& U, Standard_Real& V)
 {
+  Handle(IntPatch_WLine) wlin = Handle(IntPatch_WLine)::DownCast(L);
+  Handle(IntPatch_RLine) rlin = Handle(IntPatch_RLine)::DownCast(L);
   IntPatch_IType typL = L->ArcType();
-  const Handle(IntPatch_WLine)& wlin = (const Handle(IntPatch_WLine)&)L;
-  const Handle(IntPatch_RLine)& rlin = (const Handle(IntPatch_RLine)&)L;
   Standard_Integer Nbptlin = (typL == IntPatch_Walking
                              ? wlin->NbPnts()
                              : rlin->NbPnts());
@@ -291,8 +286,8 @@ static Standard_Boolean FindParameter(const Handle(IntPatch_Line)& L,
   // Dans le cas d une ligne de cheminement, il faudrait voir la projection
   // et le calcul de la tangente.
 
-  const Handle(IntPatch_RLine)&  rlin = (*((Handle(IntPatch_RLine)*)&L)); //-- aucune verification n est 
-  const Handle(IntPatch_WLine)&  wlin = (*((Handle(IntPatch_WLine)*)&L)); //-- faite au cast. 
+  Handle(IntPatch_RLine) rlin (Handle(IntPatch_RLine)::DownCast (L)); //-- aucune verification n est 
+  Handle(IntPatch_WLine) wlin (Handle(IntPatch_WLine)::DownCast (L)); //-- faite au cast. 
   gp_Pnt ptbid;
   gp_Vec d1u,d1v;
   gp_Pnt2d p2d;
@@ -450,7 +445,8 @@ void IntPatch_RstInt::PutVertexOnLine (Handle(IntPatch_Line)& L,
                                       const Handle(Adaptor3d_TopolTool)& Domain,
                                       const Handle(Adaptor3d_HSurface)& OtherSurf,
                                       const Standard_Boolean OnFirst,
-                                      const Standard_Real Tol )
+                                      const Standard_Real Tol,
+                                       const Standard_Boolean hasBeenAdded)
  {
 
 // Domain est le domaine de restriction de la surface Surf.
@@ -466,8 +462,8 @@ void IntPatch_RstInt::PutVertexOnLine (Handle(IntPatch_Line)& L,
   Standard_Integer i,j,k;
   TColgp_SequenceOfPnt locpt;
   TColgp_SequenceOfPnt2d locpt2;
-  const Handle(IntPatch_RLine)&  rlin = (*((Handle(IntPatch_RLine)*)&L)); //-- aucune verification n est 
-  const Handle(IntPatch_WLine)&  wlin = (*((Handle(IntPatch_WLine)*)&L)); //-- faite au cast. 
+  Handle(IntPatch_RLine) rlin (Handle(IntPatch_RLine)::DownCast (L)); //-- aucune verification n est 
+  Handle(IntPatch_WLine) wlin (Handle(IntPatch_WLine)::DownCast (L)); //-- faite au cast. 
   Standard_Integer Nbvtx =0; 
   Standard_Integer Nbptlin =0;
   Standard_Real tolPLin = Surf->UResolution(Precision::Confusion());
@@ -704,13 +700,15 @@ void IntPatch_RstInt::PutVertexOnLine (Handle(IntPatch_Line)& L,
              (!Domain->Has3d() && Standard_Integer(nptCh)+1 < Nbptlin);
            if (!isNptLow && !IsSegment2dSmall(Brise,UMinAr,UMaxAr,tolU,tolV)) {
              // treat both ends
-             Standard_Real UMinChP,UMaxChP,UMinArP,UMaxArP;
-             UMinChP = IntegerPart(UMinCh); UMinArP = IntegerPart(UMinAr);
-             UMaxChP = IntegerPart(UMaxCh); UMaxArP = IntegerPart(UMaxAr);
-             Standard_Integer irangCh1,irangCh2,irangAr1,irangAr2;
-             irangCh1 = Standard_Integer(UMinChP)+1; irangCh2 = Standard_Integer(UMaxChP)+1;
-             irangAr1 = Standard_Integer(UMinArP)+1; irangAr2 = Standard_Integer(UMaxArP)+1;
-             UMinChP = UMinCh - UMinChP; UMinArP = UMinAr - UMinArP;
+             Standard_Real UMinChP,UMinArP,UMaxArP;
+             UMinChP = IntegerPart(UMinCh);
+              UMinArP = IntegerPart(UMinAr);
+              UMaxArP = IntegerPart(UMaxAr);
+             Standard_Integer irangAr1,irangAr2;
+             irangAr1 = Standard_Integer(UMinArP)+1;
+              irangAr2 = Standard_Integer(UMaxArP)+1;
+             UMinChP = UMinCh - UMinChP;
+              UMinArP = UMinAr - UMinArP;
              //UMaxChP = UMaxCh - UMaxChP; UMaxArP = UMaxAr - UMaxArP;
              const Standard_Real eps = 1e-10;
 //           Standard_Boolean isChExtr1 = irangCh1==1 && UMinChP<eps;
@@ -1232,14 +1230,9 @@ void IntPatch_RstInt::PutVertexOnLine (Handle(IntPatch_Line)& L,
 */
 
     wlin->SetPeriod(pu1,pv1,pu2,pv2);
-    wlin->ComputeVertexParameters(Tol);
+    wlin->ComputeVertexParameters(Tol, hasBeenAdded);
   }
   else {
-#ifdef DEB
-    //if(rlin->NbVertex()==0) { 
-    //  cout<<" \n *** IntPatch RstInt.gxx  : nbvtx = 0 sur rline *** \n"<<endl;
-    //}
-#endif
     rlin->ComputeVertexParameters(Tol);
   }
 }