1 // Created on: 1995-12-08
2 // Created by: Jacques GOUSSARD
3 // Copyright (c) 1995-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 <BRepCheck.hxx>
19 #include <BRep_Tool.hxx>
20 #include <BRepCheck_ListIteratorOfListOfStatus.hxx>
21 #include <BRepCheck_Wire.hxx>
22 #include <TopoDS_Edge.hxx>
23 #include <TopoDS_Face.hxx>
24 #include <TopoDS_Wire.hxx>
25 #include <Adaptor3d_Curve.hxx>
26 #include <Adaptor3d_Surface.hxx>
27 #include <GeomAbs_CurveType.hxx>
28 #include <GeomAbs_SurfaceType.hxx>
29 #include <gp_Elips.hxx>
31 //=======================================================================
34 //=======================================================================
35 void BRepCheck::Add(BRepCheck_ListOfStatus& lst, const BRepCheck_Status stat)
37 BRepCheck_ListIteratorOfListOfStatus it(lst);
39 if (it.Value() == BRepCheck_NoError && stat != BRepCheck_NoError) {
43 if (it.Value() == stat) {
52 //=======================================================================
53 //function : SelfIntersection
55 //=======================================================================
56 Standard_Boolean BRepCheck::SelfIntersection(const TopoDS_Wire& W,
57 const TopoDS_Face& myFace,
61 Handle(BRepCheck_Wire) chkw = new BRepCheck_Wire(W);
62 BRepCheck_Status stat = chkw->SelfIntersect(myFace,RetE1,RetE2);
63 return (stat == BRepCheck_SelfIntersectingWire);
66 //=======================================================================
67 //function : PrecCurve
69 //=======================================================================
70 Standard_Real BRepCheck::PrecCurve(const Adaptor3d_Curve& aAC3D)
72 Standard_Real aXEmax = RealEpsilon();
74 GeomAbs_CurveType aCT = aAC3D.GetType();
75 if (aCT==GeomAbs_Ellipse) {
78 gp_Elips aEL3D=aAC3D.Ellipse();
79 aEL3D.Location().Coord(aX[0], aX[1], aX[2]);
80 aX[3]=aEL3D.MajorRadius();
81 aX[4]=aEL3D.MinorRadius();
83 for (Standard_Integer i = 0; i < 5; ++i) {
87 Standard_Real aXE = Epsilon(aX[i]);
92 }//if (aCT=GeomAbs_Ellipse) {
97 //=======================================================================
98 //function : PrecSurface
100 //=======================================================================
101 Standard_Real BRepCheck::PrecSurface(const Handle(Adaptor3d_Surface)& aAHSurf)
103 Standard_Real aXEmax = RealEpsilon();
105 GeomAbs_SurfaceType aST = aAHSurf->GetType();
106 if (aST == GeomAbs_Cone) {
107 gp_Cone aCone=aAHSurf->Cone();
110 aCone.Location().Coord(aX[0], aX[1], aX[2]);
111 aX[3]=aCone.RefRadius();
113 for (Standard_Integer i = 0; i < 4; ++i) {
117 Standard_Real aXE = Epsilon(aX[i]);
122 }//if (aST==GeomAbs_Cone) {
126 //=======================================================================
129 //=======================================================================
130 void BRepCheck::Print(const BRepCheck_Status stat,
131 Standard_OStream& OS)
135 case BRepCheck_NoError:
136 OS << "BRepCheck_NoError\n";
138 case BRepCheck_InvalidPointOnCurve:
139 OS << "BRepCheck_InvalidPointOnCurve\n";
141 case BRepCheck_InvalidPointOnCurveOnSurface:
142 OS << "BRepCheck_InvalidPointOnCurveOnSurface\n";
144 case BRepCheck_InvalidPointOnSurface:
145 OS << "BRepCheck_InvalidPointOnSurface\n";
147 case BRepCheck_No3DCurve:
148 OS << "BRepCheck_No3DCurve\n";
150 case BRepCheck_Multiple3DCurve:
151 OS << "BRepCheck_Multiple3DCurve\n";
153 case BRepCheck_Invalid3DCurve:
154 OS << "BRepCheck_Invalid3DCurve\n";
156 case BRepCheck_NoCurveOnSurface:
157 OS << "BRepCheck_NoCurveOnSurface\n";
159 case BRepCheck_InvalidCurveOnSurface:
160 OS << "BRepCheck_InvalidCurveOnSurface\n";
162 case BRepCheck_InvalidCurveOnClosedSurface:
163 OS << "BRepCheck_InvalidCurveOnClosedSurface\n";
165 case BRepCheck_InvalidSameRangeFlag:
166 OS << "BRepCheck_InvalidSameRangeFlag\n";
168 case BRepCheck_InvalidSameParameterFlag:
169 OS << "BRepCheck_InvalidSameParameterFlag\n";
171 case BRepCheck_InvalidDegeneratedFlag:
172 OS << "BRepCheck_InvalidDegeneratedFlag\n";
174 case BRepCheck_FreeEdge:
175 OS << "BRepCheck_FreeEdge\n";
177 case BRepCheck_InvalidMultiConnexity:
178 OS << "BRepCheck_InvalidMultiConnexity\n";
180 case BRepCheck_InvalidRange:
181 OS << "BRepCheck_InvalidRange\n";
183 case BRepCheck_EmptyWire:
184 OS << "BRepCheck_EmptyWire\n";
186 case BRepCheck_RedundantEdge:
187 OS << "BRepCheck_RedundantEdge\n";
189 case BRepCheck_SelfIntersectingWire:
190 OS << "BRepCheck_SelfIntersectingWire\n";
192 case BRepCheck_NoSurface:
193 OS << "BRepCheck_NoSurface\n";
195 case BRepCheck_InvalidWire:
196 OS << "BRepCheck_InvalidWire\n";
198 case BRepCheck_RedundantWire:
199 OS << "BRepCheck_RedundantWire\n";
201 case BRepCheck_IntersectingWires:
202 OS << "BRepCheck_IntersectingWires\n";
204 case BRepCheck_InvalidImbricationOfWires:
205 OS << "BRepCheck_InvalidImbricationOfWires\n";
207 case BRepCheck_EmptyShell:
208 OS << "BRepCheck_EmptyShell\n";
210 case BRepCheck_RedundantFace:
211 OS << "BRepCheck_RedundantFace\n";
213 case BRepCheck_UnorientableShape:
214 OS << "BRepCheck_UnorientableShape\n";
216 case BRepCheck_NotClosed:
217 OS << "BRepCheck_NotClosed\n";
219 case BRepCheck_NotConnected:
220 OS << "BRepCheck_NotConnected\n";
222 case BRepCheck_SubshapeNotInShape:
223 OS << "BRepCheck_SubshapeNotInShape\n";
225 case BRepCheck_BadOrientation:
226 OS << "BRepCheck_BadOrientation\n";
228 case BRepCheck_BadOrientationOfSubshape:
229 OS << "BRepCheck_BadOrientationOfSubshape\n";
231 case BRepCheck_CheckFail:
232 OS << "BRepCheck_CheckFail\n";
234 case BRepCheck_InvalidPolygonOnTriangulation:
235 OS << "BRepCheck_InvalidPolygonOnTriangulation\n";
237 case BRepCheck_InvalidToleranceValue:
238 OS << "BRepCheck_InvalidToleranceValue\n";
240 case BRepCheck_InvalidImbricationOfShells:
241 OS << "BRepCheck_InvalidImbricationOfShells\n";
243 case BRepCheck_EnclosedRegion:
244 OS << "BRepCheck_EnclosedRegion\n";