From 92bc8fb9a591de6facc2a9b65b2988fe1a0595e5 Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Tue, 23 Feb 2021 09:57:49 +0100 Subject: [PATCH] WIP --- src/SMESHGUI/CMakeLists.txt | 2 + src/SMESHGUI/SMESHGUI.cxx | 14 ++++-- src/SMESH_I/CMakeLists.txt | 3 ++ src/SMESH_I/SMESH_Component_Generator.cxx | 55 +++++++++++++++++++++++ src/SMESH_I/SMESH_Component_Generator.hxx | 28 ++++++++++++ src/SMESH_SWIG/SMeshHelper.cxx | 27 +++-------- 6 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 src/SMESH_I/SMESH_Component_Generator.cxx create mode 100644 src/SMESH_I/SMESH_Component_Generator.hxx diff --git a/src/SMESHGUI/CMakeLists.txt b/src/SMESHGUI/CMakeLists.txt index 5bd61d945..af116da9f 100644 --- a/src/SMESHGUI/CMakeLists.txt +++ b/src/SMESHGUI/CMakeLists.txt @@ -42,6 +42,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/Controls ${PROJECT_SOURCE_DIR}/src/SMESHClient ${PROJECT_SOURCE_DIR}/src/MEDWrapper + ${PROJECT_SOURCE_DIR}/src/SMESH_I ${PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}/idl ) @@ -73,6 +74,7 @@ SET(_link_LIBRARIES SMDS SMESHControls SMESHObject + SMESHEngine ) # --- headers --- diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index ff88035b1..e96570c1f 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -104,6 +104,7 @@ #include "SMESH_ControlsDef.hxx" #include "SMESH_ScalarBarActor.h" #include "SMESH_TypeFilter.hxx" +#include "SMESH_Component_Generator.hxx" // SALOME GUI includes #include @@ -2155,13 +2156,20 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil(); * */ //============================================================================= -SMESHGUI::SMESHGUI() : -SalomeApp_Module( "SMESH" ) +SMESHGUI::SMESHGUI() : SalomeApp_Module( "SMESH" ) { if ( CORBA::is_nil( myComponentSMESH ) ) { CORBA::Boolean anIsEmbeddedMode; - myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); + SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService(); + if( dynamic_cast(ns) ) + myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); + else + { + Engines::EngineComponent_var comp = RetrieveSMESHInstance(); + myComponentSMESH = SMESH::SMESH_Gen::_narrow(comp); + } + //MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode); // 0019923: EDF 765 SMESH : default values of hypothesis diff --git a/src/SMESH_I/CMakeLists.txt b/src/SMESH_I/CMakeLists.txt index cd73e1f09..9079fbf5a 100644 --- a/src/SMESH_I/CMakeLists.txt +++ b/src/SMESH_I/CMakeLists.txt @@ -31,6 +31,7 @@ INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/Controls ${PROJECT_SOURCE_DIR}/src/SMDS ${PROJECT_SOURCE_DIR}/src/SMESHDS + ${PROJECT_SOURCE_DIR}/src/SMESH_I ${PROJECT_SOURCE_DIR}/src/MEDWrapper ${PROJECT_SOURCE_DIR}/src/Driver ${PROJECT_SOURCE_DIR}/src/DriverMED @@ -111,6 +112,7 @@ SET(SMESHEngine_HEADERS SMESH_PreMeshInfo.hxx SMESH_MeshPartDS.hxx SMESH.hxx + SMESH_Component_Generator.hxx ) # --- sources --- @@ -138,6 +140,7 @@ SET(SMESHEngine_SOURCES SMESH_NoteBook.cxx SMESH_Measurements_i.cxx SMESH_PreMeshInfo.cxx + SMESH_Component_Generator.cxx ) # --- rules --- diff --git a/src/SMESH_I/SMESH_Component_Generator.cxx b/src/SMESH_I/SMESH_Component_Generator.cxx new file mode 100644 index 000000000..d4d6a747a --- /dev/null +++ b/src/SMESH_I/SMESH_Component_Generator.cxx @@ -0,0 +1,55 @@ +// Copyright (C) 2021 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SMESH_Component_Generator.hxx" + +#include "SMESH_Gen_No_Session_i.hxx" +#include "SALOME_Container_i.hxx" +#include "SALOME_KernelServices.hxx" + +#include + +static Engines::EngineComponent_var _unique_compo; + +Engines::EngineComponent_var RetrieveSMESHInstance() +{ + if (CORBA::is_nil(_unique_compo)) + { + CORBA::ORB_var orb; + { + int argc(0); + orb = CORBA::ORB_init(argc, nullptr); + } + CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); + PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); + PortableServer::POAManager_var pman = poa->the_POAManager(); + CORBA::PolicyList policies; + policies.length(0); + Engines_Container_i *cont(KERNEL::getContainerSA()); + PortableServer::ObjectId *conId(cont->getCORBAId()); + // + pman->activate(); + // + SMESH_Gen_No_Session_i *servant = new SMESH_Gen_No_Session_i(orb, poa, conId, "SMESH_inst_2", "SMESH"); + PortableServer::ObjectId *zeId = servant->getId(); + CORBA::Object_var zeRef = poa->id_to_reference(*zeId); + _unique_compo = Engines::EngineComponent::_narrow(zeRef); + } + return _unique_compo; +} diff --git a/src/SMESH_I/SMESH_Component_Generator.hxx b/src/SMESH_I/SMESH_Component_Generator.hxx new file mode 100644 index 000000000..afd48fff9 --- /dev/null +++ b/src/SMESH_I/SMESH_Component_Generator.hxx @@ -0,0 +1,28 @@ +// Copyright (C) 2021 CEA/DEN, EDF R&D, OPEN CASCADE +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#pragma once + +#include "SMESH.hxx" + +#include "SALOMEconfig.h" + +#include CORBA_SERVER_HEADER(SMESH_Gen) + +SMESH_I_EXPORT Engines::EngineComponent_var RetrieveSMESHInstance(); diff --git a/src/SMESH_SWIG/SMeshHelper.cxx b/src/SMESH_SWIG/SMeshHelper.cxx index 036ef2973..ee2d54b05 100644 --- a/src/SMESH_SWIG/SMeshHelper.cxx +++ b/src/SMESH_SWIG/SMeshHelper.cxx @@ -19,32 +19,15 @@ #include "SMeshHelper.h" -#include "SMESH_Gen_No_Session_i.hxx" -#include "SALOME_Container_i.hxx" #include "SALOME_KernelServices.hxx" +#include "SMESH_Component_Generator.hxx" + #include std::string BuildSMESHInstanceInternal() { - CORBA::ORB_var orb; - { int argc(0); orb = CORBA::ORB_init(argc,nullptr); } - CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); - PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); - PortableServer::POAManager_var pman = poa->the_POAManager(); - PortableServer::ObjectId_var conId; - // - { - char *argv[4] = {"Container","FactoryServer","SMESH",nullptr}; - Engines_Container_i *cont = new Engines_Container_i(orb,poa,"FactoryServer",2,argv,false,false); - conId = poa->activate_object(cont); - } - // - pman->activate(); - // - SMESH_Gen_No_Session_i *servant = new SMESH_Gen_No_Session_i(orb,poa,const_cast(&conId.in()),"SMESH_inst_2","SMESH"); - PortableServer::ObjectId *zeId = servant->getId(); - CORBA::Object_var zeRef = poa->id_to_reference(*zeId); - CORBA::String_var ior = orb->object_to_string(zeRef); - return std::string(ior.in()); + Engines::EngineComponent_var zeRef = RetrieveSMESHInstance(); + CORBA::String_var ior = KERNEL::getORB()->object_to_string(zeRef); + return std::string(ior.in()); } -- 2.39.2