0031501: Foundation Classes, Message_Printer - remove theToPutEndl argument -- prepar...
[occt.git] / src / TransferBRep / TransferBRep_Reader.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 <BRep_Builder.hxx>
16 #include <Interface_CheckIterator.hxx>
17 #include <Interface_CheckTool.hxx>
18 #include <Interface_InterfaceModel.hxx>
19 #include <Interface_Macros.hxx>
20 #include <Interface_Protocol.hxx>
21 #include <Message_Messenger.hxx>
22 #include <Standard_OutOfRange.hxx>
23 #include <Standard_Transient.hxx>
24 #include <TopoDS_Compound.hxx>
25 #include <TopoDS_Shape.hxx>
26 #include <Transfer_ActorOfTransientProcess.hxx>
27 #include <Transfer_TransferOutput.hxx>
28 #include <Transfer_TransientProcess.hxx>
29 #include <TransferBRep.hxx>
30 #include <TransferBRep_Reader.hxx>
31
32 TransferBRep_Reader::TransferBRep_Reader ()
33     : theDone (Standard_False) , theFilest (0) , theNewpr (Standard_False)
34       {    theShapes = new TopTools_HSequenceOfShape();  theTransi = new TColStd_HSequenceOfTransient();  }
35
36     void  TransferBRep_Reader::SetProtocol
37   (const Handle(Interface_Protocol)& protocol)
38       {  theProto = protocol;  }
39
40     Handle(Interface_Protocol)  TransferBRep_Reader::Protocol () const
41       {  return theProto;  }
42
43     void  TransferBRep_Reader::SetActor
44   (const Handle(Transfer_ActorOfTransientProcess)& actor)
45       {  theActor = actor;  }
46
47     Handle(Transfer_ActorOfTransientProcess) TransferBRep_Reader::Actor () const
48       {  return theActor;  }
49
50     void  TransferBRep_Reader::SetFileStatus (const Standard_Integer status)
51       {  theFilest = status;  }
52
53     Standard_Integer  TransferBRep_Reader::FileStatus () const
54       { return theFilest;  }
55
56     Standard_Boolean  TransferBRep_Reader::FileNotFound () const
57       {  return (theFilest < 0);  }
58
59     Standard_Boolean  TransferBRep_Reader::SyntaxError () const
60       {  return (theFilest > 0);  }
61
62
63     void  TransferBRep_Reader::SetModel
64   (const Handle(Interface_InterfaceModel)& model)
65 {
66   theModel = model;
67   Clear();
68 }
69
70     Handle(Interface_InterfaceModel)  TransferBRep_Reader::Model () const
71       {  return theModel;  }
72
73
74     void  TransferBRep_Reader::Clear ()
75 {
76   theDone = Standard_False;
77   theShapes->Clear();  theTransi->Clear();
78 }
79
80     Standard_Boolean  TransferBRep_Reader::CheckStatusModel
81   (const Standard_Boolean withprint) const
82 {
83   Interface_CheckTool cht (theModel,theProto);
84   Interface_CheckIterator chl = cht.CompleteCheckList();
85   if (withprint
86   && !theProc.IsNull()
87   && !theProc->Messenger().IsNull())
88   {
89     Message_Messenger::StreamBuffer aBuffer = theProc->Messenger()->SendInfo();
90     chl.Print (aBuffer, theModel, Standard_False);
91   }
92   return chl.IsEmpty(Standard_True);
93 }
94
95     Interface_CheckIterator  TransferBRep_Reader::CheckListModel () const
96 {
97   Interface_CheckTool cht (theModel,theProto);
98   Interface_CheckIterator chl = cht.CompleteCheckList();
99   return chl;
100 }
101
102     Standard_Boolean&  TransferBRep_Reader::ModeNewTransfer ()
103       {  return theNewpr;  }
104
105     Standard_Boolean  TransferBRep_Reader::BeginTransfer ()
106 {
107   theDone = Standard_False;
108   if (theModel.IsNull()) return Standard_False;
109
110   if (theNewpr || theProc.IsNull())
111     theProc = new Transfer_TransientProcess (theModel->NbEntities());
112   else theProc->Clear();
113   theProc->SetErrorHandle(Standard_True);
114   theProc->SetModel (theModel);
115   PrepareTransfer();
116   theProc->SetActor (theActor);
117   return Standard_True;
118 }
119
120     void  TransferBRep_Reader::EndTransfer ()
121 {
122   theShapes->Append ( TransferBRep::Shapes (theProc,Standard_True) );
123   Standard_Integer i,nb = theProc->NbRoots();
124   for (i = 1; i <= nb; i ++) {
125     Handle(Standard_Transient) ent = theProc->Root(i);
126     Handle(Standard_Transient) res = theProc->FindTransient(ent);
127     if (!res.IsNull()) theTransi->Append (res);
128   }
129   theDone = Standard_True;
130 }
131
132
133     void  TransferBRep_Reader::PrepareTransfer ()    {  }
134
135     void  TransferBRep_Reader::TransferRoots ()
136 {
137   Clear();
138   if (!BeginTransfer()) return;
139   Transfer_TransferOutput TP (theProc,theModel);
140
141   TP.TransferRoots(theProto);
142   EndTransfer();
143 }
144
145     Standard_Boolean TransferBRep_Reader::Transfer (const Standard_Integer num)
146 {
147   if (!BeginTransfer()) return Standard_False;
148   if (num <= 0 || num > theModel->NbEntities()) return Standard_False;
149   Handle(Standard_Transient) ent = theModel->Value(num);
150   Transfer_TransferOutput TP (theProc,theModel);
151
152   if (theProc->TraceLevel() > 1) {
153     Message_Messenger::StreamBuffer sout = theProc->Messenger()->SendInfo();
154     sout<<"--  Transfer(Read) : ";  
155     theModel->Print (ent, sout);
156     sout<<std::endl;
157   }
158   TP.Transfer(ent);
159   theProc->SetRoot(ent);
160   EndTransfer();
161   return Standard_True;
162 }
163
164     void  TransferBRep_Reader::TransferList
165   (const Handle(TColStd_HSequenceOfTransient)& list)
166 {
167   if (!BeginTransfer()) return;
168   if (list.IsNull()) return;
169   Transfer_TransferOutput TP (theProc,theModel);
170   Standard_Integer i, nb = list->Length();
171   Message_Messenger::StreamBuffer sout = theProc->Messenger()->SendInfo();
172
173   if (theProc->TraceLevel() > 1) 
174     sout<<"--  Transfer(Read-List) : "<<nb<<" Items"<<std::endl;
175   for (i = 1; i <= nb; i ++) {
176     Handle(Standard_Transient) ent = list->Value(i);
177     if (theModel->Number(ent) == 0) continue;
178
179     if (theProc->TraceLevel() > 1) 
180     {
181       sout<<"--  Transfer(Read-List), Item "<<i<<" : ";
182       theModel->Print (ent, sout);
183       sout<<std::endl;
184     }
185     TP.Transfer(ent);
186     theProc->SetRoot(ent);
187   }
188   EndTransfer();
189 }
190
191     Standard_Boolean  TransferBRep_Reader::IsDone () const
192       {  return theDone;  }
193
194 //   ######    RESULTAT : SHAPES    ######
195
196     Standard_Integer  TransferBRep_Reader::NbShapes () const
197       {  return theShapes->Length();  }
198
199     Handle(TopTools_HSequenceOfShape)  TransferBRep_Reader::Shapes () const
200       {  return theShapes;  }
201
202     const TopoDS_Shape&  TransferBRep_Reader::Shape
203   (const Standard_Integer num) const
204       {  return theShapes->Value(num);  }
205
206     TopoDS_Shape  TransferBRep_Reader::OneShape () const
207 {
208   TopoDS_Shape res;
209   Standard_Integer nb = theShapes->Length();
210   if (nb == 0) return res;
211   else if (nb == 1) return theShapes->Value(1);
212   else {
213     TopoDS_Compound C;
214     BRep_Builder B;
215     B.MakeCompound(C);
216     for (Standard_Integer i = 1; i <= nb; i ++)  B.Add (C,theShapes->Value(i));
217     return C;
218   }
219 }
220
221     TopoDS_Shape  TransferBRep_Reader::ShapeResult
222   (const Handle(Standard_Transient)& ent) const
223       {  return TransferBRep::ShapeResult (theProc,ent);  }
224
225 //   ######    RESULTAT : TRANSIENTS    ######
226
227     Standard_Integer  TransferBRep_Reader::NbTransients () const
228       {  return theTransi->Length();  }
229
230     Handle(TColStd_HSequenceOfTransient)  TransferBRep_Reader::Transients () const
231       {  return theTransi;  }
232
233     Handle(Standard_Transient)  TransferBRep_Reader::Transient
234   (const Standard_Integer num) const
235       {  return theTransi->Value(num);  }
236
237
238 //   ######    CHECKS    ######
239
240     Standard_Boolean  TransferBRep_Reader::CheckStatusResult
241   (const Standard_Boolean withprint) const
242 {
243   Interface_CheckIterator chl;
244   if (!theProc.IsNull()) chl = theProc->CheckList(Standard_False);
245   if (withprint
246   && !theProc.IsNull()
247   && !theProc->Messenger().IsNull())
248   {
249     Message_Messenger::StreamBuffer aBuffer = theProc->Messenger()->SendInfo();
250     chl.Print (aBuffer, theModel, Standard_False);
251   }
252   return chl.IsEmpty(Standard_True);
253 }
254
255     Interface_CheckIterator  TransferBRep_Reader::CheckListResult () const
256 {
257   if (!theProc.IsNull()) return theProc->CheckList(Standard_False);
258   Interface_CheckIterator chbid;  return chbid;
259 }
260
261     Handle(Transfer_TransientProcess)  TransferBRep_Reader::TransientProcess
262   () const
263       {  return theProc;  }
264
265 TransferBRep_Reader::~TransferBRep_Reader()
266 {}
267