Integration of OCCT 6.5.0 from SVN
[occt.git] / src / TopOpeBRepDS / TopOpeBRepDS_CurveExplorer.cxx
1 // File:        TopOpeBRepDS_CurveExplorer.cxx
2 // Created:     Fri Dec  8 19:38:41 1995
3 // Author:      Jean Yves LEBEY
4 //              <jyl@meteox>
5
6 #include <TopOpeBRepDS_CurveExplorer.ixx>
7 #include <TopOpeBRepDS_Curve.hxx>
8
9 #define MYDS (*((TopOpeBRepDS_DataStructure*)myDS))
10 static TopOpeBRepDS_Curve* CEX_PEMPTY = NULL;
11
12 //=======================================================================
13 //function : TopOpeBRepDS_CurveExplorer
14 //purpose  : 
15 //=======================================================================
16
17 TopOpeBRepDS_CurveExplorer::TopOpeBRepDS_CurveExplorer() 
18 : myIndex(1),
19   myMax(0),
20   myDS(NULL),
21   myFound(Standard_False),
22   myFindKeep(Standard_False)
23 {
24 }
25
26 //=======================================================================
27 //function : TopOpeBRepDS_CurveExplorer
28 //purpose  : 
29 //=======================================================================
30
31 TopOpeBRepDS_CurveExplorer::TopOpeBRepDS_CurveExplorer
32 (const TopOpeBRepDS_DataStructure& DS,
33  const Standard_Boolean FindKeep)
34
35   Init(DS,FindKeep);
36 }
37
38 //=======================================================================
39 //function : Init
40 //purpose  : 
41 //=======================================================================
42
43 void TopOpeBRepDS_CurveExplorer::Init
44 (const TopOpeBRepDS_DataStructure& DS,
45  const Standard_Boolean FindKeep)
46 {
47   myDS = (TopOpeBRepDS_DataStructure*)&DS;
48   myIndex = 1; 
49   myMax = DS.NbCurves();
50   myFindKeep = FindKeep;
51   Find();
52 }
53
54
55 //=======================================================================
56 //function : Find
57 //purpose  : 
58 //=======================================================================
59
60 void TopOpeBRepDS_CurveExplorer::Find()
61 {
62   myFound = Standard_False;
63   while (myIndex <= myMax) {
64     if (myFindKeep) {
65       myFound = IsCurveKeep(myIndex);
66     }
67     else {
68       myFound = IsCurve(myIndex);
69     }
70     if (myFound) break;
71     else myIndex++;
72   }
73 }
74
75 //=======================================================================
76 //function : More
77 //purpose  : 
78 //=======================================================================
79
80 Standard_Boolean TopOpeBRepDS_CurveExplorer::More() const
81 {
82   return myFound;
83 }
84
85 //=======================================================================
86 //function : Next
87 //purpose  : 
88 //=======================================================================
89
90 void TopOpeBRepDS_CurveExplorer::Next()
91 {
92   myIndex++;
93   Find();
94 }
95
96 //=======================================================================
97 //function : Curve
98 //purpose  : 
99 //=======================================================================
100
101 const TopOpeBRepDS_Curve& TopOpeBRepDS_CurveExplorer::Curve()const
102 {
103   if ( myFound ) {
104     return MYDS.Curve(myIndex);
105   }
106   else {
107     if ( CEX_PEMPTY == NULL ) {
108       CEX_PEMPTY = new TopOpeBRepDS_Curve();
109     }
110     return *CEX_PEMPTY;
111   }
112 }
113
114 //=======================================================================
115 //function : IsCurve
116 //purpose  : 
117 //=======================================================================
118
119 Standard_Boolean TopOpeBRepDS_CurveExplorer::IsCurve
120    (const Standard_Integer I)const
121 {
122   Standard_Boolean b = MYDS.myCurves.IsBound(I);
123   return b;
124 }
125
126 //=======================================================================
127 //function : IsCurveKeep
128 //purpose  : 
129 //=======================================================================
130
131 Standard_Boolean TopOpeBRepDS_CurveExplorer::IsCurveKeep
132    (const Standard_Integer I)const
133 {
134   Standard_Boolean b = MYDS.myCurves.IsBound(I);
135   if (b) b = MYDS.Curve(I).Keep();
136   return b;
137 }
138
139
140 //=======================================================================
141 //function : Curve
142 //purpose  : 
143 //=======================================================================
144
145 const TopOpeBRepDS_Curve& TopOpeBRepDS_CurveExplorer::Curve
146 (const Standard_Integer I)const
147 {
148   if ( IsCurve(I) ) {
149     const TopOpeBRepDS_Curve& C = MYDS.Curve(I);
150     return C;
151   }
152
153   if ( CEX_PEMPTY == NULL ) {
154     CEX_PEMPTY = new TopOpeBRepDS_Curve();
155   }
156   return *CEX_PEMPTY;
157 }
158
159 //=======================================================================
160 //function : NbCurve
161 //purpose  : 
162 //=======================================================================
163
164 Standard_Integer TopOpeBRepDS_CurveExplorer::NbCurve()
165 {
166   myIndex = 1; myMax = MYDS.NbCurves();
167   Find();
168   Standard_Integer n = 0;
169   for (; More(); Next() ) n++;
170   return n;
171 }
172
173 //=======================================================================
174 //function : Index
175 //purpose  : 
176 //=======================================================================
177
178 Standard_Integer TopOpeBRepDS_CurveExplorer::Index()const
179 {
180   return myIndex;
181 }