VTK/VTK6/Migration/WikiExamples: Difference between revisions
(5 intermediate revisions by the same user not shown) | |||
Line 39: | Line 39: | ||
In addition two bugs in VTK6 were found: | In addition two bugs in VTK6 were found: | ||
* VTK_MAJOR_VERSION was still set at 5, | * VTK_MAJOR_VERSION was still set at 5, VTK_MINOR_VERSION at 9. A patch to set them to 6 and 0 was submitted. | ||
* Several image related examples were failing. Some image source's did not set the origin and spacing. Downstream filters failed in a variety of ways since the spacing and origin info did not exist. | * Several image related examples were failing. Some image source's did not set the origin and spacing. Downstream filters failed in a variety of ways since the spacing and origin info did not exist. | ||
For example code like this: | For example code like this: | ||
Line 53: | Line 53: | ||
==Improve== | ==Improve== | ||
'''NOTE: Recent changes to VTK6 require ''#include <vtkVersion.h>'' to use the VTK_xxx_VERSION preprocessor directives.''' | |||
303 files were manually edited. API changes were surrounded by | 303 files were manually edited. API changes were surrounded by | ||
Line 62: | Line 64: | ||
Here are some representative changes: | Here are some representative changes: | ||
* SetInput | * '''SetInput''' | ||
<pre> | <pre> | ||
#if VTK_MAJOR_VERSION <= 5 | #if VTK_MAJOR_VERSION <= 5 | ||
Line 73: | Line 75: | ||
</pre> | </pre> | ||
* AddInput | * '''AddInput''' | ||
<pre> | <pre> | ||
#if VTK_MAJOR_VERSION <= 5 | #if VTK_MAJOR_VERSION <= 5 | ||
Line 84: | Line 86: | ||
</pre> | </pre> | ||
* GetProducerPort | * '''GetProducerPort''' | ||
<pre> | <pre> | ||
#if VTK_MAJOR_VERSION <= 5 | #if VTK_MAJOR_VERSION <= 5 | ||
sourceMapper->SetInputConnection(source->GetProducerPort()); | sourceMapper->SetInputConnection(source->GetProducerPort()); | ||
#else | #else | ||
// Make sure the filter that produced source is up-to-date | |||
sourceMapper->SetInputData(source); | sourceMapper->SetInputData(source); | ||
#endif | #endif | ||
</pre> | </pre> | ||
* AllocateScalars | * '''AllocateScalars''' | ||
<pre> | <pre> | ||
#if VTK_MAJOR_VERSION <= 5 | #if VTK_MAJOR_VERSION <= 5 | ||
image->SetNumberOfScalarComponents(1); | image->SetNumberOfScalarComponents(1); | ||
image->SetScalarTypeToInt(); | image->SetScalarTypeToInt(); | ||
image->AllocateScalars(); | |||
#else | #else | ||
image->AllocateScalars(VTK_INT,1); | image->AllocateScalars(VTK_INT,1); | ||
Line 103: | Line 107: | ||
</pre> | </pre> | ||
* GetWholeExtent | * '''GetWholeExtent''' | ||
<pre> | <pre> | ||
#if VTK_MAJOR_VERSION <= 5 | #if VTK_MAJOR_VERSION <= 5 | ||
Line 112: | Line 116: | ||
jPEGReader->GetOutputInformation(0)->Get( | jPEGReader->GetOutputInformation(0)->Get( | ||
vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())); | vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())); | ||
#endif | |||
</pre> | |||
* '''PLOT3DReader''' | |||
<pre> | |||
#if VTK_MAJOR_VERSION <= 5 | |||
#include <vtkPLOT3DReader.h> | |||
#else | |||
#include <vtkMultiBlockPLOT3DReader.h> | |||
#include <vtkMultiBlockDataSet.h> | |||
#endif | |||
... | |||
#if VTK_MAJOR_VERSION <= 5 | |||
vtkSmartPointer<vtkPLOT3DReader> reader = | |||
vtkSmartPointer<vtkPLOT3DReader>::New(); | |||
#else | |||
vtkSmartPointer<vtkMultiBlockPLOT3DReader> reader = | |||
vtkSmartPointer<vtkMultiBlockPLOT3DReader>::New(); | |||
#endif | |||
... | |||
#if VTK_MAJOR_VERSION <= 5 | |||
filter->SetInputConnection(reader->GetOutputPort()); | |||
#else | |||
filter->SetInputData(reader->GetOutput()->GetBlock(0)); | |||
#endif | #endif | ||
</pre> | </pre> |
Latest revision as of 18:24, 26 April 2012
VTK6 represents a major upgrade to VTK. VTK6 makes several API changes and also removes some deprecated API's.
This experiment measures the impact of VTK6 API changes to the VTK Wiki Examples.
This experiment uses the DMAIC methodology of the Six Sigma management process to "Define", "Measure", "Analyze", "Improve" and "Control" valgrind defects in VTK.
The basic methodology (from Wikipedia) consists of the following five steps:
- Define process goals that are consistent with customer demands and VTK's strategy.
- Measure key aspects of the current process and collect relevant data.
- Analyze the data to verify cause-and-effect relationships. Determine what the relationships are, and attempt to ensure that all factors have been considered.
- Improve or optimize the process.
- Control to ensure that any deviations from target are corrected before they result in defects. Set up pilot runs to establish software quality, move on to production, set up control mechanisms and continuously monitor the process.
Define
Convert the VTK Wiki Examples to VTK6 while still maintaining VTK5 compatibility.
Measure
As part of NA-MIC Project Week, the VTK Wiki Examples were built against VTK6. There are 564 wiki examples.
- 661 compilation errors
- 303 files had errors
Analyze
The VTK6 API changes accounted for 349 errors in 203 examples. The errors included the following:
- 380 SetInput missing
- about 100 of these were due to using SetInput/GetOutput rather than SetInputConnection/GetOutputPort
- 138 GetProducerPort missing
- 51 AllocateScalars missing
- 23 Add Input missing
- 11 SetSource missing
- 6 Update missing
- 4 SetStencil missing
- 4 SetVectorInput missing
- 2 SetMagnitudeInput missing
- 2 SetImageInput missing
- 2 GetWholeExtent missing
- 2 vtkPLOT3DReader missing
In addition two bugs in VTK6 were found:
- VTK_MAJOR_VERSION was still set at 5, VTK_MINOR_VERSION at 9. A patch to set them to 6 and 0 was submitted.
- Several image related examples were failing. Some image source's did not set the origin and spacing. Downstream filters failed in a variety of ways since the spacing and origin info did not exist.
For example code like this: double *spacing = inInfo->Get(vtkDataObject::SPACING()); returned a NULL pointer. and code like this: double origin[3]; inInfo->Get(vtkDataObject::ORIGIN(), origin); left origin uninitialized
Improve
NOTE: Recent changes to VTK6 require #include <vtkVersion.h> to use the VTK_xxx_VERSION preprocessor directives.
303 files were manually edited. API changes were surrounded by
#if VTK_MAJOR_VERSION <= 5 VTK5 code... #else VTK6 code... #endif
Here are some representative changes:
- SetInput
#if VTK_MAJOR_VERSION <= 5 delaunay->SetInput(aPolyData); delaunay->SetSource(boundary); #else delaunay->SetInputData(aPolyData); delaunay->SetSourceData(boundary); #endif
- AddInput
#if VTK_MAJOR_VERSION <= 5 appendFilter->AddInput(polydata); appendFilter->AddInput(ug); #else appendFilter->AddInputData(polydata); appendFilter->AddInputData(ug); #endif
- GetProducerPort
#if VTK_MAJOR_VERSION <= 5 sourceMapper->SetInputConnection(source->GetProducerPort()); #else // Make sure the filter that produced source is up-to-date sourceMapper->SetInputData(source); #endif
- AllocateScalars
#if VTK_MAJOR_VERSION <= 5 image->SetNumberOfScalarComponents(1); image->SetScalarTypeToInt(); image->AllocateScalars(); #else image->AllocateScalars(VTK_INT,1); #endif
- GetWholeExtent
#if VTK_MAJOR_VERSION <= 5 imageClip->SetOutputWholeExtent(jPEGReader->GetOutput()->GetWholeExtent()); #else jPEGReader->UpdateInformation(); imageClip->SetOutputWholeExtent( jPEGReader->GetOutputInformation(0)->Get( vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT())); #endif
- PLOT3DReader
#if VTK_MAJOR_VERSION <= 5 #include <vtkPLOT3DReader.h> #else #include <vtkMultiBlockPLOT3DReader.h> #include <vtkMultiBlockDataSet.h> #endif ... #if VTK_MAJOR_VERSION <= 5 vtkSmartPointer<vtkPLOT3DReader> reader = vtkSmartPointer<vtkPLOT3DReader>::New(); #else vtkSmartPointer<vtkMultiBlockPLOT3DReader> reader = vtkSmartPointer<vtkMultiBlockPLOT3DReader>::New(); #endif ... #if VTK_MAJOR_VERSION <= 5 filter->SetInputConnection(reader->GetOutputPort()); #else filter->SetInputData(reader->GetOutput()->GetBlock(0)); #endif
Control
Once the changes are reflected on the Wiki, a nightly dashboard built against VTK6 will catch any new API change issues.