1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
3 // This file is part of Open CASCADE Technology software library.
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.
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
15 #include <Interface_Check.hxx>
16 #include <Interface_CheckIterator.hxx>
17 #include <Interface_InterfaceModel.hxx>
18 #include <Interface_Macros.hxx>
19 #include <Message_Messenger.hxx>
20 #include <Standard_ErrorHandler.hxx>
21 #include <Standard_Failure.hxx>
22 #include <Standard_Transient.hxx>
23 #include <Standard_Type.hxx>
24 #include <TopoDS_Shape.hxx>
25 #include <Transfer_ActorOfFinderProcess.hxx>
26 #include <Transfer_FinderProcess.hxx>
27 #include <Transfer_SimpleBinderOfTransient.hxx>
28 #include <Transfer_TransientMapper.hxx>
29 #include <XSControl_Controller.hxx>
30 #include <XSControl_TransferWriter.hxx>
31 #include <XSControl_Utils.hxx>
33 IMPLEMENT_STANDARD_RTTIEXT(XSControl_TransferWriter,Standard_Transient)
36 //=======================================================================
39 //=======================================================================
41 void XSControl_TransferWriter::Clear (const Standard_Integer mode)
43 if (mode < 0 || myTransferWriter.IsNull())
44 myTransferWriter = new Transfer_FinderProcess;
45 else myTransferWriter->Clear();
48 //=======================================================================
49 //function : PrintStats
51 //=======================================================================
53 void XSControl_TransferWriter::PrintStats (const Standard_Integer , const Standard_Integer ) const
55 Handle(Message_Messenger) sout = myTransferWriter->Messenger();
57 sout<<"\n*******************************************************************\n";
58 sout << "****** Statistics on Transfer (Write) ******"<<Message_EndLine;
59 sout<<"\n*******************************************************************\n";
60 sout << "****** Transfer Mode = "<<myTransferMode;
61 Standard_CString modehelp = myController->ModeWriteHelp (myTransferMode);
62 if (modehelp && modehelp[0] != 0) sout<<" I.E. "<<modehelp;
63 sout<<" ******"<<Message_EndLine;
67 // ########## LES ACTIONS ##########
69 //=======================================================================
70 //function : RecognizeTransient
72 //=======================================================================
74 Standard_Boolean XSControl_TransferWriter::RecognizeTransient (const Handle(Standard_Transient)& obj)
76 if (myController.IsNull()) return Standard_False;
78 TopoDS_Shape sh = xu.BinderShape (obj);
79 if (!sh.IsNull()) return RecognizeShape (sh);
80 return myController->RecognizeWriteTransient (obj,myTransferMode);
83 //=======================================================================
84 //function : TransferWriteTransient
86 //=======================================================================
88 IFSelect_ReturnStatus XSControl_TransferWriter::TransferWriteTransient
89 (const Handle(Interface_InterfaceModel)& model,
90 const Handle(Standard_Transient)& obj)
92 IFSelect_ReturnStatus status = IFSelect_RetVoid;
93 if (myController.IsNull()) return IFSelect_RetError;
94 if (model.IsNull()) return IFSelect_RetVoid;
96 if (myTransferWriter.IsNull()) myTransferWriter = new Transfer_FinderProcess;
97 Handle(Transfer_ActorOfFinderProcess) nulact;
98 myTransferWriter->SetActor (nulact);
99 Handle(Standard_Transient) resultat;
100 Handle(Message_Messenger) sout = myTransferWriter->Messenger();
103 PrintStats(myTransferMode);
104 sout << "****** Transferring Transient, CDL Type = ";
105 sout<<obj->DynamicType()->Name()<<" ******"<<Message_EndLine;
106 status = myController->TransferWriteTransient
107 (obj,myTransferWriter,model,myTransferMode);
109 catch(Standard_Failure const& anException) {
110 sout<<"**** **** TransferWriteShape, EXCEPTION : ";
111 sout<<anException.GetMessageString();
112 sout<<Message_EndLine;
113 status = IFSelect_RetFail;
118 //=======================================================================
119 //function : RecognizeShape
121 //=======================================================================
123 Standard_Boolean XSControl_TransferWriter::RecognizeShape (const TopoDS_Shape& shape)
125 if (myController.IsNull()) return Standard_False;
126 if (shape.IsNull()) return Standard_False;
127 return myController->RecognizeWriteShape (shape,myTransferMode);
130 //=======================================================================
131 //function : TransferWriteShape
133 //=======================================================================
135 IFSelect_ReturnStatus XSControl_TransferWriter::TransferWriteShape
136 (const Handle(Interface_InterfaceModel)& model,
137 const TopoDS_Shape& shape)
139 IFSelect_ReturnStatus status = IFSelect_RetVoid;
140 if (myController.IsNull()) return IFSelect_RetError;
141 if (model.IsNull()) return IFSelect_RetVoid;
143 if (myTransferWriter.IsNull()) myTransferWriter = new Transfer_FinderProcess;
144 // effacer l actor : Controller s en charge
145 Handle(Transfer_ActorOfFinderProcess) nulact;
146 myTransferWriter->SetActor (nulact);
147 Handle(Standard_Transient) resultat;
148 Handle(Message_Messenger) sout = myTransferWriter->Messenger();
151 PrintStats(myTransferMode);
152 sout << "****** Transferring Shape, ShapeType = " << shape.ShapeType();
153 sout<<" ******"<<Message_EndLine;
154 status = myController->TransferWriteShape
155 (shape,myTransferWriter,model,myTransferMode);
157 catch(Standard_Failure const& anException) {
158 sout<<"**** **** TransferWriteShape, EXCEPTION : ";
159 sout<<anException.GetMessageString();
160 sout<<Message_EndLine;
161 status = IFSelect_RetFail;
166 //=======================================================================
167 //function : CheckList
169 //=======================================================================
171 Interface_CheckIterator XSControl_TransferWriter::CheckList () const
173 Interface_CheckIterator chl;
174 if (myTransferWriter.IsNull()) return chl;
175 Standard_Integer i, nb = myTransferWriter->NbMapped();
176 for (i = 1; i <= nb; i ++) {
177 DeclareAndCast(Transfer_SimpleBinderOfTransient,tb,myTransferWriter->MapItem(i));
178 if (tb.IsNull()) continue;
179 Handle(Interface_Check) ach = tb->Check();
180 if (ach->NbFails() == 0 || ach->NbWarnings() == 0) continue;
181 DeclareAndCast(Transfer_TransientMapper,tm,myTransferWriter->Mapped(i));
182 if (tm.IsNull()) ach->GetEntity (myTransferWriter->Mapped(i));
183 else ach->GetEntity (tm->Value());
189 //=======================================================================
190 //function : ResultCheckList
192 //=======================================================================
194 Interface_CheckIterator XSControl_TransferWriter::ResultCheckList
195 (const Handle(Interface_InterfaceModel)& model) const
197 Interface_CheckIterator chl;
198 if (myTransferWriter.IsNull()) return chl;
199 Standard_Integer i, nb = myTransferWriter->NbMapped();
200 for (i = 1; i <= nb; i ++) {
201 DeclareAndCast(Transfer_SimpleBinderOfTransient,tb,myTransferWriter->MapItem(i));
202 if (tb.IsNull()) continue;
203 const Handle(Interface_Check) ach = tb->Check();
204 if (ach->NbFails() == 0 || ach->NbWarnings() == 0) continue;
205 Handle(Standard_Transient) ent = tb->Result();
206 if (!ent.IsNull() && !model.IsNull()) chl.Add(ach,model->Number(ent));