From 4799ad78b84d0c098f28bfda06bcff47f5ca2820 Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Thu, 20 Feb 2020 15:05:03 +0100 Subject: [PATCH] Update C++ client + example. --- examples/CMakeLists.txt | 2 ++ examples/basic-scene.cc | 4 ++-- examples/display-urdf.cc | 9 ++------ include/gepetto/viewer/corba/client.hh | 5 ++++- src/CMakeLists.txt | 2 +- src/client.cc | 31 +++++++++++++++++++++----- 6 files changed, 37 insertions(+), 16 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c69b163..27a44a9 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -20,7 +20,9 @@ SET(LIBRARY_NAME ${PROJECT_NAME}) ADD_EXECUTABLE (basic-scene basic-scene.cc) TARGET_LINK_LIBRARIES(basic-scene ${LIBRARY_NAME}) PKG_CONFIG_USE_DEPENDENCY(basic-scene gepetto-viewer) +PKG_CONFIG_USE_DEPENDENCY(basic-scene omniORB4) ADD_EXECUTABLE (display-urdf display-urdf.cc) TARGET_LINK_LIBRARIES(display-urdf ${LIBRARY_NAME}) PKG_CONFIG_USE_DEPENDENCY(display-urdf gepetto-viewer) +PKG_CONFIG_USE_DEPENDENCY(display-urdf omniORB4) diff --git a/examples/basic-scene.cc b/examples/basic-scene.cc index fc51159..0ab1e77 100644 --- a/examples/basic-scene.cc +++ b/examples/basic-scene.cc @@ -10,8 +10,8 @@ int main(int, const char **) { - graphics::corbaServer::Client client (0, NULL); - client.connect (); + gepetto::viewer::corba::Client client (0, NULL); + client.connect ("corbaloc:iiop:localhost:12321"); float white[4] = {1.,1.,1.,1.}; client.gui()->createWindow("window1"); diff --git a/examples/display-urdf.cc b/examples/display-urdf.cc index 864aee4..e8eaec3 100644 --- a/examples/display-urdf.cc +++ b/examples/display-urdf.cc @@ -10,22 +10,17 @@ int main(int argc, const char ** argv) { - using namespace graphics; - using namespace corbaServer; - if (argc != 2) { std::cout << "Usage " << argv[0] << " <urdf-filename>" << std::endl; return 1; } - Client client (0, NULL); + gepetto::viewer::corba::Client client (0, NULL); client.connect (); client.gui()->createWindow("urdf-display"); - // The second argument is deprecated and ignored. File link starting with - // "package://" are resolved using ROS_PACKAGE_PATH environment variable. - client.gui()->addURDF("urdf-display/urdf", argv[1], ""); + client.gui()->addURDF("urdf-display/urdf", argv[1]); client.gui()->refresh(); diff --git a/include/gepetto/viewer/corba/client.hh b/include/gepetto/viewer/corba/client.hh index 8fc2ba4..3c8fb65 100644 --- a/include/gepetto/viewer/corba/client.hh +++ b/include/gepetto/viewer/corba/client.hh @@ -26,13 +26,16 @@ namespace corba { ~Client (); - void connect (const char* iiop = "corbaloc:rir:/NameService"); + void connect (const std::string& iiop = "corbaloc:iiop:"); gepetto::corbaserver::GraphicalInterface_var& gui () { return gui_; } private: + bool createFromDirectLink(const std::string& iiop); + bool createFromNameService(const std::string& iiop); + corbaserver::GraphicalInterface_var gui_; CORBA::ORB_var orb_; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b2125c0..35b6fdb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,7 +23,6 @@ SET(IDL_SOURCES ) OMNIIDL_INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/idl) -INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/src) FOREACH(IDL ${IDL_SOURCES}) # C++ @@ -116,6 +115,7 @@ ENDIF(NOT CLIENT_ONLY) # }}} ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${PROJECT_NAME}_SOURCES}) +TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} PUBLIC ${CMAKE_BINARY_DIR}/src) ADD_DEPENDENCIES (${LIBRARY_NAME} generate_idl_cpp) ADD_DEPENDENCIES (${LIBRARY_NAME} generate_idl_python) IF(NOT CLIENT_ONLY) diff --git a/src/client.cc b/src/client.cc index 1d35cfc..e1dc6c1 100644 --- a/src/client.cc +++ b/src/client.cc @@ -33,14 +33,25 @@ namespace gepetto { { } - void Client::connect (const char* iiop) + bool Client::createFromDirectLink (const std::string& iiop) { - // Get a reference to the Naming Service - CORBA::Object_var rootContextObj = orb_->string_to_object(iiop); + std::string url = iiop + "/gepetto-gui"; + + CORBA::Object_var obj = orb_->string_to_object(url.c_str()); + gui_ = gepetto::corbaserver::GraphicalInterface::_narrow(obj.in()); + return !CORBA::is_nil(gui_); + } + + bool Client::createFromNameService (const std::string& iiop) + { + std::string url = iiop + "/NameService"; + + CORBA::Object_var obj = orb_->string_to_object(url.c_str()); + if (CORBA::is_nil(obj)) return false; CosNaming::NamingContext_var nc = - CosNaming::NamingContext::_narrow(rootContextObj.in()); + CosNaming::NamingContext::_narrow(obj.in()); + if (CORBA::is_nil(nc)) return false; - // Bind robotObj with name Robot to the hppContext: CosNaming::Name name; name.length(2); name[0].id = (const char *) "gepetto"; @@ -51,6 +62,16 @@ namespace gepetto { CORBA::Object_var managerObj = nc->resolve(name); // Narrow the previous object to obtain the correct type gui_ = gepetto::corbaserver::GraphicalInterface::_narrow(managerObj.in()); + + return CORBA::is_nil(gui_); + } + + void Client::connect (const std::string& iiop) + { + bool ok = createFromDirectLink(iiop); + if (!ok) ok = createFromNameService(iiop); + if (!ok) throw std::runtime_error ("Could not connect to gepetto-viewer " + "GUI at " + iiop); } /// \brief Shutdown CORBA server -- GitLab