Integration of OCCT 6.5.0 from SVN
[occt.git] / src / IFSelect / IFSelect_ContextModif.cxx
CommitLineData
7fd59977 1#include <IFSelect_ContextModif.ixx>
2#include <IFSelect_Selection.hxx>
3#include <Message_Messenger.hxx>
4#include <Message.hxx>
5#include <Standard_NoSuchObject.hxx>
6
7
8//=======================================================================
9//function : IFSelect_ContextModif
10//purpose :
11//=======================================================================
12
13IFSelect_ContextModif::IFSelect_ContextModif(const Interface_Graph& graph,
14 const Interface_CopyTool& TC,
15 const Standard_CString filename)
16 : thegraf (graph,Standard_False) , thefile (filename) ,
17 thelist (graph.Size(),' ')
18{
19 themap = TC.Control(); thesel = Standard_False; thecurr = thecurt = 0;
20 Standard_Integer nb = thelist.Length();
21 Handle(Standard_Transient) newent;
22 for (Standard_Integer i = 1; i <= nb; i ++) {
23 if (themap->Search(graph.Entity(i),newent)) thelist.SetValue(i,'1');
24 }
25}
26
27
28//=======================================================================
29//function : IFSelect_ContextModif
30//purpose :
31//=======================================================================
32
33IFSelect_ContextModif::IFSelect_ContextModif(const Interface_Graph& graph,
34 const Standard_CString filename)
35 : thegraf (graph,Standard_False) , thefile (filename) ,
36 thelist (graph.Size(),' ')
37{
38 thesel = Standard_False; thecurr = thecurt = 0;
39 Standard_Integer nb = thelist.Length();
40 Handle(Standard_Transient) newent;
41 for (Standard_Integer i = 1; i <= nb; i ++) thelist.SetValue(i,'1');
42}
43
44
45//=======================================================================
46//function : Select
47//purpose :
48//=======================================================================
49
50void IFSelect_ContextModif::Select (Interface_EntityIterator& list)
51{
52 thesel = Standard_True;
53 Standard_Integer nb = thelist.Length();
54 for (Standard_Integer i = 1; i <= nb; i ++) thelist.SetValue(i,' ');
55 for (list.Start(); list.More(); list.Next()) {
56 Handle(Standard_Transient) start,newent;
57 start = list.Value();
58 Standard_Integer num = thegraf.EntityNumber(start);
59 if (num > nb || num < 0) num = 0;
60 if (themap.IsNull() && num > 0) thelist.SetValue(num,'1');
61 else if (themap->Search (start,newent)) {
62 if (num > 0) thelist.SetValue(num,'1');
63 }
64 }
65}
66
67
68//=======================================================================
69//function : OriginalGraph
70//purpose :
71//=======================================================================
72
73const Interface_Graph& IFSelect_ContextModif::OriginalGraph () const
74{
75 return thegraf;
76}
77
78
79//=======================================================================
80//function : OriginalModel
81//purpose :
82//=======================================================================
83
84Handle(Interface_InterfaceModel) IFSelect_ContextModif::OriginalModel() const
85{
86 return thegraf.Model();
87}
88
89
90//=======================================================================
91//function : SetProtocol
92//purpose :
93//=======================================================================
94
95void IFSelect_ContextModif::SetProtocol(const Handle(Interface_Protocol)& prot)
96{
97 theprot = prot;
98}
99
100
101//=======================================================================
102//function : Protocol
103//purpose :
104//=======================================================================
105
106Handle(Interface_Protocol) IFSelect_ContextModif::Protocol() const
107{
108 return theprot;
109}
110
111
112//=======================================================================
113//function : HasFileName
114//purpose :
115//=======================================================================
116
117Standard_Boolean IFSelect_ContextModif::HasFileName() const
118{
119 return (thefile.Length() > 0);
120}
121
122
123//=======================================================================
124//function : FileName
125//purpose :
126//=======================================================================
127
128Standard_CString IFSelect_ContextModif::FileName () const
129{
130 return thefile.ToCString();
131}
132
133
134//=======================================================================
135//function : Control
136//purpose :
137//=======================================================================
138
139Handle(Interface_CopyControl) IFSelect_ContextModif::Control () const
140{
141 return themap;
142}
143
144
145//=======================================================================
146//function : IsForNone
147//purpose :
148//=======================================================================
149
150Standard_Boolean IFSelect_ContextModif::IsForNone () const
151{
152 if (!thesel) return Standard_False;
153 Standard_Integer nb = thelist.Length();
154 for (Standard_Integer i = 1; i <= nb; i ++) {
155 if (thelist.Value(i) != ' ') return Standard_False;
156 }
157 return Standard_True;
158}
159
160
161//=======================================================================
162//function : IsForAll
163//purpose :
164//=======================================================================
165
166Standard_Boolean IFSelect_ContextModif::IsForAll () const
167{
168 return (!thesel);
169}
170
171
172//=======================================================================
173//function : IsTransferred
174//purpose :
175//=======================================================================
176
177Standard_Boolean IFSelect_ContextModif::IsTransferred
178 (const Handle(Standard_Transient)& ent) const
179{
180 if (themap.IsNull()) return Standard_True;
181 Handle(Standard_Transient) newent;
182 return themap->Search(ent,newent);
183}
184
185
186//=======================================================================
187//function : IsSelected
188//purpose :
189//=======================================================================
190
191Standard_Boolean IFSelect_ContextModif::IsSelected
192 (const Handle(Standard_Transient)& ent) const
193{
194 // Select a deja verifie "IsTransferred"
195 Standard_Integer num = thegraf.EntityNumber(ent);
196 if (num == 0) return Standard_False;
197 return (thelist.Value(num) != ' ');
198}
199
200
201//=======================================================================
202//function : SelectedOriginal
203//purpose :
204//=======================================================================
205
206Interface_EntityIterator IFSelect_ContextModif::SelectedOriginal () const
207{
208 Interface_EntityIterator list;
209 Standard_Integer nb = thelist.Length();
210 for (Standard_Integer i = 1; i <= nb; i ++) {
211 if (thelist.Value(i) != ' ') list.GetOneItem (thegraf.Entity(i));
212 }
213 return list;
214}
215
216
217//=======================================================================
218//function : SelectedResult
219//purpose :
220//=======================================================================
221
222Interface_EntityIterator IFSelect_ContextModif::SelectedResult () const
223{
224 Interface_EntityIterator list;
225 Standard_Integer nb = thelist.Length();
226 for (Standard_Integer i = 1; i <= nb; i ++) {
227 Handle(Standard_Transient) newent;
228 if (themap.IsNull()) newent = thegraf.Entity(i);
229 else if (thelist.Value(i) != ' ') themap->Search (thegraf.Entity(i),newent);
230 if (!newent.IsNull()) list.GetOneItem (newent);
231 }
232 return list;
233}
234
235
236//=======================================================================
237//function : SelectedCount
238//purpose :
239//=======================================================================
240
241Standard_Integer IFSelect_ContextModif::SelectedCount () const
242{
243 Standard_Integer nb = thelist.Length();
244 Standard_Integer ns = 0;
245 for (Standard_Integer i = 1; i <= nb; i ++)
246 { if (thelist.Value(i) != ' ') ns ++; }
247 return ns;
248}
249
250
251//=======================================================================
252//function : Start
253//purpose :
254//=======================================================================
255
256void IFSelect_ContextModif::Start ()
257{
258 thecurr = thecurt = 0;
259 Next();
260}
261
262
263//=======================================================================
264//function : More
265//purpose :
266//=======================================================================
267
268Standard_Boolean IFSelect_ContextModif::More () const
269{
270 return (thecurr > 0);
271}
272
273
274//=======================================================================
275//function : Next
276//purpose :
277//=======================================================================
278
279void IFSelect_ContextModif::Next()
280{
281 Standard_Integer nb = thelist.Length();
282// thecurr = thecurt;
283// if (thecurr <= 0 && thecurt >= 0) return;
284 for (Standard_Integer i = thecurr+1; i <= nb; i ++) {
285 if (thelist.Value(i) != ' ') { thecurr = i; thecurt ++; return; }
286 }
287 thecurr = thecurt = 0;
288}
289
290
291//=======================================================================
292//function : ValueOriginal
293//purpose :
294//=======================================================================
295
296Handle(Standard_Transient) IFSelect_ContextModif::ValueOriginal () const
297{
298 if (thecurr <= 0) Standard_NoSuchObject::Raise("IFSelect_ContextModif");
299 return thegraf.Entity(thecurr);
300}
301
302
303//=======================================================================
304//function : ValueResult
305//purpose :
306//=======================================================================
307
308Handle(Standard_Transient) IFSelect_ContextModif::ValueResult () const
309{
310 if (thecurr <= 0) Standard_NoSuchObject::Raise("IFSelect_ContextModif");
311 Handle(Standard_Transient) ent,newent;
312 ent = thegraf.Entity(thecurr);
313 if (themap.IsNull()) newent = ent;
314 else themap->Search(ent,newent);
315 return newent;
316}
317
318
319//=======================================================================
320//function : TraceModifier
321//purpose :
322//=======================================================================
323
324void IFSelect_ContextModif::TraceModifier
325 (const Handle(IFSelect_GeneralModifier)& modif)
326{
327 if (modif.IsNull()) return;
328
329 Handle(Message_Messenger) sout = Message::DefaultMessenger();
330 sout << "--- Run Modifier:" << endl;
331 Handle(IFSelect_Selection) sel = modif->Selection();
332 if (!sel.IsNull()) sout<<" Selection:"<<sel->Label();
333 else sout<<" (no Selection)";
334
335// on va simplement compter les entites
336 Standard_Integer ne = 0, nb = thelist.Length();
337 for (Standard_Integer i = 1; i <= nb; i ++) {
338 if (thelist.Value(i) != ' ') ne ++;
339 }
340 if (nb == ne) sout<<" All Model ("<<nb<<" Entities)"<<endl;
341 else sout<<" Entities,Total:"<<nb<<" Concerned:"<<ne<<endl;
342}
343
344
345//=======================================================================
346//function : Trace
347//purpose :
348//=======================================================================
349
350void IFSelect_ContextModif::Trace (const Standard_CString mess)
351{
352// Trace courante
353 if (thecurr <= 0) return;
354 Handle(Message_Messenger) sout = Message::DefaultMessenger();
355 if (ValueOriginal() == ValueResult())
356 sout<<"-- ContextModif. Entity n0 "<<thecurr<<endl;
357 else
358 sout<<"-- ContextModif. Entity in Original, n0 "<<thecurr<<" in Result, n0 "
359 <<thecurt<<endl;
360 if (mess[0] != '\0') sout<<"-- Message:"<<mess<<endl;
361}
362
363
364//=======================================================================
365//function : AddCheck
366//purpose :
367//=======================================================================
368
369void IFSelect_ContextModif::AddCheck(const Handle(Interface_Check)& check)
370{
371 if (check->NbFails() + check->NbWarnings() == 0) return;
372 const Handle(Standard_Transient)& ent = check->Entity();
373 Standard_Integer num = thegraf.EntityNumber(ent);
374 if (num == 0 && !ent.IsNull()) num = -1; // force enregistrement
375 thechek.Add(check,num);
376}
377
378
379//=======================================================================
380//function : AddWarning
381//purpose :
382//=======================================================================
383
384void IFSelect_ContextModif::AddWarning(const Handle(Standard_Transient)& start,
385 const Standard_CString mess,
386 const Standard_CString orig)
387{
388 thechek.CCheck(thegraf.EntityNumber(start))->AddWarning(mess,orig);
389}
390
391
392//=======================================================================
393//function : AddFail
394//purpose :
395//=======================================================================
396
397void IFSelect_ContextModif::AddFail(const Handle(Standard_Transient)& start,
398 const Standard_CString mess,
399 const Standard_CString orig)
400{
401 thechek.CCheck(thegraf.EntityNumber(start))->AddFail(mess,orig);
402}
403
404
405//=======================================================================
406//function : CCheck
407//purpose :
408//=======================================================================
409
410Handle(Interface_Check) IFSelect_ContextModif::CCheck(const Standard_Integer num)
411{
412 Handle(Interface_Check) ach = thechek.CCheck(num);
413 if (num > 0 && num <= thegraf.Size()) ach->SetEntity(thegraf.Entity(num));
414 return ach;
415}
416
417
418//=======================================================================
419//function : CCheck
420//purpose :
421//=======================================================================
422
423Handle(Interface_Check) IFSelect_ContextModif::CCheck
424 (const Handle(Standard_Transient)& ent)
425{
426 Standard_Integer num = thegraf.EntityNumber(ent);
427 if (num == 0) num = -1; // force l enregistrement
428 Handle(Interface_Check)& ach = thechek.CCheck(num);
429 ach->SetEntity(ent);
430 return ach;
431}
432
433
434//=======================================================================
435//function : CheckList
436//purpose :
437//=======================================================================
438
439Interface_CheckIterator IFSelect_ContextModif::CheckList () const
440{
441 return thechek;
442}