# Can't Add scalar data array to polydata.

**URL:** https://discourse.vtk.org/t/cant-add-scalar-data-array-to-polydata/13252
**Category:** Development
**Created:** [February 5, 2024, 12:32am UTC](https://discourse.vtk.org/t/cant-add-scalar-data-array-to-polydata/13252 "2024-02-05T00:32:35Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![Rafael\_Scatena](https://discourse.vtk.org/user_avatar/discourse.vtk.org/rafael_scatena/32/7820_2.png) [@Rafael\_Scatena](https://discourse.vtk.org/u/Rafael_Scatena)
#### Post date: [February 5, 2024, 12:32am UTC](https://discourse.vtk.org/t/cant-add-scalar-data-array-to-polydata/13252/1 "2024-02-05T00:32:36Z")

</div>

Hello,

I’ve been using a function to try to add a material scalar array to a mesh but have not been able to do it.

Thank you,

```
     vtkSmartPointer<vtkPolyData> 
   SegmentationIO::Add_Material(vtkSmartPointer<vtkPolyData> polyData, int material, 
   vtkSmartPointer<vtkIntArray> MATERIAL){
      
     
      int numberOfTriangles;
      
      numberOfTriangles = polyData->GetNumberOfCells();
  MATERIAL->SetNumberOfValues(numberOfTriangles);

  // Assign some example integer values to each triangle
  for (int i = 0; i < numberOfTriangles; ++i) {MATERIAL->SetValue(i, material);}
  
  // Add the attributes to the cell data
  polyData->GetCellData()->AddArray(MATERIAL);
  std::cerr << "Array OK" << std::endl;  
    
    return polyData;
    }

  // ADD MATERIAL
   
  vtkSmartPointer<vtkIntArray> MATERIAL = vtkSmartPointer<vtkIntArray>::New();
 
  vtkSmartPointer<vtkPolyData> material_mesh;  	  
  
  material_mesh = Process.Add_Material(rotated_mesh,threshold, MATERIAL);

```

---

<div class="post-metadata">

### Author: ![Rafael\_Scatena](https://discourse.vtk.org/user_avatar/discourse.vtk.org/rafael_scatena/32/7820_2.png) [@Rafael\_Scatena](https://discourse.vtk.org/u/Rafael_Scatena)
#### Post date: [February 5, 2024, 10:07pm UTC](https://discourse.vtk.org/t/cant-add-scalar-data-array-to-polydata/13252/2 "2024-02-05T22:07:46Z")

</div>

This worked fine:

```
    vtkSmartPointer<vtkPolyData> SegmentationIO::Add_Material(vtkSmartPointer<vtkPolyData> polyData, int material){
      
      vtkSmartPointer<vtkIntArray> MATERIAL = vtkSmartPointer<vtkIntArray>::New();

     
      int numberOfTriangles;
      
      numberOfTriangles = polyData->GetNumberOfCells();
  MATERIAL->SetNumberOfTuples(numberOfTriangles);
  MATERIAL->SetName("MATERIAL");
  MATERIAL->SetNumberOfComponents(1);
  
  vtkCellData* cellData = polyData->GetCellData();
  vtkDataArray* arrayData = cellData->GetScalars();
  
  
  
  // Assign some example integer values to each triangle
  for (auto i = 0; i < numberOfTriangles; ++i) {
  MATERIAL->InsertTuple1(i, (double)material);

  }
  
  
  
  // Add the attributes to the cell data
  polyData->GetCellData()->AddArray(MATERIAL);
  polyData->GetCellData()->SetActiveScalars("MATERIAL");
  std::cerr << "Array OK" << std::endl;  
  

      //polyData->GetCellData()->Modified();
      polyData->GetCellData()->GetArray("MATERIAL")->Modified();

for (vtkIdType i = 0; i < numberOfTriangles; ++i) {
std::cerr << "Tuple " << i << ": " << MATERIAL->GetTuple1(i) << std::endl;

```

FROM TERMINAL:

Tuple 152392: 9  
Tuple 152393: 9  
Tuple 152394: 9  
Tuple 152395: 9  
Tuple 152396: 9  
Tuple 152397: 9  
Tuple 152398: 9  
Tuple 152399: 9  
Tuple 152400: 9  
Tuple 152401: 9  
Tuple 152402: 9  
Tuple 152403: 9
