Thank you
vtkSmartPointer<vtkCellArray> polys = trianglePolyData->GetPolys();
vtkSmartPointer<vtkIntArray> materialArray = vtkIntArray::SafeDownCast(trianglePolyData->GetCellData()->GetArray("MATERIAL"));
vtkSmartPointer<vtkIntArray> bodiesArray = vtkIntArray::SafeDownCast(trianglePolyData->GetCellData()->GetArray("IBODY"));
if (!materialArray || !bodiesArray) {std::cerr << "Error: Missing scalar data." << std::endl;return {};}
int numTriangles = trianglePolyData->GetNumberOfCells();
std::vector<Triangle> h_triangles(numTriangles);
/////// SPM
std::cerr << "PRISMAMESH: No of Triangles: " << trianglePolyData->GetNumberOfCells()<< std::endl;
vtkSMPTools::For(0, numTriangles-1, [&](vtkIdType begin, vtkIdType end){
for (vtkIdType begin=0; begin < end ; ++begin) {
vtkSmartPointer<vtkIdList> pointIdList = vtkSmartPointer<vtkIdList>::New(); // Create vtkIdList
polys->GetCellAtId(begin, pointIdList);
int i = static_cast<int>(begin);
// Extract the points and store them in your custom structure
vtkIdType pointId0, pointId1, pointId2;
// Extract indices
pointId0 = pointIdList->GetId(0);
pointId1 = pointIdList->GetId(1);
pointId2 = pointIdList->GetId(2);
std::cerr << "PRISMAMESH: Cell Id: "<<i << std::endl;
h_triangles[i].triangle_id = static_cast<int64_t>(i);
vtkIdType pointIds[3]; double coordinates[3];
points->GetPoint(pointId0, coordinates);
h_triangles[i].p1x = static_cast<double>(coordinates[0]);
h_triangles[i].p1y = static_cast<double>(coordinates[1]);
h_triangles[i].p1z = static_cast<double>(coordinates[2]);
points->GetPoint(pointId1, coordinates);
h_triangles[i].p2x = static_cast<double>(coordinates[0]);
h_triangles[i].p2y = static_cast<double>(coordinates[1]);
h_triangles[i].p2z = static_cast<double>(coordinates[2]);
points->GetPoint(pointId2, coordinates);
h_triangles[i].p3x = static_cast<double>(coordinates[0]);
h_triangles[i].p3y = static_cast<double>(coordinates[1]);
h_triangles[i].p3z = static_cast<double>(coordinates[2]);
h_triangles[i].Material = static_cast<int>(materialArray->GetTuple1(i));
h_triangles[i].Body = static_cast<int>(bodiesArray->GetTuple1(i));
}
//}std::cerr << "Invalid loop bounds: begin = " << begin << ", end = " << end << std::endl;
return;});
std::cout << "Triangle List Ready ! "<< std::endl;