0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / BRepOffsetAPI / BRepOffsetAPI_MakeThickSolid.cxx
1 // Created on: 1996-02-13
2 // Created by: Yves FRICAUD
3 // Copyright (c) 1996-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <BRepOffset_MakeOffset.hxx>
19 #include <BRepOffsetAPI_MakeThickSolid.hxx>
20 #include <Standard_ConstructionError.hxx>
21 #include <TopoDS.hxx>
22 #include <TopoDS_Shape.hxx>
23 #include <TopTools_ListIteratorOfListOfShape.hxx>
24
25 //=======================================================================
26 //function : BRepOffsetAPI_MakeThickSolid
27 //purpose  : 
28 //=======================================================================
29 BRepOffsetAPI_MakeThickSolid::BRepOffsetAPI_MakeThickSolid()
30 {
31 }
32
33
34 //=======================================================================
35 //function : BRepOffsetAPI_MakeThickSolid
36 //purpose  : 
37 //=======================================================================
38
39 BRepOffsetAPI_MakeThickSolid::BRepOffsetAPI_MakeThickSolid
40 (const TopoDS_Shape&         S, 
41  const TopTools_ListOfShape& ClosingFaces,
42  const Standard_Real         Offset, 
43  const Standard_Real         Tol, 
44  const BRepOffset_Mode       Mode,
45  const Standard_Boolean      Intersection,
46  const Standard_Boolean      SelfInter,
47  const GeomAbs_JoinType      Join,
48  const Standard_Boolean      RemoveIntEdges)
49 {
50   myOffsetShape.Initialize (S,Offset,Tol,Mode,Intersection,SelfInter,
51                             Join, Standard_False, RemoveIntEdges);
52   TopTools_ListIteratorOfListOfShape it(ClosingFaces);
53   for (; it.More(); it.Next()) {
54     myOffsetShape.AddFace(TopoDS::Face(it.Value()));
55   }
56   Build();
57 }
58
59 //=======================================================================
60 //function : virtual
61 //purpose  : 
62 //=======================================================================
63
64 void BRepOffsetAPI_MakeThickSolid::Build()
65 {
66   if (!IsDone()) {
67     myOffsetShape.MakeThickSolid();
68     if (!myOffsetShape.IsDone()) return;
69     myShape  = myOffsetShape.Shape();
70     Done();
71   }
72 }
73
74
75
76 //=======================================================================
77 //function : Modified
78 //purpose  : 
79 //=======================================================================
80
81 const TopTools_ListOfShape& BRepOffsetAPI_MakeThickSolid::Modified (const TopoDS_Shape& F) 
82
83 {
84   myGenerated.Clear();
85   if (myOffsetShape.OffsetFacesFromShapes().HasImage(F)) {
86     if (myOffsetShape.ClosingFaces().Contains(F)) { 
87       myOffsetShape.OffsetFacesFromShapes().LastImage (F, myGenerated); 
88       // Les face du resultat sont orientees comme dans la piece initiale.
89       //si offset a l interieur.
90       TopTools_ListIteratorOfListOfShape it(myGenerated);
91       for (; it.More(); it.Next())
92         it.Value().Reverse();
93    
94     }
95   }
96   return myGenerated;
97 }