0025242: Wrong result of cut operation.
[occt.git] / src / BOPAlgo / BOPAlgo_PaveFiller.cdl
index a2dba80..5e64364 100644 (file)
@@ -1,31 +1,27 @@
 -- Created by: Peter KURNEV
--- Copyright (c) 2010-2012 OPEN CASCADE SAS
+-- Copyright (c) 2010-2014 OPEN CASCADE SAS
 -- Copyright (c) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
 -- Copyright (c) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT,
 --                         EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 --
--- 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.
 
 class PaveFiller from BOPAlgo 
    inherits Algo from BOPAlgo 
     ---Purpose: 
 
 uses 
-    Pnt from gp,   
+    Pnt from gp,  
+    ShapeEnum from TopAbs,  
     Vertex from TopoDS,
     Face from TopoDS, 
     Edge from TopoDS,
@@ -39,9 +35,10 @@ uses
     DataMapOfIntegerListOfInteger from BOPCol, 
     DataMapOfShapeListOfShape from BOPCol,
     IndexedDataMapOfShapeListOfShape from BOPCol, 
-    DataMapOfIntegerReal from BOPCol,
+    DataMapOfIntegerReal from BOPCol, 
+    DataMapOfIntegerInteger from BOPCol,
     --  
-    Context from BOPInt,
+    Context from IntTools,
     -- 
     SectionAttribute from BOPAlgo, 
     
@@ -53,6 +50,7 @@ uses
     Curve from BOPDS,  
     IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS,
     MapOfPaveBlock from BOPDS,  
+    IndexedMapOfPaveBlock from BOPDS,  
     ListOfPaveBlock from BOPDS, 
     ListOfPave from BOPDS, 
     ListOfPntOn2S from IntSurf, 
@@ -70,7 +68,7 @@ is
      
     Create (theAllocator: BaseAllocator from BOPCol) 
       returns PaveFiller from BOPAlgo;   
-       
     DS(me:out) 
       returns DS from BOPDS; 
     ---C++:return  const &   
@@ -89,7 +87,7 @@ is
     ---C++: alias "Standard_EXPORT void SetArguments(const BOPCol_ListOfShape& theLS);" 
 
     Context(me:out) 
-      returns Context from BOPInt;  
+      returns Context from IntTools;  
        
     SetSectionAttribute(me:out; 
         theSecAttr : SectionAttribute from BOPAlgo); 
@@ -98,13 +96,19 @@ is
       is redefined;   
     --  
     -- protected methods 
-    -- 
+    --  
+    PerformInternal (me:out) 
+      is virtual protected;   
+      
     Clear(me:out) 
       is virtual protected;  
           
     Init(me:out) 
       is virtual protected;
-      
+     
+    Prepare(me:out) 
+      is  protected;
+     
     PerformVV(me:out) 
       is virtual protected;   
      
@@ -113,17 +117,33 @@ is
      
     PerformVF(me:out) 
       is virtual protected;  
-        
+  
     PerformEE(me:out) 
       is virtual protected; 
-         
+   
     PerformEF(me:out) 
       is virtual protected; 
      
     PerformFF(me:out) 
       is virtual protected;
      
-    
+    --modified by NIZNHY-PKV Fri Sep 12 07:05:37 2014f 
+    PerformVZ(me:out) 
+      is virtual protected; 
+       --Purpose: Computes Vertex/Solid interferences 
+       
+    PerformEZ(me:out) 
+      is virtual protected;  
+      --Purpose: Computes Edge/Solid interferences 
+     
+    PerformFZ(me:out) 
+      is virtual protected;   
+      --Purpose: Computes Face/Solid interferences 
+    PerformZZ(me:out) 
+      is virtual protected;  
+      --Purpose: Computes Solid/Solid interferences  
+    --modified by NIZNHY-PKV Fri Sep 12 07:05:45 2014t 
     TreatVerticesEE(me:out) 
       is protected; 
 
@@ -132,23 +152,28 @@ is
         
     MakeBlocks(me:out) 
       is protected; 
-        
+  
     MakePCurves(me:out) 
       is protected; 
-        
+  
     ProcessDE(me:out) 
       is protected;  
        
     FillShrunkData(me:out; 
         thePB:out PaveBlock from BOPDS) 
       is protected;   
