mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-08 11:29:02 +00:00
Create configuration for rendering library
I have noticed at least on my windows machine that source code that uses the rendering package is taking a long time to compile. The rendering library does not rely much on templates and more on virtual methods. Thus, it is a good candidate for moving to a library so that it need be compiled only once. This sets up the configure scripts to create the library. There is also a simple port of one class to the library. More will follow.
This commit is contained in:
parent
e5967cfca8
commit
ea8602d882
@ -41,6 +41,7 @@ set(VTKm_AVAILABLE_COMPONENTS
|
|||||||
EGL
|
EGL
|
||||||
GLFW
|
GLFW
|
||||||
Interop
|
Interop
|
||||||
|
Rendering
|
||||||
TBB
|
TBB
|
||||||
CUDA
|
CUDA
|
||||||
)
|
)
|
||||||
@ -202,6 +203,19 @@ macro(vtkm_configure_component_Interop)
|
|||||||
)
|
)
|
||||||
endmacro(vtkm_configure_component_Interop)
|
endmacro(vtkm_configure_component_Interop)
|
||||||
|
|
||||||
|
macro(vtkm_configure_component_Rendering)
|
||||||
|
if(VTKm_BUILD_RENDERING)
|
||||||
|
vtkm_configure_component_OpenGL()
|
||||||
|
vtkm_configure_component_EGL()
|
||||||
|
vtkm_configure_component_OSMesa()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
vtkm_finish_configure_component(Rendering
|
||||||
|
DEPENDENT_VARIABLES VTKm_BUILD_RENDERING VTKm_Base_FOUND
|
||||||
|
ADD_LIBRARIES vtkm_rendering
|
||||||
|
)
|
||||||
|
endmacro(vtkm_configure_component_Rendering)
|
||||||
|
|
||||||
macro(vtkm_configure_component_TBB)
|
macro(vtkm_configure_component_TBB)
|
||||||
if(VTKm_ENABLE_TBB)
|
if(VTKm_ENABLE_TBB)
|
||||||
vtkm_configure_component_Base()
|
vtkm_configure_component_Base()
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
##============================================================================
|
##============================================================================
|
||||||
|
|
||||||
include(CMakeParseArguments)
|
include(CMakeParseArguments)
|
||||||
|
include(GenerateExportHeader)
|
||||||
|
|
||||||
# Utility to build a kit name from the current directory.
|
# Utility to build a kit name from the current directory.
|
||||||
function(vtkm_get_kit_name kitvar)
|
function(vtkm_get_kit_name kitvar)
|
||||||
@ -552,6 +553,84 @@ function(vtkm_benchmarks device_adapter)
|
|||||||
|
|
||||||
endfunction(vtkm_benchmarks)
|
endfunction(vtkm_benchmarks)
|
||||||
|
|
||||||
|
# Add a VTK-m library. The name of the library will match the "kit" name
|
||||||
|
# (e.g. vtkm_rendering) unless the NAME argument is given.
|
||||||
|
#
|
||||||
|
# vtkm_library(
|
||||||
|
# [NAME <name>]
|
||||||
|
# SOURCES <source_list>
|
||||||
|
# [CUDA]
|
||||||
|
# )
|
||||||
|
function(vtkm_library)
|
||||||
|
set(options CUDA)
|
||||||
|
set(oneValueArgs NAME)
|
||||||
|
set(multiValueArgs SOURCES)
|
||||||
|
cmake_parse_arguments(VTKm_LIB
|
||||||
|
"${options}" "${oneValueArgs}" "${multiValueArgs}"
|
||||||
|
${ARGN}
|
||||||
|
)
|
||||||
|
|
||||||
|
vtkm_get_kit_name(kit dir_prefix)
|
||||||
|
if(VTKm_LIB_NAME)
|
||||||
|
set(lib_name ${VTKm_LIB_NAME})
|
||||||
|
else()
|
||||||
|
set(lib_name ${kit})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(VTKm_LIB_CUDA)
|
||||||
|
vtkm_setup_nvcc_flags(old_nvcc_flags old_cxx_flags)
|
||||||
|
|
||||||
|
# Cuda compiles do not respect target_include_directories
|
||||||
|
cuda_include_directories(${VTKm_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
cuda_add_library(${lib_name} ${VTKm_LIB_SOURCES})
|
||||||
|
|
||||||
|
set(CUDA_NVCC_FLAGS ${old_nvcc_flags})
|
||||||
|
set(CMAKE_CXX_FLAGS ${old_cxx_flags})
|
||||||
|
else()
|
||||||
|
add_library(${lib_name} ${VTKm_LIB_SOURCES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#do it as a property value so we don't pollute the include_directories
|
||||||
|
#for any other targets
|
||||||
|
set_property(TARGET ${lib_name} APPEND PROPERTY
|
||||||
|
INCLUDE_DIRECTORIES ${VTKm_INCLUDE_DIRS} )
|
||||||
|
|
||||||
|
target_link_libraries(${lib_name} ${VTKm_LIBRARIES})
|
||||||
|
|
||||||
|
target_compile_options(${lib_name} PRIVATE ${VTKm_COMPILE_OPTIONS})
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
vtkm_setup_msvc_properties(${lib_name})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(VTKm_EXTRA_COMPILER_WARNINGS)
|
||||||
|
set_property(TARGET ${lib_name}
|
||||||
|
APPEND PROPERTY COMPILE_FLAGS
|
||||||
|
${CMAKE_CXX_FLAGS_WARN_EXTRA}
|
||||||
|
)
|
||||||
|
endif(VTKm_EXTRA_COMPILER_WARNINGS)
|
||||||
|
|
||||||
|
generate_export_header(${lib_name})
|
||||||
|
|
||||||
|
#generate_export_header creates the header in CMAKE_CURRENT_BINARY_DIR.
|
||||||
|
#The build expects it in the install directory.
|
||||||
|
file(COPY
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${lib_name}_export.h
|
||||||
|
DESTINATION
|
||||||
|
${CMAKE_BINARY_DIR}/${VTKm_INSTALL_INCLUDE_DIR}/${dir_prefix}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(TARGETS ${lib_name}
|
||||||
|
ARCHIVE DESTINATION ${VTKm_INSTALL_LIB_DIR}
|
||||||
|
LIBRARY DESTINATION ${VTKm_INSTALL_LIB_DIR}
|
||||||
|
RUNTIME DESTINATION ${VTKm_INSTALL_BIN_DIR}
|
||||||
|
)
|
||||||
|
vtkm_install_headers("${dir_prefix}"
|
||||||
|
${CMAKE_BINARY_DIR}/${VTKm_INSTALL_INCLUDE_DIR}/${dir_prefix}/${lib_name}_export.h
|
||||||
|
)
|
||||||
|
endfunction(vtkm_library)
|
||||||
|
|
||||||
# The Thrust project is not as careful as the VTKm project in avoiding warnings
|
# The Thrust project is not as careful as the VTKm project in avoiding warnings
|
||||||
# on shadow variables and unused arguments. With a real GCC compiler, you
|
# on shadow variables and unused arguments. With a real GCC compiler, you
|
||||||
# can disable these warnings inline, but with something like nvcc, those
|
# can disable these warnings inline, but with something like nvcc, those
|
||||||
|
@ -46,7 +46,9 @@ set(VTKm_PATCH_VERSION 0)
|
|||||||
set(VTKm_VERSION "${VTKm_MAJOR_VERSION}.${VTKm_MINOR_VERSION}.${VTKm_PATCH_VERSION}")
|
set(VTKm_VERSION "${VTKm_MAJOR_VERSION}.${VTKm_MINOR_VERSION}.${VTKm_PATCH_VERSION}")
|
||||||
|
|
||||||
set(VTKm_INSTALL_INCLUDE_DIR "include")
|
set(VTKm_INSTALL_INCLUDE_DIR "include")
|
||||||
set(VTKm_INSTALL_CONFIG_DIR "include")
|
set(VTKm_INSTALL_CONFIG_DIR "lib")
|
||||||
|
set(VTKm_INSTALL_LIB_DIR "lib")
|
||||||
|
set(VTKm_INSTALL_BIN_DIR "bin")
|
||||||
set(VTKm_INSTALL_CMAKE_MODULE_DIR "share/vtkm/cmake")
|
set(VTKm_INSTALL_CMAKE_MODULE_DIR "share/vtkm/cmake")
|
||||||
|
|
||||||
set(VTKm_REQUIRED_BOOST_VERSION "1.48")
|
set(VTKm_REQUIRED_BOOST_VERSION "1.48")
|
||||||
@ -149,7 +151,7 @@ set( EXECUTABLE_OUTPUT_PATH
|
|||||||
|
|
||||||
## Set the directory where the libraries will be stored
|
## Set the directory where the libraries will be stored
|
||||||
set( LIBRARY_OUTPUT_PATH
|
set( LIBRARY_OUTPUT_PATH
|
||||||
${PROJECT_BINARY_DIR}/libs
|
${PROJECT_BINARY_DIR}/lib
|
||||||
CACHE PATH
|
CACHE PATH
|
||||||
"Directory where all the libraries will be stored"
|
"Directory where all the libraries will be stored"
|
||||||
)
|
)
|
||||||
|
177
vtkm/rendering/AxisAnnotation2D.cxx
Normal file
177
vtkm/rendering/AxisAnnotation2D.cxx
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
//============================================================================
|
||||||
|
// Copyright (c) Kitware, Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
// See LICENSE.txt for details.
|
||||||
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
// PURPOSE. See the above copyright notice for more information.
|
||||||
|
//
|
||||||
|
// Copyright 2016 Sandia Corporation.
|
||||||
|
// Copyright 2016 UT-Battelle, LLC.
|
||||||
|
// Copyright 2016 Los Alamos National Security.
|
||||||
|
//
|
||||||
|
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
||||||
|
// the U.S. Government retains certain rights in this software.
|
||||||
|
//
|
||||||
|
// Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
|
||||||
|
// Laboratory (LANL), the U.S. Government retains certain rights in
|
||||||
|
// this software.
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#include <vtkm/rendering/AxisAnnotation2D.h>
|
||||||
|
|
||||||
|
namespace vtkm {
|
||||||
|
namespace rendering {
|
||||||
|
|
||||||
|
AxisAnnotation2D::AxisAnnotation2D()
|
||||||
|
: AxisAnnotation()
|
||||||
|
{
|
||||||
|
this->AlignH = TextAnnotation::HCenter;
|
||||||
|
this->AlignV = TextAnnotation::VCenter;
|
||||||
|
this->FontScale = 0.05f;
|
||||||
|
this->LineWidth = 1.0;
|
||||||
|
this->Color = vtkm::rendering::Color(1,1,1);
|
||||||
|
this->Logarithmic = false;
|
||||||
|
this->MoreOrLessTickAdjustment = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AxisAnnotation2D::~AxisAnnotation2D()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AxisAnnotation2D::SetRangeForAutoTicks(const Range &range)
|
||||||
|
{
|
||||||
|
this->TickRange = range;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (this->Logarithmic)
|
||||||
|
{
|
||||||
|
CalculateTicksLogarithmic(this->TickRange.Min,
|
||||||
|
this->TickRange.Max,
|
||||||
|
false,
|
||||||
|
this->PositionsMajor,
|
||||||
|
this->ProportionsMajor,
|
||||||
|
this->MoreOrLessTickAdjustment);
|
||||||
|
CalculateTicksLogarithmic(this->TickRange.Min,
|
||||||
|
this->TickRange.Max,
|
||||||
|
true,
|
||||||
|
this->PositionsMinor,
|
||||||
|
this->ProportionsMinor,
|
||||||
|
this->MoreOrLessTickAdjustment);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
CalculateTicks(this->TickRange.Min,
|
||||||
|
this->TickRange.Max,
|
||||||
|
false,
|
||||||
|
this->PositionsMajor,
|
||||||
|
this->ProportionsMajor,
|
||||||
|
this->MoreOrLessTickAdjustment);
|
||||||
|
CalculateTicks(this->TickRange.Min,
|
||||||
|
this->TickRange.Max,
|
||||||
|
true,
|
||||||
|
this->PositionsMinor,
|
||||||
|
this->ProportionsMinor,
|
||||||
|
this->MoreOrLessTickAdjustment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AxisAnnotation2D::SetMajorTicks(const std::vector<vtkm::Float64> &pos,
|
||||||
|
const std::vector<vtkm::Float64> &prop)
|
||||||
|
{
|
||||||
|
this->PositionsMajor.clear();
|
||||||
|
this->PositionsMajor.insert(this->PositionsMajor.begin(),
|
||||||
|
pos.begin(),
|
||||||
|
pos.end());
|
||||||
|
|
||||||
|
this->ProportionsMajor.clear();
|
||||||
|
this->ProportionsMajor.insert(this->ProportionsMajor.begin(),
|
||||||
|
prop.begin(),
|
||||||
|
prop.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void AxisAnnotation2D::SetMinorTicks(const std::vector<vtkm::Float64> &pos,
|
||||||
|
const std::vector<vtkm::Float64> &prop)
|
||||||
|
{
|
||||||
|
this->PositionsMinor.clear();
|
||||||
|
this->PositionsMinor.insert(this->PositionsMinor.begin(), pos.begin(), pos.end());
|
||||||
|
|
||||||
|
this->ProportionsMinor.clear();
|
||||||
|
this->ProportionsMinor.insert(this->ProportionsMinor.begin(), prop.begin(), prop.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void AxisAnnotation2D::Render(
|
||||||
|
const vtkm::rendering::Camera &camera,
|
||||||
|
const vtkm::rendering::WorldAnnotator &worldAnnotator,
|
||||||
|
vtkm::rendering::Canvas &canvas)
|
||||||
|
{
|
||||||
|
canvas.AddLine(this->PosX0,this->PosY0, this->PosX1,this->PosY1, this->LineWidth, this->Color);
|
||||||
|
|
||||||
|
// major ticks
|
||||||
|
unsigned int nmajor = (unsigned int)this->ProportionsMajor.size();
|
||||||
|
while (this->Labels.size() < nmajor)
|
||||||
|
{
|
||||||
|
this->Labels.push_back(new ScreenTextAnnotation("test",
|
||||||
|
this->Color,
|
||||||
|
this->FontScale,
|
||||||
|
0,0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::stringstream numberToString;
|
||||||
|
for (unsigned int i=0; i<nmajor; ++i)
|
||||||
|
{
|
||||||
|
vtkm::Float64 xc = this->PosX0 + (this->PosX1-this->PosX0) * this->ProportionsMajor[i];
|
||||||
|
vtkm::Float64 yc = this->PosY0 + (this->PosY1-this->PosY0) * this->ProportionsMajor[i];
|
||||||
|
vtkm::Float64 xs = xc - this->MajorTickSizeX*this->MajorTickOffset;
|
||||||
|
vtkm::Float64 xe = xc + this->MajorTickSizeX*(1. - this->MajorTickOffset);
|
||||||
|
vtkm::Float64 ys = yc - this->MajorTickSizeY*this->MajorTickOffset;
|
||||||
|
vtkm::Float64 ye = yc + this->MajorTickSizeY*(1. - this->MajorTickOffset);
|
||||||
|
|
||||||
|
canvas.AddLine(xs,ys, xe,ye, 1.0, this->Color);
|
||||||
|
|
||||||
|
if (this->MajorTickSizeY == 0)
|
||||||
|
{
|
||||||
|
// slight shift to space between label and tick
|
||||||
|
xs -= (this->MajorTickSizeX<0?-1.:+1.) * this->FontScale * .1;
|
||||||
|
}
|
||||||
|
|
||||||
|
numberToString.str("");
|
||||||
|
numberToString << this->PositionsMajor[i];
|
||||||
|
|
||||||
|
this->Labels[i]->SetText(numberToString.str());
|
||||||
|
//if (fabs(this->PositionsMajor[i]) < 1e-10)
|
||||||
|
// this->Labels[i]->SetText("0");
|
||||||
|
((ScreenTextAnnotation*)(this->Labels[i]))->SetPosition(vtkm::Float32(xs),
|
||||||
|
vtkm::Float32(ys));
|
||||||
|
|
||||||
|
this->Labels[i]->SetAlignment(this->AlignH,this->AlignV);
|
||||||
|
}
|
||||||
|
|
||||||
|
// minor ticks
|
||||||
|
if (this->MinorTickSizeX != 0 || this->MinorTickSizeY != 0)
|
||||||
|
{
|
||||||
|
unsigned int nminor = (unsigned int)this->ProportionsMinor.size();
|
||||||
|
for (unsigned int i=0; i<nminor; ++i)
|
||||||
|
{
|
||||||
|
vtkm::Float64 xc = this->PosX0 + (this->PosX1-this->PosX0) * this->ProportionsMinor[i];
|
||||||
|
vtkm::Float64 yc = this->PosY0 + (this->PosY1-this->PosY0) * this->ProportionsMinor[i];
|
||||||
|
vtkm::Float64 xs = xc - this->MinorTickSizeX*this->MinorTickOffset;
|
||||||
|
vtkm::Float64 xe = xc + this->MinorTickSizeX*(1. - this->MinorTickOffset);
|
||||||
|
vtkm::Float64 ys = yc - this->MinorTickSizeY*this->MinorTickOffset;
|
||||||
|
vtkm::Float64 ye = yc + this->MinorTickSizeY*(1. - this->MinorTickOffset);
|
||||||
|
|
||||||
|
canvas.AddLine(xs,ys, xe,ye, 1.0, this->Color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned int i=0; i<nmajor; ++i)
|
||||||
|
{
|
||||||
|
this->Labels[i]->Render(camera, worldAnnotator, canvas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
} // namespace vtkm::rendering
|
@ -20,13 +20,18 @@
|
|||||||
#ifndef vtk_m_rendering_AxisAnnotation2D_h
|
#ifndef vtk_m_rendering_AxisAnnotation2D_h
|
||||||
#define vtk_m_rendering_AxisAnnotation2D_h
|
#define vtk_m_rendering_AxisAnnotation2D_h
|
||||||
|
|
||||||
|
#include <vtkm/rendering/vtkm_rendering_export.h>
|
||||||
|
|
||||||
|
#include <vtkm/rendering/AxisAnnotation.h>
|
||||||
|
#include <vtkm/rendering/Color.h>
|
||||||
|
|
||||||
|
#include <vtkm/Range.h>
|
||||||
|
|
||||||
#include <vtkm/cont/DataSet.h>
|
#include <vtkm/cont/DataSet.h>
|
||||||
#include <vtkm/rendering/Camera.h>
|
#include <vtkm/rendering/Camera.h>
|
||||||
#include <vtkm/rendering/Canvas.h>
|
#include <vtkm/rendering/Canvas.h>
|
||||||
#include <vtkm/rendering/Color.h>
|
|
||||||
#include <vtkm/rendering/Scene.h>
|
#include <vtkm/rendering/Scene.h>
|
||||||
#include <vtkm/rendering/WorldAnnotator.h>
|
#include <vtkm/rendering/WorldAnnotator.h>
|
||||||
#include <vtkm/rendering/AxisAnnotation.h>
|
|
||||||
#include <vtkm/rendering/TextAnnotation.h>
|
#include <vtkm/rendering/TextAnnotation.h>
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -37,198 +42,127 @@ namespace rendering {
|
|||||||
class AxisAnnotation2D : public AxisAnnotation
|
class AxisAnnotation2D : public AxisAnnotation
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
vtkm::Float64 maj_tx, maj_ty, maj_toff;
|
vtkm::Float64 MajorTickSizeX, MajorTickSizeY, MajorTickOffset;
|
||||||
vtkm::Float64 min_tx, min_ty, min_toff;
|
vtkm::Float64 MinorTickSizeX, MinorTickSizeY, MinorTickOffset;
|
||||||
vtkm::Float64 x0, y0, x1, y1;
|
vtkm::Float64 PosX0, PosY0, PosX1, PosY1;
|
||||||
vtkm::Float64 lower, upper;
|
vtkm::Range TickRange;
|
||||||
vtkm::Float32 fontscale;
|
vtkm::Float32 FontScale;
|
||||||
vtkm::Float32 linewidth;
|
vtkm::Float32 LineWidth;
|
||||||
vtkm::rendering::Color color;
|
vtkm::rendering::Color Color;
|
||||||
bool logarithmic;
|
bool Logarithmic;
|
||||||
|
|
||||||
TextAnnotation::HorizontalAlignment halign;
|
TextAnnotation::HorizontalAlignment AlignH;
|
||||||
TextAnnotation::VerticalAlignment valign;
|
TextAnnotation::VerticalAlignment AlignV;
|
||||||
std::vector<TextAnnotation*> labels;
|
std::vector<TextAnnotation*> Labels;
|
||||||
|
|
||||||
|
|
||||||
std::vector<vtkm::Float64> maj_positions;
|
std::vector<vtkm::Float64> PositionsMajor;
|
||||||
std::vector<vtkm::Float64> maj_proportions;
|
std::vector<vtkm::Float64> ProportionsMajor;
|
||||||
|
|
||||||
std::vector<vtkm::Float64> min_positions;
|
std::vector<vtkm::Float64> PositionsMinor;
|
||||||
std::vector<vtkm::Float64> min_proportions;
|
std::vector<vtkm::Float64> ProportionsMinor;
|
||||||
|
|
||||||
int moreOrLessTickAdjustment;
|
int MoreOrLessTickAdjustment;
|
||||||
public:
|
public:
|
||||||
AxisAnnotation2D() : AxisAnnotation()
|
VTKM_RENDERING_EXPORT
|
||||||
{
|
AxisAnnotation2D();
|
||||||
halign = TextAnnotation::HCenter;
|
|
||||||
valign = TextAnnotation::VCenter;
|
VTKM_RENDERING_EXPORT
|
||||||
fontscale = 0.05f;
|
virtual ~AxisAnnotation2D();
|
||||||
linewidth = 1.0;
|
|
||||||
color = Color(1,1,1);
|
|
||||||
logarithmic = false;
|
|
||||||
moreOrLessTickAdjustment = 0;
|
|
||||||
}
|
|
||||||
virtual ~AxisAnnotation2D()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#if 0
|
#if 0
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetLogarithmic(bool l)
|
void SetLogarithmic(bool l)
|
||||||
{
|
{
|
||||||
logarithmic = l;
|
this->Logarithmic = l;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetMoreOrLessTickAdjustment(int offset)
|
void SetMoreOrLessTickAdjustment(int offset)
|
||||||
{
|
{
|
||||||
moreOrLessTickAdjustment = offset;
|
this->MoreOrLessTickAdjustment = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetColor(vtkm::rendering::Color c)
|
void SetColor(vtkm::rendering::Color c)
|
||||||
{
|
{
|
||||||
color = c;
|
this->Color = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetLineWidth(vtkm::Float32 lw)
|
void SetLineWidth(vtkm::Float32 lw)
|
||||||
{
|
{
|
||||||
linewidth = lw;
|
this->LineWidth = lw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetMajorTickSize(vtkm::Float64 xlen, vtkm::Float64 ylen, vtkm::Float64 offset)
|
void SetMajorTickSize(vtkm::Float64 xlen, vtkm::Float64 ylen, vtkm::Float64 offset)
|
||||||
{
|
{
|
||||||
/// offset of 0 means the tick is inside the frame
|
/// offset of 0 means the tick is inside the frame
|
||||||
/// offset of 1 means the tick is outside the frame
|
/// offset of 1 means the tick is outside the frame
|
||||||
/// offset of 0.5 means the tick is centered on the frame
|
/// offset of 0.5 means the tick is centered on the frame
|
||||||
maj_tx=xlen;
|
this->MajorTickSizeX=xlen;
|
||||||
maj_ty=ylen;
|
this->MajorTickSizeY=ylen;
|
||||||
maj_toff = offset;
|
this->MajorTickOffset = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetMinorTickSize(vtkm::Float64 xlen, vtkm::Float64 ylen, vtkm::Float64 offset)
|
void SetMinorTickSize(vtkm::Float64 xlen, vtkm::Float64 ylen, vtkm::Float64 offset)
|
||||||
{
|
{
|
||||||
min_tx=xlen;
|
this->MinorTickSizeX=xlen;
|
||||||
min_ty=ylen;
|
this->MinorTickSizeY=ylen;
|
||||||
min_toff = offset;
|
this->MinorTickOffset = offset;
|
||||||
}
|
}
|
||||||
///\todo: rename, since it might be screen OR world position?
|
|
||||||
void SetScreenPosition(vtkm::Float64 x0_, vtkm::Float64 y0_,
|
|
||||||
vtkm::Float64 x1_, vtkm::Float64 y1_)
|
|
||||||
{
|
|
||||||
x0 = x0_;
|
|
||||||
y0 = y0_;
|
|
||||||
|
|
||||||
x1 = x1_;
|
///\todo: rename, since it might be screen OR world position?
|
||||||
y1 = y1_;
|
VTKM_RENDERING_EXPORT
|
||||||
|
void SetScreenPosition(vtkm::Float64 x0, vtkm::Float64 y0,
|
||||||
|
vtkm::Float64 x1, vtkm::Float64 y1)
|
||||||
|
{
|
||||||
|
this->PosX0 = x0;
|
||||||
|
this->PosY0 = y0;
|
||||||
|
|
||||||
|
this->PosX1 = x1;
|
||||||
|
this->PosY1 = y1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetLabelAlignment(TextAnnotation::HorizontalAlignment h,
|
void SetLabelAlignment(TextAnnotation::HorizontalAlignment h,
|
||||||
TextAnnotation::VerticalAlignment v)
|
TextAnnotation::VerticalAlignment v)
|
||||||
{
|
{
|
||||||
halign = h;
|
this->AlignH = h;
|
||||||
valign = v;
|
this->AlignV = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
void SetLabelFontScale(vtkm::Float32 s)
|
void SetLabelFontScale(vtkm::Float32 s)
|
||||||
{
|
{
|
||||||
fontscale = s;
|
this->FontScale = s;
|
||||||
for (unsigned int i=0; i<labels.size(); i++)
|
for (unsigned int i=0; i<this->Labels.size(); i++)
|
||||||
labels[i]->SetScale(s);
|
this->Labels[i]->SetScale(s);
|
||||||
}
|
}
|
||||||
void SetRangeForAutoTicks(vtkm::Float64 l, vtkm::Float64 u)
|
|
||||||
{
|
|
||||||
lower = l;
|
|
||||||
upper = u;
|
|
||||||
|
|
||||||
#if 0
|
VTKM_RENDERING_EXPORT
|
||||||
if (logarithmic)
|
void SetRangeForAutoTicks(const vtkm::Range &range);
|
||||||
{
|
VTKM_RENDERING_EXPORT
|
||||||
CalculateTicksLogarithmic(lower, upper, false, maj_positions, maj_proportions, moreOrLessTickAdjustment);
|
void SetRangeForAutoTicks(vtkm::Float64 lower, vtkm::Float64 upper)
|
||||||
CalculateTicksLogarithmic(lower, upper, true, min_positions, min_proportions, moreOrLessTickAdjustment);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
CalculateTicks(lower, upper, false, maj_positions, maj_proportions, moreOrLessTickAdjustment);
|
|
||||||
CalculateTicks(lower, upper, true, min_positions, min_proportions, moreOrLessTickAdjustment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void SetMajorTicks(const std::vector<vtkm::Float64> &pos, const std::vector<vtkm::Float64> &prop)
|
|
||||||
{
|
{
|
||||||
maj_positions.clear();
|
this->SetRangeForAutoTicks(vtkm::Range(lower, upper));
|
||||||
maj_positions.insert(maj_positions.begin(), pos.begin(), pos.end());
|
|
||||||
|
|
||||||
maj_proportions.clear();
|
|
||||||
maj_proportions.insert(maj_proportions.begin(), prop.begin(), prop.end());
|
|
||||||
}
|
}
|
||||||
void SetMinorTicks(const std::vector<vtkm::Float64> &pos, const std::vector<vtkm::Float64> &prop)
|
|
||||||
{
|
|
||||||
min_positions.clear();
|
|
||||||
min_positions.insert(min_positions.begin(), pos.begin(), pos.end());
|
|
||||||
|
|
||||||
min_proportions.clear();
|
VTKM_RENDERING_EXPORT
|
||||||
min_proportions.insert(min_proportions.begin(), prop.begin(), prop.end());
|
void SetMajorTicks(const std::vector<vtkm::Float64> &pos,
|
||||||
}
|
const std::vector<vtkm::Float64> &prop);
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
|
void SetMinorTicks(const std::vector<vtkm::Float64> &pos,
|
||||||
|
const std::vector<vtkm::Float64> &prop);
|
||||||
|
|
||||||
|
VTKM_RENDERING_EXPORT
|
||||||
virtual void Render(const vtkm::rendering::Camera &camera,
|
virtual void Render(const vtkm::rendering::Camera &camera,
|
||||||
const vtkm::rendering::WorldAnnotator &worldAnnotator,
|
const vtkm::rendering::WorldAnnotator &worldAnnotator,
|
||||||
vtkm::rendering::Canvas &canvas)
|
vtkm::rendering::Canvas &canvas);
|
||||||
{
|
|
||||||
canvas.AddLine(x0,y0, x1,y1, linewidth, color);
|
|
||||||
|
|
||||||
// major ticks
|
|
||||||
unsigned int nmajor = (unsigned int)maj_proportions.size();
|
|
||||||
while (labels.size() < nmajor)
|
|
||||||
{
|
|
||||||
labels.push_back(new ScreenTextAnnotation("test",
|
|
||||||
color,
|
|
||||||
fontscale,
|
|
||||||
0,0, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::stringstream numberToString;
|
|
||||||
for (unsigned int i=0; i<nmajor; ++i)
|
|
||||||
{
|
|
||||||
vtkm::Float64 xc = x0 + (x1-x0) * maj_proportions[i];
|
|
||||||
vtkm::Float64 yc = y0 + (y1-y0) * maj_proportions[i];
|
|
||||||
vtkm::Float64 xs = xc - maj_tx*maj_toff;
|
|
||||||
vtkm::Float64 xe = xc + maj_tx*(1. - maj_toff);
|
|
||||||
vtkm::Float64 ys = yc - maj_ty*maj_toff;
|
|
||||||
vtkm::Float64 ye = yc + maj_ty*(1. - maj_toff);
|
|
||||||
|
|
||||||
canvas.AddLine(xs,ys, xe,ye, 1.0, color);
|
|
||||||
|
|
||||||
if (maj_ty == 0)
|
|
||||||
{
|
|
||||||
// slight shift to space between label and tick
|
|
||||||
xs -= (maj_tx<0?-1.:+1.) * fontscale * .1;
|
|
||||||
}
|
|
||||||
|
|
||||||
numberToString.str("");
|
|
||||||
numberToString << maj_positions[i];
|
|
||||||
|
|
||||||
labels[i]->SetText(numberToString.str());
|
|
||||||
//if (fabs(maj_positions[i]) < 1e-10)
|
|
||||||
// labels[i]->SetText("0");
|
|
||||||
((ScreenTextAnnotation*)(labels[i]))->SetPosition(vtkm::Float32(xs),
|
|
||||||
vtkm::Float32(ys));
|
|
||||||
|
|
||||||
labels[i]->SetAlignment(halign,valign);
|
|
||||||
}
|
|
||||||
|
|
||||||
// minor ticks
|
|
||||||
if (min_tx != 0 || min_ty != 0)
|
|
||||||
{
|
|
||||||
unsigned int nminor = (unsigned int)min_proportions.size();
|
|
||||||
for (unsigned int i=0; i<nminor; ++i)
|
|
||||||
{
|
|
||||||
vtkm::Float64 xc = x0 + (x1-x0) * min_proportions[i];
|
|
||||||
vtkm::Float64 yc = y0 + (y1-y0) * min_proportions[i];
|
|
||||||
vtkm::Float64 xs = xc - min_tx*min_toff;
|
|
||||||
vtkm::Float64 xe = xc + min_tx*(1. - min_toff);
|
|
||||||
vtkm::Float64 ys = yc - min_ty*min_toff;
|
|
||||||
vtkm::Float64 ye = yc + min_ty*(1. - min_toff);
|
|
||||||
|
|
||||||
canvas.AddLine(xs,ys, xe,ye, 1.0, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned int i=0; i<nmajor; ++i)
|
|
||||||
{
|
|
||||||
labels[i]->Render(camera, worldAnnotator, canvas);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}} //namespace vtkm::rendering
|
}} //namespace vtkm::rendering
|
||||||
|
@ -43,6 +43,10 @@ set(headers
|
|||||||
WorldAnnotator.h
|
WorldAnnotator.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(sources
|
||||||
|
AxisAnnotation2D.cxx
|
||||||
|
)
|
||||||
|
|
||||||
set(opengl_headers
|
set(opengl_headers
|
||||||
CanvasGL.h
|
CanvasGL.h
|
||||||
MapperGL.h
|
MapperGL.h
|
||||||
@ -80,6 +84,11 @@ endif()
|
|||||||
|
|
||||||
vtkm_declare_headers(${headers})
|
vtkm_declare_headers(${headers})
|
||||||
|
|
||||||
|
vtkm_library(SOURCES ${sources})
|
||||||
|
|
||||||
|
# Subclasses need rendering library
|
||||||
|
vtkm_configure_component_Rendering()
|
||||||
|
|
||||||
add_subdirectory(internal)
|
add_subdirectory(internal)
|
||||||
add_subdirectory(raytracing)
|
add_subdirectory(raytracing)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user