Skip to content

Commit

Permalink
First working version (VisualizationFrame)
Browse files Browse the repository at this point in the history
  • Loading branch information
Christoph Hellmann Santos committed Aug 27, 2022
1 parent f564d55 commit 3e03e30
Show file tree
Hide file tree
Showing 10 changed files with 637 additions and 156 deletions.
3 changes: 3 additions & 0 deletions rviz_common/include/rviz_common/visualization_frame.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ class RVIZ_COMMON_PUBLIC VisualizationFrame : public QMainWindow, public WindowM
{
Q_OBJECT

protected:
explicit VisualizationFrame(QWidget * parent = nullptr);

public:
explicit VisualizationFrame(
ros_integration::RosNodeAbstractionIface::WeakPtr rviz_ros_node, QWidget * parent = nullptr);
Expand Down
24 changes: 24 additions & 0 deletions rviz_common/src/rviz_common/visualization_frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,30 @@
namespace rviz_common
{

VisualizationFrame::VisualizationFrame(QWidget * parent)
: QMainWindow(parent),
app_(nullptr),
render_panel_(nullptr),
show_help_action_(nullptr),
file_menu_(nullptr),
recent_configs_menu_(nullptr),
toolbar_(nullptr),
manager_(nullptr),
splash_(nullptr),
toolbar_actions_(nullptr),
show_choose_new_master_option_(false),
panel_factory_(nullptr),
add_tool_action_(nullptr),
remove_tool_menu_(nullptr),
initialized_(false),
geom_change_detector_(new WidgetGeometryChangeDetector(this)),
loading_(false),
post_load_timer_(new QTimer(this)),
frame_count_(0),
toolbar_visible_(true)
{
}

VisualizationFrame::VisualizationFrame(
ros_integration::RosNodeAbstractionIface::WeakPtr rviz_ros_node, QWidget * parent)
: QMainWindow(parent),
Expand Down
267 changes: 152 additions & 115 deletions rviz_python_bindings/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,137 +1,164 @@
cmake_minimum_required(VERSION 3.8)
project(rviz_python_bindings)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()


set(rviz_shiboken_QT_COMPONENTS
QtCore
QtGui
QtWidgets
)
set(bindings_library "rviz_shiboken")

find_package(ament_cmake REQUIRED)
find_package(python_qt_binding REQUIRED)
find_package(ament_cmake_python REQUIRED)
find_package(Shiboken2 REQUIRED)
find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets)
find_package(rviz_common REQUIRED)
find_package(rviz_rendering REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(rviz_ogre_vendor REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rmw REQUIRED)
find_package(rcl_interfaces REQUIRED)
find_package(rosidl_typesupport_interface REQUIRED)
find_package(tf2_msgs REQUIRED)
find_package(pluginlib REQUIRED)
include(shiboken_helper.cmake)

if(shiboken_helper_FOUND)
set(_configure_shiboken TRUE)
if(_configure_shiboken)

# To add a new rviz class to the bindings, add it:
# - in rviz_shiboken_SRCS below, like rviz_myclass_wrapper.cpp
# - in rviz_HDRS below, like ../rviz/my_class.h
# - in global.h, like #include <rviz/my_class.h>
# - in typesystem.xml, like <object-type name="rviz::MyClass"/>

set(rviz_shiboken_SRCS
librviz_shiboken/librviz_shiboken_module_wrapper.cpp
librviz_shiboken/rviz_common_visualizationframe_wrapper.cpp
librviz_shiboken/rviz_common_visualizationmanager_wrapper.cpp
librviz_shiboken/rviz_common_display_wrapper.cpp
librviz_shiboken/rviz_common_displaygroup_wrapper.cpp
librviz_shiboken/rviz_rendering_ogrelogging_wrapper.cpp
librviz_shiboken/rviz_common_properties_property_wrapper.cpp
librviz_shiboken/rviz_common_properties_boolproperty_wrapper.cpp
librviz_shiboken/rviz_common_paneldockwidget_wrapper.cpp
librviz_shiboken/rviz_common_viewmanager_wrapper.cpp
librviz_shiboken/rviz_common_tool_wrapper.cpp
librviz_shiboken/rviz_common_toolmanager_wrapper.cpp
librviz_shiboken/rviz_common_config_wrapper.cpp
librviz_shiboken/rviz_common_config_mapiterator_wrapper.cpp
librviz_shiboken/rviz_common_yamlconfigreader_wrapper.cpp
librviz_shiboken/rviz_common_yamlconfigwriter_wrapper.cpp
librviz_shiboken/rviz_common_wrapper.cpp
librviz_shiboken/rviz_rendering_wrapper.cpp
librviz_shiboken/rviz_common_properties_wrapper.cpp


add_library(rviz_python SHARED
src/visualizer_frame_py.cpp
)

target_include_directories(rviz_python PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_options(rviz_python PUBLIC -Wl,--no-undefined)
ament_target_dependencies(rviz_python
rviz_common
Qt5
)

install(TARGETS rviz_python
EXPORT export_rviz_python
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)

message(STATUS "LIBRARY OUTPUT DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_DIR}/rviz")
if(Shiboken2_FOUND)
message(STATUS "Found Shiboken2 version ${Shiboken2_VERSION}")
if(NOT ${Shiboken2_VERSION} VERSION_LESS "5.13")
get_property(SHIBOKEN_INCLUDE_DIR TARGET Shiboken2::libshiboken PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(SHIBOKEN_LIBRARY TARGET Shiboken2::libshiboken PROPERTY LOCATION)
set(SHIBOKEN_BINARY Shiboken2::shiboken2)
endif()
message(STATUS "Using SHIBOKEN_INCLUDE_DIR: ${SHIBOKEN_INCLUDE_DIR}")
message(STATUS "Using SHIBOKEN_LIBRARY: ${SHIBOKEN_LIBRARY}")
message(STATUS "Using SHIBOKEN_BINARY: ${SHIBOKEN_BINARY}")
endif()

find_package(PySide2 QUIET)
if(PySide2_FOUND)
message(STATUS "Found PySide2 version ${PySide2_VERSION}")
if(NOT ${PySide2_VERSION} VERSION_LESS "5.13")
get_property(PYSIDE_INCLUDE_DIR TARGET PySide2::pyside2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
get_property(PYSIDE_LIBRARY TARGET PySide2::pyside2 PROPERTY LOCATION)
endif()
message(STATUS "Using PYSIDE_INCLUDE_DIR: ${PYSIDE_INCLUDE_DIR}")
message(STATUS "Using PYSIDE_LIBRARY: ${PYSIDE_LIBRARY}")
message(STATUS "Using PYSIDE_TYPESYSTEMS: ${PYSIDE_TYPESYSTEMS}")
endif()

set(generated_sources
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_shiboken_module_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_visualizerframepy_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_yamlconfigreader_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_yamlconfigwriter_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_config_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_visualizationframe_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_visualizationmanager_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_displaygroup_wrapper.cpp
${CMAKE_CURRENT_BINARY_DIR}/${bindings_library}/rviz_common_display_wrapper.cpp
)


set(rviz_HDRS
global.hpp
# ${rviz_common_INCLUDE_DIRS}/visualization_frame.hpp
# ${rviz_common_INCLUDE_DIRS}/visualization_manager.hpp
# ${rviz_common_INCLUDE_DIRS}/view_manager.hpp
# ${rviz_common_INCLUDE_DIRS}/view_controller.hpp
# ${rviz_common_INCLUDE_DIRS}/display.hpp
# ${rviz_common_INCLUDE_DIRS}/display_group.hpp
# ${rviz_common_INCLUDE_DIRS}/properties/property.hpp
# ${rviz_common_INCLUDE_DIRS}/properties/bool_property.hpp
# ${rviz_common_INCLUDE_DIRS}/panel_dock_widget.hpp
# ${rviz_common_INCLUDE_DIRS}/tool.hpp
# ${rviz_common_INCLUDE_DIRS}/tool_manager.hpp
# ${rviz_rendering_INCLUDE_DIRS}/ogre_helpers/ogre_logging.hpp
# ${rviz_common_INCLUDE_DIRS}/config.hpp
# ${rviz_common_INCLUDE_DIRS}/yaml_config_reader.hpp
# ${rviz_common_INCLUDE_DIRS}/yaml_config_writer.hpp

list(APPEND SHIBOKEN_HELPER_INCLUDE_DIRS
${QT_INCLUDE_DIR}
${PYSIDE_INCLUDE_DIR}
${PYTHON_INCLUDE_DIR}
${SHIBOKEN_INCLUDE_DIR}
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${rviz_common_INCLUDE_DIRS}
${OGRE_INCLUDE_DIRS}
${rmw_INCLUDE_DIRS}
${rclcpp_INCLUDE_DIRS}
${tf2_msgs_INCLUDE_DIRS}
${rcl_interfaces_INCLUDE_DIRS}
${pluginlib_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}
)

list(APPEND rviz_shiboken_INCLUDE_DIRS
${rviz_common_INCLUDE_DIRS}
${rviz_rendering_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${OGRE_INCLUDE_DIRS}
${rclcpp_INCLUDE_DIRS}
${rmw_INCLUDE_DIRS}
${rosidl_typesupport_interface_INCLUDE_DIRS}
${rcl_interfaces_INCLUDE_DIRS}
${tf2_msgs_INCLUDE_DIRS}
${pluginlib_INCLUDE_DIRS}
)
message(INFO ${PROJECT_SOURCE_DIR}/shiboken)
shiboken_generator(
librviz
global.hpp
typesystem.xml
${PROJECT_SOURCE_DIR}/
"${rviz_shiboken_SRCS}"
"${rviz_HDRS}"
"${rviz_shiboken_INCLUDE_DIRS}"
"${CMAKE_CURRENT_BINARY_DIR}"
set(SHIBOKEN_HELPER_INCLUDE_DIRS_WITH_COLONS "")
foreach(dir ${SHIBOKEN_HELPER_INCLUDE_DIRS})
set(SHIBOKEN_HELPER_INCLUDE_DIRS_WITH_COLONS "${SHIBOKEN_HELPER_INCLUDE_DIRS_WITH_COLONS}:${dir}")
endforeach()

set(shiboken_options --generator-set=shiboken
--avoid-protected-hack
--enable-pyside-extensions
-I${CMAKE_SOURCE_DIR}:${SHIBOKEN_HELPER_INCLUDE_DIRS_WITH_COLONS}
-T${CMAKE_SOURCE_DIR}:${PYSIDE_TYPESYSTEMS}
--output-directory=${CMAKE_CURRENT_BINARY_DIR}
--language-level=c++17
)

include_directories(rviz_shiboken
${rviz_common_INCLUDE_DIRS}
${rviz_rendering_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}

add_custom_command(OUTPUT ${generated_sources}
COMMAND ${SHIBOKEN_BINARY}
${shiboken_options} ${CMAKE_CURRENT_SOURCE_DIR}/global.hpp ${CMAKE_CURRENT_SOURCE_DIR}/typesystem.xml
DEPENDS ${generated_sources_dependencies}
IMPLICIT_DEPENDS CXX global.hpp
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Running generator for ${typesystem_file}.")

ament_python_install_package(rviz)

add_library(${bindings_library} MODULE ${generated_sources})

# Apply relevant include and link flags.
target_include_directories(${bindings_library} PRIVATE
${QT_INCLUDE_DIR}
${PYTHON_INCLUDE_DIR}
${SHIBOKEN_INCLUDE_DIR}
${PYSIDE_INCLUDE_DIR}
${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${rviz_common_INCLUDE_DIRS}
${OGRE_INCLUDE_DIRS}
${rclcpp_INCLUDE_DIRS}
${rmw_INCLUDE_DIRS}
${rosidl_typesupport_interface_INCLUDE_DIRS}
${rcl_interfaces_INCLUDE_DIRS}
${rclcpp_INCLUDE_DIRS}
${tf2_msgs_INCLUDE_DIRS}
${pluginlib_INCLUDE_DIRS}
)
${rcl_interfaces_INCLUDE_DIRS}
${PYSIDE_INCLUDE_DIR}/QtCore
${PYSIDE_INCLUDE_DIR}/QtGui
${PYSIDE_INCLUDE_DIR}/QtWidgets
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}
)

shiboken_include_directories(rviz_shiboken "${rviz_shiboken_QT_COMPONENTS}")
add_library(rviz_shiboken ${rviz_shiboken_SRCS})
target_link_libraries(rviz_shiboken ${PROJECT_NAME})
shiboken_target_link_libraries(rviz_shiboken "${rviz_shiboken_QT_COMPONENTS}")
target_compile_features(rviz_shiboken PUBLIC c_std_99 cxx_std_17)
target_compile_options(rviz_shiboken PUBLIC -fPIC -Wl,--no-undefined -w)
target_link_libraries(${bindings_library} PRIVATE
${QT_LIBRARIES}
${PYTHON_LIBRARY}
${SHIBOKEN_LIBRARY}
${PYSIDE_LIBRARY}
Qt5::Core
Qt5::Gui
Qt5::Widgets
rviz_python
${rviz_common_LIBRARIES}
)

set_target_properties(${bindings_library} PROPERTIES
PREFIX "")

install(TARGETS rviz_shiboken
LIBRARY DESTINATION ${AMENT})
endif()
endif()

install(TARGETS ${bindings_library}
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_DIR}/rviz
)


if(BUILD_TESTING)
Expand All @@ -146,4 +173,14 @@ if(BUILD_TESTING)
ament_lint_auto_find_test_dependencies()
endif()

ament_export_include_directories(
include
)
ament_export_libraries(
rviz_python
)
ament_export_targets(
export_rviz_python
)

ament_package()
27 changes: 4 additions & 23 deletions rviz_python_bindings/global.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,33 +30,14 @@
#ifndef PYTHON_GLOBAL_H
#define PYTHON_GLOBAL_H

#undef QT_NO_STL
#undef QT_NO_STL_WCHAR

#ifndef NULL
#define NULL 0
#endif

#include "pyside2_global.h"

#include <QtCore/QtCore>
#include <QtGui/QtGui>
#include <QtWidgets/QtWidgets>


#include <pyside2_global.h>
#include <rviz_common/visualization_frame.hpp>
#include <rviz_common/visualization_manager.hpp>
#include <rviz_common/display.hpp>
#include <rviz_common/display_group.hpp>
#include <rviz_rendering/ogre_logging.hpp>
#include <rviz_common/properties/property.hpp>
#include <rviz_common/properties/bool_property.hpp>
#include <rviz_common/panel_dock_widget.hpp>
#include <rviz_common/view_manager.hpp>
#include <rviz_common/tool.hpp>
#include <rviz_common/tool_manager.hpp>
#include <rviz_common/config.hpp>
#include <rviz_common/display.hpp>
#include <rviz_python_bindings/visualizer_frame_py.hpp>
#include <rviz_common/yaml_config_reader.hpp>
#include <rviz_common/yaml_config_writer.hpp>
#include <rviz_common/config.hpp>

#endif // PYTHON_GLOBAL_H
Loading

0 comments on commit 3e03e30

Please sign in to comment.