]> SALOME platform Git repositories - modules/geom.git/blob - src/GEOM_I/GEOM_BaseObject_i.cc
Salome HOME
5e77c3a45bc2a042bda6ba73aea74ee8011caeba
[modules/geom.git] / src / GEOM_I / GEOM_BaseObject_i.cc
1 // Copyright (C) 2007-2015  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, or (at your option) any later version.
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  *  GetTick
111  */
112 //=============================================================================
113
114 CORBA::Long GEOM_BaseObject_i::GetTick()
115 {
116   return _impl->GetTic();
117 }
118
119 //=============================================================================
120 /*!
121  *  SetName
122  */
123 //=============================================================================
124 void GEOM_BaseObject_i::SetName(const char* theName)
125 {
126   _impl->SetName(theName);
127 }
128
129 //=============================================================================
130 /*!
131  *  GetName
132  */
133 //=============================================================================
134
135 char* GEOM_BaseObject_i::GetName()
136 {
137   TCollection_AsciiString aName = _impl->GetName();
138   return CORBA::string_dup( aName.ToCString() );
139 }
140
141 //=============================================================================
142 /*!
143  *  SetStudyEntry
144  */
145 //=============================================================================
146
147 void GEOM_BaseObject_i::SetStudyEntry(const char* theEntry)
148 {
149   _impl->SetAuxData(theEntry);
150 }
151
152 //=============================================================================
153 /*!
154  *  GetStudyEntry
155  */
156 //=============================================================================
157
158 char* GEOM_BaseObject_i::GetStudyEntry()
159 {
160   TCollection_AsciiString anEntry = _impl->GetAuxData();
161   return CORBA::string_dup(anEntry.ToCString());
162 }
163
164 //=============================================================================
165 /*!
166  *  GetDependency
167  */
168 //=============================================================================
169 GEOM::ListOfGBO* GEOM_BaseObject_i::GetDependency()
170 {
171   GEOM::ListOfGBO_var aList = new GEOM::ListOfGBO();
172   aList->length(0);
173
174   Handle(TColStd_HSequenceOfTransient) aSeq = _impl->GetAllDependency();
175   if (aSeq.IsNull()) return aList._retn();
176   int aLength = aSeq->Length();
177   if (aLength == 0) return aList._retn();
178
179   aList->length(aLength);
180
181   TCollection_AsciiString anEntry;
182
183   for (int i = 1; i<=aLength; i++) {
184     Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
185     if (anObj.IsNull()) continue;
186     TDF_Tool::Entry(anObj->GetEntry(), anEntry);
187     GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(), (char*) anEntry.ToCString());
188     aList[i-1] = obj;
189   }
190
191   return aList._retn();
192 }
193
194 //=============================================================================
195 /*!
196  * GetLastDependency
197  */
198 //=============================================================================
199 GEOM::ListOfGBO* GEOM_BaseObject_i::GetLastDependency()
200 {
201   GEOM::ListOfGBO_var aList = new GEOM::ListOfGBO();
202   aList->length(0);
203
204   Handle(TColStd_HSequenceOfTransient) aSeq = _impl->GetLastDependency();
205   if (aSeq.IsNull()) return aList._retn();
206   int aLength = aSeq->Length();
207   if (aLength == 0) return aList._retn();
208
209   aList->length(aLength);
210
211   TCollection_AsciiString anEntry;
212
213   for (int i = 1; i<=aLength; i++) {
214      Handle(GEOM_BaseObject) anObj = Handle(GEOM_BaseObject)::DownCast(aSeq->Value(i));
215      if (anObj.IsNull()) continue;
216      GEOM::GEOM_BaseObject_var obj = _engine->GetObject(anObj->GetDocID(),
217                                                         anObj->GetEntryString().ToCString());
218      aList[i-1] = GEOM::GEOM_BaseObject::_duplicate( obj );
219   }
220
221   return aList._retn();
222 }
223
224 //================================================================================
225 /*!
226  * \brief 
227  */
228 //================================================================================
229
230 bool GEOM_BaseObject_i::IsSame(GEOM::GEOM_BaseObject_ptr other)
231 {
232   if ( CORBA::is_nil( other ))
233     return false;
234
235   PortableServer::Servant aServant = myPOA->reference_to_servant( other );
236   GEOM_BaseObject_i * other_i = dynamic_cast<GEOM_BaseObject_i*>(aServant);
237   if ( !other_i )
238     return false;
239
240   return _impl->GetEntry() == other_i->_impl->GetEntry();
241 }
242
243 //================================================================================
244 /*!
245  * \brief 
246  */
247 //================================================================================
248
249 void GEOM_BaseObject_i::SetParameters(const char* theParameters)
250 {
251   _impl->SetParameters((char*)theParameters);
252 }
253
254 //================================================================================
255 /*!
256  * \brief 
257  */
258 //================================================================================
259
260 char* GEOM_BaseObject_i::GetParameters()
261 {
262   return CORBA::string_dup(_impl->GetParameters().ToCString());
263 }
264
265 //================================================================================
266 /*!
267  * \brief 
268  */
269 //================================================================================
270
271 GEOM::CreationInformation* GEOM_BaseObject_i::GetCreationInformation()
272 {
273   GEOM::CreationInformation_var info = new GEOM::CreationInformation;
274
275   Handle(GEOM_BaseDriver) driver =
276     Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver() );
277   if ( !driver.IsNull() )
278   {
279     std::vector<GEOM_Param> params;
280     std::string             operationName;
281     try
282     {
283       OCC_CATCH_SIGNALS;
284       if ( driver->GetCreationInformation( operationName, params ))
285       {
286         info->operationName = operationName.c_str();
287         info->params.length( params.size() );
288         for ( size_t i = 0; i < params.size(); ++i )
289         {
290           info->params[i].name  = params[i].name.c_str();
291           info->params[i].value = params[i].value.c_str();
292         }
293       }
294 #ifdef _DEBUG_
295       if ( operationName.empty() )
296       {
297         cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl
298              << "  Consider implementing "
299              <<    typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl
300              << "  for the case of operation which has created '" << GetName() << "' object" << endl
301              << "PLEEEEEEEASE" << endl
302              << "\tPLEEEEEEEASE" << endl
303              << "\t\tPLEEEEEEEASE" << endl
304              << "\t\t\tPLEEEEEEEASE" << endl
305              << "\t\t\t\tPLEEEEEEEASE" << endl;
306       }
307 #endif
308     }
309     catch(...)
310     {
311 #ifdef _DEBUG_
312       cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl;
313 #endif
314     }
315   }
316   return info._retn();
317 }