0024788: Foundation Classes - remove Dico_Dictionary
[occt.git] / src / IGESSelect / IGESSelect_CounterOfLevelNumber.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14
15 #include <IGESData_IGESEntity.hxx>
16 #include <IGESGraph_DefinitionLevel.hxx>
17 #include <IGESSelect_CounterOfLevelNumber.hxx>
18 #include <Interface_InterfaceModel.hxx>
19 #include <Interface_Macros.hxx>
20 #include <Message_Messenger.hxx>
21 #include <Standard_Transient.hxx>
22 #include <Standard_Type.hxx>
23 #include <TCollection_HAsciiString.hxx>
24
25 #include <stdio.h>
26 IMPLEMENT_STANDARD_RTTIEXT(IGESSelect_CounterOfLevelNumber,IFSelect_SignCounter)
27
28 IGESSelect_CounterOfLevelNumber::IGESSelect_CounterOfLevelNumber
29   (const Standard_Boolean withmap, const Standard_Boolean withlist)
30     : IFSelect_SignCounter (withmap,withlist)
31       {  thehigh = thenblists = 0;  SetName("IGES Level Number");  }
32
33     void  IGESSelect_CounterOfLevelNumber::Clear ()
34       {  IFSelect_SignCounter::Clear();
35          thelevels.Nullify();  thehigh = thenblists = 0;  }
36
37
38     void  IGESSelect_CounterOfLevelNumber::AddSign
39   (const Handle(Standard_Transient)& ent,
40    const Handle(Interface_InterfaceModel)& /*model*/)
41 {
42   DeclareAndCast(IGESData_IGESEntity,igesent,ent);
43   if (igesent.IsNull()) return;
44   DeclareAndCast(IGESGraph_DefinitionLevel,levelist,igesent->LevelList());
45   Standard_Integer level = igesent->Level();
46   if (levelist.IsNull() && level < 0) return;
47
48 //  Enregistrer ce/ces niveau(x)
49   if (levelist.IsNull()) AddLevel(ent,level);
50   else {
51     Standard_Integer nb = levelist->NbPropertyValues();
52     for (Standard_Integer i = 1; i <= nb; i ++) {
53       level = levelist->LevelNumber(i);
54       AddLevel(ent,level);
55     }
56     AddLevel(ent,-1);
57   }
58 }
59
60
61     void  IGESSelect_CounterOfLevelNumber::AddLevel
62   (const Handle(Standard_Transient)& ent, const Standard_Integer level)
63 {
64   if (level < 0) {
65     thenblists ++;
66     Add (ent,"LEVEL LIST");
67     return;
68   }
69   if (thelevels.IsNull()) { thelevels =
70     new TColStd_HArray1OfInteger ( 0, (level > 100 ? level : 100) );
71                             thelevels->Init(0); }
72   Standard_Integer upper = thelevels->Upper();
73   if (level > upper) {
74     Handle(TColStd_HArray1OfInteger) levels =
75       new TColStd_HArray1OfInteger (0,level + 100);  levels->Init(0);
76     for (Standard_Integer i = 1; i <= upper; i ++)
77       levels->SetValue(i,thelevels->Value(i));
78     thelevels = levels;
79   }
80   thelevels->SetValue (level,thelevels->Value(level)+1);
81   if (level > thehigh) thehigh = level;
82
83 //  if (level == 0) Add(ent," NO LEVEL");
84 //  else {
85     char signature[30];
86     sprintf (signature,"%7d",level);
87     Add (ent,signature);
88 //  }
89 }
90
91
92     Standard_Integer  IGESSelect_CounterOfLevelNumber::HighestLevel () const
93       {  return thehigh;  }
94
95     Standard_Integer  IGESSelect_CounterOfLevelNumber::NbTimesLevel
96   (const Standard_Integer level) const
97 {
98   if (level < 0) return thenblists;
99   if (level > thehigh) return 0;
100   return thelevels->Value(level);
101 }
102
103
104     Handle(TColStd_HSequenceOfInteger)  IGESSelect_CounterOfLevelNumber::Levels
105   () const
106 {
107   Handle(TColStd_HSequenceOfInteger) list = new TColStd_HSequenceOfInteger ();
108   for (Standard_Integer i = 1; i <= thehigh; i ++) {
109     if (thelevels->Value(i) > 0) list->Append(i);
110   }
111   return list;
112 }
113
114
115     Handle(TCollection_HAsciiString)  IGESSelect_CounterOfLevelNumber::Sign
116   (const Handle(Standard_Transient)& ent,
117    const Handle(Interface_InterfaceModel)& /*model*/) const
118 {
119   Handle(TCollection_HAsciiString) res;
120 //  reprend les termes de AddSign pour la preparation (lecture du level) ...
121   DeclareAndCast(IGESData_IGESEntity,igesent,ent);
122   if (igesent.IsNull()) return res;
123   DeclareAndCast(IGESGraph_DefinitionLevel,levelist,igesent->LevelList());
124   Standard_Integer level = igesent->Level();
125   if (levelist.IsNull() && level < 0) return res;
126
127 //  puis ceux de AddLevel pour calculer la signature
128   if (level < 0) return new TCollection_HAsciiString ("LEVEL LIST");
129   char signature[30];
130   sprintf (signature,"%7d",level);
131   return new TCollection_HAsciiString (signature);
132 }
133
134
135     void  IGESSelect_CounterOfLevelNumber::PrintCount
136   (const Handle(Message_Messenger)& S) const
137 {
138   IFSelect_SignatureList::PrintCount(S);
139   S<<" Highest value : " << thehigh << endl;
140   if (thenblists > 0) S<<"REMARK for LEVEL LIST : Entities are counted in"
141     <<" <LEVEL LIST>\n, and in each Level value of their list"<<endl;
142 }