077aa9c03a8a2f9cb9e90dc94edbf09d089438fb
[occt.git] / src / ShapeAnalysis / ShapeAnalysis_Edge.cdl
1 -- Created on: 1998-06-08
2 -- Created by: data exchange team
3 -- Copyright (c) 1998-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 class Edge from ShapeAnalysis 
18
19     ---Purpose: Tool for analyzing the edge.
20     --          Queries geometrical representations of the edge (3d curve, pcurve
21     --          on the given face or surface) and topological sub-shapes (bounding
22     --          vertices).
23     --          Provides methods for analyzing geometry and topology consistency
24     --          (3d and pcurve(s) consistency, their adjacency to the vertices).
25
26 uses
27     Pnt      from gp,
28     Pnt2d    from gp,
29     Vec2d    from gp,
30     Curve    from Geom2d,
31     Curve    from Geom,
32     Surface  from Geom,
33     Vertex   from TopoDS,
34     Edge     from TopoDS,
35     Face     from TopoDS,
36     Location from TopLoc,
37     Status   from ShapeExtend
38
39 is
40
41     Create returns Edge from ShapeAnalysis;
42         ---Purpose: Empty constructor; initialises Status to OK
43     
44     HasCurve3d (me; edge: Edge from TopoDS) returns Boolean;
45         ---Purpose: Tells if the edge has a 3d curve
46
47     Curve3d (me; edge  : Edge from TopoDS;
48                  C3d   : out Curve from Geom;
49                  cf, cl: out Real;
50                  orient: Boolean = Standard_True)
51     returns Boolean;
52         ---Purpose: Returns the 3d curve and bounding parameteres for the edge
53         --          Returns False if no 3d curve.
54         --          If <orient> is True (default), takes orientation into account:
55         --          if the edge is reversed, cf and cl are toggled
56         
57     IsClosed3d (me; edge: Edge from TopoDS) returns Boolean;
58         ---Purpose: Gives True if the edge has a 3d curve, this curve is closed,
59         --          and the edge has the same vertex at start and end
60
61     HasPCurve (me; edge: Edge from TopoDS;
62                    face: Face from TopoDS)
63     returns Boolean;
64         ---Purpose: Tells if the Edge has a pcurve on the face.
65
66     HasPCurve (me; edge    : Edge from TopoDS;
67                    surface : Surface from Geom;
68                    location: Location from TopLoc)
69     returns Boolean;
70         ---Purpose: Tells if the edge has a pcurve on the surface (with location).
71
72     PCurve (me; edge  : Edge from TopoDS;
73                 face  : Face from TopoDS;
74                 C2d   : out Curve from Geom2d;
75                 cf, cl: out Real;
76                 orient: Boolean = Standard_True)
77     returns Boolean;
78
79     PCurve (me; edge    : Edge from TopoDS;
80                 surface : Surface from Geom;
81                 location: Location from TopLoc;
82                 C2d     : out Curve from Geom2d;
83                 cf, cl  : out Real;
84                 orient  : Boolean = Standard_True)
85     returns Boolean;
86         ---Purpose: Returns the pcurve and bounding parameteres for the edge
87         --          lying on the surface.
88         --          Returns False if the edge has no pcurve on this surface.
89         --          If <orient> is True (default), takes orientation into account:
90         --          if the edge is reversed, cf and cl are toggled
91  
92     BoundUV (me; edge       : Edge from TopoDS;
93                  face       : Face from TopoDS;
94                  first, last: out Pnt2d from gp)
95     returns Boolean;
96
97     BoundUV (me; edge    : Edge from TopoDS;
98                  surface : Surface from Geom;
99                  location: Location from TopLoc;
100                  first, last: out Pnt2d from gp)
101     returns Boolean;
102         ---Purpose: Returns the ends of pcurve
103         --          Calls method PCurve with <orient> equal to True
104         
105     IsSeam (me; edge: Edge from TopoDS;
106                 face: Face from TopoDS)
107     returns Boolean;
108     
109     IsSeam (me; edge    : Edge from TopoDS;
110                 surface : Surface from Geom;
111                 location: Location from TopLoc)
112     returns Boolean;
113         ---Purpose: Returns True if the edge has two pcurves on one surface
114         ---Remark : Calls BRep_Tool::IsClosed()
115     
116     FirstVertex (me; edge: Edge from TopoDS) returns Vertex from TopoDS;
117         ---Purpose: Returns start vertex of the edge (taking edge orientation
118         --          into account).
119         ---Remark:  Vertex orientation is always FORWARD
120
121     LastVertex (me; edge: Edge from TopoDS) returns Vertex from TopoDS;
122         ---Purpose: Returns end vertex of the edge (taking edge orientation
123         --          into account).
124         ---Remark:  Vertex orientation is always REVERSED
125     
126     GetEndTangent2d (me; edge: Edge from TopoDS; 
127                          face: Face from TopoDS;
128                          atEnd: Boolean; 
129                          pos : out Pnt2d from gp;
130                          tang: out Vec2d from gp;
131                          dparam: Real from Standard =0.0)
132     returns Boolean;
133
134     GetEndTangent2d (me; edge: Edge from TopoDS; 
135                          surface : Surface from Geom;
136                          location: Location from TopLoc;
137                          atEnd: Boolean; 
138                          pos : out Pnt2d from gp;
139                          tang: out Vec2d from gp;
140                          dparam: Real from Standard =0.0)
141     returns Boolean;
142         ---Purpose: Returns tangent of the edge pcurve at its start (if atEnd is
143         --          False) or end (if True), regarding the orientation of edge.
144         --          If edge is REVERSED, tangent is reversed before return.
145         --          Returns True if pcurve is available and tangent is computed
146         --          and is not null, else False.
147                 
148     CheckVerticesWithCurve3d (me: in out; edge : Edge from TopoDS;
149                                           preci: Real = -1;
150                                           vtx  : Integer = 0)
151     returns Boolean;
152         ---Purpose: Checks the start and/or end vertex of the edge for matching
153         --          with 3d curve with the given precision.
154         --          <vtx> = 1 : start vertex only
155         --          <vtx> = 2 : end vertex only
156         --          <vtx> = 0 : both (default)
157         --          If preci < 0 the vertices are considered with their own
158         --          tolerances, else with the given <preci>.
159         ---Returns: True if mismatching of the vertex to the curve was detected
160         --          else returns False (OK)
161         ---Status : OK - ends of the 3d curve are comprised by checked vertices
162         --          FAIL1 - edge has no 3d curve
163         --          DONE1 - if first vertex of the edge does not comprise start of 3d curve
164         --          DONE2 - if last vertex of the edge does not comprise end of 3d curve
165
166     CheckVerticesWithPCurve (me: in out; edge : Edge from TopoDS;
167                                          face : Face from TopoDS;
168                                          preci: Real = -1;
169                                          vtx  : Integer = 0)
170     returns Boolean;
171
172     CheckVerticesWithPCurve (me: in out; edge    : Edge from TopoDS;
173                                          surface : Surface from Geom;
174                                          location: Location from TopLoc;
175                                          preci   : Real = -1;
176                                          vtx     : Integer = 0)
177     returns Boolean;
178         ---Purpose: Checks the start and/or end vertex of the edge for matching
179         --          with pcurve with the given precision.
180         --          <vtx> = 1 : start vertex
181         --          <vtx> = 2 : end vertex
182         --          <vtx> = 0 : both
183         --          If preci < 0 the vertices are considered with their own
184         --          tolerances, else with the given <preci>.
185         ---Returns: True if mismatching of the curves to the vertex was detected
186         --          else returns False (OK)
187         ---Status : OK - ends of the 3d curve are comprised by checked vertices
188         --          FAIL1 - edge has no pcurve on a given (sur)face
189         --          DONE1 - if first vertex of the edge does not comprise start of pcurve
190         --          DONE2 - if last vertex of the edge does not comprise end of pcurve
191         
192     CheckVertexTolerance(me: in out; edge  : Edge from TopoDS;
193                                      face  : Face from TopoDS;
194                                      toler1: out Real;
195                                      toler2: out Real)
196     returns Boolean;
197     CheckVertexTolerance(me: in out; edge  : Edge from TopoDS;
198                                      toler1: out Real;
199                                      toler2: out Real)
200     returns Boolean;
201         ---Purpose: Checks if it is necessary to increase tolerances of the edge
202         --          vertices to comprise the ends of 3d curve and pcurve on
203         --          the given face (first method) or all pcurves stored in an edge
204         --          (second one)
205         --          toler1 returns necessary tolerance for first vertex,
206         --          toler2 returns necessary tolerance for last vertex.
207         ---Returns: True, if tolerances should be increased, otherwise False
208         ---Status:
209         --          OK   : the original tolerances are sufficient
210         --          DONE1: the tolerance of first vertex should be increased
211         --          DONE2: the tolerance of last  vertex should be increased
212         --          FAIL1: edge has no vertice(s), no check is done
213         --          FAIL2: edge has no 3d curve, only pcurves are checked
214         --          FAIL3: edge has no pcurve on a given face, only 3d curve is checked
215
216     CheckCurve3dWithPCurve (me: in out; edge: Edge from TopoDS;
217                                         face: Face from TopoDS)
218     returns Boolean;
219
220     CheckCurve3dWithPCurve (me: in out; edge    :Edge from TopoDS;
221                                         surface : Surface from Geom;
222                                         location: Location from TopLoc)
223     returns Boolean;
224         ---Purpose: Checks mutual orientation of 3d curve and pcurve on the
225         --          analysis of curves bounding points
226         ---Returns: Returns True if mismatching of orientation was detected,
227         --          else returns False (if OK or no curve)
228         ---Status:
229         --          OK   : orientations match each other (both go in the same
230         --                 directions), or edge is closed
231         --          DONE1: orientations mismatch each other (curves go in
232         --                 opposite directions)
233         --          FAIL1: no pcurve
234         --          FAIL2: no 3d curve
235
236     CheckPoints (me: in out; P1A, P1B: Pnt from gp;
237                              P2A, P2B: Pnt from gp;
238                              preci1, preci2: Real)
239     returns Boolean is private;
240         ---Purpose: Check points by pairs (A and A, B and B) with precisions
241         --          (preci1 and preci2).
242         --          P1 are the points either from 3d curve or from vertices,
243         --          P2 are the points from pcurve
244         ---Returns: False if status is OK, else True
245         --- Status:
246         --          OK   : distances (P1A, P2A) and (P1B, P2B) are within
247         --                 precisions
248         --          DONE1: distance (P1A, P2B) + (P1B, P2A) is less than
249         --                 distance (P1A, P2A) + (P1B, P2B),
250         --                 the precisions are not taken into account in this case
251     
252
253
254     Status (me; status: Status from ShapeExtend) returns Boolean;
255         ---Purpose: Returns the status (in the form of True/False) of last Check
256         ---Returns: True if status contains bit corresponding to enumerated argument
257
258     CheckSameParameter (me: in out; edge  : Edge from TopoDS;
259                                     maxdev: out Real;
260                                     NbControl: Integer = 23)
261     returns Boolean;
262         ---Purpose: Checks the edge to be SameParameter.
263         --          Calculates the maximal deviation between 3d curve and each
264         --          pcurve of the edge on <NbControl> equidistant points (the same
265         --          algorithm as in BRepCheck; default value is 23 as in BRepCheck). 
266         --          This deviation is returned in <maxdev> parameter.
267         --          If deviation is greater than tolerance of the edge (i.e.
268         --          incorrect flag) returns False, else returns True.
269         ---Returns: True if edge has either SameParameter False and/or its real
270         --          deviation of curves is more than tolerance
271         ---Status : OK - Edge is SameParameter with the associated tolerance
272         --          DONE1 - if deviation of the pcurves from 3d curve is greater 
273         --                  than tolerance of edge
274         --          DONE2 - if SameParameter flag in edge is False
275         --          FAIL1 - edge does not have 3d curve
276         --          FAIL2 - if some computational problems were encountered (when
277         --                  projecting points on curves)
278                 
279     CheckOverlapping(me :in out; theEdge1, theEdge2 : Edge from TopoDS; 
280                      theTolOverlap:in out Real; theDomainDist : Real =0.0) returns Boolean;
281         ---Purpose: Checks the first edge is overlapped with second edge.
282         --          If distance between two edges is less then theTolOverlap 
283         --          edges is overlapped.
284         --          theDomainDis - length of part of edges on wich edges is overlapped.
285         ---Status : DONE3 - edges is overlapped on whole length
286         --        : DONE4 - edges is overlapped on the length equal to theDomainDist
287
288
289 fields
290
291     myStatus: Integer is protected;
292     
293 end Edge;