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
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <BRepOffset_MakeOffset.hxx>
18 #include <BRepOffsetAPI_MakeOffsetShape.hxx>
19 #include <Standard_ConstructionError.hxx>
20 #include <TopoDS_Shape.hxx>
21 #include <TopTools_ListIteratorOfListOfShape.hxx>
23 //=======================================================================
24 //function : BRepOffsetAPI_MakeOffsetShape
26 //=======================================================================
27 BRepOffsetAPI_MakeOffsetShape::BRepOffsetAPI_MakeOffsetShape()
28 : myLastUsedAlgo(OffsetAlgo_NONE)
32 //=======================================================================
33 //function : BRepOffsetAPI_MakeOffsetShape
35 //=======================================================================
36 BRepOffsetAPI_MakeOffsetShape::BRepOffsetAPI_MakeOffsetShape(const TopoDS_Shape& S,
37 const Standard_Real Offset,
38 const Standard_Real Tol,
39 const BRepOffset_Mode Mode,
40 const Standard_Boolean Intersection,
41 const Standard_Boolean SelfInter,
42 const GeomAbs_JoinType Join,
43 const Standard_Boolean RemoveIntEdges)
44 : myLastUsedAlgo(OffsetAlgo_NONE)
46 PerformByJoin(S, Offset, Tol, Mode, Intersection, SelfInter, Join, RemoveIntEdges);
49 //=======================================================================
50 //function : PerformByJoin
52 //=======================================================================
53 void BRepOffsetAPI_MakeOffsetShape::PerformByJoin
54 (const TopoDS_Shape& S,
55 const Standard_Real Offset,
56 const Standard_Real Tol,
57 const BRepOffset_Mode Mode,
58 const Standard_Boolean Intersection,
59 const Standard_Boolean SelfInter,
60 const GeomAbs_JoinType Join,
61 const Standard_Boolean RemoveIntEdges)
64 myLastUsedAlgo = OffsetAlgo_JOIN;
66 myOffsetShape.Initialize (S,Offset,Tol,Mode,Intersection,SelfInter,
67 Join, Standard_False, RemoveIntEdges);
68 myOffsetShape.MakeOffsetShape();
70 if (!myOffsetShape.IsDone())
73 myShape = myOffsetShape.Shape();
77 //=======================================================================
78 //function : PerformBySimple
80 //=======================================================================
81 void BRepOffsetAPI_MakeOffsetShape::PerformBySimple(const TopoDS_Shape& theS,
82 const Standard_Real theOffsetValue)
85 myLastUsedAlgo = OffsetAlgo_SIMPLE;
87 mySimpleOffsetShape.Initialize(theS, theOffsetValue);
88 mySimpleOffsetShape.Perform();
90 if (!mySimpleOffsetShape.IsDone())
93 myShape = mySimpleOffsetShape.GetResultShape();
97 //=======================================================================
98 //function :MakeOffset
100 //=======================================================================
101 const BRepOffset_MakeOffset& BRepOffsetAPI_MakeOffsetShape::MakeOffset() const
103 return myOffsetShape;
106 //=======================================================================
109 //=======================================================================
110 void BRepOffsetAPI_MakeOffsetShape::Build()
114 //=======================================================================
115 //function : Generated
117 //=======================================================================
118 const TopTools_ListOfShape& BRepOffsetAPI_MakeOffsetShape::Generated (const TopoDS_Shape& S)
121 if (myLastUsedAlgo == OffsetAlgo_JOIN)
123 myGenerated = myOffsetShape.Generated (S);
125 else if (myLastUsedAlgo == OffsetAlgo_SIMPLE)
127 TopoDS_Shape aGenShape = mySimpleOffsetShape.Generated(S);
128 if (!aGenShape.IsNull() && !aGenShape.IsSame (S))
129 myGenerated.Append(aGenShape);
135 //=======================================================================
136 //function : Modified
138 //=======================================================================
139 const TopTools_ListOfShape& BRepOffsetAPI_MakeOffsetShape::Modified (const TopoDS_Shape& S)
142 if (myLastUsedAlgo == OffsetAlgo_JOIN)
144 myGenerated = myOffsetShape.Modified (S);
146 else if (myLastUsedAlgo == OffsetAlgo_SIMPLE)
148 TopoDS_Shape aGenShape = mySimpleOffsetShape.Modified(S);
149 if (!aGenShape.IsNull() && !aGenShape.IsSame (S))
150 myGenerated.Append(aGenShape);
156 //=======================================================================
157 //function : IsDeleted
159 //=======================================================================
160 Standard_Boolean BRepOffsetAPI_MakeOffsetShape::IsDeleted (const TopoDS_Shape& S)
162 if (myLastUsedAlgo == OffsetAlgo_JOIN)
164 return myOffsetShape.IsDeleted(S);
166 return Standard_False;
169 //=======================================================================
170 //function : GetJoinType
171 //purpose : Query offset join type.
172 //=======================================================================
173 GeomAbs_JoinType BRepOffsetAPI_MakeOffsetShape::GetJoinType() const
175 return myOffsetShape.GetJoinType();