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