1# This file  attempts to  convert an  old pipeline filter  to a  new pipeline
2# filter. Run it with a  -DCLASS=classname it will use that class name
3# for processing
4
5IF (NOT DEFINED CLASS)
6  MESSAGE ("You did not specify the class to process. Usage: cmake -DCLASS=vtkMyClass -P NewPipeConvert" FATAL_ERROR)
7ENDIF ()
8
9FILE (GLOB H_FILE ${CLASS}.h)
10FILE (GLOB CXX_FILE ${CLASS}.cxx)
11
12# read in both files
13FILE (READ ${H_FILE} H_CONTENTS)
14FILE (READ ${CXX_FILE} CXX_CONTENTS)
15
16#================================================================
17# First do the H file
18#================================================================
19
20# convert vtkImageToImageFilter subclasses to subclass off of
21# vtkImageAlgorithm, if it is threaded use threaded one
22IF ("${CXX_CONTENTS}" MATCHES ".*ThreadedExecute.*")
23  STRING (REGEX REPLACE
24    "vtkImageToImageFilter"
25    "vtkThreadedImageAlgorithm"
26    H_CONTENTS "${H_CONTENTS}")
27  STRING (REGEX REPLACE
28    "vtkImageTwoInputFilter"
29    "vtkThreadedImageAlgorithm"
30    H_CONTENTS "${H_CONTENTS}")
31ELSE ()
32  STRING (REGEX REPLACE
33    "vtkImageToImageFilter"
34    "vtkImageAlgorithm"
35    H_CONTENTS "${H_CONTENTS}")
36  STRING (REGEX REPLACE
37    "vtkImageSource"
38    "vtkImageAlgorithm"
39    H_CONTENTS "${H_CONTENTS}")
40  STRING (REGEX REPLACE
41    "vtkImageTwoInputFilter"
42    "vtkImageAlgorithm"
43    H_CONTENTS "${H_CONTENTS}")
44  STRING (REGEX REPLACE
45    "vtkDataSetToImageFilter"
46    "vtkImageAlgorithm"
47    H_CONTENTS "${H_CONTENTS}")
48ENDIF ()
49
50
51# polyDataAlgorithm
52STRING (REGEX REPLACE
53  "vtkPolyDataToPolyDataFilter"
54  "vtkPolyDataAlgorithm"
55  H_CONTENTS "${H_CONTENTS}")
56
57STRING (REGEX REPLACE
58  "ExecuteInformation[ \t]*\\([^,\)]*,[^\)]*\\)"
59  "ExecuteInformation (vtkInformation *, vtkInformationVector **, vtkInformationVector *)"
60  H_CONTENTS "${H_CONTENTS}")
61
62STRING (REGEX REPLACE
63  "void ExecuteInformation[ \t]*\\([ \t]*\\)[ \t\n]*{[^}]*};"
64  ""
65  H_CONTENTS "${H_CONTENTS}")
66
67STRING (REGEX REPLACE
68  "ExecuteInformation[ \t]*\\([ \t]*\\)"
69  "ExecuteInformation (vtkInformation *, vtkInformationVector **, vtkInformationVector *)"
70  H_CONTENTS "${H_CONTENTS}")
71
72STRING (REGEX REPLACE
73  "ComputeInputUpdateExtent[ \t]*\\([^,]*,[^,\)]*\\)"
74  "RequestUpdateExtent (vtkInformation *, vtkInformationVector **, vtkInformationVector *)"
75  H_CONTENTS "${H_CONTENTS}")
76
77FILE (WRITE ${H_FILE} "${H_CONTENTS}")
78
79
80#================================================================
81# Now do the CXX files
82#================================================================
83
84STRING (REGEX REPLACE
85  "::ExecuteInformation[ \t]*\\([^{]*{"
86  "::ExecuteInformation (\n  vtkInformation * vtkNotUsed(request),\n  vtkInformationVector **inputVector,\n  vtkInformationVector *outputVector)\n{"
87  CXX_CONTENTS "${CXX_CONTENTS}")
88
89# add outInfo only once
90IF (NOT "${CXX_CONTENTS}" MATCHES ".*::ExecuteInformation[^{]*{\n  // get the info objects.*")
91  STRING (REGEX REPLACE
92    "::ExecuteInformation[ \t]*\\([^{]*{"
93    "::ExecuteInformation (\n  vtkInformation * vtkNotUsed(request),\n  vtkInformationVector **inputVector,\n  vtkInformationVector *outputVector)\n{\n  // get the info objects\n  vtkInformation* outInfo = outputVector->GetInformationObject(0);\n  vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);\n"
94    CXX_CONTENTS "${CXX_CONTENTS}")
95ENDIF ()
96
97
98STRING (REGEX REPLACE
99  "::ComputeInputUpdateExtent[ \t]*\\([^,\)]*,[^,\)]*\\)"
100  "::RequestUpdateExtent (\n  vtkInformation * vtkNotUsed(request),\n  vtkInformationVector **inputVector,\n  vtkInformationVector *outputVector)"
101  CXX_CONTENTS "${CXX_CONTENTS}")
102
103# add outInfo only once
104IF (NOT "${CXX_CONTENTS}" MATCHES ".*::RequestUpdateExtent[^{]*{\n  // get the info objects.*")
105  STRING (REGEX REPLACE
106    "::RequestUpdateExtent[ \t]*\\([^{]*{"
107    "::RequestUpdateExtent (\n  vtkInformation * vtkNotUsed(request),\n  vtkInformationVector **inputVector,\n  vtkInformationVector *outputVector)\n{\n  // get the info objects\n  vtkInformation* outInfo = outputVector->GetInformationObject(0);\n  vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);\n"
108    CXX_CONTENTS "${CXX_CONTENTS}")
109ENDIF ()
110
111STRING (REGEX REPLACE
112  "this->GetInput\\(\\)->GetWholeExtent\\("
113  "inInfo->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),"
114  CXX_CONTENTS "${CXX_CONTENTS}")
115STRING (REGEX REPLACE
116  "input->GetWholeExtent\\("
117  "inInfo->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),"
118  CXX_CONTENTS "${CXX_CONTENTS}")
119STRING (REGEX REPLACE
120  "inData->GetWholeExtent\\("
121  "inInfo->Get(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),"
122  CXX_CONTENTS "${CXX_CONTENTS}")
123STRING (REGEX REPLACE
124  "this->GetOutput\\(\\)->SetWholeExtent[ \t\n]*\\(([^)]*)"
125  "outInfo->Set(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),\\1,6"
126  CXX_CONTENTS "${CXX_CONTENTS}")
127STRING (REGEX REPLACE
128  "output->SetWholeExtent[ \t\n]*\\(([^)]*)"
129  "outInfo->Set(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),\\1,6"
130  CXX_CONTENTS "${CXX_CONTENTS}")
131STRING (REGEX REPLACE
132  "outData->SetWholeExtent[ \t\n]*\\(([^)]*)"
133  "outInfo->Set(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(),\\1,6"
134  CXX_CONTENTS "${CXX_CONTENTS}")
135
136STRING (REGEX REPLACE
137  "this->GetOutput\\(\\)->SetOrigin[ \t\n]*\\(([^)]*)"
138  "outInfo->Set(vtkDataObject::ORIGIN(),\\1,3"
139  CXX_CONTENTS "${CXX_CONTENTS}")
140STRING (REGEX REPLACE
141  "output->SetOrigin[ \t\n]*\\(([^)]*)"
142  "outInfo->Set(vtkDataObject::ORIGIN(),\\1,3"
143  CXX_CONTENTS "${CXX_CONTENTS}")
144STRING (REGEX REPLACE
145  "outData->SetOrigin[ \t\n]*\\(([^)]*)"
146  "outInfo->Set(vtkDataObject::ORIGIN(),\\1,3"
147  CXX_CONTENTS "${CXX_CONTENTS}")
148
149STRING (REGEX REPLACE
150  "this->GetOutput\\(\\)->SetSpacing[ \t\n]*\\(([^)]*)"
151  "outInfo->Set(vtkDataObject::SPACING(),\\1,3"
152  CXX_CONTENTS "${CXX_CONTENTS}")
153STRING (REGEX REPLACE
154  "output->SetSpacing[ \t\n]*\\(([^)]*)"
155  "outInfo->Set(vtkDataObject::SPACING(),\\1,3"
156  CXX_CONTENTS "${CXX_CONTENTS}")
157STRING (REGEX REPLACE
158  "outData->SetSpacing[ \t\n]*\\(([^)]*)"
159  "outInfo->Set(vtkDataObject::SPACING(),\\1,3"
160  CXX_CONTENTS "${CXX_CONTENTS}")
161
162STRING (REGEX REPLACE
163  "output->SetScalarType[ \t\n]*\\(([^)]*)"
164  "outInfo->Set(vtkDataObject::SCALAR_TYPE(),\\1"
165  CXX_CONTENTS "${CXX_CONTENTS}")
166STRING (REGEX REPLACE
167  "outData->SetScalarType[ \t\n]*\\(([^)]*)"
168  "outInfo->Set(vtkDataObject::SCALAR_TYPE(),\\1"
169  CXX_CONTENTS "${CXX_CONTENTS}")
170STRING (REGEX REPLACE
171  "output->SetNumberOfScalarComponents[ \t\n]*\\(([^)]*)"
172  "outInfo->Set(vtkDataObject::SCALAR_NUMBER_OF_COMPONENTS(),\\1"
173  CXX_CONTENTS "${CXX_CONTENTS}")
174STRING (REGEX REPLACE
175  "outData->SetNumberOfScalarComponents[ \t\n]*\\(([^)]*)"
176  "outInfo->Set(vtkDataObject::SCALAR_NUMBER_OF_COMPONENTS(),\\1"
177  CXX_CONTENTS "${CXX_CONTENTS}")
178
179# add some useful include files if needed
180IF ("${CXX_CONTENTS}" MATCHES ".*vtkInformation.*")
181  # do not do these replacements multiple times
182  IF (NOT "${CXX_CONTENTS}" MATCHES ".*vtkInformation.h.*")
183    STRING (REGEX REPLACE
184      "vtkObjectFactory.h"
185      "vtkInformation.h\"\n#include \"vtkInformationVector.h\"\n#include \"vtkObjectFactory.h\"\n#include \"vtkStreamingDemandDrivenPipeline.h"
186      CXX_CONTENTS "${CXX_CONTENTS}")
187  ENDIF ()
188ENDIF ()
189
190FILE (WRITE ${CXX_FILE} "${CXX_CONTENTS}")
191