-        
+    FillShrunkData(me:out; 
+        theType1: ShapeEnum from TopAbs; 
+        theType2: ShapeEnum from TopAbs) 
+      is protected;   
     PerformVerticesEE(me:out; 
         theMVCPB:out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS; 
         theAllocator:out BaseAllocator from BOPCol) 
       returns Integer from Standard 
       is protected; 
-        
+  
     PerformVerticesEF(me:out; 
         theMVCPB:out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS; 
         theAllocator:out BaseAllocator from BOPCol) 
@@ -160,44 +185,56 @@ is
         theMIF:MapOfInteger from BOPCol) 
       returns Boolean from Standard 
       is protected;  
-         
+   
     CheckFacePaves(myclass; 
         theN:Integer from Standard; 
         theMIFOn:MapOfInteger from BOPCol; 
         theMIFIn:MapOfInteger from BOPCol) 
       returns Boolean from Standard 
       is protected;  
-        
+  
     IsExistingVertex(me; 
         theP:Pnt from gp; 
         theTol:Real from Standard; 
         theMVOn:MapOfInteger from BOPCol) 
       returns Boolean from Standard 
       is protected; 
-        
-    PutPaveOnCurve(me:out; 
-        theMVOn:MapOfInteger from BOPCol; 
-        theTolR3D:Real from Standard; 
-        theNC:out Curve from BOPDS; 
-        nF1:Integer from Standard; 
-        nF2:Integer from Standard;
-        theMVEF:MapOfInteger from BOPCol; 
-        theMVTol:out DataMapOfIntegerReal from BOPCol) 
-      is protected;  
+
+    PutPavesOnCurve(me:out; 
+        theMVOn   : MapOfInteger from BOPCol; 
+        theTolR3D : Real from Standard; 
+        theNC     : out Curve from BOPDS;  
+        nF1       : Integer from Standard; 
+        nF2       : Integer from Standard; 
+        theMI     : MapOfInteger from BOPCol; 
+        theMVEF   : MapOfInteger from BOPCol; 
+        theMVTol  : out DataMapOfIntegerReal from BOPCol) 
+      is protected;   
+    ---Purpose: 
+    -- Checks and puts paves from <theMVOn> on the curve <theNC>.
 
     ExtendedTolerance(me:out; 
-        nV:Integer from Standard; 
-        aMI:MapOfInteger from BOPCol; 
-        aTolVExt:out Real from  Standard) 
+        nV       : Integer from Standard; 
+        aMI      : MapOfInteger from BOPCol; 
+        aTolVExt : out Real from  Standard;
+        aType    : Integer from Standard = 0) 
       returns Boolean from  Standard 
-      is protected;
-        
+      is protected; 
+    ---Purpose: 
+    -- Depending on the parameter aType it checks whether  
+    -- the vertex nV was created in EE or EF intersections. 
+    -- If so, it increases aTolVExt from tolerance value of vertex to  
+    -- the max distance from vertex nV to the ends of the range of common part. 
+    -- Possible values of aType: 
+    -- 1 - checks only EE; 
+    -- 2 - checks only EF;
+    -- other - checks both types of intersections.
+  
     PutBoundPaveOnCurve(me:out;  
         theF1: Face from TopoDS;  
         theF2: Face from TopoDS;  
         theTolR3D:Real from Standard; 
         theNC:out Curve from BOPDS;  
-        theMVOnIn:out MapOfInteger from BOPCol;
         theMVB:out MapOfInteger from BOPCol) 
       is protected; 
 
@@ -205,7 +242,7 @@ is
         thePB:PaveBlock from BOPDS;  
         theNC:Curve from BOPDS;
         theTolR3D:Real from Standard; 
-        theMPB:MapOfPaveBlock from BOPDS; 
+        theMPB:IndexedMapOfPaveBlock from BOPDS; 
         thePBOut:out PaveBlock from BOPDS)
       returns Boolean from Standard 
       is protected;  
@@ -221,10 +258,14 @@ is
     PostTreatFF(me:out; 
         theMSCPB:out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS; 
         theMVI:out DataMapOfShapeInteger from BOPCol;  
-        theDMExEd:out DataMapOfPaveBlockListOfPaveBlock from BOPDS;
+        theDMExEdges:out DataMapOfPaveBlockListOfPaveBlock from BOPDS; 
+        theDMI:out DataMapOfIntegerInteger from BOPCol;
         theAllocator:out BaseAllocator from BOPCol) 
       returns Integer from Standard 
