1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "GEOM_IOperations_i.hh"
25 #include "GEOM_Engine.hxx"
26 #include "GEOM_Gen_i.hh"
27 #include <SALOME_NamingService.hxx>
29 #include "utilities.h"
31 #include "Utils_ExceptHandlers.hxx"
33 #include <Standard_Stream.hxx>
34 #include <TCollection_AsciiString.hxx>
35 #include <TDF_Tool.hxx>
37 #include CORBA_SERVER_HEADER(SALOME_Session)
39 //=============================================================================
41 * default constructor:
43 //=============================================================================
45 GEOM_IOperations_i::GEOM_IOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, ::GEOM_IOperations* theImpl)
46 :SALOME::GenericObj_i( thePOA ), _impl(theImpl), _engine(theEngine)
50 //=============================================================================
54 //=============================================================================
56 GEOM_IOperations_i::~GEOM_IOperations_i()
60 //=============================================================================
64 //=============================================================================
65 CORBA::Boolean GEOM_IOperations_i::IsDone()
67 return _impl->IsDone();
71 //=============================================================================
75 //=============================================================================
76 void GEOM_IOperations_i::SetErrorCode(const char* theErrorCode)
78 _impl->SetErrorCode((char*)theErrorCode);
81 //=============================================================================
85 //=============================================================================
86 char* GEOM_IOperations_i::GetErrorCode()
88 return CORBA::string_dup(_impl->GetErrorCode());
91 //=============================================================================
95 //=============================================================================
96 void GEOM_IOperations_i::StartOperation()
98 _impl->StartOperation();
101 //=============================================================================
105 //=============================================================================
106 void GEOM_IOperations_i::FinishOperation()
108 _impl->FinishOperation();
112 //=============================================================================
116 //=============================================================================
117 void GEOM_IOperations_i::AbortOperation()
119 _impl->AbortOperation();
122 //=============================================================================
126 //=============================================================================
127 GEOM::GEOM_BaseObject_ptr
128 GEOM_IOperations_i::GetBaseObject(Handle(::GEOM_BaseObject) theObject)
130 GEOM::GEOM_BaseObject_var GO;
131 if (theObject.IsNull()) return GO._retn();
132 TCollection_AsciiString anEntry;
133 TDF_Tool::Entry(theObject->GetEntry(), anEntry);
134 GO = _engine->GetObject((char*) anEntry.ToCString());
138 //=============================================================================
142 //=============================================================================
143 Handle(::GEOM_BaseObject)
144 GEOM_IOperations_i::GetBaseObjectImpl(GEOM::GEOM_BaseObject_ptr theObject)
146 Handle(::GEOM_BaseObject) anImpl;
147 if (!CORBA::is_nil(theObject)) {
148 CORBA::String_var anEntry = theObject->GetEntry();
149 anImpl = GetImpl()->GetEngine()->GetObject( anEntry );
154 //=============================================================================
158 //=============================================================================
159 GEOM::GEOM_Object_ptr GEOM_IOperations_i::GetObject(Handle(::GEOM_Object) theObject)
161 return GEOM::GEOM_Object::_narrow( GetBaseObject( theObject ));
164 //=============================================================================
168 //=============================================================================
169 Handle(::GEOM_Object) GEOM_IOperations_i::GetObjectImpl(GEOM::GEOM_Object_ptr theObject)
171 return Handle(::GEOM_Object)::DownCast( GetBaseObjectImpl( theObject ));
174 //=============================================================================
176 * GetListOfObjectsImpl
178 //=============================================================================
179 Handle(TColStd_HSequenceOfTransient) GEOM_IOperations_i::GetListOfObjectsImpl
180 (const GEOM::ListOfGO& theObjects)
182 Handle(TColStd_HSequenceOfTransient) aResult =
183 new TColStd_HSequenceOfTransient;
186 int aNbObj = theObjects.length();
188 for (i = 0; i < aNbObj; i++) {
189 Handle(::GEOM_Object) anObj = GetObjectImpl(theObjects[i]);
191 if (anObj.IsNull()) {
196 aResult->Append(anObj);
202 //=======================================================================
203 //function : GetListOfObjectsImpl
205 //=======================================================================
207 bool GEOM_IOperations_i::GetListOfObjectsImpl(const GEOM::ListOfGO& theObjects,
208 std::list< Handle(::GEOM_Object) >& theList)
211 int aNbObj = theObjects.length();
213 for (i = 0; i < aNbObj; i++) {
214 Handle(::GEOM_Object) anObj = GetObjectImpl(theObjects[i]);
219 theList.push_back(anObj);
225 //=============================================================================
229 //=============================================================================
230 void GEOM_IOperations_i::UpdateGUIForObject(GEOM::GEOM_Object_ptr theObj)
232 if (!CORBA::is_nil (theObj)) {
233 // Cast _engine to GEOM_Gen_i type.
234 PortableServer::Servant aServant = myPOA->reference_to_servant(_engine.in());
235 GEOM_Gen_i *anEngine = dynamic_cast<GEOM_Gen_i *>(aServant);
238 SALOME_NamingService *aNameService = anEngine->GetNS();
239 CORBA::Object_var aSessionObj = aNameService->Resolve("/Kernel/Session");
240 SALOME::Session_var aSession = SALOME::Session::_narrow(aSessionObj);
242 if (!aSession->_is_nil())
244 std::string aMsg("GEOM/modified/");
245 CORBA::String_var anIOR = anEngine->GetORB()->object_to_string(theObj);
248 aSession->emitMessageOneWay(aMsg.c_str());
254 //=============================================================================
258 //=============================================================================
259 Handle(TColStd_HArray1OfExtendedString) GEOM_IOperations_i::ConvertStringArray
260 (const GEOM::string_array &theInArray)
262 Handle(TColStd_HArray1OfExtendedString) anOutArray;
263 const int n = theInArray.length();
270 anOutArray = new TColStd_HArray1OfExtendedString( 1, n );
272 for (i = 0; i < n; i++) {
273 anOutArray->SetValue(i + 1, TCollection_ExtendedString(theInArray[i].in()));