Issue with vtkPointDataToCellData filter with Categorical Data option

That is confusing. From this snippet, it looks as though the categorical data code path should be unreachable if there is no scalar array:

  if (this->CategoricalData == 1)
  {
    // If the categorical data flag is enabled, then a) there must be scalars
    // to treat as categorical data, and b) the scalars must have one component.
    if (!input->GetPointData()->GetScalars())
    {
      vtkDebugMacro(<<"No input scalars!");
      delete [] weights;
      return 1;
    }
    if (input->GetPointData()->GetScalars()->GetNumberOfComponents() != 1)
    {
      vtkDebugMacro(<<"Input scalars have more than one component! Cannot categorize!");
      delete [] weights;
      return 1;
    }

    // Set the scalar to interpolate via nearest neighbor. That way, we won't
    // get any false values (for example, a zone 4 cell appearing on the
    // boundary of zone 3 and zone 5).
    output->GetPointData()->SetCopyAttribute(vtkDataSetAttributes::SCALARS, 2,
                                             vtkDataSetAttributes::INTERPOLATE);
  }

Perhaps the filter is silently failing in your use case?

Looking at the code, I don’t think this is the case. If floating-point values are within VTK_EPSILON (defined in the source file as 1.e06, then they are treated as equivalent). I’m not saying that’s what the code should do, I’m saying that’s what it does (git blame says some guy named T.J. Corona wrote this in 2016, but I don’t remember what I had yesterday for lunch).