0023024: Update headers of OCCT files
[occt.git] / src / BRepCheck / BRepCheck_Analyzer.cdl
1 -- Created on: 1995-12-08
2 -- Created by: Jacques GOUSSARD
3 -- Copyright (c) 1995-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
5 --
6 -- The content of this file is subject to the Open CASCADE Technology Public
7 -- License Version 6.5 (the "License"). You may not use the content of this file
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using this file.
10 --
11 -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 --
14 -- The Original Code and all software distributed under the License is
15 -- distributed on an "AS IS" basis, without warranty of any kind, and the
16 -- Initial Developer hereby disclaims all such warranties, including without
17 -- limitation, any warranties of merchantability, fitness for a particular
18 -- purpose or non-infringement. Please see the License for the specific terms
19 -- and conditions governing the rights and limitations under the License.
20
21
22
23 class Analyzer from BRepCheck
24
25         ---Purpose: A framework to check the overall
26         -- validity of a shape. For a shape to be valid in Open
27         --  CASCADE, it - or its component subshapes - must respect certain
28         -- criteria. These criteria are checked by the function IsValid.
29         -- Once you have determined whether a shape is valid or not, you can
30         -- diagnose its specific anomalies and correct them using the services of
31         -- the ShapeAnalysis, ShapeUpgrade, and ShapeFix packages.
32
33 uses Shape                from TopoDS,
34      ShapeEnum            from TopAbs,
35      Result               from BRepCheck,
36      DataMapOfShapeResult from BRepCheck
37
38 raises NullObject from Standard,
39        NoSuchObject from Standard
40
41 is
42
43     Create(S: Shape from TopoDS; 
44            GeomControls : Boolean from Standard =  Standard_True)
45         ---Purpose: Constructs a shape validation object defined by the shape S.
46         --    <S> is the  shape  to control.  <GeomControls>  If
47         --          False   only topological informaions  are checked.
48         --          The geometricals controls are
49         --          For a Vertex :
50         --          BRepCheck_InvalidToleranceValue  NYI
51         --          For an Edge :
52         --          BRepCheck_InvalidCurveOnClosedSurface,
53         --          BRepCheck_InvalidCurveOnSurface,
54         --          BRepCheck_InvalidSameParameterFlag,
55         --          BRepCheck_InvalidToleranceValue  NYI
56         --          For a face :
57         --          BRepCheck_UnorientableShape,
58         --          BRepCheck_IntersectingWires,
59         --          BRepCheck_InvalidToleranceValue  NYI
60         --          For a wire :
61         --          BRepCheck_SelfIntersectingWire
62
63         ---C++: inline
64         returns Analyzer from BRepCheck
65         raises NullObject from Standard;
66         
67
68
69     Init(me: in out; S: Shape from TopoDS;
70                      GeomControls : Boolean from Standard =  Standard_True)
71         ---Purpose: <S> is the  shape  to control.  <GeomControls>  If
72         --          False   only topological informaions  are checked.
73         --          The geometricals controls are
74         --          For a Vertex :
75         --          BRepCheck_InvalidTolerance  NYI
76         --          For an Edge :
77         --          BRepCheck_InvalidCurveOnClosedSurface,
78         --          BRepCheck_InvalidCurveOnSurface,
79         --          BRepCheck_InvalidSameParameterFlag,
80         --          BRepCheck_InvalidTolerance  NYI
81         --          For a face :
82         --          BRepCheck_UnorientableShape,
83         --          BRepCheck_IntersectingWires,
84         --          BRepCheck_InvalidTolerance  NYI
85         --          For a wire :
86         --          BRepCheck_SelfIntersectingWire
87
88         raises NullObject from Standard
89         is static;
90     
91         
92
93     IsValid(me; S: Shape from TopoDS)
94         ---Purpose: <S> is a  subshape of the  original shape. Returns
95         --          <STandard_True> if no default has been detected on
96         --          <S> and any of its subshape.
97         returns Boolean from Standard
98         raises NoSuchObject from Standard
99         is static;
100
101
102     IsValid(me)
103         ---Purpose:  Returns true if no defect is
104         -- detected on the shape S or any of its subshapes.
105         -- Returns true if the shape S is valid.
106         -- This function checks whether a given shape is valid by checking that:
107         -- -      the topology is correct
108         -- -      parameterization of edges in particular is correct. 
109         -- For the topology to be correct, the following conditions must be satisfied:
110         -- -      edges should have at least two vertices if they are not
111         --    degenerate edges. The vertices should be within the range of
112         --  the bounding edges at the tolerance specified in the vertex,
113         -- -      edges should share at least one face. The representation of
114         --  the edges should be within the tolerance criterion assigned to them.
115         -- -      wires defining a face should not self-intersect and should be closed,
116         -- - there should be one wire which contains all other wires inside a face,
117         -- -      wires should be correctly oriented with respect to each of the edges,
118         -- -      faces should be correctly oriented, in particular with
119         --    respect to adjacent faces if these faces define a solid,
120         -- -      shells defining a solid should be closed. There should
121         --    be one enclosing shell if the shape is a solid;
122         --    To check parameterization of edge, there are 2 approaches depending on
123         --    the edge?s contextual situation.
124         -- -      if the edge is either single, or it is in the context
125         --    of a wire or a compound, its parameterization is defined by
126         --    the parameterization of its 3D curve and is considered as    valid.
127         -- -      If the edge is in the context of a face, it should
128         --    have SameParameter and SameRange flags set to Standard_True. To
129         --    check these flags, you should call the function
130         --    BRep_Tool::SameParameter and BRep_Tool::SameRange for an
131         --    edge. If at least one of these flags is set to Standard_False,
132         --    the edge is considered as invalid without any additional check.
133         --    If the edge is contained by a face, and it has SameParameter and
134         --    SameRange flags set to Standard_True, IsValid checks
135         --    whether representation of the edge on face, in context of which the
136         --    edge is considered, has the same parameterization up to the
137         --    tolerance value coded on the edge. For a given parameter t on the edge
138         --    having C as a 3D curve and one PCurve P on a surface S (base
139         --    surface of the reference face), this checks that |C(t) - S(P(t))|
140         --    is less than or equal to tolerance, where tolerance is the tolerance
141         --    value coded on the edge.
142         ---C++: inline
143         returns Boolean from Standard
144         is static;
145
146
147
148     Result(me; SubS: Shape from TopoDS)
149     
150         ---C++: return const&
151         ---C++: inline
152         returns any Result from BRepCheck
153         raises NoSuchObject from Standard
154         is static;
155
156
157     --- Private implementation method
158
159     Put(me: in out; S: Shape from TopoDS; Gctrl: Boolean from Standard)
160     
161         is static private;
162
163
164     Perform(me: in out; S: Shape from TopoDS)
165     
166         is static private;
167         
168     
169     ValidSub(me; S: Shape from TopoDS; SubType: ShapeEnum from TopAbs)
170     
171         returns Boolean from Standard
172         is static private;
173         
174     
175 fields
176
177     myShape : Shape                from TopoDS;
178     myMap   : DataMapOfShapeResult from BRepCheck;
179     
180 end Analyzer;