-      is protected; 
+      is protected;  
+    ---Purpose: 
+    -- Treatment of section edges.
+    
     --
     --  Treatment of degenerated edges  
     -- 
@@ -241,12 +282,12 @@ is
         theLPB: ListOfPaveBlock from BOPDS; 
         thePB: PaveBlock from BOPDS) 
       is protected; 
-        
+  
     MakeSplitEdge(me:out;  
         theV:Integer from Standard; 
         theF:Integer from Standard) 
       is protected;  
-        
+      
     GetEFPnts(me:out;
         nF1 : Integer from Standard;
         nF2 : Integer from Standard;
@@ -254,74 +295,106 @@ is
       is protected; 
        
     PutEFPavesOnCurve(me:out; 
-        nF1        : Integer from Standard; 
-        nF2        : Integer from Standard; 
         theNC      : out Curve from BOPDS; 
-        theMVEF    : MapOfInteger from BOPCol; 
+        theMI      : MapOfInteger from BOPCol;
+        theMVEF    : MapOfInteger from BOPCol;
         theMVTol   : out DataMapOfIntegerReal from BOPCol)
-      is protected;
+      is protected; 
+    ---Purpose: 
+    -- Checks and puts paves created in EF intersections on the curve <theNC>.
  
     PutStickPavesOnCurve(me:out; 
-        nF1        : Integer from Standard; 
-        nF2        : Integer from Standard; 
+        aF1        : Face from TopoDS; 
+        aF2        : Face from TopoDS;  
+        theMI      : MapOfInteger from BOPCol;
         theNC      : out Curve from BOPDS; 
         theMVStick : MapOfInteger from BOPCol; 
         theMVTol   : out DataMapOfIntegerReal from BOPCol)
-      is protected; 
+      is protected;  
+    ---Purpose: 
+    -- Puts stick paves on the curve <theNC>
  
     GetStickVertices(me:out; 
         nF1        : Integer from Standard; 
         nF2        : Integer from Standard; 
         theMVStick : out MapOfInteger from BOPCol;
-        theMVEFk   : out MapOfInteger from BOPCol)
-      is protected; 
+        theMVEF    : out MapOfInteger from BOPCol; 
+        theMI      : out MapOfInteger from BOPCol)
+      is protected;  
+    ---Purpose: 
+    -- Collects indices of vertices created in all intersections between 
+    -- two faces (<nF1> and <nF2>) to the map <theMVStick>. 
+    -- Also, it collects indices of EF vertices to the <theMVEF> map  
+    -- and indices of all subshapes of these two faces to the <theMI> map.
  
-    GetFullFaceMap(me:out; 
+    GetFullShapeMap(me:out; 
         nF    : Integer from Standard; 
         theMI : out MapOfInteger from BOPCol) 
       is protected; 
-       
-       
+    ---Purpose: 
+    -- Collects index nF and indices of all subshapes of the shape with index <nF>
+    -- to the map <theMI>. 
+    
     RemoveUsedVertices(me:out; 
         theNC : out Curve from BOPDS; 
         theMV : out MapOfInteger from BOPCol)  
-      is protected;
+      is protected; 
+    ---Purpose: 
+    -- Removes indices of vertices that are already on the
+    -- curve <theNC> from the map <theMV>.  
+    -- It is used in PutEFPavesOnCurve and PutStickPavesOnCurve methods.
  
     PutPaveOnCurve(me:out; 
         nV        : Integer from Standard; 
         theTolR3D : Real from Standard;
-        theNC     : Curve from BOPDS;
-        thePB     : out PaveBlock from BOPDS; 
-        theMVTol  : out DataMapOfIntegerReal from BOPCol) 
-      is protected;
+        theNC     : out Curve from BOPDS; 
+        theMI     : MapOfInteger from BOPCol;
+        theMVTol  : out DataMapOfIntegerReal from BOPCol;
+        aType     : Integer from Standard = 0)
+      is protected; 
+    ---Purpose: 
+    -- Puts the pave nV on the curve theNC.  
+    -- Parameter aType defines whether to check the pave with 
+    -- extended tolerance: 
+    -- 0 - do not perform the check; 
+    -- other - perform the check (aType goes to ExtendedTolerance).
  
     ProcessExistingPaveBlocks(me:out; 
         theInt     : Integer from Standard; 
-        theMPBOnIn : MapOfPaveBlock from BOPDS; 
+        theMPBOnIn : IndexedMapOfPaveBlock from BOPDS; 
         theMSCPB   : out IndexedDataMapOfShapeCoupleOfPaveBlocks from BOPDS; 
         theMVI     : out DataMapOfShapeInteger from BOPCol; 
         theMVB     : MapOfInteger from BOPCol; 
         theMPB     : out MapOfPaveBlock from BOPDS)
