[vtkusers] Crash in vtkOpenGLContextDevice2D::ComputeStringBounds when getting bounding rect of vtkAxis
Elvis Stansvik
elvis.stansvik at orexplore.com
Sun Feb 12 06:30:52 EST 2017
Hi all,
In the test case below, I'm trying to get the bounding rect of a vtkAxis in
a vtkChartXY, but I'm getting a crash in the call to GetBoundingRect with
the following backtrace:
#0 vtkOpenGLContextDevice2D::ComputeStringBounds (this=this at entry=0x689ea0,
string=..., bounds=bounds at entry=0x7fffffffcda0)
at
/buildbot/vtk7-builder/build/Rendering/ContextOpenGL2/vtkOpenGLContextDevice2D.cxx:1755
#1 0x00007ffff78454f1 in vtkOpenGLContextDevice2D::ComputeStringBounds
(this=0x689ea0, string=..., bounds=0x7fffffffcda0)
at
/buildbot/vtk7-builder/build/Rendering/ContextOpenGL2/vtkOpenGLContextDevice2D.cxx:1626
#2 0x00007ffff6f2722d in vtkContext2D::ComputeStringBounds
(this=this at entry=0x67e3f0,
string=..., bounds=bounds at entry=0x7fffffffcda0) at
/buildbot/vtk7-builder/build/Rendering/Context2D/vtkContext2D.cxx:645
#3 0x00007ffff7ab4b28 in vtkAxis::GetBoundingRect (this=0x671490,
painter=0x67e3f0) at
/buildbot/vtk7-builder/build/Charts/Core/vtkAxis.cxx:990
#4 0x0000000000402ab1 in main (argc=1, argv=0x7fffffffd038) at
/home/estan/testcrash/main.cpp:50
The reason seems to be that the render window (RenderWindow member) of
vtkOpenGLContextDevice2D is NULL at that point (!).
Am I using the GetBoundingRect API in the wrong way somehow? How can I get
the computed bounding rect for a vtkAxis?
Thanks in advance,
Elvis
main.cpp:
#include <vtkAxis.h>
#include <vtkChartXY.h>
#include <vtkContextScene.h>
#include <vtkContextView.h>
#include <vtkFloatArray.h>
#include <vtkNew.h>
#include <vtkPlot.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkTable.h>
int main(int argc, char *argv[]) {
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> window;
window->AddRenderer(renderer.Get());
vtkNew<vtkRenderWindowInteractor> interactor;
interactor->SetRenderWindow(window.Get());
vtkNew<vtkChartXY> chart;
vtkNew<vtkTable> table;
vtkNew<vtkFloatArray> xArray;
xArray->SetName("X Axis");
table->AddColumn(xArray.Get());
vtkNew<vtkFloatArray> yArray;
yArray->SetName("Y Axis");
table->AddColumn(yArray.Get());
table->SetNumberOfRows(2);
table->SetValue(0, 0, 0);
table->SetValue(0, 1, 0);
table->SetValue(1, 0, 1);
table->SetValue(1, 1, 1);
auto linePlot = chart->AddPlot(vtkChart::LINE);
linePlot->SetInputData(table.Get(), 0, 1);
vtkNew<vtkContextView> view;
view->GetScene()->AddItem(chart.Get());
view->SetRenderWindow(window.Get());
view->SetInteractor(interactor.Get());
window->Render();
// Get bounding rect of the left axis
auto leftAxis = chart->GetAxis(vtkAxis::LEFT);
leftAxis->Update();
auto rect = leftAxis->GetBoundingRect(view->GetContext());
interactor->Start();
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
project(TestCase)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(VTK COMPONENTS
vtkChartsCore
vtkCommonCore
vtkInteractionStyle
vtkRenderingContext2D
vtkRenderingContextOpenGL2
vtkRenderingCore
vtkRenderingFreeType
vtkRenderingOpenGL2
vtkViewsContext2D
)
add_executable(TestCase main.cpp)
target_link_libraries(TestCase PUBLIC
vtkChartsCore
vtkCommonCore
vtkInteractionStyle
vtkRenderingContext2D
vtkRenderingContextOpenGL2
vtkRenderingCore
vtkRenderingFreeType
vtkRenderingOpenGL2
vtkViewsContext2D
)
target_include_directories(TestCase PUBLIC
${VTK_INCLUDE_DIRS}
)
target_compile_definitions(TestCase
PUBLIC
${VTK_DEFINITIONS}
)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170212/1097d07e/attachment.html>
More information about the vtkusers
mailing list