KW00001404: Major overhaul of vtkAppendFilter
The previous behavior of vtkAppendFilter was to append data arrays set as attributes and then only secondarily append data arrays by name. This could lead to unexpected behavior as illustrated in the following scenario: - set two datasets are set as inputs to the filter - each dataset has a point array named "A" and another named "B" - in the first input, "A" is set as the scalar attribute - in the second input, "B" is set as the scalar attribute Previously, the output of vtkAppendFilter would append the scalar attribute array "A" from the first input to the scalar attribute array "B" from the second, storing the result in an array named "A" and setting that as the scalar attribute in the output dataset. If you reversed the order of inputs, the resulting scalar attribute array would be named "B" and the output array would have the contents of "B" followed by the contents of "A". This patch changes the behavior of the vtkAppendFilter to merge arrays primarily by name, which is more in line with how the rest of VTK works. In the scenario above, the "A" arrays from the input are appended together and the "B" arrays from the input are appended together. Because "A" is set as the scalar attribute in one input and "B" is set as the scalar in the other, the inputs disagree on which array is the scalar attribute, so in the output no scalar attribute is set. More broadly, if both inputs have arrays with the same name, number of components, and data type set as an attribute, then the result of appending those attribute arrays from the inputs will be set as the attribute in the output. If any of those conditions are not met, then the attribute will not be set in the output. A somewhat special case is possible where the scalar attribute in the inputs is set to an array with NULL name. If all inputs have their scalar attribute set to an array with a NULL name, then the output's scalar attribute will be an array that is the result of appending the input scalar attribute arrays into a new array with a NULL name. This patch also contributes a fairly comprehensive test for the vtkAppendFilter. Finally, this patch makes the vtkDataSetAttributes::SetAttribute() method public instead of private. Change-Id: Id3914957b65bfcce346968dc8fba6a3df0861cd8
Showing with 1048 additions and 459 deletions
This diff is collapsed.