VTK crash with OpenFOAM
This issue was created automatically from an original Mantis Issue. Further discussion may take place here.
The simplest OpenFOAM (version 3.0) example (icoFoam.C) with included the simplest VTK (version 6.3.0) example (Arrow.cxx) crashes with "Floating point exception" in window rendering if OpenFOAM functions are called before VTK.
It is enough, that OpenFOAM variable "args"
Foam::argList args(argc, argv, false);
is defined before renderWindow->Render().
It seems, that OpenFOAM's manager of exceptions intercepts something wrong (as division by 0) in VTK.
Crashing code example simplified as much as possible:
// ============================================================
// VTK includes
// ============================================================
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingContextOpenGL);
#include <vtkArrowSource.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
// ============================================================
// OpenFOAM includes
// ============================================================
#define WM_DP
#include "fvCFD.H"
// ============================================================
// MAIN
// ============================================================
int main ( int argc, char *argv[] )
{
// Create an arrow.
vtkSmartPointer<vtkArrowSource> arrowSource = vtkSmartPointer<vtkArrowSource>::New();
arrowSource->Update();
// Create a mapper and actor
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(arrowSource->GetOutputPort());
mapper->Update();
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// Visualize
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(.1, .2, .3); // Background color dark blue
// ============================================================
// OpenFOAM
// ============================================================
Foam::argList args(argc, argv, false);
// ============================================================
// VTK
// ============================================================
renderWindow->Render();
renderWindowInteractor->Start(); // <-- 'Floating point exception' error in trying to manipulate with arrow
// ============================================================
// END
// ============================================================
return EXIT_SUCCESS;
}