-      is  protected;        
+      is  protected; 
+    ---Purpose:       
+    -- Adds the existing edges from the map <theMPBOnIn> which interfere  
+    -- with the vertices from <theMVB> map to the post treatment of section edges.
  
     UpdateExistingPaveBlocks(me:out; 
         thePB   : PaveBlock from BOPDS;
         theLPB  : out ListOfPaveBlock from BOPDS; 
         nF1     : Integer from Standard; 
         nF2     : Integer from Standard)
-      is protected;
+      is protected; 
+    ---Purpose: 
+    -- Replaces existing pave block <thePB> with new pave blocks <theLPB>. 
+    -- The list <theLPB> contains images of <thePB> which were created in 
+    -- the post treatment of section edges.
  
     TreatNewVertices(me:out; 
         theMVI    : IndexedDataMapOfShapeInteger from BOPCol; 
         theImages : out IndexedDataMapOfShapeListOfShape from BOPCol) 
-      is protected;
+      is protected; 
+    ---Purpose: 
+    -- Treatment of vertices that were created in EE intersections. 
  
     PutClosingPaveOnCurve (me:out; 
         aNC :out Curve from BOPDS)  
       is protected; 
-    ---Purpose:             
-    --- Put paves on the curve <aBC> in case when <aBC>   
-    --- is closed 3D-curve  
+    ---Purpose: 
+    -- Put paves on the curve <aBC> in case when <aBC>   
+    -- is closed 3D-curve  
      
     PreparePostTreatFF(me:out; 
         aInt   : Integer from Standard; 
@@ -355,28 +428,47 @@ is
     -- to make it interfere with edge
     
     ForceInterfVF(me:out; 
-        nV:Integer from Standard; 
-        nF:Integer from Standard) 
+        nV : Integer from Standard; 
+        nF : Integer from Standard) 
       returns Boolean from Standard
       is protected;
     ---Purpose: 
     -- Updates tolerance of vertex with index <nV>  
-    -- to make it interfere with face with index <nF>
-    CheckPlanes(me:out
+    -- to make it interfere with face with index <nF> 
+    
+    CheckPlanes(me; 
         nF1 : Integer from Standard; 
         nF2 : Integer from Standard)
       returns Boolean from Standard 
       is protected; 
     ---Purpose: 
     -- Checks if there are any common or intersecting sub shapes
-    -- between two planar faces. 
-
+    -- between two planar faces.  
+     
+    SplitEdge(me:out; 
+        nE  : Integer from Standard; 
+        nV1 : Integer from Standard; 
+        aT1 : Real from Standard;
+        nV2 : Integer from Standard; 
+        aT2 : Real from Standard) 
+    returns Integer from Standard 
+    is protected;
+    ---Purpose: 
+    -- Creates new edge from the edge nE with vertices nV1 and nV2 
+    -- and returns the index of that new edge in the DS.
+    UpdatePaveBlocks(me:out;  
+        theDMI : DataMapOfIntegerInteger from BOPCol) 
+    is protected; 
+    ---Purpose: 
+    -- Updates pave blocks which have the paves with indices contained  
+    -- in the map <theDMI>.
+        
 fields  
     myArguments   : ListOfShape from BOPCol is protected;  
     myDS          : PDS from BOPDS is protected; 
     myIterator    : PIterator from BOPDS is protected; 
-    myContext     : Context from BOPInt is protected;   
+    myContext     : Context from IntTools is protected;   
     mySectionAttribute : SectionAttribute from BOPAlgo is protected;
 
 end PaveFiller;