Documentation/Nightly/Developers/Tutorials/MigrationGuide/VTK6-to-VTK7

From SlicerWiki
Jump to: navigation, search
Home < Documentation < Nightly < Developers < Tutorials < MigrationGuide < VTK6-to-VTK7

Transition from VTK6 to VTK7

This section lists categories of code changes necessary to build Slicer with VTK 7.1. Each category has a short description, an example error message, a suggested upgrade path, and references to relevant commits.

Referencing this list might be helpful if Slicer extensions require updates to be compatible with VTK 7.1.

Deprecated the vtkStreamer class hierarchy

VTK has deprecated the vtkStreamer class hierarchy.

Error message similar to:

'VTK_INTEGRATE_FORWARD' : undeclared identifier

Solution:

Replace lines like:

#include "vtkStreamer.h"

with:

#include "vtkHyperStreamline.h"

References:

Deprecated vtkMatrix4x4::operator[] method

VTK has deprecated the vtkMatrix4x4::operator[] method.

Error message similar to:

binary '[' : 'vtkMatrix4x4' does not define this operator or a conversion to a type acceptable to the predefined operator

Solution:

Replace lines like:

(*mat)[i][j] = val;
val = (*mat)[i][j];

with:

mat->SetElement(i, j, val);
val = mat->GetElement(i, j);

References:

Removed vtksys/ios, vtksys/stl compatibility layers

VTK has removed the vtksys/ios and vtksys/stl compatibility layers.

Error message similar to:

Cannot open include file: 'vtksys/ios/iostream': No such file or directory

Solution:

Replace lines like:

#include <vtksys/ios/iostream>
#include <vtksys/ios/sstream>

vtksys_ios::ofstream ofs;

with:

#include <iostream>
#include <sstream>

std::ofstream ofs;

Replace lines like:

#include <vtksys/stl/string>
#include <vtksys/stl/vector>

vtksys_stl::string str;
vtksys_stl::vector<double> vec;

with:

#include <string>
#include <vector>

std::string str;
std::vector<double> vec;

References:

vtkDataArray refactored

VTK has refactored the vtkDataArray class hierarchy.

Error message similar to:

'class XXX’ has no member named ‘SetTupleValue’

Solution:

Replace lines like:

array->GetTupleValue(0, val);
array->SetTupleValue(0, val);
array->InsertTupleValue(i, val);
array->InsertNextTupleValue(val);

with:

array->GetTypedTuple(0, val);
array->SetTypedTuple(0, val);
array->InsertTypedTuple(i, val);
array->InsertNextTypedTuple(val);

Replace lines like:

#include <vtkDataArrayTemplate.h>

<any reference to "vtkDataArrayTemplate">

with:

#include <vtkAOSDataArrayTemplate.h>

<reference to "vtkAOSDataArrayTemplate">

References:

Deprecated pipeline update methods

VTK has deprecated and replaced certain pipeline update methods.

Error message similar to:

'class XXX’ has no member named ‘SetUpdateExtent’

Solution:

Follow suggestions in VTK changelog: https://github.com/Kitware/VTK/blob/master/Documentation/Doxygen/ChangesVTK-7-1.md#pipeline-update-methods

References:

Updated Python wrapping

VTK has updated its Python wrapping to support Python 3 and to wrap more code by default.

Symptoms:

Compile or link error while building a Python-wrapped class or library.

Solution 1:

In CMakeLists.txt, add the WRAP_EXCLUDE_PYTHON property anywhere that the WRAP_EXCLUDE property is defined on source files.

Solution 2:

Replace lines of code like:

//BTX
...
//ETX

with:

#ifndef __VTK_WRAP__
...
#endif // __VTK_WRAP__

References:

vtkMTimeType

VTK introduced a specific type—vtkMTimeType—to be used for vtkObject modified time (MTime).

Error message similar to:

vtkDiffusionTensorGlyph::GetMTime': overriding virtual function return type differs and is not covariant from 'vtkObject::GetMTime'

Solution:

Update code that uses unsigned long or unsigned long int for modified times to use vtkMTimeType.

References:

vtkStandardNewMacro expects vtkObjectFactory.h

Error message similar to:

 expected constructor, destructor, or type conversion before ‘;’ token
   vtkStandardNewMacro(vtkSlicerModelClipLogic);

Solution:

Add:

 #include <vtkObjectFactory.h>