Somehow it offset the results and the values by 1
It works on a small scale (around 1000-2000 primitives), but with 100,000 prim it always crashes Houdini
//loop until got the largest primnumber with the same class attrib void performLoop(int class_attrib; int current_prim; int target_class; int result_array[]; int max_value) { int new_class_attrib = 0; do { current_prim += 1; push(result_array, current_prim); new_class_attrib = prim(0, 'class', current_prim); } while (new_class_attrib == target_class); max_value = current_prim; } int target_class = 0; int class_attrib = 0; for (int prim = 0; prim < @numprim; ++prim){ class_attrib = prim(0, 'class', prim); if (class_attrib == target_class) { int result_array[] = {}; int max_value = 0; performLoop(class_attrib, prim, target_class, result_array, max_value); foreach (int primnums; result_array){ setattrib(geoself(), 'prim', 'max_value', primnums, 0, max_value, 'set'); } prim = max_value; } else { target_class += 1; int max_value = 0; int result_array[] = {}; performLoop(class_attrib, prim, target_class, result_array, max_value); foreach (int primnums; result_array){ setattrib(geoself(), 'prim', 'max_value', primnums, 0, max_value, 'set'); } prim = max_value; } }