Hi all,<div><br></div><div>I'm trying to process a tensors vtkImageData by a filter that only accept scalars.</div><div>However, I think that vtkAssignAttribute doesn't pass the number of components in the output information.</div>

<div><br></div><div>Indeed, looking at vtkAssignAttribute::RequestInformation(), I don't see how it could pass the "number of components". Maybe it's done later in RequestData, but wouldn't it be too late when vtkAssignAttribute output is connected as an input of another filter?</div>

<div><br></div><div>Here is my pipeline:</div><div><br></div><div>// Create Data:</div><div><div>  VTK_CREATE(vtkImageData,image);</div><div>  image->SetDimensions(2,1,1);</div><div><br></div><div>  VTK_CREATE(vtkFloatArray, tensors);</div>

<div>  tensors->SetName("tensors");</div><div>  tensors->SetNumberOfComponents(9);</div><div>  // 2 tuples, identity matrices</div><div>  tensors->InsertNextTuple9(1.,0.,0.,0.,1.,0.,0.,0.,1.);</div><div>

  tensors->InsertNextTuple9(1.,0.,0.,0.,1.,0.,0.,0.,1.);</div><div><br></div><div>  image->GetPointData()->SetTensors(tensors);</div></div><div><br></div><div>// Move tensors into scalars</div><div><div>  VTK_CREATE(vtkAssignAttribute, assign);</div>

<div>  assign->Assign(vtkDataSetAttributes::TENSORS, vtkDataSetAttributes::SCALARS, vtkAssignAttribute::POINT_DATA);</div><div>  assign->SetInput(image);</div></div><div><br></div><div>// Cast scalars</div><div><div>

  VTK_CREATE(vtkImageCast, cast); // here I use cast but it could be any other image filter that just process scalars</div><div>  cast->SetOutputScalarTypeToDouble();</div><div>  cast->SetInput(imageOut);</div><div>

  cast->Update();</div></div><div><br></div><div>Unfortunately, the output of the cast filter is not a scalar image with 9 components but only 1.</div><div><br></div><div><div>  vtkImageData* imageOut = vtkImageData::SafeDownCast(assign->GetOutput());</div>

<div>  vtkImageData* imageCasted = vtkImageData::SafeDownCast(cast->GetOutput());</div><div>  if (imageCasted->GetPointData()->GetNumberOfComponents() != 9)</div><div>    {</div><div>    cerr << "Input: \n";</div>

<div>    image->GetPointData()->Print(cerr);</div><div>    cerr << "Intermediate: \n";</div><div>    imageOut->GetPointData()->Print(cerr);</div><div>    cerr << "Casted: \n";</div>

<div>    imageCasted->GetPointData()->Print(cerr);</div><div>    }</div></div><div><br></div><div>produces the output:</div><div><br></div><div><div>Input:</div><div>vtkPointData (0398BBF8)</div><div>  Debug: Off</div>

<div>  Modified Time: 29</div><div>  Reference Count: 1</div><div>  Registered Events: (none)</div><div>  Number Of Arrays: 1</div><div>  Array 0 name = tensors</div><div>  Number Of Components: 9</div><div>  Number Of Tuples: 2</div>

<div>  Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )</div><div>  Interpolate Flags: ( 1 1 1 1 1 0 0 1 )</div><div>  Pass Through Flags: ( 1 1 1 1 1 1 1 1 )</div><div>  Scalars: (none)</div><div>  Vectors: (none)</div><div>  Normals: (none)</div>

<div>  TCoords: (none)</div><div>  Tensors:</div><div>    Debug: Off</div><div>    Modified Time: 26</div><div>    Reference Count: 3</div><div>    Registered Events: (none)</div><div>    Name: tensors</div><div>    Data type: float</div>

<div>    Size: 27</div><div>    MaxId: 17</div><div>    NumberOfComponents: 9</div><div>    Information: 00000000</div><div>    Name: tensors</div><div>    Number Of Components: 9</div><div>    Number Of Tuples: 2</div><div>

    Size: 27</div><div>    MaxId: 17</div><div>    LookupTable: (none)</div><div>    Array: 0398C450</div><div>  GlobalIds: (none)</div><div>  PedigreeIds: (none)</div><div>  EdgeFlag: (none)</div><div><br></div><div>Intermediate:</div>

