Commit f6cd539f authored by Tom Vierjahn's avatar Tom Vierjahn

pvt.16.10.0

parent 96ecd5ef
......@@ -30,4 +30,5 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
project(pv-toolkit)
add_subdirectory(./pvt)
add_subdirectory(./qpvt)
add_subdirectory(./pv_app)
......@@ -12,7 +12,15 @@ by the Free Software Foundation, either version 3 of the License, or
In the future, we may decide to add a commercial license
at our own discretion without further notice.
If you are using pvt in a project, work or publication,
please mention "pvt performance visualization toolkit"
and cite \[[1](#references)\] *and*
* \[[2](#references)\] if you are using the correlation analysis or
* \[[3](#references)\] if you are using the geometry mapping.
This program 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
......@@ -25,3 +33,11 @@ along with this program. If not, see [http://www.gnu.org/licenses/].
* Define an evironment variable `QT5_DIR`
* Windows: it must be set to a specific build directory e.g., `/Qt/5.5/msvc2013_64/`
* Mac (Homebrew): `/usr/local/opt/qt5`
## References
[1] Tom Vierjahn, Marc-André Hermanns, Bernd Mohr, Matthias S. Müller, Torsten W. Kuhlen, Bernd Hentschel, "Using Directed Variance to Identify Meaningful Views in Call-Path Performance Profiles". Accepted for publication: 3rd Workshop on Visual Performance Analysis (VPA), 2016.
[2] Tom Vierjahn, Marc-André Hermanns, Bernd Mohr, Matthias S. Müller, Torsten Wolfgang Kuhlen, Bernd Hentschel, "Correlating Sub-Phenomena in Performance Data in the Frequency Domain". Accepted for poster presentation: LDAV 2016 – The 6th IEEE Symposium on Large Data Analysis and Visualization, 2016.
[3] Tom Vierjahn, Torsten W. Kuhlen, Matthias S. Müller, Bernd Hentschel, "Visualizing Performance Data With Respect to the Simulated Geometry". Presented at: 1st JARA-HPC Symposium, 2016.
......@@ -40,7 +40,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
ADD_DEFINITIONS(-std=c++11)
if (BUILD_SHARED)
add_definitions(-DPVT_DLL)
add_definitions(-DPVT_DLL -DQPVT_DLL)
endif()
#-------------------------------------------------------------------------------
......@@ -86,6 +86,7 @@ QT5_WRAP_UI (QT_UI_SRCS ${UI})
# pvt
include_directories(../pvt/include)
include_directories(../qpvt/include)
#-------------------------------------------------------------------------------
# executable
......@@ -117,6 +118,7 @@ target_link_libraries(${PROJECT_NAME}
Qt5::OpenGL
Qt5::Widgets
pvt
qpvt
)
if (WIN32)
......@@ -127,7 +129,7 @@ endif()
if (MSVC)
get_filename_component(FFTW_DIRECTORY ${FFTW_LIBRARIES} PATH)
get_filename_component(GLEW_DIRECTORY ${GLEW_LIBRARY} PATH)
set(ENVIRONMENT_PATH ${FFTW_DIRECTORY};${GLEW_DIRECTORY};$ENV{QT5_DIR}/bin/;${pvt_BINARY_DIR}/\$\(Configuration\))
set(ENVIRONMENT_PATH ${FFTW_DIRECTORY};${GLEW_DIRECTORY};$ENV{QT5_DIR}/bin/;${pvt_BINARY_DIR}/\$\(Configuration\);${qpvt_BINARY_DIR}/\$\(Configuration\))
configure_file(${CMAKE_SOURCE_DIR}/cmake/VisualStudioUserFileTemplate.xml
${CMAKE_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.vcxproj.user
@ONLY)
......
......@@ -29,48 +29,7 @@ set( RelativeSourceGroup "Source Files" )
set(DirFiles
application.cpp
application.hpp
camera_tools.cpp
camera_tools.hpp
cartesian_topology_viewer_widget.cpp
cartesian_topology_viewer_widget.hpp
cnode_impact_list_model.cpp
cnode_impact_list_model.hpp
cnode_impact_selector_widget.cpp
cnode_impact_selector_widget.hpp
cnode_tree_model.cpp
cnode_tree_model.hpp
correlated_views_model.cpp
correlated_views_model.hpp
data_range_h_slider.cpp
data_range_h_slider.hpp
data_range_v_slider.cpp
data_range_v_slider.hpp
directed_variation_glyph_delegate.cpp
directed_variation_glyph_delegate.hpp
geometry_viewer_widget.cpp
geometry_viewer_widget.hpp
main.cpp
metric_tree_model.cpp
metric_tree_model.hpp
parallel_coordinates_plot_widget.cpp
parallel_coordinates_plot_widget.hpp
perf_data_tree_model.hpp
perf_data_viewer_widget.cpp
perf_data_viewer_widget.hpp
range_slider.cpp
range_slider.hpp
range_h_slider.cpp
range_h_slider.hpp
range_v_slider.cpp
range_v_slider.hpp
severity_glyph_delegate.cpp
severity_glyph_delegate.hpp
slice_slider.cpp
slice_slider.hpp
squarified_cushion_treemap_widget.cpp
squarified_cushion_treemap_widget.hpp
viewer_widget.cpp
viewer_widget.hpp
_SourceFiles.cmake
)
......
......@@ -38,8 +38,9 @@
#include <pvt/severity_view.hpp>
#include <pvt/rendering/camera.hpp>
#include <qpvt/widgets/perf_data_viewer_widget.hpp>
#include "application.hpp"
#include "perf_data_viewer_widget.hpp"
namespace pv_app {
......@@ -91,17 +92,17 @@ application::setup_ui
mp_main_splitter->setWindowTitle("pv_app");
mp_main_splitter->setOrientation(Qt::Vertical);
mp_perf_data_viewer_widget_top = new perf_data_viewer_widget(
mp_perf_data_viewer_widget_top = new qpvt::perf_data_viewer_widget(
&m_perf_data,
perf_data_viewer_widget::metric_cnode_views);
qpvt::perf_data_viewer_widget::metric_cnode_views);
mp_perf_data_viewer_widget_bottom = new perf_data_viewer_widget(
mp_perf_data_viewer_widget_bottom = new qpvt::perf_data_viewer_widget(
&m_perf_data,
perf_data_viewer_widget::correlated_views);
qpvt::perf_data_viewer_widget::correlated_views);
QObject::connect(
mp_perf_data_viewer_widget_top,
&perf_data_viewer_widget::find_correlated_views_requested,
&qpvt::perf_data_viewer_widget::find_correlated_views_requested,
[this] ()
{
find_correlated_views();
......@@ -109,7 +110,7 @@ application::setup_ui
QObject::connect(
mp_perf_data_viewer_widget_top,
&perf_data_viewer_widget::filter_range_from_other_requested,
&qpvt::perf_data_viewer_widget::filter_range_from_other_requested,
[this] ()
{
assign_filter_range_from_other(mp_perf_data_viewer_widget_bottom,
......@@ -118,7 +119,7 @@ application::setup_ui
QObject::connect(
mp_perf_data_viewer_widget_bottom,
&perf_data_viewer_widget::filter_range_from_other_requested,
&qpvt::perf_data_viewer_widget::filter_range_from_other_requested,
[this]()
{
assign_filter_range_from_other(mp_perf_data_viewer_widget_top,
......@@ -194,8 +195,8 @@ application::find_correlated_views
//------------------------------------------------------------------------------
void
application::assign_filter_range_from_other
(perf_data_viewer_widget* p_source_perf_data_viewer_widget,
perf_data_viewer_widget* p_target_perf_data_viewer_widget)
(qpvt::perf_data_viewer_widget* p_source_perf_data_viewer_widget,
qpvt::perf_data_viewer_widget* p_target_perf_data_viewer_widget)
{
auto range = p_source_perf_data_viewer_widget->get_filter_range();
p_target_perf_data_viewer_widget->set_filter_range(range.first, range.second);
......
......@@ -26,16 +26,18 @@
#ifndef PV_APP_APPLICATION_HPP_
#define PV_APP_APPLICATION_HPP_
#include <list>
#include <vector>
#include <pvt/correlated_severity_view.hpp>
#include <pvt/perf_data.hpp>
class QSplitter;
namespace pv_app {
namespace qpvt {
class perf_data_viewer_widget;
}
class perf_data_viewer_widget;
namespace pv_app {
//------------------------------------------------------------------------------
class application
......@@ -49,16 +51,15 @@ private:
void find_correlated_views ();
void assign_filter_range_from_other(
perf_data_viewer_widget* p_source_perf_data_viewer_widget,
perf_data_viewer_widget* p_target_perf_data_viewer_widget);
qpvt::perf_data_viewer_widget* p_source_perf_data_viewer_widget,
qpvt::perf_data_viewer_widget* p_target_perf_data_viewer_widget);
pvt::perf_data m_perf_data;
std::vector<pvt::correlated_severity_view> m_correlated_views;
perf_data_viewer_widget* mp_perf_data_viewer_widget_top = nullptr;
perf_data_viewer_widget* mp_perf_data_viewer_widget_bottom = nullptr;
QSplitter* mp_main_splitter = nullptr;
qpvt::perf_data_viewer_widget* mp_perf_data_viewer_widget_top = nullptr;
qpvt::perf_data_viewer_widget* mp_perf_data_viewer_widget_bottom = nullptr;
QSplitter* mp_main_splitter = nullptr;
};
} // namespace pv_app
......
......@@ -68,6 +68,7 @@ set(SourceFiles
include/pvt/rendering/cube_vertices.hpp
include/pvt/rendering/renderable.hpp
include/pvt/rendering/renderable_axes.hpp
include/pvt/rendering/renderable_cartesian_grid.hpp
include/pvt/rendering/renderable_cartesian_topology.hpp
include/pvt/rendering/renderable_geometry.hpp
include/pvt/rendering/renderable_line_plot.hpp
......@@ -129,6 +130,7 @@ set(SourceFiles
src/rendering/camera.cpp
src/rendering/clickable_scene.cpp
src/rendering/renderable_axes.cpp
src/rendering/renderable_cartesian_grid.cpp
src/rendering/renderable_cartesian_topology.cpp
src/rendering/renderable_geometry.cpp
src/rendering/renderable_line_plot.cpp
......
//------------------------------------------------------------------------------
// pvt performance visualization toolkit
//
// Copyright (c) 2014-2016 RWTH Aachen University, Germany,
// Virtual Reality & Immersive Visualisation Group.
//------------------------------------------------------------------------------
// License
//
// This framework 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 3 of the License, or
// (at your option) any later version.
//
// In the future, we may decide to add a commercial license
// at our own discretion without further notice.
//
// This program 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 program. If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------
#ifndef PVT_RENDERABLE_CARTESIAN_GRID_HPP_
#define PVT_RENDERABLE_CARTESIAN_GRID_HPP_
#include <Eigen/Core>
#include <pvt/api.hpp>
#include <pvt/optional.hpp>
#include <pvt/gl/buffer.hpp>
#include <pvt/rendering/renderable.hpp>
#include <pvt/rendering/vertex_array_shader_pair.hpp>
namespace pvt {
//------------------------------------------------------------------------------
class PVT_API renderable_cartesian_grid
: public renderable, vertex_array_shader_pair
{
public:
renderable_cartesian_grid(const Eigen::Vector3f& size,
const Eigen::Vector3f& block_size);
const Eigen::Vector3f& get_translation() const
{
return m_translation;
}
const Eigen::Vector3f& get_size () const
{
return m_size;
}
const Eigen::Vector3f& get_block_size () const
{
return m_block_size;
}
const Eigen::Vector4f& get_color () const
{
return m_color;
}
void set_size (const Eigen::Vector3f& size )
{
m_size = size;
m_needs_upload = true;
}
void set_block_size (const Eigen::Vector3f& block_size )
{
m_block_size = block_size;
m_needs_upload = true;
}
void set_translation(const Eigen::Vector3f& translation)
{
m_translation = translation;
m_needs_upload = true;
}
void set_color (const Eigen::Vector4f& color )
{
m_color = color;
m_needs_upload = true;
}
void on_setup () override;
void on_render(const camera* p_camera) override;
private:
void upload();
Eigen::Vector3f m_size ;
Eigen::Vector3f m_block_size ;
Eigen::Vector3f m_translation ;
Eigen::Vector4f m_color ;
optional<vertex_buffer> m_vertex_buffer;
optional<vertex_buffer> m_normal_buffer;
bool m_needs_upload = false;
std::size_t m_draw_count = 0 ;
};
} // namespace pvt
#endif // #ifndef PVT_RENDERABLE_CARTESIAN_GRID_HPP_
......@@ -38,6 +38,8 @@ namespace shader_strings {
extern PVT_API std::string axes_vert;
extern PVT_API std::string axes_geom;
extern PVT_API std::string axes_frag;
extern PVT_API std::string cartesian_grid_vert;
extern PVT_API std::string cartesian_grid_frag;
extern PVT_API std::string color_treemap_vert;
extern PVT_API std::string color_treemap_frag;
extern PVT_API std::string cover_vert;
......
......@@ -123,7 +123,6 @@ perf_data_file_native_system_geometry_loader::load_geometry
file >> delimiter;
file >> vertices[i].y();
file >> delimiter;
vertices[i].y() *= -1.0;
}
// Read number of indices.
......
//------------------------------------------------------------------------------
// pvt performance visualization toolkit
//
// Copyright (c) 2014-2016 RWTH Aachen University, Germany,
// Virtual Reality & Immersive Visualisation Group.
//------------------------------------------------------------------------------
// License
//
// This framework 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 3 of the License, or
// (at your option) any later version.
//
// In the future, we may decide to add a commercial license
// at our own discretion without further notice.
//
// This program 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 program. If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------
#include <pvt/gl/shader.hpp>
#include <pvt/rendering/renderable_cartesian_grid.hpp>
#include <pvt/rendering/shader_strings.hpp>
namespace pvt {
//------------------------------------------------------------------------------
renderable_cartesian_grid::renderable_cartesian_grid(
const Eigen::Vector3f& size,
const Eigen::Vector3f& block_size)
: m_size(size)
, m_block_size(block_size)
, m_translation({ 0.0, 0.0, 0.0 })
, m_color({ 0.5, 0.5, 0.5, 1.0 })
{
}
void renderable_cartesian_grid::on_setup()
{
vertex_array_shader_pair::setup();
m_vertex_buffer.emplace();
m_normal_buffer.emplace();
upload();
m_shader_program->attach_shader(vertex_shader (shader_strings::cartesian_grid_vert));
m_shader_program->attach_shader(fragment_shader(shader_strings::cartesian_grid_frag));
m_shader_program->link();
m_shader_program->bind ();
m_vertex_buffer ->bind ();
m_shader_program->set_attribute_buffer ("vertex", 3, GL_FLOAT);
m_shader_program->enable_attribute_array("vertex");
m_vertex_buffer ->unbind();
m_normal_buffer ->bind ();
m_shader_program->set_attribute_buffer ("normal", 3, GL_FLOAT);
m_shader_program->enable_attribute_array("normal");
m_normal_buffer ->unbind();
vertex_array_shader_pair::unbind();
}
void renderable_cartesian_grid::on_render(const camera* p_camera)
{
vertex_array_shader_pair::pre_render(p_camera);
if (m_needs_upload)
{
upload();
m_needs_upload = false;
}
m_shader_program->set_uniform("translation", m_translation);
m_shader_program->set_uniform("color" , m_color );
glDrawArrays(GL_LINES, 0, m_draw_count);
vertex_array_shader_pair::post_render();
}
void renderable_cartesian_grid::upload()
{
// Fill via m_size, m_block_size.
std::vector<float> vertices;
std::vector<float> normals ;
// Front and back face.
for (auto z = 0; z <= m_size.z(); z += m_size.z())
{
for (auto x = 0; x <= m_size.x(); x += m_block_size.x())
{
vertices.insert(vertices.end(), { (float)x, 0 , (float)z, (float)x , m_size.y(), (float)z});
normals .insert(normals .end(), { 0, 0, z == 0 ? 1.0f : -1.0f, 0, 0, z == 0 ? 1.0f : -1.0f });
}
for (auto y = 0; y <= m_size.y(); y += m_block_size.y())
{
vertices.insert(vertices.end(), { 0 , (float)y, (float)z, m_size.x(), (float)y , (float)z});
normals .insert(normals .end(), { 0, 0, z == 0 ? 1.0f : -1.0f, 0, 0, z == 0 ? 1.0f : -1.0f });
}
}
// Left and right.
for (auto x = 0; x <= m_size.x(); x += m_size.x())
{
for (auto y = 0; y <= m_size.y(); y += m_block_size.y())
{
vertices.insert(vertices.end(), { (float)x, (float)y, 0 , (float)x, (float)y , m_size.z()});
normals .insert(normals .end(), { x == 0 ? 1.0f : -1.0f, 0, 0, x == 0 ? 1.0f : -1.0f, 0, 0});
}
for (auto z = 0; z <= m_size.z(); z += m_block_size.z())
{
vertices.insert(vertices.end(), { (float)x, 0 , (float)z, (float)x, m_size.y(), (float)z });
normals .insert(normals .end(), { x == 0 ? 1.0f : -1.0f, 0, 0, x == 0 ? 1.0f : -1.0f, 0, 0});
}
}
// Top and bottom.
for (auto y = 0; y <= m_size.y(); y += m_size.y())
{
for (auto x = 0; x <= m_size.x(); x += m_block_size.x())
{
vertices.insert(vertices.end(), { (float)x, (float)y, 0 , (float)x , (float)y, m_size.z()});
normals .insert(normals .end(), { 0, y == 0 ? 1.0f : -1.0f, 0, 0, y == 0 ? 1.0f : -1.0f, 0});
}
for (auto z = 0; z <= m_size.z(); z += m_block_size.z())
{
vertices.insert(vertices.end(), { 0 , (float)y, (float)z, m_size.x(), (float)y, (float)z });
normals .insert(normals .end(), { 0, y == 0 ? 1.0f : -1.0f, 0, 0, y == 0 ? 1.0f : -1.0f, 0});
}
}
m_vertex_buffer->bind ();
m_vertex_buffer->set_data(vertices.size() * sizeof(float), vertices.data());
m_vertex_buffer->unbind ();
m_normal_buffer->bind ();
m_normal_buffer->set_data(normals .size() * sizeof(float), normals .data());
m_normal_buffer->unbind ();
m_draw_count = vertices.size() / 2;
}
} // namespace pvt
......@@ -119,7 +119,39 @@ void main()
{
fragColor = color;
}
)";
)";
std::string cartesian_grid_vert = R"(\
#version 330 core
uniform mat4 projection ;
uniform mat4 view ;
uniform vec3 translation;
in vec3 vertex ;
in vec3 normal ;
out float visible ;
void main()
{
gl_Position = projection * view * vec4(vertex + translation, 1.0);
vec3 vertex_normal = (view * vec4(normal, 0.0)).xyz;
if(vertex_normal.z >= 0.0)
visible = 1.0;
else
visible = 0.0;
}
)";
std::string cartesian_grid_frag = R"(\
#version 330 core
uniform vec4 color ;
in float visible ;
out vec4 frag_color;
void main()
{
if(visible == 0.0)
discard;
else
frag_color = color;
}
)";
std::string color_treemap_vert = R"(\
#version 400
......
#-------------------------------------------------------------------------------
# pvt performance visualization toolkit
#
# Copyright (c) 2014-2016 RWTH Aachen University, Germany,
# Virtual Reality & Immersive Visualisation Group.
#-------------------------------------------------------------------------------
# License
#
# 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 3 of the License, or
# (at your option) any later version.
#
# In the future, we may decide to add a commercial license
# at our own discretion without further notice.
#
# This program 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 program. If not, see <http://www.gnu.org/licenses/>.
#-------------------------------------------------------------------------------
cmake_minimum_required(VERSION 2.8.11)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
project(qpvt)
include( "./_SourceFiles.cmake" )
# Assign source groups.
include("${CMAKE_SOURCE_DIR}/cmake/assign_source_group.cmake")
assign_source_group(${SourceFiles})
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# C++11
ADD_DEFINITIONS(
-std=c++11
)
include_directories(./include)
#-------------------------------------------------------------------------------
# dependencies
#-------------------------------------------------------------------------------
# Eigen3
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
# FFTW
find_package(FFTW REQUIRED)
include_directories(${FFTW_INCLUDES})
# OpenGL
find_package(OpenGL)
include_directories(${OPENGL_INCLUDE_DIR})
# GLEW (only on Windows for definitions of OpenGL 3.0)
if(WIN32)
find_package(GLEW REQUIRED)
if(GLEW_FOUND)
include_directories(${GLEW_INCLUDE_DIRS})
endif()
endif()
# Qt5
if (DEFINED ENV{QT5_DIR})
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{QT5_DIR})
include_directories(BEFORE $ENV{QT5_DIR}/include)
endif()
set(CMAKE_AUTOMOC ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Widgets REQUIRED)
QT5_ADD_RESOURCES(QT_RCC_SRCS ${RESOURCES})
QT5_WRAP_CPP (QT_MOC_FILES ${QT_FILES_TO_MOC})
QT5_WRAP_UI (QT_UI_SRCS ${UI})
# pvt
include_directories(../pvt/include)
#-------------------------------------------------------------------------------
# library
#-------------------------------------------------------------------------------
# Toggle for shared or static library.
set(BUILD_SHARED OFF CACHE BOOL "Build as a shared library.")
# Create library
if (BUILD_SHARED)
add_library(${PROJECT_NAME} SHARED ${SourceFiles} ./_SourceFiles.cmake)
add_definitions(-DPVT_DLL -DQPVT_DLL -DQPVT_EXPORT)
else ()
add_library(${PROJECT_NAME} ${SourceFiles} ./_SourceFiles.cmake)
endif()
target_link_libraries(${PROJECT_NAME}
${OPENGL_LIBRARIES}
Qt5::Core
Qt5::OpenGL
Qt5::Widgets
pvt
)
if(WIN32)
target_link_libraries(${PROJECT_NAME} ${GLEW_LIBRARY})
endif()
set(${PROJECT_NAME}_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
#-------------------------------------------------------------------------------
# pvt performance visualization toolkit
#
# Copyright (c) 2014-2016 RWTH Aachen University, Germany,
# Virtual Reality & Immersive Visualisation Group.
#-------------------------------------------------------------------------------
# License
#
# 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 3 of the License, or
# (at your option) any later version.
#
# In the future, we may decide to add a commercial license
# at our own discretion without further notice.
#
# This program 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 program. If not, see <http://www.gnu.org/licenses/>.
#-------------------------------------------------------------------------------
set(SourceFiles
include/qpvt/api.hpp
include/qpvt/delegates/directed_variation_glyph_delegate.hpp
include/qpvt/delegates/severity_glyph_delegate.hpp
include/qpvt/models/cnode_impact_list_model.hpp
include/qpvt/models/cnode_tree_model.hpp
include/qpvt/models/correlated_views_model.hpp
include/qpvt/models/metric_tree_model.hpp
include/qpvt/models/perf_data_tree_model.hpp
include/qpvt/utility/camera_tools.hpp