diff --git a/CMakeLists.txt b/CMakeLists.txt
index be5ae2f..6c60572 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,7 @@ cmake_policy(SET CMP0057 NEW)
find_package(Rock)
rock_init(base 1.0)
+rock_feature(NOCURDIR)
set(CMAKE_CXX_STANDARD 11)
diff --git a/manifest.xml b/manifest.xml
index bbcaea4..ccea530 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -19,5 +19,7 @@
+
+
stable
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 24f487b..b6d3a23 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -8,6 +8,7 @@ if(SISL_FOUND)
Spline.cpp
Trajectory.cpp
)
+ set(BASE-TYPES_EXTRA_DEPS_CMAKE SISL)
endif()
rock_library(
@@ -118,10 +119,10 @@ rock_library(
DEPS_PKGCONFIG
base-logging
eigen3
+ DEPS_CMAKE ${BASE-TYPES_EXTRA_DEPS_CMAKE}
)
if(SISL_FOUND)
- target_link_libraries(base-types ${SISL_LIBRARIES})
install(FILES ${CMAKE_SOURCE_DIR}/src/Spline.hpp
DESTINATION include/base/geometry)
configure_file(base-types-sisl.pc.in ${CMAKE_BINARY_DIR}/base-types-sisl.pc @ONLY)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index bc32845..65522a4 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,3 +1,8 @@
+
+rock_find_qt4(OPTIONAL)
+rock_find_qt5(OPTIONAL)
+include(RockQt)
+
if(SISL_FOUND)
list(APPEND OPTIONAL_TESTS
test_Spline.cpp)
@@ -21,9 +26,14 @@ rock_executable(benchmark benchmark.cpp bench_func.cpp
DEPS base-types
DEPS_PKGCONFIG base-logging
NOINSTALL)
-rock_executable(test_DepthMapVisualization test_DepthMapVisualization.cpp
- DEPS base-types base-viz
- DEPS_PKGCONFIG vizkit3d
+
+rock_qt_executable(
+ TARGETPREFIX test_DepthMapVisualization
+ QT4_SUFFIX ""
+ SOURCES test_DepthMapVisualization.cpp
+ DEPS base-types
+ DEPS_QT base-viz
+ DEPS_PKGCONFIG_QT vizkit3d
LIBS ${Boost_SYSTEM_LIBRARY}
NOINSTALL)
diff --git a/viz/CMakeLists.txt b/viz/CMakeLists.txt
index 98c9c12..5c0c90e 100644
--- a/viz/CMakeLists.txt
+++ b/viz/CMakeLists.txt
@@ -1,4 +1,7 @@
-rock_find_qt4()
+rock_find_qt4(OPTIONAL)
+rock_find_qt5(OPTIONAL)
+
+include(RockQt)
unset(OPTIONAL_HPP)
unset(OPTIONAL_MOC)
@@ -15,7 +18,11 @@ if(SISL_FOUND)
)
endif()
-rock_vizkit_plugin(base-viz
+rock_qt_vizkit_plugin(
+ TARGETPREFIX base-viz
+ QT4_SUFFIX ""
+ MISSINGQTDEPS_NOBUILD
+ SOURCES
PluginLoader.cpp Uncertainty.cpp Vizkit3DHelper.cpp
DistanceImageVisualization.cpp
LaserScanVisualization.cpp
@@ -28,8 +35,10 @@ rock_vizkit_plugin(base-viz
SonarVisualization.cpp
PointcloudVisualization.cpp
DepthMapVisualization.cpp
+ OrientedBoundingBoxVisualization.cpp
${OPTIONAL_CPP}
MOC
+ PluginLoader.hpp
DistanceImageVisualization.hpp
LaserScanVisualization.hpp
MotionCommandVisualization.hpp
@@ -41,6 +50,7 @@ rock_vizkit_plugin(base-viz
SonarVisualization.hpp
PointcloudVisualization.hpp
DepthMapVisualization.hpp
+ OrientedBoundingBoxVisualization.hpp
${OPTIONAL_MOC}
HEADERS
Uncertainty.hpp
@@ -56,8 +66,17 @@ rock_vizkit_plugin(base-viz
SonarVisualization.hpp
PointcloudVisualization.hpp
DepthMapVisualization.hpp
+ OrientedBoundingBoxVisualization.hpp
${OPTIONAL_HPP}
DEPS base-types
LIBS ${Boost_SYSTEM_LIBRARY}
- DEPS_PKGCONFIG base-logging
+ DEPS_PKGCONFIG base-logging PrimitivesFactory
)
+if(SISL_FOUND)
+ if(TARGET base-viz)
+ target_compile_definitions(base-viz PRIVATE SISL_FOUND)
+ endif()
+ if(TARGET base-viz-qt5)
+ target_compile_definitions(base-viz-qt5 PRIVATE SISL_FOUND)
+ endif()
+endif(SISL_FOUND)
diff --git a/viz/OrientedBoundingBoxVisualization.cpp b/viz/OrientedBoundingBoxVisualization.cpp
new file mode 100644
index 0000000..c9b434b
--- /dev/null
+++ b/viz/OrientedBoundingBoxVisualization.cpp
@@ -0,0 +1,69 @@
+#include "OrientedBoundingBoxVisualization.hpp"
+
+#include
+#include
+#include
+#include
+
+#include
+
+using namespace vizkit3d;
+
+struct OrientedBoundingBoxVisualization::Data {
+ // Copy of the value given to updateDataIntern.
+ // Making a copy is required because of how OSG works
+ std::vector data;
+};
+
+
+OrientedBoundingBoxVisualization::OrientedBoundingBoxVisualization()
+ : p(new Data), color(1.0f, 1.0f, 1.0f, 1.0f) {
+}
+
+OrientedBoundingBoxVisualization::~OrientedBoundingBoxVisualization() {
+ delete p;
+}
+
+void OrientedBoundingBoxVisualization::setColor(QColor q_color) {
+ color = osg::Vec4(q_color.redF(), q_color.greenF(),
+ q_color.blueF(), q_color.alphaF());
+ setDirty();
+ emit propertyChanged("Color");
+}
+
+QColor OrientedBoundingBoxVisualization::getColor() const {
+ QColor q_color;
+ q_color.setRgbF(color[0], color[1], color[2], color[3]);
+ return q_color;
+}
+
+osg::ref_ptr OrientedBoundingBoxVisualization::createMainNode() {
+ osg::ref_ptr boxes = new osg::Group();
+
+ addBoxes(boxes);
+
+ return boxes;
+}
+
+void OrientedBoundingBoxVisualization::updateMainNode(osg::Node* node) {
+ node->asGroup()->removeChildren(0, node->asGroup()->getNumChildren());
+ addBoxes(node->asGroup());
+}
+
+void OrientedBoundingBoxVisualization::updateDataIntern(std::vector const& data) {
+ p->data = data;
+}
+
+void OrientedBoundingBoxVisualization::updateDataIntern(base::samples::OrientedBoundingBox const& data) {
+ p->data.clear();
+ p->data.push_back(data);
+}
+
+void OrientedBoundingBoxVisualization::addBoxes(osg::Group* group) {
+ for (const auto & box : p->data) {
+ osg::ref_ptr wireframe = primitives.createWireframeBox(box.dimension.x(), box.dimension.y(), box.dimension.z(), color);
+ wireframe->setPosition(box.position.x(), box.position.y(), box.position.z());
+ wireframe->setOrientation(box.orientation.x(), box.orientation.y(), box.orientation.z(), box.orientation.w());
+ group->addChild(wireframe);
+ }
+}
diff --git a/viz/OrientedBoundingBoxVisualization.hpp b/viz/OrientedBoundingBoxVisualization.hpp
new file mode 100644
index 0000000..e97f4d5
--- /dev/null
+++ b/viz/OrientedBoundingBoxVisualization.hpp
@@ -0,0 +1,88 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace osg {
+class Group;
+}
+
+namespace vizkit3d {
+
+
+class OrientedBoundingBoxVisualization
+ : public vizkit3d::Vizkit3DPlugin< std::vector >
+ , public vizkit3d::VizPluginAddType
+ , boost::noncopyable
+{
+Q_OBJECT
+Q_PROPERTY(QColor Color READ getColor WRITE setColor)
+
+ public:
+ OrientedBoundingBoxVisualization();
+ ~OrientedBoundingBoxVisualization();
+
+ /**
+ * Thread-safe call of
+ * 'updateDataIntern ( std::vector const& data )'.
+ */
+ Q_INVOKABLE void updateData(std::vector const &sample) {
+ vizkit3d::Vizkit3DPlugin< std::vector >::updateData(sample);
+ }
+
+ /**
+ * Thread-safe call of 'updateDataIntern ( const base::samples::OrientedBoundingBox& data )'.
+ */
+ Q_INVOKABLE void updateData(base::samples::OrientedBoundingBox const &sample) {
+ vizkit3d::Vizkit3DPlugin< std::vector >::updateData(sample);
+ }
+
+ public slots:
+ /**
+ * Sets the color of all boxes.
+ */
+ void setColor(QColor q_color);
+
+ /**
+ * Returns the current color of the boxes.
+ */
+ QColor getColor() const;
+
+ protected:
+ /**
+ * OSG tree: Group <- Transformation <- Geode <- Sphere
+ * <- Triangle
+ */
+ osg::ref_ptr createMainNode();
+
+ /**
+ * Clears the group and redraws all boxes.
+ */
+ void updateMainNode(osg::Node* node);
+
+ /**
+ * Replaces the current list of boxes with the passed one.
+ */
+ void updateDataIntern(std::vector const& data);
+
+ /**
+ * Clears the current list of boxes and adds the new waypoint.
+ */
+ void updateDataIntern(base::samples::OrientedBoundingBox const& data);
+
+ private:
+ osg::ref_ptr group;
+ struct Data;
+ Data* p;
+ osg::Vec4 color;
+ osgviz::PrimitivesFactory primitives;
+ /**
+ * Inserts all boxes into the tree using the tree structure shown
+ * in \a createMainNode() and the currently set color.
+ */
+ void addBoxes(osg::Group* group);
+};
+} // namespace vizkit3d
diff --git a/viz/PluginLoader.cpp b/viz/PluginLoader.cpp
index 9f4688b..b0cecb2 100644
--- a/viz/PluginLoader.cpp
+++ b/viz/PluginLoader.cpp
@@ -1,8 +1,12 @@
-#include
+
+#include "PluginLoader.hpp"
+
#include "LaserScanVisualization.hpp"
#include "WaypointVisualization.hpp"
#include "MotionCommandVisualization.hpp"
+#ifdef SISL_FOUND
#include "TrajectoryVisualization.hpp"
+#endif
#include "RigidBodyStateVisualization.hpp"
#include "BodyStateVisualization.hpp"
#include "SonarGroundDistanceVisualization.hpp"
@@ -11,95 +15,102 @@
#include "SonarVisualization.hpp"
#include "DepthMapVisualization.hpp"
#include "DistanceImageVisualization.hpp"
+#include "OrientedBoundingBoxVisualization.hpp"
namespace vizkit3d {
- class QtPluginVizkitBase : public vizkit3d::VizkitPluginFactory {
- private:
- public:
-
- QtPluginVizkitBase() {
- }
-
+
+
/**
* Returns a list of all available visualization plugins.
* @return list of plugin names
*/
- virtual QStringList* getAvailablePlugins() const
+ QStringList* QtPluginVizkitBase::getAvailablePlugins() const
{
- QStringList *pluginNames = new QStringList();
- pluginNames->push_back("WaypointVisualization");
- pluginNames->push_back("TrajectoryVisualization");
- pluginNames->push_back("MotionCommandVisualization");
- pluginNames->push_back("RigidBodyStateVisualization");
- pluginNames->push_back("BodyStateVisualization");
- pluginNames->push_back("LaserScanVisualization");
- pluginNames->push_back("SonarGroundDistanceVisualization");
- pluginNames->push_back("PointcloudVisualization");
- pluginNames->push_back("SonarBeamVisualization");
- pluginNames->push_back("SonarVisualization");
- pluginNames->push_back("DepthMapVisualization");
- pluginNames->push_back("DistanceImageVisualization");
- return pluginNames;
+ QStringList *pluginNames = new QStringList();
+ pluginNames->push_back("WaypointVisualization");
+ #ifdef SISL_FOUND
+ pluginNames->push_back("TrajectoryVisualization");
+ #endif
+ pluginNames->push_back("MotionCommandVisualization");
+ pluginNames->push_back("RigidBodyStateVisualization");
+ pluginNames->push_back("BodyStateVisualization");
+ pluginNames->push_back("LaserScanVisualization");
+ pluginNames->push_back("SonarGroundDistanceVisualization");
+ pluginNames->push_back("PointcloudVisualization");
+ pluginNames->push_back("SonarBeamVisualization");
+ pluginNames->push_back("SonarVisualization");
+ pluginNames->push_back("DepthMapVisualization");
+ pluginNames->push_back("DistanceImageVisualization");
+ pluginNames->push_back("OrientedBoundingBoxVisualization");
+ return pluginNames;
}
- virtual QObject* createPlugin(QString const& pluginName)
- {
- vizkit3d::VizPluginBase* plugin = 0;
- if (pluginName == "WaypointVisualization")
- {
- plugin = new vizkit3d::WaypointVisualization();
- }
- else if (pluginName == "MotionCommandVisualization")
- {
- plugin = new vizkit3d::MotionCommandVisualization();
- }
- else if (pluginName == "TrajectoryVisualization")
- {
- plugin = new vizkit3d::TrajectoryVisualization();
- }
- else if (pluginName == "RigidBodyStateVisualization")
- {
- plugin = new vizkit3d::RigidBodyStateVisualization();
- }
- else if (pluginName == "BodyStateVisualization")
- {
- plugin = new vizkit3d::BodyStateVisualization();
- }
- else if (pluginName == "LaserScanVisualization")
- {
- plugin = new vizkit3d::LaserScanVisualization();
- }
- else if (pluginName == "SonarGroundDistanceVisualization")
- {
- plugin = new vizkit3d::SonarGroundDistanceVisualization();
- }
- else if (pluginName == "PointcloudVisualization")
- {
- plugin = new vizkit3d::PointcloudVisualization();
- }
- else if (pluginName == "SonarBeamVisualization")
- {
- plugin = new vizkit3d::SonarBeamVisualization();
- }
- else if (pluginName == "SonarVisualization")
- {
- plugin = new vizkit3d::SonarVisualization();
- }
- else if (pluginName == "DepthMapVisualization")
- {
- plugin = new vizkit3d::DepthMapVisualization();
- }
- else if (pluginName == "DistanceImageVisualization")
- {
+ QObject* QtPluginVizkitBase::createPlugin(QString const& pluginName)
+ {
+ vizkit3d::VizPluginBase* plugin = 0;
+ if (pluginName == "WaypointVisualization")
+ {
+ plugin = new vizkit3d::WaypointVisualization();
+ }
+ else if (pluginName == "MotionCommandVisualization")
+ {
+ plugin = new vizkit3d::MotionCommandVisualization();
+ }
+ #ifdef SISL_FOUND
+ else if (pluginName == "TrajectoryVisualization")
+ {
+ plugin = new vizkit3d::TrajectoryVisualization();
+ }
+ #endif
+ else if (pluginName == "RigidBodyStateVisualization")
+ {
+ plugin = new vizkit3d::RigidBodyStateVisualization();
+ }
+ else if (pluginName == "BodyStateVisualization")
+ {
+ plugin = new vizkit3d::BodyStateVisualization();
+ }
+ else if (pluginName == "LaserScanVisualization")
+ {
+ plugin = new vizkit3d::LaserScanVisualization();
+ }
+ else if (pluginName == "SonarGroundDistanceVisualization")
+ {
+ plugin = new vizkit3d::SonarGroundDistanceVisualization();
+ }
+ else if (pluginName == "PointcloudVisualization")
+ {
+ plugin = new vizkit3d::PointcloudVisualization();
+ }
+ else if (pluginName == "SonarBeamVisualization")
+ {
+ plugin = new vizkit3d::SonarBeamVisualization();
+ }
+ else if (pluginName == "SonarVisualization")
+ {
+ plugin = new vizkit3d::SonarVisualization();
+ }
+ else if (pluginName == "DepthMapVisualization")
+ {
+ plugin = new vizkit3d::DepthMapVisualization();
+ }
+ else if (pluginName == "DistanceImageVisualization")
+ {
plugin = new vizkit3d::DistanceImageVisualization();
- }
+ }
+ else if (pluginName == "OrientedBoundingBoxVisualization")
+ {
+ plugin = new vizkit3d::OrientedBoundingBoxVisualization();
+ }
+
+ if (plugin)
+ {
+ return plugin;
+ }
+ return NULL;
+ }
- if (plugin)
- {
- return plugin;
- }
- return NULL;
- };
- };
- Q_EXPORT_PLUGIN2(QtPluginVizkitBase, QtPluginVizkitBase)
+#if QT_VERSION < 0x050000
+ Q_EXPORT_PLUGIN2(QtPluginVizkitBase, QtPluginVizkitBase)
+#endif
}
diff --git a/viz/PluginLoader.hpp b/viz/PluginLoader.hpp
new file mode 100644
index 0000000..04744ef
--- /dev/null
+++ b/viz/PluginLoader.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include
+
+namespace vizkit3d {
+
+class QtPluginVizkitBase : public vizkit3d::VizkitPluginFactory {
+ Q_OBJECT
+#if QT_VERSION >= 0x050000
+ Q_PLUGIN_METADATA(IID "rock.vizkit3d.VizkitPluginFactory")
+#endif
+ //Q_INTERFACES(vizkit3d::VizkitPluginFactory)
+
+ private:
+ public:
+
+ QtPluginVizkitBase() {
+ }
+
+ /**
+ * Returns a list of all available visualization plugins.
+ * @return list of plugin names
+ */
+ virtual QStringList* getAvailablePlugins() const;
+ virtual QObject* createPlugin(QString const& pluginName);
+};
+
+} // namespace vizkit3d
diff --git a/viz/base-viz-qt5.pc.in b/viz/base-viz-qt5.pc.in
new file mode 100644
index 0000000..24800b6
--- /dev/null
+++ b/viz/base-viz-qt5.pc.in
@@ -0,0 +1,12 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=@CMAKE_INSTALL_PREFIX@
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: @PROJECT_NAME@-viz-qt5
+Description: base types Vizkit3D plugins
+Version: @PROJECT_VERSION@
+Requires: vizkit3d-qt5
+Libs: -L${libdir} -l@PROJECT_NAME@-viz-qt5
+Cflags: -I${includedir}
+
diff --git a/viz/vizkit_plugin.rb b/viz/vizkit_plugin.rb
index dde2711..b5dece9 100644
--- a/viz/vizkit_plugin.rb
+++ b/viz/vizkit_plugin.rb
@@ -29,3 +29,6 @@
Vizkit::UiLoader.register_3d_plugin_for('DepthMapVisualization', "/base/samples/DepthMap", :updateDepthMap)
Vizkit::UiLoader.register_3d_plugin('DistanceImageVisualization', "base", 'DistanceImageVisualization')
Vizkit::UiLoader.register_3d_plugin_for('DistanceImageVisualization', "/base/samples/DistanceImage", :updateDistanceImage)
+Vizkit::UiLoader.register_3d_plugin('OrientedBoundingBoxVisualization',"base", 'OrientedBoundingBoxVisualization')
+Vizkit::UiLoader.register_3d_plugin_for('OrientedBoundingBoxVisualization', "/std/vector", :updateData )
+Vizkit::UiLoader.register_3d_plugin_for('OrientedBoundingBoxVisualization', "/base/samples/OrientedBoundingBox", :updateData )