<div>vtkPointData (0398F5B0)</div><div>  Debug: Off</div><div>  Modified Time: 338</div><div>  Reference Count: 1</div><div>  Registered Events: (none)</div><div>  Number Of Arrays: 1</div><div>  Array 0 name = tensors</div>

<div>  Number Of Components: 9</div><div>  Number Of Tuples: 2</div><div>  Copy Tuple Flags: ( 1 1 1 1 1 0 1 1 )</div><div>  Interpolate Flags: ( 1 1 1 1 1 0 0 1 )</div><div>  Pass Through Flags: ( 1 1 1 1 1 1 1 1 )</div>

<div>  Scalars:</div><div>    Debug: Off</div><div>    Modified Time: 26</div><div>    Reference Count: 3</div><div>    Registered Events: (none)</div><div>    Name: tensors</div><div>    Data type: float</div><div>    Size: 27</div>

<div>    MaxId: 17</div><div>    NumberOfComponents: 9</div><div>    Information: 00000000</div><div>    Name: tensors</div><div>    Number Of Components: 9</div><div>    Number Of Tuples: 2</div><div>    Size: 27</div><div>

    MaxId: 17</div><div>    LookupTable: (none)</div><div>    Array: 0398C450</div><div>  Vectors: (none)</div><div>  Normals: (none)</div><div>  TCoords: (none)</div><div>  Tensors:</div><div>    Debug: Off</div><div>    Modified Time: 26</div>

<div>    Reference Count: 3</div><div>    Registered Events: (none)</div><div>    Name: tensors</div><div>    Data type: float</div><div>    Size: 27</div><div>    MaxId: 17</div><div>    NumberOfComponents: 9</div><div>
    Information: 00000000</div>
<div>    Name: tensors</div><div>    Number Of Components: 9</div><div>    Number Of Tuples: 2</div><div>    Size: 27</div><div>    MaxId: 17</div><div>    LookupTable: (none)</div><div>    Array: 0398C450</div><div>  GlobalIds: (none)</div>

<div>  PedigreeIds: (none)</div><div>  EdgeFlag: (none)</div><div><br></div><div>Casted:</div><div>vtkPointData (037C2A30)</div><div>  Debug: Off</div><div>  Modified Time: 394</div><div>  Reference Count: 1</div><div>  Registered Events: (none)</div>

<div>  Number Of Arrays: 1</div><div>  Array 0 name = tensors</div><div>  Number Of Components: 1</div><div>  Number Of Tuples: 2</div><div>  Copy Tuple Flags: ( 1 1 1 1 1 1 1 1 )</div><div>  Interpolate Flags: ( 1 1 1 1 1 1 1 1 )</div>

<div>  Pass Through Flags: ( 1 1 1 1 1 1 1 1 )</div><div>  Scalars:</div><div>    Debug: Off</div><div>    Modified Time: 391</div><div>    Reference Count: 1</div><div>    Registered Events: (none)</div><div>    Name: tensors</div>

<div>    Data type: double</div><div>    Size: 2</div><div>    MaxId: 1</div><div>    NumberOfComponents: 1</div><div>    Information: 00000000</div><div>    Name: tensors</div><div>    Number Of Components: 1</div><div>
    Number Of Tuples: 2</div>
<div>    Size: 2</div><div>    MaxId: 1</div><div>    LookupTable: (none)</div><div>    Array: 037C6DC8</div><div>  Vectors: (none)</div><div>  Normals: (none)</div><div>  TCoords: (none)</div><div>  Tensors: (none)</div>

<div>  GlobalIds: (none)</div><div>  PedigreeIds: (none)</div><div>  EdgeFlag: (none)</div></div><div><br></div><div>So is it a bug or a misuse? Any idea ?</div><div><br></div><div>Thanks,</div><div>Julien.</div><div>p.s. doing the following doesn't help neither.</div>

<div>     assign->Assign("tensors", vtkDataSetAttributes::SCALARS, vtkAssignAttribute::POINT_DATA);</div><div>instead of </div><div>     assign->Assign(vtkDataSetAttributes::TENSORS, vtkDataSetAttributes::SCALARS, vtkAssignAttribute::POINT_DATA);</div>

<div><br></div>