0023948: Wrong intersection between a surface of revolution and a plane.
[occt.git] / src / TopOpeBRepDS / TopOpeBRepDS.cxx
1 // Created on: 1994-03-18
2 // Created by: Jean Yves LEBEY
3 // Copyright (c) 1994-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 #include <TopOpeBRepDS.ixx>
18 #include <TopOpeBRepDS_define.hxx>
19 #include <Standard_ProgramError.hxx>
20
21 //=======================================================================
22 //function : Print the name of a State
23 //=======================================================================
24 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopAbs_State S)
25 {
26   TCollection_AsciiString s;
27   switch (S) {
28   case TopAbs_IN      : s = s + "IN"; break;
29   case TopAbs_OUT     : s = s + "OU"; break;
30   case TopAbs_ON      : s = s + "ON"; break;
31   case TopAbs_UNKNOWN : s = s + "UN"; break;
32   }
33   return s;
34 }
35
36 Standard_OStream& TopOpeBRepDS::Print(const TopAbs_State S,Standard_OStream& OS)
37 { OS<<TopOpeBRepDS::SPrint(S); return OS; }
38
39 //=======================================================================
40 //purpose  : print the name of a Kind
41 //=======================================================================
42 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopOpeBRepDS_Kind k)
43 {
44   TCollection_AsciiString s;
45   switch(k) {
46   case TopOpeBRepDS_POINT   : s = s + "PO"; break;
47   case TopOpeBRepDS_CURVE   : s = s + "CU"; break;
48   case TopOpeBRepDS_SURFACE : s = s + "SU"; break;
49   case TopOpeBRepDS_VERTEX  : s = s + "VE"; break;
50   case TopOpeBRepDS_EDGE    : s = s + "ED"; break;
51   case TopOpeBRepDS_WIRE    : s = s + "WI"; break;
52   case TopOpeBRepDS_FACE    : s = s + "FA"; break;
53   case TopOpeBRepDS_SHELL   : s = s + "SH"; break;
54   case TopOpeBRepDS_SOLID   : s = s + "SO"; break;
55   case TopOpeBRepDS_COMPSOLID : s = s + "CS"; break;
56   case TopOpeBRepDS_COMPOUND : s = s + "CO"; break;
57   default:
58     break ;
59   }
60   return s;
61 }
62 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopOpeBRepDS_Kind k,const Standard_Integer i,const TCollection_AsciiString& S1,const TCollection_AsciiString& S2)
63 {
64   TCollection_AsciiString si = ""; if (i >= 0 && i <= 9) si = " ";
65   TCollection_AsciiString s = S1 + "(" + TopOpeBRepDS::SPrint(k) + "," + si + TCollection_AsciiString(i) + ")" + S2;
66   return s;
67 }
68
69 Standard_OStream& TopOpeBRepDS::Print(const TopOpeBRepDS_Kind k,Standard_OStream& OS)
70 { OS<<TopOpeBRepDS::SPrint(k); return OS; }
71 Standard_OStream& TopOpeBRepDS::Print(const TopOpeBRepDS_Kind k,const Standard_Integer i,Standard_OStream& OS,const TCollection_AsciiString& S1,const TCollection_AsciiString& S2)
72 { OS<<TopOpeBRepDS::SPrint(k,i,S1,S2); OS.flush();return OS; }
73
74 //=======================================================================
75 //purpose  : print the name of a ShapeEnum
76 //=======================================================================
77 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopAbs_ShapeEnum t)
78 { return TopOpeBRepDS::SPrint(TopOpeBRepDS::ShapeToKind(t)); }
79 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopAbs_ShapeEnum t,const Standard_Integer i)
80 { return TopOpeBRepDS::SPrint(TopOpeBRepDS::ShapeToKind(t),i); }
81
82 Standard_OStream& TopOpeBRepDS::Print(const TopAbs_ShapeEnum t,const Standard_Integer i,Standard_OStream& s)
83 { s<<TopOpeBRepDS::SPrint(TopOpeBRepDS::ShapeToKind(t),i); return s; }
84
85 //=======================================================================
86 //purpose  : print the name of a Orientation
87 //=======================================================================
88 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopAbs_Orientation o) 
89 {
90   TCollection_AsciiString SS;
91   switch (o) {
92   case TopAbs_FORWARD  : SS = "FORWARD" ; break;
93   case TopAbs_REVERSED : SS = "REVERSED"; break;
94   case TopAbs_INTERNAL : SS = "INTERNAL"; break;
95   case TopAbs_EXTERNAL : SS = "EXTERNAL"; break;
96   }
97   return SS;
98 }
99
100 //=======================================================================
101 //purpose  : print the name of a Config
102 //=======================================================================
103 TCollection_AsciiString TopOpeBRepDS::SPrint(const TopOpeBRepDS_Config C)
104 {
105   TCollection_AsciiString SS;
106   switch (C) {
107   case TopOpeBRepDS_UNSHGEOMETRY : SS = "UNSH"; break;
108   case TopOpeBRepDS_SAMEORIENTED : SS = "SAME"; break;
109   case TopOpeBRepDS_DIFFORIENTED : SS = "DIFF"; break;
110   }
111   return SS;
112 }
113
114 Standard_OStream& TopOpeBRepDS::Print(const TopOpeBRepDS_Config C,Standard_OStream& OS)
115 { OS<<TopOpeBRepDS::SPrint(C); return OS; }
116
117 //=======================================================================
118 //function : IsTopology
119 //purpose  : 
120 //=======================================================================
121
122 Standard_Boolean TopOpeBRepDS::IsTopology(const TopOpeBRepDS_Kind k)
123 {
124   switch (k) {
125   case TopOpeBRepDS_COMPOUND : return Standard_True; break;
126   case TopOpeBRepDS_COMPSOLID : return Standard_True; break;
127   case TopOpeBRepDS_SOLID   : return Standard_True; break;
128   case TopOpeBRepDS_SHELL   : return Standard_True; break;
129   case TopOpeBRepDS_FACE    : return Standard_True; break;
130   case TopOpeBRepDS_WIRE    : return Standard_True; break;
131   case TopOpeBRepDS_EDGE    : return Standard_True; break;
132   case TopOpeBRepDS_VERTEX  : return Standard_True; break;
133   default : return Standard_False;
134   }
135 }
136
137 //=======================================================================
138 //function : IsGeometry
139 //purpose  : 
140 //=======================================================================
141
142 Standard_Boolean TopOpeBRepDS::IsGeometry(const TopOpeBRepDS_Kind k)
143 {
144   switch (k) {
145   case TopOpeBRepDS_SURFACE : return Standard_True; break;
146   case TopOpeBRepDS_CURVE   : return Standard_True; break;
147   case TopOpeBRepDS_POINT   : return Standard_True; break;
148   default:
149     break ;
150   }
151   return Standard_False;
152 }
153
154 //=======================================================================
155 //function : ShapeToKind
156 //purpose  : 
157 //=======================================================================
158
159 TopOpeBRepDS_Kind TopOpeBRepDS::ShapeToKind(const TopAbs_ShapeEnum S) 
160 {
161   TopOpeBRepDS_Kind res = TopOpeBRepDS_SOLID; // bidon
162   switch (S) {
163   case TopAbs_VERTEX : res = TopOpeBRepDS_VERTEX; break;
164   case TopAbs_EDGE   : res = TopOpeBRepDS_EDGE; break;
165   case TopAbs_WIRE   : res = TopOpeBRepDS_WIRE; break;
166   case TopAbs_FACE   : res = TopOpeBRepDS_FACE; break;
167   case TopAbs_SHELL  : res = TopOpeBRepDS_SHELL; break;
168   case TopAbs_SOLID  : res = TopOpeBRepDS_SOLID; break;
169   case TopAbs_COMPSOLID : res = TopOpeBRepDS_COMPSOLID; break;
170   case TopAbs_COMPOUND : res = TopOpeBRepDS_COMPOUND; break;
171   default : Standard_ProgramError::Raise("TopOpeBRepDS::ShapeToKind");
172   }
173   return res;
174 }
175
176 //=======================================================================
177 //function : KindToShape
178 //purpose  : 
179 //=======================================================================
180
181 TopAbs_ShapeEnum TopOpeBRepDS::KindToShape(const TopOpeBRepDS_Kind K)
182 {
183   TopAbs_ShapeEnum res = TopAbs_SHAPE; // bidon
184   if ( ! TopOpeBRepDS::IsTopology(K) ) return res;
185
186   switch (K) {
187   case TopOpeBRepDS_VERTEX : res = TopAbs_VERTEX; break;
188   case TopOpeBRepDS_EDGE   : res = TopAbs_EDGE; break;
189   case TopOpeBRepDS_WIRE   : res = TopAbs_WIRE; break;
190   case TopOpeBRepDS_FACE   : res = TopAbs_FACE; break;
191   case TopOpeBRepDS_SHELL  : res = TopAbs_SHELL; break;
192   case TopOpeBRepDS_SOLID  : res = TopAbs_SOLID; break;
193   case TopOpeBRepDS_COMPSOLID  : res = TopAbs_COMPSOLID; break;
194   case TopOpeBRepDS_COMPOUND : res = TopAbs_COMPOUND; break;
195   default : Standard_ProgramError::Raise("TopOpeBRepDS::KindToShape");
196   }
197   return res;
198 }