0031501: Foundation Classes, Message_Printer - remove theToPutEndl argument -- prepar...
[occt.git] / src / IGESDraw / IGESDraw_ToolViewsVisible.cxx
1 // Created by: CKY / Contract Toubro-Larsen
2 // Copyright (c) 1993-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 //--------------------------------------------------------------------
17 //--------------------------------------------------------------------
18
19 #include <IGESData_DirChecker.hxx>
20 #include <IGESData_Dump.hxx>
21 #include <IGESData_HArray1OfIGESEntity.hxx>
22 #include <IGESData_IGESDumper.hxx>
23 #include <IGESData_IGESEntity.hxx>
24 #include <IGESData_IGESReaderData.hxx>
25 #include <IGESData_IGESWriter.hxx>
26 #include <IGESData_ParamCursor.hxx>
27 #include <IGESData_ParamReader.hxx>
28 #include <IGESData_ViewKindEntity.hxx>
29 #include <IGESDraw_HArray1OfViewKindEntity.hxx>
30 #include <IGESDraw_ToolViewsVisible.hxx>
31 #include <IGESDraw_ViewsVisible.hxx>
32 #include <Interface_Check.hxx>
33 #include <Interface_CopyTool.hxx>
34 #include <Interface_EntityIterator.hxx>
35 #include <Interface_Macros.hxx>
36 #include <Interface_ShareTool.hxx>
37 #include <Standard_DomainError.hxx>
38
39 #include <stdio.h>
40 IGESDraw_ToolViewsVisible::IGESDraw_ToolViewsVisible ()    {  }
41
42
43 void IGESDraw_ToolViewsVisible::ReadOwnParams
44   (const Handle(IGESDraw_ViewsVisible)& ent,
45    const Handle(IGESData_IGESReaderData)& IR, IGESData_ParamReader& PR) const
46 {
47   //Standard_Boolean st; //szv#4:S4163:12Mar99 not needed
48
49   Standard_Integer tempNbViewsVisible, tempNbDisplayedEntities;
50   Handle(IGESDraw_HArray1OfViewKindEntity) tempViewEntities;
51   Handle(IGESData_HArray1OfIGESEntity) tempDisplayEntity;
52
53   //st = PR.ReadInteger(PR.Current(), "Number Of Views Visible",
54                         //tempNbViewsVisible); //szv#4:S4163:12Mar99 moved in if
55   if (PR.ReadInteger(PR.Current(), "Number Of Views Visible", tempNbViewsVisible)) {
56     // Initialise HArray1 only if there is no error reading its Length
57     if (tempNbViewsVisible <= 0)
58       PR.AddFail("Number Of Views Visible : Not Positive");
59     else  tempViewEntities = new IGESDraw_HArray1OfViewKindEntity (1, tempNbViewsVisible);
60   }
61
62   if (PR.DefinedElseSkip())
63     PR.ReadInteger(PR.Current(), "Number of Entities Displayed",
64                    tempNbDisplayedEntities); //szv#4:S4163:12Mar99 `st=` not needed
65   else {
66     tempNbDisplayedEntities = 0;
67     PR.AddWarning("Number of Entities Displayed : undefined, set to Zero");
68   }
69   // Initialise HArray1 only if there is no error reading its Length
70   if      (tempNbDisplayedEntities < 0)
71     PR.AddFail ("Number Of Entities Displayed : Less than Zero");
72 //  else if (tempNbDisplayedEntities > 0) {
73
74   if (! tempViewEntities.IsNull()) {
75   // Read the HArray1 only if its Length was read without any Error
76     Standard_Integer I;
77     for (I = 1; I <= tempNbViewsVisible; I++) {
78       Handle(IGESData_ViewKindEntity) tempViewEntity1;
79       //st = PR.ReadEntity(IR, PR.Current(), "View Entity",
80                            //STANDARD_TYPE(IGESData_ViewKindEntity), tempViewEntity1); //szv#4:S4163:12Mar99 moved in if
81       if (PR.ReadEntity(IR, PR.Current(), "View Entity",
82                         STANDARD_TYPE(IGESData_ViewKindEntity), tempViewEntity1))
83         tempViewEntities->SetValue(I, tempViewEntity1);
84     }
85   }
86
87   // Read the HArray1 only if its Length was read without any Error
88   if      (tempNbDisplayedEntities > 0) {
89     PR.ReadEnts (IR,PR.CurrentList(tempNbDisplayedEntities),
90                  "Displayed Entities",tempDisplayEntity); //szv#4:S4163:12Mar99 `st=` not needed
91 /*
92     tempDisplayEntity =
93       new IGESData_HArray1OfIGESEntity (1, tempNbDisplayedEntities);
94
95     Handle(IGESData_IGESEntity) tempEntity2;
96     Standard_Integer I;
97     for (I = 1; I <= tempNbDisplayedEntities; I++) {
98       st = PR.ReadEntity(IR, PR.Current(), "Displayed Entity",
99                          tempEntity2);
100       if (st) tempDisplayEntity->SetValue(I, tempEntity2);
101     }
102 */
103   }
104
105   DirChecker(ent).CheckTypeAndForm(PR.CCheck(),ent);
106   ent->Init(tempViewEntities, tempDisplayEntity);
107 }
108
109 void IGESDraw_ToolViewsVisible::WriteOwnParams
110   (const Handle(IGESDraw_ViewsVisible)& ent, IGESData_IGESWriter& IW)  const
111 {
112   IW.Send(ent->NbViews());
113   IW.Send(ent->NbDisplayedEntities());
114
115   Standard_Integer I;
116   Standard_Integer up  = ent->NbViews();
117   for (I = 1; I <= up; I++)
118     IW.Send(ent->ViewItem(I));
119   up  = ent->NbDisplayedEntities();
120   for (I = 1; I <= up; I++)
121     IW.Send(ent->DisplayedEntity(I));
122 }
123
124 void  IGESDraw_ToolViewsVisible::OwnShared
125   (const Handle(IGESDraw_ViewsVisible)& ent, Interface_EntityIterator& iter) const
126 {
127   Standard_Integer I,up;
128   up  = ent->NbViews();
129   for (I = 1; I <= up; I++)
130     iter.GetOneItem(ent->ViewItem(I));
131 //  Displayed -> Implied
132 }
133
134 void  IGESDraw_ToolViewsVisible::OwnImplied
135   (const Handle(IGESDraw_ViewsVisible)& ent, Interface_EntityIterator& iter) const
136 {
137   Standard_Integer I,up;
138   up  = ent->NbDisplayedEntities();
139   for (I = 1; I <= up; I++)
140     iter.GetOneItem(ent->DisplayedEntity(I));
141 }
142
143
144 void IGESDraw_ToolViewsVisible::OwnCopy
145   (const Handle(IGESDraw_ViewsVisible)& another,
146    const Handle(IGESDraw_ViewsVisible)& ent, Interface_CopyTool& TC) const
147 {
148   Handle(IGESDraw_HArray1OfViewKindEntity) tempViewEntities =
149     new IGESDraw_HArray1OfViewKindEntity(1, another->NbViews());
150   Standard_Integer I, up;
151   up  = another->NbViews();
152   for (I = 1; I <= up; I++) {
153     DeclareAndCast(IGESData_ViewKindEntity, tempView,
154                    TC.Transferred(another->ViewItem(I)));
155     tempViewEntities->SetValue(I, tempView);
156   }
157 //  Displayed -> Implied : mettre une liste vide par defaut
158   Handle(IGESData_HArray1OfIGESEntity) tempDisplayEntities;
159   ent->Init(tempViewEntities, tempDisplayEntities);
160 }
161
162 void IGESDraw_ToolViewsVisible::OwnRenew
163   (const Handle(IGESDraw_ViewsVisible)& another,
164    const Handle(IGESDraw_ViewsVisible)& ent, const Interface_CopyTool& TC) const
165 {
166   Interface_EntityIterator newdisp;
167   Standard_Integer I, up;
168   up  = another->NbDisplayedEntities();
169   if (up == 0) return;
170   Handle(IGESData_HArray1OfIGESEntity) tempDisplayEntities;
171   Handle(Standard_Transient) anew;
172   for (I = 1; I <= up; I++) {
173     if (TC.Search (another->DisplayedEntity(I),anew)) newdisp.GetOneItem(anew);
174   }
175
176   up = newdisp.NbEntities();  I = 0;
177   if (up > 0) tempDisplayEntities = new IGESData_HArray1OfIGESEntity(1,up);
178   for (newdisp.Start(); newdisp.More(); newdisp.Next()) {
179     I ++;
180     DeclareAndCast(IGESData_IGESEntity, tempEntity,newdisp.Value());
181     tempDisplayEntities->SetValue(I, tempEntity);
182   }
183   ent->InitImplied (tempDisplayEntities);
184 }
185
186
187 IGESData_DirChecker IGESDraw_ToolViewsVisible::DirChecker
188   (const Handle(IGESDraw_ViewsVisible)& /*ent*/)  const
189 {
190   IGESData_DirChecker DC(402, 3);
191   DC.Structure(IGESData_DefVoid);
192   DC.LineFont(IGESData_DefVoid);
193   DC.LineWeight(IGESData_DefVoid);
194   DC.Color(IGESData_DefVoid);
195   DC.BlankStatusIgnored();
196   DC.SubordinateStatusRequired(0);
197   DC.UseFlagRequired(1);
198   DC.HierarchyStatusIgnored();
199
200   return DC;
201 }
202
203 void IGESDraw_ToolViewsVisible::OwnCheck
204   (const Handle(IGESDraw_ViewsVisible)& ent,
205    const Interface_ShareTool& , Handle(Interface_Check)& ach)  const
206 {
207   Standard_Integer res = 0;
208   Standard_Integer nb = ent->NbDisplayedEntities();
209   Handle(IGESData_ViewKindEntity) entcomp (ent);
210   for (Standard_Integer i = 1; i <= nb; i ++) {
211     Handle(IGESData_IGESEntity) displayed = ent->DisplayedEntity(i);
212     if (entcomp != displayed->View()) res ++;
213   }
214   if (!res) return;
215   char mess[80];
216   sprintf(mess,"Mismatch for %d Entities displayed",res);
217   ach->AddFail(mess,"Mismatch for %d Entities displayed");
218 }
219
220 void  IGESDraw_ToolViewsVisible::OwnWhenDelete
221   (const Handle(IGESDraw_ViewsVisible)& ent) const
222 {
223   Handle(IGESData_HArray1OfIGESEntity) tempDisplayEntities;
224   ent->InitImplied (tempDisplayEntities);
225 }
226
227 void IGESDraw_ToolViewsVisible::OwnDump
228   (const Handle(IGESDraw_ViewsVisible)& ent, const IGESData_IGESDumper& dumper,
229    Standard_OStream& S, const Standard_Integer level)  const
230 {
231   S << "IGESDraw_ViewsVisible\n"
232     << "Views Visible : ";
233   IGESData_DumpEntities(S,dumper ,level,1, ent->NbViews(),ent->ViewItem);
234   S << "\n"
235     << "Entities Displayed : ";
236   IGESData_DumpEntities(S,dumper ,level,1, ent->NbDisplayedEntities(),ent->DisplayedEntity);
237   S << std::endl;
238 }
239
240 Standard_Boolean  IGESDraw_ToolViewsVisible::OwnCorrect
241   (const Handle(IGESDraw_ViewsVisible)& ent) const
242 {
243 //  Les entites affichees doivent referencer <ent>. Elles ont priorite.
244   Standard_Boolean res = Standard_False;
245   Standard_Integer nb = ent->NbDisplayedEntities();
246   Handle(IGESData_ViewKindEntity) entcomp (ent);
247   for (Standard_Integer i = 1; i <= nb; i ++) {
248     Handle(IGESData_IGESEntity) displayed = ent->DisplayedEntity(i);
249     if (entcomp != displayed->View()) res = Standard_True;
250   }
251   if (!res) return res;
252   Handle(IGESData_HArray1OfIGESEntity) nulDisplayEntities;
253   ent->InitImplied (nulDisplayEntities);
254   return res;
255 }