Salome HOME
Replace deprecated WNT macro definition by WIN32.
[modules/geom.git] / src / GEOM_I / GEOM_BaseObject_i.cc
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #include "GEOM_BaseObject_i.hh"
24
25 #include "GEOMImpl_Types.hxx"
26 #include "GEOM_BaseDriver.hxx"
27
28 #include <utilities.h>
29 //#include <OpUtil.hxx>
30 //#include <Utils_ExceptHandlers.hxx>
31
32 #include <TCollection_AsciiString.hxx>
33 #include <TDF_Label.hxx>
34 #include <TDF_Tool.hxx>
35 #include <Standard_ErrorHandler.hxx>
36 #include <Standard_Failure.hxx>
37
38 #ifdef _DEBUG_
39 #include <typeinfo>
40 #endif
41
42 #ifdef WIN32
43 #pragma warning( disable:4786 )
44 #endif
45
46 //=============================================================================
47 /*!
48  *   constructor:
49  */
50 //=============================================================================
51
52 GEOM_BaseObject_i::GEOM_BaseObject_i (PortableServer::POA_ptr thePOA,
53                                       GEOM::GEOM_Gen_ptr      theEngine,
54                                       Handle(GEOM_BaseObject) theImpl)
55   : SALOME::GenericObj_i( thePOA ), _engine(theEngine), _impl(theImpl)
56 {
57 }
58
59 //=============================================================================
60 /*!
61  *  destructor
62  */
63 //=============================================================================
64
65 GEOM_BaseObject_i::~GEOM_BaseObject_i()
66 {
67   MESSAGE("GEOM_BaseObject_i::~GEOM_BaseObject_i");
68   GEOM_Engine::GetEngine()->RemoveObject(_impl);
69 }
70
71 //=============================================================================
72 /*!
73  *  GetEntry
74  */
75 //=============================================================================
76
77 char* GEOM_BaseObject_i::GetEntry()
78 {
79   const TDF_Label& aLabel = _impl->GetEntry();
80   TCollection_AsciiString anEntry;
81   TDF_Tool::Entry(aLabel, anEntry);
82   const char* anEntstr = anEntry.ToCString();
83   return CORBA::string_dup(anEntstr);
84 }
85
86 //=============================================================================
87 /*!
88  *  GetStudyID
89  */
90 //=============================================================================
91
92 CORBA::Long GEOM_BaseObject_i::GetStudyID()
93 {
94    return _impl->GetDocID();
95 }
96
97 //=============================================================================
98 /*!
99  *  GetType
100  */
101 //=============================================================================
102
103 CORBA::Long GEOM_BaseObject_i::GetType()
104 {
105   return _impl->GetType();
106 }
107
108 //=============================================================================
109 /*!
110  *  SetName
111  */
112 //=============================================================================
113 void GEOM_BaseObject_i::SetName(const char* theName)
114 {
115   _impl->SetName(theName);
116 }
117
118 //=============================================================================
119 /*!
120  *  GetName
121  */
122 //=============================================================================
123
124 char* GEOM_BaseObject_i::GetName()
125 {
126   TCollection_AsciiString aName = _impl->GetName();
127   return CORBA::string_dup( aName.ToCString() );
128 }
129
130 //=============================================================================
131 /*!
132  *  SetStudyEntry
133  */
134 //=============================================================================
135
136 void GEOM_BaseObject_i::SetStudyEntry(const char* theEntry)
137 {
138   _impl->SetAuxData(theEntry);
139 }
140
141 //=============================================================================
142 /*!
143  *  GetStudyEntry
144  */
145 //=============================================================================
146
147 char* GEOM_BaseObject_i::GetStudyEntry()
148 {
149   TCollection_AsciiString anEntry = _impl->GetAuxData();
150   return CORBA::string_dup(anEntry.ToCString());
151 }
152
153 //=============================================================================
154 /*!
155  *  GetDependency
156  */
157 //=============================================================================
158 GEOM::ListOfGBO* GEOM_BaseObject_i::GetDependency()
159 {
160   GEOM::ListOfGBO_var aList = new GEOM::ListOfGBO();
161   aList->length(0);
162
163   Handle(TColStd_HSequenceOfTransient) aSeq = _impl->GetAllDependency();
164   if (aSeq.IsNull()) return aList._retn();
165   int aLength = aSeq->Length();
166   if (aLength == 0) return aList._retn();
167
168   aList->length(aLength);
169
170   TCollection_AsciiString anEntry;
171
172   for (int i = 1; i<=aLength; i++) {
173     Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
174     if (anObj.IsNull()) continue;
175     TDF_Tool::Entry(anObj->GetEntry(), anEntry);
176     GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(), (char*) anEntry.ToCString());
177     aList[i-1] = obj;
178   }
179
180   return aList._retn();
181 }
182
183 //=============================================================================
184 /*!
185  * GetLastDependency
186  */
187 //=============================================================================
188 GEOM::ListOfGBO* GEOM_BaseObject_i::GetLastDependency()
189 {
190   GEOM::ListOfGBO_var aList = new GEOM::ListOfGBO();
191   aList->length(0);
192
193   Handle(TColStd_HSequenceOfTransient) aSeq = _impl->GetLastDependency();
194   if (aSeq.IsNull()) return aList._retn();
195   int aLength = aSeq->Length();
196   if (aLength == 0) return aList._retn();
197
198   aList->length(aLength);
199
200   TCollection_AsciiString anEntry;
201
202   for (int i = 1; i<=aLength; i++) {
203      Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
204      if (anObj.IsNull()) continue;
205      GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(),
206                                                         anObj->GetEntryString().ToCString());
207      aList[i-1] = GEOM::GEOM_BaseObject::_duplicate( obj );
208   }
209
210   return aList._retn();
211 }
212
213 //================================================================================
214 /*!
215  * \brief 
216  */
217 //================================================================================
218
219 bool GEOM_BaseObject_i::IsSame(GEOM::GEOM_BaseObject_ptr other)
220 {
221   if ( CORBA::is_nil( other ))
222     return false;
223
224   PortableServer::Servant aServant = myPOA->reference_to_servant( other );
225   GEOM_BaseObject_i * other_i = dynamic_cast<GEOM_BaseObject_i*>(aServant);
226   if ( !other_i )
227     return false;
228
229   return _impl->GetEntry() == other_i->_impl->GetEntry();
230 }
231
232 //================================================================================
233 /*!
234  * \brief 
235  */
236 //================================================================================
237
238 void GEOM_BaseObject_i::SetParameters(const char* theParameters)
239 {
240   _impl->SetParameters((char*)theParameters);
241 }
242
243 //================================================================================
244 /*!
245  * \brief 
246  */
247 //================================================================================
248
249 char* GEOM_BaseObject_i::GetParameters()
250 {
251   return CORBA::string_dup(_impl->GetParameters().ToCString());
252 }
253
254 //================================================================================
255 /*!
256  * \brief 
257  */
258 //================================================================================
259
260 GEOM::CreationInformation* GEOM_BaseObject_i::GetCreationInformation()
261 {
262   GEOM::CreationInformation_var info = new GEOM::CreationInformation;
263
264   Handle(GEOM_BaseDriver) driver =
265     Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver() );
266   if ( !driver.IsNull() )
267   {
268     std::vector<GEOM_Param> params;
269     std::string             operationName;
270     try
271     {
272       OCC_CATCH_SIGNALS;
273       if ( driver->GetCreationInformation( operationName, params ))
274       {
275         info->operationName = operationName.c_str();
276         info->params.length( params.size() );
277         for ( size_t i = 0; i < params.size(); ++i )
278         {
279           info->params[i].name  = params[i].name.c_str();
280           info->params[i].value = params[i].value.c_str();
281         }
282       }
283 #ifdef _DEBUG_
284       if ( operationName.empty() )
285       {
286         cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl
287              << "  Consider implementing "
288              <<    typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl
289              << "  for the case of operation which has created '" << GetName() << "' object" << endl
290              << "PLEEEEEEEASE" << endl
291              << "\tPLEEEEEEEASE" << endl
292              << "\t\tPLEEEEEEEASE" << endl
293              << "\t\t\tPLEEEEEEEASE" << endl
294              << "\t\t\t\tPLEEEEEEEASE" << endl;
295       }
296 #endif
297     }
298     catch(...)
299     {
300 #ifdef _DEBUG_
301       cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl;
302 #endif
303     }
304   }
305   return info._retn();
306 }