diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c69b16320d38efeb6046cab84196ed1e73415ac7..27a44a97145f043086badaf7e9a3ec98876d0810 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 fc5115989fe2d6da37398e28c339079045402644..0ab1e779979f3084838788b2162304fc2d1654e0 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 864aee444308b3fbe4214cd104883981da244d4b..e8eaec395fed1d84028ca5601549459d08604067 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 8fc2ba4b469d9f607c421ded433c7914c75d00a9..3c8fb65a9ce286a4c601cf8ed5ff22e60f9e7dce 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 b2125c0afaac0b69466d18c73ad0b725ef09b39a..35b6fdb0f0d5274d8e43ec77dfb85a01b6126ce1 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 1d35cfca65806308d42856bbdb377ecde3fa7e55..e1dc6c11ddbf1fe54e4688d3c90e89cba6963cc2 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