Я бы переписал это полностью.У вас есть пара проблем, которые вы хотите решить.Во-первых, вы хотите определить регион и посмотреть, находится ли точка в этом регионе.Вероятно, это должен быть один модуль с методом определения регионов и методом размещения точки в определенной области.При желании вы можете определить регионы в самом модуле или определить их на лету, в зависимости от того, что вам нужно.Это дало бы вам возможность передать имя или определение региона и точку одному методу и узнать, находится ли точка в этой области.Это было бы намного проще проверить.
Во-вторых, вы хотите определить значение материала: true или false, для каждого материала.Вы могли бы рассмотреть использование заявления случая для этого.Вы пишете метод, который возвращает значения для теста вашего региона (например: poly,: box, что угодно), а затем используете его в качестве теста для вашего оператора case:
case whatever(point)
when (:foo)
set some values
when (:bar)
set some other values
end
Если вы устанавливаете значение по умолчанию для каждого материалазначение в false (хороший план), тогда вам нужно будет только обновить истины, и будет легко, основываясь на возвращаемом значении вашего метода проверки региона, определить, какие значения должны быть истинными или могут быть истинными.
Разрыв кода таким или иным способом, значительно упростит тестирование.