0026377: Passing Handle objects as arguments to functions as non-const reference...
[occt.git] / src / BRepOffsetAPI / BRepOffsetAPI_FindContigousEdges.hxx
1 // Created on: 1995-05-02
2 // Created by: Jing Cheng MEI
3 // Copyright (c) 1995-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 #ifndef _BRepOffsetAPI_FindContigousEdges_HeaderFile
18 #define _BRepOffsetAPI_FindContigousEdges_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Real.hxx>
25 #include <Standard_Boolean.hxx>
26 #include <Standard_Integer.hxx>
27 #include <TopTools_ListOfShape.hxx>
28 class BRepBuilderAPI_Sewing;
29 class Standard_OutOfRange;
30 class Standard_NoSuchObject;
31 class TopoDS_Shape;
32 class TopoDS_Edge;
33
34
35 //! Provides methods to identify contigous boundaries
36 //! for continuity control (C0, C1, ...)
37 //!
38 //! Use this function as following:
39 //! - create an object
40 //! - default tolerance 1.E-06
41 //! - with analysis of degenerated faces on
42 //! - define if necessary a new tolerance
43 //! - set if necessary analysis of degenerated shapes off
44 //! - add shapes to be controlled -> Add
45 //! - compute -> Perfom
46 //! - output couples of connected edges for control
47 //! - output the problems if any
48 class BRepOffsetAPI_FindContigousEdges 
49 {
50 public:
51
52   DEFINE_STANDARD_ALLOC
53
54   
55   //! Initializes an algorithm for identifying contiguous edges
56   //! on shapes with tolerance as the tolerance of contiguity
57   //! (defaulted to 1.0e-6). This tolerance value is used to
58   //! determine whether two edges or sections of edges are coincident.
59   //! Use the function Add to define the shapes to be checked.
60   //! Set option to false. This argument (defaulted to true) will
61   //! serve in subsequent software releases for performing an
62   //! analysis of degenerated shapes.
63   Standard_EXPORT BRepOffsetAPI_FindContigousEdges(const Standard_Real tolerance = 1.0e-06, const Standard_Boolean option = Standard_True);
64   
65   //! Initializes this algorithm for identifying contiguous edges
66   //! on shapes using the tolerance of contiguity tolerance.
67   //! This tolerance value is used to determine whether two
68   //! edges or sections of edges are coincident.
69   //! Use the function Add to define the shapes to be checked.
70   //! Sets <option> to false.
71   Standard_EXPORT void Init (const Standard_Real tolerance, const Standard_Boolean option);
72   
73   //! Adds the shape shape to the list of shapes to be
74   //! checked by this algorithm.
75   //! Once all the shapes to be checked have been added,
76   //! use the function Perform to find the contiguous edges
77   //! and the function ContigousEdge to return these edges.
78   Standard_EXPORT void Add (const TopoDS_Shape& shape);
79   
80   //! Finds coincident parts of edges of two or more shapes
81   //! added to this algorithm and breaks down these edges
82   //! into contiguous and non-contiguous sections on copies
83   //! of the initial shapes.
84   //! The function ContigousEdge returns contiguous
85   //! edges. The function Modified can be used to return
86   //! modified copies of the initial shapes where one or more
87   //! edges were broken down into contiguous and non-contiguous sections.
88   //! Warning
89   //! This function must be used once all the shapes to be
90   //! checked have been added. It is not possible to add
91   //! further shapes subsequently and then to repeat the call to Perform.
92   Standard_EXPORT void Perform();
93   
94   //! Gives  the number  of edges (free  edges + contigous
95   //! edges  +  multiple edge)
96   Standard_EXPORT Standard_Integer NbEdges() const;
97   
98   //! Returns the number of contiguous edges found by the
99   //! function Perform on the shapes added to this algorithm.
100   Standard_EXPORT Standard_Integer NbContigousEdges() const;
101   
102   //! Returns the contiguous edge of index index found by
103   //! the function Perform on the shapes added to this algorithm.
104   //! Exceptions
105   //! Standard_OutOfRange if:
106   //! - index is less than 1, or
107   //! - index is greater than the number of contiguous
108   //! edges found by the function Perform on the shapes added to this algorithm.
109   Standard_EXPORT const TopoDS_Edge& ContigousEdge (const Standard_Integer index) const;
110   
111   //! Returns a list of edges coincident with the contiguous
112   //! edge of index index found by the function Perform.
113   //! There are as many edges in the list as there are faces
114   //! adjacent to this contiguous edge.
115   //! Exceptions
116   //! Standard_OutOfRange if:
117   //! - index is less than 1, or
118   //! - index is greater than the number of contiguous edges
119   //! found by the function Perform on the shapes added to this algorithm.
120   Standard_EXPORT const TopTools_ListOfShape& ContigousEdgeCouple (const Standard_Integer index) const;
121   
122   //! Returns the edge on the initial shape, of which the
123   //! modified copy contains the edge section.
124   //! section is coincident with a contiguous edge found by
125   //! the function Perform. Use the function
126   //! ContigousEdgeCouple to obtain a valid section.
127   //! This information is useful for verification purposes, since
128   //! it provides a means of determining the surface to which
129   //! the contiguous edge belongs.
130   //! Exceptions
131   //! Standard_NoSuchObject if section is not coincident
132   //! with a contiguous edge. Use the function
133   //! ContigousEdgeCouple to obtain a valid section.
134   Standard_EXPORT const TopoDS_Edge& SectionToBoundary (const TopoDS_Edge& section) const;
135   
136   //! Gives the number of degenerated shapes
137   Standard_EXPORT Standard_Integer NbDegeneratedShapes() const;
138   
139   //! Gives a degenerated shape
140   Standard_EXPORT const TopoDS_Shape& DegeneratedShape (const Standard_Integer index) const;
141   
142   //! Indicates if a input shape is degenerated
143   Standard_EXPORT Standard_Boolean IsDegenerated (const TopoDS_Shape& shape) const;
144   
145   //! Returns true if the copy of the initial shape shape was
146   //! modified by the function Perform (i.e. if one or more of
147   //! its edges was broken down into contiguous and non-contiguous sections).
148   //! Warning
149   //! Returns false if shape is not one of the initial shapes
150   //! added to this algorithm.
151   Standard_EXPORT Standard_Boolean IsModified (const TopoDS_Shape& shape) const;
152   
153   //! Gives a modifieded shape
154   //! Raises   NoSuchObject if shape has not been modified
155   Standard_EXPORT const TopoDS_Shape& Modified (const TopoDS_Shape& shape) const;
156   
157   //! Dump properties of resulting shape.
158   Standard_EXPORT void Dump() const;
159
160
161
162
163 protected:
164
165
166
167
168
169 private:
170
171
172
173   Handle(BRepBuilderAPI_Sewing) mySewing;
174
175
176 };
177
178
179
180
181
182
183
184 #endif // _BRepOffsetAPI_FindContigousEdges_HeaderFile